From 02f4d9518378031c63df7a36c49d8b2eabdaab90 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Fri, 21 Aug 2020 22:49:39 +0800
Subject: [PATCH] add program folder

---
 program/cp_library/cp_dictionary.c             |  398 
 program/serial2socket/thread_mode/cp_socket.c  |  357 
 program/cp_library/cp_dictionary.h             |  165 
 program/serial2socket/thread_mode/cp_socket.h  |   65 
 program/cp_library/test/test_queue.c           |   84 
 program/cp_library/cp_array.h                  |   41 
 program/fwed/gpsd/gpsd.c                       |  211 
 program/cp_library/cp_klist.h                  |  723 
 program/cp_library/makefile                    |  107 
 program/fwed/gpsd/nmea_parse.h                 |   65 
 program/converterd/cp_logger.h                 |  111 
 program/fwed/gpsd/gpsd.h                       |   52 
 program/cp_library/cp_array.c                  |  168 
 program/cp_library/test/test_vector.c          |   67 
 program/cp_library/cp_iniparser.c              |  807 
 program/cp_library/test/test_klist.c           |   79 
 program/fwed/gpsd/nmea_parse.c                 |  681 
 program/cp_library/tags                        | 1322 
 program/cp_library/cp_iniparser.h              |  308 
 program/converterd/cp_logger.c                 |  433 
 program/cp_library/cp_string.c                 |  673 
 program/cp_library/cp_string.h                 |   86 
 program/cp_library/cp_fds.c                    |  633 
 program/cp_library/at91_ioctl.h                |   91 
 program/cp_library/cp_fds.h                    |  114 
 program/cp_library/cp_queue.c                  |  155 
 program/cp_library/cscope.out                  | 132502 ++++++++++++++++++++++++++++++++++++++++++++++++++
 program/cp_library/cp_queue.h                  |   49 
 program/cp_library/cp_atcmd.h                  |   68 
 program/cp_library/cp_atcmd.c                  |  668 
 program/fwed/makefile                          |  201 
 program/serial2socket/thread_mode/sp2sck.h     |   31 
 program/converterd/cvd_main.c                  |  309 
 program/converterd/cp_iniparser.h              |  308 
 program/converterd/makefile                    |  114 
 program/cp_library/cp_sock.h                   |  184 
 program/serial2socket/thread_mode/cp_comport.h |   67 
 program/cp_library/cp_sock.c                   |  854 
 program/unp/makefile                           |   79 
 program/converterd/cp_iniparser.c              |  807 
 program/cp_library/test/test_array.c           |   82 
 program/serial2socket/thread_mode/cp_comport.c |  600 
 program/cp_library/cp_common.h                 |   68 
 program/cp_library/test/test_sock_client.c     |  110 
 program/serial2socket/thread_mode/makefile     |   70 
 program/cp_library/cp_gprs.h                   |  126 
 program/fwed/zigd/makefile                     |   95 
 program/cp_library/cp_gprs.c                   |  705 
 program/fwed/gpsd/makefile                     |   95 
 program/cp_library/cp_proc.h                   |   42 
 program/converterd/cp_proc.c                   |  341 
 program/unp/socket_server_thread.c             |  272 
 program/converterd/cp_comport.c                |  600 
 program/cp_library/cp_proc.c                   |  341 
 program/cp_library/cp_time.h                   |  123 
 program/converterd/cp_comport.h                |   67 
 program/cp_library/test/test_hh.c              |   85 
 program/cp_library/cp_network.h                |   37 
 program/sqlite/build.sh                        |  124 
 program/cp_library/cp_gsmmux.h                 |   44 
 program/cp_library/test/swe_tpdud.c            |  360 
 program/converterd/cp_proc.h                   |   42 
 program/converterd/cp_dictionary.c             |  398 
 program/serial2socket/thread_mode/cp_proc.h    |   42 
 program/cp_library/test/sample.ini             |   11 
 program/cp_library/test/swe_tpdud.h            |   42 
 program/cp_library/cp_logger.h                 |  110 
 program/fwed/zigd/zigd.c                       |  152 
 program/fwed/zigd/zigd.h                       |   51 
 program/cp_library/cp_network.c                |  358 
 program/unp/test.sh                            |   10 
 program/fwed/gpsd/nmea_info.h                  |  234 
 program/cp_library/cp_logger.c                 |  420 
 program/sqlite/makefile                        |  123 
 program/converterd/cvd_main.h                  |   40 
 program/fwed/gpsd/nmea_info.c                  |  195 
 program/serial2socket/thread_mode/cp_logger.h  |  111 
 program/serial2socket/thread_mode/cp_proc.c    |  342 
 program/cp_library/test/test_logger.c          |   58 
 program/serial2socket/thread_mode/sp2sck.c     |  319 
 program/fwed/fwe_entry.h                       |   39 
 program/serial2socket/thread_mode/cp_logger.c  |  433 
 program/cp_library/test/test_ini.c             |   48 
 program/cp_library/cscope.in.out               |    0 
 program/fwed/fwe_entry.c                       |   96 
 program/converterd/cvd_conf.c                  |  121 
 program/cp_library/cp_ppp.c                    |  552 
 program/cp_library/cp_comport.h                |   67 
 program/converterd/cvd_conf.h                  |   31 
 program/cp_library/cp_comport.c                |  600 
 program/fwed/gsmd/makefile                     |   95 
 program/unp/socket_server_select.c             |  435 
 program/cp_library/cp_ringbuf.h                |   57 
 program/fwed/gsmd/gsmd.h                       |   43 
 program/cp_library/cp_ppp.h                    |  138 
 program/cp_library/cscope.po.out               |    0 
 program/cp_library/test/comport.c              |  238 
 program/fwed/gsmd/gsmd.c                       |  153 
 program/cp_library/cp_ringbuf.c                |  103 
 program/sqlite/test_sqlite.c                   |  150 
 program/cp_library/cp_hal.c                    |  257 
 program/cp_library/test/test_string.c          |   77 
 program/cp_library/cp_vector.c                 |   96 
 program/cp_library/test/test_hal.c             |  210 
 program/cp_library/cp_hal.h                    |   56 
 program/converterd/cp_socket.h                 |   40 
 program/unp/socket_client.c                    |  209 
 program/converterd/cp_socket.c                 |  252 
 program/cp_library/test/makefile               |  121 
 program/converterd/cp_dictionary.h             |  165 
 program/cp_library/test/test_sock_server.c     |   98 
 program/cp_library/cp_gsmmux.c                 |   75 
 program/cp_library/cp_vector.h                 |   40 
 program/fwed/etc/default_apn.conf              |  741 
 114 files changed, 157,518 insertions(+), 0 deletions(-)

diff --git a/program/converterd/cp_comport.c b/program/converterd/cp_comport.c
new file mode 100644
index 0000000..2aecafa
--- /dev/null
+++ b/program/converterd/cp_comport.c
@@ -0,0 +1,600 @@
+/*  ********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_comport.c
+ *    Description:  It's the comport operate library.
+ *                  
+ *        Version:  1.0.0(10/17/2011~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/17/2011 03:33:25 PM"
+ *                  
+ ********************************************************************************/
+
+#include    "cp_comport.h"
+
+/**************************************************************************************
+ *  Description: Set the comport structure
+ *   Input Args: dev_name:  The comport device name path, such as '/dev/ttyS3'
+ *               baudrate:  The baudrate, such as 115200
+ *               settings:  The databit,parity,stopbit,flowctrl settings, such as '8N1N'
+ *  Output Args: NONE
+ * Return Value: The COM_PORT structure pointer.
+ *************************************************************************************/
+COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings)
+{
+    COM_PORT *comport = NULL;
+    if (NULL == (comport = (COM_PORT *) malloc(sizeof(COM_PORT))))
+    {
+        return NULL;
+    }
+    memset(comport, 0, sizeof(COM_PORT));
+    comport->is_connted = 0;
+    comport->frag_size = 128;
+
+    strncpy(comport->dev_name, dev_name, DEVNAME_LEN);
+    comport->baudrate = baudrate;
+
+    set_settings(comport, settings);
+#ifdef  COM_DEBUG
+    disp_settings(comport);
+#endif
+
+    return comport;
+}
+
+#ifdef  COM_DEBUG
+void disp_settings(COM_PORT * comport)
+{
+    COM_PRINT("Device:\t\t\t\"%s\"\n", comport->dev_name);
+    COM_PRINT("Baudrate:\t\t%ld\n", comport->baudrate);
+    COM_PRINT("DataBit:\t\t\'%d\'\n", comport->databit);
+    switch (comport->parity)
+    {
+      case 0:
+          COM_PRINT("Parity:\t\t\t\'N\'\n");
+          break;
+      case 1:
+          COM_PRINT("Parity:\t\t\t\'O\'\n");
+          break;
+      case 2:
+          COM_PRINT("Parity:\t\t\t\'E\'\n");
+          break;
+      case 3:
+          COM_PRINT("Parity:\t\t\t\'S\'\n");
+          break;
+    }
+    COM_PRINT("StopBit:\t\t\'%ld\'\n", (long int)comport->stopbit);
+    switch (comport->flowctrl)
+    {
+      case 0:
+          COM_PRINT("FlowCtrl:\t\t\'N\'\n");
+          break;
+      case 1:
+          COM_PRINT("FlowCtrl:\t\t\'S\'\n");
+          break;
+      case 2:
+          COM_PRINT("FlowCtrl:\t\t\'H\'\n");
+          break;
+      case 3:
+          COM_PRINT("FlowCtrl:\t\t\'B\'\n");
+          break;
+    }
+    COM_PRINT("\n");
+    return;
+}
+#endif
+
+/**************************************************************************************
+ *  Description: Set the comport databit,parity,stopbit,flowctrl
+ *   Input Args: comport: the COM_PORT pointer
+ *               settings: The databit/parity/stopbit/flowctrl settings as like "8N1N" 
+ *  Output Args: NONE
+ * Return Value: NONE
+ *************************************************************************************/
+void set_settings(COM_PORT * comport, const char *settings)
+{
+    if(NULL==settings || NULL==comport)
+        return ;
+
+    switch (settings[0])        /* data bit */
+    {
+      case '7':
+          comport->databit = 7;
+          break;
+      case '8':
+      default:
+          comport->databit = 8;
+          break;
+    }
+
+    switch (settings[1])        /* parity */
+    {
+      case 'O':
+      case 'o':
+          comport->parity = 1;
+          break;
+      case 'E':
+      case 'e':
+          comport->parity = 2;
+          break;
+      case 'S':
+      case 's':
+          comport->parity = 3;
+          break;
+      case 'N':
+      case 'n':
+      default:
+          comport->parity = 0;
+          break;
+    }
+
+    switch (settings[2])        /* stop bit */
+    {
+      case '0':
+          comport->stopbit = 0;
+          break;
+      case '1':
+      default:
+          comport->stopbit = 1;
+          break;
+    }
+
+    switch (settings[3])        /* flow control */
+    {
+      case 'S':
+      case 's':
+          comport->flowctrl = 1;
+          break;
+      case 'H':
+      case 'h':
+          comport->flowctrl = 2;
+          break;
+      case 'B':
+      case 'b':
+          comport->flowctrl = 3;
+          break;
+      case 'N':
+      case 'n':
+      default:
+          comport->flowctrl = 0;
+          break;
+    }
+}
+
+void comport_close(COM_PORT * comport)
+{
+    if (0 != comport->fd)
+    {
+        COM_PRINT("Close device \"%s\"\n", comport->dev_name);
+        close(comport->fd);
+    }
+    comport->is_connted = 0x00;
+    comport->fd = -1;
+}
+
+void comport_term(COM_PORT * comport)
+{
+    if(NULL == comport)
+        return;
+
+    if (0 != comport->fd)
+    {
+        comport_close(comport);
+    }
+    memset(comport, 0x00, sizeof(COM_PORT)); 
+    free(comport);
+    comport = NULL;
+
+    return;
+}
+
+int comport_open(COM_PORT * comport)
+{
+    int retval = -1;
+    struct termios old_cfg, new_cfg;
+    int old_flags;
+    long tmp;
+
+    if(NULL==comport)
+        return -1;
+
+    comport_close(comport);
+
+
+    /* Not a TTY device */
+    if( !strstr(comport->dev_name, "tty"))
+    {
+        COM_PRINT("Open Not tty device \"%s\"\n", comport->dev_name);
+        comport->fd = open(comport->dev_name, O_RDWR);
+        retval = comport->fd<0 ? -2 : comport->fd;
+        goto CleanUp;
+    }
+
+    comport->fd = open(comport->dev_name, O_RDWR | O_NOCTTY | O_NONBLOCK);
+    if (comport->fd < 0)
+    {
+        retval = -3;
+        goto CleanUp;
+    }
+    COM_PRINT("Open device \"%s\"\n", comport->dev_name);
+
+    if ((-1 != (old_flags = fcntl(comport->fd, F_GETFL, 0)))
+        && (-1 != fcntl(comport->fd, F_SETFL, old_flags & ~O_NONBLOCK)))
+    {
+        // Flush input and output
+        if (-1 == tcflush(comport->fd, TCIOFLUSH))
+        {
+            retval = -4;
+            goto CleanUp;
+        }
+    }
+    else                        // Failure
+    {
+        retval = -5;
+        goto CleanUp;
+    }
+
+    if (0 != tcgetattr(comport->fd, &old_cfg))
+    {
+        retval = -6;          // Failed to get Com settings  
+        goto CleanUp;
+    }
+
+    memset(&new_cfg, 0, sizeof(new_cfg));
+
+    /*=====================================*/
+    /*       Configure comport         */
+    /*=====================================*/
+
+    new_cfg.c_cflag &= ~CSIZE;
+    new_cfg.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
+    new_cfg.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+    new_cfg.c_oflag &= ~(OPOST);
+
+    /* Set the data bit */
+    switch (comport->databit)
+    {
+      case 0x07:
+          new_cfg.c_cflag |= CS7;
+          break;
+      case 0x06:
+          new_cfg.c_cflag |= CS6;
+          break;
+      case 0x05:
+          new_cfg.c_cflag |= CS5;
+          break;
+      default:
+          new_cfg.c_cflag |= CS8;
+          break;
+    }
+
+    /* Set the parity */
+    switch (comport->parity)
+    {
+      case 0x01:               // Odd  
+          new_cfg.c_cflag |= (PARENB | PARODD);
+          new_cfg.c_cflag |= (INPCK | ISTRIP);
+          break;
+      case 0x02:               // Even 
+          new_cfg.c_cflag |= PARENB;
+          new_cfg.c_cflag &= ~PARODD;;
+          new_cfg.c_cflag |= (INPCK | ISTRIP);
+          break;
+      case 0x03:
+          new_cfg.c_cflag &= ~PARENB;
+          new_cfg.c_cflag &= ~CSTOPB;
+          break;
+      default:
+          new_cfg.c_cflag &= ~PARENB;
+    }
+
+    /* Set Stop bit */
+    if (0x01 != comport->stopbit)
+    {
+        new_cfg.c_cflag |= CSTOPB;
+    }
+    else
+    {
+        new_cfg.c_cflag &= ~CSTOPB;
+    }
+
+    /* Set flow control */
+    switch (comport->flowctrl)
+    {
+      case 1:                  // Software control 
+      case 3:
+          new_cfg.c_cflag &= ~(CRTSCTS);
+          new_cfg.c_iflag |= (IXON | IXOFF);
+          break;
+      case 2:                  // Hardware control
+          new_cfg.c_cflag |= CRTSCTS;   // Also called CRTSCTS
+          new_cfg.c_iflag &= ~(IXON | IXOFF);
+          break;
+      default:                 // NONE
+          new_cfg.c_cflag &= ~(CRTSCTS);
+          new_cfg.c_iflag &= ~(IXON | IXOFF);
+          break;
+    }
+
+    /* Set baudrate */
+    switch (comport->baudrate)
+    {
+      case 115200:
+          tmp = B115200;
+          break;
+      case 57600:
+          tmp = B57600;
+          break;
+      case 38400:
+          tmp = B38400;
+          break;
+      case 19200:
+          tmp = B19200;
+          break;
+      case 9600:
+          tmp = B9600;
+          break;
+      case 4800:
+          tmp = B4800;
+          break;
+      case 2400:
+          tmp = B2400;
+          break;
+      case 1800:
+          tmp = B1800;
+          break;
+      case 1200:
+          tmp = B1200;
+          break;
+      case 600:
+          tmp = B600;
+          break;
+      case 300:
+          tmp = B300;
+          break;
+      case 200:
+          tmp = B200;
+          break;
+      case 150:
+          tmp = B150;
+          break;
+      case 134:
+          tmp = B134;
+          break;
+      case 110:
+          tmp = B110;
+          break;
+      case 75:
+          tmp = B75;
+          break;
+      case 50:
+          tmp = B50;
+          break;
+      default:
+          tmp = B115200;
+    }
+    cfsetispeed(&new_cfg, tmp);
+    cfsetispeed(&new_cfg, tmp);
+
+    /* Set the Com port timeout settings */
+    new_cfg.c_cc[VMIN] = 0;
+    new_cfg.c_cc[VTIME] = 0;
+
+    tcflush(comport->fd, TCIFLUSH);
+    if (0 != tcsetattr(comport->fd, TCSANOW, &new_cfg))
+    {
+        retval = -7;          // Failed to set device com port settings   
+        goto CleanUp;
+    }
+
+    COM_PRINT("Connected device \"%s\".\n", comport->dev_name);
+    comport->is_connted = 0x01;
+    retval = comport->fd;
+
+CleanUp:
+    COM_PRINT("Open device \"%s\" %s.\n", comport->dev_name, retval>0 ? "successfully" : "failure");
+    return retval;
+}
+
+void nonblock()
+{
+    struct termios ttystate;
+
+    //get the terminal state
+    tcgetattr(STDIN_FILENO, &ttystate);
+
+    //turn off canonical mode
+    ttystate.c_lflag &= ~ICANON;
+    //minimum of number input read.
+    ttystate.c_cc[VMIN] = 1;
+
+    //set the terminal attributes.
+    tcsetattr(STDIN_FILENO, TCSANOW, &ttystate);
+}
+
+int kbhit()
+{
+    struct timeval tv;
+    fd_set fds;
+    tv.tv_sec = 0;
+    tv.tv_usec = 0;
+    FD_ZERO(&fds);
+    FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0
+    select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv);
+    return FD_ISSET(STDIN_FILENO, &fds);
+}
+
+int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout)
+{
+    int retval = 0;             // Function return value
+    int iRet;
+    fd_set stReadFds, stExcpFds;
+    struct timeval stTime;
+
+    if (NULL == buf || 0 >= buf_size)
+    {
+        COM_PRINT("%s() usage error.\n", __FUNCTION__);
+        retval = -1;
+        goto CleanUp;
+    }
+
+    if (0x01 != comport->is_connted)
+    {
+        COM_PRINT("%s() comport not connected.\n", __FUNCTION__);
+        retval = -2;
+        goto CleanUp;
+    }
+
+    //printf("bufsize=%d timeout=%lu\n", buf_size, timeout);
+
+    FD_ZERO(&stReadFds);
+    FD_ZERO(&stExcpFds);
+    FD_SET(comport->fd, &stReadFds);
+    FD_SET(comport->fd, &stExcpFds);
+
+    if (0xFFFFFFFF != timeout)
+    {
+        stTime.tv_sec = (time_t) (timeout / 1000);
+        stTime.tv_usec = (long)(1000 * (timeout % 1000));
+
+        iRet = select(comport->fd + 1, &stReadFds, 0, &stExcpFds, &stTime);
+        if (0 == iRet)
+        {
+            retval = 0;         // No data in Com port buffer
+            goto CleanUp;
+        }
+        else if (0 < iRet)
+        {
+            if (0 != FD_ISSET(comport->fd, &stExcpFds))
+            {
+                retval = -6;  // Error during checking recv status    
+                COM_PRINT("Error checking recv status.\n");
+                goto CleanUp;
+            }
+
+            if (0 == FD_ISSET(comport->fd, &stReadFds))
+            {
+                retval = 0;  // No incoming data 
+                COM_PRINT("No incoming data.\n");
+                goto CleanUp;
+            }
+        }
+        else
+        {
+            if (EINTR == errno)
+            {
+                COM_PRINT("catch interrupt signal.\n");
+                retval = 0;  // Interrupted signal catched
+            }
+            else
+            {
+                COM_PRINT("Check recv status failure.\n");
+                retval = -7;  // Error during checking recv status
+            }
+
+            goto CleanUp;
+        }
+    }
+
+    usleep(10000); /* sleep for 10ms for data incoming */
+
+    // Get data from Com port
+    iRet = read(comport->fd, buf, buf_size);
+    if (0 > iRet)
+    {
+        if (EINTR == errno)
+            retval = 0;      // Interrupted signal catched
+        else
+            retval = -3;      // Failed to read Com port
+
+        goto CleanUp;
+    }
+
+#if 0
+    {
+        int   i=0;
+        printf("Receive %d bytes data: \n", iRet);
+        for(i=0; i<iRet; i++)
+        {
+            printf("0x%02x ", buf[i]);
+        }
+        printf("\n");
+    }
+#endif
+
+    retval = iRet;
+
+  CleanUp:
+    return retval;
+
+}
+
+int comport_send(COM_PORT * comport, char *buf, int send_bytes)
+{
+    char *ptr, *end;
+    int retval = 0;
+    int send = 0;
+
+    if (NULL == buf || 0 >= send_bytes)
+    {
+        COM_PRINT("%s() Usage error.\n", __FUNCTION__);
+        retval = -1;
+        goto CleanUp;
+    }
+
+    if (0x01 != comport->is_connted)    // Comport not opened ?
+    {
+        retval = -3;
+        COM_PRINT("Serail not connected.\n");
+        goto CleanUp;
+    }
+
+    //printf("Send %s with %d bytes.\n", buf, send_bytes);
+
+    // Large data, then slice them and send
+    if (comport->frag_size < send_bytes)
+    {
+        ptr = buf;
+        end = buf + send_bytes;
+
+        do
+        {
+            // Large than frag_size
+            if (comport->frag_size < (end - ptr))
+            {
+                send = write(comport->fd, ptr, comport->frag_size);
+                if (0 >= send || comport->frag_size != send)
+                {
+                    retval = -4;
+                    goto CleanUp;
+                }
+                ptr += comport->frag_size;
+            }
+            else                // Less than frag_size, maybe last fragmention.
+            {
+                send = write(comport->fd, ptr, (end - ptr));
+                if (0 >= send || (end - ptr) != send)
+                {
+                    retval = -4;
+                    goto CleanUp;
+                }
+                ptr += (end - ptr);
+            }
+        }
+        while (ptr < end);
+    }
+    else                        // The send data is not large than a fragmention.
+    {
+        send = write(comport->fd, buf, send_bytes);
+        if (0 >= send || send_bytes != send)
+        {
+            retval = -5;
+            goto CleanUp;
+        }
+    }
+
+  CleanUp:
+    return retval;
+}
+
diff --git a/program/converterd/cp_comport.h b/program/converterd/cp_comport.h
new file mode 100644
index 0000000..4dea2f1
--- /dev/null
+++ b/program/converterd/cp_comport.h
@@ -0,0 +1,67 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_comport.h
+ *    Description:  This head file is for the common TTY/Serial port operator library 
+ *                   
+ *        Version:  1.0.0(10/17/2011~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/17/2011 03:33:25 PM"
+ *                     
+ ********************************************************************************/
+#ifndef  _CP_COMPORT_H
+#define  _CP_COMPORT_H
+
+#include  <stdio.h>
+#include  <stdlib.h>
+#include  <unistd.h>
+#include  <string.h>
+#include  <getopt.h>
+#include  <fcntl.h>
+#include  <errno.h>
+#include  <termios.h>
+#include  <sys/stat.h>
+#include  <sys/wait.h>
+#include  <sys/types.h>
+#include  <sys/stat.h>
+#include  <sys/select.h>
+
+#define BUF_64  64
+
+#ifndef DEVNAME_LEN
+#define DEVNAME_LEN          64
+#endif
+
+//#define COM_DEBUG
+#ifdef  COM_DEBUG
+#define COM_PRINT(format,args...) printf(format, ##args)
+#else
+#define COM_PRINT(format,args...) do{} while(0);
+#endif
+
+//#define msleep(m)               {struct timespec cSleep; cSleep.tv_sec = 0; cSleep.tv_nsec = m * 1000; nanosleep(&cSleep, 0);}
+
+typedef struct __COM_PORT
+{
+    unsigned char databit, parity, stopbit, flowctrl, is_connted;
+    char dev_name[DEVNAME_LEN];
+    unsigned char  used;     /* This comport used or not now */
+    int fd;
+    int frag_size;
+    long baudrate;
+} COM_PORT;
+
+COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings);
+void comport_close(COM_PORT * comport);
+int comport_open(COM_PORT * comport);
+void comport_term(COM_PORT * comport);
+int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout);
+int comport_send(COM_PORT * comport, char *buf, int send_bytes);
+
+void set_settings(COM_PORT * comport, const char *settings);
+void disp_settings(COM_PORT * comport);
+void nonblock();
+int kbhit();
+
+#endif
diff --git a/program/converterd/cp_dictionary.c b/program/converterd/cp_dictionary.c
new file mode 100644
index 0000000..96fb783
--- /dev/null
+++ b/program/converterd/cp_dictionary.c
@@ -0,0 +1,398 @@
+/*-------------------------------------------------------------------------*/
+/**
+   @file    cp_dictionary.c
+   @author  N. Devillard
+   @brief   Implements a dictionary for string variables.
+
+   This module implements a simple dictionary object, i.e. a list
+   of string/string associations. This object is useful to store e.g.
+   informations retrieved from a configuration file (ini files).
+*/
+/*--------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------
+                                Includes
+ ---------------------------------------------------------------------------*/
+#include "cp_dictionary.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/** Maximum value size for integers and doubles. */
+#define MAXVALSZ    1024
+
+/** Minimal allocated number of entries in a dictionary */
+#define DICTMINSZ   128
+
+/** Invalid key token */
+#define DICT_INVALID_KEY    ((char*)-1)
+
+/*---------------------------------------------------------------------------
+                            Private functions
+ ---------------------------------------------------------------------------*/
+
+/* Doubles the allocated size associated to a pointer */
+/* 'size' is the current allocated size. */
+static void * mem_double(void * ptr, int size)
+{
+    void * newptr ;
+ 
+    newptr = calloc(2*size, 1);
+    if (newptr==NULL) {
+        return NULL ;
+    }
+    memcpy(newptr, ptr, size);
+    free(ptr);
+    return newptr ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Duplicate a string
+  @param    s String to duplicate
+  @return   Pointer to a newly allocated string, to be freed with free()
+
+  This is a replacement for strdup(). This implementation is provided
+  for systems that do not have it.
+ */
+/*--------------------------------------------------------------------------*/
+static char * xstrdup(const char * s)
+{
+    char * t ;
+    if (!s)
+        return NULL ;
+    t = (char*)malloc(strlen(s)+1) ;
+    if (t) {
+        strcpy(t,s);
+    }
+    return t ;
+}
+
+/*---------------------------------------------------------------------------
+                            Function codes
+ ---------------------------------------------------------------------------*/
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Compute the hash key for a string.
+  @param    key     Character string to use for key.
+  @return   1 unsigned int on at least 32 bits.
+
+  This hash function has been taken from an Article in Dr Dobbs Journal.
+  This is normally a collision-free function, distributing keys evenly.
+  The key is stored anyway in the struct so that collision can be avoided
+  by comparing the key itself in last resort.
+ */
+/*--------------------------------------------------------------------------*/
+unsigned dictionary_hash(const char * key)
+{
+    int         len ;
+    unsigned    hash ;
+    int         i ;
+
+    len = strlen(key);
+    for (hash=0, i=0 ; i<len ; i++) {
+        hash += (unsigned)key[i] ;
+        hash += (hash<<10);
+        hash ^= (hash>>6) ;
+    }
+    hash += (hash <<3);
+    hash ^= (hash >>11);
+    hash += (hash <<15);
+    return hash ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Create a new dictionary object.
+  @param    size    Optional initial size of the dictionary.
+  @return   1 newly allocated dictionary objet.
+
+  This function allocates a new dictionary object of given size and returns
+  it. If you do not know in advance (roughly) the number of entries in the
+  dictionary, give size=0.
+ */
+/*--------------------------------------------------------------------------*/
+dictionary * dictionary_new(int size)
+{
+    dictionary  *   d ;
+
+    /* If no size was specified, allocate space for DICTMINSZ */
+    if (size<DICTMINSZ) size=DICTMINSZ ;
+
+    if (!(d = (dictionary *)calloc(1, sizeof(dictionary)))) {
+        return NULL;
+    }
+    d->size = size ;
+    d->val  = (char **)calloc(size, sizeof(char*));
+    d->key  = (char **)calloc(size, sizeof(char*));
+    d->hash = (unsigned int *)calloc(size, sizeof(unsigned));
+    return d ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete a dictionary object
+  @param    d   dictionary object to deallocate.
+  @return   void
+
+  Deallocate a dictionary object and all memory associated to it.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_del(dictionary * d)
+{
+    int     i ;
+
+    if (d==NULL) return ;
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]!=NULL)
+            free(d->key[i]);
+        if (d->val[i]!=NULL)
+            free(d->val[i]);
+    }
+    free(d->val);
+    free(d->key);
+    free(d->hash);
+    free(d);
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get a value from a dictionary.
+  @param    d       dictionary object to search.
+  @param    key     Key to look for in the dictionary.
+  @param    def     Default value to return if key not found.
+  @return   1 pointer to internally allocated character string.
+
+  This function locates a key in a dictionary and returns a pointer to its
+  value, or the passed 'def' pointer if no such key can be found in
+  dictionary. The returned character pointer points to data internal to the
+  dictionary object, you should not try to free it or modify it.
+ */
+/*--------------------------------------------------------------------------*/
+char * dictionary_get(dictionary * d, const char * key, char * def)
+{
+    unsigned    hash ;
+    int         i ;
+
+    hash = dictionary_hash(key);
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        /* Compare hash */
+        if (hash==d->hash[i]) {
+            /* Compare string, to avoid hash collisions */
+            if (!strcmp(key, d->key[i])) {
+                return d->val[i] ;
+            }
+        }
+    }
+    return def ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Set a value in a dictionary.
+  @param    d       dictionary object to modify.
+  @param    key     Key to modify or add.
+  @param    val     Value to add.
+  @return   int     0 if Ok, anything else otherwise
+
+  If the given key is found in the dictionary, the associated value is
+  replaced by the provided one. If the key cannot be found in the
+  dictionary, it is added to it.
+
+  It is Ok to provide a NULL value for val, but NULL values for the dictionary
+  or the key are considered as errors: the function will return immediately
+  in such a case.
+
+  Notice that if you dictionary_set a variable to NULL, a call to
+  dictionary_get will return a NULL value: the variable will be found, and
+  its value (NULL) is returned. In other words, setting the variable
+  content to NULL is equivalent to deleting the variable from the
+  dictionary. It is not possible (in this implementation) to have a key in
+  the dictionary without value.
+
+  This function returns non-zero in case of failure.
+ */
+/*--------------------------------------------------------------------------*/
+int dictionary_set(dictionary * d, const char * key, const char * val)
+{
+    int         i ;
+    unsigned    hash ;
+
+    if (d==NULL || key==NULL) return -1 ;
+    
+    /* Compute hash for this key */
+    hash = dictionary_hash(key) ;
+    /* Find if value is already in dictionary */
+    if (d->n>0) {
+        for (i=0 ; i<d->size ; i++) {
+            if (d->key[i]==NULL)
+                continue ;
+            if (hash==d->hash[i]) { /* Same hash value */
+                if (!strcmp(key, d->key[i])) {   /* Same key */
+                    /* Found a value: modify and return */
+                    if (d->val[i]!=NULL)
+                        free(d->val[i]);
+                    d->val[i] = val ? xstrdup(val) : NULL ;
+                    /* Value has been modified: return */
+                    return 0 ;
+                }
+            }
+        }
+    }
+    /* Add a new value */
+    /* See if dictionary needs to grow */
+    if (d->n==d->size) {
+
+        /* Reached maximum size: reallocate dictionary */
+        d->val  = (char **)mem_double(d->val,  d->size * sizeof(char*)) ;
+        d->key  = (char **)mem_double(d->key,  d->size * sizeof(char*)) ;
+        d->hash = (unsigned int *)mem_double(d->hash, d->size * sizeof(unsigned)) ;
+        if ((d->val==NULL) || (d->key==NULL) || (d->hash==NULL)) {
+            /* Cannot grow dictionary */
+            return -1 ;
+        }
+        /* Double size */
+        d->size *= 2 ;
+    }
+
+    /* Insert key in the first empty slot. Start at d->n and wrap at
+       d->size. Because d->n < d->size this will necessarily
+       terminate. */
+    for (i=d->n ; d->key[i] ; ) {
+        if(++i == d->size) i = 0;
+    }
+    /* Copy key */
+    d->key[i]  = xstrdup(key);
+    d->val[i]  = val ? xstrdup(val) : NULL ;
+    d->hash[i] = hash;
+    d->n ++ ;
+    return 0 ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete a key in a dictionary
+  @param    d       dictionary object to modify.
+  @param    key     Key to remove.
+  @return   void
+
+  This function deletes a key in a dictionary. Nothing is done if the
+  key cannot be found.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_unset(dictionary * d, const char * key)
+{
+    unsigned    hash ;
+    int         i ;
+
+    if (key == NULL) {
+        return;
+    }
+
+    hash = dictionary_hash(key);
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        /* Compare hash */
+        if (hash==d->hash[i]) {
+            /* Compare string, to avoid hash collisions */
+            if (!strcmp(key, d->key[i])) {
+                /* Found key */
+                break ;
+            }
+        }
+    }
+    if (i>=d->size)
+        /* Key not found */
+        return ;
+
+    free(d->key[i]);
+    d->key[i] = NULL ;
+    if (d->val[i]!=NULL) {
+        free(d->val[i]);
+        d->val[i] = NULL ;
+    }
+    d->hash[i] = 0 ;
+    d->n -- ;
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dump a dictionary to an opened file pointer.
+  @param    d   Dictionary to dump
+  @param    f   Opened file pointer.
+  @return   void
+
+  Dumps a dictionary onto an opened file pointer. Key pairs are printed out
+  as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as
+  output file pointers.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_dump(dictionary * d, FILE * out)
+{
+    int     i ;
+
+    if (d==NULL || out==NULL) return ;
+    if (d->n<1) {
+        fprintf(out, "empty dictionary\n");
+        return ;
+    }
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]) {
+            fprintf(out, "%20s\t[%s]\n",
+                    d->key[i],
+                    d->val[i] ? d->val[i] : "UNDEF");
+        }
+    }
+    return ;
+}
+
+
+/* Test code */
+#ifdef TESTDIC
+#define NVALS 20000
+int main(int argc, char *argv[])
+{
+    dictionary  *   d ;
+    char    *   val ;
+    int         i ;
+    char        cval[90] ;
+
+    /* Allocate dictionary */
+    printf("allocating...\n");
+    d = dictionary_new(0);
+    
+    /* Set values in dictionary */
+    printf("setting %d values...\n", NVALS);
+    for (i=0 ; i<NVALS ; i++) {
+        sprintf(cval, "%04d", i);
+        dictionary_set(d, cval, "salut");
+    }
+    printf("getting %d values...\n", NVALS);
+    for (i=0 ; i<NVALS ; i++) {
+        sprintf(cval, "%04d", i);
+        val = dictionary_get(d, cval, DICT_INVALID_KEY);
+        if (val==DICT_INVALID_KEY) {
+            printf("cannot get value for key [%s]\n", cval);
+        }
+    }
+    printf("unsetting %d values...\n", NVALS);
+    for (i=0 ; i<NVALS ; i++) {
+        sprintf(cval, "%04d", i);
+        dictionary_unset(d, cval);
+    }
+    if (d->n != 0) {
+        printf("error deleting values\n");
+    }
+    printf("deallocating...\n");
+    dictionary_del(d);
+    return 0 ;
+}
+#endif
+/* vim: set ts=4 et sw=4 tw=75 */
diff --git a/program/converterd/cp_dictionary.h b/program/converterd/cp_dictionary.h
new file mode 100644
index 0000000..70fd42c
--- /dev/null
+++ b/program/converterd/cp_dictionary.h
@@ -0,0 +1,165 @@
+
+/*-------------------------------------------------------------------------*/
+/**
+   @file    cp_dictionary.h
+   @author  N. Devillard
+   @brief   Implements a dictionary for string variables.
+
+   This module implements a simple dictionary object, i.e. a list
+   of string/string associations. This object is useful to store e.g.
+   informations retrieved from a configuration file (ini files).
+*/
+/*--------------------------------------------------------------------------*/
+
+#ifndef _CP_DICTIONARY_H_
+#define _CP_DICTIONARY_H_
+
+/*---------------------------------------------------------------------------
+                                Includes
+ ---------------------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/*---------------------------------------------------------------------------
+                                New types
+ ---------------------------------------------------------------------------*/
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dictionary object
+
+  This object contains a list of string/string associations. Each
+  association is identified by a unique string key. Looking up values
+  in the dictionary is speeded up by the use of a (hopefully collision-free)
+  hash function.
+ */
+/*-------------------------------------------------------------------------*/
+typedef struct _dictionary_ {
+    int             n ;     /** Number of entries in dictionary */
+    int             size ;  /** Storage size */
+    char        **  val ;   /** List of string values */
+    char        **  key ;   /** List of string keys */
+    unsigned     *  hash ;  /** List of hash values for keys */
+} dictionary ;
+
+
+/*---------------------------------------------------------------------------
+                            Function prototypes
+ ---------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Compute the hash key for a string.
+  @param    key     Character string to use for key.
+  @return   1 unsigned int on at least 32 bits.
+
+  This hash function has been taken from an Article in Dr Dobbs Journal.
+  This is normally a collision-free function, distributing keys evenly.
+  The key is stored anyway in the struct so that collision can be avoided
+  by comparing the key itself in last resort.
+ */
+/*--------------------------------------------------------------------------*/
+unsigned dictionary_hash(const char * key);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Create a new dictionary object.
+  @param    size    Optional initial size of the dictionary.
+  @return   1 newly allocated dictionary objet.
+
+  This function allocates a new dictionary object of given size and returns
+  it. If you do not know in advance (roughly) the number of entries in the
+  dictionary, give size=0.
+ */
+/*--------------------------------------------------------------------------*/
+dictionary * dictionary_new(int size);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete a dictionary object
+  @param    d   dictionary object to deallocate.
+  @return   void
+
+  Deallocate a dictionary object and all memory associated to it.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_del(dictionary * vd);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get a value from a dictionary.
+  @param    d       dictionary object to search.
+  @param    key     Key to look for in the dictionary.
+  @param    def     Default value to return if key not found.
+  @return   1 pointer to internally allocated character string.
+
+  This function locates a key in a dictionary and returns a pointer to its
+  value, or the passed 'def' pointer if no such key can be found in
+  dictionary. The returned character pointer points to data internal to the
+  dictionary object, you should not try to free it or modify it.
+ */
+/*--------------------------------------------------------------------------*/
+char * dictionary_get(dictionary * d, const char * key, char * def);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Set a value in a dictionary.
+  @param    d       dictionary object to modify.
+  @param    key     Key to modify or add.
+  @param    val     Value to add.
+  @return   int     0 if Ok, anything else otherwise
+
+  If the given key is found in the dictionary, the associated value is
+  replaced by the provided one. If the key cannot be found in the
+  dictionary, it is added to it.
+
+  It is Ok to provide a NULL value for val, but NULL values for the dictionary
+  or the key are considered as errors: the function will return immediately
+  in such a case.
+
+  Notice that if you dictionary_set a variable to NULL, a call to
+  dictionary_get will return a NULL value: the variable will be found, and
+  its value (NULL) is returned. In other words, setting the variable
+  content to NULL is equivalent to deleting the variable from the
+  dictionary. It is not possible (in this implementation) to have a key in
+  the dictionary without value.
+
+  This function returns non-zero in case of failure.
+ */
+/*--------------------------------------------------------------------------*/
+int dictionary_set(dictionary * vd, const char * key, const char * val);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete a key in a dictionary
+  @param    d       dictionary object to modify.
+  @param    key     Key to remove.
+  @return   void
+
+  This function deletes a key in a dictionary. Nothing is done if the
+  key cannot be found.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_unset(dictionary * d, const char * key);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dump a dictionary to an opened file pointer.
+  @param    d   Dictionary to dump
+  @param    f   Opened file pointer.
+  @return   void
+
+  Dumps a dictionary onto an opened file pointer. Key pairs are printed out
+  as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as
+  output file pointers.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_dump(dictionary * d, FILE * out);
+
+#endif
diff --git a/program/converterd/cp_iniparser.c b/program/converterd/cp_iniparser.c
new file mode 100644
index 0000000..b18cf84
--- /dev/null
+++ b/program/converterd/cp_iniparser.c
@@ -0,0 +1,807 @@
+
+/*-------------------------------------------------------------------------*/
+/**
+   @file    cp_iniparser.c
+   @author  N. Devillard
+   @brief   Parser for ini files.
+*/
+/*--------------------------------------------------------------------------*/
+/*---------------------------- Includes ------------------------------------*/
+#include <ctype.h>
+#include "cp_iniparser.h"
+
+/*---------------------------- Defines -------------------------------------*/
+#define ASCIILINESZ         (1024)
+#define INI_INVALID_KEY     ((char*)-1)
+
+/*---------------------------------------------------------------------------
+                        Private to this module
+ ---------------------------------------------------------------------------*/
+/**
+ * This enum stores the status for each parsed line (internal use only).
+ */
+typedef enum _line_status_ {
+    LINE_UNPROCESSED,
+    LINE_ERROR,
+    LINE_EMPTY,
+    LINE_COMMENT,
+    LINE_SECTION,
+    LINE_VALUE
+} line_status ;
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Convert a string to lowercase.
+  @param    s   String to convert.
+  @return   ptr to statically allocated string.
+
+  This function returns a pointer to a statically allocated string
+  containing a lowercased version of the input string. Do not free
+  or modify the returned string! Since the returned string is statically
+  allocated, it will be modified at each function call (not re-entrant).
+ */
+/*--------------------------------------------------------------------------*/
+static char * strlwc(const char * s)
+{
+    static char l[ASCIILINESZ+1];
+    int i ;
+
+    if (s==NULL) return NULL ;
+    memset(l, 0, ASCIILINESZ+1);
+    i=0 ;
+    while (s[i] && i<ASCIILINESZ) {
+        l[i] = (char)tolower((int)s[i]);
+        i++ ;
+    }
+    l[ASCIILINESZ]=(char)0;
+    return l ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Remove blanks at the beginning and the end of a string.
+  @param    s   String to parse.
+  @return   ptr to statically allocated string.
+
+  This function returns a pointer to a statically allocated string,
+  which is identical to the input string, except that all blank
+  characters at the end and the beg. of the string have been removed.
+  Do not free or modify the returned string! Since the returned string
+  is statically allocated, it will be modified at each function call
+  (not re-entrant).
+ */
+/*--------------------------------------------------------------------------*/
+static char * strstrip(const char * s)
+{
+    static char l[ASCIILINESZ+1];
+    char * last ;
+    
+    if (s==NULL) return NULL ;
+    
+    while (isspace((int)*s) && *s) s++;
+    memset(l, 0, ASCIILINESZ+1);
+    strcpy(l, s);
+    last = l + strlen(l);
+    while (last > l) {
+        if (!isspace((int)*(last-1)))
+            break ;
+        last -- ;
+    }
+    *last = (char)0;
+    return (char*)l ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get number of sections in a dictionary
+  @param    d   Dictionary to examine
+  @return   int Number of sections found in dictionary
+
+  This function returns the number of sections found in a dictionary.
+  The test to recognize sections is done on the string stored in the
+  dictionary: a section name is given as "section" whereas a key is
+  stored as "section:key", thus the test looks for entries that do not
+  contain a colon.
+
+  This clearly fails in the case a section name contains a colon, but
+  this should simply be avoided.
+
+  This function returns -1 in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getnsec(dictionary * d)
+{
+    int i ;
+    int nsec ;
+
+    if (d==NULL) return -1 ;
+    nsec=0 ;
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        if (strchr(d->key[i], ':')==NULL) {
+            nsec ++ ;
+        }
+    }
+    return nsec ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get name for section n in a dictionary.
+  @param    d   Dictionary to examine
+  @param    n   Section number (from 0 to nsec-1).
+  @return   Pointer to char string
+
+  This function locates the n-th section in a dictionary and returns
+  its name as a pointer to a string statically allocated inside the
+  dictionary. Do not free or modify the returned string!
+
+  This function returns NULL in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+char * iniparser_getsecname(dictionary * d, int n)
+{
+    int i ;
+    int foundsec ;
+
+    if (d==NULL || n<0) return NULL ;
+    foundsec=0 ;
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        if (strchr(d->key[i], ':')==NULL) {
+            foundsec++ ;
+            if (foundsec>n)
+                break ;
+        }
+    }
+    if (foundsec<=n) {
+        return NULL ;
+    }
+    return d->key[i] ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dump a dictionary to an opened file pointer.
+  @param    d   Dictionary to dump.
+  @param    f   Opened file pointer to dump to.
+  @return   void
+
+  This function prints out the contents of a dictionary, one element by
+  line, onto the provided file pointer. It is OK to specify @c stderr
+  or @c stdout as output files. This function is meant for debugging
+  purposes mostly.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_dump(dictionary * d, FILE * f)
+{
+    int     i ;
+
+    if (d==NULL || f==NULL) return ;
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        if (d->val[i]!=NULL) {
+            fprintf(f, "[%s]=[%s]\n", d->key[i], d->val[i]);
+        } else {
+            fprintf(f, "[%s]=UNDEF\n", d->key[i]);
+        }
+    }
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Save a dictionary to a loadable ini file
+  @param    d   Dictionary to dump
+  @param    f   Opened file pointer to dump to
+  @return   void
+
+  This function dumps a given dictionary into a loadable ini file.
+  It is Ok to specify @c stderr or @c stdout as output files.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_dump_ini(dictionary * d, FILE * f)
+{
+    int     i ;
+    int     nsec ;
+    char *  secname ;
+
+    if (d==NULL || f==NULL) return ;
+
+    nsec = iniparser_getnsec(d);
+    if (nsec<1) {
+        /* No section in file: dump all keys as they are */
+        for (i=0 ; i<d->size ; i++) {
+            if (d->key[i]==NULL)
+                continue ;
+            fprintf(f, "%s = %s\n", d->key[i], d->val[i]);
+        }
+        return ;
+    }
+    for (i=0 ; i<nsec ; i++) {
+        secname = iniparser_getsecname(d, i) ;
+        iniparser_dumpsection_ini(d, secname, f) ;
+    }
+    fprintf(f, "\n");
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Save a dictionary section to a loadable ini file
+  @param    d   Dictionary to dump
+  @param    s   Section name of dictionary to dump
+  @param    f   Opened file pointer to dump to
+  @return   void
+
+  This function dumps a given section of a given dictionary into a loadable ini
+  file.  It is Ok to specify @c stderr or @c stdout as output files.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f)
+{
+    int     j ;
+    char    keym[ASCIILINESZ+1];
+    int     seclen ;
+
+    if (d==NULL || f==NULL) return ;
+    if (! iniparser_find_entry(d, s)) return ;
+
+    seclen  = (int)strlen(s);
+    fprintf(f, "\n[%s]\n", s);
+    sprintf(keym, "%s:", s);
+    for (j=0 ; j<d->size ; j++) {
+        if (d->key[j]==NULL)
+            continue ;
+        if (!strncmp(d->key[j], keym, seclen+1)) {
+            fprintf(f,
+                    "%-30s = %s\n",
+                    d->key[j]+seclen+1,
+                    d->val[j] ? d->val[j] : "");
+        }
+    }
+    fprintf(f, "\n");
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the number of keys in a section of a dictionary.
+  @param    d   Dictionary to examine
+  @param    s   Section name of dictionary to examine
+  @return   Number of keys in section
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getsecnkeys(dictionary * d, char * s)
+{
+    int     seclen, nkeys ;
+    char    keym[ASCIILINESZ+1];
+    int j ;
+
+    nkeys = 0;
+
+    if (d==NULL) return nkeys;
+    if (! iniparser_find_entry(d, s)) return nkeys;
+
+    seclen  = (int)strlen(s);
+    sprintf(keym, "%s:", s);
+
+    for (j=0 ; j<d->size ; j++) {
+        if (d->key[j]==NULL)
+            continue ;
+        if (!strncmp(d->key[j], keym, seclen+1)) 
+            nkeys++;
+    }
+
+    return nkeys;
+
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the number of keys in a section of a dictionary.
+  @param    d   Dictionary to examine
+  @param    s   Section name of dictionary to examine
+  @return   pointer to statically allocated character strings
+
+  This function queries a dictionary and finds all keys in a given section.
+  Each pointer in the returned char pointer-to-pointer is pointing to
+  a string allocated in the dictionary; do not free or modify them.
+  
+  This function returns NULL in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+char ** iniparser_getseckeys(dictionary * d, char * s)
+{
+
+    char **keys;
+
+    int i, j ;
+    char    keym[ASCIILINESZ+1];
+    int     seclen, nkeys ;
+
+    keys = NULL;
+
+    if (d==NULL) return keys;
+    if (! iniparser_find_entry(d, s)) return keys;
+
+    nkeys = iniparser_getsecnkeys(d, s);
+
+    keys = (char**) malloc(nkeys*sizeof(char*));
+
+    seclen  = (int)strlen(s);
+    sprintf(keym, "%s:", s);
+    
+    i = 0;
+
+    for (j=0 ; j<d->size ; j++) {
+        if (d->key[j]==NULL)
+            continue ;
+        if (!strncmp(d->key[j], keym, seclen+1)) {
+            keys[i] = d->key[j];
+            i++;
+        }
+    }
+
+    return keys;
+
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key
+  @param    d       Dictionary to search
+  @param    key     Key string to look for
+  @param    def     Default value to return if key not found.
+  @return   pointer to statically allocated character string
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the pointer passed as 'def' is returned.
+  The returned char pointer is pointing to a string allocated in
+  the dictionary, do not free or modify it.
+ */
+/*--------------------------------------------------------------------------*/
+char * iniparser_getstring(dictionary * d, const char * key, char * def)
+{
+    char * lc_key ;
+    char * sval ;
+
+    if (d==NULL || key==NULL)
+        return def ;
+
+    lc_key = strlwc(key);
+    sval = dictionary_get(d, lc_key, def);
+    return sval ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to an int
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   integer
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+
+  Supported values for integers include the usual C notation
+  so decimal, octal (starting with 0) and hexadecimal (starting with 0x)
+  are supported. Examples:
+
+  "42"      ->  42
+  "042"     ->  34 (octal -> decimal)
+  "0x42"    ->  66 (hexa  -> decimal)
+
+  Warning: the conversion may overflow in various ways. Conversion is
+  totally outsourced to strtol(), see the associated man page for overflow
+  handling.
+
+  Credits: Thanks to A. Becker for suggesting strtol()
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getint(dictionary * d, const char * key, int notfound)
+{
+    char    *   str ;
+
+    str = iniparser_getstring(d, key, INI_INVALID_KEY);
+    if (str==INI_INVALID_KEY) return notfound ;
+    return (int)strtol(str, NULL, 0);
+}
+
+int iniparser_getlong(dictionary * d, const char * key, int notfound)
+{
+    char    *   str ;
+
+    str = iniparser_getstring(d, key, INI_INVALID_KEY);
+    if (str==INI_INVALID_KEY) return notfound ;
+    return strtol(str, NULL, 0);
+}
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to a double
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   double
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+ */
+/*--------------------------------------------------------------------------*/
+double iniparser_getdouble(dictionary * d, const char * key, double notfound)
+{
+    char    *   str ;
+
+    str = iniparser_getstring(d, key, INI_INVALID_KEY);
+    if (str==INI_INVALID_KEY) return notfound ;
+    return atof(str);
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to a boolean
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   integer
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+
+  A true boolean is found if one of the following is matched:
+
+  - A string starting with 'y'
+  - A string starting with 'Y'
+  - A string starting with 't'
+  - A string starting with 'T'
+  - A string starting with '1'
+
+  A false boolean is found if one of the following is matched:
+
+  - A string starting with 'n'
+  - A string starting with 'N'
+  - A string starting with 'f'
+  - A string starting with 'F'
+  - A string starting with '0'
+
+  The notfound value returned if no boolean is identified, does not
+  necessarily have to be 0 or 1.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getboolean(dictionary * d, const char * key, int notfound)
+{
+    char    *   c ;
+    int         ret ;
+
+    c = iniparser_getstring(d, key, INI_INVALID_KEY);
+    if (c==INI_INVALID_KEY) return notfound ;
+    if (c[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') {
+        ret = 1 ;
+    } else if (c[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') {
+        ret = 0 ;
+    } else {
+        ret = notfound ;
+    }
+    return ret;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Finds out if a given entry exists in a dictionary
+  @param    ini     Dictionary to search
+  @param    entry   Name of the entry to look for
+  @return   integer 1 if entry exists, 0 otherwise
+
+  Finds out if a given entry exists in the dictionary. Since sections
+  are stored as keys with NULL associated values, this is the only way
+  of querying for the presence of sections in a dictionary.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_find_entry(
+    dictionary  *   ini,
+    const char  *   entry
+)
+{
+    int found=0 ;
+    if (iniparser_getstring(ini, entry, INI_INVALID_KEY)!=INI_INVALID_KEY) {
+        found = 1 ;
+    }
+    return found ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Set an entry in a dictionary.
+  @param    ini     Dictionary to modify.
+  @param    entry   Entry to modify (entry name)
+  @param    val     New value to associate to the entry.
+  @return   int 0 if Ok, -1 otherwise.
+
+  If the given entry can be found in the dictionary, it is modified to
+  contain the provided value. If it cannot be found, -1 is returned.
+  It is Ok to set val to NULL.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_set(dictionary * ini, const char * entry, const char * val)
+{
+    return dictionary_set(ini, strlwc(entry), val) ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete an entry in a dictionary
+  @param    ini     Dictionary to modify
+  @param    entry   Entry to delete (entry name)
+  @return   void
+
+  If the given entry can be found, it is deleted from the dictionary.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_unset(dictionary * ini, const char * entry)
+{
+    dictionary_unset(ini, strlwc(entry));
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Load a single line from an INI file
+  @param    input_line  Input line, may be concatenated multi-line input
+  @param    section     Output space to store section
+  @param    key         Output space to store key
+  @param    value       Output space to store value
+  @return   line_status value
+ */
+/*--------------------------------------------------------------------------*/
+static line_status iniparser_line(
+    char * input_line,
+    char * section,
+    char * key,
+    char * value)
+{   
+    line_status sta ;
+    char        line[ASCIILINESZ+1];
+    static char left_line[ASCIILINESZ+1];
+    int         len, offset ;
+
+    strcpy(line, strstrip(input_line));
+    len = (int)strlen(line);
+
+    sta = LINE_UNPROCESSED ;
+    if (len<1) {
+        /* Empty line */
+        sta = LINE_EMPTY ;
+        memset(input_line, 0, len);
+    } else if (line[0]=='#' || line[0]==';') {
+        /* Comment line */
+        sta = LINE_COMMENT ; 
+        memset(input_line, 0, len);
+    } else if (line[0]=='[') {
+        /* Section name */
+        sscanf(line, "[%[^]]", section);
+        strcpy(section, strstrip(section));
+        strcpy(section, strlwc(section));
+
+        /* Left configure will go to next time to parser */
+        offset = strlen(section) + 2;
+        strcpy( left_line, strstrip(&(line[offset])) );
+        strcpy( left_line, strstrip(left_line));
+
+        if( strlen(left_line) > 0)
+        {
+            strcpy(input_line, left_line);
+            strcat(input_line, "\n");
+        }
+        else
+        {
+            memset(input_line, 0, len); 
+        }
+        sta = LINE_SECTION ;
+    } else if (sscanf (line, "%[^=] = \"%[^\"]\"", key, value) == 2
+           ||  sscanf (line, "%[^=] = '%[^\']'",   key, value) == 2
+           ||  sscanf (line, "%[^=] = %[^;#]",     key, value) == 2) {
+        char      *ptr = NULL; 
+
+        /* Usual key=value, with or without comments */
+        strcpy(key, strstrip(key));
+        strcpy(key, strlwc(key));
+        strcpy(value, strstrip(value));
+        /*
+         * sscanf cannot handle '' or "" as empty values
+         * this is done here
+         */
+        if (!strncmp(value, "\"\"", 2) || (!strncmp(value, "''", 2)) ) {
+            value[0]=0 ;
+        }
+
+        ptr = strchr(line, '=');
+        if('\''==*(ptr+1) || '\"'==*(ptr+1))
+        {
+            offset = strlen(key)+strlen(value) + 1 + 2; /* Skip $key='$val' */
+        }
+        else
+        {
+            offset = strlen(key)+strlen(value) + 1; /* Skip $key=$val */
+        }
+        strcpy( left_line, strstrip(&(line[offset])) ); 
+        
+        if( strlen(left_line) > 0)
+        {
+            strcpy(input_line, left_line);
+            strcat(input_line, "\n");
+        }
+        else
+        {
+            memset(input_line, 0, len); 
+        }
+        sta = LINE_VALUE ;
+    } else if (sscanf(line, "%[^=] = %[;#]", key, value)==2
+           ||  sscanf(line, "%[^=] %[=]", key, value) == 2) {
+        /*
+         * Special cases:
+         * key=
+         * key=;
+         * key=#
+         */
+        strcpy(key, strstrip(key));
+        strcpy(key, strlwc(key));
+        value[0]=0 ;
+        sta = LINE_VALUE ;
+    } else {
+        /* Generate syntax error */
+        sta = LINE_ERROR ;
+        memset(input_line, 0, len);
+    }
+    return sta ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Parse an ini file and return an allocated dictionary object
+  @param    ininame Name of the ini file to read.
+  @return   Pointer to newly allocated dictionary
+
+  This is the parser for ini files. This function is called, providing
+  the name of the file to be read. It returns a dictionary object that
+  should not be accessed directly, but through accessor functions
+  instead.
+
+  The returned dictionary must be freed using iniparser_freedict().
+ */
+/*--------------------------------------------------------------------------*/
+dictionary * iniparser_load(const char * ininame)
+{
+    FILE * in ;
+
+    char line    [ASCIILINESZ+1] ;
+    char section [ASCIILINESZ+1] ;
+    char key     [ASCIILINESZ+1] ;
+    char tmp     [ASCIILINESZ+1] ;
+    char val     [ASCIILINESZ+1] ;
+
+    int  last=0 ;
+    int  len ;
+    int  lineno=0 ;
+    int  errs=0;
+
+    dictionary * dict ;
+
+    if ((in=fopen(ininame, "r"))==NULL) {
+        fprintf(stderr, "iniparser: cannot open %s\n", ininame);
+        return NULL ;
+    }
+
+    dict = dictionary_new(0) ;
+    if (!dict) {
+        fclose(in);
+        return NULL ;
+    }
+
+    memset(line,    0, ASCIILINESZ);
+    memset(section, 0, ASCIILINESZ);
+    memset(key,     0, ASCIILINESZ);
+    memset(val,     0, ASCIILINESZ);
+    last=0 ;
+
+    while (fgets(line+last, ASCIILINESZ-last, in)!=NULL) {
+        lineno++ ;
+CONTINUE_PARSER:
+        len = (int)strlen(line)-1;
+        if (len==0)
+            continue;
+        /* Safety check against buffer overflows */
+        if (line[len]!='\n') {
+            fprintf(stderr,
+                    "iniparser: input line too long in %s (%d)\n",
+                    ininame,
+                    lineno);
+            dictionary_del(dict);
+            fclose(in);
+            return NULL ;
+        }
+        /* Get rid of \n and spaces at end of line */
+        while ((len>=0) &&
+                ((line[len]=='\n') || (isspace(line[len])))) {
+            line[len]=0 ;
+            len-- ;
+        }
+        /* Detect multi-line */
+        if (line[len]=='\\') {
+            /* Multi-line value */
+            last=len ;
+            continue ;
+        } else {
+            last=0 ;
+        }
+
+        switch ( iniparser_line(line, section, key, val) ) {
+            case LINE_EMPTY:
+            case LINE_COMMENT:
+            break ;
+
+            case LINE_SECTION:
+            errs = dictionary_set(dict, section, NULL);
+            break ;
+
+            case LINE_VALUE:
+            sprintf(tmp, "%s:%s", section, key);
+            errs = dictionary_set(dict, tmp, val) ;
+            break ;
+
+            case LINE_ERROR:
+            fprintf(stderr, "iniparser: syntax error in %s (%d):\n",
+                    ininame,
+                    lineno);
+            fprintf(stderr, "-> %s\n", line);
+            errs++ ;
+            break;
+
+            default:
+            break ;
+        }
+
+        if( strlen(line) > 0)
+        {
+            goto CONTINUE_PARSER;
+        }
+
+        memset(line, 0, ASCIILINESZ);
+        last=0;
+        if (errs<0) {
+            fprintf(stderr, "iniparser: memory allocation failure\n");
+            break ;
+        }
+    }
+    if (errs) {
+        dictionary_del(dict);
+        dict = NULL ;
+    }
+    fclose(in);
+    return dict ;
+}
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Free all memory associated to an ini dictionary
+  @param    d Dictionary to free
+  @return   void
+
+  Free all memory associated to an ini dictionary.
+  It is mandatory to call this function before the dictionary object
+  gets out of the current context.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_freedict(dictionary * d)
+{
+    dictionary_del(d);
+}
+
+/* vim: set ts=4 et sw=4 tw=75 */
diff --git a/program/converterd/cp_iniparser.h b/program/converterd/cp_iniparser.h
new file mode 100644
index 0000000..1e5de9c
--- /dev/null
+++ b/program/converterd/cp_iniparser.h
@@ -0,0 +1,308 @@
+
+/*-------------------------------------------------------------------------*/
+/**
+   @file    cp_iniparser.h
+   @author  N. Devillard
+   @brief   Parser for ini files.
+*/
+/*--------------------------------------------------------------------------*/
+
+#ifndef _CP_INIPARSER_H_
+#define _CP_INIPARSER_H_
+
+/*---------------------------------------------------------------------------
+                                Includes
+ ---------------------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * The following #include is necessary on many Unixes but not Linux.
+ * It is not needed for Windows platforms.
+ * Uncomment it if needed.
+ */
+/* #include <unistd.h> */
+
+#include "cp_dictionary.h"
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get number of sections in a dictionary
+  @param    d   Dictionary to examine
+  @return   int Number of sections found in dictionary
+
+  This function returns the number of sections found in a dictionary.
+  The test to recognize sections is done on the string stored in the
+  dictionary: a section name is given as "section" whereas a key is
+  stored as "section:key", thus the test looks for entries that do not
+  contain a colon.
+
+  This clearly fails in the case a section name contains a colon, but
+  this should simply be avoided.
+
+  This function returns -1 in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+
+int iniparser_getnsec(dictionary * d);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get name for section n in a dictionary.
+  @param    d   Dictionary to examine
+  @param    n   Section number (from 0 to nsec-1).
+  @return   Pointer to char string
+
+  This function locates the n-th section in a dictionary and returns
+  its name as a pointer to a string statically allocated inside the
+  dictionary. Do not free or modify the returned string!
+
+  This function returns NULL in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+
+char * iniparser_getsecname(dictionary * d, int n);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Save a dictionary to a loadable ini file
+  @param    d   Dictionary to dump
+  @param    f   Opened file pointer to dump to
+  @return   void
+
+  This function dumps a given dictionary into a loadable ini file.
+  It is Ok to specify @c stderr or @c stdout as output files.
+ */
+/*--------------------------------------------------------------------------*/
+
+void iniparser_dump_ini(dictionary * d, FILE * f);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Save a dictionary section to a loadable ini file
+  @param    d   Dictionary to dump
+  @param    s   Section name of dictionary to dump
+  @param    f   Opened file pointer to dump to
+  @return   void
+
+  This function dumps a given section of a given dictionary into a loadable ini
+  file.  It is Ok to specify @c stderr or @c stdout as output files.
+ */
+/*--------------------------------------------------------------------------*/
+
+void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dump a dictionary to an opened file pointer.
+  @param    d   Dictionary to dump.
+  @param    f   Opened file pointer to dump to.
+  @return   void
+
+  This function prints out the contents of a dictionary, one element by
+  line, onto the provided file pointer. It is OK to specify @c stderr
+  or @c stdout as output files. This function is meant for debugging
+  purposes mostly.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_dump(dictionary * d, FILE * f);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the number of keys in a section of a dictionary.
+  @param    d   Dictionary to examine
+  @param    s   Section name of dictionary to examine
+  @return   Number of keys in section
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getsecnkeys(dictionary * d, char * s);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the number of keys in a section of a dictionary.
+  @param    d   Dictionary to examine
+  @param    s   Section name of dictionary to examine
+  @return   pointer to statically allocated character strings
+
+  This function queries a dictionary and finds all keys in a given section.
+  Each pointer in the returned char pointer-to-pointer is pointing to
+  a string allocated in the dictionary; do not free or modify them.
+
+  This function returns NULL in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+char ** iniparser_getseckeys(dictionary * d, char * s);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key
+  @param    d       Dictionary to search
+  @param    key     Key string to look for
+  @param    def     Default value to return if key not found.
+  @return   pointer to statically allocated character string
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the pointer passed as 'def' is returned.
+  The returned char pointer is pointing to a string allocated in
+  the dictionary, do not free or modify it.
+ */
+/*--------------------------------------------------------------------------*/
+char * iniparser_getstring(dictionary * d, const char * key, char * def);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to an int
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   integer
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+
+  Supported values for integers include the usual C notation
+  so decimal, octal (starting with 0) and hexadecimal (starting with 0x)
+  are supported. Examples:
+
+  - "42"      ->  42
+  - "042"     ->  34 (octal -> decimal)
+  - "0x42"    ->  66 (hexa  -> decimal)
+
+  Warning: the conversion may overflow in various ways. Conversion is
+  totally outsourced to strtol(), see the associated man page for overflow
+  handling.
+
+  Credits: Thanks to A. Becker for suggesting strtol()
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getint(dictionary * d, const char * key, int notfound);
+int iniparser_getlong(dictionary * d, const char * key, int notfound);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to a double
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   double
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+ */
+/*--------------------------------------------------------------------------*/
+double iniparser_getdouble(dictionary * d, const char * key, double notfound);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to a boolean
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   integer
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+
+  A true boolean is found if one of the following is matched:
+
+  - A string starting with 'y'
+  - A string starting with 'Y'
+  - A string starting with 't'
+  - A string starting with 'T'
+  - A string starting with '1'
+
+  A false boolean is found if one of the following is matched:
+
+  - A string starting with 'n'
+  - A string starting with 'N'
+  - A string starting with 'f'
+  - A string starting with 'F'
+  - A string starting with '0'
+
+  The notfound value returned if no boolean is identified, does not
+  necessarily have to be 0 or 1.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getboolean(dictionary * d, const char * key, int notfound);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Set an entry in a dictionary.
+  @param    ini     Dictionary to modify.
+  @param    entry   Entry to modify (entry name)
+  @param    val     New value to associate to the entry.
+  @return   int 0 if Ok, -1 otherwise.
+
+  If the given entry can be found in the dictionary, it is modified to
+  contain the provided value. If it cannot be found, -1 is returned.
+  It is Ok to set val to NULL.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_set(dictionary * ini, const char * entry, const char * val);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete an entry in a dictionary
+  @param    ini     Dictionary to modify
+  @param    entry   Entry to delete (entry name)
+  @return   void
+
+  If the given entry can be found, it is deleted from the dictionary.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_unset(dictionary * ini, const char * entry);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Finds out if a given entry exists in a dictionary
+  @param    ini     Dictionary to search
+  @param    entry   Name of the entry to look for
+  @return   integer 1 if entry exists, 0 otherwise
+
+  Finds out if a given entry exists in the dictionary. Since sections
+  are stored as keys with NULL associated values, this is the only way
+  of querying for the presence of sections in a dictionary.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_find_entry(dictionary * ini, const char * entry) ;
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Parse an ini file and return an allocated dictionary object
+  @param    ininame Name of the ini file to read.
+  @return   Pointer to newly allocated dictionary
+
+  This is the parser for ini files. This function is called, providing
+  the name of the file to be read. It returns a dictionary object that
+  should not be accessed directly, but through accessor functions
+  instead.
+
+  The returned dictionary must be freed using iniparser_freedict().
+ */
+/*--------------------------------------------------------------------------*/
+dictionary * iniparser_load(const char * ininame);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Free all memory associated to an ini dictionary
+  @param    d Dictionary to free
+  @return   void
+
+  Free all memory associated to an ini dictionary.
+  It is mandatory to call this function before the dictionary object
+  gets out of the current context.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_freedict(dictionary * d);
+
+#endif
diff --git a/program/converterd/cp_logger.c b/program/converterd/cp_logger.c
new file mode 100644
index 0000000..efb04e5
--- /dev/null
+++ b/program/converterd/cp_logger.c
@@ -0,0 +1,433 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_log.c
+ *    Description:  This file is the linux infrastructural logger system library
+ *                 
+ *        Version:  1.0.0(08/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/08/2012 04:24:01 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_logger.h"
+//#include "cp_common.h"
+
+#define PRECISE_TIME_FACTOR 1000
+
+static unsigned long log_rollback_size = LOG_ROLLBACK_NONE;
+
+static cp_logger *logger = NULL;
+
+char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" };
+
+static char *cp_time_format = DEFAULT_TIME_FORMAT;
+
+void cp_log_set_time_format(char *time_format)
+{
+    cp_time_format = time_format;
+}
+
+static void cp_log_default_signal_handler(int sig)
+{
+    if(!logger)
+        return ;
+
+    if (sig == SIGHUP)
+    {
+        signal(SIGHUP, cp_log_default_signal_handler);
+        log_fatal("SIGHUP received - reopenning log file [%s]", logger->file);
+        cp_log_reopen();
+    }
+}
+
+static void log_banner(char *prefix)
+{
+    if(!logger)
+        return ;
+
+    fprintf(logger->fp, "%s log \"%s\" on level [%s] size [%lu] KiB, log system version %s\n",
+            prefix, logger->file, log_str[logger->level], log_rollback_size / 1024, LOG_VERSION_STR);
+#ifdef LOG_FILE_LINE
+    fprintf(logger->fp, " [Date]    [Time]   [Level] [PID/TID] [File/Line]  [Content]\n");
+#else
+    fprintf(logger->fp, " [Date]    [Time]   [Level] [PID/TID] [Content]\n");
+#endif
+    fprintf(logger->fp, "-------------------------------------------------------------\n");
+}
+
+static void check_and_rollback(void)
+{
+    if(!logger)
+        return ;
+
+    if (log_rollback_size != LOG_ROLLBACK_NONE)
+    {
+        long _curOffset = ftell(logger->fp);
+
+        if ((_curOffset != -1) && (_curOffset >= log_rollback_size))
+        {
+            char cmd[512];
+
+            snprintf(cmd, sizeof(cmd), "cp -f %s %s.roll", logger->file, logger->file);
+            system(cmd);
+
+            if (-1 == fseek(logger->fp, 0L, SEEK_SET))
+                fprintf(logger->fp, "log rollback fseek failed \n");
+
+            rewind(logger->fp);
+
+            truncate(logger->file, 0);
+            log_banner("Already rollback");
+        }
+    }
+}
+
+cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size)
+{
+    if(NULL == log)
+    {
+        logger = malloc(sizeof(cp_logger));
+        memset(logger, 0, sizeof(cp_logger));
+        logger->flag |= CP_LOGGER_MALLOC; 
+    }
+    else
+    {
+        logger = log;
+        logger->flag |= CP_LOGGER_ARGUMENT; 
+    }
+
+    if(NULL == logger)
+    {
+        return NULL;
+    }
+
+    strncpy(logger->file, filename, FILENAME_LEN); 
+    logger->level = level;
+    logger->size = log_size; 
+
+    return logger;
+}
+
+int cp_log_open(void)
+{
+    struct sigaction act;
+    char *filemode;
+
+    if(!logger)
+    {
+        return -1;
+    }
+
+    log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024;    /* Unit KiB */
+        
+    if ('\0' == logger->file)
+        return -1;
+
+    if (!strcmp(logger->file, DBG_LOG_FILE))
+    {
+        logger->fp = stderr;
+        log_rollback_size = LOG_ROLLBACK_NONE;
+        logger->flag |= CP_LOGGER_CONSOLE;
+        goto OUT;
+    }
+
+    filemode = (log_rollback_size==LOG_ROLLBACK_NONE) ? "a+" : "w+";
+
+    logger->fp = fopen(logger->file, filemode);
+    if (NULL == logger->fp)
+    {
+        fprintf(stderr, "Open log file \"%s\" in %s failure\n", logger->file, filemode);
+        return -2;
+    }
+
+    act.sa_handler = cp_log_default_signal_handler;
+    sigemptyset(&act.sa_mask);
+    act.sa_flags = 0;
+    sigaction(SIGHUP, &act, NULL);
+
+  OUT:
+    log_banner("Initialize");
+
+    return 0;
+}
+
+void cp_log_close(void)
+{
+    if (!logger || !logger->fp )
+        return;
+
+    log_banner("\nTerminate");
+    cp_log_raw("\n\n\n\n");
+
+    fflush(logger->fp);
+
+    fclose(logger->fp);
+    logger->fp = NULL;
+
+    return ;
+}
+
+int cp_log_reopen(void)
+{
+    int rc = 0;
+    char *filemode;
+
+    if( !logger )
+        return -1;
+
+    log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024;    /* Unit KiB */
+
+    if (logger->flag & CP_LOGGER_CONSOLE )
+    {
+        fflush(logger->fp);
+        logger->fp = stderr;
+        return 0;
+    }
+
+    if (logger->fp)
+    {
+        cp_log_close();
+        filemode = log_rollback_size==LOG_ROLLBACK_NONE ? "a+" : "w+";
+        logger->fp = fopen(logger->file, filemode); 
+        
+        if (logger->fp == NULL)
+            rc = -2;
+    }
+    else
+    {
+        rc = -3;
+    }
+
+    if (!rc)
+    {
+        log_banner("\nReopen");
+    }
+    return rc;
+}
+
+void cp_log_term(void)
+{
+    if(!logger)
+        return ;
+
+    cp_log_close();
+
+    if (logger->flag & CP_LOGGER_MALLOC )
+    {
+        free(logger);
+    }
+    logger = NULL;
+}
+
+void cp_log_raw(const char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || !logger->fp)
+        return;
+
+    check_and_rollback();
+
+    va_start(argp, fmt);
+    vfprintf(logger->fp, fmt, argp);
+    va_end(argp);
+}
+
+static void cp_printout(char *level, char *fmt, va_list argp)
+{
+    char buf[MAX_LOG_MESSAGE_LEN];
+    struct tm *local;
+    struct timeval now;
+    char timestr[256];
+
+    if(!logger)
+        return ;
+
+    pthread_t tid;
+
+    check_and_rollback();
+
+#ifdef MULTHREADS
+    tid = pthread_self();
+#else 
+    tid = getpid();
+#endif
+
+    gettimeofday(&now, NULL);
+    local = localtime(&now.tv_sec);
+
+    strftime(timestr, 256, cp_time_format, local);
+    vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp);
+
+#ifdef DUMPLICATE_OUTPUT
+    printf("%s.%03ld [%s] [%06lu]: %s",
+           timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, buf);
+#endif
+
+    if (logger->fp)
+        fprintf(logger->fp, "%s.%03ld [%s] [%06lu]: %s", timestr, now.tv_usec / PRECISE_TIME_FACTOR,
+                level, tid, buf);
+
+    if (logger->fp)
+        fflush(logger->fp);
+}
+
+static void cp_printout_line(char *level, char *fmt, char *file, int line, va_list argp)
+{
+    char buf[MAX_LOG_MESSAGE_LEN];
+    struct tm *local;
+    struct timeval now;
+    char timestr[256];
+
+    if(!logger)
+        return ;
+
+    pthread_t tid;
+
+    check_and_rollback();
+
+#ifdef MULTHREADS
+    tid = pthread_self();
+#else 
+    tid = getpid();
+#endif
+
+    gettimeofday(&now, NULL);
+    local = localtime(&now.tv_sec);
+
+    strftime(timestr, 256, cp_time_format, local);
+    vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp);
+
+#ifdef DUMPLICATE_OUTPUT
+    printf("%s.%03ld [%s] [%06lu] (%s [%04d]) : %s",
+           timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf);
+#endif
+
+    if (logger->fp)
+        fprintf(logger->fp, "%s.%03ld [%s] [%06lu] (%s [%04d]) : %s",
+                timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf);
+
+    if (logger->fp)
+        fflush(logger->fp);
+}
+
+void cp_log_str(int level, const char *msg)
+{
+    if (!logger || level>logger->level)
+        return;
+
+    check_and_rollback();
+
+    if (logger->fp)
+        fwrite(msg, 1, strlen(msg), logger->fp);
+
+    if(logger->fp)
+        fflush(logger->fp);
+}
+
+void cp_log(int level, char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || level>logger->level)
+        return;
+
+    va_start(argp, fmt);
+    cp_printout(log_str[level], fmt, argp);
+    va_end(argp);
+}
+
+void cp_log_line(int level, char *file, int line, char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || level>logger->level)
+        return;
+
+    va_start(argp, fmt);
+    cp_printout_line(log_str[level], fmt, file, line, argp);
+
+    va_end(argp);
+}
+
+#define LINELEN 81
+#define CHARS_PER_LINE 16
+static char *print_char =
+    "                "
+    "                "
+    " !\"#$%&'()*+,-./"
+    "0123456789:;<=>?"
+    "@ABCDEFGHIJKLMNO"
+    "PQRSTUVWXYZ[\\]^_"
+    "`abcdefghijklmno"
+    "pqrstuvwxyz{|}~ "
+    "                "
+    "                "
+    " ???????????????"
+    "????????????????" 
+    "????????????????" 
+    "????????????????" 
+    "????????????????" 
+    "????????????????";
+
+void cp_log_dump(int level, char *buf, int len)
+{
+    int rc;
+    int idx;
+    char prn[LINELEN];
+    char lit[CHARS_PER_LINE + 2];
+    char hc[4];
+    short line_done = 1;
+
+    if (!logger || level>logger->level)
+        return;
+
+    rc = len;
+    idx = 0;
+    lit[CHARS_PER_LINE] = '\0';
+
+    while (rc > 0)
+    {
+        if (line_done)
+            snprintf(prn, LINELEN, "%08X: ", idx);
+
+        do
+        {
+            unsigned char c = buf[idx];
+            snprintf(hc, 4, "%02X ", c);
+            strncat(prn, hc, LINELEN);
+
+            lit[idx % CHARS_PER_LINE] = print_char[c];
+        }
+        while (--rc > 0 && (++idx % CHARS_PER_LINE != 0));
+
+        line_done = (idx % CHARS_PER_LINE) == 0;
+        if (line_done)
+        {
+#ifdef DUMPLICATE_OUTPUT
+            printf("%s  %s\n", prn, lit);
+#endif
+            if (logger->fp)
+                fprintf(logger->fp, "%s  %s\n", prn, lit);
+        }
+    }
+
+    if (!line_done)
+    {
+        int ldx = idx % CHARS_PER_LINE;
+        lit[ldx++] = print_char[(int)buf[idx]];
+        lit[ldx] = '\0';
+
+        while ((++idx % CHARS_PER_LINE) != 0)
+            strncat(prn, "   ", LINELEN);
+
+#ifdef DUMPLICATE_OUTPUT
+        printf("%s  %s\n", prn, lit);
+#endif
+        if (logger->fp)
+            fprintf(logger->fp, "%s  %s\n", prn, lit);
+
+    }
+}
diff --git a/program/converterd/cp_logger.h b/program/converterd/cp_logger.h
new file mode 100644
index 0000000..7548514
--- /dev/null
+++ b/program/converterd/cp_logger.h
@@ -0,0 +1,111 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_logger.h
+ *    Description:  This file is the linux infrastructural logger system library
+ *
+ *        Version:  1.0.0(08/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/08/2012 05:16:56 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_LOG_H
+#define __CP_LOG_H
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <signal.h>
+#include <time.h>
+#include <errno.h>
+
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+#define LOG_VERSION_STR             "1.0.0"
+
+#ifndef FILENAME_LEN
+#define FILENAME_LEN                64
+#endif
+
+#define DEFAULT_LOGFILE             "cp_logger.log"
+#define DBG_LOG_FILE                "console"  /*  Debug mode log file is console */ 
+
+#define LOG_ROLLBACK_SIZE           512    /* Default rollback log size  */
+#define LOG_ROLLBACK_NONE           0      /* Set rollback size to 0 will not rollback  */
+
+#define DEFAULT_TIME_FORMAT         "%Y-%m-%d %H:%M:%S"
+#define MAX_LOG_MESSAGE_LEN         0x1000
+
+//#define DUMPLICATE_OUTPUT  /* Log to file and printf on console  */
+#define LOG_FILE_LINE      /* Log the file and line */
+
+enum
+{
+    LOG_LEVEL_DISB = 0,               /*  Disable "Debug" */
+    LOG_LEVEL_FATAL,                  /*  Debug Level "Fatal" */
+    LOG_LEVEL_ERROR,                  /*  Debug Level "ERROR" */
+    LOG_LEVEL_WARN,                   /*  Debug Level "warnning" */
+    LOG_LEVEL_NRML,                   /*  Debug Level "Normal" */
+    LOG_LEVEL_DEBUG,                  /*  Debug Level "Debug" */
+    LOG_LEVEL_INFO,                   /*  Debug Level "Information" */
+    LOG_LEVEL_TRACE,                  /*  Debug Level "Trace" */
+    LOG_LEVEL_MAX,
+};
+
+#define CP_LOGGER_MALLOC              1<<0
+#define CP_LOGGER_ARGUMENT            0<<0
+
+#define CP_LOGGER_CONSOLE             1<<1
+#define CP_LOGGER_FILE                0<<1
+
+#define CP_LOGGER_LEVEL_OPT           1<<2 /*  The log level is sepcified by the command option */
+typedef struct _cp_logger
+{
+    unsigned char      flag;  /* This logger pointer is malloc() or passed by argument */
+    char               file[FILENAME_LEN];
+    int                level;
+    int                size;
+
+    FILE               *fp;
+} cp_logger;
+
+extern char *log_str[];
+
+extern cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size);
+extern int  cp_log_open(void);
+extern void cp_log_set_time_format(char *time_format);
+extern int  cp_log_reopen(void);
+extern void cp_log_term(void);
+extern void cp_log_raw(const char *fmt, ...);
+extern void cp_log(int level, char *fmt, ...);
+extern void cp_log_line(int level, char *file, int line, char *fmt, ...);
+extern void cp_log_str(int level, const char *msg);
+
+extern void cp_log_dump(int level, char *buf, int len);
+
+#ifdef LOG_FILE_LINE
+#define log_trace(fmt, ...) cp_log_line(LOG_LEVEL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_info(fmt, ...)  cp_log_line(LOG_LEVEL_INFO,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_dbg(fmt, ...)   cp_log_line(LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_nrml(fmt, ...)  cp_log_line(LOG_LEVEL_NRML,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_warn(fmt, ...)  cp_log_line(LOG_LEVEL_WARN,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_err(fmt, ...)   cp_log_line(LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_fatal(fmt, ...) cp_log_line(LOG_LEVEL_FATAL, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#else
+#define log_trace(fmt, ...) cp_log(LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__)
+#define log_info(fmt, ...) cp_log(LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
+#define log_dbg(fmt, ...) cp_log(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
+#define log_nrml(fmt, ...) cp_log(LOG_LEVEL_NRML, fmt, ##__VA_ARGS__)
+#define log_warn(fmt, ...) cp_log(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
+#define log_err(fmt, ...) cp_log(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
+#define log_fatal(fmt, ...) cp_log(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__)
+#endif
+
+
+#endif /* __CP_LOG_H  */
diff --git a/program/converterd/cp_proc.c b/program/converterd/cp_proc.c
new file mode 100644
index 0000000..652a328
--- /dev/null
+++ b/program/converterd/cp_proc.c
@@ -0,0 +1,341 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_proc.c
+ *    Description:  This file is the process API
+ *                 
+ *        Version:  1.0.0(11/06/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/06/2012 09:19:02 PM"
+ *                 
+ ********************************************************************************/ 
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <libgen.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <pthread.h>
+
+#include "cp_proc.h"
+#include "cp_logger.h"
+
+CP_PROC_SIG     g_cp_signal={0};
+
+void cp_proc_sighandler(int sig)
+{
+    switch(sig)
+    {
+        case SIGINT:
+            log_warn("SIGINT - stopping\n");
+            g_cp_signal.stop = 1;
+            break;
+
+        case SIGTERM:
+            log_warn("SIGTERM - stopping\n");
+            g_cp_signal.stop = 1;
+            break;
+        case SIGSEGV:
+            log_warn("SIGSEGV - stopping\n");
+#if 0
+            if(g_cp_signal.stop)
+                exit(0);
+
+            g_cp_signal.stop = 1;
+#endif
+            break;
+
+        case SIGPIPE:
+            log_warn("SIGPIPE - warnning\n");
+            break;
+    
+        default:
+            break;
+    }
+}
+
+
+void cp_install_proc_signal(void)
+{
+    struct sigaction sigact, sigign;
+
+    log_nrml("Install default signal handler.\n");
+
+    /*  Initialize the catch signal structure. */
+    sigemptyset(&sigact.sa_mask);
+    sigact.sa_flags = 0;
+    sigact.sa_handler = cp_proc_sighandler;
+
+    /*  Setup the ignore signal. */
+    sigemptyset(&sigign.sa_mask);
+    sigign.sa_flags = 0;
+    sigign.sa_handler = SIG_IGN;
+
+    sigaction(SIGTERM, &sigact, 0); /*  catch terminate signal "kill" command */
+    sigaction(SIGINT,  &sigact, 0); /*  catch interrupt signal CTRL+C */
+    //sigaction(SIGSEGV, &sigact, 0); /*  catch segmentation faults  */
+    sigaction(SIGPIPE, &sigact, 0); /*  catch broken pipe */
+#if 0
+    sigaction(SIGCHLD, &sigact, 0); /*  catch child process return */
+    sigaction(SIGUSR2, &sigact, 0); /*  catch USER signal */ 
+#endif
+}
+
+
+/* ****************************************************************************
+ * FunctionName: daemonize
+ * Description : Set the programe runs as daemon in background
+ * Inputs      : nodir: DON'T change the work directory to / :  1:NoChange 0:Change
+ *               noclose: close the opened file descrtipion or not 1:Noclose 0:Close
+ * Output      : NONE
+ * Return      : NONE
+ * *****************************************************************************/
+void daemonize(int nochdir, int noclose)
+{ 
+    int retval, fd; 
+    int i; 
+    
+    /*  already a daemon */ 
+    if (1 == getppid()) 
+        return; 
+    
+    /*  fork error */
+    retval = fork(); 
+    if (retval < 0) exit(1); 
+    
+    /*  parent process exit */
+    if (retval > 0)
+        exit(0); 
+    
+    /*  obtain a new process session group */
+    setsid(); 
+    
+    if (!noclose)
+    {
+        /*  close all descriptors */
+        for (i = getdtablesize(); i >= 0; --i)
+        {
+            //if (i != g_logPtr->fd)
+                close(i);
+        } 
+
+        /*  Redirect Standard input [0] to /dev/null */
+        fd = open("/dev/null", O_RDWR); 
+
+        /* Redirect Standard output [1] to /dev/null */
+        dup(fd);  
+
+        /* Redirect Standard error [2] to /dev/null */
+        dup(fd);  
+    } 
+    
+    umask(0); 
+    
+    if (!nochdir)
+        chdir("/"); 
+    
+    return;
+}
+
+/* ****************************************************************************
+ * FunctionName: record_daemon_pid
+ * Description : Record the running daemon program PID to the file "pid_file"
+ * Inputs      : pid_file:The record PID file path
+ * Output      : NONE
+ * Return      : 0: Record successfully  Else: Failure
+ * *****************************************************************************/
+int record_daemon_pid(const char *pid_file)
+{ 
+    struct stat fStatBuf; 
+    int fd = -1; 
+    int mode = S_IROTH | S_IXOTH | S_IRGRP | S_IXGRP | S_IRWXU;
+    char ipc_dir[64] = { 0 }; 
+    
+    strncpy(ipc_dir, pid_file, 64); 
+
+    /* dirname() will modify ipc_dir and save the result */ 
+    dirname(ipc_dir);  
+    
+    /* If folder pid_file PATH doesnot exist, then we will create it" */
+    if (stat(ipc_dir, &fStatBuf) < 0) 
+    { 
+        if (mkdir(ipc_dir, mode) < 0) 
+        { 
+            log_fatal("cannot create %s: %s\n", ipc_dir, strerror(errno)); 
+            return -1; 
+        } 
+        
+        (void)chmod(ipc_dir, mode); 
+    } 
+    
+    /*  Create the process running PID file */ 
+    mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+    if ((fd = open(pid_file, O_RDWR | O_CREAT | O_TRUNC, mode)) >= 0)
+    {
+        char pid[PID_ASCII_SIZE]; 
+        snprintf(pid, sizeof(pid), "%u\n", (unsigned)getpid()); 
+        write(fd, pid, strlen(pid)); 
+        close(fd); 
+
+        log_dbg("Record PID<%u> to file %s.\n", getpid(), pid_file);
+    } 
+    else 
+    {
+        log_fatal("cannot create %s: %s\n", pid_file, strerror(errno));
+        return -1;
+    }
+
+    return 0;
+}
+
+/* ****************************************************************************
+ * FunctionName: get_daemon_pid
+ * Description : Get the daemon process PID from the PID record file "pid_file"
+ * Inputs      : pid_file: the PID record file
+ * Output      : NONE
+ * Return      : pid_t: The daemon process PID number
+ * *****************************************************************************/
+pid_t get_daemon_pid(const char *pid_file)
+{ 
+    FILE *f; 
+    pid_t pid; 
+    
+    if ((f = fopen(pid_file, "rb")) != NULL)
+    { 
+        char pid_ascii[PID_ASCII_SIZE]; 
+        (void)fgets(pid_ascii, PID_ASCII_SIZE, f); 
+        (void)fclose(f); 
+        pid = atoi(pid_ascii); 
+    } 
+    else
+    {
+        log_fatal("Can't open PID record file %s: %s\n", pid_file, strerror(errno));
+        return -1;
+    } 
+    return pid;
+}     
+
+/* ****************************************************************************
+ * FunctionName: check_daemon_running
+ * Description : Check the daemon program already running or not
+ * Inputs      : pid_file: The record running daemon program PID
+ * Output      : NONE
+ * Return      : 1: The daemon program alread running   0: Not running
+ * *****************************************************************************/
+int check_daemon_running(const char *pid_file)
+{
+    int retVal = -1; 
+    struct stat fStatBuf;
+
+    retVal = stat(pid_file, &fStatBuf); 
+    if (0 == retVal) 
+    { 
+        pid_t pid = -1; 
+        printf("PID record file \"%s\" exist.\n", pid_file);
+
+        pid = get_daemon_pid(pid_file);
+        if (pid > 0)  /*  Process pid exist */
+        { 
+            if ((retVal = kill(pid, 0)) == 0) 
+            { 
+                printf("Program with PID[%d] seems running.\n", pid); 
+                return 1; 
+            } 
+            else   /* Send signal to the old process get no reply. */ 
+            { 
+                printf("Program with PID[%d] seems exit.\n", pid); 
+                remove(pid_file); 
+                return 0; 
+            } 
+        } 
+        else if (0 == pid) 
+        { 
+            printf("Can not read program PID form record file.\n"); 
+            remove(pid_file); 
+            return 0; 
+        } 
+        else  /* Read pid from file "pid_file" failure */
+        { 
+            printf("Read record file \"%s\" failure, maybe program still running.\n", pid_file); 
+            return 1; 
+        } 
+    } 
+    
+    return 0;
+}
+
+/* ****************************************************************************
+ * FunctionName: set_daemon_running
+ * Description : Set the programe running as daemon if it's not running and record 
+ *               its PID to the pid_file.
+ * Inputs      : pid_file: The record running daemon program PID
+ * Output      : NONE
+ * Return      : 0: Successfully. 1: Failure
+ * *****************************************************************************/
+int set_daemon_running(const char *pid_file)
+{ 
+    daemonize(0, 1); 
+    log_nrml("Program running as daemon [PID:%d].\n", getpid()); 
+    
+    if (record_daemon_pid(pid_file) < 0) 
+    { 
+        log_fatal("Record PID to file \"%s\" failure.\n", pid_file); 
+        return -2;
+    }
+
+    return 0;
+}
+
+
+int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg)
+{
+    int        retval = 0;
+
+    pthread_attr_t thread_attr; 
+
+    /* Initialize the thread  attribute */
+    retval = pthread_attr_init(&thread_attr); 
+    if(retval)
+        return -1;
+
+    /* Set the stack size of the thread */
+    retval = pthread_attr_setstacksize(&thread_attr, 120 * 1024); 
+    if(retval)
+        goto CleanUp;
+    
+    /* Set thread to detached state:Don`t need pthread_join */
+    retval = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); 
+    if(retval)
+        goto CleanUp;
+    
+    /* Create the thread */
+    retval = pthread_create(thread_id, &thread_attr, thread_workbody, thread_arg);
+    if(retval)
+        goto CleanUp;
+    
+CleanUp:
+    /* Destroy the  attributes  of  thread */
+    pthread_attr_destroy(&thread_attr); 
+    return retval;
+}
+
+
+void exec_system_cmd(const char *format, ...)
+{
+    char                cmd[256];
+    va_list             args;
+    int                 done; 
+    
+    memset(cmd, 0, sizeof(cmd)); 
+    
+    va_start(args, format); 
+    done = vsnprintf(cmd, sizeof(cmd), format, args);
+    va_end(args); 
+    
+    system(cmd);
+}
+
+
diff --git a/program/converterd/cp_proc.h b/program/converterd/cp_proc.h
new file mode 100644
index 0000000..f79abe8
--- /dev/null
+++ b/program/converterd/cp_proc.h
@@ -0,0 +1,42 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_proc.h
+ *    Description:  This head file is for Linux process API
+ *
+ *        Version:  1.0.0(11/06/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/06/2012 09:21:33 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_PROC_H
+#define __CP_PROC_H
+
+#include <signal.h>
+
+#define PID_ASCII_SIZE  11
+
+typedef struct __CP_PROC_SIG
+{
+    int       signal;
+    unsigned  stop;     /* 0: Not term  1: Stop  */
+}  CP_PROC_SIG;
+
+typedef void *(THREAD_BODY) (void *thread_arg);
+
+extern CP_PROC_SIG     g_cp_signal;
+extern void cp_install_proc_signal(void);
+
+extern void daemonize(int nochdir, int noclose);
+extern int record_daemon_pid(const char *pid_file);
+extern pid_t get_daemon_pid(const char *pid_file);
+extern int check_daemon_running(const char *pid_file);
+extern int set_daemon_running(const char *pid_file);
+
+extern void exec_system_cmd(const char *format, ...);
+
+extern int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg);
+
+#endif
diff --git a/program/converterd/cp_socket.c b/program/converterd/cp_socket.c
new file mode 100644
index 0000000..2c50bae
--- /dev/null
+++ b/program/converterd/cp_socket.c
@@ -0,0 +1,252 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2014 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_socket.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(11/18/2014)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/18/2014 11:15:04 PM"
+ *                 
+ ********************************************************************************/
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <netdb.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <sys/un.h>
+#include <sys/types.h>
+#include <linux/sockios.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include "cp_logger.h"
+#include "cp_socket.h"
+
+int cp_sock_set_nonblock(int sockfd)
+{
+    int opts;
+    /*
+     * fcntl may set: 
+     *
+     * EACCES, EAGAIN: Operation is prohibited by locks held by other 
+     *          processes. Or, operation is prohibited because the file has 
+     *          been memory-mapped by another process. 
+     * EBADF:   fd is not an open file descriptor, or the command was F_SETLK 
+     *          or F_SETLKW and the file descriptor open mode doesn't match 
+     *          with the type of lock requested.
+     * EDEADLK: It was detected that the specified F_SETLKW command would 
+     *          cause a deadlock.
+     * EFAULT:  lock is outside your accessible address space.
+     * EINTR:   For F_SETLKW, the command was interrupted by a signal. For 
+     *          F_GETLK and F_SETLK, the command was interrupted by a signal 
+     *          before the lock was checked or acquired. Most likely when 
+     *          locking a remote file (e.g. locking over NFS), but can 
+     *          sometimes happen locally.
+     * EINVAL:  For F_DUPFD, arg is negative or is greater than the maximum 
+     *          allowable value. For F_SETSIG, arg is not an allowable signal 
+     *          number.
+     * EMFILE:  For F_DUPFD, the process already has the maximum number of 
+     *          file descriptors open. 
+     * ENOLCK:  Too many segment locks open, lock table is full, or a remote 
+     *          locking protocol failed (e.g. locking over NFS).
+     * EPERM:   Attempted to clear the O_APPEND flag on a file that has the 
+     *          append-only attribute set.
+     */
+    opts = fcntl(sockfd, F_GETFL);
+    if (opts < 0)
+    {
+        log_warn("fcntl() get socket options failure: %s\n", strerror(errno));
+        return -1;
+    }
+
+    opts |= O_NONBLOCK;
+    if (fcntl(sockfd, F_SETFL, opts) < 0)
+    {
+        log_warn("fcntl() set socket options failure: %s\n", strerror(errno));
+        return -1;
+    }
+
+    log_dbg("Set socket[%d] none blocking\n", sockfd);
+    return opts;
+}
+
+int cp_sock_connect(cp_sock_t *sock)
+{
+    int                 rv = -1;
+    int                 sock_fd = -1;
+    char                service[20];
+    struct addrinfo     hints, *rp;
+    struct addrinfo     *res = NULL;
+    struct in_addr      inaddr;
+    char                ipstr[20];
+
+    if(!sock)
+    {
+        log_err("Invalid input argument\n");
+        return -1;
+    }
+
+    if(SOCK_STAT_CONNECTED == sock->status)
+    {
+        return 0;
+    }
+    else if(SOCK_STAT_CONNECTING == sock->status)
+    {
+        goto connecting;
+    }
+
+    log_nrml("Start socket connect to [%s:%d]...\n", sock->host, sock->port);
+
+    memset(&hints, 0, sizeof(struct addrinfo));
+    hints.ai_family = AF_INET; /*   Only support IPv4 */
+    hints.ai_socktype = SOCK_STREAM;
+
+    /*  If Hostname is a valid IP address, then don't use name resolution */
+    if( inet_aton(sock->host, &inaddr) )
+    {
+        log_info("%s is a valid IP address, don't use name resolution.\n", sock->host);
+        hints.ai_flags |= AI_NUMERICHOST;
+    }  
+
+    /*  Obtain address(es) matching host/port */
+    snprintf(service, sizeof(service), "%d", sock->port);
+    if( (rv=getaddrinfo(sock->host, service, &hints, &res)) )
+    {
+        log_err("getaddrinfo() parser [%s:%s] failed: %s\n", sock->host, service, gai_strerror(rv));
+        rv = -2;
+        goto failed;
+    }   
+
+
+    /*  getaddrinfo() returns a list of address structures. Try each 
+     *  address until we successfully connect or bind 
+     */
+    rv = -3; /* Connect failure  */
+    for (rp=res; rp!=NULL; rp=rp->ai_next)
+    {
+        /*  Create the socket */ 
+        sock_fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); 
+        if( sock_fd < 0) 
+        { 
+            log_err("socket() create failed: %s\n", strerror(errno));
+            rv = -4;
+            continue;
+        }
+
+        inet_ntop(AF_INET, &(((struct sockaddr_in *)(rp->ai_addr))->sin_addr), ipstr, sizeof(ipstr));
+        log_dbg("DNS resolve IP address [%s]\n", ipstr);
+        
+        cp_sock_set_nonblock(sock_fd);
+
+        /* Nono block Connect to the remote server */
+        if(0==connect(sock_fd, rp->ai_addr, rp->ai_addrlen))
+        {
+            /* Conenct to server successfully */
+            memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr));
+            sock->fd = sock_fd;
+            sock->status = SOCK_STAT_CONNECTED;
+            rv = 0;
+            goto connected;
+        }
+        else
+        {
+            if(EINPROGRESS == errno)
+            {
+                /* Connect to server now in progress  */
+                memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr));
+                sock->fd = sock_fd;
+                sock->status = SOCK_STAT_CONNECTING; 
+                rv = 0; 
+                goto connecting;
+            }
+            else
+            {
+                /* Connect to server failed. */
+                close(sock_fd);
+                rv = -5;
+                log_err("connect() to server failed: %s\n", strerror(errno));
+                goto failed;
+            }
+        }
+
+        close(sock_fd);
+    }
+
+
+failed:
+    log_err("create socket connect to [%s:%d] failed: %s\n", sock->host, sock->port, strerror(errno));
+    sock->status = SOCK_STAT_DISCONNECT;
+    sock->fd = -1;
+    return rv;
+
+connecting:
+    if(SOCK_STAT_CONNECTING == sock->status)
+    {
+        int         len;
+
+        len = sizeof(sock->saddr);
+
+        errno = 0;
+        if( 0 == connect(sock->fd, &sock->saddr, len) )
+        {
+            /* connect() return 0 means it already connected */
+            sock->status = SOCK_STAT_CONNECTED;
+            rv = 0;
+            goto connected;
+        }
+
+        /* Connect failure will continue to check */
+        switch (errno)
+        {
+            case EISCONN:
+                sock->status = SOCK_STAT_CONNECTED;
+                rv = 0;
+                goto connected;
+
+            case EALREADY:
+            case EINPROGRESS:
+                log_dbg("socket[%d] connect to remote [%s:%d] in progress\n", sock->fd, sock->host, sock->port);
+                rv = 0;
+                goto cleanup;
+
+            default:
+                log_err("socket[%d] connect to remote [%s:%d] failed: %s\n", sock->fd, sock->host, sock->port, strerror(errno));
+                sock->status = SOCK_STAT_DISCONNECT;
+                rv = -7;
+                break;
+        }
+    }
+
+connected:
+    if(SOCK_STAT_CONNECTED == sock->status)
+    {
+        rv = 0;
+        log_nrml("socket[%d] connected to remote server [%s:%d]\n", sock->fd, sock->host, sock->port);
+        goto cleanup;
+    }
+
+cleanup:
+    if(res)
+        freeaddrinfo(res);  /* No longer needed */
+
+    return rv;
+}
+
+void cp_sock_close(cp_sock_t *sock)
+{
+    close(sock->fd);
+    sock->fd = 0;
+    sock->status = SOCK_STAT_INIT;
+}
+
+void cp_sock_term(cp_sock_t *sock)
+{
+    close(sock->fd);
+    memset(sock, 0, sizeof(*sock));
+}
diff --git a/program/converterd/cp_socket.h b/program/converterd/cp_socket.h
new file mode 100644
index 0000000..7f1cfd7
--- /dev/null
+++ b/program/converterd/cp_socket.h
@@ -0,0 +1,40 @@
+/********************************************************************************
+ *      Copyright:  (C) 2014 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_socket.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(11/19/2014)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/19/2014 12:16:45 AM"
+ *                 
+ ********************************************************************************/
+#ifndef __CP_SOCKET_H_
+#define __CP_SOCKET_H_
+
+#include <sys/types.h> 
+#include <sys/socket.h>
+
+#define DOMAIN_MAX_LEN             128
+
+#define SOCK_STAT_INIT             0
+#define SOCK_STAT_CONNECTING       1
+#define SOCK_STAT_CONNECTED        2
+#define SOCK_STAT_DISCONNECT       3
+
+typedef struct cp_sock_s 
+{
+    char               host[DOMAIN_MAX_LEN];      /*  Connect/Listen hostname or IP address */
+    int                port;                      /*  Connect/Listen server port  */
+    int                fd;                        /*  Connected/Listen socket fd  */ 
+    int                status;                    /*  Socket connected or not  */
+    struct sockaddr    saddr;                     /*  sockaddr for none-block connect */
+
+} cp_sock_t;  /*---  end of struct cp_sock_s  ---*/
+
+extern int cp_sock_connect(cp_sock_t *sock);
+extern void cp_sock_close(cp_sock_t *sock);
+extern void cp_sock_term(cp_sock_t *sock);
+#endif
+
diff --git a/program/converterd/cvd_conf.c b/program/converterd/cvd_conf.c
new file mode 100644
index 0000000..3bd6cc4
--- /dev/null
+++ b/program/converterd/cvd_conf.c
@@ -0,0 +1,121 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2014 GuoWenxue<guowenxue@email.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cvd_conf.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(11/19/2014)
+ *         Author:  GuoWenxue <guowenxue@email.com>
+ *      ChangeLog:  1, Release initial version on "11/19/2014 01:58:28 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_logger.h"
+#include "cvd_conf.h"
+#include "cp_iniparser.h"
+
+
+int parser_cvd_conf(char *ini_name, cp_logger *logger, comport_sock_bind_t *cvd_bind)
+{
+    dictionary          *ini;
+    char                *str;
+    int                 val, i;
+
+    if(!ini_name || !logger || !cvd_bind)
+    {
+        log_err("Invalid input arguments\n");
+        return -1 ;
+    }
+
+    ini = iniparser_load(ini_name);
+    if (ini==NULL)
+    {
+        log_err("cannot parse file: %s\n", ini_name);
+        return -2 ;
+    }
+
+    /************************************************
+     * Parser the Logger configuration
+     ************************************************/
+
+    log_nrml("Parser configure file %s with original logger file [%s]\n", ini_name, logger->file);
+
+    str = iniparser_getstring(ini, "log:file", NULL);
+    strncpy(logger->file, (strlen(str)>0 ? str : CVD_DEF_LOG_FILE), FILENAME_LEN);
+    log_nrml("Set log file [%d] from configuration.\n", logger->level);
+
+    /*If not set the log level from command line, then use the configure one*/
+    if( !(logger->flag&CP_LOGGER_LEVEL_OPT) )
+    {
+        val = iniparser_getint(ini, "log:level", -1);
+        logger->level = (-1==val ? LOG_LEVEL_NRML : val);
+        log_nrml("Set log level[%d] from configuration.\n", logger->level);
+    }
+
+    /* Set the log maximum file size in the configure file */
+    val = iniparser_getint(ini, "log:size", -1);
+    logger->size = -1==val ? CVD_DEF_LOG_SIZE : val;
+    log_nrml("Set log size [%dKiB] from configuration\n", logger->size);
+
+    if ( cp_log_reopen() )
+    {
+        printf("Log file reopen failure, exit now...\n");
+        return -3;
+    }
+
+    log_nrml("Configure Log file \"%s\" with level [%s], maximum size %d KiB.\n",
+            logger->file, log_str[logger->level], logger->size);
+
+
+    for(i=0; i<MAX_BIND_TUNNEL; i++)
+    {
+        char        key[64];
+
+        snprintf(key, sizeof(key), "TUNNEL%d:comport", i+1);
+        str = iniparser_getstring(ini, key, NULL);
+        if( NULL!=str && strlen(str) > 0 )
+        {
+            strncpy(cvd_bind->comport_dev, str, DEVNAME_LEN);
+            log_info("Configure comport: %s\n", cvd_bind->comport_dev);
+        }
+        else
+        {
+            log_err("Configure file lost serial port configuration\n");
+            return -3;
+        }
+
+        /*-----------------------------------------------------------------------------
+         *  Connect socket configuration
+         *-----------------------------------------------------------------------------*/
+
+        snprintf(key, sizeof(key), "TUNNEL%d:conn_host", i+1);
+        str = iniparser_getstring(ini, key, NULL);
+        if( NULL!=str && strlen(str) > 0 )
+        {
+            char      *ptr;
+            ptr = strtok(str, ":");
+            if(ptr)
+            {
+                strncpy(cvd_bind->sock.host, ptr, DOMAIN_MAX_LEN);
+                if( NULL != (ptr=strtok(NULL, ":")) )
+                {
+                    cvd_bind->sock.port = atoi(ptr);
+                }
+                else
+                {
+                    log_err("Configure file lost connect port configuration\n");
+                    return -4;
+                }
+            }
+            else
+            {
+                log_err("Configure file lost connect host configuration\n");
+                return -5;
+            }
+        }
+        log_nrml("Bind tunnel serial[%s] <==> socket[%s:%d]\n", cvd_bind->comport_dev, cvd_bind->sock.host, cvd_bind->sock.port);
+    }
+
+    return 0;
+}
diff --git a/program/converterd/cvd_conf.h b/program/converterd/cvd_conf.h
new file mode 100644
index 0000000..99b056a
--- /dev/null
+++ b/program/converterd/cvd_conf.h
@@ -0,0 +1,31 @@
+/********************************************************************************
+ *      Copyright:  (C) 2014 GuoWenxue<guowenxue@email.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cvd_conf.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(11/19/2014)
+ *         Author:  GuoWenxue <guowenxue@email.com>
+ *      ChangeLog:  1, Release initial version on "11/19/2014 02:28:07 PM"
+ *                 
+ ********************************************************************************/
+#ifndef __CVD_CONF_
+#define __CVD_CONF_
+
+#include "cvd_main.h"
+
+#define MAX_BIND_TUNNEL    1
+
+#define DEF_SERIAL_PORT    "/dev/ttyS1"
+//#define DEF_CONN_HOST      "192.168.1.78"
+#define DEF_CONN_HOST      "emblinux.com"
+#define DEF_CONN_PORT      9001
+
+#define CVD_DEF_LOG_FILE   "/var/log/converterd.log"
+#define CVD_DEF_LOG_SIZE   8
+
+extern int parser_cvd_conf(char *ini_name, cp_logger *logger, comport_sock_bind_t *cvd_bind);
+
+#endif
+
diff --git a/program/converterd/cvd_main.c b/program/converterd/cvd_main.c
new file mode 100644
index 0000000..38490e8
--- /dev/null
+++ b/program/converterd/cvd_main.c
@@ -0,0 +1,309 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2014 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cvd_main.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(11/18/2014)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/18/2014 10:30:53 PM"
+ *                 
+ ********************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <libgen.h>
+#include <sys/types.h>       /* basic system data types */
+#include <sys/socket.h>      /* basic socket definitions */
+#include <sys/epoll.h> /* epoll function */
+
+#include "cp_comport.h"
+#include "cp_socket.h"
+#include "cp_logger.h"
+#include "cp_proc.h"
+#include "cvd_conf.h"
+#include "cvd_main.h"
+#include "version.h"
+
+int epoll_add_socket(int epfd, cp_sock_t *sock);
+int epoll_add_comport(int epfd, COM_PORT *comport, char *comport_dev);
+void epoll_del_fd(int epfd, int fd);
+
+static void prog_usage(const char *progname)
+{
+    banner(progname); 
+    
+    printf("Usage: %s [OPTION]...\n", progname);
+    printf("Receive date from a serial port and transfer the data to remote server by socket.\n");
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n");
+
+    printf(" -d[debug   ]  Running in debug mode\n");
+    printf(" -l[level   ]  Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1);
+    printf(" -h[help    ]  Display this help information\n");
+    printf(" -v[version ]  Display the program version\n"); 
+    return ;
+}
+
+int main(int argc, char **argv)
+{
+    int                    i, epfd, nfds, nbytes;
+    comport_sock_bind_t    cvd_bind;
+    cp_logger              *logger;
+    struct epoll_event     evts[MAXEPOLLSIZE];
+    int                    opt;
+    int                    debug = 0;
+    char                   pid_file[64] = { 0 }; /*  The file used to record the PID */
+    char                   *conf_file = CVD_DEF_CONF_FILE;
+    char                   *log_file;
+    int                    log_level = LOG_LEVEL_TRACE;
+    const char             *progname=NULL;
+
+    struct option long_options[] = {
+        {"conf", required_argument, NULL, 'c'},
+        {"debug", no_argument, NULL, 'd'},
+        {"level", required_argument, NULL, 'l'},
+        {"version", no_argument, NULL, 'v'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };
+
+    progname = basename(argv[0]);
+    /* Parser the command line parameters */
+    while ((opt = getopt_long(argc, argv, "c:dl:vh", long_options, NULL)) != -1)
+    {
+        switch (opt)
+        {
+            case 'c':  /* Set configure file */
+                conf_file = optarg;
+                break;
+
+            case 'd': /* Set debug running */
+                debug = 1;
+                log_file = DBG_LOG_FILE;
+                break;
+
+            case 'l': /* Set the log level */
+                i = atoi(optarg);
+                log_level = i>LOG_LEVEL_MAX ? LOG_LEVEL_MAX-1 : LOG_LEVEL_MAX-1;
+                break;
+
+            case 'v':  /* Get software version */
+                banner(progname); /* Defined in version.h */
+                return EXIT_SUCCESS;
+
+            case 'h':  /* Get help information */
+                prog_usage(progname);
+                return 0;
+
+            default:
+                break;
+        } /*  end of "switch(opt)" */
+    }
+
+    memset(&cvd_bind, 0, sizeof(cvd_bind));
+
+    if( !debug )
+    {
+        snprintf(pid_file, sizeof(pid_file), "/var/run/%s.pid", progname);
+        if( check_daemon_running(pid_file) )
+        {
+            printf("Programe already running, exit now.\n");
+            return -1;
+        }
+    }
+
+    if( !(logger=cp_log_init(NULL, log_file, log_level, 0)) || cp_log_open()<0  )
+    {
+        printf("Init logger system failed, program exit now...\n");
+        return -1;
+    }
+
+    if( parser_cvd_conf(conf_file, logger, &cvd_bind) < 0)
+    {
+        printf("Parser configure file '%s' failed, program exit now...\n", conf_file);
+        return -1;
+    }
+
+    cvd_bind.comport = comport_init(cvd_bind.comport_dev, 115200, "8N1N");
+    if( !cvd_bind.comport )
+    {
+        log_err("Init comport '%s' as 115200 8N1N failure\n", cvd_bind.comport_dev);
+        return -2;
+    }
+
+    if( (epfd=epoll_create(MAXEPOLLSIZE)) < 0)
+    {
+        log_err("epoll_create failure: %s\n", strerror(errno));
+        goto CleanUp;
+    }
+
+
+    if( !debug )
+    {
+        if( set_daemon_running(pid_file) )
+        {
+            log_fatal("Set program \"%s\" running as daemon failure.\n", progname);
+            goto CleanUp;
+        }
+    }
+
+    cp_install_proc_signal();
+
+    while( !g_cp_signal.stop )
+    {
+        /* Open comport if it's not opened  */
+        if( !cvd_bind.comport->is_connted )
+        {
+            epoll_add_comport(epfd, cvd_bind.comport, cvd_bind.comport_dev);
+        }
+
+        /* Connect to host if not connected  */
+        if( SOCK_STAT_CONNECTED != cvd_bind.sock.status )
+        {
+            epoll_add_socket(epfd, &cvd_bind.sock);
+        }
+
+        /* Epoll wait the added socket event  */
+        nfds=epoll_wait(epfd, evts, MAXEPOLLSIZE, EPOLL_TIMEOUT);
+        if (nfds < 0)
+        {
+            log_err("epoll_wait get error: %s\n", strerror(errno));
+            continue;
+        }
+
+        for (i=0; i<nfds; ++i)
+        {
+            /* Comport get data arriving event happened */
+            if ( evts[i].data.fd == cvd_bind.comport->fd ) 
+            {
+                nbytes = comport_recv(cvd_bind.comport, cvd_bind.buf, sizeof(cvd_bind.buf), COMPORT_TIMEOUT);
+                if( nbytes>0 )
+                {
+                    if( SOCK_STAT_CONNECTED == cvd_bind.sock.status )
+                    {
+                        log_dbg("Transfer data from comport to socket\n");
+                        write(cvd_bind.sock.fd, cvd_bind.buf, nbytes);
+                    }
+                    else
+                    {
+                        log_err("Receive data from serial port [%s] but socket to [%s:%d] disconnect.\n", 
+                                cvd_bind.comport->dev_name, cvd_bind.sock.host, cvd_bind.sock.port);
+                    }
+                }
+            }
+            /* Socket get data arriving event happened */
+            else if ( evts[i].data.fd == cvd_bind.sock.fd ) 
+            {
+                nbytes = read(cvd_bind.sock.fd, cvd_bind.buf, sizeof(cvd_bind.buf));
+                /* Socket disconnected  */
+                if(nbytes == 0)
+                {
+                    log_warn("Socket[%d] connect to [%s:%d] disconnect\n", 
+                            cvd_bind.sock.fd, cvd_bind.sock.host, cvd_bind.sock.port);
+                    epoll_del_fd(epfd, evts[i].data.fd);
+                    cp_sock_close(&cvd_bind.sock);
+                }
+                /* Socket read error  */
+                else if(nbytes < 0)
+                {
+                    log_warn("Read data from socket[%d] get error: %s, close socket now.\n", 
+                            cvd_bind.sock.fd, strerror(errno));
+                    epoll_del_fd(epfd, evts[i].data.fd);
+                    cp_sock_close(&cvd_bind.sock);
+                }
+                /* Socket read ok then transmiter to serial port  */
+                else if( nbytes>0 )
+                {
+                    if( cvd_bind.comport->is_connted)
+                    {
+                        log_dbg("Transfer data from socket to comport\n");
+                        write(cvd_bind.comport->fd, cvd_bind.buf, nbytes);
+                    }
+                    else
+                    {
+                        log_err("Receive data from socket to [%s:%d] but serial port [%s] disconnect.\n", 
+                                cvd_bind.sock.host, cvd_bind.sock.port, cvd_bind.comport->dev_name);
+                    }
+                }
+            }
+        }
+    }
+
+CleanUp:
+    comport_term(cvd_bind.comport);
+    cp_log_term();
+
+    return 0;
+}
+
+void epoll_del_fd(int epfd, int fd)
+{
+    struct epoll_event     ev;
+
+    log_warn("Remove fd[%d] from epoll\n", fd);
+    ev.events = EPOLLIN | EPOLLET;
+    epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &ev);
+}
+
+int epoll_add_comport(int epfd, COM_PORT *comport, char *comport_dev)
+{
+    int                    rv = -1;
+    struct epoll_event     ev;
+
+    if( comport_open(comport) < 0 )
+    {
+        rv = -2;
+        log_err("Open comport '%s' as 115200 8N1N failure\n", comport_dev);
+        goto failed;
+    }
+
+    ev.data.fd = comport->fd;
+    ev.events = EPOLLIN | EPOLLET;
+    if (epoll_ctl(epfd, EPOLL_CTL_ADD, comport->fd, &ev) < 0) 
+    {
+        rv = -3;
+        log_err("epoll add comport fd[%d] failure\n", comport->fd);
+        goto failed;
+    }
+
+    log_nrml("Add comport [%s] to epoll ok\n", comport_dev);
+
+    return 0;
+
+failed:
+    comport->fd = -1;
+    return rv;
+}
+
+
+int epoll_add_socket(int epfd, cp_sock_t *sock)
+{
+    struct epoll_event     ev;
+
+    if(SOCK_STAT_CONNECTED == sock->status)
+        return 0;
+
+    /* Try to connect to remote server again */
+    cp_sock_connect(sock);
+
+    if( SOCK_STAT_CONNECTED != sock->status )
+    {
+        return -1;
+    }
+
+    ev.data.fd = sock->fd;
+    ev.events = EPOLLIN | EPOLLET;
+    if (epoll_ctl(epfd, EPOLL_CTL_ADD, sock->fd, &ev) < 0) 
+    {
+        log_err("epoll add socket[%d] failure\n", sock->fd);
+        return -2;
+    }
+
+    log_nrml("Add socket[%d] connect to [%s:%d] to epoll ok\n", sock->fd, sock->host, sock->port);
+    return 0;
+}
+
+
diff --git a/program/converterd/cvd_main.h b/program/converterd/cvd_main.h
new file mode 100644
index 0000000..36fd77b
--- /dev/null
+++ b/program/converterd/cvd_main.h
@@ -0,0 +1,40 @@
+/********************************************************************************
+ *      Copyright:  (C) 2014 GuoWenxue<guowenxue@email.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cvd_main.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(11/19/2014)
+ *         Author:  GuoWenxue <guowenxue@email.com>
+ *      ChangeLog:  1, Release initial version on "11/19/2014 02:35:33 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CVD_MAIN_H_
+#define __CVD_MAIN_H_
+
+#include "cp_comport.h"
+#include "cp_socket.h"
+
+#define CVD_DEF_CONF_FILE  "/apps/etc/converterd.conf"
+
+#define MAXEPOLLSIZE       2
+#define BUF_SIZE           4096
+
+#define EPOLL_TIMEOUT      2000
+#define COMPORT_TIMEOUT    100
+
+
+typedef struct comport_sock_bind_s
+{
+    char               buf[BUF_SIZE];              /*  Comport/Socket receive buffer  */ 
+    char               comport_dev[DEVNAME_LEN];   /*  Receive/Transmit comport device name  */
+
+    COM_PORT           *comport;                   /*  Receive/Transmit comport */ 
+    cp_sock_t          sock;                       /*  Connected socket */
+} comport_sock_bind_t;  /* ---  end of struct comport_sock_bind_s  ---*/
+
+
+
+#endif
diff --git a/program/converterd/makefile b/program/converterd/makefile
new file mode 100644
index 0000000..afc55ed
--- /dev/null
+++ b/program/converterd/makefile
@@ -0,0 +1,114 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This Makefile used to call function to compile all the C source
+#                  in current folder and links all the objects file into a excutable
+#                  binary file.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+INSTPATH=/tftp
+
+APP_BINARY_NAME = converterd
+ARCH?=arm920t
+#ARCH?=i386
+
+LINK_MODE=STATIC
+MODE=PRODUCTION
+DEBUG=1
+
+LDFLAGS+=-lpthread
+CFLAGS+=-Wall -Werror
+
+ifeq ("${MODE}", "PRODUCTION")
+    CFLAGS+=-DPRODUCTION_MODE
+endif
+ifdef DEBUG
+    CFLAGS+=-g -DDEBUG
+endif
+
+COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M")
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+    CROSS_COMPILE=
+else
+    CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux-
+endif
+
+CFLAGS+=-I${PWD}
+
+export CC=${CROSS_COMPILE}gcc
+export CXX=${CROSS_COMPILE}g++
+export AR=${CROSS_COMPILE}ar
+export AS=${CROSS_COMPILE}as
+export RANLIB=${CROSS_COMPILE}ranlib
+export STRIP=${CROSS_COMPILE}strip
+export CFLAGS
+export LDFLAGS
+export ARCH
+export LINK_MODE
+
+ifeq ("${LINK_MODE}", "STATIC")
+	CFLAGS+=--static
+	LDFLAGS+=-static
+else
+	LDFLAGS+=-ldl
+endif
+
+all: entry version $(APP_BINARY_NAME)
+	make install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **        Compile ${APP_BINARY_NAME} for ${ARCH}         ";
+	@echo " =========================================================";
+
+version:
+	@echo "/* Generated by makefile, don't Edit it by hand */" > version.h 
+	@echo "#define DATE \"$(COMPILE_DATE)\"" >> version.h 
+	@echo "#define MAJOR 1" >>version.h 
+	@echo "#define MINOR 0" >>version.h 
+	@echo "#define REVER 0" >>version.h 
+	@if [ -f .svn/entries ] ; then \
+        echo "#define SVNVER `sed -n -e 11p .svn/entries`" >>version.h; \
+    else \
+        echo "#define SVNVER 0" >>version.h; \
+    fi;
+	@echo "" >> version.h 
+	@echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)'  >> version.h
+	@echo '#define copyright() printf("Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com\\n")' >>version.h
+	@echo '#define banner(progname) {version(progname); copyright(); printf("\\n");}' >>version.h
+	@echo "" >> version.h
+
+$(APP_BINARY_NAME):	$(OBJS) 
+	$(CC)  -o $@ *.c ${LDFLAGS}
+	@$(STRIP) $(APP_BINARY_NAME)
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	@cp $(APP_BINARY_NAME) ${INSTPATH}
+
+clean: 
+	@rm -f version.h 
+	@rm -f *.o $(APP_BINARY_NAME) 
+	@rm -rf *.gdb *.a *.so *.elf*
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/program/cp_library/at91_ioctl.h b/program/cp_library/at91_ioctl.h
new file mode 100644
index 0000000..fbf63d8
--- /dev/null
+++ b/program/cp_library/at91_ioctl.h
@@ -0,0 +1,91 @@
+/*********************************************************************************
+ *    Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
+ *                All ringhts reserved.
+ *
+ *     Filename:  at91_ioctl.h
+ *  Description:  ioctl() cmd argument for driver definition here
+ *
+ *      Version:  1.0.0(05/15/2012~)
+ *       Author:  Guo Wenxue <guowenxue@gmail.com>
+ *    ChangeLog:  1, Release initial version on "05/15/2012 04:28:09 PM"
+ *
+ ********************************************************************************/
+
+#ifndef __AT91_IOCTL_H
+#define __AT91_IOCTL_H
+
+#include <asm/ioctl.h>
+#ifndef __KERNEL__
+#include <sys/ioctl.h>
+#endif
+
+/*===========================================================================
+ *                Common ioctl command definition 
+ *===========================================================================*/
+
+#define PLATDRV_MAGIC           0x60
+
+/*===========================================================================
+ *                 ioctl command for all the drivers 0x01~0x0F
+ *===========================================================================*/
+
+/*args is enable or disable*/
+#define SET_DRV_DEBUG               _IO (PLATDRV_MAGIC, 0x01)
+#define GET_DRV_VER                 _IO (PLATDRV_MAGIC, 0x02)
+
+/*===========================================================================
+ *                 ioctl command for few ioctl() cmd driver 0x05~0x2F
+ *===========================================================================*/
+
+/* ADC driver */
+#define GET_BATTERY_STAT            _IO (PLATDRV_MAGIC, 0x06)
+#define GET_GMTUBE_VHIGH            _IO (PLATDRV_MAGIC, 0x08)
+#define GET_GPRS_VBAT               _IO (PLATDRV_MAGIC, 0x09)
+#define GET_ADC_DATA                _IO (PLATDRV_MAGIC, 0x10)
+#define SET_ADC_INTERVEL            _IO (PLATDRV_MAGIC, 0x11)
+
+
+/* Buzzer driver */
+#define BUZZER_ON                   _IO (PLATDRV_MAGIC, 0x12)
+#define BUZZER_BEEP                 _IO (PLATDRV_MAGIC, 0x13)
+#define BUZZER_OFF                  _IO (PLATDRV_MAGIC, 0x14)
+#define BUZZER_FREQ                 _IO (PLATDRV_MAGIC, 0x15)
+
+/* Button driver */
+#define GET_BUTTON_STATUS           _IO (PLATDRV_MAGIC, 0x17)
+
+/* LED driver */
+#define LED_OFF                     _IO (PLATDRV_MAGIC, 0x18)
+#define LED_ON                      _IO (PLATDRV_MAGIC, 0x19)
+#define LED_BLINK                   _IO (PLATDRV_MAGIC, 0x1A)
+#define TURN_ALL_LED                _IO (PLATDRV_MAGIC, 0x1B)
+
+/* Zigbee driver  */
+#define ZIGBEE_RESET                _IO (PLATDRV_MAGIC, 0x1E)
+#define ZIGBEE_STATUS               _IO (PLATDRV_MAGIC, 0x1F)
+
+/*===========================================================================
+ *                   ioctl command for GPS/GPRS driver 0x30~0x3F
+ *===========================================================================*/
+#define GSM_SET_POWER               _IO (PLATDRV_MAGIC, 0x30)  /* Set GPRS power On(1)/Off(0)/Reset(2) */
+#define GSM_GET_POWER               _IO (PLATDRV_MAGIC, 0x31)  /* Get current GPRS power status */
+#define GSM_GET_ADC                 _IO (PLATDRV_MAGIC, 0x32)  /* Get current GPRS power status */
+
+#define GPS_SET_POWER               _IO (PLATDRV_MAGIC, 0x3A)  /* Set GPS power On(1)/Off(0) */
+#define GPS_GET_POWER               _IO (PLATDRV_MAGIC, 0x3B)  /* Get current GPS power status */
+
+/*===========================================================================
+ *                   ioctl command for GM Tube driver 0x40~0x4F
+ *===========================================================================*/
+#define GM_SET_MEASURE_RADI         _IO (PLATDRV_MAGIC, 0x40)  /* Start/Stop GM tube radioation measurement */
+#define GM_GET_MEASURE_DOSE         _IO (PLATDRV_MAGIC, 0x41)  /* Get sample radiation dose, arg=0:get last time, arg=1: Total*/
+#define GM_SET_DUTY                 _IO (PLATDRV_MAGIC, 0x42)  /* Set GM tube PWM low duty */
+#define GM_SET_INTERVAL             _IO (PLATDRV_MAGIC, 0x43)  /* Set GM tube timer interval */
+#define GM_GET_VOLTAGE              _IO (PLATDRV_MAGIC, 0x44)  /* Get GM tube high voltage */
+
+#define GM_SET_POWER                _IO (PLATDRV_MAGIC, 0x45)  /* Enable/Disable GM tube 3.3V power */
+#define GM_SET_PWM_TC               _IO (PLATDRV_MAGIC, 0x46)  /* Start/Stop GM tube pwm output TC*/
+#define GM_SET_MEASURE_TC           _IO (PLATDRV_MAGIC, 0x47)  /* Start/Stop GM tube measurement TC */
+#define GM_SET_TIMER_TC             _IO (PLATDRV_MAGIC, 0x48)  /* Start/Stop GM tube timer TC*/
+
+#endif                          /* End of __AT91_IOCTL_H */
diff --git a/program/cp_library/cp_array.c b/program/cp_library/cp_array.c
new file mode 100644
index 0000000..8b08ed0
--- /dev/null
+++ b/program/cp_library/cp_array.c
@@ -0,0 +1,168 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_array.c
+ *    Description:  This file is a dynamic array implement
+ *                 
+ *        Version:  1.0.0(12/20/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "12/20/2012 01:48:27 PM"
+ *                 
+ ********************************************************************************/
+
+#include <stdlib.h>
+#include "cp_array.h"
+#include "cp_common.h"
+#include "cp_logger.h"
+
+CP_ARRAY *cp_array_init(CP_ARRAY *array, int size)
+{
+    int        i;
+
+    if( !array )
+    {
+        if( !(array=t_malloc(sizeof(*array))) )
+        {
+            return NULL;
+        }
+        else
+        {
+            memset(array, 0, sizeof(*array));
+            array->flag |= CP_ARRAY_FLAG_MALLOC; 
+        }
+    }
+    else
+    {
+        /* array is a variable,so clear it */
+        memset(array, 0, sizeof(*array));
+    }
+
+    array->size = size;
+    if( !array->data && !(array->data=(void **)malloc(array->size*sizeof(void *))) )
+    {
+        cp_array_term(array);
+        return NULL;
+    }
+
+    for(i=0; i<array->size; i++)
+    {
+        array->data[i] = NULL;
+    }
+
+    return array;
+}
+
+void cp_array_term(CP_ARRAY *array)
+{
+    if(!array)
+        return; 
+
+    if(array->data)
+        t_free(array->data);
+
+    if(array->flag&CP_ARRAY_FLAG_MALLOC)
+    {
+        t_free(array);
+    }
+
+    return ;
+}
+
+
+int cp_array_add(CP_ARRAY *array, void *data)
+{
+    int              i;
+    void             *entry;
+
+    if(!array || !data)
+    {
+        log_err("Invalude input arguments\n");
+        return -1;
+    }
+
+    /* array already full */
+    if(array->items >= array->size)
+    {
+        log_err("array is full,can not add data [%p]\n", data);
+        return -2;
+    }
+    
+    /* We don't start the array from 0 but 1 */
+    cp_list_array_for_each(array, i, entry)
+    {
+        if( !entry )
+        {
+            log_dbg("Array[%d] add data[%p] ok\n", i, data);
+            array->data[i] = data; 
+            array->items ++;
+            break;
+        }
+    }
+
+    return i;
+}
+
+void cp_array_rm_byindex(CP_ARRAY *array, int index)
+{
+    /* We don't start the array from 0 but 1 */
+    if(!array || index<0)
+    {
+        log_err("Invalude input arguments\n");
+        return;
+    }
+
+    if(array->data[index])
+    { 
+        array->items --;
+        array->data[index] = NULL;
+    }
+}
+
+int cp_array_rm_bydata(CP_ARRAY *array, void *data)
+{
+    int              i, rv = -3;
+    void             *entry;
+
+    if(!array || !data)
+    {
+        log_err("Invalude input arguments\n");
+        return -1;
+    }
+
+    if(array->items <= 0)
+    {
+        log_err("array is empty,can not remove data [%p]\n", data);
+        return -2;
+    }
+
+    /* We don't start the array from 0 but 1 */
+    cp_list_array_for_each(array, i, entry)
+    {
+        if( entry == data )
+        {
+            array->items --;
+            array->data[i] = NULL;
+            rv = 0;
+            break;
+        }
+    }
+
+    return rv;
+}
+
+void cp_array_travel(CP_ARRAY *array)
+{
+    int              i;
+    void             *data;
+
+    /* We don't start the array from 0 but 1 */
+    cp_list_array_for_each(array, i, data)
+    {
+        log_dbg("array data[%d] save data [%p]\n", i, data);
+    }
+
+    return ;
+}
+
+
diff --git a/program/cp_library/cp_array.h b/program/cp_library/cp_array.h
new file mode 100644
index 0000000..87167b8
--- /dev/null
+++ b/program/cp_library/cp_array.h
@@ -0,0 +1,41 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_array.h
+ *    Description:  This head file is for the dynaic array implement
+ *
+ *        Version:  1.0.0(12/20/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "12/20/2012 01:49:11 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_ARRAY_H
+#define __CP_ARRAY_H
+
+#define CP_ARRAY_FLAG_MALLOC     (1<<0)
+typedef struct _CP_ARRAY
+{
+    unsigned char          flag;
+    int                    size;
+    int                    items;
+    void                   **data;
+} CP_ARRAY;
+
+#define cp_array_is_full(arr)  ( (arr)->size-1==(arr)->items ? 1 :0 )
+#define cp_array_is_empty(arr) ( 0==(arr)->items ? 1 : 0)
+#define cp_array_count(arr) ( (arr)->items )
+#define cp_array_size(arr) ( (arr)->size-1 )
+
+#define cp_list_array_for_each(arr, i, entry)  for(i=0,entry=arr->data[i]; i<arr->size; ++i,entry=i<arr->size?arr->data[i]:NULL)
+
+
+CP_ARRAY *cp_array_init(CP_ARRAY *array, int size);
+void cp_array_term(CP_ARRAY *array);
+int cp_array_add(CP_ARRAY *array, void *data);
+void cp_array_rm_byindex(CP_ARRAY *array, int index);
+int cp_array_rm_bydata(CP_ARRAY *array, void *data);
+void cp_array_travel(CP_ARRAY *array);
+
+#endif /* __CP_ARRAY_H  */
diff --git a/program/cp_library/cp_atcmd.c b/program/cp_library/cp_atcmd.c
new file mode 100644
index 0000000..aedd5c9
--- /dev/null
+++ b/program/cp_library/cp_atcmd.c
@@ -0,0 +1,668 @@
+/*********************************************************************************
+ *      Copyright:  (C) guowenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_atcmd.c 
+ *    Description:  This is file is used to send AT command to GPRS module. 
+ *                 
+ *        Version:  1.0.0(02/02/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/02/2012 10:28:44 AM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_atcmd.h"
+#include "cp_string.h"
+#include "cp_logger.h"
+#include "cp_time.h"
+
+#ifndef ATCMD_REPLY_LEN 
+#define ATCMD_REPLY_LEN          512
+#endif
+
+/*
+ *  Description: Send the AT command which modem will only reply "OK" or "ERROR",
+ *               such as AT,ATE0,AT+CNMP=2 etc.
+ *
+ * Return Value:  0: OK     -X: ERROR
+ */
+int send_atcmd_check_ok(COM_PORT *comport, char *atcmd, unsigned long timeout)
+{
+    int  retval;
+    retval = send_atcmd(comport, atcmd, "OK\r\n", "ERROR\r\n", timeout, NULL, 0);
+
+    return 0==retval ? 0 : -2;
+}
+
+/*
+ *  Description: Send the AT command which will reply the value directly in a  
+ *               single line, such as AT+CGMM, AT+CGSN
+ *
+ * Output Value: Buf: The AT command query value
+ * Return Value:  0: OK     -X: ERROR
+ *
+ */
+int send_atcmd_check_value(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len)
+{
+    int         i = 0;
+    int         retval=0; 
+    char        tmp[ATCMD_REPLY_LEN];
+    char        *start;
+
+    if(NULL==buf)
+    {
+        log_err("Function call arguments error!\n");
+        return -1;
+    }
+
+    memset(tmp, 0, sizeof(tmp));
+    retval = send_atcmd(comport, atcmd, "OK\r\n", "ERROR\r\n", timeout, tmp, sizeof(tmp));
+    if( 0 != retval)
+    {
+        return -2;  /* AT command can not get reply  */
+    }
+
+    /* Parser the receive string to get the expect value*/
+    if(NULL != (start=strchr(tmp, '\n')) )  
+    {
+        start ++;  /* Skip '\n' character */
+        while(*start!='\r' && i<buf_len-1)
+        {
+            buf[i++] = *start; 
+            start ++;
+        }
+    }
+    buf[i] = '\0'; /* End of the string */
+
+    return ('\0'==buf[0] ? -3 : 0);
+}
+
+/*
+ *  Description: Send the AT command which will reply the value with a prefix "+CMD: "  
+ *               single line, such as AT+CGMR  AT+CPIN? AT+CNMP? AT+CSQ
+ *
+ * Output Value: Buf: The AT command query value by remove "+XXX:" prefix
+ * Return Value:  0: OK     -X: ERROR
+ *
+ */
+int send_atcmd_check_request(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len)
+{
+    int         retval;
+    int         i = 0;
+    char        tmp[ATCMD_REPLY_LEN];
+    char        *ptr = NULL;
+
+    if(NULL==buf)
+    {
+        log_err("%s() call arguments error!\n", __FUNCTION__);
+        return -1;
+    }
+
+    memset(tmp, 0, sizeof(tmp));
+    retval = send_atcmd(comport, atcmd, "OK\r\n", "ERROR\r\n", timeout, tmp, sizeof(tmp));
+    if( 0 != retval)
+    {
+        return -2;
+    }
+
+    /* Parser the receive string to get the expect value*/
+    if(NULL != (ptr=strchr (tmp, ':')) )   
+    {
+        ptr += 2; /* Skip the ':' and SPACE character */ 
+        while(*ptr!='\r' && i<buf_len-1)
+        {
+            buf[i++] = *ptr; 
+            ptr ++;
+        } 
+    }
+    buf[i] = '\0'; /* End of the string */
+
+    return ('\0'==buf[0] ? -3 : 0);
+}
+
+
+/*
+ *  Description: Send ATE0 command to the GSM module to check GSM module ready or not
+ * Return Value: 0: Success  !0:Failure
+ */
+int atcmd_check_at_ready(COM_PORT *comport)
+{
+    int    retval;
+    retval=send_atcmd_check_ok(comport, "ATE0\r", 500);
+    if(retval)
+    {
+        log_err("ATE0 check AT command ready             [FAILED]\n"); 
+    }
+    else
+    log_nrml("ATE0 check AT command ready           [OK]\n"); 
+
+    return retval;
+}
+
+/*
+ *  Description: Send AT+CPIN? command to the GSM module to check SIM card exist or not
+ * Return Value: 0: Success  !0:Failure
+ */
+int atcmd_check_sim_valid(COM_PORT *comport)
+{
+    int         retval = 0; 
+    char        recv_buf[ATCMD_REPLY_LEN];
+
+    retval = send_atcmd_check_request(comport, "AT+CPIN?\r", 800, recv_buf, sizeof(recv_buf));
+    if(0x00 != retval)
+    {
+        retval = 1;
+        log_warn("AT+CPIN? Check SIM Validation:          [FAILED]\n");
+        return retval;
+    }
+
+    if(strstr(recv_buf, "READY"))
+    {
+        log_nrml("AT+CPIN? Check SIM Validataion:       [OK]\n");
+        return 0;
+    }
+    else
+        return -1;
+}
+
+/*  Send AT+CSQ command to check GPRS signal*/
+int atcmd_check_gprs_signal(COM_PORT *comport)
+{
+    char        recv_buf[ATCMD_REPLY_LEN]; 
+    int         retval;
+    int         signal = -1;
+    
+    memset(recv_buf, 0, sizeof(recv_buf));
+    retval = send_atcmd_check_request(comport, "AT+CSQ\r", 3000, recv_buf, sizeof(recv_buf));
+    if( 0 !=  retval)
+    {
+        log_err("AT+CSQ Check Signal Strength:          [FAILED]\n");
+        return retval;
+    } 
+
+    split_string_to_value(recv_buf, "%d,%d", &signal, NULL);
+
+    log_nrml("AT+CSQ Check Signal Strength:         [%d]\n", signal);
+
+    return signal;
+}
+
+/* Send AT+CREG? command to check SIM card register status */
+int atcmd_check_gprs_register(COM_PORT *comport)
+{
+    int         retval, stat = -1;
+    char        recv_buf[ATCMD_REPLY_LEN]; 
+
+    memset(recv_buf, 0, sizeof(recv_buf));
+    retval = send_atcmd_check_request(comport, "AT+CREG?\r", 3000, recv_buf, sizeof(recv_buf));
+    if( 0 !=  retval)
+    {
+        log_err("AT+CREG? Check SIM card Register:      [FAILED]\n");
+        return stat;
+    } 
+    
+    split_string_to_value(recv_buf, "%d,%d", NULL, &stat);
+    log_nrml("AT+CREG? Check SIM Card Register:     [%d]\n", stat);
+
+    return stat;
+}
+
+
+int atcmd_check_gprs_carrier(COM_PORT *comport, char *carrier)
+{
+    int               retval;
+    char              recv_buf[ATCMD_REPLY_LEN];
+ 
+    if(carrier == NULL)
+    {
+        return -1;
+    }
+
+    retval = send_atcmd_check_request(comport, "AT+COPS?\r", 5000, recv_buf, sizeof(recv_buf));
+    if(retval) 
+    {
+        log_warn("AT+COPS? Check SIM Card Carrier:        [FAILED]\n");
+        return retval;
+    }
+
+    split_string_to_value(recv_buf, "%d,%d,%s,%d", NULL, NULL, carrier, NULL);
+    del_char_from_string(carrier, '\"');
+
+    log_nrml("AT+COPS? Check SIM Card Carrier:      [%s]\n", carrier);
+
+    return 0;
+}
+
+int atcmd_check_gprs_mcc_mnc(COM_PORT *comport, char *mcc_mnc)
+{
+    int               retval;
+    char              recv_buf[ATCMD_REPLY_LEN];
+    int               status;
+    char              mcc[5];
+    char              mnc[5];
+    char              *ptr = NULL;
+
+    retval=send_atcmd_check_ok(comport, "AT+QENG=1\r", 1000);
+    if(retval) 
+    {
+        log_err("Send AT command AT+QENG=1 failure\n");
+        return retval;
+    }
+
+    retval = send_atcmd(comport, "AT+QENG?\r", "OK\r\n", "ERROR\r\n", 5000, recv_buf, sizeof(recv_buf));
+    if(retval) 
+    {
+        log_err("AT+QENG? Check GPRS MCC and MNC failure\n");
+        return retval;
+    }
+
+    /* AT+QENG? respond value:
+     * +QENG: 1,0
+     * +QENG: 0,460,00,7108,80c4,554,41,-95,18,50,0,10,x,x,x,x,x,x,x  
+     */
+    if(NULL != (ptr=strrchr (recv_buf, ':')) )   
+    {
+        split_string_to_value(ptr, "%d,%s,%s,%s", &status, mcc, mnc, NULL);
+        if(!status)
+        {
+            sprintf(mcc_mnc, "%s-%s", mcc, mnc);
+            log_nrml("AT+QGSMLOC=1 Check GPRS Location MCC-MNC: %s\n", mcc_mnc);
+            return 0;
+        }
+    }
+
+    printf("ptr: %s\n", ptr);
+
+    return -1;
+}
+
+
+int atcmd_check_gprs_location(COM_PORT *comport, GPRS_LOCATION *loc)
+{
+    int               retval;
+    char              recv_buf[ATCMD_REPLY_LEN];
+    int               status;
+    
+    retval=send_atcmd_check_ok(comport, "AT+QIFGCNT=0\r", 1000);
+    if(retval) 
+    {
+        log_warn("Send AT command AT+QIFGCNT=0 failure\n");
+        return retval;
+    }
+
+    retval = send_atcmd_check_request(comport, "AT+QGSMLOC=1\r", 10000, recv_buf, sizeof(recv_buf));
+    if(retval) 
+    {
+        log_warn("AT+QGSMLOC=1 Check GPRS Location:         [FAILED]\n");
+        return retval;
+    }
+
+    /* +QGSMLOC: 0,114.389210,30.500380,2013/01/16,14:03:12, it's GMT time  */
+    split_string_to_value(recv_buf, "%d,%s,%s,%s,%s", &status, loc->longitude, loc->latitude, loc->date, loc->time);
+
+    if(status) /* Get LOC failure */
+    {
+        memset(loc->longitude, 0, sizeof(loc->longitude));
+        memset(loc->latitude, 0, sizeof(loc->latitude));
+        memset(loc->date, 0, sizeof(loc->date));
+        memset(loc->time, 0, sizeof(loc->time));
+        log_warn("AT+QGSMLOC=1 Check GPRS Location failure: %s\n", recv_buf);
+        return -1;
+    }
+
+    log_nrml("GPRS location result=%d latitude,longitude: [%s,%s]\n", status, loc->latitude, loc->longitude);
+    log_nrml("GPRS Date and time: %s,%s\n", loc->date, loc->time);
+
+    return retval;
+}
+
+
+int atcmd_set_network_mode(COM_PORT *comport, int mode)
+{
+    int              retval;
+    char             atcmd[64]={0}; 
+
+    sprintf (atcmd, "AT+CNMP=%d\r", mode); 
+    if(0 != (retval=send_atcmd_check_ok(comport, atcmd, 3000)) )
+    {
+        log_warn("AT+CNMP Set Network Mode as %d:      [FAILED]\n", mode);
+        return retval;
+    } 
+    log_nrml("AT+CNMP=%d Set Network Mode:          [OK]\n", mode);
+
+    /* AT+CNAOP=?: 0->Automatic, 1->GSM,WCDMA, 2->WCDMA,GSM */
+    strncpy (atcmd, "AT+CNAOP=2\r", sizeof(atcmd)); 
+    if(0 != (retval=send_atcmd_check_ok(comport, atcmd, 3000)) )
+    {
+        log_warn("AT+CNAOP=2 Set Acquisitions order preference to WCDMA,GSM     [FAILED]\n");
+        return retval;
+    } 
+    log_nrml("AT+CNAOP=2 Set Network Preference     [OK]\n");
+
+    return 0;
+}
+
+int atcmd_check_gprs_name(COM_PORT *comport, char *name)
+{
+    int               retval;
+    char              recv_buf[ATCMD_REPLY_LEN];
+ 
+    if(name == NULL)
+    {
+        return -1;
+    }
+
+    retval = send_atcmd_check_value(comport, "AT+CGMM\r", 5000, recv_buf, sizeof(recv_buf));
+    if(retval) 
+    {
+        log_warn("AT+CGMM Check GPRS Module Name:         [FAILED]\n");
+        return retval;
+    }
+
+    strcpy(name, recv_buf);
+
+    log_nrml("AT+CGMM Check GPRS Module Name:       [%s]\n", name);
+
+    return 0;
+}
+
+
+int atcmd_check_gprs_version(COM_PORT *comport, char *version)
+{
+    int               retval;
+    char              recv_buf[ATCMD_REPLY_LEN];
+ 
+    if(version == NULL)
+    {
+        return -1;
+    }
+
+    retval = send_atcmd_check_request(comport, "AT+CGMR\r", 5000, recv_buf, sizeof(recv_buf));
+    if(retval) 
+    {
+        log_warn("AT+CGMR Check GPRS Module Version:      [FAILED]\n");
+        return retval;
+    }
+
+    strcpy(version, recv_buf);
+    log_nrml("AT+CGMR Check GPRS Module Version:    [%s]\n", version);
+
+    return 0;
+}
+
+int atcmd_check_gprs_iemi(COM_PORT *comport, char *iemi)
+{
+    int               retval;
+    char              recv_buf[ATCMD_REPLY_LEN];
+ 
+    if(iemi == NULL)
+    {
+        return -1;
+    }
+
+    retval = send_atcmd_check_value(comport, "AT+CGSN\r", 5000, recv_buf, sizeof(recv_buf));
+    if(retval) 
+    {
+        log_warn("AT+CGSN Check GPRS Module IEMI:      [FAILED]\n");
+        return retval;
+    }
+
+    strcpy(iemi, recv_buf);
+    log_nrml("AT+CGSN Check GPRS Module IEMI:       [%s]\n", iemi);
+
+    return 0;
+}
+
+
+int atcmd_check_gprs_network(COM_PORT *comport, int *network)
+{
+    int               retval;
+    char              recv_buf[ATCMD_REPLY_LEN];
+ 
+    if(network == NULL)
+    {
+        return -1;
+    }
+
+    retval = send_atcmd_check_request(comport, "AT+CNSMOD?\r", 5000, recv_buf, sizeof(recv_buf));
+    if(retval) 
+    {
+        log_warn("AT+CNSMOD Check Network Mode:        [FAILED]\n");
+        return retval;
+    }
+
+    split_string_to_value(recv_buf, "%d,%d", NULL, network);
+
+    log_nrml("AT+CNSMOD? Check Network Mode:        [%d]\n", *network);
+    return 0;
+}
+
+
+int atcmd_set_apn(COM_PORT *comport, char *apn)
+{
+    char             atcmd[64]={0};
+    int              retval; 
+    
+    sprintf (atcmd, "AT+CGDCONT=1,\"IP\",\"%s\"\r", apn);
+    if(0 != (retval=send_atcmd_check_ok(comport, atcmd, 2000)) )
+    {
+        log_err("AT+CGDCONT Set APN as \"%s\"         [FAILED]\n", apn); 
+        return retval;
+    }
+
+    log_nrml("AT+CGDCONT Set APN as \"%s\"          [OK]\n");
+    return retval;
+}
+
+
+unsigned char at_match (char *p_pcStr, char *p_pcMatch)
+{
+    char                    acBuf [256],
+                            *pcStart = NULL,
+                            *pcTab   = NULL;
+
+    pcStart = p_pcMatch; 
+    
+    while (0 != pcStart)
+    {
+        memset (acBuf, 0x00, sizeof (acBuf)); 
+
+        pcTab = strchr (pcStart, 9);    // Find for TAB 
+        if (0 != pcTab)
+        {
+            if (pcTab != pcStart)
+            {
+                strncpy (acBuf, pcStart, pcTab - pcStart);
+            } 
+            pcStart = (0 != *(++pcTab)) ? pcTab : 0;
+        }
+        else
+        {
+            strcpy (acBuf, pcStart); 
+            pcStart = NULL;
+        } 
+        if (0 != acBuf [0] && 0 != strstr (p_pcStr, acBuf))
+        {
+            return 0x00;
+        }
+    } 
+    return 0x01;
+}
+
+ 
+/*=========================================================================================================
+ * Parameter Description:  
+ *     COM_PORT    *comport:  The GPRS module data port(/dev/ttyS2);  
+ *     char          *atCmd:  The AT command which will be sent to GPRS module
+ *     char         *expect:  The EXPECT reply string by GPRS module for the AT command, such as "OK"
+ *     char          *error:  The ERROR  reply string by GPRS module for the AT command, such as "ERROR"
+ *   unsigned long  timeout:  Read from data port timeout value
+ *     char           reply:  The AT command reply output buffer
+ *     int        reply_len:  The AT command reply output buffer length
+ *
+ * Return Value:
+ *     int           retval:   0->command send OK and "expect" string mached. !0->failure
+ *     char        *content:   The AT command reply string by modem.
+ *
+ *=========================================================================================================*/
+
+int send_atcmd(COM_PORT *comport, char *atCmd, char *expect, char *error,
+              unsigned long timeout, char *reply, int reply_len)
+{
+    int                  retval = -1; 
+    unsigned long        delay = 200;
+    unsigned long        gap = 300;
+    unsigned long        ulStartTime; 
+    
+    int                  iCmdLen = 0,
+                         iRecvLen = 0,
+                         iRecvSize = 0,
+                         iSize = 0;
+
+    
+    char                 acRecv[1024];
+    char                 *pcRecvPtr = NULL; 
+    
+    if(comport->is_connted != 0x01) /* Comport not opened */
+    {
+        log_dbg("Comport not opened.\n");
+        return  -1;
+    }
+
+#if 0
+    /*=========================================
+     *=  Pause a while before send AT command =
+     *=========================================*/
+    if(0 != delay)
+    {
+        ulStartTime = time_now();
+        while (time_elapsed(ulStartTime) < delay)
+        {
+            micro_second_sleep(1);
+        }
+    }
+#endif
+
+    /*====================
+     *=  Throw Rubbish   =
+     *====================*/
+    ulStartTime = time_now(); 
+    memset(&acRecv, 0, sizeof(acRecv));
+
+    while (time_elapsed(ulStartTime) < delay)
+    {
+        iSize = comport_recv(comport, acRecv, 1, 50);
+        if(iSize <= 0)
+        {
+            break;
+        } 
+        micro_second_sleep(1);
+    }
+
+    /*====================
+     *=  Send AT command =
+     *====================*/
+
+    iCmdLen = strlen(atCmd);
+    retval = comport_send (comport, atCmd, iCmdLen);
+    if (0 != retval)
+    {
+        retval = 0x02;
+        goto  CleanUp;
+    }
+
+    /*===================================================
+     *=  Pause a while before read command response. 
+     *===================================================*/
+    if(0 != gap)
+    {
+        ulStartTime = time_now();
+        while (time_elapsed(ulStartTime) < gap)
+        {
+            micro_second_sleep(1);
+        }
+    }
+    
+    memset (acRecv, 0, sizeof (acRecv));
+    pcRecvPtr = acRecv;
+    iRecvLen = 0;
+    iRecvSize = sizeof (acRecv);
+
+    retval = -1;
+    ulStartTime = time_now();
+
+    while (time_elapsed(ulStartTime) < timeout)
+    {
+        if ( iRecvLen < (iRecvSize-1) )
+        {
+            iSize = comport_recv (comport, pcRecvPtr, 1, 50); 
+            if (iSize >0)
+            {
+                iRecvLen += iSize;
+                pcRecvPtr += iSize;
+                acRecv [iRecvSize-1] = 0;
+
+                /*========================================
+                 * Match the received with expect String =
+                 *========================================*/
+                if(NULL != expect)
+                {
+                    if (0x00 == at_match(acRecv, expect))
+                    {
+                        retval = 0;
+                        goto CleanUp;
+                    }
+                } 
+                
+                /*======================================== 
+                 * Match the received with error String  = 
+                 *========================================*/
+                if(NULL != error)
+                {
+                    if (0x00 == at_match(acRecv, error))
+                    { 
+                        retval = -3;
+                        goto CleanUp;
+                    }
+                } 
+            } /*End of (iSize > 0)  */ 
+        } /* End of (iRecvLen < (iRecvSize-1))  */ 
+        
+        micro_second_sleep(1);
+    } /* End of time_elapsed(ulStartTime) < timeout */
+
+
+    if(NULL==expect)
+        retval = 0x00;
+    else
+        retval = -4; 
+
+CleanUp:
+    //printf("acRecv:\n %s\n", acRecv);
+    if( NULL != reply)
+    {
+        strncpy(reply, acRecv, reply_len);
+    }
+
+#if 1  /* Log the command result to log system  */
+    {
+        char   log[512] = {0};
+        snprintf(log, 512, "Send AT command: \"%s\" get reply \"%s\"", atCmd, acRecv);
+        int i = 0;
+        for (i=0; i<512; i++)
+        {
+            if('\r'==log[i] || '\n'==log[i] || '\t'==log[i]) 
+            {
+                log[i]=' '; 
+            }
+            else if (0 == log[i]) 
+            {
+                break;
+            } 
+        }
+        log_info("%s\n", log);
+    }
+#endif 
+    
+    return retval;
+}
diff --git a/program/cp_library/cp_atcmd.h b/program/cp_library/cp_atcmd.h
new file mode 100644
index 0000000..6c20b93
--- /dev/null
+++ b/program/cp_library/cp_atcmd.h
@@ -0,0 +1,68 @@
+/********************************************************************************
+ *      Copyright:  (C) guowenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  atcmd.h
+ *    Description:  This is the head file for atcmd.c
+ *
+ *        Version:  1.0.0(05/15/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "05/15/2012 05:31:10 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_ATCMD_H
+#define __CP_ATCMD_H
+
+#include "cp_comport.h"
+
+/* AT+CPSI command return important result*/
+typedef struct _GPRS_LOCATION
+{
+    char            longitude[15];
+    char            latitude[15];
+    char            date[15];
+    char            time[15];
+    char            mcc_mnc[16];/*   Mobile Country Code, China is 460 */
+} GPRS_LOCATION;
+
+typedef struct _REGISTER_INFO
+{
+    int             type;       /*  SIM card register type: REG_HOMEWORK,REG_SEARCHING... */
+    int             signal;     /*  GPRS signal */ 
+    char            carrier[64];/*  Network operator */
+    GPRS_LOCATION   loc;        /*  Location */
+} REGISTER_INFO;
+
+
+typedef struct _HARDWARE_INFO
+{
+    char            model[64];  /*  AT+CGMM check GPRS module model */
+    char            mrev[64];   /*  AT+CGMR check GPRS module revision */
+    char            iemi[64];   /*  AT+CGSN check GPRS module IEMI(International Mobile station Equipment Identity) number */
+} HW_INFO;
+
+extern int send_atcmd(COM_PORT *st_comport, char *atCmd, char *expect, char *error, 
+       unsigned long timeout, char *reply, int reply_len);
+
+extern int send_atcmd_check_ok(COM_PORT *comport, char *atcmd, unsigned long timeout);
+extern int send_atcmd_check_value(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len);
+extern int send_atcmd_check_request(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len);
+
+
+extern int atcmd_check_at_ready(COM_PORT *comport); /* Send ATE0 command */
+extern int atcmd_check_sim_valid(COM_PORT *comport); /* Send AT+CPIN? command */
+extern int atcmd_check_gprs_signal(COM_PORT *comport); /* Send AT+CSQ command */
+extern int atcmd_check_gprs_register(COM_PORT *comport);
+extern int atcmd_check_gprs_carrier(COM_PORT *comport, char *carrier);
+extern int atcmd_check_gprs_name(COM_PORT *comport, char *name);
+extern int atcmd_check_gprs_version(COM_PORT *comport, char *version);
+extern int atcmd_check_gprs_iemi(COM_PORT *comport, char *iemi);
+extern int atcmd_check_gprs_network(COM_PORT *comport, int *network);
+extern int atcmd_check_gprs_location(COM_PORT *comport, GPRS_LOCATION *location);
+extern int atcmd_check_gprs_mcc_mnc(COM_PORT *comport, char *mcc_mnc);
+
+extern int atcmd_set_network_mode(COM_PORT *comport, int mode);
+extern int atcmd_set_apn(COM_PORT *comport, char *apn);
+
+#endif /* _CP_ATCMD_H */
diff --git a/program/cp_library/cp_common.h b/program/cp_library/cp_common.h
new file mode 100644
index 0000000..0dd6125
--- /dev/null
+++ b/program/cp_library/cp_common.h
@@ -0,0 +1,68 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_common.h
+ *    Description:  This head file is for some common definition
+ *
+ *        Version:  1.0.0(11/13/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/13/2012 01:48:01 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_COMMON_H
+#define __CP_COMMON_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#endif
+
+#define container_of(ptr, type, member) ({   \
+        const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+        (type *)( (char *)__mptr - offsetof(type,member) );})
+
+//#define MEM_LEAK_CHECK
+
+static inline void *_t_malloc(size_t size
+#ifdef MEM_LEAK_CHECK
+, const char *file, unsigned int line
+#endif
+        )
+{
+    void *ptr;
+    
+    if ((ptr = malloc (size)))
+        memset (ptr, 0, size);
+#ifdef MEM_LEAK_CHECK
+    printf ("MALLOC,0x%p @%s:%u\n", ptr, file, line);
+#endif
+    return ptr;
+}
+
+static inline void _t_free(void *ptr
+#ifdef MEM_LEAK_CHECK
+, const char *file, unsigned int line
+#endif
+        )
+{
+#ifdef MEM_LEAK_CHECK
+    printf ("FREE,0x%p @%s:%u\n", ptr, file, line);
+#endif
+    free(ptr);
+}
+
+#ifdef MEM_LEAK_CHECK
+#define t_free(p)    if(p){ _t_free(p, __FILE__, __LINE__); p=NULL; }
+#define t_malloc(s)  _t_malloc(s, __FILE__, __LINE__)
+#else
+#define t_free(p)    if(p){ _t_free(p); p=NULL; }
+#define t_malloc(s)  _t_malloc(s)
+#endif
+
+#endif
+
diff --git a/program/cp_library/cp_comport.c b/program/cp_library/cp_comport.c
new file mode 100644
index 0000000..2aecafa
--- /dev/null
+++ b/program/cp_library/cp_comport.c
@@ -0,0 +1,600 @@
+/*  ********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_comport.c
+ *    Description:  It's the comport operate library.
+ *                  
+ *        Version:  1.0.0(10/17/2011~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/17/2011 03:33:25 PM"
+ *                  
+ ********************************************************************************/
+
+#include    "cp_comport.h"
+
+/**************************************************************************************
+ *  Description: Set the comport structure
+ *   Input Args: dev_name:  The comport device name path, such as '/dev/ttyS3'
+ *               baudrate:  The baudrate, such as 115200
+ *               settings:  The databit,parity,stopbit,flowctrl settings, such as '8N1N'
+ *  Output Args: NONE
+ * Return Value: The COM_PORT structure pointer.
+ *************************************************************************************/
+COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings)
+{
+    COM_PORT *comport = NULL;
+    if (NULL == (comport = (COM_PORT *) malloc(sizeof(COM_PORT))))
+    {
+        return NULL;
+    }
+    memset(comport, 0, sizeof(COM_PORT));
+    comport->is_connted = 0;
+    comport->frag_size = 128;
+
+    strncpy(comport->dev_name, dev_name, DEVNAME_LEN);
+    comport->baudrate = baudrate;
+
+    set_settings(comport, settings);
+#ifdef  COM_DEBUG
+    disp_settings(comport);
+#endif
+
+    return comport;
+}
+
+#ifdef  COM_DEBUG
+void disp_settings(COM_PORT * comport)
+{
+    COM_PRINT("Device:\t\t\t\"%s\"\n", comport->dev_name);
+    COM_PRINT("Baudrate:\t\t%ld\n", comport->baudrate);
+    COM_PRINT("DataBit:\t\t\'%d\'\n", comport->databit);
+    switch (comport->parity)
+    {
+      case 0:
+          COM_PRINT("Parity:\t\t\t\'N\'\n");
+          break;
+      case 1:
+          COM_PRINT("Parity:\t\t\t\'O\'\n");
+          break;
+      case 2:
+          COM_PRINT("Parity:\t\t\t\'E\'\n");
+          break;
+      case 3:
+          COM_PRINT("Parity:\t\t\t\'S\'\n");
+          break;
+    }
+    COM_PRINT("StopBit:\t\t\'%ld\'\n", (long int)comport->stopbit);
+    switch (comport->flowctrl)
+    {
+      case 0:
+          COM_PRINT("FlowCtrl:\t\t\'N\'\n");
+          break;
+      case 1:
+          COM_PRINT("FlowCtrl:\t\t\'S\'\n");
+          break;
+      case 2:
+          COM_PRINT("FlowCtrl:\t\t\'H\'\n");
+          break;
+      case 3:
+          COM_PRINT("FlowCtrl:\t\t\'B\'\n");
+          break;
+    }
+    COM_PRINT("\n");
+    return;
+}
+#endif
+
+/**************************************************************************************
+ *  Description: Set the comport databit,parity,stopbit,flowctrl
+ *   Input Args: comport: the COM_PORT pointer
+ *               settings: The databit/parity/stopbit/flowctrl settings as like "8N1N" 
+ *  Output Args: NONE
+ * Return Value: NONE
+ *************************************************************************************/
+void set_settings(COM_PORT * comport, const char *settings)
+{
+    if(NULL==settings || NULL==comport)
+        return ;
+
+    switch (settings[0])        /* data bit */
+    {
+      case '7':
+          comport->databit = 7;
+          break;
+      case '8':
+      default:
+          comport->databit = 8;
+          break;
+    }
+
+    switch (settings[1])        /* parity */
+    {
+      case 'O':
+      case 'o':
+          comport->parity = 1;
+          break;
+      case 'E':
+      case 'e':
+          comport->parity = 2;
+          break;
+      case 'S':
+      case 's':
+          comport->parity = 3;
+          break;
+      case 'N':
+      case 'n':
+      default:
+          comport->parity = 0;
+          break;
+    }
+
+    switch (settings[2])        /* stop bit */
+    {
+      case '0':
+          comport->stopbit = 0;
+          break;
+      case '1':
+      default:
+          comport->stopbit = 1;
+          break;
+    }
+
+    switch (settings[3])        /* flow control */
+    {
+      case 'S':
+      case 's':
+          comport->flowctrl = 1;
+          break;
+      case 'H':
+      case 'h':
+          comport->flowctrl = 2;
+          break;
+      case 'B':
+      case 'b':
+          comport->flowctrl = 3;
+          break;
+      case 'N':
+      case 'n':
+      default:
+          comport->flowctrl = 0;
+          break;
+    }
+}
+
+void comport_close(COM_PORT * comport)
+{
+    if (0 != comport->fd)
+    {
+        COM_PRINT("Close device \"%s\"\n", comport->dev_name);
+        close(comport->fd);
+    }
+    comport->is_connted = 0x00;
+    comport->fd = -1;
+}
+
+void comport_term(COM_PORT * comport)
+{
+    if(NULL == comport)
+        return;
+
+    if (0 != comport->fd)
+    {
+        comport_close(comport);
+    }
+    memset(comport, 0x00, sizeof(COM_PORT)); 
+    free(comport);
+    comport = NULL;
+
+    return;
+}
+
+int comport_open(COM_PORT * comport)
+{
+    int retval = -1;
+    struct termios old_cfg, new_cfg;
+    int old_flags;
+    long tmp;
+
+    if(NULL==comport)
+        return -1;
+
+    comport_close(comport);
+
+
+    /* Not a TTY device */
+    if( !strstr(comport->dev_name, "tty"))
+    {
+        COM_PRINT("Open Not tty device \"%s\"\n", comport->dev_name);
+        comport->fd = open(comport->dev_name, O_RDWR);
+        retval = comport->fd<0 ? -2 : comport->fd;
+        goto CleanUp;
+    }
+
+    comport->fd = open(comport->dev_name, O_RDWR | O_NOCTTY | O_NONBLOCK);
+    if (comport->fd < 0)
+    {
+        retval = -3;
+        goto CleanUp;
+    }
+    COM_PRINT("Open device \"%s\"\n", comport->dev_name);
+
+    if ((-1 != (old_flags = fcntl(comport->fd, F_GETFL, 0)))
+        && (-1 != fcntl(comport->fd, F_SETFL, old_flags & ~O_NONBLOCK)))
+    {
+        // Flush input and output
+        if (-1 == tcflush(comport->fd, TCIOFLUSH))
+        {
+            retval = -4;
+            goto CleanUp;
+        }
+    }
+    else                        // Failure
+    {
+        retval = -5;
+        goto CleanUp;
+    }
+
+    if (0 != tcgetattr(comport->fd, &old_cfg))
+    {
+        retval = -6;          // Failed to get Com settings  
+        goto CleanUp;
+    }
+
+    memset(&new_cfg, 0, sizeof(new_cfg));
+
+    /*=====================================*/
+    /*       Configure comport         */
+    /*=====================================*/
+
+    new_cfg.c_cflag &= ~CSIZE;
+    new_cfg.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
+    new_cfg.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+    new_cfg.c_oflag &= ~(OPOST);
+
+    /* Set the data bit */
+    switch (comport->databit)
+    {
+      case 0x07:
+          new_cfg.c_cflag |= CS7;
+          break;
+      case 0x06:
+          new_cfg.c_cflag |= CS6;
+          break;
+      case 0x05:
+          new_cfg.c_cflag |= CS5;
+          break;
+      default:
+          new_cfg.c_cflag |= CS8;
+          break;
+    }
+
+    /* Set the parity */
+    switch (comport->parity)
+    {
+      case 0x01:               // Odd  
+          new_cfg.c_cflag |= (PARENB | PARODD);
+          new_cfg.c_cflag |= (INPCK | ISTRIP);
+          break;
+      case 0x02:               // Even 
+          new_cfg.c_cflag |= PARENB;
+          new_cfg.c_cflag &= ~PARODD;;
+          new_cfg.c_cflag |= (INPCK | ISTRIP);
+          break;
+      case 0x03:
+          new_cfg.c_cflag &= ~PARENB;
+          new_cfg.c_cflag &= ~CSTOPB;
+          break;
+      default:
+          new_cfg.c_cflag &= ~PARENB;
+    }
+
+    /* Set Stop bit */
+    if (0x01 != comport->stopbit)
+    {
+        new_cfg.c_cflag |= CSTOPB;
+    }
+    else
+    {
+        new_cfg.c_cflag &= ~CSTOPB;
+    }
+
+    /* Set flow control */
+    switch (comport->flowctrl)
+    {
+      case 1:                  // Software control 
+      case 3:
+          new_cfg.c_cflag &= ~(CRTSCTS);
+          new_cfg.c_iflag |= (IXON | IXOFF);
+          break;
+      case 2:                  // Hardware control
+          new_cfg.c_cflag |= CRTSCTS;   // Also called CRTSCTS
+          new_cfg.c_iflag &= ~(IXON | IXOFF);
+          break;
+      default:                 // NONE
+          new_cfg.c_cflag &= ~(CRTSCTS);
+          new_cfg.c_iflag &= ~(IXON | IXOFF);
+          break;
+    }
+
+    /* Set baudrate */
+    switch (comport->baudrate)
+    {
+      case 115200:
+          tmp = B115200;
+          break;
+      case 57600:
+          tmp = B57600;
+          break;
+      case 38400:
+          tmp = B38400;
+          break;
+      case 19200:
+          tmp = B19200;
+          break;
+      case 9600:
+          tmp = B9600;
+          break;
+      case 4800:
+          tmp = B4800;
+          break;
+      case 2400:
+          tmp = B2400;
+          break;
+      case 1800:
+          tmp = B1800;
+          break;
+      case 1200:
+          tmp = B1200;
+          break;
+      case 600:
+          tmp = B600;
+          break;
+      case 300:
+          tmp = B300;
+          break;
+      case 200:
+          tmp = B200;
+          break;
+      case 150:
+          tmp = B150;
+          break;
+      case 134:
+          tmp = B134;
+          break;
+      case 110:
+          tmp = B110;
+          break;
+      case 75:
+          tmp = B75;
+          break;
+      case 50:
+          tmp = B50;
+          break;
+      default:
+          tmp = B115200;
+    }
+    cfsetispeed(&new_cfg, tmp);
+    cfsetispeed(&new_cfg, tmp);
+
+    /* Set the Com port timeout settings */
+    new_cfg.c_cc[VMIN] = 0;
+    new_cfg.c_cc[VTIME] = 0;
+
+    tcflush(comport->fd, TCIFLUSH);
+    if (0 != tcsetattr(comport->fd, TCSANOW, &new_cfg))
+    {
+        retval = -7;          // Failed to set device com port settings   
+        goto CleanUp;
+    }
+
+    COM_PRINT("Connected device \"%s\".\n", comport->dev_name);
+    comport->is_connted = 0x01;
+    retval = comport->fd;
+
+CleanUp:
+    COM_PRINT("Open device \"%s\" %s.\n", comport->dev_name, retval>0 ? "successfully" : "failure");
+    return retval;
+}
+
+void nonblock()
+{
+    struct termios ttystate;
+
+    //get the terminal state
+    tcgetattr(STDIN_FILENO, &ttystate);
+
+    //turn off canonical mode
+    ttystate.c_lflag &= ~ICANON;
+    //minimum of number input read.
+    ttystate.c_cc[VMIN] = 1;
+
+    //set the terminal attributes.
+    tcsetattr(STDIN_FILENO, TCSANOW, &ttystate);
+}
+
+int kbhit()
+{
+    struct timeval tv;
+    fd_set fds;
+    tv.tv_sec = 0;
+    tv.tv_usec = 0;
+    FD_ZERO(&fds);
+    FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0
+    select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv);
+    return FD_ISSET(STDIN_FILENO, &fds);
+}
+
+int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout)
+{
+    int retval = 0;             // Function return value
+    int iRet;
+    fd_set stReadFds, stExcpFds;
+    struct timeval stTime;
+
+    if (NULL == buf || 0 >= buf_size)
+    {
+        COM_PRINT("%s() usage error.\n", __FUNCTION__);
+        retval = -1;
+        goto CleanUp;
+    }
+
+    if (0x01 != comport->is_connted)
+    {
+        COM_PRINT("%s() comport not connected.\n", __FUNCTION__);
+        retval = -2;
+        goto CleanUp;
+    }
+
+    //printf("bufsize=%d timeout=%lu\n", buf_size, timeout);
+
+    FD_ZERO(&stReadFds);
+    FD_ZERO(&stExcpFds);
+    FD_SET(comport->fd, &stReadFds);
+    FD_SET(comport->fd, &stExcpFds);
+
+    if (0xFFFFFFFF != timeout)
+    {
+        stTime.tv_sec = (time_t) (timeout / 1000);
+        stTime.tv_usec = (long)(1000 * (timeout % 1000));
+
+        iRet = select(comport->fd + 1, &stReadFds, 0, &stExcpFds, &stTime);
+        if (0 == iRet)
+        {
+            retval = 0;         // No data in Com port buffer
+            goto CleanUp;
+        }
+        else if (0 < iRet)
+        {
+            if (0 != FD_ISSET(comport->fd, &stExcpFds))
+            {
+                retval = -6;  // Error during checking recv status    
+                COM_PRINT("Error checking recv status.\n");
+                goto CleanUp;
+            }
+
+            if (0 == FD_ISSET(comport->fd, &stReadFds))
+            {
+                retval = 0;  // No incoming data 
+                COM_PRINT("No incoming data.\n");
+                goto CleanUp;
+            }
+        }
+        else
+        {
+            if (EINTR == errno)
+            {
+                COM_PRINT("catch interrupt signal.\n");
+                retval = 0;  // Interrupted signal catched
+            }
+            else
+            {
+                COM_PRINT("Check recv status failure.\n");
+                retval = -7;  // Error during checking recv status
+            }
+
+            goto CleanUp;
+        }
+    }
+
+    usleep(10000); /* sleep for 10ms for data incoming */
+
+    // Get data from Com port
+    iRet = read(comport->fd, buf, buf_size);
+    if (0 > iRet)
+    {
+        if (EINTR == errno)
+            retval = 0;      // Interrupted signal catched
+        else
+            retval = -3;      // Failed to read Com port
+
+        goto CleanUp;
+    }
+
+#if 0
+    {
+        int   i=0;
+        printf("Receive %d bytes data: \n", iRet);
+        for(i=0; i<iRet; i++)
+        {
+            printf("0x%02x ", buf[i]);
+        }
+        printf("\n");
+    }
+#endif
+
+    retval = iRet;
+
+  CleanUp:
+    return retval;
+
+}
+
+int comport_send(COM_PORT * comport, char *buf, int send_bytes)
+{
+    char *ptr, *end;
+    int retval = 0;
+    int send = 0;
+
+    if (NULL == buf || 0 >= send_bytes)
+    {
+        COM_PRINT("%s() Usage error.\n", __FUNCTION__);
+        retval = -1;
+        goto CleanUp;
+    }
+
+    if (0x01 != comport->is_connted)    // Comport not opened ?
+    {
+        retval = -3;
+        COM_PRINT("Serail not connected.\n");
+        goto CleanUp;
+    }
+
+    //printf("Send %s with %d bytes.\n", buf, send_bytes);
+
+    // Large data, then slice them and send
+    if (comport->frag_size < send_bytes)
+    {
+        ptr = buf;
+        end = buf + send_bytes;
+
+        do
+        {
+            // Large than frag_size
+            if (comport->frag_size < (end - ptr))
+            {
+                send = write(comport->fd, ptr, comport->frag_size);
+                if (0 >= send || comport->frag_size != send)
+                {
+                    retval = -4;
+                    goto CleanUp;
+                }
+                ptr += comport->frag_size;
+            }
+            else                // Less than frag_size, maybe last fragmention.
+            {
+                send = write(comport->fd, ptr, (end - ptr));
+                if (0 >= send || (end - ptr) != send)
+                {
+                    retval = -4;
+                    goto CleanUp;
+                }
+                ptr += (end - ptr);
+            }
+        }
+        while (ptr < end);
+    }
+    else                        // The send data is not large than a fragmention.
+    {
+        send = write(comport->fd, buf, send_bytes);
+        if (0 >= send || send_bytes != send)
+        {
+            retval = -5;
+            goto CleanUp;
+        }
+    }
+
+  CleanUp:
+    return retval;
+}
+
diff --git a/program/cp_library/cp_comport.h b/program/cp_library/cp_comport.h
new file mode 100644
index 0000000..4dea2f1
--- /dev/null
+++ b/program/cp_library/cp_comport.h
@@ -0,0 +1,67 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_comport.h
+ *    Description:  This head file is for the common TTY/Serial port operator library 
+ *                   
+ *        Version:  1.0.0(10/17/2011~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/17/2011 03:33:25 PM"
+ *                     
+ ********************************************************************************/
+#ifndef  _CP_COMPORT_H
+#define  _CP_COMPORT_H
+
+#include  <stdio.h>
+#include  <stdlib.h>
+#include  <unistd.h>
+#include  <string.h>
+#include  <getopt.h>
+#include  <fcntl.h>
+#include  <errno.h>
+#include  <termios.h>
+#include  <sys/stat.h>
+#include  <sys/wait.h>
+#include  <sys/types.h>
+#include  <sys/stat.h>
+#include  <sys/select.h>
+
+#define BUF_64  64
+
+#ifndef DEVNAME_LEN
+#define DEVNAME_LEN          64
+#endif
+
+//#define COM_DEBUG
+#ifdef  COM_DEBUG
+#define COM_PRINT(format,args...) printf(format, ##args)
+#else
+#define COM_PRINT(format,args...) do{} while(0);
+#endif
+
+//#define msleep(m)               {struct timespec cSleep; cSleep.tv_sec = 0; cSleep.tv_nsec = m * 1000; nanosleep(&cSleep, 0);}
+
+typedef struct __COM_PORT
+{
+    unsigned char databit, parity, stopbit, flowctrl, is_connted;
+    char dev_name[DEVNAME_LEN];
+    unsigned char  used;     /* This comport used or not now */
+    int fd;
+    int frag_size;
+    long baudrate;
+} COM_PORT;
+
+COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings);
+void comport_close(COM_PORT * comport);
+int comport_open(COM_PORT * comport);
+void comport_term(COM_PORT * comport);
+int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout);
+int comport_send(COM_PORT * comport, char *buf, int send_bytes);
+
+void set_settings(COM_PORT * comport, const char *settings);
+void disp_settings(COM_PORT * comport);
+void nonblock();
+int kbhit();
+
+#endif
diff --git a/program/cp_library/cp_dictionary.c b/program/cp_library/cp_dictionary.c
new file mode 100644
index 0000000..96fb783
--- /dev/null
+++ b/program/cp_library/cp_dictionary.c
@@ -0,0 +1,398 @@
+/*-------------------------------------------------------------------------*/
+/**
+   @file    cp_dictionary.c
+   @author  N. Devillard
+   @brief   Implements a dictionary for string variables.
+
+   This module implements a simple dictionary object, i.e. a list
+   of string/string associations. This object is useful to store e.g.
+   informations retrieved from a configuration file (ini files).
+*/
+/*--------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------
+                                Includes
+ ---------------------------------------------------------------------------*/
+#include "cp_dictionary.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/** Maximum value size for integers and doubles. */
+#define MAXVALSZ    1024
+
+/** Minimal allocated number of entries in a dictionary */
+#define DICTMINSZ   128
+
+/** Invalid key token */
+#define DICT_INVALID_KEY    ((char*)-1)
+
+/*---------------------------------------------------------------------------
+                            Private functions
+ ---------------------------------------------------------------------------*/
+
+/* Doubles the allocated size associated to a pointer */
+/* 'size' is the current allocated size. */
+static void * mem_double(void * ptr, int size)
+{
+    void * newptr ;
+ 
+    newptr = calloc(2*size, 1);
+    if (newptr==NULL) {
+        return NULL ;
+    }
+    memcpy(newptr, ptr, size);
+    free(ptr);
+    return newptr ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Duplicate a string
+  @param    s String to duplicate
+  @return   Pointer to a newly allocated string, to be freed with free()
+
+  This is a replacement for strdup(). This implementation is provided
+  for systems that do not have it.
+ */
+/*--------------------------------------------------------------------------*/
+static char * xstrdup(const char * s)
+{
+    char * t ;
+    if (!s)
+        return NULL ;
+    t = (char*)malloc(strlen(s)+1) ;
+    if (t) {
+        strcpy(t,s);
+    }
+    return t ;
+}
+
+/*---------------------------------------------------------------------------
+                            Function codes
+ ---------------------------------------------------------------------------*/
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Compute the hash key for a string.
+  @param    key     Character string to use for key.
+  @return   1 unsigned int on at least 32 bits.
+
+  This hash function has been taken from an Article in Dr Dobbs Journal.
+  This is normally a collision-free function, distributing keys evenly.
+  The key is stored anyway in the struct so that collision can be avoided
+  by comparing the key itself in last resort.
+ */
+/*--------------------------------------------------------------------------*/
+unsigned dictionary_hash(const char * key)
+{
+    int         len ;
+    unsigned    hash ;
+    int         i ;
+
+    len = strlen(key);
+    for (hash=0, i=0 ; i<len ; i++) {
+        hash += (unsigned)key[i] ;
+        hash += (hash<<10);
+        hash ^= (hash>>6) ;
+    }
+    hash += (hash <<3);
+    hash ^= (hash >>11);
+    hash += (hash <<15);
+    return hash ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Create a new dictionary object.
+  @param    size    Optional initial size of the dictionary.
+  @return   1 newly allocated dictionary objet.
+
+  This function allocates a new dictionary object of given size and returns
+  it. If you do not know in advance (roughly) the number of entries in the
+  dictionary, give size=0.
+ */
+/*--------------------------------------------------------------------------*/
+dictionary * dictionary_new(int size)
+{
+    dictionary  *   d ;
+
+    /* If no size was specified, allocate space for DICTMINSZ */
+    if (size<DICTMINSZ) size=DICTMINSZ ;
+
+    if (!(d = (dictionary *)calloc(1, sizeof(dictionary)))) {
+        return NULL;
+    }
+    d->size = size ;
+    d->val  = (char **)calloc(size, sizeof(char*));
+    d->key  = (char **)calloc(size, sizeof(char*));
+    d->hash = (unsigned int *)calloc(size, sizeof(unsigned));
+    return d ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete a dictionary object
+  @param    d   dictionary object to deallocate.
+  @return   void
+
+  Deallocate a dictionary object and all memory associated to it.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_del(dictionary * d)
+{
+    int     i ;
+
+    if (d==NULL) return ;
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]!=NULL)
+            free(d->key[i]);
+        if (d->val[i]!=NULL)
+            free(d->val[i]);
+    }
+    free(d->val);
+    free(d->key);
+    free(d->hash);
+    free(d);
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get a value from a dictionary.
+  @param    d       dictionary object to search.
+  @param    key     Key to look for in the dictionary.
+  @param    def     Default value to return if key not found.
+  @return   1 pointer to internally allocated character string.
+
+  This function locates a key in a dictionary and returns a pointer to its
+  value, or the passed 'def' pointer if no such key can be found in
+  dictionary. The returned character pointer points to data internal to the
+  dictionary object, you should not try to free it or modify it.
+ */
+/*--------------------------------------------------------------------------*/
+char * dictionary_get(dictionary * d, const char * key, char * def)
+{
+    unsigned    hash ;
+    int         i ;
+
+    hash = dictionary_hash(key);
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        /* Compare hash */
+        if (hash==d->hash[i]) {
+            /* Compare string, to avoid hash collisions */
+            if (!strcmp(key, d->key[i])) {
+                return d->val[i] ;
+            }
+        }
+    }
+    return def ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Set a value in a dictionary.
+  @param    d       dictionary object to modify.
+  @param    key     Key to modify or add.
+  @param    val     Value to add.
+  @return   int     0 if Ok, anything else otherwise
+
+  If the given key is found in the dictionary, the associated value is
+  replaced by the provided one. If the key cannot be found in the
+  dictionary, it is added to it.
+
+  It is Ok to provide a NULL value for val, but NULL values for the dictionary
+  or the key are considered as errors: the function will return immediately
+  in such a case.
+
+  Notice that if you dictionary_set a variable to NULL, a call to
+  dictionary_get will return a NULL value: the variable will be found, and
+  its value (NULL) is returned. In other words, setting the variable
+  content to NULL is equivalent to deleting the variable from the
+  dictionary. It is not possible (in this implementation) to have a key in
+  the dictionary without value.
+
+  This function returns non-zero in case of failure.
+ */
+/*--------------------------------------------------------------------------*/
+int dictionary_set(dictionary * d, const char * key, const char * val)
+{
+    int         i ;
+    unsigned    hash ;
+
+    if (d==NULL || key==NULL) return -1 ;
+    
+    /* Compute hash for this key */
+    hash = dictionary_hash(key) ;
+    /* Find if value is already in dictionary */
+    if (d->n>0) {
+        for (i=0 ; i<d->size ; i++) {
+            if (d->key[i]==NULL)
+                continue ;
+            if (hash==d->hash[i]) { /* Same hash value */
+                if (!strcmp(key, d->key[i])) {   /* Same key */
+                    /* Found a value: modify and return */
+                    if (d->val[i]!=NULL)
+                        free(d->val[i]);
+                    d->val[i] = val ? xstrdup(val) : NULL ;
+                    /* Value has been modified: return */
+                    return 0 ;
+                }
+            }
+        }
+    }
+    /* Add a new value */
+    /* See if dictionary needs to grow */
+    if (d->n==d->size) {
+
+        /* Reached maximum size: reallocate dictionary */
+        d->val  = (char **)mem_double(d->val,  d->size * sizeof(char*)) ;
+        d->key  = (char **)mem_double(d->key,  d->size * sizeof(char*)) ;
+        d->hash = (unsigned int *)mem_double(d->hash, d->size * sizeof(unsigned)) ;
+        if ((d->val==NULL) || (d->key==NULL) || (d->hash==NULL)) {
+            /* Cannot grow dictionary */
+            return -1 ;
+        }
+        /* Double size */
+        d->size *= 2 ;
+    }
+
+    /* Insert key in the first empty slot. Start at d->n and wrap at
+       d->size. Because d->n < d->size this will necessarily
+       terminate. */
+    for (i=d->n ; d->key[i] ; ) {
+        if(++i == d->size) i = 0;
+    }
+    /* Copy key */
+    d->key[i]  = xstrdup(key);
+    d->val[i]  = val ? xstrdup(val) : NULL ;
+    d->hash[i] = hash;
+    d->n ++ ;
+    return 0 ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete a key in a dictionary
+  @param    d       dictionary object to modify.
+  @param    key     Key to remove.
+  @return   void
+
+  This function deletes a key in a dictionary. Nothing is done if the
+  key cannot be found.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_unset(dictionary * d, const char * key)
+{
+    unsigned    hash ;
+    int         i ;
+
+    if (key == NULL) {
+        return;
+    }
+
+    hash = dictionary_hash(key);
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        /* Compare hash */
+        if (hash==d->hash[i]) {
+            /* Compare string, to avoid hash collisions */
+            if (!strcmp(key, d->key[i])) {
+                /* Found key */
+                break ;
+            }
+        }
+    }
+    if (i>=d->size)
+        /* Key not found */
+        return ;
+
+    free(d->key[i]);
+    d->key[i] = NULL ;
+    if (d->val[i]!=NULL) {
+        free(d->val[i]);
+        d->val[i] = NULL ;
+    }
+    d->hash[i] = 0 ;
+    d->n -- ;
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dump a dictionary to an opened file pointer.
+  @param    d   Dictionary to dump
+  @param    f   Opened file pointer.
+  @return   void
+
+  Dumps a dictionary onto an opened file pointer. Key pairs are printed out
+  as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as
+  output file pointers.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_dump(dictionary * d, FILE * out)
+{
+    int     i ;
+
+    if (d==NULL || out==NULL) return ;
+    if (d->n<1) {
+        fprintf(out, "empty dictionary\n");
+        return ;
+    }
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]) {
+            fprintf(out, "%20s\t[%s]\n",
+                    d->key[i],
+                    d->val[i] ? d->val[i] : "UNDEF");
+        }
+    }
+    return ;
+}
+
+
+/* Test code */
+#ifdef TESTDIC
+#define NVALS 20000
+int main(int argc, char *argv[])
+{
+    dictionary  *   d ;
+    char    *   val ;
+    int         i ;
+    char        cval[90] ;
+
+    /* Allocate dictionary */
+    printf("allocating...\n");
+    d = dictionary_new(0);
+    
+    /* Set values in dictionary */
+    printf("setting %d values...\n", NVALS);
+    for (i=0 ; i<NVALS ; i++) {
+        sprintf(cval, "%04d", i);
+        dictionary_set(d, cval, "salut");
+    }
+    printf("getting %d values...\n", NVALS);
+    for (i=0 ; i<NVALS ; i++) {
+        sprintf(cval, "%04d", i);
+        val = dictionary_get(d, cval, DICT_INVALID_KEY);
+        if (val==DICT_INVALID_KEY) {
+            printf("cannot get value for key [%s]\n", cval);
+        }
+    }
+    printf("unsetting %d values...\n", NVALS);
+    for (i=0 ; i<NVALS ; i++) {
+        sprintf(cval, "%04d", i);
+        dictionary_unset(d, cval);
+    }
+    if (d->n != 0) {
+        printf("error deleting values\n");
+    }
+    printf("deallocating...\n");
+    dictionary_del(d);
+    return 0 ;
+}
+#endif
+/* vim: set ts=4 et sw=4 tw=75 */
diff --git a/program/cp_library/cp_dictionary.h b/program/cp_library/cp_dictionary.h
new file mode 100644
index 0000000..70fd42c
--- /dev/null
+++ b/program/cp_library/cp_dictionary.h
@@ -0,0 +1,165 @@
+
+/*-------------------------------------------------------------------------*/
+/**
+   @file    cp_dictionary.h
+   @author  N. Devillard
+   @brief   Implements a dictionary for string variables.
+
+   This module implements a simple dictionary object, i.e. a list
+   of string/string associations. This object is useful to store e.g.
+   informations retrieved from a configuration file (ini files).
+*/
+/*--------------------------------------------------------------------------*/
+
+#ifndef _CP_DICTIONARY_H_
+#define _CP_DICTIONARY_H_
+
+/*---------------------------------------------------------------------------
+                                Includes
+ ---------------------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/*---------------------------------------------------------------------------
+                                New types
+ ---------------------------------------------------------------------------*/
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dictionary object
+
+  This object contains a list of string/string associations. Each
+  association is identified by a unique string key. Looking up values
+  in the dictionary is speeded up by the use of a (hopefully collision-free)
+  hash function.
+ */
+/*-------------------------------------------------------------------------*/
+typedef struct _dictionary_ {
+    int             n ;     /** Number of entries in dictionary */
+    int             size ;  /** Storage size */
+    char        **  val ;   /** List of string values */
+    char        **  key ;   /** List of string keys */
+    unsigned     *  hash ;  /** List of hash values for keys */
+} dictionary ;
+
+
+/*---------------------------------------------------------------------------
+                            Function prototypes
+ ---------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Compute the hash key for a string.
+  @param    key     Character string to use for key.
+  @return   1 unsigned int on at least 32 bits.
+
+  This hash function has been taken from an Article in Dr Dobbs Journal.
+  This is normally a collision-free function, distributing keys evenly.
+  The key is stored anyway in the struct so that collision can be avoided
+  by comparing the key itself in last resort.
+ */
+/*--------------------------------------------------------------------------*/
+unsigned dictionary_hash(const char * key);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Create a new dictionary object.
+  @param    size    Optional initial size of the dictionary.
+  @return   1 newly allocated dictionary objet.
+
+  This function allocates a new dictionary object of given size and returns
+  it. If you do not know in advance (roughly) the number of entries in the
+  dictionary, give size=0.
+ */
+/*--------------------------------------------------------------------------*/
+dictionary * dictionary_new(int size);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete a dictionary object
+  @param    d   dictionary object to deallocate.
+  @return   void
+
+  Deallocate a dictionary object and all memory associated to it.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_del(dictionary * vd);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get a value from a dictionary.
+  @param    d       dictionary object to search.
+  @param    key     Key to look for in the dictionary.
+  @param    def     Default value to return if key not found.
+  @return   1 pointer to internally allocated character string.
+
+  This function locates a key in a dictionary and returns a pointer to its
+  value, or the passed 'def' pointer if no such key can be found in
+  dictionary. The returned character pointer points to data internal to the
+  dictionary object, you should not try to free it or modify it.
+ */
+/*--------------------------------------------------------------------------*/
+char * dictionary_get(dictionary * d, const char * key, char * def);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Set a value in a dictionary.
+  @param    d       dictionary object to modify.
+  @param    key     Key to modify or add.
+  @param    val     Value to add.
+  @return   int     0 if Ok, anything else otherwise
+
+  If the given key is found in the dictionary, the associated value is
+  replaced by the provided one. If the key cannot be found in the
+  dictionary, it is added to it.
+
+  It is Ok to provide a NULL value for val, but NULL values for the dictionary
+  or the key are considered as errors: the function will return immediately
+  in such a case.
+
+  Notice that if you dictionary_set a variable to NULL, a call to
+  dictionary_get will return a NULL value: the variable will be found, and
+  its value (NULL) is returned. In other words, setting the variable
+  content to NULL is equivalent to deleting the variable from the
+  dictionary. It is not possible (in this implementation) to have a key in
+  the dictionary without value.
+
+  This function returns non-zero in case of failure.
+ */
+/*--------------------------------------------------------------------------*/
+int dictionary_set(dictionary * vd, const char * key, const char * val);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete a key in a dictionary
+  @param    d       dictionary object to modify.
+  @param    key     Key to remove.
+  @return   void
+
+  This function deletes a key in a dictionary. Nothing is done if the
+  key cannot be found.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_unset(dictionary * d, const char * key);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dump a dictionary to an opened file pointer.
+  @param    d   Dictionary to dump
+  @param    f   Opened file pointer.
+  @return   void
+
+  Dumps a dictionary onto an opened file pointer. Key pairs are printed out
+  as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as
+  output file pointers.
+ */
+/*--------------------------------------------------------------------------*/
+void dictionary_dump(dictionary * d, FILE * out);
+
+#endif
diff --git a/program/cp_library/cp_fds.c b/program/cp_library/cp_fds.c
new file mode 100644
index 0000000..b0814ea
--- /dev/null
+++ b/program/cp_library/cp_fds.c
@@ -0,0 +1,633 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_fds.c
+ *    Description:  This file is the linux epoll basic library
+ *                 
+ *        Version:  1.0.0(10/25/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/25/2012 04:55:30 PM"
+ *                 
+ ********************************************************************************/
+
+#include <sys/resource.h>
+#include "cp_fds.h"
+#include "cp_sock.h"
+#include "cp_time.h"
+#include "cp_common.h"
+
+/* set maximum file descriptor number that can be opened in this process */
+int cp_fds_setrlimit(int maxfd)
+{
+    struct  rlimit    res;
+
+    if(getrlimit(RLIMIT_NOFILE, &res) <0)
+    {
+        log_fatal("getrlimit failed: %s\n", strerror(errno));
+        return -1;
+    }
+
+    if(res.rlim_cur < maxfd)
+    {
+        res.rlim_cur = maxfd;
+        if(setrlimit(RLIMIT_NOFILE, &res) <0)
+        {
+            log_fatal("setrlimit failed: %s\n", strerror(errno));
+            return -2;
+        }
+    }
+
+    return 0;
+}
+
+/* Initialze $fds context, if $fds is NULL, then malloc it */
+CP_FDS *cp_fds_init(CP_FDS *fds, int maxevents, int timeout)
+{
+    int          rv = 0;
+
+    if(NULL != fds)
+    { 
+        memset(fds, 0, sizeof(*fds));
+        fds->epfd = -1;
+    }
+    else
+    {
+        if( !(fds=(CP_FDS *)t_malloc(sizeof(*fds))) )
+        {
+            log_err("fds context malloc failed: %s\n", strerror(errno));
+            return NULL;
+        }
+        else
+        {
+            log_trace("malloc fds with address [%p]\n", fds);
+            memset(fds, 0, sizeof(*fds));
+            fds->epfd = -1;
+            fds->flag |= FLAG_FDS_MALLOC;
+        }
+    }
+
+    /* set maximum file descriptor number that can be opened in this process */
+    maxevents = maxevents<CP_DEF_MAX_EVENTS ? maxevents : CP_DEF_MAX_EVENTS;
+    if( cp_fds_setrlimit(maxevents) )
+    {
+        rv = -2;
+        goto cleanup;
+    }
+
+    /* Create epoll file description */
+    fds->epfd = epoll_create(maxevents);
+    if(fds->epfd < 0)
+    {
+        rv = -3;
+        log_fatal("epoll_create failed: %s\n", strerror(errno));
+        goto cleanup;
+    }
+    log_trace("Open epoll file description [%d]\n", fds->epfd);
+
+    /* Initialise the server/client/task list */
+    INIT_LIST_HEAD(&fds->server_list);
+    INIT_LIST_HEAD(&fds->client_list);
+    fds->task_array = cp_array_init(NULL, maxevents);
+    fds->event_queue = cp_queue_init(NULL, maxevents);
+
+    fds->timeout = timeout<0 ? -1 : timeout;
+    fds->max_event = maxevents;
+    fds->flag |= FLAG_FDS_INIT;
+
+cleanup:
+    if(rv)
+    {
+        log_err("Initialise fds contex failed\n");
+        cp_fds_term(fds);
+        return NULL;
+    }
+
+    log_nrml("Initialise fds contex [%p] ok\n", fds);
+    return fds;
+}
+
+/* Terminate $fds context, if $fds malloced, then free it */
+void cp_fds_term(CP_FDS *fds)
+{
+    log_dbg("terminate epoll fds contex now\n");
+
+    if(!fds)
+    {
+        log_err("Invalude input arguments\n");
+        return;
+    }
+
+    if(fds->epfd >= 0)
+    {
+        log_dbg("Close epoll file description [%d]\n", fds->epfd); 
+        close(fds->epfd); 
+    }
+
+    if(fds->task_array)
+    {
+        cp_array_term(fds->task_array);
+    }
+
+    if(fds->event_queue)
+    {
+        cp_queue_destroy(fds->event_queue);
+    }
+
+    if(fds->flag& FLAG_FDS_MALLOC)
+    {
+        t_free(fds);
+    }
+
+    log_nrml("Terminate epoll fds contex ok.\n");
+
+    return ;
+}
+
+/* epoll_ctl() to add this socket to epoll   */
+int cp_add_epoll_event(CP_SOCK *sock)
+{
+    int                     rv = 0;
+    CP_FDS                  *fds;
+
+    if( !sock || !(fds=sock->fds) )
+    {
+        log_err("Invalude input arguments\n");
+        return -1;
+    }
+
+    if( sock->flag&FLAG_SOCK_EPOLLED )
+        return 0; /* already put in epoll */
+
+    if(fds->event_cnt > fds->max_event)
+    {
+        log_fatal("No more epoll event space [%d/%d] for socket[%d]\n", 
+                fds->event_cnt, fds->max_event, sock->fd);
+        return -2;
+    }
+
+    memset(&sock->event, 0, sizeof(sock->event));
+    sock->event.events = EPOLLIN;
+    sock->event.data.ptr = sock;
+
+    if ( epoll_ctl (fds->epfd, EPOLL_CTL_ADD, sock->fd, &sock->event) < 0) 
+    {
+        if(EEXIST == errno)
+        {
+            log_warn("socket[%d] already registe in epoll\n", sock->fd);
+            goto cleanup;
+        }
+        else
+        {
+            log_err("socket[%d] registe in epoll failed: %s\n", sock->fd, strerror(errno));
+            rv = -3;
+            goto cleanup;
+        }
+    }
+    
+    fds->event_cnt++;
+    sock->flag |= FLAG_SOCK_EPOLLED;
+
+cleanup:
+    if(rv)
+        log_err("add socket [%d] to epoll event failed\n", sock->fd);
+    else
+        log_dbg("add socket [%d] to epoll event ok\n", sock->fd);
+
+    return rv;
+}
+
+
+/* epoll_ctl() to mod this socket in epoll */
+int cp_mod_epoll_event(CP_SOCK *sock, int event)
+{
+    CP_FDS                  *fds;
+
+    if( !sock || !(fds=sock->fds) )
+    {
+        log_err("Invalude input arguments\n");
+        return -1;
+    }
+
+    if( !(sock->flag&FLAG_SOCK_EPOLLED) )
+    {
+        return -2;  /* not in epoll  */
+    }
+
+    sock->event.events = event;
+    if ( epoll_ctl (fds->epfd, EPOLL_CTL_MOD, sock->fd, &sock->event) < 0) 
+    {
+        log_err("modidfy socket [%d] epoll event failed: %s\n", sock->fd, strerror(errno));
+        return -3;
+    }
+    
+    log_dbg("modidfy socket [%d] epoll event ok\n", sock->fd);
+
+    return 0;
+}
+
+
+void cp_del_epoll_event(CP_SOCK *sock)
+{
+    CP_FDS                  *fds;
+
+    if( !sock || !(fds=sock->fds) )
+    {
+        log_err("Invalude input arguments\n");
+        return;
+    }
+
+    if( !(sock->flag&FLAG_SOCK_EPOLLED) )
+        return; /* not in epoll  */
+
+    sock->flag &= ~FLAG_SOCK_EPOLLED;
+    epoll_ctl(fds->epfd, EPOLL_CTL_DEL, sock->fd, NULL);
+    fds->event_cnt--;
+
+    log_dbg("remove socket [%d] from epoll event ok\n", sock->fd);
+    return ;
+}
+
+/* add the listen/connect socket into server_list/client_list */
+int cp_fds_add_sock_registry(CP_SOCK *sock)
+{
+    CP_FDS                  *fds;
+
+    if( !sock || !(fds=sock->fds) )
+    {
+        log_err("Invalude input arguments\n");
+        return -1;
+    }
+
+    if( sock->flag&FLAG_SOCK_REGISTRY )
+        return 0;  /* already in registry list  */
+
+    if(CP_SOCK_MODE_CONNECT == sock->mode)
+    {
+        log_dbg("regist socket [%p] on CONNECT mode into client list ok\n", sock);
+        list_add_tail(&sock->rlist, &fds->client_list);
+    }
+    else if(CP_SOCK_MODE_LISTEN == sock->mode)
+    {
+        log_dbg("regist socket [%p] on LISTEN mode into server list ok\n", sock);
+        list_add_tail(&sock->rlist, &fds->server_list);
+    }
+    else if(CP_SOCK_MODE_ACCEPT==sock->mode && sock->serv_sock)
+    {
+        log_dbg("regist socket [%p] on ACCEPT mode into server list ok\n", sock);
+        list_add_tail(&sock->rlist, &sock->serv_sock->accept_list);
+        sock->serv_sock->accept_cnt++;
+    }
+    else
+    {
+        log_err("regist socket [%p] on mode %d into client/server list failed: Unsupport mode.\n", sock, sock->mode);
+        return -2;
+    }
+
+    sock->flag |= FLAG_SOCK_REGISTRY;
+    return 0;
+}
+
+/*  remove the listen/connect socket from server_list/client_list */
+void cp_fds_del_sock_registry(CP_SOCK *sock)
+{
+    if(!sock || !(sock->flag&FLAG_SOCK_REGISTRY) )
+        return;  /* not in registry list  */
+
+    if(CP_SOCK_MODE_ACCEPT==sock->mode && sock->serv_sock)
+        sock->serv_sock->accept_cnt--;
+
+    log_dbg("remove socket [%d] from socket registry list ok\n", sock->fd);
+    list_del(&sock->rlist);
+    sock->flag &= ~FLAG_SOCK_REGISTRY;
+
+    return ;
+}
+
+
+/* Add a socket in task list */
+int cp_fds_add_sock_task(CP_SOCK *sock)
+{
+    CP_FDS                  *fds;
+    int                     rv;
+
+    if( !sock || !(fds=sock->fds) )
+    {
+        log_err("Invalude input arguments\n");
+        return -1;
+    }
+
+    if( sock->flag&FLAG_SOCK_TASKED )
+        return 0; /* already in a list */
+
+    log_info("add socket [%d] into task list\n", sock->fd);
+    if( (rv=cp_array_add(fds->task_array, sock)) >=0 )
+    {
+        sock->index = rv;
+        sock->flag |= FLAG_SOCK_TASKED;
+        return 0;
+    }
+
+    return -2;
+}
+
+void cp_fds_del_sock_task(CP_SOCK *sock)
+{
+    if(!sock || !(sock->flag&FLAG_SOCK_TASKED))
+        return ;
+ 
+    log_info("remove socket [%d:%p] from task list[%p] by index [%d]\n", sock->fd, sock, sock->fds->task_array, sock->index);
+
+    if(sock->index >= 0)
+        cp_array_rm_byindex(sock->fds->task_array, sock->index);
+    else
+        cp_array_rm_bydata(sock->fds->task_array, sock);
+
+    sock->flag &= ~FLAG_SOCK_TASKED;
+    sock->index = -1;
+    memset(&sock->event, 0, sizeof(struct epoll_event));
+
+    return ;
+}
+
+void *cp_fds_sock_enqueue(CP_SOCK *sock)
+{
+    if(!sock || sock->flag&FLAG_SOCK_INQUEUE || sock->flag&FLAG_SOCK_TASKED || !sock->fds)
+        return NULL;
+
+    sock->flag |= FLAG_SOCK_INQUEUE;
+    return cp_enqueue(sock->fds->event_queue, sock);
+}
+
+void *cp_fds_sock_dequeue(CP_FDS *fds)
+{
+    CP_SOCK    *sock = NULL;
+
+    if( !fds )
+        return NULL;
+
+    sock = cp_dequeue(fds->event_queue);
+    sock->flag &= ~FLAG_SOCK_INQUEUE;
+
+    return sock;
+}
+
+void *cp_fds_sock_rmqueue(CP_SOCK *sock)
+{
+    if(!sock || !(sock->flag&FLAG_SOCK_INQUEUE) || !sock->fds)
+        return NULL;
+
+    sock->flag &= ~FLAG_SOCK_INQUEUE;
+    return cp_rmqueue(sock->fds->event_queue, sock);
+}
+
+void cp_fds_list_sock_task(CP_FDS *fds)
+{
+    int               i;
+    CP_SOCK           *sock;
+
+    if(!fds)
+        return ;
+
+    log_dbg("list all the socket in task list:\n");
+
+    /* list all the socket from task list */
+    cp_list_array_for_each(fds->task_array, i, sock)
+    { 
+        if(sock)
+            log_dbg("socket[%d:%p] in task list\n", sock->fd, sock); 
+    }
+
+    return ;
+}
+
+
+void cp_fds_destroy_sock(CP_SOCK *sock)
+{
+    cp_fds_del_sock_task(sock);
+    cp_fds_sock_rmqueue(sock);
+    cp_del_epoll_event(sock);
+    cp_fds_del_sock_registry(sock);
+    cp_sock_term(sock);
+
+    return ;
+}
+
+
+int cp_fds_detect_event(CP_FDS *fds)
+{
+    int                   i=0, nfds=0;
+    CP_SOCK               *sock;
+    struct epoll_event    evts[CP_MAX_EVENT_ONCE];
+
+    if( !fds )
+        return -1;
+
+    nfds = epoll_wait(fds->epfd, evts, CP_MAX_EVENT_ONCE, fds->timeout);
+    ///if(nfds<0 && errno!=EINTR)
+    if(nfds<0)
+    {
+        log_fatal("epoll_wait failure: %s\n", strerror(errno));
+        return -2;
+    }
+
+    if(nfds == 0)
+        return 0;
+
+    log_dbg("epoll_wait get [%d] events\n", nfds);
+
+    for (i=0; i<nfds; i++) 
+    {
+        sock=(CP_SOCK *)evts[i].data.ptr;
+        sock->event = evts[i];
+        sock->actv_time = time_now();
+
+        log_dbg("socket [%d] get event [0x%0x] and added to event queue ok\n", sock->fd, sock->event.events);
+        if( SOCK_STAT_ALREADY==sock->status )
+            cp_fds_sock_enqueue(sock);
+    }
+
+    return 0;
+}
+
+void cp_fds_proc_event(CP_FDS *fds)
+{
+    int                    i;
+    CP_SOCK                *sock;
+    int                    rv;
+
+    if( !fds )
+        return;
+
+    //cp_fds_list_sock_task(fds);
+
+    //log_trace("Start process the events....\n");
+    
+    /* Process all the socket in task list first, its urgent */
+    cp_list_array_for_each(fds->task_array, i, sock)
+    {
+        if(sock)
+        {
+            if(sock->cbfunc)
+            {
+                log_dbg("Process socket [%d] in task list on event [%d]\n", sock->fd, sock->event.events);
+                rv = sock->cbfunc(sock);
+            }
+            else
+            { 
+                log_err("Process Socket [%d:%p] not implement event callback and remove it\n", sock->fd, sock);
+                cp_fds_del_sock_task(sock);
+            }
+        }
+    }
+
+    /* Process all the socket in event queue now */
+    while(!cp_queue_is_empty(fds->event_queue))
+    {
+        if( NULL!= (sock=cp_fds_sock_dequeue(fds)) )
+        { 
+            //log_dbg("after handle one socket count: %d\n", cp_queue_count(fds->event_queue));
+            if(sock->cbfunc)
+            { 
+                log_dbg("Process socket [%d %p] in event queue on event [%d]\n", sock->fd, sock, sock->event.events); 
+                rv = sock->cbfunc(sock);
+            }
+            else
+            { 
+                log_err("Process Socket [%d:%p] not implement event callback and remove it\n", sock->fd, sock);
+            } 
+        }
+    }
+
+    //log_trace("End process the events....\n");
+    return;
+}
+
+
+void cp_sock_term_server(CP_SOCK *serv_sock)
+{
+    CP_SOCK           *sock, *tsock;
+
+    log_warn("terminate server socket [%d] and [%d] accept client now\n", serv_sock->fd, serv_sock->accept_cnt);
+    list_for_each_entry_safe(sock, tsock, &serv_sock->accept_list, rlist) 
+    {
+        /*remove all the accept socket from task and registry list, then destroy it*/
+        //log_warn("destroy accept socket [%d:%p]\n", sock->fd, sock);
+        cp_fds_destroy_sock(sock);
+    }
+
+    /*remove this server socket from task and registry list, then destroy it*/
+    log_warn("terminate server socket [%d] and its accept client ok\n", serv_sock->fd);
+    cp_fds_destroy_sock(serv_sock);
+
+    return ;
+}
+
+
+void cp_sock_term_all_server(CP_FDS *fds)
+{ 
+    CP_SOCK           *sock, *tsock;
+
+    log_dbg("destroy all the listen socket now\n");
+
+    /* Terminate all the listen socket */
+    list_for_each_entry_safe(sock, tsock, &fds->server_list, rlist) 
+    {
+        cp_sock_term_server(sock);
+    }
+
+    log_warn("destroy all the listen socket ok\n");
+
+    return ;
+}
+
+
+void cp_sock_term_all_client(CP_FDS *fds)
+{
+    CP_SOCK           *sock = NULL, *tsock;
+
+    log_dbg("destroy all the connect socket now\n");
+    /* Terminate all the listen socket */
+    list_for_each_entry_safe(sock, tsock, &fds->client_list, rlist) 
+    {
+        /*remove all the connect socket from task and registry list, then destroy it*/
+        cp_fds_destroy_sock(sock);
+    }
+    log_warn("destroy all the connect socket ok\n");
+}
+
+/* Checkout the socket timeout happened or not, if happened then put it in task list */
+void cp_sock_detect_timeout(CP_FDS *fds)
+{ 
+    CP_SOCK           *sock, *tsock, *serv_sock;
+
+    /* check all the connect socket timeout */
+    list_for_each_entry_safe(sock, tsock, &fds->client_list, rlist) 
+    {
+        /*If the socket timeout value and timeout, then disconnect it */
+        if( sock->idle_timeout>0 && time_elapsed(sock->actv_time)>sock->idle_timeout )
+        {
+            log_warn("socket[%d] idle timeout happened and add to task list\n", sock->fd);
+            log_dbg("last: %lu elapsed time: %lu idel timeout: %lu\n", sock->actv_time, time_elapsed(sock->actv_time), sock->idle_timeout);
+            sock->event.events = CP_SOCK_EVENT_IDLE_TIMEOUT;
+            cp_fds_add_sock_task(sock);
+        }
+        else if( sock->msg_timeout>0 && sock->msg_time>0 && time_elapsed(sock->msg_time)>sock->msg_timeout )
+        {
+            log_warn("socket[%d] message timeout happened and add to task list\n", sock->fd);
+            sock->event.events = CP_SOCK_EVENT_MSG_TIMEOUT;
+            cp_fds_add_sock_task(sock);
+        }
+    } 
+
+    /* check all the accept socket timeout */
+    list_for_each_entry(serv_sock, &fds->server_list, rlist) 
+    {
+        list_for_each_entry_safe(sock, tsock, &serv_sock->accept_list, rlist) 
+        {
+            /*If the socket timeout value and timeout, then disconnect it */
+            if( sock->idle_timeout>0 && time_elapsed(sock->actv_time)>sock->idle_timeout )
+            {
+                sock->event.events = CP_SOCK_EVENT_IDLE_TIMEOUT;
+                log_warn("socket[%d] idle timeout happened and add to task list\n", sock->fd);
+                log_dbg("last: %lu elapsed time: %lu idel timeout: %lu\n", sock->actv_time, time_elapsed(sock->actv_time), sock->idle_timeout);
+                cp_fds_add_sock_task(sock);
+            }
+            else if( sock->msg_timeout>0 && sock->msg_time>0 && time_elapsed(sock->msg_time)>sock->msg_timeout )
+            {
+                sock->event.events = CP_SOCK_EVENT_MSG_TIMEOUT;
+                log_warn("socket[%d] message timeout happened and add to task list\n", sock->fd);
+                cp_fds_add_sock_task(sock); 
+            }
+        } /* list_for_each_entry_safe server accept socket list */
+    } /* list_for_each_entry all the server socket list */
+}
+
+
+void cp_sock_term_all_task(CP_FDS *fds)
+{
+    int               i;
+    CP_SOCK           *sock;
+
+    log_dbg("remove all the socket in task list now\n");
+
+    /* remove all the socket from task array */
+    cp_list_array_for_each(fds->task_array, i, sock)
+    {
+        //log_warn("remove socket[%d] in task list ok\n", sock->fd);
+        if(sock)
+            cp_fds_del_sock_task(sock);
+    }
+
+    while( !cp_queue_is_empty(fds->event_queue) )
+    {
+        cp_dequeue(fds->event_queue);
+    }
+
+    log_warn("remove all the socket in task list ok\n");
+    
+    return ;
+}
+
+
+
diff --git a/program/cp_library/cp_fds.h b/program/cp_library/cp_fds.h
new file mode 100644
index 0000000..2d26be9
--- /dev/null
+++ b/program/cp_library/cp_fds.h
@@ -0,0 +1,114 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_fds.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(10/25/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/25/2012 04:55:37 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_FDS_H
+#define __CP_FDS_H
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+
+#include <sys/epoll.h>
+
+#include "cp_klist.h"
+#include "cp_logger.h"
+#include "cp_sock.h"
+#include "cp_queue.h"
+#include "cp_array.h"
+
+#define CP_MAX_EVENT_ONCE    128
+#define CP_DEF_MAX_EVENTS    1024
+#define CP_DEF_FDS_TIMEOUT   10
+
+#define IN_EVENT_LIST        0
+#define IN_TASK_LIST         1
+
+#define FLAG_FDS_INIT        (1<<0)
+#define FLAG_FDS_MALLOC      (1<<1)
+
+struct _CP_SOCK;
+struct _CP_FDS;
+
+typedef struct _CP_FDS
+{
+    unsigned char         flag;         /* Refer to follow definition  */
+    int                   epfd;         /* the epoll_create() returns file description */ 
+    int                   timeout;      /* epoll_wait timeout value  */
+    int                   max_event;    /* Maximum monitor FD number */
+    int                   event_cnt;    /* current socket regist in epoll */
+
+    struct list_head      server_list;  /* a list keep all the listen sockets */ 
+    struct list_head      client_list;  /* a list keep all the connect sockets */ 
+    CP_QUEUE              *event_queue; /* a queue keep all these sockets get event happened */
+    CP_ARRAY              *task_array;  /* an array keep all these pending/or other special task socket */ 
+
+  /*  flag definitions
+   *  0 0 0 0 0 1 1 1
+   *  |       | | | |______ Initial or not  - 0: No          1: Yes
+   *  |       | | |________ Malloc or not   - 0: Variable,   1: Malloc
+   *  |       | |__________ Stop or not     - 0: Not stop    1: Stop
+   *  |       |____________ Reserved
+   *  |____________________ Reserved
+   */
+} CP_FDS;
+
+/* Initialze $fds context, if $fds is NULL, then malloc it */
+extern CP_FDS *cp_fds_init(CP_FDS *fds, int maxevents, int timeout);
+/* Terminate $fds context, if $fds malloced, then free it */
+extern void cp_fds_term(CP_FDS *fds);
+#define cp_fds_term_clear(fds) {cp_fds_term(fds); fds=NULL;}
+
+/* epoll_ctl() to add this socket to epoll   */
+int cp_add_epoll_event(struct _CP_SOCK *sock);
+/* epoll_ctl() to mod this socket in epoll */
+int cp_mod_epoll_event(struct _CP_SOCK *sock, int event);
+/* epoll_ctl() to del this socket from epoll */
+void cp_del_epoll_event(struct _CP_SOCK *sock);
+
+
+/* add the socket into the socket registry list */ 
+int cp_fds_add_sock_registry(struct _CP_SOCK *sock);
+/* remove the socket from the socket registry list */ 
+void cp_fds_del_sock_registry(struct _CP_SOCK *sock);
+
+/* add the socket into task list */
+int cp_fds_add_sock_task(struct _CP_SOCK *sock);
+/* remove the socket from event or task list */
+void cp_fds_del_sock_task(struct _CP_SOCK *sock);
+/* list all the socket from task list */
+void cp_fds_list_sock_task(CP_FDS *fds);
+
+void *cp_fds_sock_enqueue(struct _CP_SOCK *sock);
+void *cp_fds_sock_rmqueue(struct _CP_SOCK *sock);
+void *cp_fds_sock_dequeue(CP_FDS *fds);
+
+/* remove the socket from task and registry list and destroy it */
+void cp_fds_destroy_sock(struct _CP_SOCK *sock);
+#define cp_fds_destroy_sock_clear(sock) {cp_fds_destroy_sock(sock); sock=NULL;}
+
+/* epoll_wait detect all these socket get event and add it to task list */
+extern int cp_fds_detect_event(CP_FDS *fds);
+/* process all these socket get event and add it to task list */
+extern void cp_fds_proc_event(CP_FDS *fds);
+/* Detect all these socket get timeout and add it to task list */
+extern void cp_sock_detect_timeout(CP_FDS *fds);
+
+
+extern void cp_sock_term_server(struct _CP_SOCK *serv_sock);
+extern void cp_sock_term_all_server(CP_FDS *fds);
+extern void cp_sock_term_all_client(CP_FDS *fds);
+extern void cp_sock_term_all_task(CP_FDS *fds);
+
+#endif /* __CP_FDS_H */
diff --git a/program/cp_library/cp_gprs.c b/program/cp_library/cp_gprs.c
new file mode 100644
index 0000000..b50108b
--- /dev/null
+++ b/program/cp_library/cp_gprs.c
@@ -0,0 +1,705 @@
+/*********************************************************************************
+ *      Copyright:  (C) guowenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  module.c
+ *    Description:  This is the GPRS Power/SIM card control source code
+ *                 
+ *        Version:  1.0.0(02/07/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/07/2012 03:08:25 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_gprs.h"
+#include "cp_hal.h"
+#include "cp_proc.h"
+#include "cp_gsmmux.h"
+#include "at91_ioctl.h"
+
+int init_gsm_module(MODULE_INFO *module)
+{
+    int                   i=0;
+    char                  devname[DEVNAME_LEN];
+
+    log_info("Initialize GSM module context\n");
+
+    memset(module, 0, sizeof(*module));
+
+    module->event = REQ_POWER_RESET;  /* Request to power on GPRS */
+
+    pthread_mutex_init(&module->lock, NULL); 
+
+    if( !(module->gsmport=comport_init(GSM_DATAPORT, 115200, "8N1N")) )
+    {
+        return -1;
+    }
+
+    /*  Initialize the GPRS dataport pointer */
+    module->comport_cnt = MAX_DATAPORT;
+    for(i=0; i<module->comport_cnt; i++)
+    {
+        snprintf(devname, DEVNAME_LEN, "%s%d", CMUX_DATAPORT, i+CMUX_PORT_START_INDEX);
+        module->comport[i] = comport_init(devname, 115200, "8N1N");
+        if(NULL == module->comport[i])
+            goto ERROR;
+
+        //log_dbg("Initialise comport [%p] on %s on baudrate 115200 with 8N1N\n", module->comport[i], devname);
+    } 
+    
+    return 0;
+
+ERROR:
+    while(i-- >= 0)
+    {
+        comport_term(module->comport[i]);
+    }
+    return -2;
+}
+
+
+/*
+ *  Description: close all the GPRS control port device. 
+ *
+ * Return Value: NONE
+ */
+void close_gsm_dataport(MODULE_INFO *module)
+{
+    int  i;
+    
+    for(i=0; i<module->comport_cnt; i++)
+    {
+        log_nrml("Close GPRS dataport %s=>[fd:%d]\n", module->comport[i]->dev_name, module->comport[i]->fd);
+        comport_close(module->comport[i]);
+    }
+
+    return ;
+}
+
+/*
+ *  Description: open all the GPRS data port device. 
+ *
+ * Return Value: 0: Open successfully  !0: Open failure
+ */
+int open_gsm_dataport(MODULE_INFO *module)
+{
+    int i, retval = -1;
+
+    for(i=0; i<module->comport_cnt; i++)
+    {
+        if( (retval=comport_open(module->comport[i])) < 0)
+        {
+            log_err("Open GPRS dataport %s failure: %d\n", module->comport[i]->dev_name, retval);
+            goto ERROR;
+        } 
+        log_nrml("Open GPRS dataport[%p] %s=>[fd:%d]\n", module->comport, module->comport[i]->dev_name, module->comport[i]->fd);
+    }
+
+    return 0;
+
+ERROR:
+    close_gsm_dataport(module);
+    return retval;
+}
+
+
+/*
+ *  Description: Alloc a comport from the comport poor for used, for we must make sure 
+ *               PPP thread can grasp a comport to work, so we will always preserved
+ *               first comport for PPP thread.
+ *              
+ * Return Value: NULL: No comport left  !NULL: The alloced comport pointer
+ */
+COM_PORT *alloc_gsm_dataport(char *who, MODULE_INFO *module)
+{
+    static int     lock = 0;
+    int            i;
+    COM_PORT       *comport = NULL;
+
+    if(lock)
+        return NULL;
+
+    lock = 1;
+
+    /* Preserve first comport for PPP thread */
+    for(i=0; i<module->comport_cnt; i++)
+    {
+        if(module->comport[i]->used != YES)
+        {
+            comport = module->comport[i];
+            comport->used = YES;
+            break;
+        }
+    }
+
+    lock = 0;
+
+    if(comport)
+    {
+        log_dbg("%s allocate GPRS dataport[%d] %s=>[fd:%d] ok\n", who, i, comport->dev_name, comport->fd);
+        module->users++;
+    }
+    else
+    {
+        log_dbg("%s allocate GPRS dataport failure\n", who);
+    }
+
+
+    return comport;
+}
+
+/*
+ *  Description: Free a comport to the comport poor when we no need it.
+ *
+ * Return Value: NONE
+ */
+void free_gsm_dataport(char *who, MODULE_INFO *module, COM_PORT  **comport)
+{
+    int            i;
+
+    /* Preserve first comport for PPP thread */
+    for(i=0; i<module->comport_cnt; i++)
+    {
+        if(module->comport[i] == *comport)
+        {
+            log_dbg("%s free GPRS dataport %s=>[fd:%d]\n", who, (*comport)->dev_name, (*comport)->fd);
+            module->comport[i]->used = NO;
+            module->users--;
+            *comport = NULL;
+            break;
+        }
+    }
+
+    return ;
+}
+
+
+/*
+ *  Description: Power on the GPRS module and open all the gprs data port. For when GPRS power off,
+ *               the GPRS module USB convert serial comport device lost, so we must bind them together.
+ * Return Value: 0: Open successfully  !0: Open failure
+ */
+int power_on_module(MODULE_INFO *module)
+{
+    int     rv = 0;
+    log_dbg("Turn on GPRS module now\n");
+
+    if( ON == (module->pwr_status=hal_get_gprs_power()) )
+    {
+        rv = 0;
+        log_dbg("GPRS module already power on\n");
+        goto cleanup;
+    }
+
+    if( (rv=hal_turn_gprs_power(ON)) || ON!=hal_get_gprs_power())
+    {
+        log_err("Turn on GPRS module failure: rv=%d power=%d\n", rv, hal_get_gprs_power());
+        rv = -1;
+        goto cleanup;
+    }
+
+    micro_second_sleep(500);
+
+    if( comport_open(module->gsmport) < 0)
+    {
+        log_err("Open GSM serial port [%s] failure\n", module->gsmport->dev_name);
+        return -2;
+    }
+
+    if( !atcmd_check_power_on(module->gsmport) ) 
+    {
+        log_err("Send ATE0 check GPRS module AT command failure\n", module->gsmport->dev_name);
+        return -2;
+    }
+
+    attach_gsm0710(module->gsmport);
+
+    if( 0 != open_gsm_dataport(module) )
+    {
+        rv = -3;
+        log_err("Open GPRS module comport failure\n");
+        goto cleanup;
+    }
+
+cleanup:
+
+    if(!rv)
+    {
+        module->ready = MODULE_READY;
+        log_nrml("Turn on GPRS module succesfully\n");
+    }
+    else
+    {
+        module->ready = NOT_READY;
+        log_nrml("Turn on GPRS module failed, rv=%d\n", rv);
+    }
+
+    module->ready = 0!=rv ? NOT_READY : MODULE_READY;
+    memset(&(module->reg), 0, sizeof(REGISTER_INFO));
+    module->pwr_status = hal_get_gprs_power();
+
+    return rv;
+}
+
+/*
+ *  Description: Power off the GPRS module and close all the gprs data port. For when GPRS power off,
+ *               the GPRS module USB convert serial comport device lost, so we must bind them together.
+ * Return Value: 0: Open successfully  !0: Open failure
+ */
+int power_off_module(MODULE_INFO *module)
+{
+    if( OFF  == (module->pwr_status=hal_get_gprs_power()) )
+    {
+        log_dbg("GPRS module already power off\n");
+        return 0;
+    }
+
+    while(module->users)
+    {
+        log_warn("%d application still use the GPRS module dataport, wait released...\n", module->users);
+        sleep(1);
+    }
+
+    log_nrml("Turn off GPRS module now\n");
+    close_gsm_dataport(module);
+
+    comport_close(module->gsmport);
+    hal_turn_gprs_power(OFF);
+
+    module->ready = NOT_READY;
+    memset(&(module->reg), 0, sizeof(REGISTER_INFO));
+    module->pwr_status = hal_get_gprs_power();
+
+    micro_second_sleep(800);
+    return 0;
+}
+
+void set_module_event(MODULE_INFO *module, int request)
+{
+    log_dbg("Set the module event request[%d]\n", request);
+    pthread_mutex_lock(&module->lock);
+    module->event = request;
+    pthread_mutex_unlock(&module->lock);
+}
+
+/*
+ *  Description: Set the GPRS power status according to the module request event. 
+ *               the GPRS module USB convert serial comport device lost, so we must bind them together.
+ * Return Value: 0:Set GPRS power status successfully  !0: Open failure
+ */
+int set_module_event_power(MODULE_INFO *module)
+{
+    int           rv = 0;
+    switch (module->event)
+    { 
+        case REQ_POWER_ON:
+            rv = power_on_module(module);
+            break; 
+
+        case REQ_POWER_OFF: 
+            rv = power_off_module(module);
+            break; 
+        
+        case REQ_POWER_RESET: 
+            rv = power_off_module(module);
+            rv = power_on_module(module); 
+            break;
+    } 
+    
+    if( rv )
+    {
+        log_nrml("Response for the GPRS request event %d failure, rv=%d\n", module->event, rv);
+        return rv;
+    }
+    else
+    { 
+        log_nrml("Response for the GPRS request event %d and clear this event ok\n", module->event);
+        set_module_event(module, REQ_EVENT_NONE);
+        return 0;
+    }
+}
+
+
+int atcmd_inspect_status(MODULE_INFO *module)
+{
+    COM_PORT        *comport;
+    REGISTER_INFO   *reg = &(module->reg);   /* SIM card Register information  */ 
+    char            *who = "atcmd_inspect_status()";
+
+    static unsigned long start_time ;
+
+    /* Every 10 seconds we will inspect it */
+    if(start_time && time_elapsed(start_time) < 10000)
+    {
+        return 0;
+    }
+
+    start_time= time_now();
+
+    comport = alloc_gsm_dataport(who, module);
+    if(NULL != comport)
+    {
+        log_dbg("Alloc dataport %s=>[fd:%d]\n", comport->dev_name, comport->fd);
+    }
+    else
+        return -1;
+
+    reg->signal = atcmd_check_gprs_signal(comport);
+
+    atcmd_check_gprs_location(comport, &reg->loc);
+
+    log_dbg("Free dataport %s=>[fd:%d]\n", comport->dev_name, comport->fd);
+    free_gsm_dataport(who, module, &comport);
+
+    return 0;
+}
+
+
+/*
+ * Description: Check the AT command and SIM card ready or not
+ * Input value: times:  Max check times
+ *Return Value: 1: Already OK   0: Still on test  -1: Failure
+ *
+ */ 
+int atcmd_check_module_ready(COM_PORT *comport, int times)
+{
+    int           rv;
+    static int    fail_cnt = 0;
+
+    /* Send ATE0 to check GPRS module AT ready or not  */
+    rv = atcmd_check_at_ready(comport);
+    if(rv) 
+        goto cleanup;
+
+    /* Send AT+CPIN? to check SIM card valid or not  */
+    rv = atcmd_check_sim_valid(comport);
+
+cleanup:
+    if(rv)
+    {
+        if(fail_cnt < times)
+        {
+            fail_cnt ++;
+            return 0;
+        }
+        else
+        {
+            fail_cnt = 0;
+            return -1;
+        }
+    }
+    else
+    {
+        fail_cnt = 0;
+        return 1;
+    }
+}
+
+int atcmd_check_power_on(COM_PORT *comport)
+{
+    int           i, rv = 0;
+
+    for(i=0; i<10; i++)
+    {
+        if( !atcmd_check_at_ready(comport) )
+        {
+            rv = 1;
+            break;
+        }
+    }
+
+    return rv;
+}
+
+/*
+ * Some preset command here, such as set Module as 2G mode
+ */ 
+int atcmd_module_preset(COM_PORT *comport)
+{
+    int           retval = 0;
+
+    /* Send AT+COPS=0 to set GPRS module auto select an operator  */
+    if(0 != (retval=send_atcmd_check_ok(comport, "AT+COPS=0\r", 3000)) )
+    {
+        log_warn("AT+COPS=0 Set Auto Select Carrier:     [FAILED]\n");
+        return -2;
+    } 
+    log_nrml("AT+COPS=0 Set Auto Select Carrier:   [OK]\n");
+
+    return retval;
+}
+
+
+int atcmd_check_hwinfo(COM_PORT *comport, HW_INFO *hw, int times)
+{
+    int           rv;
+    static int    fail_cnt = 0;
+
+    /* Send AT+CGMM to check GPRS module hardware name and type */
+    rv = atcmd_check_gprs_name(comport, hw->model);
+    if(rv)
+        goto cleanup;
+
+    /* Send AT+CGMR to check GPRS module hardware version */
+    rv = atcmd_check_gprs_version(comport, hw->mrev);
+    if(rv)
+        goto cleanup;
+
+    /* Send AT+CGSN to check GPRS module hardware IEMI number*/
+    rv = atcmd_check_gprs_iemi(comport, hw->iemi);
+
+cleanup:
+    if(rv)
+    {
+        if(fail_cnt < times)
+        {
+            fail_cnt ++;
+            return 0;
+        }
+        else
+        {
+            fail_cnt = 0;
+            return -1;
+        }
+    }
+    else
+    {
+        fail_cnt = 0;
+        return 1;
+    }
+}
+
+
+int atcmd_check_regist(COM_PORT *comport, REGISTER_INFO *reg, int times)
+{
+    int           rv = 0;
+    static int    fail_cnt = 0;
+
+    /* Send AT+CSQ to check GPRS signal strength */
+    reg->signal = atcmd_check_gprs_signal(comport);
+    if(reg->signal<2 && reg->signal>31)
+    {
+        rv = -1;
+        goto cleanup;
+    }
+
+    /* Send AT+CREG? to check SIM card regist to network or not */
+    reg->type = atcmd_check_gprs_register(comport);
+    
+    if(REG_HOMEWORK==reg->type || REG_ROAMING== reg->type)
+    {
+        /* SIM card register successfully */
+        log_nrml("SIM card register successfully.\n");
+        rv = 0;
+    }
+    else if(REG_DENIED==reg->type)
+    {
+        /* SIM card can not register, so request to switch SIM card */
+        log_err("SIM card regist denied.\n");
+        rv = -2;
+        goto cleanup;
+    }
+    else
+    {
+        log_err("SIM card regist failure.\n");
+        rv = -3;
+        goto cleanup;
+    }
+
+    rv = atcmd_check_gprs_carrier(comport, reg->carrier);
+    if(rv)
+    {
+        rv = -4;
+        log_err("Check SIM card acrrier failure.\n");
+        goto cleanup;
+    }
+
+    rv = atcmd_check_gprs_mcc_mnc(comport, reg->loc.mcc_mnc);
+    if(rv)
+    {
+        rv = -4;
+        log_err("Check SIM card register MCC-MNC failure\n");
+        goto cleanup;
+    }
+
+
+cleanup:
+    if(rv)
+    {
+        if(fail_cnt < times)
+        {
+            fail_cnt ++;
+            return 0;
+        }
+        else
+        {
+            fail_cnt = 0;
+            return -1;
+        }
+    }
+    else
+    {
+        fail_cnt = 0;
+        return 1;
+    }
+
+}
+
+int atcmd_check_network_info(COM_PORT *comport, REGISTER_INFO *reg)
+{
+    int           retval = 0;
+
+    /* Send AT+COPS to check SIM card registed network carrier */
+    retval = atcmd_check_gprs_carrier(comport, reg->carrier);
+    if(retval) return -1;
+
+    /* Send AT+QGSMLOC=1 to check GPRS module location */
+    retval = atcmd_check_gprs_location(comport, &(reg->loc));
+    if(retval) return -3;
+
+    return retval;
+}
+
+
+int atcmd_check_ready(MODULE_INFO *module)
+{ 
+    int             rv;
+    COM_PORT        *comport;
+    char            *who = "atcmd_check_ready()";
+
+    log_nrml("AT command check GPRS registry status now\n");
+    /* Alloc a comport to send AT command */
+    comport = alloc_gsm_dataport(who, module);
+    if(NULL == comport)
+    {
+        log_warn("Alloc dataport for %s() failure.\n", __FUNCTION__);
+        return -1;
+    }
+    log_dbg("Alloc dataport %s=>[fd:%d]\n", comport->dev_name, comport->fd);
+
+    switch(module->ready)
+    {
+        case MODULE_READY:
+            rv = atcmd_check_module_ready(comport, 10);
+            if(rv > 0)
+            {
+                log_nrml("GPRS AT command ready and SIM card valid successfully\n");
+                module->ready++;   /* Continue to check, not break */
+            }
+            else if(rv == 0)
+            {
+                log_nrml("GPRS AT command ready and SIM card valid check continue...\n");
+            }
+            else if(rv < 0)
+            {
+                log_nrml("GPRS AT command ready and SIM card valid check failed\n");
+                set_module_event(module, REQ_POWER_RESET);
+            }
+            break;
+
+        case CHECK_HWINFO:
+            rv = atcmd_check_hwinfo(comport, &(module->hw), 10);
+            if(rv > 0)
+            {
+                log_nrml("Check the GPRS Module hardware information successfully\n");
+                module->ready++;   /* Continue to check, not break */
+            }
+            else if(rv == 0)
+            {
+                log_nrml("Check the GPRS Module hardware information continue...\n");
+            }
+            else if(rv < 0)
+            {
+                log_nrml("Check the GPRS Module hardware information failed...\n");
+                set_module_event(module, REQ_POWER_RESET);
+            }
+            break;
+
+        case CHECK_REGISTRY:
+            rv = atcmd_check_regist(comport, &(module->reg), 10);
+            if(rv > 0)
+            {
+                log_nrml("Check the SIM card registry successfully\n");
+                module->ready++;   /* Continue to check, not break */
+            }
+            else if(rv == 0)
+            {
+                log_nrml("Check the SIM card registry continue...\n");
+            }
+            else if(rv < 0)
+            {
+                log_nrml("Check the SIM card registry failed\n");
+                set_module_event(module, REQ_POWER_RESET);
+            }
+            break;
+    } 
+    
+    free_gsm_dataport(who, module, &comport);
+    return rv;
+}
+
+
+/*
+ * Description: Terminate the control thread work context 
+ * Return Value: NONE
+ */
+void ctrl_thread_term(void *thread_arg)
+{
+    int                i=0;
+    MODULE_INFO        *module = (MODULE_INFO *)thread_arg;
+
+    log_nrml("start terminate GPRS main(control) thread\n");
+    
+    power_off_module(module);
+
+    for(i=0; i<module->comport_cnt; i++)
+    {
+        comport_term(module->comport[i]);
+    } 
+}
+
+
+/* Description: Continue the main thread as the control thread, which used to control/inspect the GPRS 
+ *              module power status. If it exit, then whole program exit.So when it exit, we must 
+ *              make sure all other threads exit.
+ *
+ *Return Value: NONE
+ */
+void ctrl_thread_start(void *thread_arg)
+{
+    MODULE_INFO        *module = (MODULE_INFO *)thread_arg;
+
+    log_nrml("GPRS power control thread start running\n");
+
+    while( !g_cp_signal.stop )
+    {
+        /*  If someone request to change the power status, then set the power*/
+        if(module->event)
+        {
+            set_module_event_power(module);
+        }
+
+        if(ALL_READY == module->ready)
+        {
+            /* If GPRS already registed then we just need to inspect the GPRS 
+             * module status, such as signal, location */
+            atcmd_inspect_status(module);
+        }
+        else
+        {
+            /* If GPRS module just already power on, then we use AT command to 
+             * check the SIM card can work or not now. */
+            if( ON == module->pwr_status )
+            {
+                atcmd_check_ready(module);
+            }
+        }
+
+        sleep(1);
+    }
+
+    /* thread exit  */
+    ctrl_thread_term(thread_arg);
+
+    return ;
+}
diff --git a/program/cp_library/cp_gprs.h b/program/cp_library/cp_gprs.h
new file mode 100644
index 0000000..0ba933e
--- /dev/null
+++ b/program/cp_library/cp_gprs.h
@@ -0,0 +1,126 @@
+/********************************************************************************
+ *      Copyright:  (C) guowenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  module.h
+ *    Description:  This is the GPRS module head file
+ *
+ *        Version:  1.0.0(02/02/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/02/2012 11:33:33 AM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_GPRS_H
+#define __CP_GPRS_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <pthread.h>
+
+#include "cp_common.h"
+#include "cp_logger.h"
+#include "cp_comport.h"
+#include "cp_atcmd.h"
+#include "cp_time.h"
+#include "cp_hal.h"
+
+#define YES                   1
+#define NO                    0
+
+#define GSM_CTRLPORT          "/dev/gprs"
+#define GSM_DATAPORT          "/dev/ttyS2"
+
+#define MAX_DATAPORT          4  /* CMUX driver will generate 4 TTY port */
+#define CMUX_PORT_START_INDEX 1
+#define CMUX_DATAPORT         "/dev/gsmtty"
+
+/*GPRS module power status control request event*/
+enum
+{
+    REQ_EVENT_NONE = 0,
+    REQ_POWER_OFF,
+    REQ_POWER_ON,
+    REQ_POWER_RESET,
+};
+
+/* GPRS Module Ready status */
+enum
+{
+    NOT_READY,
+    MODULE_READY,    /* GPRS AT command active and SIM card valid */
+    CHECK_HWINFO,    /* Get GPRS hardware Information */
+    CHECK_REGISTRY,  /* Check GPRS register network information */
+    ALL_READY,
+};
+
+/* AT+CREG? command show SIM card register status */
+enum
+{
+    REG_UNREGIST = 0, /* not registered, ME is not currently searching a new operator to register to */
+    REG_HOMEWORK,     /* registered, home network */
+    REG_SEARCHING,    /* not registered, but ME is currently searching a new operator to register to  */
+    REG_DENIED,       /* registration denied */
+    REG_UNKNOW,       /* unknow */
+    REG_ROAMING,      /* registered, roaming */
+};
+
+/* AT+CNMP=? command to set GPRS module work on which mode */
+#define MODE_AUTO     2   /* Automatic */
+#define MODE_GSM      13  /* GSM Only */
+#define MODE_WCDMA    14  /* WCDMA Only */
+
+/* AT+CNSMOD? command show network system mode */
+enum
+{
+    NS_NONE = 0,      /* No service */
+    NS_GSM,           /* GSM */
+    NS_GPRS,          /* GPRS */
+    NS_EGPRS,         /* EGPRS(EDGE) */
+    NS_WCDMA,         /* WCDMA */
+    NS_HSDPA,         /* HSDPA only */
+    NS_HSUPA,         /* HSUPA only */
+    NS_HSPA,          /* HSDPA and HSUPA */
+};
+
+typedef struct __MODULE_INFO
+{
+    int             users;     /* How many users use the module now  */
+    unsigned char   ready;     /* SIM card regist and can work or not */
+    unsigned char   event;     /* Request to set GPRS power REQ_POWER_ON, REQ_POWER_OFF or REQ_POWER_RESET */
+    unsigned char   pwr_status; /* Current module power status */
+
+    pthread_mutex_t lock;      /* Module control mutex lock */
+
+    HW_INFO         hw;        /* GPRS Hardware information */
+    REGISTER_INFO   reg;       /* SIM card register network information */
+
+    COM_PORT        *gsmport;  /* The GSM hardware UART port  */
+
+    int             comport_cnt; /* GPRS data channel count */
+    COM_PORT        *comport[MAX_DATAPORT]; /* CMUX driver generate CMUX port */
+} MODULE_INFO;
+
+
+extern int init_gsm_module(MODULE_INFO *module);
+extern int  open_gsm_dataport(MODULE_INFO *module);
+extern void close_gsm_dataport(MODULE_INFO *module);
+extern COM_PORT *alloc_gsm_dataport(char *who, MODULE_INFO *module);
+extern void free_gsm_dataport(char *who, MODULE_INFO *module, COM_PORT  **comport);
+
+extern int power_on_module(MODULE_INFO *module);
+extern int power_off_module(MODULE_INFO *module);
+
+extern int atcmd_check_ready(MODULE_INFO *module);
+extern int atcmd_inspect_status(MODULE_INFO *module);
+extern int atcmd_check_power_on(COM_PORT *comport);
+//unsigned char atcmd_inspect(MODULE_INFO *module, COM_PORT *comport);
+
+extern void set_module_event(MODULE_INFO *module, int request);
+extern int set_module_event_power(MODULE_INFO  *module);
+
+extern void ctrl_thread_start(void *thread_arg);
+extern void ctrl_thread_term(void *thread_arg);
+
+#endif /* End of __CP_GPRS_H */
diff --git a/program/cp_library/cp_gsmmux.c b/program/cp_library/cp_gsmmux.c
new file mode 100644
index 0000000..4af98d5
--- /dev/null
+++ b/program/cp_library/cp_gsmmux.c
@@ -0,0 +1,75 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2013 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_gsmmux.c
+ *    Description:  This file is the application for GSM0710(A.K.A CMUX) protocal 
+ *                  which implement in Linux kernel 
+ *                 
+ *        Version:  1.0.0(01/16/2013~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "01/16/2013 05:37:15 PM"
+ *                 
+ ********************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+#include <termios.h>
+#include <unistd.h>
+
+#include "cp_logger.h"
+#include "cp_gsmmux.h"
+
+int attach_gsm0710(COM_PORT *comport)
+{
+    int                    ldisc = N_GSM0710;
+    struct gsm_config      c;
+
+    log_nrml("Attach GMUX on GSM port \"%s\" now\n", comport->dev_name);
+
+    if( send_atcmd_check_ok(comport, "AT+CMUX=0\r", 3000) )
+    {
+        log_err("Send \"AT+CMUX=0\" command check %s failure\n", comport->dev_name);
+        return -1;
+    } 
+
+    if (ioctl(comport->fd, TIOCSETD, &ldisc) < 0)
+    {
+        log_err("Can not attach N_GSM0710 to comport \"%s\" \n", comport->dev_name);
+        return -2;
+    }
+
+
+    ioctl(comport->fd, GSMIOC_GETCONF, &c);
+
+    /*  we are initiator and need encoding 0 (basic) */
+    c.initiator = 1;
+    c.encapsulation = 0;
+    
+    /* our modem defaults to a maximum size of 127 bytes */
+    c.mru = 127;
+    c.mtu = 127; 
+    
+    /* set the new configuration */
+    ioctl(comport->fd, GSMIOC_SETCONF, &c);
+
+    log_nrml("Attach GMUX on GSM port \"%s\" OK\n", comport->dev_name);
+    sleep(1);
+
+    return 0;
+}
+
+
+#if 0
+int detach_gsm0710(COM_PORT *comport)
+{
+    log_nrml("Dettach GMUX on GSM port \"%s\" now\n", comport->dev_name);
+    return 0;
+}
+#endif
diff --git a/program/cp_library/cp_gsmmux.h b/program/cp_library/cp_gsmmux.h
new file mode 100644
index 0000000..60aaed6
--- /dev/null
+++ b/program/cp_library/cp_gsmmux.h
@@ -0,0 +1,44 @@
+/********************************************************************************
+ *      Copyright:  (C) 2013 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_gsmmux.h
+ *    Description:  This head file is application for GSM0710(A.K.A CMUX) protocal 
+ *                  which implement in Linux kernel
+ *
+ *        Version:  1.0.0(01/16/2013~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "01/16/2013 05:43:48 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_GSMMUX_H_
+#define __CP_GSMMUX_H_
+
+#include "cp_atcmd.h"
+
+struct gsm_config
+{
+    unsigned int adaption;
+    unsigned int encapsulation;
+    unsigned int initiator;
+    unsigned int t1;
+    unsigned int t2;
+    unsigned int t3;
+    unsigned int n2;
+    unsigned int mru;
+    unsigned int mtu;
+    unsigned int k;
+    unsigned int i;
+    unsigned int unused[8];   /* Padding for expansion without breaking stuff */
+};
+
+#define GSMIOC_GETCONF      _IOR('G', 0, struct gsm_config)
+#define GSMIOC_SETCONF      _IOW('G', 1, struct gsm_config)
+
+#define N_GSM0710           21  /*   GSM 0710 Mux */
+
+int attach_gsm0710(COM_PORT *comport);
+//int detach_gsm0710(COM_PORT *comport);
+
+#endif /* __CP_GSMMUX_H_  */
diff --git a/program/cp_library/cp_hal.c b/program/cp_library/cp_hal.c
new file mode 100644
index 0000000..450cf07
--- /dev/null
+++ b/program/cp_library/cp_hal.c
@@ -0,0 +1,257 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_led_buzzer.c
+ *    Description:  This file is is the HAL(Hardware Abstraction Layer) for 
+ *                  AT91SAM9xxx family devices.
+ *                 
+ *        Version:  1.0.0(12/05/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "12/05/2012 01:26:33 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_hal.h"
+
+int hal_turn_led_on(int  led)
+{
+    int         fd = -1;
+
+    if((fd=open(DEV_LED_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    ioctl(fd, LED_ON, led);
+
+    close(fd);
+    return 0;
+}
+
+int hal_turn_led_off(int led)
+{
+    int         fd = -1;
+
+    if((fd=open(DEV_LED_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    ioctl(fd, LED_OFF, led);
+
+    close(fd);
+    return 0;
+}
+
+int hal_turn_led_blink(int led, int mode)
+{
+    int         fd = -1;
+    int         arg = led|(mode<<3);
+
+    if((fd=open(DEV_LED_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    ioctl(fd, LED_BLINK, arg);
+
+    close(fd);
+    return 0;
+}
+
+
+/*
+ * Description: Turn GPRS ON or OFF
+ *  Input Args: RESET(2)/ON(1)/OFF(0)
+ */
+int hal_turn_gprs_power(int status)
+{
+    int         fd = -1;
+    int         rv = 0;
+
+    if((fd=open(DEV_GSM_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    if( (rv=ioctl(fd, GSM_SET_POWER, status)) < 0)
+    {
+        close(fd);
+        return -2;
+    }
+
+    close(fd);
+    return rv;
+}
+
+/*
+ *  Description: Get current GPRS power status
+ * Return Value: ON(1)/OFF(0) 
+ */
+int hal_get_gprs_power(void)
+{
+    int         fd = -1;
+    int         status;
+
+    if((fd=open(DEV_GSM_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    if( (status=ioctl(fd, GSM_GET_POWER, 0)) < 0)
+    {
+        close(fd);
+        return -2;
+    }
+
+    close(fd);
+    return status;
+}
+
+/*
+ * Description: Turn GPS ON or OFF
+ *  Input Args: ON(1)/OFF(0) 
+ */
+int hal_turn_gps_power(int status)
+{
+    int         fd = -1;
+    int         rv = 0;
+
+    if((fd=open(DEV_GPS_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    if( (rv=ioctl(fd, GPS_SET_POWER, status)) < 0)
+    {
+        close(fd);
+        return -2;
+    }
+
+    close(fd);
+    return rv;
+}
+
+/*
+ *  Description: Get current GPS power status
+ * Return Value: ON(1)/OFF(0) 
+ */
+int hal_get_gps_power(void)
+{
+    int         fd = -1;
+    int         status;
+
+    if((fd=open(DEV_GPS_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    if( (status=ioctl(fd, GPS_GET_POWER, 0)) < 0)
+    {
+        close(fd);
+        return -2;
+    }
+
+    close(fd);
+    return status;
+}
+
+
+/*
+ * Description: Reset zigbee module
+ */
+int hal_reset_zigbee(void)
+{
+    int         fd = -1;
+
+    if((fd=open(DEV_ZIGBEE_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    if( ioctl(fd, ZIGBEE_RESET, 0) < 0)
+    {
+        close(fd);
+        return -2;
+    }
+
+    close(fd);
+    return 0;
+}
+
+/*
+ *  Description: Get Zigbee status
+ */
+int hal_get_zigbee_status(void)
+{
+    int         fd = -1;
+    int         status;
+
+    if((fd=open(DEV_ZIGBEE_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    if( (status=ioctl(fd, ZIGBEE_STATUS, 0)) < 0)
+    {
+        close(fd);
+        return -2;
+    }
+
+    close(fd);
+    return status;
+}
+
+/*
+ * Description: Start/Stop Radiation Moniter sample
+ *  Input Args: Start(1)/Stop(0) the sample 
+ *  Return Val: If status=1(start), it will return this time sample dose
+ *              If status=0(stop), it will return last time sample dose
+ */
+int hal_set_gmtube(status)
+{
+    int         fd = -1;
+    int         dose = 0;
+
+    if((fd=open(DEV_GMTUBE_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    if( (dose=ioctl(fd, GM_SET_MEASURE_RADI, status)) < 0)
+    {
+        close(fd);
+        return -2;
+    }
+
+    close(fd);
+    return dose;
+}
+
+
+/*
+ * Description: Start/Stop Radiation Moniter sample
+ *  Input Args: Start(1)/Stop(0) the sample 
+ *  Return Val: Return last time sample dose
+ */
+int hal_get_gmtube_dose(void)
+{
+    int         fd = -1;
+    int         dose = 0;
+
+    if((fd=open(DEV_GMTUBE_PATH, O_RDWR)) < 0)
+    {
+        return -1;
+    }
+
+    if( (dose=ioctl(fd, GM_GET_MEASURE_DOSE, 0)) < 0)
+    {
+        close(fd);
+        return -2;
+    }
+
+    close(fd);
+    return dose;
+}
+
diff --git a/program/cp_library/cp_hal.h b/program/cp_library/cp_hal.h
new file mode 100644
index 0000000..f1e93d7
--- /dev/null
+++ b/program/cp_library/cp_hal.h
@@ -0,0 +1,56 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_hal.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(12/05/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "12/05/2012 02:21:55 PM"
+ *                 
+ ********************************************************************************/
+#ifndef __CP_HAL_H
+#define __CP_HAL_H
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "at91_ioctl.h"
+
+#define DEV_LED_PATH            "/dev/led"
+#define DEV_GSM_PATH            "/dev/gprs"
+#define DEV_GPS_PATH            "/dev/gps"
+#define DEV_ZIGBEE_PATH         "/dev/zigbee"
+#define DEV_GMTUBE_PATH         "/dev/gmtube"
+
+#define OFF                     0
+#define ON                      1
+#define BLINK                   2
+#define RESET                   2
+
+#define MODE_SLOW               0
+#define MODE_FAST               1
+
+#define START                   1
+#define STOP                    0
+
+#define LED_SYS                 0   
+
+extern int hal_turn_led_on(int led);
+extern int hal_turn_led_off(int led);
+extern int hal_turn_led_blink(int led, int mode);
+
+extern int hal_turn_gprs_power(int status);
+extern int hal_get_gprs_power(void);
+
+extern int hal_turn_gps_power(int status);
+extern int hal_get_gps_power(void);
+
+#endif /* Endof __CP_HAL_H  */
diff --git a/program/cp_library/cp_iniparser.c b/program/cp_library/cp_iniparser.c
new file mode 100644
index 0000000..b18cf84
--- /dev/null
+++ b/program/cp_library/cp_iniparser.c
@@ -0,0 +1,807 @@
+
+/*-------------------------------------------------------------------------*/
+/**
+   @file    cp_iniparser.c
+   @author  N. Devillard
+   @brief   Parser for ini files.
+*/
+/*--------------------------------------------------------------------------*/
+/*---------------------------- Includes ------------------------------------*/
+#include <ctype.h>
+#include "cp_iniparser.h"
+
+/*---------------------------- Defines -------------------------------------*/
+#define ASCIILINESZ         (1024)
+#define INI_INVALID_KEY     ((char*)-1)
+
+/*---------------------------------------------------------------------------
+                        Private to this module
+ ---------------------------------------------------------------------------*/
+/**
+ * This enum stores the status for each parsed line (internal use only).
+ */
+typedef enum _line_status_ {
+    LINE_UNPROCESSED,
+    LINE_ERROR,
+    LINE_EMPTY,
+    LINE_COMMENT,
+    LINE_SECTION,
+    LINE_VALUE
+} line_status ;
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Convert a string to lowercase.
+  @param    s   String to convert.
+  @return   ptr to statically allocated string.
+
+  This function returns a pointer to a statically allocated string
+  containing a lowercased version of the input string. Do not free
+  or modify the returned string! Since the returned string is statically
+  allocated, it will be modified at each function call (not re-entrant).
+ */
+/*--------------------------------------------------------------------------*/
+static char * strlwc(const char * s)
+{
+    static char l[ASCIILINESZ+1];
+    int i ;
+
+    if (s==NULL) return NULL ;
+    memset(l, 0, ASCIILINESZ+1);
+    i=0 ;
+    while (s[i] && i<ASCIILINESZ) {
+        l[i] = (char)tolower((int)s[i]);
+        i++ ;
+    }
+    l[ASCIILINESZ]=(char)0;
+    return l ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Remove blanks at the beginning and the end of a string.
+  @param    s   String to parse.
+  @return   ptr to statically allocated string.
+
+  This function returns a pointer to a statically allocated string,
+  which is identical to the input string, except that all blank
+  characters at the end and the beg. of the string have been removed.
+  Do not free or modify the returned string! Since the returned string
+  is statically allocated, it will be modified at each function call
+  (not re-entrant).
+ */
+/*--------------------------------------------------------------------------*/
+static char * strstrip(const char * s)
+{
+    static char l[ASCIILINESZ+1];
+    char * last ;
+    
+    if (s==NULL) return NULL ;
+    
+    while (isspace((int)*s) && *s) s++;
+    memset(l, 0, ASCIILINESZ+1);
+    strcpy(l, s);
+    last = l + strlen(l);
+    while (last > l) {
+        if (!isspace((int)*(last-1)))
+            break ;
+        last -- ;
+    }
+    *last = (char)0;
+    return (char*)l ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get number of sections in a dictionary
+  @param    d   Dictionary to examine
+  @return   int Number of sections found in dictionary
+
+  This function returns the number of sections found in a dictionary.
+  The test to recognize sections is done on the string stored in the
+  dictionary: a section name is given as "section" whereas a key is
+  stored as "section:key", thus the test looks for entries that do not
+  contain a colon.
+
+  This clearly fails in the case a section name contains a colon, but
+  this should simply be avoided.
+
+  This function returns -1 in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getnsec(dictionary * d)
+{
+    int i ;
+    int nsec ;
+
+    if (d==NULL) return -1 ;
+    nsec=0 ;
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        if (strchr(d->key[i], ':')==NULL) {
+            nsec ++ ;
+        }
+    }
+    return nsec ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get name for section n in a dictionary.
+  @param    d   Dictionary to examine
+  @param    n   Section number (from 0 to nsec-1).
+  @return   Pointer to char string
+
+  This function locates the n-th section in a dictionary and returns
+  its name as a pointer to a string statically allocated inside the
+  dictionary. Do not free or modify the returned string!
+
+  This function returns NULL in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+char * iniparser_getsecname(dictionary * d, int n)
+{
+    int i ;
+    int foundsec ;
+
+    if (d==NULL || n<0) return NULL ;
+    foundsec=0 ;
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        if (strchr(d->key[i], ':')==NULL) {
+            foundsec++ ;
+            if (foundsec>n)
+                break ;
+        }
+    }
+    if (foundsec<=n) {
+        return NULL ;
+    }
+    return d->key[i] ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dump a dictionary to an opened file pointer.
+  @param    d   Dictionary to dump.
+  @param    f   Opened file pointer to dump to.
+  @return   void
+
+  This function prints out the contents of a dictionary, one element by
+  line, onto the provided file pointer. It is OK to specify @c stderr
+  or @c stdout as output files. This function is meant for debugging
+  purposes mostly.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_dump(dictionary * d, FILE * f)
+{
+    int     i ;
+
+    if (d==NULL || f==NULL) return ;
+    for (i=0 ; i<d->size ; i++) {
+        if (d->key[i]==NULL)
+            continue ;
+        if (d->val[i]!=NULL) {
+            fprintf(f, "[%s]=[%s]\n", d->key[i], d->val[i]);
+        } else {
+            fprintf(f, "[%s]=UNDEF\n", d->key[i]);
+        }
+    }
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Save a dictionary to a loadable ini file
+  @param    d   Dictionary to dump
+  @param    f   Opened file pointer to dump to
+  @return   void
+
+  This function dumps a given dictionary into a loadable ini file.
+  It is Ok to specify @c stderr or @c stdout as output files.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_dump_ini(dictionary * d, FILE * f)
+{
+    int     i ;
+    int     nsec ;
+    char *  secname ;
+
+    if (d==NULL || f==NULL) return ;
+
+    nsec = iniparser_getnsec(d);
+    if (nsec<1) {
+        /* No section in file: dump all keys as they are */
+        for (i=0 ; i<d->size ; i++) {
+            if (d->key[i]==NULL)
+                continue ;
+            fprintf(f, "%s = %s\n", d->key[i], d->val[i]);
+        }
+        return ;
+    }
+    for (i=0 ; i<nsec ; i++) {
+        secname = iniparser_getsecname(d, i) ;
+        iniparser_dumpsection_ini(d, secname, f) ;
+    }
+    fprintf(f, "\n");
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Save a dictionary section to a loadable ini file
+  @param    d   Dictionary to dump
+  @param    s   Section name of dictionary to dump
+  @param    f   Opened file pointer to dump to
+  @return   void
+
+  This function dumps a given section of a given dictionary into a loadable ini
+  file.  It is Ok to specify @c stderr or @c stdout as output files.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f)
+{
+    int     j ;
+    char    keym[ASCIILINESZ+1];
+    int     seclen ;
+
+    if (d==NULL || f==NULL) return ;
+    if (! iniparser_find_entry(d, s)) return ;
+
+    seclen  = (int)strlen(s);
+    fprintf(f, "\n[%s]\n", s);
+    sprintf(keym, "%s:", s);
+    for (j=0 ; j<d->size ; j++) {
+        if (d->key[j]==NULL)
+            continue ;
+        if (!strncmp(d->key[j], keym, seclen+1)) {
+            fprintf(f,
+                    "%-30s = %s\n",
+                    d->key[j]+seclen+1,
+                    d->val[j] ? d->val[j] : "");
+        }
+    }
+    fprintf(f, "\n");
+    return ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the number of keys in a section of a dictionary.
+  @param    d   Dictionary to examine
+  @param    s   Section name of dictionary to examine
+  @return   Number of keys in section
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getsecnkeys(dictionary * d, char * s)
+{
+    int     seclen, nkeys ;
+    char    keym[ASCIILINESZ+1];
+    int j ;
+
+    nkeys = 0;
+
+    if (d==NULL) return nkeys;
+    if (! iniparser_find_entry(d, s)) return nkeys;
+
+    seclen  = (int)strlen(s);
+    sprintf(keym, "%s:", s);
+
+    for (j=0 ; j<d->size ; j++) {
+        if (d->key[j]==NULL)
+            continue ;
+        if (!strncmp(d->key[j], keym, seclen+1)) 
+            nkeys++;
+    }
+
+    return nkeys;
+
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the number of keys in a section of a dictionary.
+  @param    d   Dictionary to examine
+  @param    s   Section name of dictionary to examine
+  @return   pointer to statically allocated character strings
+
+  This function queries a dictionary and finds all keys in a given section.
+  Each pointer in the returned char pointer-to-pointer is pointing to
+  a string allocated in the dictionary; do not free or modify them.
+  
+  This function returns NULL in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+char ** iniparser_getseckeys(dictionary * d, char * s)
+{
+
+    char **keys;
+
+    int i, j ;
+    char    keym[ASCIILINESZ+1];
+    int     seclen, nkeys ;
+
+    keys = NULL;
+
+    if (d==NULL) return keys;
+    if (! iniparser_find_entry(d, s)) return keys;
+
+    nkeys = iniparser_getsecnkeys(d, s);
+
+    keys = (char**) malloc(nkeys*sizeof(char*));
+
+    seclen  = (int)strlen(s);
+    sprintf(keym, "%s:", s);
+    
+    i = 0;
+
+    for (j=0 ; j<d->size ; j++) {
+        if (d->key[j]==NULL)
+            continue ;
+        if (!strncmp(d->key[j], keym, seclen+1)) {
+            keys[i] = d->key[j];
+            i++;
+        }
+    }
+
+    return keys;
+
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key
+  @param    d       Dictionary to search
+  @param    key     Key string to look for
+  @param    def     Default value to return if key not found.
+  @return   pointer to statically allocated character string
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the pointer passed as 'def' is returned.
+  The returned char pointer is pointing to a string allocated in
+  the dictionary, do not free or modify it.
+ */
+/*--------------------------------------------------------------------------*/
+char * iniparser_getstring(dictionary * d, const char * key, char * def)
+{
+    char * lc_key ;
+    char * sval ;
+
+    if (d==NULL || key==NULL)
+        return def ;
+
+    lc_key = strlwc(key);
+    sval = dictionary_get(d, lc_key, def);
+    return sval ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to an int
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   integer
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+
+  Supported values for integers include the usual C notation
+  so decimal, octal (starting with 0) and hexadecimal (starting with 0x)
+  are supported. Examples:
+
+  "42"      ->  42
+  "042"     ->  34 (octal -> decimal)
+  "0x42"    ->  66 (hexa  -> decimal)
+
+  Warning: the conversion may overflow in various ways. Conversion is
+  totally outsourced to strtol(), see the associated man page for overflow
+  handling.
+
+  Credits: Thanks to A. Becker for suggesting strtol()
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getint(dictionary * d, const char * key, int notfound)
+{
+    char    *   str ;
+
+    str = iniparser_getstring(d, key, INI_INVALID_KEY);
+    if (str==INI_INVALID_KEY) return notfound ;
+    return (int)strtol(str, NULL, 0);
+}
+
+int iniparser_getlong(dictionary * d, const char * key, int notfound)
+{
+    char    *   str ;
+
+    str = iniparser_getstring(d, key, INI_INVALID_KEY);
+    if (str==INI_INVALID_KEY) return notfound ;
+    return strtol(str, NULL, 0);
+}
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to a double
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   double
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+ */
+/*--------------------------------------------------------------------------*/
+double iniparser_getdouble(dictionary * d, const char * key, double notfound)
+{
+    char    *   str ;
+
+    str = iniparser_getstring(d, key, INI_INVALID_KEY);
+    if (str==INI_INVALID_KEY) return notfound ;
+    return atof(str);
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to a boolean
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   integer
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+
+  A true boolean is found if one of the following is matched:
+
+  - A string starting with 'y'
+  - A string starting with 'Y'
+  - A string starting with 't'
+  - A string starting with 'T'
+  - A string starting with '1'
+
+  A false boolean is found if one of the following is matched:
+
+  - A string starting with 'n'
+  - A string starting with 'N'
+  - A string starting with 'f'
+  - A string starting with 'F'
+  - A string starting with '0'
+
+  The notfound value returned if no boolean is identified, does not
+  necessarily have to be 0 or 1.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getboolean(dictionary * d, const char * key, int notfound)
+{
+    char    *   c ;
+    int         ret ;
+
+    c = iniparser_getstring(d, key, INI_INVALID_KEY);
+    if (c==INI_INVALID_KEY) return notfound ;
+    if (c[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') {
+        ret = 1 ;
+    } else if (c[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') {
+        ret = 0 ;
+    } else {
+        ret = notfound ;
+    }
+    return ret;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Finds out if a given entry exists in a dictionary
+  @param    ini     Dictionary to search
+  @param    entry   Name of the entry to look for
+  @return   integer 1 if entry exists, 0 otherwise
+
+  Finds out if a given entry exists in the dictionary. Since sections
+  are stored as keys with NULL associated values, this is the only way
+  of querying for the presence of sections in a dictionary.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_find_entry(
+    dictionary  *   ini,
+    const char  *   entry
+)
+{
+    int found=0 ;
+    if (iniparser_getstring(ini, entry, INI_INVALID_KEY)!=INI_INVALID_KEY) {
+        found = 1 ;
+    }
+    return found ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Set an entry in a dictionary.
+  @param    ini     Dictionary to modify.
+  @param    entry   Entry to modify (entry name)
+  @param    val     New value to associate to the entry.
+  @return   int 0 if Ok, -1 otherwise.
+
+  If the given entry can be found in the dictionary, it is modified to
+  contain the provided value. If it cannot be found, -1 is returned.
+  It is Ok to set val to NULL.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_set(dictionary * ini, const char * entry, const char * val)
+{
+    return dictionary_set(ini, strlwc(entry), val) ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete an entry in a dictionary
+  @param    ini     Dictionary to modify
+  @param    entry   Entry to delete (entry name)
+  @return   void
+
+  If the given entry can be found, it is deleted from the dictionary.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_unset(dictionary * ini, const char * entry)
+{
+    dictionary_unset(ini, strlwc(entry));
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Load a single line from an INI file
+  @param    input_line  Input line, may be concatenated multi-line input
+  @param    section     Output space to store section
+  @param    key         Output space to store key
+  @param    value       Output space to store value
+  @return   line_status value
+ */
+/*--------------------------------------------------------------------------*/
+static line_status iniparser_line(
+    char * input_line,
+    char * section,
+    char * key,
+    char * value)
+{   
+    line_status sta ;
+    char        line[ASCIILINESZ+1];
+    static char left_line[ASCIILINESZ+1];
+    int         len, offset ;
+
+    strcpy(line, strstrip(input_line));
+    len = (int)strlen(line);
+
+    sta = LINE_UNPROCESSED ;
+    if (len<1) {
+        /* Empty line */
+        sta = LINE_EMPTY ;
+        memset(input_line, 0, len);
+    } else if (line[0]=='#' || line[0]==';') {
+        /* Comment line */
+        sta = LINE_COMMENT ; 
+        memset(input_line, 0, len);
+    } else if (line[0]=='[') {
+        /* Section name */
+        sscanf(line, "[%[^]]", section);
+        strcpy(section, strstrip(section));
+        strcpy(section, strlwc(section));
+
+        /* Left configure will go to next time to parser */
+        offset = strlen(section) + 2;
+        strcpy( left_line, strstrip(&(line[offset])) );
+        strcpy( left_line, strstrip(left_line));
+
+        if( strlen(left_line) > 0)
+        {
+            strcpy(input_line, left_line);
+            strcat(input_line, "\n");
+        }
+        else
+        {
+            memset(input_line, 0, len); 
+        }
+        sta = LINE_SECTION ;
+    } else if (sscanf (line, "%[^=] = \"%[^\"]\"", key, value) == 2
+           ||  sscanf (line, "%[^=] = '%[^\']'",   key, value) == 2
+           ||  sscanf (line, "%[^=] = %[^;#]",     key, value) == 2) {
+        char      *ptr = NULL; 
+
+        /* Usual key=value, with or without comments */
+        strcpy(key, strstrip(key));
+        strcpy(key, strlwc(key));
+        strcpy(value, strstrip(value));
+        /*
+         * sscanf cannot handle '' or "" as empty values
+         * this is done here
+         */
+        if (!strncmp(value, "\"\"", 2) || (!strncmp(value, "''", 2)) ) {
+            value[0]=0 ;
+        }
+
+        ptr = strchr(line, '=');
+        if('\''==*(ptr+1) || '\"'==*(ptr+1))
+        {
+            offset = strlen(key)+strlen(value) + 1 + 2; /* Skip $key='$val' */
+        }
+        else
+        {
+            offset = strlen(key)+strlen(value) + 1; /* Skip $key=$val */
+        }
+        strcpy( left_line, strstrip(&(line[offset])) ); 
+        
+        if( strlen(left_line) > 0)
+        {
+            strcpy(input_line, left_line);
+            strcat(input_line, "\n");
+        }
+        else
+        {
+            memset(input_line, 0, len); 
+        }
+        sta = LINE_VALUE ;
+    } else if (sscanf(line, "%[^=] = %[;#]", key, value)==2
+           ||  sscanf(line, "%[^=] %[=]", key, value) == 2) {
+        /*
+         * Special cases:
+         * key=
+         * key=;
+         * key=#
+         */
+        strcpy(key, strstrip(key));
+        strcpy(key, strlwc(key));
+        value[0]=0 ;
+        sta = LINE_VALUE ;
+    } else {
+        /* Generate syntax error */
+        sta = LINE_ERROR ;
+        memset(input_line, 0, len);
+    }
+    return sta ;
+}
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Parse an ini file and return an allocated dictionary object
+  @param    ininame Name of the ini file to read.
+  @return   Pointer to newly allocated dictionary
+
+  This is the parser for ini files. This function is called, providing
+  the name of the file to be read. It returns a dictionary object that
+  should not be accessed directly, but through accessor functions
+  instead.
+
+  The returned dictionary must be freed using iniparser_freedict().
+ */
+/*--------------------------------------------------------------------------*/
+dictionary * iniparser_load(const char * ininame)
+{
+    FILE * in ;
+
+    char line    [ASCIILINESZ+1] ;
+    char section [ASCIILINESZ+1] ;
+    char key     [ASCIILINESZ+1] ;
+    char tmp     [ASCIILINESZ+1] ;
+    char val     [ASCIILINESZ+1] ;
+
+    int  last=0 ;
+    int  len ;
+    int  lineno=0 ;
+    int  errs=0;
+
+    dictionary * dict ;
+
+    if ((in=fopen(ininame, "r"))==NULL) {
+        fprintf(stderr, "iniparser: cannot open %s\n", ininame);
+        return NULL ;
+    }
+
+    dict = dictionary_new(0) ;
+    if (!dict) {
+        fclose(in);
+        return NULL ;
+    }
+
+    memset(line,    0, ASCIILINESZ);
+    memset(section, 0, ASCIILINESZ);
+    memset(key,     0, ASCIILINESZ);
+    memset(val,     0, ASCIILINESZ);
+    last=0 ;
+
+    while (fgets(line+last, ASCIILINESZ-last, in)!=NULL) {
+        lineno++ ;
+CONTINUE_PARSER:
+        len = (int)strlen(line)-1;
+        if (len==0)
+            continue;
+        /* Safety check against buffer overflows */
+        if (line[len]!='\n') {
+            fprintf(stderr,
+                    "iniparser: input line too long in %s (%d)\n",
+                    ininame,
+                    lineno);
+            dictionary_del(dict);
+            fclose(in);
+            return NULL ;
+        }
+        /* Get rid of \n and spaces at end of line */
+        while ((len>=0) &&
+                ((line[len]=='\n') || (isspace(line[len])))) {
+            line[len]=0 ;
+            len-- ;
+        }
+        /* Detect multi-line */
+        if (line[len]=='\\') {
+            /* Multi-line value */
+            last=len ;
+            continue ;
+        } else {
+            last=0 ;
+        }
+
+        switch ( iniparser_line(line, section, key, val) ) {
+            case LINE_EMPTY:
+            case LINE_COMMENT:
+            break ;
+
+            case LINE_SECTION:
+            errs = dictionary_set(dict, section, NULL);
+            break ;
+
+            case LINE_VALUE:
+            sprintf(tmp, "%s:%s", section, key);
+            errs = dictionary_set(dict, tmp, val) ;
+            break ;
+
+            case LINE_ERROR:
+            fprintf(stderr, "iniparser: syntax error in %s (%d):\n",
+                    ininame,
+                    lineno);
+            fprintf(stderr, "-> %s\n", line);
+            errs++ ;
+            break;
+
+            default:
+            break ;
+        }
+
+        if( strlen(line) > 0)
+        {
+            goto CONTINUE_PARSER;
+        }
+
+        memset(line, 0, ASCIILINESZ);
+        last=0;
+        if (errs<0) {
+            fprintf(stderr, "iniparser: memory allocation failure\n");
+            break ;
+        }
+    }
+    if (errs) {
+        dictionary_del(dict);
+        dict = NULL ;
+    }
+    fclose(in);
+    return dict ;
+}
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Free all memory associated to an ini dictionary
+  @param    d Dictionary to free
+  @return   void
+
+  Free all memory associated to an ini dictionary.
+  It is mandatory to call this function before the dictionary object
+  gets out of the current context.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_freedict(dictionary * d)
+{
+    dictionary_del(d);
+}
+
+/* vim: set ts=4 et sw=4 tw=75 */
diff --git a/program/cp_library/cp_iniparser.h b/program/cp_library/cp_iniparser.h
new file mode 100644
index 0000000..1e5de9c
--- /dev/null
+++ b/program/cp_library/cp_iniparser.h
@@ -0,0 +1,308 @@
+
+/*-------------------------------------------------------------------------*/
+/**
+   @file    cp_iniparser.h
+   @author  N. Devillard
+   @brief   Parser for ini files.
+*/
+/*--------------------------------------------------------------------------*/
+
+#ifndef _CP_INIPARSER_H_
+#define _CP_INIPARSER_H_
+
+/*---------------------------------------------------------------------------
+                                Includes
+ ---------------------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * The following #include is necessary on many Unixes but not Linux.
+ * It is not needed for Windows platforms.
+ * Uncomment it if needed.
+ */
+/* #include <unistd.h> */
+
+#include "cp_dictionary.h"
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get number of sections in a dictionary
+  @param    d   Dictionary to examine
+  @return   int Number of sections found in dictionary
+
+  This function returns the number of sections found in a dictionary.
+  The test to recognize sections is done on the string stored in the
+  dictionary: a section name is given as "section" whereas a key is
+  stored as "section:key", thus the test looks for entries that do not
+  contain a colon.
+
+  This clearly fails in the case a section name contains a colon, but
+  this should simply be avoided.
+
+  This function returns -1 in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+
+int iniparser_getnsec(dictionary * d);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get name for section n in a dictionary.
+  @param    d   Dictionary to examine
+  @param    n   Section number (from 0 to nsec-1).
+  @return   Pointer to char string
+
+  This function locates the n-th section in a dictionary and returns
+  its name as a pointer to a string statically allocated inside the
+  dictionary. Do not free or modify the returned string!
+
+  This function returns NULL in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+
+char * iniparser_getsecname(dictionary * d, int n);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Save a dictionary to a loadable ini file
+  @param    d   Dictionary to dump
+  @param    f   Opened file pointer to dump to
+  @return   void
+
+  This function dumps a given dictionary into a loadable ini file.
+  It is Ok to specify @c stderr or @c stdout as output files.
+ */
+/*--------------------------------------------------------------------------*/
+
+void iniparser_dump_ini(dictionary * d, FILE * f);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Save a dictionary section to a loadable ini file
+  @param    d   Dictionary to dump
+  @param    s   Section name of dictionary to dump
+  @param    f   Opened file pointer to dump to
+  @return   void
+
+  This function dumps a given section of a given dictionary into a loadable ini
+  file.  It is Ok to specify @c stderr or @c stdout as output files.
+ */
+/*--------------------------------------------------------------------------*/
+
+void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Dump a dictionary to an opened file pointer.
+  @param    d   Dictionary to dump.
+  @param    f   Opened file pointer to dump to.
+  @return   void
+
+  This function prints out the contents of a dictionary, one element by
+  line, onto the provided file pointer. It is OK to specify @c stderr
+  or @c stdout as output files. This function is meant for debugging
+  purposes mostly.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_dump(dictionary * d, FILE * f);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the number of keys in a section of a dictionary.
+  @param    d   Dictionary to examine
+  @param    s   Section name of dictionary to examine
+  @return   Number of keys in section
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getsecnkeys(dictionary * d, char * s);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the number of keys in a section of a dictionary.
+  @param    d   Dictionary to examine
+  @param    s   Section name of dictionary to examine
+  @return   pointer to statically allocated character strings
+
+  This function queries a dictionary and finds all keys in a given section.
+  Each pointer in the returned char pointer-to-pointer is pointing to
+  a string allocated in the dictionary; do not free or modify them.
+
+  This function returns NULL in case of error.
+ */
+/*--------------------------------------------------------------------------*/
+char ** iniparser_getseckeys(dictionary * d, char * s);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key
+  @param    d       Dictionary to search
+  @param    key     Key string to look for
+  @param    def     Default value to return if key not found.
+  @return   pointer to statically allocated character string
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the pointer passed as 'def' is returned.
+  The returned char pointer is pointing to a string allocated in
+  the dictionary, do not free or modify it.
+ */
+/*--------------------------------------------------------------------------*/
+char * iniparser_getstring(dictionary * d, const char * key, char * def);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to an int
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   integer
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+
+  Supported values for integers include the usual C notation
+  so decimal, octal (starting with 0) and hexadecimal (starting with 0x)
+  are supported. Examples:
+
+  - "42"      ->  42
+  - "042"     ->  34 (octal -> decimal)
+  - "0x42"    ->  66 (hexa  -> decimal)
+
+  Warning: the conversion may overflow in various ways. Conversion is
+  totally outsourced to strtol(), see the associated man page for overflow
+  handling.
+
+  Credits: Thanks to A. Becker for suggesting strtol()
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getint(dictionary * d, const char * key, int notfound);
+int iniparser_getlong(dictionary * d, const char * key, int notfound);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to a double
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   double
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+ */
+/*--------------------------------------------------------------------------*/
+double iniparser_getdouble(dictionary * d, const char * key, double notfound);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Get the string associated to a key, convert to a boolean
+  @param    d Dictionary to search
+  @param    key Key string to look for
+  @param    notfound Value to return in case of error
+  @return   integer
+
+  This function queries a dictionary for a key. A key as read from an
+  ini file is given as "section:key". If the key cannot be found,
+  the notfound value is returned.
+
+  A true boolean is found if one of the following is matched:
+
+  - A string starting with 'y'
+  - A string starting with 'Y'
+  - A string starting with 't'
+  - A string starting with 'T'
+  - A string starting with '1'
+
+  A false boolean is found if one of the following is matched:
+
+  - A string starting with 'n'
+  - A string starting with 'N'
+  - A string starting with 'f'
+  - A string starting with 'F'
+  - A string starting with '0'
+
+  The notfound value returned if no boolean is identified, does not
+  necessarily have to be 0 or 1.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_getboolean(dictionary * d, const char * key, int notfound);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Set an entry in a dictionary.
+  @param    ini     Dictionary to modify.
+  @param    entry   Entry to modify (entry name)
+  @param    val     New value to associate to the entry.
+  @return   int 0 if Ok, -1 otherwise.
+
+  If the given entry can be found in the dictionary, it is modified to
+  contain the provided value. If it cannot be found, -1 is returned.
+  It is Ok to set val to NULL.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_set(dictionary * ini, const char * entry, const char * val);
+
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Delete an entry in a dictionary
+  @param    ini     Dictionary to modify
+  @param    entry   Entry to delete (entry name)
+  @return   void
+
+  If the given entry can be found, it is deleted from the dictionary.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_unset(dictionary * ini, const char * entry);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Finds out if a given entry exists in a dictionary
+  @param    ini     Dictionary to search
+  @param    entry   Name of the entry to look for
+  @return   integer 1 if entry exists, 0 otherwise
+
+  Finds out if a given entry exists in the dictionary. Since sections
+  are stored as keys with NULL associated values, this is the only way
+  of querying for the presence of sections in a dictionary.
+ */
+/*--------------------------------------------------------------------------*/
+int iniparser_find_entry(dictionary * ini, const char * entry) ;
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Parse an ini file and return an allocated dictionary object
+  @param    ininame Name of the ini file to read.
+  @return   Pointer to newly allocated dictionary
+
+  This is the parser for ini files. This function is called, providing
+  the name of the file to be read. It returns a dictionary object that
+  should not be accessed directly, but through accessor functions
+  instead.
+
+  The returned dictionary must be freed using iniparser_freedict().
+ */
+/*--------------------------------------------------------------------------*/
+dictionary * iniparser_load(const char * ininame);
+
+/*-------------------------------------------------------------------------*/
+/**
+  @brief    Free all memory associated to an ini dictionary
+  @param    d Dictionary to free
+  @return   void
+
+  Free all memory associated to an ini dictionary.
+  It is mandatory to call this function before the dictionary object
+  gets out of the current context.
+ */
+/*--------------------------------------------------------------------------*/
+void iniparser_freedict(dictionary * d);
+
+#endif
diff --git a/program/cp_library/cp_klist.h b/program/cp_library/cp_klist.h
new file mode 100644
index 0000000..a75bdd1
--- /dev/null
+++ b/program/cp_library/cp_klist.h
@@ -0,0 +1,723 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_list.h
+ *    Description:  This file is copied from Linux kernel, which provide link list API.
+ *                 
+ *        Version:  1.0.0(08/09/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/09/2012 02:24:34 AM"
+ *                 
+ ********************************************************************************/
+
+#ifndef _LINUX_LIST_H
+#define _LINUX_LIST_H
+
+#include <linux/stddef.h>
+
+
+/**
+ * container_of - cast a member of a structure out to the containing structure
+ * @ptr:    the pointer to the member.
+ * @type:   the type of the container struct this is embedded in.
+ * @member: the name of the member within the struct.
+ *
+ */
+#undef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#define container_of(ptr, type, member) ({          \
+    const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
+    (type *)( (char *)__mptr - offsetof(type,member) );})
+
+
+/*
+ * Architectures might want to move the poison pointer offset
+ * into some well-recognized area such as 0xdead000000000000,
+ * that is also not mappable by user-space exploits:
+ */
+#ifdef CONFIG_ILLEGAL_POINTER_VALUE
+# define POISON_POINTER_DELTA _AC(CONFIG_ILLEGAL_POINTER_VALUE, UL)
+#else
+# define POISON_POINTER_DELTA 0
+#endif
+
+/*
+ * These are non-NULL pointers that will result in page faults
+ * under normal circumstances, used to verify that nobody uses
+ * non-initialized list entries.
+ */
+#define LIST_POISON1  ((void *) 0x00100100 + POISON_POINTER_DELTA)
+#define LIST_POISON2  ((void *) 0x00200200 + POISON_POINTER_DELTA)
+
+#ifndef ARCH_HAS_PREFETCH
+#define ARCH_HAS_PREFETCH
+static inline void prefetch(const void *x) {;}
+#endif
+
+/*
+ * Simple doubly linked list implementation.
+ *
+ * Some of the internal functions ("__xxx") are useful when
+ * manipulating whole lists rather than single entries, as
+ * sometimes we already know the next/prev entries and we can
+ * generate better code by using them directly rather than
+ * using the generic single-entry routines.
+ */
+
+struct list_head {
+	struct list_head *next, *prev;
+};
+
+#define LIST_HEAD_INIT(name) { &(name), &(name) }
+
+#define LIST_HEAD(name) \
+	struct list_head name = LIST_HEAD_INIT(name)
+
+static inline void INIT_LIST_HEAD(struct list_head *list)
+{
+	list->next = list;
+	list->prev = list;
+}
+
+/*
+ * Insert a new entry between two known consecutive entries.
+ *
+ * This is only for internal list manipulation where we know
+ * the prev/next entries already!
+ */
+static inline void __list_add(struct list_head *new,
+			      struct list_head *prev,
+			      struct list_head *next)
+{
+	next->prev = new;
+	new->next = next;
+	new->prev = prev;
+	prev->next = new;
+}
+
+/**
+ * list_add - add a new entry
+ * @new: new entry to be added
+ * @head: list head to add it after
+ *
+ * Insert a new entry after the specified head.
+ * This is good for implementing stacks.
+ */
+static inline void list_add(struct list_head *new, struct list_head *head)
+{
+	__list_add(new, head, head->next);
+}
+
+/**
+ * list_add_tail - add a new entry
+ * @new: new entry to be added
+ * @head: list head to add it before
+ *
+ * Insert a new entry before the specified head.
+ * This is useful for implementing queues.
+ */
+static inline void list_add_tail(struct list_head *new, struct list_head *head)
+{
+	__list_add(new, head->prev, head);
+}
+
+/*
+ * Delete a list entry by making the prev/next entries
+ * point to each other.
+ *
+ * This is only for internal list manipulation where we know
+ * the prev/next entries already!
+ */
+static inline void __list_del(struct list_head *prev, struct list_head *next)
+{
+	next->prev = prev;
+	prev->next = next;
+}
+
+/**
+ * list_del - deletes entry from list.
+ * @entry: the element to delete from the list.
+ * Note: list_empty() on entry does not return true after this, the entry is
+ * in an undefined state.
+ */
+static inline void list_del(struct list_head *entry)
+{
+	__list_del(entry->prev, entry->next);
+	entry->next = LIST_POISON1;
+	entry->prev = LIST_POISON2;
+}
+
+/**
+ * list_replace - replace old entry by new one
+ * @old : the element to be replaced
+ * @new : the new element to insert
+ *
+ * If @old was empty, it will be overwritten.
+ */
+static inline void list_replace(struct list_head *old,
+				struct list_head *new)
+{
+	new->next = old->next;
+	new->next->prev = new;
+	new->prev = old->prev;
+	new->prev->next = new;
+}
+
+static inline void list_replace_init(struct list_head *old,
+					struct list_head *new)
+{
+	list_replace(old, new);
+	INIT_LIST_HEAD(old);
+}
+
+/**
+ * list_del_init - deletes entry from list and reinitialize it.
+ * @entry: the element to delete from the list.
+ */
+static inline void list_del_init(struct list_head *entry)
+{
+	__list_del(entry->prev, entry->next);
+	INIT_LIST_HEAD(entry);
+}
+
+/**
+ * list_move - delete from one list and add as another's head
+ * @list: the entry to move
+ * @head: the head that will precede our entry
+ */
+static inline void list_move(struct list_head *list, struct list_head *head)
+{
+	__list_del(list->prev, list->next);
+	list_add(list, head);
+}
+
+/**
+ * list_move_tail - delete from one list and add as another's tail
+ * @list: the entry to move
+ * @head: the head that will follow our entry
+ */
+static inline void list_move_tail(struct list_head *list,
+				  struct list_head *head)
+{
+	__list_del(list->prev, list->next);
+	list_add_tail(list, head);
+}
+
+/**
+ * list_is_last - tests whether @list is the last entry in list @head
+ * @list: the entry to test
+ * @head: the head of the list
+ */
+static inline int list_is_last(const struct list_head *list,
+				const struct list_head *head)
+{
+	return list->next == head;
+}
+
+/**
+ * list_empty - tests whether a list is empty
+ * @head: the list to test.
+ */
+static inline int list_empty(const struct list_head *head)
+{
+	return head->next == head;
+}
+
+/**
+ * list_empty_careful - tests whether a list is empty and not being modified
+ * @head: the list to test
+ *
+ * Description:
+ * tests whether a list is empty _and_ checks that no other CPU might be
+ * in the process of modifying either member (next or prev)
+ *
+ * NOTE: using list_empty_careful() without synchronization
+ * can only be safe if the only activity that can happen
+ * to the list entry is list_del_init(). Eg. it cannot be used
+ * if another CPU could re-list_add() it.
+ */
+static inline int list_empty_careful(const struct list_head *head)
+{
+	struct list_head *next = head->next;
+	return (next == head) && (next == head->prev);
+}
+
+/**
+ * list_is_singular - tests whether a list has just one entry.
+ * @head: the list to test.
+ */
+static inline int list_is_singular(const struct list_head *head)
+{
+	return !list_empty(head) && (head->next == head->prev);
+}
+
+static inline void __list_cut_position(struct list_head *list,
+		struct list_head *head, struct list_head *entry)
+{
+	struct list_head *new_first = entry->next;
+	list->next = head->next;
+	list->next->prev = list;
+	list->prev = entry;
+	entry->next = list;
+	head->next = new_first;
+	new_first->prev = head;
+}
+
+/**
+ * list_cut_position - cut a list into two
+ * @list: a new list to add all removed entries
+ * @head: a list with entries
+ * @entry: an entry within head, could be the head itself
+ *	and if so we won't cut the list
+ *
+ * This helper moves the initial part of @head, up to and
+ * including @entry, from @head to @list. You should
+ * pass on @entry an element you know is on @head. @list
+ * should be an empty list or a list you do not care about
+ * losing its data.
+ *
+ */
+static inline void list_cut_position(struct list_head *list,
+		struct list_head *head, struct list_head *entry)
+{
+	if (list_empty(head))
+		return;
+	if (list_is_singular(head) &&
+		(head->next != entry && head != entry))
+		return;
+	if (entry == head)
+		INIT_LIST_HEAD(list);
+	else
+		__list_cut_position(list, head, entry);
+}
+
+static inline void __list_splice(const struct list_head *list,
+				 struct list_head *prev,
+				 struct list_head *next)
+{
+	struct list_head *first = list->next;
+	struct list_head *last = list->prev;
+
+	first->prev = prev;
+	prev->next = first;
+
+	last->next = next;
+	next->prev = last;
+}
+
+/**
+ * list_splice - join two lists, this is designed for stacks
+ * @list: the new list to add.
+ * @head: the place to add it in the first list.
+ */
+static inline void list_splice(const struct list_head *list,
+				struct list_head *head)
+{
+	if (!list_empty(list))
+		__list_splice(list, head, head->next);
+}
+
+/**
+ * list_splice_tail - join two lists, each list being a queue
+ * @list: the new list to add.
+ * @head: the place to add it in the first list.
+ */
+static inline void list_splice_tail(struct list_head *list,
+				struct list_head *head)
+{
+	if (!list_empty(list))
+		__list_splice(list, head->prev, head);
+}
+
+/**
+ * list_splice_init - join two lists and reinitialise the emptied list.
+ * @list: the new list to add.
+ * @head: the place to add it in the first list.
+ *
+ * The list at @list is reinitialised
+ */
+static inline void list_splice_init(struct list_head *list,
+				    struct list_head *head)
+{
+	if (!list_empty(list)) {
+		__list_splice(list, head, head->next);
+		INIT_LIST_HEAD(list);
+	}
+}
+
+/**
+ * list_splice_tail_init - join two lists and reinitialise the emptied list
+ * @list: the new list to add.
+ * @head: the place to add it in the first list.
+ *
+ * Each of the lists is a queue.
+ * The list at @list is reinitialised
+ */
+static inline void list_splice_tail_init(struct list_head *list,
+					 struct list_head *head)
+{
+	if (!list_empty(list)) {
+		__list_splice(list, head->prev, head);
+		INIT_LIST_HEAD(list);
+	}
+}
+
+/**
+ * list_entry - get the struct for this entry
+ * @ptr:	the &struct list_head pointer.
+ * @type:	the type of the struct this is embedded in.
+ * @member:	the name of the list_struct within the struct.
+ */
+#define list_entry(ptr, type, member) \
+	container_of(ptr, type, member)
+
+/**
+ * list_first_entry - get the first element from a list
+ * @ptr:	the list head to take the element from.
+ * @type:	the type of the struct this is embedded in.
+ * @member:	the name of the list_struct within the struct.
+ *
+ * Note, that list is expected to be not empty.
+ */
+#define list_first_entry(ptr, type, member) \
+	list_entry((ptr)->next, type, member)
+
+/**
+ * list_for_each	-	iterate over a list
+ * @pos:	the &struct list_head to use as a loop cursor.
+ * @head:	the head for your list.
+ */
+#define list_for_each(pos, head) \
+	for (pos = (head)->next; prefetch(pos->next), pos != (head); \
+		pos = pos->next)
+
+/**
+ * __list_for_each	-	iterate over a list
+ * @pos:	the &struct list_head to use as a loop cursor.
+ * @head:	the head for your list.
+ *
+ * This variant differs from list_for_each() in that it's the
+ * simplest possible list iteration code, no prefetching is done.
+ * Use this for code that knows the list to be very short (empty
+ * or 1 entry) most of the time.
+ */
+#define __list_for_each(pos, head) \
+	for (pos = (head)->next; pos != (head); pos = pos->next)
+
+/**
+ * list_for_each_prev	-	iterate over a list backwards
+ * @pos:	the &struct list_head to use as a loop cursor.
+ * @head:	the head for your list.
+ */
+#define list_for_each_prev(pos, head) \
+	for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
+		pos = pos->prev)
+
+/**
+ * list_for_each_safe - iterate over a list safe against removal of list entry
+ * @pos:	the &struct list_head to use as a loop cursor.
+ * @n:		another &struct list_head to use as temporary storage
+ * @head:	the head for your list.
+ */
+#define list_for_each_safe(pos, n, head) \
+	for (pos = (head)->next, n = pos->next; pos != (head); \
+		pos = n, n = pos->next)
+
+/**
+ * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
+ * @pos:	the &struct list_head to use as a loop cursor.
+ * @n:		another &struct list_head to use as temporary storage
+ * @head:	the head for your list.
+ */
+#define list_for_each_prev_safe(pos, n, head) \
+	for (pos = (head)->prev, n = pos->prev; \
+	     prefetch(pos->prev), pos != (head); \
+	     pos = n, n = pos->prev)
+
+/**
+ * list_for_each_entry	-	iterate over list of given type
+ * @pos:	the type * to use as a loop cursor.
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ */
+#define list_for_each_entry(pos, head, member)				\
+	for (pos = list_entry((head)->next, typeof(*pos), member);	\
+	     prefetch(pos->member.next), &pos->member != (head);	\
+	     pos = list_entry(pos->member.next, typeof(*pos), member))
+
+/**
+ * list_for_each_entry_reverse - iterate backwards over list of given type.
+ * @pos:	the type * to use as a loop cursor.
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ */
+#define list_for_each_entry_reverse(pos, head, member)			\
+	for (pos = list_entry((head)->prev, typeof(*pos), member);	\
+	     prefetch(pos->member.prev), &pos->member != (head);	\
+	     pos = list_entry(pos->member.prev, typeof(*pos), member))
+
+/**
+ * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
+ * @pos:	the type * to use as a start point
+ * @head:	the head of the list
+ * @member:	the name of the list_struct within the struct.
+ *
+ * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
+ */
+#define list_prepare_entry(pos, head, member) \
+	((pos) ? : list_entry(head, typeof(*pos), member))
+
+/**
+ * list_for_each_entry_continue - continue iteration over list of given type
+ * @pos:	the type * to use as a loop cursor.
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ *
+ * Continue to iterate over list of given type, continuing after
+ * the current position.
+ */
+#define list_for_each_entry_continue(pos, head, member) 		\
+	for (pos = list_entry(pos->member.next, typeof(*pos), member);	\
+	     prefetch(pos->member.next), &pos->member != (head);	\
+	     pos = list_entry(pos->member.next, typeof(*pos), member))
+
+/**
+ * list_for_each_entry_continue_reverse - iterate backwards from the given point
+ * @pos:	the type * to use as a loop cursor.
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ *
+ * Start to iterate over list of given type backwards, continuing after
+ * the current position.
+ */
+#define list_for_each_entry_continue_reverse(pos, head, member)		\
+	for (pos = list_entry(pos->member.prev, typeof(*pos), member);	\
+	     prefetch(pos->member.prev), &pos->member != (head);	\
+	     pos = list_entry(pos->member.prev, typeof(*pos), member))
+
+/**
+ * list_for_each_entry_from - iterate over list of given type from the current point
+ * @pos:	the type * to use as a loop cursor.
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ *
+ * Iterate over list of given type, continuing from current position.
+ */
+#define list_for_each_entry_from(pos, head, member)			\
+	for (; prefetch(pos->member.next), &pos->member != (head);	\
+	     pos = list_entry(pos->member.next, typeof(*pos), member))
+
+/**
+ * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * @pos:	the type * to use as a loop cursor.
+ * @n:		another type * to use as temporary storage
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ */
+#define list_for_each_entry_safe(pos, n, head, member)			\
+	for (pos = list_entry((head)->next, typeof(*pos), member),	\
+		n = list_entry(pos->member.next, typeof(*pos), member);	\
+	     &pos->member != (head);					\
+	     pos = n, n = list_entry(n->member.next, typeof(*n), member))
+
+/**
+ * list_for_each_entry_safe_continue
+ * @pos:	the type * to use as a loop cursor.
+ * @n:		another type * to use as temporary storage
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ *
+ * Iterate over list of given type, continuing after current point,
+ * safe against removal of list entry.
+ */
+#define list_for_each_entry_safe_continue(pos, n, head, member) 		\
+	for (pos = list_entry(pos->member.next, typeof(*pos), member),		\
+		n = list_entry(pos->member.next, typeof(*pos), member);		\
+	     &pos->member != (head);						\
+	     pos = n, n = list_entry(n->member.next, typeof(*n), member))
+
+/**
+ * list_for_each_entry_safe_from
+ * @pos:	the type * to use as a loop cursor.
+ * @n:		another type * to use as temporary storage
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ *
+ * Iterate over list of given type from current point, safe against
+ * removal of list entry.
+ */
+#define list_for_each_entry_safe_from(pos, n, head, member)			\
+	for (n = list_entry(pos->member.next, typeof(*pos), member);		\
+	     &pos->member != (head);						\
+	     pos = n, n = list_entry(n->member.next, typeof(*n), member))
+
+/**
+ * list_for_each_entry_safe_reverse
+ * @pos:	the type * to use as a loop cursor.
+ * @n:		another type * to use as temporary storage
+ * @head:	the head for your list.
+ * @member:	the name of the list_struct within the struct.
+ *
+ * Iterate backwards over list of given type, safe against removal
+ * of list entry.
+ */
+#define list_for_each_entry_safe_reverse(pos, n, head, member)		\
+	for (pos = list_entry((head)->prev, typeof(*pos), member),	\
+		n = list_entry(pos->member.prev, typeof(*pos), member);	\
+	     &pos->member != (head);					\
+	     pos = n, n = list_entry(n->member.prev, typeof(*n), member))
+
+/*
+ * Double linked lists with a single pointer list head.
+ * Mostly useful for hash tables where the two pointer list head is
+ * too wasteful.
+ * You lose the ability to access the tail in O(1).
+ */
+
+struct hlist_head {
+	struct hlist_node *first;
+};
+
+struct hlist_node {
+	struct hlist_node *next, **pprev;
+};
+
+#define HLIST_HEAD_INIT { .first = NULL }
+#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
+#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
+static inline void INIT_HLIST_NODE(struct hlist_node *h)
+{
+	h->next = NULL;
+	h->pprev = NULL;
+}
+
+static inline int hlist_unhashed(const struct hlist_node *h)
+{
+	return !h->pprev;
+}
+
+static inline int hlist_empty(const struct hlist_head *h)
+{
+	return !h->first;
+}
+
+static inline void __hlist_del(struct hlist_node *n)
+{
+	struct hlist_node *next = n->next;
+	struct hlist_node **pprev = n->pprev;
+	*pprev = next;
+	if (next)
+		next->pprev = pprev;
+}
+
+static inline void hlist_del(struct hlist_node *n)
+{
+	__hlist_del(n);
+	n->next = LIST_POISON1;
+	n->pprev = LIST_POISON2;
+}
+
+static inline void hlist_del_init(struct hlist_node *n)
+{
+	if (!hlist_unhashed(n)) {
+		__hlist_del(n);
+		INIT_HLIST_NODE(n);
+	}
+}
+
+static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
+{
+	struct hlist_node *first = h->first;
+	n->next = first;
+	if (first)
+		first->pprev = &n->next;
+	h->first = n;
+	n->pprev = &h->first;
+}
+
+/* next must be != NULL */
+static inline void hlist_add_before(struct hlist_node *n,
+					struct hlist_node *next)
+{
+	n->pprev = next->pprev;
+	n->next = next;
+	next->pprev = &n->next;
+	*(n->pprev) = n;
+}
+
+static inline void hlist_add_after(struct hlist_node *n,
+					struct hlist_node *next)
+{
+	next->next = n->next;
+	n->next = next;
+	next->pprev = &n->next;
+
+	if(next->next)
+		next->next->pprev  = &next->next;
+}
+
+#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
+
+#define hlist_for_each(pos, head) \
+	for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
+	     pos = pos->next)
+
+#define hlist_for_each_safe(pos, n, head) \
+	for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
+	     pos = n)
+
+/**
+ * hlist_for_each_entry	- iterate over list of given type
+ * @tpos:	the type * to use as a loop cursor.
+ * @pos:	the &struct hlist_node to use as a loop cursor.
+ * @head:	the head for your list.
+ * @member:	the name of the hlist_node within the struct.
+ */
+#define hlist_for_each_entry(tpos, pos, head, member)			 \
+	for (pos = (head)->first;					 \
+	     pos && ({ prefetch(pos->next); 1;}) &&			 \
+		({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+	     pos = pos->next)
+
+/**
+ * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
+ * @tpos:	the type * to use as a loop cursor.
+ * @pos:	the &struct hlist_node to use as a loop cursor.
+ * @member:	the name of the hlist_node within the struct.
+ */
+#define hlist_for_each_entry_continue(tpos, pos, member)		 \
+	for (pos = (pos)->next;						 \
+	     pos && ({ prefetch(pos->next); 1;}) &&			 \
+		({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+	     pos = pos->next)
+
+/**
+ * hlist_for_each_entry_from - iterate over a hlist continuing from current point
+ * @tpos:	the type * to use as a loop cursor.
+ * @pos:	the &struct hlist_node to use as a loop cursor.
+ * @member:	the name of the hlist_node within the struct.
+ */
+#define hlist_for_each_entry_from(tpos, pos, member)			 \
+	for (; pos && ({ prefetch(pos->next); 1;}) &&			 \
+		({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+	     pos = pos->next)
+
+/**
+ * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * @tpos:	the type * to use as a loop cursor.
+ * @pos:	the &struct hlist_node to use as a loop cursor.
+ * @n:		another &struct hlist_node to use as temporary storage
+ * @head:	the head for your list.
+ * @member:	the name of the hlist_node within the struct.
+ */
+#define hlist_for_each_entry_safe(tpos, pos, n, head, member)		 \
+	for (pos = (head)->first;					 \
+	     pos && ({ n = pos->next; 1; }) &&				 \
+		({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+	     pos = n)
+
+
+#endif
+
+
diff --git a/program/cp_library/cp_logger.c b/program/cp_library/cp_logger.c
new file mode 100644
index 0000000..b660d65
--- /dev/null
+++ b/program/cp_library/cp_logger.c
@@ -0,0 +1,420 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_log.c
+ *    Description:  This file is the linux infrastructural logger system library
+ *                 
+ *        Version:  1.0.0(08/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/08/2012 04:24:01 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_logger.h"
+#include "cp_common.h"
+
+#define PRECISE_TIME_FACTOR 1000
+
+static unsigned long log_rollback_size = LOG_ROLLBACK_NONE;
+
+static cp_logger *logger = NULL;
+
+char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" };
+
+static char *cp_time_format = DEFAULT_TIME_FORMAT;
+
+void cp_log_set_time_format(char *time_format)
+{
+    cp_time_format = time_format;
+}
+
+static void cp_log_default_signal_handler(int sig)
+{
+    if(!logger)
+        return ;
+
+    if (sig == SIGHUP)
+    {
+        signal(SIGHUP, cp_log_default_signal_handler);
+        log_fatal("SIGHUP received - reopenning log file [%s]", logger->file);
+        cp_log_reopen();
+    }
+}
+
+static void log_banner(char *prefix)
+{
+    if(!logger)
+        return ;
+
+    fprintf(logger->fp, "%s log \"%s\" on level [%s] size [%lu], log system version %s\n",
+            prefix, logger->file, log_str[logger->level], log_rollback_size / 1024, LOG_VERSION_STR);
+#ifdef LOG_FILE_LINE
+    fprintf(logger->fp, " [Date]    [Time]   [Level] [PID/TID] [File/Line]  [Content]\n");
+#else
+    fprintf(logger->fp, " [Date]    [Time]   [Level] [PID/TID] [Content]\n");
+#endif
+    fprintf(logger->fp, "-------------------------------------------------------------\n");
+}
+
+static void check_and_rollback(void)
+{
+    if(!logger)
+        return ;
+
+    if (log_rollback_size != LOG_ROLLBACK_NONE)
+    {
+        long _curOffset = ftell(logger->fp);
+
+        if ((_curOffset != -1) && (_curOffset >= log_rollback_size))
+        {
+            char cmd[512];
+
+            snprintf(cmd, sizeof(cmd), "cp -f %s %s.roll", logger->file, logger->file);
+            system(cmd);
+
+            if (-1 == fseek(logger->fp, 0L, SEEK_SET))
+                fprintf(logger->fp, "log rollback fseek failed \n");
+
+            rewind(logger->fp);
+
+            truncate(logger->file, 0);
+            log_banner("Already rollback");
+        }
+    }
+}
+
+cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size)
+{
+    if(NULL == log)
+    {
+        logger = t_malloc(sizeof(cp_logger));
+        memset(logger, 0, sizeof(cp_logger));
+        logger->flag |= CP_LOGGER_MALLOC; 
+    }
+    else
+    {
+        logger = log;
+        memset(logger, 0, sizeof(cp_logger));
+        logger->flag |= CP_LOGGER_ARGUMENT; 
+    }
+
+    if(NULL == logger)
+    {
+        return NULL;
+    }
+
+    strncpy(logger->file, filename, FILENAME_LEN); 
+    logger->level = level;
+    logger->size = log_size; 
+
+    return logger;
+}
+
+int cp_log_open(void)
+{
+    struct sigaction act;
+    char *filemode;
+
+    if(!logger)
+    {
+        return -1;
+    }
+
+    log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024;    /* Unit KiB */
+        
+    if ('\0' == logger->file)
+        return -1;
+
+    if (!strcmp(logger->file, DBG_LOG_FILE))
+    {
+        logger->fp = stderr;
+        log_rollback_size = LOG_ROLLBACK_NONE;
+        logger->flag |= CP_LOGGER_CONSOLE;
+        goto OUT;
+    }
+
+    //filemode = (log_rollback_size==LOG_ROLLBACK_NONE) ? "a+" : "w+";
+    filemode = "a+";
+
+    logger->fp = fopen(logger->file, filemode);
+    if (NULL == logger->fp)
+    {
+        fprintf(stderr, "Open log file \"%s\" in %s failure\n", logger->file, filemode);
+        return -2;
+    }
+
+    act.sa_handler = cp_log_default_signal_handler;
+    sigemptyset(&act.sa_mask);
+    act.sa_flags = 0;
+    sigaction(SIGHUP, &act, NULL);
+
+  OUT:
+    log_banner("Initialize");
+
+    return 0;
+}
+
+void cp_log_close(void)
+{
+    if (!logger || !logger->fp )
+        return;
+
+    log_banner("\nTerminate");
+    cp_log_raw("\n\n\n\n");
+
+    fflush(logger->fp);
+
+    fclose(logger->fp);
+    logger->fp = NULL;
+
+    return ;
+}
+
+int cp_log_reopen(void)
+{
+    int rc = 0;
+    char *filemode;
+
+    if( !logger )
+        return -1;
+
+    if (logger->flag & CP_LOGGER_CONSOLE )
+    {
+        fflush(logger->fp);
+        logger->fp = stderr;
+        return 0;
+    }
+
+    if (logger->fp)
+    {
+        cp_log_close();
+        //filemode = log_rollback_size == LOG_ROLLBACK_NONE ? "a+" : "w+";
+        filemode = "a+";
+        logger->fp = fopen(logger->file, filemode); 
+        
+        if (logger->fp == NULL)
+            rc = -2;
+    }
+    else
+    {
+        rc = -3;
+    }
+
+    if (!rc)
+    {
+        log_banner("\nReopen");
+    }
+    return rc;
+}
+
+void cp_log_term(void)
+{
+    if(!logger)
+        return ;
+
+    cp_log_close();
+
+    if (logger->flag & CP_LOGGER_MALLOC )
+    {
+        t_free(logger);
+    }
+    logger = NULL;
+}
+
+void cp_log_raw(const char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || !logger->fp)
+        return;
+
+    check_and_rollback();
+
+    va_start(argp, fmt);
+    vfprintf(logger->fp, fmt, argp);
+    va_end(argp);
+}
+
+static void cp_printout(char *level, char *fmt, va_list argp)
+{
+    char buf[MAX_LOG_MESSAGE_LEN];
+    struct tm *local;
+    struct timeval now;
+    char timestr[256];
+
+    if(!logger)
+        return ;
+
+    pthread_t tid;
+
+    check_and_rollback();
+
+#ifdef MULTHREADS
+    tid = pthread_self();
+#else 
+    tid = getpid();
+#endif
+
+    gettimeofday(&now, NULL);
+    local = localtime(&now.tv_sec);
+
+    strftime(timestr, 256, cp_time_format, local);
+    vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp);
+
+#ifdef DUMPLICATE_OUTPUT
+    printf("%s.%03ld [%s] [%06lu]: %s",
+           timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, buf);
+#endif
+
+    if (logger->fp)
+        fprintf(logger->fp, "%s.%03ld [%s] [%06lu]: %s", timestr, now.tv_usec / PRECISE_TIME_FACTOR,
+                level, tid, buf);
+
+    if (logger->fp)
+        fflush(logger->fp);
+}
+
+static void cp_printout_line(char *level, char *fmt, char *file, int line, va_list argp)
+{
+    char buf[MAX_LOG_MESSAGE_LEN];
+    struct tm *local;
+    struct timeval now;
+    char timestr[256];
+
+    if(!logger)
+        return ;
+
+    pthread_t tid;
+
+    check_and_rollback();
+
+#ifdef MULTHREADS
+    tid = pthread_self();
+#else 
+    tid = getpid();
+#endif
+
+    gettimeofday(&now, NULL);
+    local = localtime(&now.tv_sec);
+
+    strftime(timestr, 256, cp_time_format, local);
+    vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp);
+
+#ifdef DUMPLICATE_OUTPUT
+    printf("%s.%03ld [%s] [%06lu] (%s [%04d]) : %s",
+           timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf);
+#endif
+
+    if (logger->fp)
+        fprintf(logger->fp, "%s.%03ld [%s] [%06lu] (%s [%04d]) : %s",
+                timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf);
+
+    if (logger->fp)
+        fflush(logger->fp);
+}
+
+void cp_log(int level, char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || level>logger->level)
+        return;
+
+    va_start(argp, fmt);
+    cp_printout(log_str[level], fmt, argp);
+    va_end(argp);
+}
+
+void cp_log_line(int level, char *file, int line, char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || level>logger->level)
+        return;
+
+    va_start(argp, fmt);
+    cp_printout_line(log_str[level], fmt, file, line, argp);
+
+    va_end(argp);
+}
+
+#define LINELEN 81
+#define CHARS_PER_LINE 16
+static char *print_char =
+    "                "
+    "                "
+    " !\"#$%&'()*+,-./"
+    "0123456789:;<=>?"
+    "@ABCDEFGHIJKLMNO"
+    "PQRSTUVWXYZ[\\]^_"
+    "`abcdefghijklmno"
+    "pqrstuvwxyz{|}~ "
+    "                "
+    "                "
+    " ???????????????"
+    "????????????????" 
+    "????????????????" 
+    "????????????????" 
+    "????????????????" 
+    "????????????????";
+
+void cp_log_dump(int level, char *buf, int len)
+{
+    int rc;
+    int idx;
+    char prn[LINELEN];
+    char lit[CHARS_PER_LINE + 2];
+    char hc[4];
+    short line_done = 1;
+
+    if (!logger || level>logger->level)
+        return;
+
+    rc = len;
+    idx = 0;
+    lit[CHARS_PER_LINE] = '\0';
+
+    while (rc > 0)
+    {
+        if (line_done)
+            snprintf(prn, LINELEN, "%08X: ", idx);
+
+        do
+        {
+            unsigned char c = buf[idx];
+            snprintf(hc, 4, "%02X ", c);
+            strncat(prn, hc, LINELEN);
+
+            lit[idx % CHARS_PER_LINE] = print_char[c];
+        }
+        while (--rc > 0 && (++idx % CHARS_PER_LINE != 0));
+
+        line_done = (idx % CHARS_PER_LINE) == 0;
+        if (line_done)
+        {
+#ifdef DUMPLICATE_OUTPUT
+            printf("%s  %s\n", prn, lit);
+#endif
+            if (logger->fp)
+                fprintf(logger->fp, "%s  %s\n", prn, lit);
+        }
+    }
+
+    if (!line_done)
+    {
+        int ldx = idx % CHARS_PER_LINE;
+        lit[ldx++] = print_char[(int)buf[idx]];
+        lit[ldx] = '\0';
+
+        while ((++idx % CHARS_PER_LINE) != 0)
+            strncat(prn, "   ", LINELEN);
+
+#ifdef DUMPLICATE_OUTPUT
+        printf("%s  %s\n", prn, lit);
+#endif
+        if (logger->fp)
+            fprintf(logger->fp, "%s  %s\n", prn, lit);
+
+    }
+}
diff --git a/program/cp_library/cp_logger.h b/program/cp_library/cp_logger.h
new file mode 100644
index 0000000..471fe90
--- /dev/null
+++ b/program/cp_library/cp_logger.h
@@ -0,0 +1,110 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_logger.h
+ *    Description:  This file is the linux infrastructural logger system library
+ *
+ *        Version:  1.0.0(08/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/08/2012 05:16:56 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_LOG_H
+#define __CP_LOG_H
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <signal.h>
+#include <time.h>
+#include <errno.h>
+
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+#define LOG_VERSION_STR             "1.0.0"
+
+#ifndef FILENAME_LEN
+#define FILENAME_LEN                64
+#endif
+
+#define DEFAULT_LOGFILE             "cp_logger.log"
+#define DBG_LOG_FILE                "console"  /*  Debug mode log file is console */ 
+
+#define LOG_ROLLBACK_SIZE           512    /* Default rollback log size  */
+#define LOG_ROLLBACK_NONE           0      /* Set rollback size to 0 will not rollback  */
+
+#define DEFAULT_TIME_FORMAT         "%Y-%m-%d %H:%M:%S"
+#define MAX_LOG_MESSAGE_LEN         0x1000
+
+//#define DUMPLICATE_OUTPUT  /* Log to file and printf on console  */
+#define LOG_FILE_LINE      /* Log the file and line */
+
+enum
+{
+    LOG_LEVEL_DISB = 0,               /*  Disable "Debug" */
+    LOG_LEVEL_FATAL,                  /*  Debug Level "Fatal" */
+    LOG_LEVEL_ERROR,                  /*  Debug Level "ERROR" */
+    LOG_LEVEL_WARN,                   /*  Debug Level "warnning" */
+    LOG_LEVEL_NRML,                   /*  Debug Level "Normal" */
+    LOG_LEVEL_DEBUG,                  /*  Debug Level "Debug" */
+    LOG_LEVEL_INFO,                   /*  Debug Level "Information" */
+    LOG_LEVEL_TRACE,                  /*  Debug Level "Trace" */
+    LOG_LEVEL_MAX,
+};
+
+#define CP_LOGGER_MALLOC              1<<0
+#define CP_LOGGER_ARGUMENT            0<<0
+
+#define CP_LOGGER_CONSOLE             1<<1
+#define CP_LOGGER_FILE                0<<1
+
+#define CP_LOGGER_LEVEL_OPT           1<<2 /*  The log level is sepcified by the command option */
+typedef struct _cp_logger
+{
+    unsigned char      flag;  /* This logger pointer is malloc() or passed by argument */
+    char               file[FILENAME_LEN];
+    int                level;
+    int                size;
+
+    FILE               *fp;
+} cp_logger;
+
+extern char *log_str[];
+
+extern cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size);
+extern int  cp_log_open(void);
+extern void cp_log_set_time_format(char *time_format);
+extern int  cp_log_reopen(void);
+extern void cp_log_term(void);
+extern void cp_log_raw(const char *fmt, ...);
+extern void cp_log(int level, char *fmt, ...);
+extern void cp_log_line(int level, char *file, int line, char *fmt, ...);
+
+extern void cp_log_dump(int level, char *buf, int len);
+
+#ifdef LOG_FILE_LINE
+#define log_trace(fmt, ...) cp_log_line(LOG_LEVEL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_info(fmt, ...) cp_log_line(LOG_LEVEL_INFO, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_dbg(fmt, ...) cp_log_line(LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_nrml(fmt, ...) cp_log_line(LOG_LEVEL_NRML, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_warn(fmt, ...) cp_log_line(LOG_LEVEL_WARN, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_err(fmt, ...) cp_log_line(LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_fatal(fmt, ...) cp_log_line(LOG_LEVEL_FATAL, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#else
+#define log_trace(fmt, ...) cp_log(LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__)
+#define log_info(fmt, ...) cp_log(LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
+#define log_dbg(fmt, ...) cp_log(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
+#define log_nrml(fmt, ...) cp_log(LOG_LEVEL_NRML, fmt, ##__VA_ARGS__)
+#define log_warn(fmt, ...) cp_log(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
+#define log_err(fmt, ...) cp_log(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
+#define log_fatal(fmt, ...) cp_log(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__)
+#endif
+
+
+#endif /* __CP_LOG_H  */
diff --git a/program/cp_library/cp_network.c b/program/cp_library/cp_network.c
new file mode 100644
index 0000000..2949512
--- /dev/null
+++ b/program/cp_library/cp_network.c
@@ -0,0 +1,358 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_network.c
+ *    Description:  This file is the high level network library API
+ *                 
+ *        Version:  1.0.0(10/31/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/31/2012 11:22:38 AM"
+ *                 
+ ********************************************************************************/
+#include <netinet/in.h>
+#include <net/if.h>
+#include <net/if_arp.h>
+#include <arpa/inet.h>
+
+#include "cp_sock.h"
+#include "cp_fds.h"
+#include "cp_network.h"
+#include "cp_network.h"
+#include "cp_proc.h"
+
+/*  Description: Configure the NIC MAC/IP address
+ *   Input args: $nic: configure for which NIC(Network Interface Card): eth0, eth1 
+ *               $mac: MAC address        $ip: IP address
+ * Return Value: 0: Test OK, <0: Failed
+ */
+int nic_network_config(char *nic, char *mac, char *ip)
+{
+    if(!nic)
+        return -1;
+
+    /*MAC address format: aa:bb:cc:dd:ee:ff */
+    if(mac && 17==strlen(mac))
+    {
+        /* shutdown the ethernet and clear the original IP address  */
+        exec_system_cmd("ifconfig %s down", nic, nic);
+        sleep(1);
+        exec_system_cmd("ifconfig %s hw ether %s up", nic, mac);
+    }
+
+    /* IP address specified and valid  */
+    if(ip && inet_addr(ip))
+    {
+        exec_system_cmd("ifconfig %s down && ifconfig %s 0.0.0.0", nic, nic);
+        sleep(2);
+        exec_system_cmd("ifconfig %s %s up", nic, ip);
+    }
+
+    return 0;
+}
+
+
+int nic_get_ipaddr(char *nic, char *ipaddr)
+{
+    int                   fd;           
+    struct ifreq          ifr;          
+    struct sockaddr_in    *sin;         
+
+    if( !nic || !ipaddr )
+        return -1;
+
+    fd = socket(AF_INET, SOCK_DGRAM, 0);
+    strcpy(ifr.ifr_name, nic);
+
+    if ((ioctl(fd, SIOCGIFADDR, (caddr_t)&ifr, sizeof(struct ifreq))) < 0)
+    {  
+        log_fatal("System call ioctl() with SIOCGIFADDR get %s IP address failure.\n", nic);
+        return -2;
+    }                                   
+
+    sin = (struct sockaddr_in *)&ifr.ifr_addr;
+    strcpy(ipaddr, (const char *)inet_ntoa(sin->sin_addr)); 
+
+    log_dbg("Get %s local IP address: %s\n", nic, ipaddr); 
+
+    return 0;
+}
+
+int nic_get_ptpaddr(char *nic, char *ptpaddr)
+{
+    int                   fd;           
+    struct ifreq          ifr;          
+    struct sockaddr_in    *sin;         
+
+    fd = socket(AF_INET, SOCK_DGRAM, 0);
+    strcpy(ifr.ifr_name, nic);
+
+    if ((ioctl(fd, SIOCGIFDSTADDR, (caddr_t) & ifr, sizeof(struct ifreq))) < 0)
+    {
+        log_fatal("System call ioctl() with SIOCGIFDSTADDR get %s IP address failure.\n", nic);
+        return -1;
+    }
+
+    sin = (struct sockaddr_in *)&ifr.ifr_dstaddr;                                                                                   
+    strcpy(ptpaddr, (const char *)inet_ntoa(sin->sin_addr));
+    log_dbg("Get %s remote IP address: %s\n", nic, ptpaddr);
+
+    return 0;
+}
+
+
+/*  Description: Use ping do network test
+ *   Input args: $from: : use which NIC(Network Interface Card: eth0, eth1) or 
+ *               source IP address do ping test. if it's NULL, use default route
+ *               $ping_ip:  The ping test destination IP address
+ *  Output args: NONE
+ * Return Value: >=0 ping test packet lost percent, <0: failure
+ */
+int network_ping_test(char *from, char *ping_ip)
+{
+    FILE                 *fp;
+    char                 cmd[256];
+    char                 buf[512];
+    int                  lost_percent = 100;
+    unsigned long        tx_packets = 0;
+    unsigned long        rx_packets = 0;
+
+    memset(cmd, 0, sizeof(cmd));
+    if(from)
+    {
+        snprintf(cmd, sizeof(cmd), "ping -W1 -c5 -s4 %s -I %s", ping_ip, from);
+    }
+    else
+    {
+        snprintf(cmd, sizeof(cmd), "ping -W1 -c5 -s4 %s", ping_ip);
+    }
+
+    if (NULL == (fp = popen(cmd, "r")))
+    {
+        return -2;
+    }
+
+    while (NULL != fgets(buf, sizeof(buf), fp))
+    {
+        if (strstr(buf, "transmitted"))
+        {
+            split_string_to_value(buf, "%l,%l,%d", &tx_packets, &rx_packets, &lost_percent);
+            break;
+        }
+    }
+
+    pclose(fp);
+    return lost_percent;
+}
+
+
+int cp_sock_accept_regist(CP_SOCK *serv_sock)
+{
+    CP_SOCK                *new_sock = NULL;
+    int                    rv = 0;
+
+    if(!serv_sock)
+    {
+        log_err("Invalude input arguments\n");
+        return -1;
+    }
+
+    log_dbg("Accept and regist new client from server [%d] on [%s:%d] now\n", 
+            serv_sock->fd, serv_sock->laddr, serv_sock->lport);
+
+    if(serv_sock->accept_cnt >= serv_sock->max_client)
+    {
+        log_err("No more client resource aviable on server socket [%d]\n", serv_sock->fd);
+        goto exit_out;
+    }
+
+    if( !(new_sock=cp_sock_init(NULL, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) )
+    {
+        log_err("Create a new socket contex for accept new client failed.\n");
+        goto exit_out;
+    }
+
+    new_sock->serv_sock = serv_sock;
+    new_sock->fds = serv_sock->fds;
+    new_sock->privt = serv_sock->privt;
+    new_sock->cbfunc = serv_sock->client_func; 
+    new_sock->mode = CP_SOCK_MODE_ACCEPT;
+
+    /* add accept new client into the socket registry list */
+    if( cp_fds_add_sock_registry(new_sock) )
+    {
+        rv = -2;
+        goto term_sock;
+    }
+
+    /* accept the new client from server socket */
+    if( cp_sock_accept(serv_sock, new_sock) )
+    {
+        rv = -3;
+        goto  del_regist;
+    }
+
+    if( cp_add_epoll_event(new_sock) )
+    {
+        rv =  -4;
+        goto del_regist;
+    }
+    
+    log_dbg("Accept and regist new client from server [%d] on [%s:%d] ok\n", 
+            serv_sock->fd, serv_sock->laddr, serv_sock->lport);
+
+    return 0;
+
+del_regist:
+    cp_fds_del_sock_registry(new_sock);
+
+term_sock:
+    if(new_sock) 
+        cp_sock_term_clear(new_sock);
+
+exit_out:
+    log_err("Accept and regist new client from server [%d] on [%s:%d] failed\n", 
+            serv_sock->fd, serv_sock->laddr, serv_sock->lport);
+
+    cp_fds_del_sock_task(serv_sock);
+    return rv;
+}
+
+CP_SOCK *cp_sock_connect_regist(CP_FDS *fds, CP_SOCK *sock, char *raddr, int rport, int lport, CP_SOCK_EVENT_CALLBACK service_route)
+{
+    if(!fds || !raddr || rport<0)
+    {
+        log_err("Invalude input arguments\n");
+        goto exit_out;
+    }
+
+    if( !sock && !(sock=cp_sock_init(sock, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) )
+    { 
+        goto exit_out;
+    }
+
+    if( SOCK_STAT_CONNECTED == sock->status )
+        return sock; /* already ok now  */
+
+    if( !(sock->flag&FLAG_SOCK_REGISTRY) ) 
+    {   
+        sock->fds = fds;
+        sock->cbfunc = service_route;
+        sock->mode = CP_SOCK_MODE_CONNECT;
+        strncpy(sock->laddr, "0.0.0.0", sizeof(sock->laddr));
+        log_dbg("Connect and regist socket to remote [%s:%d] now\n", raddr, rport);
+
+        if( cp_fds_add_sock_registry( sock) )
+            goto term_sock; /* regist to the list failed */
+    }   
+
+    if ( cp_sock_connect(sock, raddr, rport, lport) )
+    {
+        log_dbg("socket [%d] connect failed, start to remove registry it now.\n", sock->fd);
+        goto del_regist;
+    }
+    else
+    {
+        if( cp_add_epoll_event(sock) )
+            goto del_regist;
+    }
+
+    return sock;
+
+del_regist:
+    cp_fds_del_sock_registry(sock);
+
+term_sock:
+    cp_fds_del_sock_task(sock);
+    if(sock)
+        cp_sock_term(sock); 
+
+exit_out:
+    log_err("Connect and regist new socket to remote server [%s:%d] failed\n", raddr, rport);
+    return NULL;
+}
+
+CP_SOCK *cp_sock_server_regist(CP_FDS *fds, char *addr, int port, int max_client, CP_SOCK_EVENT_CALLBACK service_route, void *data)
+{
+    int  rv = 0;
+
+    CP_SOCK   *sock = NULL;
+
+    log_dbg("Regist socket server listen on [%s:%d] now\n", addr?addr:"local", port);
+
+    if(!fds || port < 0)   
+    {
+        rv = -1;
+        log_err("Invalude input arguments\n");
+        goto exit_out;
+    }
+
+    if( !(sock=cp_sock_init(NULL, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) )
+    {
+        rv = -2;
+        goto exit_out;
+    }
+
+    INIT_LIST_HEAD(&sock->accept_list);
+    sock->fds = fds;
+    sock->cbfunc = cp_sock_accept_regist;
+    sock->client_func = service_route;
+    sock->privt = data;
+    sock->mode = CP_SOCK_MODE_LISTEN;
+
+    if( cp_fds_add_sock_registry(sock) )
+    {
+        rv = -3;
+        goto term_sock;
+    }
+
+    /* If specified maximum clients <=0, then use the default one */
+    sock->max_client = max_client<=0 ? CP_DEF_MAX_CLIENTS : max_client;
+
+    /*  If specified maximum clients larger than FDS monitor maxevents, then use the default one */
+    sock->max_client = max_client<fds->max_event ? sock->max_client : CP_DEF_MAX_CLIENTS;
+
+    if( cp_sock_listen(sock, addr, port, sock->max_client) )
+    {
+        rv = -4;
+        goto del_regist;
+    }
+
+    /* Add server socket FD to the epoll monitor list */
+    if( cp_add_epoll_event(sock) )
+    {
+        rv = -5;
+        goto del_regist;
+    }
+
+    log_nrml("Registe socket[%d] server listen on [%s:%d] ok.\n", sock->fd, sock->laddr, sock->lport);
+    return sock;
+
+del_regist:
+    cp_fds_del_sock_registry(sock);
+
+term_sock:
+    cp_fds_del_sock_task(sock);
+    if(sock)
+        cp_sock_term_clear(sock);
+
+exit_out:
+    log_err("Registe socket server listen on [%s:%d] failed.\n", addr, port);
+    return NULL;
+}
+
+void cp_sock_term_all_service(CP_FDS *fds)
+{
+    if(!fds)
+        return;
+
+    log_dbg("Terminate all the service now\n");
+
+    cp_sock_term_all_task(fds);
+    cp_sock_term_all_server(fds);
+    cp_sock_term_all_client(fds);
+
+    cp_fds_term(fds);
+    log_warn("Terminate all the service ok\n");
+}
+
diff --git a/program/cp_library/cp_network.h b/program/cp_library/cp_network.h
new file mode 100644
index 0000000..7ea258d
--- /dev/null
+++ b/program/cp_library/cp_network.h
@@ -0,0 +1,37 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_network.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(10/31/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/31/2012 11:24:06 AM"
+ *                 
+ ********************************************************************************/
+#ifndef __CP_NETWORK_H
+#define __CP_NETWORK_H
+
+#include "cp_fds.h"
+#include "cp_sock.h"
+
+#define CP_DEF_MAX_CLIENTS           1024
+#define CP_DEF_TIMEOUT               10
+
+extern int nic_network_config(char *nic, char *mac, char *ip);
+extern int nic_get_ipaddr(char *nic, char *ipaddr);
+extern int nic_get_ptpaddr(char *nic, char *ptpaddr);
+extern int network_ping_test(char *from, char *ping_ip);
+
+extern int cp_sock_accept_regist(CP_SOCK *serv_sock);
+
+extern CP_SOCK *cp_sock_connect_regist(CP_FDS *fds, CP_SOCK *sock, char *raddr, int rport, int lport, CP_SOCK_EVENT_CALLBACK service_route);
+
+extern CP_SOCK *cp_sock_server_regist(CP_FDS *fds, char *addr, int port, int max_client, CP_SOCK_EVENT_CALLBACK service_route, void *data);
+
+extern void cp_sock_term_all_service(CP_FDS *fds);
+#define cp_sock_term_all_service_clear(fds) {cp_sock_term_all_service(fds); fds=NULL;}
+
+#endif
+
diff --git a/program/cp_library/cp_ppp.c b/program/cp_library/cp_ppp.c
new file mode 100644
index 0000000..78750eb
--- /dev/null
+++ b/program/cp_library/cp_ppp.c
@@ -0,0 +1,552 @@
+/******************************************************************************** 
+ *      Copyright:  (C) guowenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  ppp.c
+ *    Description:  This file is the ppp thread file,used to do PPP dial up
+ *
+ *        Version:  1.0.0(02/02/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/02/2012 11:33:33 AM"
+ *                 
+ ********************************************************************************/
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#include <net/if.h>
+#include <net/if_arp.h>
+#include <arpa/inet.h>
+#include "cp_ppp.h"
+#include "cp_string.h"
+#include "cp_iniparser.h"
+#include "cp_network.h"
+//#include "gsmd.h"
+
+/*
+ * Description: Check PPP10 device exist or not, and set the PPP context status
+ *
+ *
+ * Return Value: 0: PPP10 device exist    -1:PPP10 device not exist
+ *
+ */
+int check_ppp_interface(char *ppp_dev)
+{
+    int           fd = -1;
+    int           retval = -1;
+    char          buf[512];
+
+    if ((fd = open("/proc/net/dev", O_RDONLY, 0666)) < 0)
+    {
+        return -1;      /* System error, take as PPP10 device not exist too */
+    }
+
+    while (read(fd, buf, sizeof(buf)) > 0)
+    {
+        if (NULL != strstr(buf, ppp_dev))
+        {
+            retval = 0;
+            break;
+        }
+    }
+
+    close(fd);
+    return retval;
+}
+
+int check_ppp_ipaddr(PPPD_INFO  *pppd_info, char *ppp_dev)
+{
+    int                   fd;
+    struct ifreq          ifr;
+    struct sockaddr_in    *sin;  
+
+    if(check_ppp_interface(ppp_dev))
+        return -2;
+
+    fd = socket(AF_INET, SOCK_DGRAM, 0);
+    strcpy(ifr.ifr_name, ppp_dev);
+
+    if ((ioctl(fd, SIOCGIFADDR, (caddr_t) & ifr, sizeof(struct ifreq))) < 0)
+    {
+        log_fatal("System call ioctl() with SIOCGIFADDR failure.\n", ppp_dev);
+        return -1;
+    }
+
+    sin = (struct sockaddr_in *)&ifr.ifr_addr;
+    strcpy(pppd_info->netaddr, (const char *)inet_ntoa(sin->sin_addr));
+    log_nrml("Get %s local IP address: %s\n", ppp_dev, pppd_info->netaddr);
+
+    if ((ioctl(fd, SIOCGIFDSTADDR, (caddr_t) & ifr, sizeof(struct ifreq))) < 0)
+    {
+        log_fatal("System call ioctl() with SIOCGIFDSTADDR failure.\n", ppp_dev);
+        return -1;
+    }
+    sin = (struct sockaddr_in *)&ifr.ifr_dstaddr;
+    strcpy(pppd_info->ptpaddr, (const char *)inet_ntoa(sin->sin_addr));
+    log_nrml("Get %s remote IP address: %s\n", ppp_dev, pppd_info->ptpaddr);
+
+    return 0;
+}
+
+int check_ppp_stat(PPP_STAT  *ppp_stat, char *ppp_dev)
+{
+    int                 retval;
+    FILE                *fp;
+    char                *ptr;
+    char                buf[512];
+
+    if( NULL == (fp=fopen(PPP_PROC_NET_DEV, "r")) ) 
+    {
+        log_err("Can not open %s.\n", PPP_PROC_NET_DEV);
+        return -1;
+    }
+
+    fgets(buf, sizeof(buf), fp);
+    fgets(buf, sizeof(buf), fp);
+
+    while (fgets(buf, sizeof(buf), fp))
+    {
+        ptr=strstr(buf, ppp_dev);
+        if(NULL == ptr)
+        {
+            log_err("Can not find %s interface statistic data in %s\n", ppp_dev, PPP_PROC_NET_DEV);
+            retval = -1;
+            break;
+        }
+        else
+        {
+             ptr = strchr(ptr, ':');
+             ptr++;
+             sscanf(ptr, "%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu",
+                     &(ppp_stat->ullRx_Bytes),
+                     &(ppp_stat->ullRx_Packets),
+                     &(ppp_stat->ulRx_Errors),
+                     &(ppp_stat->ulRx_Dropped),
+                     &(ppp_stat->ulRx_FIFO_Errors),
+                     &(ppp_stat->ulRx_Frame_Errors),
+                     &(ppp_stat->ulRx_Compressed),
+                     &(ppp_stat->ulRx_Multicast),
+                     &(ppp_stat->ullTx_Bytes),
+                     &(ppp_stat->ullTx_Packets),
+                     &(ppp_stat->ulTx_Errors),
+                     &(ppp_stat->ulTx_Dropped),
+                     &(ppp_stat->ulTx_FIFO_Errors),
+                     &(ppp_stat->ulCollisions),
+                     &(ppp_stat->ulTx_Carrier_Errors),
+                     &(ppp_stat->ulTx_Compressed)
+                   );
+             retval = 0;
+             break;
+        }
+    }
+
+    if(0 == retval )
+        log_dbg("Check PPP network traffic: Tx %llu bytes, Rx %llu bytes.\n", ppp_stat->ullTx_Bytes, ppp_stat->ullRx_Bytes);
+    fclose(fp);
+    return retval;
+}
+
+int kill_pppd_process(COM_PORT *comport)
+{
+    int           pid = -1;
+
+    while( (pid=check_pppd_pid(comport->dev_name)) > 0) 
+    {
+        log_nrml("Terminate pppd process [pid=%d]\n", pid);
+        kill(pid, SIGTERM); 
+        sleep(1); /* Wait pppd process exit */
+    }
+
+    return 0;
+}
+
+int stop_ppp_connect(PPP_CTX *ppp_ctx)
+{
+    log_warn("Stop PPP connection now.\n");
+
+    if(check_ppp_interface(ppp_ctx->dev))
+        return 0;
+
+    kill_pppd_process(ppp_ctx->comport);
+
+    if(ppp_ctx->comport)
+    {
+        free_gsm_dataport("stop_ppp_connect()", ppp_ctx->module, &(ppp_ctx->comport));
+    }
+    return 0;
+}
+
+int get_apn_conf(char *ini_name, char *ini_key, APN_ACCOUNT *apn, unsigned char type)
+{
+    dictionary       *ini ;
+    char             tmp[64];
+    char             *str;
+            
+    if(NULL==ini_name || NULL==ini_key || NULL==apn)
+    {       
+        return -1;
+    }       
+        
+    ini = iniparser_load(ini_name);
+    if (ini==NULL)
+    {   
+        log_err("cannot load default APN configure file: %s\n", ini_name);
+        return -2 ;
+    }       
+    log_dbg("Parser default APN configure file %s\n", ini_name);
+            
+    /* Parser APN configure */
+    snprintf(tmp, 64, "%s:%s", ini_key, APN_3G==type?"3g_apn":"apn");
+    if( !(str=iniparser_getstring(ini, tmp, NULL)) )
+    {       
+        log_err("cannot find APN setting for SIM [%s] in file: %s\n", ini_key, ini_name);
+        memset(apn, 0, sizeof(APN_ACCOUNT));
+        return -1;
+    }           
+    else        
+    {       
+        strncpy(apn->apn, str, APN_LEN);
+    }
+    
+    /* Paser APN username information  */
+    snprintf(tmp, 64, "%s:%s", ini_key, APN_3G==type?"3g_uid":"uid");
+    str = iniparser_getstring(ini, tmp, NULL);
+    strncpy(apn->uid, str, UID_LEN);
+
+
+    /* Paser APN password information  */
+    snprintf(tmp, 64, "%s:%s", ini_key, APN_3G==type?"3g_pwd":"pwd");
+    str = iniparser_getstring(ini, tmp, NULL);
+    strncpy(apn->pwd, str, PWD_LEN);
+
+    iniparser_freedict(ini);
+    return 0;
+}
+
+
+int select_apn(PPP_CTX *ppp_ctx, char *key)
+{
+    int                 retval;
+    unsigned char       type = APN_2G;
+
+    log_nrml("GPRS module work on GPRS mode, select APN now.\n"); 
+
+    retval = get_apn_conf(APN_DEF_CONF_FILE, key, &(ppp_ctx->apn), type);
+    if(!retval)
+    {
+        log_err("Get default APN [%s] from %s ok\n", ppp_ctx->apn.apn, APN_DEF_CONF_FILE);
+        return 0;
+    }
+
+    return -1;
+}
+
+#define PPPD_CMD_LEN  512
+int start_ppp_dial_cmd(COM_PORT  *comport, APN_ACCOUNT *apn, char *ppp_dev)
+{
+    char                tmp[64];
+    char                pppd_cmd[PPPD_CMD_LEN];
+    pid_t               pid;
+
+    if( !comport || !comport->is_connted )
+    {
+        log_err("GPRS module data port %s is not opened.\n", comport->dev_name);
+        return -1;
+    }
+
+    if( !apn || strlen(apn->apn)<=0 )
+    {
+        log_err("No valid APN was set.\n");
+        return -1;
+    }
+
+    log_nrml("Start PPP connection with APN \"%s\" now.\n", apn->apn);
+
+    memset(pppd_cmd, 0, PPPD_CMD_LEN);
+    snprintf(pppd_cmd, PPPD_CMD_LEN, "%s -d %s ", PPPD_DIAL_SCRIPTS, comport->dev_name);
+
+    snprintf(tmp, sizeof(tmp), " -a %s ", apn->apn);
+    strncat(pppd_cmd, tmp, PPPD_CMD_LEN);
+
+    if( strlen(apn->uid) > 0 )
+    {
+        snprintf(tmp, sizeof(tmp), " -u %s ", apn->uid);
+        strncat(pppd_cmd, tmp, PPPD_CMD_LEN);
+    }
+    
+    if( strlen(apn->pwd) > 0 )
+    {
+        snprintf(tmp, sizeof(tmp), " -p %s ", apn->pwd); 
+        strncat(pppd_cmd, tmp, PPPD_CMD_LEN);
+    }
+
+    if( strlen(apn->auth) > 0 )
+    {
+        snprintf(tmp, sizeof(tmp), " -v %s ", apn->auth);
+        strncat(pppd_cmd, tmp, PPPD_CMD_LEN);
+    }
+
+    strncat(pppd_cmd, ppp_dev, PPPD_CMD_LEN);
+
+    log_nrml("ppp dial up command: %s\n", pppd_cmd);
+
+    pid = fork();
+    if( 0 == pid ) /* Child process */
+    {
+        system(pppd_cmd); 
+        exit(0);
+    }
+    else if (pid < 0)
+    {
+        log_err("Create new process failure.\n"); 
+        return -1;
+    }
+    else
+    {
+        log_dbg("pppd program already running.\n");
+        micro_second_sleep(1000);  
+    }
+
+    return 0;
+}
+
+int check_pppd_pid(char *find_key)
+{
+    char       buf[10];
+    char       cmd[128];
+    FILE       *fp = NULL;
+    int        pid = -1;
+
+    snprintf(cmd, sizeof(cmd), "ps | grep -v grep | grep pppd | grep %s | awk '{print $1}'", find_key); 
+
+    fp = popen(cmd, "r");
+    if(NULL == fp)
+    {
+        log_fatal("popen() to check the pppd process ID failure.\n");
+        return -1;
+    }
+
+    memset(buf, 0, sizeof(buf));
+    fgets(buf, sizeof(buf), fp);
+
+    pid = atoi(buf); 
+
+    if(pid <= 1)
+    {
+        log_err("Get pppd program running pid failure\n");
+        pid = -1;
+    }
+#if 0
+    else
+    {
+        log_trace("pppd program running pid is [%d]\n", pid);
+    }
+#endif
+
+    pclose(fp);
+    return pid;
+}
+
+void set_ppp_disconnect(PPP_CTX *ppp_ctx)
+{
+    ppp_ctx->status = DISCONNECT; 
+    ppp_ctx->pppd_info.start_time = 0; 
+    
+    memset(&(ppp_ctx->pppd_info), 0, sizeof(PPPD_INFO)); 
+    memset(&(ppp_ctx->ppp_stat), 0, sizeof(PPP_STAT)); 
+    ppp_ctx->network = PPP_STOP;
+}
+
+
+int ppp_context_init(PPP_CTX *ppp_ctx, MODULE_INFO *module)
+{
+    memset(ppp_ctx, 0, sizeof(*ppp_ctx));
+
+    ppp_ctx->thread_id = pthread_self();
+    ppp_ctx->module = module;
+    strncpy(ppp_ctx->dev, PPP_INTERFACE_NAME, sizeof(ppp_ctx->dev));
+    strncpy(ppp_ctx->ping_ip, DEF_PING_DST, sizeof(ppp_ctx->ping_ip));
+    ppp_ctx->ping_interval  = PING_INTERVAL_TIME;
+    set_ppp_disconnect(ppp_ctx);
+
+    log_nrml("Initialize PPP thread context ok\n"); 
+    return 0;
+}
+
+void ppp_context_term(PPP_CTX *ppp_ctx)
+{
+    stop_ppp_connect(ppp_ctx);
+    set_ppp_disconnect(ppp_ctx);
+
+    log_nrml("Terminate PPP thread context ok\n"); 
+}
+
+int start_ppp_connect(PPP_CTX *ppp_ctx)
+{
+    int                 retval;
+    MODULE_INFO         *module = ppp_ctx->module; 
+
+    if( !ppp_ctx->comport ) 
+    {
+        ppp_ctx->comport=alloc_gsm_dataport("start_ppp_connect()", ppp_ctx->module);
+        if(!ppp_ctx->comport)
+            return -1;
+
+        log_dbg("PPP thread alloc GPRS dataport %s=>[fd:%d]\n", ppp_ctx->comport->dev_name, ppp_ctx->comport->fd);
+    }
+
+    
+    switch(ppp_ctx->status)
+    { 
+        case DISCONNECT: /*  Select the APN now */
+            set_ppp_disconnect(ppp_ctx);
+            retval = select_apn(ppp_ctx, module->reg.loc.mcc_mnc);
+            if(!retval)
+            {
+                log_nrml("Select APN successfully, go to next stage.\n");
+                ppp_ctx->fail_cnt = 0; 
+                ppp_ctx->status++;
+            }
+            else
+            {
+                log_warn("Select APN failure, request to reset GPRS module\n");
+                ppp_ctx->fail_cnt ++; 
+                set_module_event(module, REQ_POWER_RESET);
+                break;
+            }
+
+        case SELECTED_APN: /*  Select the APN now */
+            log_warn("Run pppd program to start PPP connection now\n"); 
+            ppp_ctx->network = PPP_CONN;
+            start_ppp_dial_cmd(ppp_ctx->comport, &(ppp_ctx->apn), ppp_ctx->dev);
+            ppp_ctx->status++; 
+            break;
+    } 
+    
+    return 0;
+}
+
+int inspect_network_status(PPP_CTX *ppp_ctx)
+{
+    PPPD_INFO              *pppd_info = &(ppp_ctx->pppd_info);
+    PPP_STAT               *ppp_stat = &(ppp_ctx->ppp_stat);
+    int                    lost_percent;
+    unsigned long long     last_tx_bytes= ppp_stat->ullTx_Bytes;
+    unsigned long long     last_rx_bytes= ppp_stat->ullRx_Bytes;
+
+    if( CONNECTED != ppp_ctx->status)
+    {
+        ppp_ctx->pppd_info.ping_time = 0;
+        memset(ppp_stat, 0, sizeof(PPP_STAT));
+
+        pppd_info->pid = check_pppd_pid(ppp_ctx->comport->dev_name);
+        if(pppd_info->pid <= 0)
+        {
+            /*  pppd can not connect in 30s, then set it to DISCONNECT status */
+            if(time_elapsed(pppd_info->start_time) >= PPPD_DIAL_TIMEOUT)
+            {
+                /* Sleep for 2 seconds, make sure the exit pppd process release the TTY device */
+                micro_second_sleep(2000);
+                log_err("pppd process exit when do ppp dialing, set status to DISCONNECT.\n");
+                set_ppp_disconnect(ppp_ctx);
+            }
+        }
+        else
+        {
+            if(strlen(pppd_info->netaddr) <=0 )
+            {
+                check_ppp_ipaddr(pppd_info, ppp_ctx->dev);
+                log_dbg("pppd running process ID [%d].\n", pppd_info->pid);
+            }
+        }
+    }
+
+    if(  time_elapsed(pppd_info->ping_time) >= ppp_ctx->ping_interval*1000  )
+    {
+        if(ppp_ctx->fail_cnt >= MAX_PPP_FAIL_CNT)
+        {
+            /* Sleep for 2 seconds, make sure the exit pppd process release the TTY device */
+            micro_second_sleep(2000);
+            log_warn("PPP network inspect status failure, set status to DISCONNECT.\n");
+            set_ppp_disconnect(ppp_ctx);
+            return 0;
+        }
+
+        lost_percent = network_ping_test(ppp_ctx->dev, ppp_ctx->ping_ip);
+        ppp_ctx->network = lost_percent<=60 ? PPP_GOOD : PPP_BAD;
+
+        if(lost_percent <= 80)
+        {
+            check_ppp_stat(ppp_stat, ppp_ctx->dev);
+            if(last_tx_bytes==ppp_stat->ullTx_Bytes || last_rx_bytes==ppp_stat->ullRx_Bytes)
+            {
+                log_warn("PPP interface traffic not increased, maybe ppp disconnected?\n");
+                ppp_ctx->fail_cnt++;
+            }
+            else
+            {
+                log_nrml("Set PPP connection status to CONNECTED.\n");
+                set_ppp_disconnect(ppp_ctx);
+                ppp_ctx->fail_cnt=0;
+            }
+        }
+        else
+        {
+            ppp_ctx->fail_cnt++;
+        }
+        ppp_ctx->pppd_info.ping_time = time_now();
+    }
+
+    return 0;
+}
+
+
+void *ppp_thread_workbody(void *thread_arg)
+{
+    PPP_CTX             ppp_ctx; 
+
+    MODULE_INFO         *module;
+
+    module = (MODULE_INFO *)thread_arg;
+    ppp_context_init(&ppp_ctx, module);
+
+    log_nrml("GPRS PPP thread start running\n");
+
+    while( !g_cp_signal.stop )
+    {
+        if(ALL_READY != module->ready)
+        {
+            if(ppp_ctx.status>=CONNECTING)
+            {
+                log_nrml("Stop exist PPP connection and free TTY data port\n");
+                stop_ppp_connect(&ppp_ctx);
+            }
+
+            /*  GPRS not ready, sleep for 200ms and check again */
+            micro_second_sleep(200);
+            continue;
+        }
+        else
+        {
+            if(ppp_ctx.status>=CONNECTING)
+            {
+                inspect_network_status(&ppp_ctx);
+            }
+            else
+            {
+                start_ppp_connect(&ppp_ctx);
+            }
+        }
+
+        sleep(1);
+    }
+
+    ppp_context_term(&ppp_ctx);
+    pthread_exit(0);
+    return NULL;
+}
+
+int start_thread_ppp(MODULE_INFO *module)
+{
+    pthread_t           tid;
+
+    return thread_start(&tid, ppp_thread_workbody, module);
+}
diff --git a/program/cp_library/cp_ppp.h b/program/cp_library/cp_ppp.h
new file mode 100644
index 0000000..57edbb2
--- /dev/null
+++ b/program/cp_library/cp_ppp.h
@@ -0,0 +1,138 @@
+/********************************************************************************
+ *      Copyright:  (C) guowenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  ppp.h
+ *    Description:  This head file is for PPP dial up thread.
+ *
+ *        Version:  1.0.0(02/17/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/17/2012 11:11:54 AM"
+ *                 
+ ********************************************************************************/
+#ifndef __PPP_H
+#define __PPP_H
+
+#include <netinet/in.h>
+
+#include "cp_comport.h"
+#include "cp_proc.h"
+#include "cp_gprs.h"
+
+#define PPPD_DIAL_TIMEOUT             20000  /* 20 seconds */
+#define PING_INTERVAL_TIME            10000  /* 10 seconds */
+
+#define DEFAULT_PING_INTERVAL         30
+#define APN_LEN                       128
+#define UID_LEN                       64
+#define PWD_LEN                       64
+    
+#define APN_3G                        3
+#define APN_2G                        2
+    
+#define PPPD_DIAL_SCRIPTS             "/apps/tools/ifup-ppp"
+#define PPP_INTERFACE_NAME            "ppp10"
+#define PPP_PROC_NET_DEV              "/proc/net/dev"
+
+#define DEF_PING_DST                  "4.2.2.2"
+
+#define APN_DEF_CONF_FILE             "/apps/etc/ppp/default_apn.conf"
+
+enum
+{
+    DISCONNECT = 0,
+    SELECTED_APN,
+    CONNECTING,
+    CONNECTED,
+};
+
+
+typedef struct __APN_ACCOUNT
+{   
+    char            apn[APN_LEN];
+    char            uid[UID_LEN];    
+    char            pwd[PWD_LEN];
+    char            auth[10];  /*  PAP or CHAP */
+} APN_ACCOUNT;  
+
+typedef struct __PPPD_INFO
+{
+    char            netaddr[INET_ADDRSTRLEN];
+    char            ptpaddr[INET_ADDRSTRLEN];
+    unsigned long   start_time;
+    unsigned long   ping_time;
+    pid_t           pid;
+} PPPD_INFO;
+
+typedef struct __PPP_STAT
+{
+    unsigned long long ullRx_Packets;   // total packets received 
+    unsigned long long ullTx_Packets;   // total packets transmitted
+    unsigned long long ullRx_Bytes; // total bytes received   
+    unsigned long long ullTx_Bytes; // total bytes transmitted     
+
+    unsigned long ulRx_Errors;  // bad packets received   
+    unsigned long ulTx_Errors;  // packet transmit problems
+    unsigned long ulRx_Dropped; // no space in linux buffers
+    unsigned long ulTx_Dropped; // no space available in linux
+    unsigned long ulRx_Multicast;   // multicast packets received   
+    unsigned long ulRx_Compressed;
+    unsigned long ulTx_Compressed;
+    unsigned long ulCollisions;
+
+    /* detailed rx_errors */
+    unsigned long ulRx_Length_Errors;
+    unsigned long ulRx_Over_Errors; // receiver ring buff overflow
+    unsigned long ulRx_CRC_Errors;  // recved pkt with crc error
+    unsigned long ulRx_Frame_Errors;    // recv'd frame alignment error
+    unsigned long ulRx_FIFO_Errors; // recv'r fifo overrun    
+    unsigned long ulRx_Missed_Errors;   // receiver missed packet  
+
+    /* detailed tx_errors */
+    unsigned long ulTx_Aborted_Errors;
+    unsigned long ulTx_Carrier_Errors;
+    unsigned long ulTx_FIFO_Errors;
+    unsigned long ulTx_Heartbeat_Errors;
+    unsigned long ulTx_Window_Errors;
+} PPP_STAT;
+
+#define MAX_PPP_FAIL_CNT             3
+
+#define PPP_STOP                     0  /* PPP not work, but signal good */
+#define SIG_WEAK                     1  /* PPP not work and signal is very weak */
+#define PPP_CONN                     2  /* PPP is connecting  */
+#define PPP_BAD                      3  /* PPP is connected, but network/signal not good */
+#define PPP_GOOD                     4  /* PPP is connected and network/signal good */
+typedef struct __PPP_CTX
+{
+    unsigned char      enable;       /* Enable PPP thread running or not, RFU */
+    unsigned char      status;       /* Current PPP connection status */
+    unsigned char      network;      /* PPP network status: PPP_FAIL,PPP_BAD,PPP_GOOD */
+    char               dev[10];      /* PPP dial up device name, such as PPP10  */
+
+    pthread_t          thread_id;    /* PPP Thread ID, RFU */
+
+    PPPD_INFO          pppd_info;    /* pppd process information */
+    PPP_STAT           ppp_stat;     /* PPP network statistic */
+    unsigned char      fail_cnt;     /* PPP failure count */
+
+    APN_ACCOUNT        apn;          /* PPP dial up APN */
+
+    char               ping_ip[INET_ADDRSTRLEN];
+    long               ping_interval;
+
+    COM_PORT           *comport;
+    MODULE_INFO        *module;
+} PPP_CTX;
+
+int get_apn_conf(char *ini_name, char *ini_key, APN_ACCOUNT *apn, unsigned char type);
+int check_pppd_pid(char *find_key);
+int check_ppp_interface(char *ppp_inf);
+int start_ppp_dial_cmd(COM_PORT  *comport, APN_ACCOUNT *apn, char *ppp_inf);
+int check_ppp_ipaddr(PPPD_INFO  *pppd_info, char *ppp_inf);
+int check_ppp_stat(PPP_STAT  *ppp_stat, char *ppp_inf);
+int stop_ppp_connect(PPP_CTX *ppp_ctx);
+
+int start_thread_ppp(MODULE_INFO *module);
+
+#endif /*  End of __PPP_H */ 
diff --git a/program/cp_library/cp_proc.c b/program/cp_library/cp_proc.c
new file mode 100644
index 0000000..47eb3d6
--- /dev/null
+++ b/program/cp_library/cp_proc.c
@@ -0,0 +1,341 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_proc.c
+ *    Description:  This file is the process API
+ *                 
+ *        Version:  1.0.0(11/06/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/06/2012 09:19:02 PM"
+ *                 
+ ********************************************************************************/ 
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <libgen.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "cp_proc.h"
+#include "cp_logger.h"
+
+CP_PROC_SIG     g_cp_signal={0};
+
+void cp_proc_sighandler(int sig)
+{
+    switch(sig)
+    {
+        case SIGINT:
+            log_warn("SIGINT - stopping\n");
+            g_cp_signal.stop = 1;
+            break;
+
+        case SIGTERM:
+            //log_warn("SIGTERM - stopping\n");
+            g_cp_signal.stop = 1;
+            break;
+#if 0
+        case SIGSEGV:
+            log_err("SIGSEGV - stopping\n");
+            if(g_cp_signal.stop)
+                exit(0);
+
+            g_cp_signal.stop = 1;
+            break;
+#endif
+
+        case SIGPIPE:
+            log_warn("SIGPIPE - warnning\n");
+            g_cp_signal.stop = 1;
+            break;
+    
+        default:
+            break;
+    }
+}
+
+
+void cp_install_proc_signal(void)
+{
+    struct sigaction sigact, sigign;
+
+    log_nrml("Install default signal handler.\n");
+
+    /*  Initialize the catch signal structure. */
+    sigemptyset(&sigact.sa_mask);
+    sigact.sa_flags = 0;
+    sigact.sa_handler = cp_proc_sighandler;
+
+    /*  Setup the ignore signal. */
+    sigemptyset(&sigign.sa_mask);
+    sigign.sa_flags = 0;
+    sigign.sa_handler = SIG_IGN;
+
+    sigaction(SIGTERM, &sigact, 0); /*  catch terminate signal "kill" command */
+    sigaction(SIGINT,  &sigact, 0); /*  catch interrupt signal CTRL+C */
+    //sigaction(SIGSEGV, &sigact, 0); /*  catch segmentation faults  */
+    sigaction(SIGPIPE, &sigact, 0); /*  catch broken pipe */
+#if 0
+    sigaction(SIGCHLD, &sigact, 0); /*  catch child process return */
+    sigaction(SIGUSR2, &sigact, 0); /*  catch USER signal */ 
+#endif
+}
+
+
+/* ****************************************************************************
+ * FunctionName: daemonize
+ * Description : Set the programe runs as daemon in background
+ * Inputs      : nodir: DON'T change the work directory to / :  1:NoChange 0:Change
+ *               noclose: close the opened file descrtipion or not 1:Noclose 0:Close
+ * Output      : NONE
+ * Return      : NONE
+ * *****************************************************************************/
+void daemonize(int nochdir, int noclose)
+{ 
+    int retval, fd; 
+    int i; 
+    
+    /*  already a daemon */ 
+    if (1 == getppid()) 
+        return; 
+    
+    /*  fork error */
+    retval = fork(); 
+    if (retval < 0) exit(1); 
+    
+    /*  parent process exit */
+    if (retval > 0)
+        exit(0); 
+    
+    /*  obtain a new process session group */
+    setsid(); 
+    
+    if (!noclose)
+    {
+        /*  close all descriptors */
+        for (i = getdtablesize(); i >= 0; --i)
+        {
+            //if (i != g_logPtr->fd)
+                close(i);
+        } 
+
+        /*  Redirect Standard input [0] to /dev/null */
+        fd = open("/dev/null", O_RDWR); 
+
+        /* Redirect Standard output [1] to /dev/null */
+        dup(fd);  
+
+        /* Redirect Standard error [2] to /dev/null */
+        dup(fd);  
+    } 
+    
+    umask(0); 
+    
+    if (!nochdir)
+        chdir("/"); 
+    
+    return;
+}
+
+/* ****************************************************************************
+ * FunctionName: record_daemon_pid
+ * Description : Record the running daemon program PID to the file "pid_file"
+ * Inputs      : pid_file:The record PID file path
+ * Output      : NONE
+ * Return      : 0: Record successfully  Else: Failure
+ * *****************************************************************************/
+int record_daemon_pid(const char *pid_file)
+{ 
+    struct stat fStatBuf; 
+    int fd = -1; 
+    int mode = S_IROTH | S_IXOTH | S_IRGRP | S_IXGRP | S_IRWXU;
+    char ipc_dir[64] = { 0 }; 
+    
+    strncpy(ipc_dir, pid_file, 64); 
+
+    /* dirname() will modify ipc_dir and save the result */ 
+    dirname(ipc_dir);  
+    
+    /* If folder pid_file PATH doesnot exist, then we will create it" */
+    if (stat(ipc_dir, &fStatBuf) < 0) 
+    { 
+        if (mkdir(ipc_dir, mode) < 0) 
+        { 
+            log_fatal("cannot create %s: %s\n", ipc_dir, strerror(errno)); 
+            return -1; 
+        } 
+        
+        (void)chmod(ipc_dir, mode); 
+    } 
+    
+    /*  Create the process running PID file */ 
+    mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+    if ((fd = open(pid_file, O_RDWR | O_CREAT | O_TRUNC, mode)) >= 0)
+    {
+        char pid[PID_ASCII_SIZE]; 
+        snprintf(pid, sizeof(pid), "%u\n", (unsigned)getpid()); 
+        write(fd, pid, strlen(pid)); 
+        close(fd); 
+
+        log_dbg("Record PID<%u> to file %s.\n", getpid(), pid_file);
+    } 
+    else 
+    {
+        log_fatal("cannot create %s: %s\n", pid_file, strerror(errno));
+        return -1;
+    }
+
+    return 0;
+}
+
+/* ****************************************************************************
+ * FunctionName: get_daemon_pid
+ * Description : Get the daemon process PID from the PID record file "pid_file"
+ * Inputs      : pid_file: the PID record file
+ * Output      : NONE
+ * Return      : pid_t: The daemon process PID number
+ * *****************************************************************************/
+pid_t get_daemon_pid(const char *pid_file)
+{ 
+    FILE *f; 
+    pid_t pid; 
+    
+    if ((f = fopen(pid_file, "rb")) != NULL)
+    { 
+        char pid_ascii[PID_ASCII_SIZE]; 
+        (void)fgets(pid_ascii, PID_ASCII_SIZE, f); 
+        (void)fclose(f); 
+        pid = atoi(pid_ascii); 
+    } 
+    else
+    {
+        log_fatal("Can't open PID record file %s: %s\n", pid_file, strerror(errno));
+        return -1;
+    } 
+    return pid;
+}     
+
+/* ****************************************************************************
+ * FunctionName: check_daemon_running
+ * Description : Check the daemon program already running or not
+ * Inputs      : pid_file: The record running daemon program PID
+ * Output      : NONE
+ * Return      : 1: The daemon program alread running   0: Not running
+ * *****************************************************************************/
+int check_daemon_running(const char *pid_file)
+{
+    int retVal = -1; 
+    struct stat fStatBuf;
+
+    retVal = stat(pid_file, &fStatBuf); 
+    if (0 == retVal) 
+    { 
+        pid_t pid = -1; 
+        printf("PID record file \"%s\" exist.\n", pid_file);
+
+        pid = get_daemon_pid(pid_file);
+        if (pid > 0)  /*  Process pid exist */
+        { 
+            if ((retVal = kill(pid, 0)) == 0) 
+            { 
+                printf("Program with PID[%d] seems running.\n", pid); 
+                return 1; 
+            } 
+            else   /* Send signal to the old process get no reply. */ 
+            { 
+                printf("Program with PID[%d] seems exit.\n", pid); 
+                remove(pid_file); 
+                return 0; 
+            } 
+        } 
+        else if (0 == pid) 
+        { 
+            printf("Can not read program PID form record file.\n"); 
+            remove(pid_file); 
+            return 0; 
+        } 
+        else  /* Read pid from file "pid_file" failure */
+        { 
+            printf("Read record file \"%s\" failure, maybe program still running.\n", pid_file); 
+            return 1; 
+        } 
+    } 
+    
+    return 0;
+}
+
+/* ****************************************************************************
+ * FunctionName: set_daemon_running
+ * Description : Set the programe running as daemon if it's not running and record 
+ *               its PID to the pid_file.
+ * Inputs      : pid_file: The record running daemon program PID
+ * Output      : NONE
+ * Return      : 0: Successfully. 1: Failure
+ * *****************************************************************************/
+int set_daemon_running(const char *pid_file)
+{ 
+    daemonize(0, 1); 
+    log_nrml("Program running as daemon [PID:%d].\n", getpid()); 
+    
+    if (record_daemon_pid(pid_file) < 0) 
+    { 
+        log_fatal("Record PID to file \"%s\" failure.\n", pid_file); 
+        return -2;
+    }
+
+    return 0;
+}
+
+
+int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg)
+{
+    int        retval = 0;
+
+    pthread_attr_t thread_attr; 
+
+    /* Initialize the thread  attribute */
+    retval = pthread_attr_init(&thread_attr); 
+    if(retval)
+        return -1;
+
+    /* Set the stack size of the thread */
+    retval = pthread_attr_setstacksize(&thread_attr, 120 * 1024); 
+    if(retval)
+        goto CleanUp;
+    
+    /* Set thread to detached state:Don`t need pthread_join */
+    retval = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); 
+    if(retval)
+        goto CleanUp;
+    
+    /* Create the thread */
+    retval = pthread_create(thread_id, &thread_attr, thread_workbody, thread_arg);
+    if(retval)
+        goto CleanUp;
+    
+CleanUp:
+    /* Destroy the  attributes  of  thread */
+    pthread_attr_destroy(&thread_attr); 
+    return retval;
+}
+
+
+void exec_system_cmd(const char *format, ...)
+{
+    char                cmd[256];
+    va_list             args;
+    int                 done; 
+    
+    memset(cmd, 0, sizeof(cmd)); 
+    
+    va_start(args, format); 
+    done = vsnprintf(cmd, sizeof(cmd), format, args);
+    va_end(args); 
+    
+    system(cmd);
+}
+
+
diff --git a/program/cp_library/cp_proc.h b/program/cp_library/cp_proc.h
new file mode 100644
index 0000000..f79abe8
--- /dev/null
+++ b/program/cp_library/cp_proc.h
@@ -0,0 +1,42 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_proc.h
+ *    Description:  This head file is for Linux process API
+ *
+ *        Version:  1.0.0(11/06/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/06/2012 09:21:33 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_PROC_H
+#define __CP_PROC_H
+
+#include <signal.h>
+
+#define PID_ASCII_SIZE  11
+
+typedef struct __CP_PROC_SIG
+{
+    int       signal;
+    unsigned  stop;     /* 0: Not term  1: Stop  */
+}  CP_PROC_SIG;
+
+typedef void *(THREAD_BODY) (void *thread_arg);
+
+extern CP_PROC_SIG     g_cp_signal;
+extern void cp_install_proc_signal(void);
+
+extern void daemonize(int nochdir, int noclose);
+extern int record_daemon_pid(const char *pid_file);
+extern pid_t get_daemon_pid(const char *pid_file);
+extern int check_daemon_running(const char *pid_file);
+extern int set_daemon_running(const char *pid_file);
+
+extern void exec_system_cmd(const char *format, ...);
+
+extern int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg);
+
+#endif
diff --git a/program/cp_library/cp_queue.c b/program/cp_library/cp_queue.c
new file mode 100644
index 0000000..6e1cf79
--- /dev/null
+++ b/program/cp_library/cp_queue.c
@@ -0,0 +1,155 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_queue.c
+ *    Description:  This file is the queue implement based on link list.
+ *                 
+ *        Version:  1.0.0(11/12/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/12/2012 01:25:26 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_queue.h"
+#include "cp_common.h"
+
+CP_QUEUE *cp_queue_init(CP_QUEUE *queue, int size)
+{
+    if(!queue)
+    {
+        queue = t_malloc(sizeof(*queue));
+    }
+    memset(queue, 0, sizeof(*queue));
+
+    queue->size = size;
+    queue->items = 0;
+    queue->rear = queue->front = NULL;
+
+    return queue;
+}
+
+void *cp_enqueue(CP_QUEUE *queue, void *data)
+{
+    CP_QNODE         *node;
+
+    if(!queue || cp_queue_is_full(queue))
+    {
+        return NULL;
+    }
+
+    node = t_malloc(sizeof(*node));
+    if(NULL == node)
+    {
+        return NULL;
+    }
+
+    node->item = data;
+    node->next = NULL;
+
+    if(cp_queue_is_empty(queue))
+    {
+        queue->front = node;
+    }
+    else
+    {
+        queue->rear->next = node;
+    }
+
+    queue->rear = node;
+    queue->items++;
+
+    return data;
+}
+
+void cp_travel_queue(CP_QUEUE *queue)
+{
+    CP_QNODE       *node;
+
+    for(node=queue->front; node!=NULL; node=node->next)
+    {
+        printf("queue node[%p] save data [%p]\n", node, node->item);
+    }
+}
+
+void *cp_rmqueue(CP_QUEUE *queue, void *data)
+{
+    CP_QNODE       *node, *tmp;
+
+    if(!queue || cp_queue_is_empty(queue))
+    {
+        return NULL;
+    }
+
+    /* The first node->item is the data, we find it */
+    if(queue->front->item==data)
+    {
+        tmp = queue->front;
+        queue->front = queue->front->next;
+        queue->items -= 1;
+        t_free(tmp);
+        return data;
+    }
+
+    for(node=queue->front; node!=NULL; node=node->next)
+    {
+        if(node->next->item == data)
+        {
+            tmp = node->next;
+            queue->items -= 1;
+
+            if(node->next != queue->rear)
+                node->next = node->next->next;
+            else
+            {
+                queue->rear = node;
+                queue->rear->next = NULL; 
+            }
+
+            t_free(tmp);
+            return data;
+        }
+    }
+
+    return data;
+}
+
+void *cp_dequeue(CP_QUEUE *queue)
+{
+    CP_QNODE       *node;
+    void           *item;
+
+    if(!queue || cp_queue_is_empty(queue))
+    {
+        return NULL;
+    }
+
+    node = queue->front;
+    queue->front = queue->front->next;
+
+    item = node->item;
+    t_free(node);
+
+    queue->items--;
+
+    if(queue->items == 0)
+        queue->rear = NULL;
+
+    return item;
+}
+
+void cp_queue_destroy(CP_QUEUE *queue)
+{
+    if(!queue)
+        return ;
+
+    while( !cp_queue_is_empty(queue) )
+    {
+        cp_dequeue(queue);
+    }
+
+    t_free(queue);
+
+    return ;
+}
+
diff --git a/program/cp_library/cp_queue.h b/program/cp_library/cp_queue.h
new file mode 100644
index 0000000..c64cd06
--- /dev/null
+++ b/program/cp_library/cp_queue.h
@@ -0,0 +1,49 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_queue.h
+ *    Description:  This head file is for the queue implement based on link list.
+ *
+ *        Version:  1.0.0(11/12/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/12/2012 01:26:34 PM"
+ *                 
+ ********************************************************************************/
+#ifndef __CP_QUEUE
+#define __CP_QUEUE
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef  struct _CP_QNODE
+{
+    void               *item;
+    struct _CP_QNODE   *next;
+} CP_QNODE;
+
+
+typedef struct _CP_QUEUE
+{
+    CP_QNODE           *front;
+    CP_QNODE           *rear;
+    int                items;
+    int                size;
+} CP_QUEUE;
+
+#define cp_queue_is_full(pq)  ( (pq)->size==(pq)->items ? 1 :0 )
+#define cp_queue_is_empty(pq) ( 0==(pq)->items ? 1 : 0)
+#define cp_queue_count(pq) ( (pq)->items )
+#define cp_queue_size(pq) ( (pq)->size )
+
+CP_QUEUE *cp_queue_init(CP_QUEUE *queue, int size);
+void *cp_enqueue(CP_QUEUE *queue, void *data);
+void cp_travel_queue(CP_QUEUE *queue);
+void *cp_rmqueue(CP_QUEUE *queue, void *data);
+void *cp_dequeue(CP_QUEUE *queue);
+void cp_queue_destroy(CP_QUEUE *queue);
+#define cp_queue_destroy_clear(queue) {cp_queue_destroy(queue); queue=NULL;}
+
+#endif
diff --git a/program/cp_library/cp_ringbuf.c b/program/cp_library/cp_ringbuf.c
new file mode 100644
index 0000000..54d5e09
--- /dev/null
+++ b/program/cp_library/cp_ringbuf.c
@@ -0,0 +1,103 @@
+/*
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+	Based on ringbuffer.c by Patrick Prasse (patrick.prasse@gmx.net). Code
+	has been modified by Telenor and Gemalto.
+
+ */
+
+
+#include <string.h>
+#include <assert.h>
+#include "cp_ringbuf.h"
+
+void rb_init (struct ring_buffer *ring, u_char* buff, int size) {
+    memset (ring, 0, sizeof (struct ring_buffer));
+    ring->rd_pointer = 0;
+    ring->wr_pointer = 0;
+    ring->buffer= buff;
+    ring->size = size;
+}
+
+int
+rb_write (struct ring_buffer *rb, u_char * buf, int len)
+{
+    int total;
+    int i;
+
+    /* total = len = min(space, len) */
+    total = rb_free_size(rb);
+    if(len > total)
+        len = total;
+    else
+        total = len;
+
+    i = rb->wr_pointer;
+    if(i + len > rb->size)
+    {
+        memcpy(rb->buffer + i, buf, rb->size - i);
+        buf += rb->size - i;
+        len -= rb->size - i;
+        i = 0;
+    }
+    memcpy(rb->buffer + i, buf, len);
+    rb->wr_pointer = i + len;
+    return total;
+}
+
+int rb_free_size (struct ring_buffer *rb){
+    return (rb->size - 1 - rb_data_size(rb));
+}
+
+int rb_read (struct ring_buffer *rb, u_char * buf, int max) {
+    int total;
+    int i;
+    /* total = len = min(used, len) */
+    total = rb_data_size(rb);
+
+    if(max > total)
+        max = total;
+    else
+        total = max;
+
+    i = rb->rd_pointer;
+    if(i + max > rb->size)
+    {
+        memcpy(buf, rb->buffer + i, rb->size - i);
+        buf += rb->size - i;
+        max -= rb->size - i;
+        i = 0;
+    }
+    memcpy(buf, rb->buffer + i, max);
+    rb->rd_pointer = i + max;
+
+    return total;
+}
+
+int rb_data_size (struct ring_buffer *rb) {
+    return ((rb->wr_pointer - rb->rd_pointer) & (rb->size-1));
+}
+
+void rb_clear (struct ring_buffer *rb) {
+    memset(rb->buffer,0,rb->size);
+    rb->rd_pointer=0;
+    rb->wr_pointer=0;
+}
+
+u_char rb_peek(struct ring_buffer* rb, int index) {
+	assert(index < rb_data_size(rb));
+
+	return rb->buffer[((rb->rd_pointer + index) % rb->size)];
+}
diff --git a/program/cp_library/cp_ringbuf.h b/program/cp_library/cp_ringbuf.h
new file mode 100644
index 0000000..617d187
--- /dev/null
+++ b/program/cp_library/cp_ringbuf.h
@@ -0,0 +1,57 @@
+/*
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+	Based on ringbuffer.h by Patrick Prasse (patrick.prasse@gmx.net). Code
+	has been modified by Telenor and Gemalto.
+
+ */
+
+#ifndef __CP_RINGBUF_H_
+#define __CP_RINGBUF_H_
+
+#include <sys/types.h>
+
+struct ring_buffer {
+	u_char *buffer;
+    int wr_pointer;
+    int rd_pointer;
+    int size;
+};
+
+/* Initial the ring buffer */
+void rb_init (struct ring_buffer *ring, u_char* buff, int size) ;
+
+/*  Description: Write $len bytes data in $buf into ring buffer $rb 
+ * Return Value: The actual written into ring buffer data size, if ring buffer 
+ * left space size small than $len, then only part of the data be written into.
+ */
+int rb_write (struct ring_buffer *rb, u_char * buf, int len) ;
+
+/* Get ring buffer left free size  */
+int rb_free_size (struct ring_buffer *rb);
+
+/* Read $max bytes data from ring buffer $rb to $buf */
+int rb_read (struct ring_buffer *rb, u_char * buf, int max);
+
+/* Read a specify $index byte data in ring buffer $rb  */
+u_char rb_peek(struct ring_buffer* rb, int index);
+
+/* Get data size in the ring buffer  */
+int rb_data_size (struct ring_buffer *);
+
+/* Clear the ring buffer data  */
+void rb_clear (struct ring_buffer *rb) ;
+
+#endif /* __CP_RINGBUF_H_ */
diff --git a/program/cp_library/cp_sock.c b/program/cp_library/cp_sock.c
new file mode 100644
index 0000000..e742615
--- /dev/null
+++ b/program/cp_library/cp_sock.c
@@ -0,0 +1,854 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_sock.c
+ *    Description:  This file is the Linux TCP socket basic library.
+ *                 
+ *        Version:  1.0.0(10/26/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/26/2012 01:20:41 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_sock.h"
+#include "cp_logger.h"
+#include "cp_common.h"
+#include "cp_time.h"
+
+CP_SOCK *cp_sock_init(CP_SOCK *sock, unsigned int rsize, unsigned int ssize, int keepintvl, int keepcnt)
+{
+    if(!sock)
+    {
+        if( !(sock=(CP_SOCK *)t_malloc(sizeof(*sock))) )
+        {
+            log_err("socket context malloc failed: %s\n", strerror(errno));
+            goto failed;
+        }
+        else
+        {
+            memset(sock, 0, sizeof(*sock));
+            sock->flag |= FLAG_SOCK_MALLOC;
+        }
+    }
+    else
+    {
+        memset(sock, 0, sizeof(*sock));
+    }
+
+    if( !(sock->rbuf=cp_string_create_empty(CP_DEF_RCVBUF_SIZE)) )
+    {
+        log_err("socket context create recv buffer failed\n");
+        cp_sock_term(sock);
+        goto failed;
+    }
+
+    if( !(sock->sbuf=cp_string_create_empty(CP_DEF_SNDBUF_SIZE)) )
+    {
+        log_err("socket context create send buffer failed\n");
+        cp_sock_term(sock);
+        goto failed;
+    }
+
+    log_dbg("socket context [%p] initialise ok\n", sock);
+    sock->rsize = rsize;
+    sock->ssize = ssize;
+    sock->keepintvl = keepintvl;
+    sock->keepcnt = keepcnt;
+    sock->idle_timeout = CP_SOCK_DEF_IDLE_TIMEOUT;
+    sock->msg_timeout = CP_SOCK_DEF_MSG_TIMEOUT;
+    sock->fd = -1;
+    sock->index = -1;
+    sock->actv_time = time_now();
+
+    sock->flag |= FLAG_SOCK_INIT;
+
+    return sock;
+
+failed:
+    log_err("socket context initialize failed\n");
+    return NULL;
+}
+
+void cp_sock_term(CP_SOCK *sock)
+{
+    if(!sock)
+        return;
+
+    log_dbg("terminate socket [%p:%d] now\n", sock, sock->fd);
+
+    if(sock->flag & FLAG_SOCK_INIT)
+        cp_sock_close(sock);
+
+    if(sock->rbuf)
+    {
+        cp_string_destroy(sock->rbuf);
+    } 
+
+    if(sock->privt && sock->privt_free)
+    {
+        sock->privt_free();
+    }
+
+    if(sock->sbuf)
+    {
+        cp_string_destroy(sock->sbuf);
+    }
+
+    if(sock->flag & FLAG_SOCK_MALLOC)
+    {
+        //memset(sock, 0, sizeof(*sock));
+        t_free(sock);
+        return ;
+    }
+    
+    //memset(sock, 0, sizeof(*sock));
+    sock->fd = -1;  
+
+    return ;
+}
+
+int cp_sock_close(CP_SOCK *sock)
+{
+    int        rv = 0;
+    int        force = 0;
+
+    if(!sock)
+        return -1;
+
+    if(sock->fd>0)
+    {
+        log_dbg("Close socket[%d] bind [%s:%d]\n", sock->fd, sock->laddr, sock->lport);
+        if(force)
+        {
+            /*
+             * If l_onoff is nonzero and l_linger is zero, TCP aborts the connection when it is closed.  
+             * That is, TCP discards any data still remaining in the socket send buffer and sends an RST 
+             * to the peer, not the normal four-packet connection termination sequence.
+             */
+            struct linger so_linger;
+
+            so_linger.l_onoff = 1;  /* Turn on linger */
+            so_linger.l_linger = 0; /* Set the timeout to 0  */
+
+            setsockopt (sock->fd, SOL_SOCKET, SO_LINGER, (char *) &so_linger, sizeof (struct linger));
+        } 
+        
+        if(CP_SOCK_MODE_ACCEPT == sock->mode || CP_SOCK_MODE_CONNECT == sock->mode)
+        {
+            shutdown (sock->fd, SHUT_RDWR);
+        }
+
+        if( (rv=close(sock->fd)) )
+        {
+            return -2;
+        }
+    }
+
+    sock->fd = -1;
+    return rv;
+}
+
+
+int cp_sock_listen(CP_SOCK *sock, char *laddr, int lport, int backlog)
+{
+    int                 rv = 0;
+    int                 fd = -1;
+    char                service[20];
+    struct addrinfo     hints, *rp;
+    struct addrinfo     *res = NULL;
+    struct in_addr      inaddr;
+
+    if(!sock || !(sock->flag&FLAG_SOCK_INIT) || lport<=0 || backlog <=0)
+    {
+        log_err("Invalide input arguments\n");
+        rv = -1;
+        goto cleanup;
+    }
+
+    strncpy(sock->laddr, (!laddr?"0.0.0.0":laddr), sizeof(sock->laddr));
+    log_dbg("Create socket listen on [%s:%d] now\n", sock->laddr, lport);
+
+    cp_sock_close(sock);
+
+    memset(&hints, 0, sizeof(struct addrinfo));
+    hints.ai_family = AF_INET; /*  Only support IPv4 */
+    hints.ai_socktype = SOCK_STREAM;
+    hints.ai_protocol = IPPROTO_TCP; /*  TCP protocol */ 
+    hints.ai_flags = AI_PASSIVE;
+
+    /* If 'laddr' is a valid IP address, then don't use name resolution */
+    if(laddr && inet_aton(laddr, &inaddr))
+    {
+        log_info("%s is a valid IP address, don't use name resolution.\n", laddr);
+        hints.ai_flags |= AI_NUMERICHOST;
+    }
+
+    /* Obtain address(es) matching host/port */
+    snprintf(service, sizeof(service), "%d", lport);
+    if( (rv=getaddrinfo(laddr, service, &hints, &res)) )
+    {
+        log_err("getaddrinfo() parser [%s:%s] failed: %s\n", laddr, service, gai_strerror(rv));
+        rv = -2;
+        goto cleanup;
+    }
+
+
+    /*  getaddrinfo() returns a list of address structures. Try each 
+     *  address until we successfully connect or bind*/
+    sock->fd = -1;
+    for (rp=res; rp!=NULL; rp=rp->ai_next) 
+    {
+        /* Create the socket */
+        if( (fd=socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol)) < 0)
+        {
+            log_err("socket() create failed: %s\n", strerror(errno));
+            rv = -3;
+            continue;
+        }
+
+        cp_sock_set_reuseaddr(fd);
+        cp_sock_set_keepalive(fd, sock->keepintvl, sock->keepcnt);
+        cp_sock_set_nonblock(fd); 
+        
+        if( 0==bind(fd, rp->ai_addr, rp->ai_addrlen) ) 
+        { 
+            struct sockaddr_in    *saddr = (struct sockaddr_in *)rp->ai_addr;
+            sock->fd = fd;
+            sock->lport = lport;
+
+            strncpy (sock->laddr, inet_ntoa (saddr->sin_addr), sizeof(sock->laddr)-1);
+            log_dbg("Bind socket[%d] ok\n", fd);
+            rv = 0;
+            break;
+        }
+        else
+        {
+            rv = -4;
+            log_err("Bind socket[%d] failed: %s\n", fd, strerror(errno));
+        }
+
+        close(fd);
+    } /* for (rp=res; rp!=NULL; rp=rp->ai_next)  */
+
+
+    if(sock->fd < 0)
+    {
+        close(fd);
+        goto cleanup;
+    }
+
+    if(listen(sock->fd, backlog))
+    {
+        log_err("Listen on socket[%d] failed: %s\n", sock->fd, strerror(errno));
+        rv = -6;
+        goto cleanup;
+    }
+
+    sock->mode = CP_SOCK_MODE_LISTEN;
+    sock->rport = 0;
+    memset(&sock->raddr, 0, sizeof(sock->raddr));
+
+cleanup:
+    if( rv )
+    {
+        log_err("Create socket listen on [%s:%d] failed\n", sock->laddr, lport);
+        if(sock->fd > 0)
+            close(sock->fd);
+    }
+    else
+    {
+        sock->actv_time = time_now();
+        sock->status = SOCK_STAT_LISTENED;
+        log_nrml("Create socket[%p:%d] listen [%s:%d] ok\n", sock, sock->fd, sock->laddr, lport);
+    }
+
+    if(res)
+        freeaddrinfo(res);  /* No longer needed */
+    return rv;
+}
+
+
+int cp_sock_accept(CP_SOCK *serv_sock, CP_SOCK *new_sock)
+{
+    struct sockaddr_in       saddr;
+    socklen_t                len = sizeof(saddr);
+    int                      fd = -1;
+    int                      rv = 0;
+
+    if(!serv_sock || !new_sock || serv_sock->fd<0 )
+    {
+        log_err("Invalide input arguments\n");
+        rv = -1;
+        goto cleanup;
+    }
+
+    log_dbg("accept new client from server [fd=%d %s:%d] now\n", serv_sock->fd, serv_sock->laddr, serv_sock->lport);
+
+    if( (fd=accept(serv_sock->fd, (struct sockaddr *)&saddr, &len)) < 0 )
+    {
+        log_err("Accept new client from server [fd=%d %s:%d] failed: %s\n", 
+                serv_sock->fd, serv_sock->laddr, serv_sock->lport, strerror(errno));
+        rv = -2;
+        goto cleanup;
+    }
+
+    /* Set socket buffer size  */
+    cp_sock_set_buffer(fd, new_sock->rsize, new_sock->ssize);
+    /* Enable socket keepalive to detect network  */
+    cp_sock_set_keepalive(fd, new_sock->keepintvl, new_sock->keepcnt);
+    cp_sock_set_nonblock(fd); 
+
+    new_sock->fd = fd;
+    new_sock->mode = CP_SOCK_MODE_ACCEPT;
+    /* get remote address */
+    strncpy (new_sock->raddr, inet_ntoa(saddr.sin_addr), sizeof(new_sock->raddr)-1);
+    new_sock->rport = ntohs(saddr.sin_port);
+
+    /* Get local address */
+    len = sizeof(saddr);
+    if (getsockname (new_sock->fd, (struct sockaddr *) &saddr, (socklen_t *) &len)) 
+    {
+        strncpy(new_sock->laddr, serv_sock->laddr, sizeof(new_sock->laddr)-1);
+        new_sock->lport = serv_sock->lport;
+    }
+    else
+    {
+        strncpy (new_sock->laddr, inet_ntoa (saddr.sin_addr), sizeof (new_sock->laddr) - 1);
+        new_sock->lport = ntohs (saddr.sin_port);
+    }
+
+cleanup:
+    if(!rv)
+    {
+        new_sock->status = SOCK_STAT_ACCEPTED;
+        new_sock->actv_time = time_now();
+        log_nrml("Accept new client socket [%d %s:%d] <== [%s:%d]\n", 
+                new_sock->fd, new_sock->laddr, new_sock->lport, new_sock->raddr, new_sock->rport);
+    }
+    else
+    {
+        log_err("Accept new client from server [%d] on [%s:%d] failed\n", 
+                serv_sock->fd, serv_sock->raddr, serv_sock->rport);
+        close(fd);
+    }
+
+    return rv;
+}
+
+
+/*
+ *  Description:  Create a socket connect to the remove server
+ *   Input args:  $sock: The socket contex   $raddr: Remote server address  
+ *                $rport: Remote server listened port     
+ *                $lport: Use this local port connect to remote server
+ *  Output args:  None
+ * Return value:  <0:connect failed  ==0:connect ok  >0:connect in progress
+ *
+ */
+int cp_sock_connect(CP_SOCK *sock, char *raddr, int rport, int lport)
+{
+    int                 rv = 0;
+    int                 fd = -1;
+    char                service[20];
+    struct addrinfo     hints, *rp;
+    struct addrinfo     *res = NULL;
+    struct in_addr      inaddr;
+    struct sockaddr_in  saddr;
+    int                 len = sizeof(saddr); 
+
+    if(!sock || !(sock->flag&FLAG_SOCK_INIT) || !raddr || rport<=0)
+    {
+        log_err("Invalide input arguments\n");
+        rv = -1;
+        goto failed;
+    }
+
+    if(SOCK_STAT_CONNECTED == sock->status)
+    {
+        return 0;
+    }
+    else if(SOCK_STAT_CONNECTING == sock->status)
+    {
+        goto connecting;
+    }
+
+    log_dbg("create socket connect to remote server [%s:%d] now\n", raddr, rport);
+
+    memset(&hints, 0, sizeof(struct addrinfo));
+    hints.ai_family = AF_INET; /*  Only support IPv4 */
+    hints.ai_socktype = SOCK_STREAM;
+    hints.ai_protocol = IPPROTO_TCP; /*  TCP protocol */ 
+    hints.ai_flags = AI_PASSIVE;
+
+    /* If 'raddr' is a valid IP address, then don't use name resolution */
+    if(raddr && inet_aton(raddr, &inaddr))
+    {
+        log_info("%s is a valid IP address, don't use name resolution.\n", raddr);
+        hints.ai_flags |= AI_NUMERICHOST;
+    }
+
+    /* Obtain address(es) matching host/port */
+    snprintf(service, sizeof(service), "%d", rport);
+    if( (rv=getaddrinfo(raddr, service, &hints, &res)) )
+    {
+        log_err("getaddrinfo() parser [%s:%s] failed: %s\n", raddr, service, gai_strerror(rv));
+        rv = -2;
+        goto failed;
+    }
+
+    cp_sock_close(sock); /* close any opened socket on it */
+    sock->fd = -1;
+
+    /*  getaddrinfo() returns a list of address structures. Try each 
+     *  address until we successfully connect or bind*/
+    for (rp=res; rp!=NULL; rp=rp->ai_next) 
+    {
+        fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
+
+        /* Create the socket */
+        if( fd < 0)
+        {
+            log_err("socket() create failed: %s\n", strerror(errno));
+            rv = -3;
+            continue;
+        }
+        log_trace("create socket[%p:%d] with connect mode ok\n", sock, fd); 
+        
+        /* We need bind lport to this socket */
+        if(lport > 0)
+        { 
+            memset(&saddr, 0, len);
+            saddr.sin_family = AF_INET;
+            saddr.sin_port = htons ((u_short) lport); 
+            
+            if ( bind(fd, (struct sockaddr *)&saddr, len) )
+            {
+                rv = -4;
+                close(fd);
+                log_err("Bind port[%d] to connect socket [%d] failed: %s\n", lport, fd, strerror(errno));
+                continue;
+            }
+            else
+            {
+                sock->lport = lport; 
+                rv = 0;
+                log_dbg("Bind port[%d] to connect socket [%d] OK\n", lport, fd);
+            }
+        }
+
+        /* Set socket options */
+        cp_sock_set_buffer(fd, sock->rsize, sock->ssize);
+        cp_sock_set_keepalive(fd, sock->keepintvl, sock->keepcnt);
+        cp_sock_set_nonblock(fd);
+
+        /* Nono block Connect to the remote server */
+        if(0==connect(fd, rp->ai_addr, rp->ai_addrlen))
+        { 
+            /* Conenct to server successfully */
+            sock->fd = fd;
+            sock->status = SOCK_STAT_CONNECTING; 
+
+            memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr));
+            
+            rv = 0;
+            goto connected;
+        }
+        else
+        {
+            if(EINPROGRESS == errno)
+            {
+                /* Connect to server now in progress  */
+                sock->fd = fd;
+                sock->status = SOCK_STAT_CONNECTING; 
+                memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr));
+
+                rv = 0;
+                goto connecting;
+            }
+            else
+            {
+                /* Connect to server failed. */
+                close(fd);
+                rv = -5;
+                log_err("connect() to server failed: %s\n", strerror(errno));
+                goto failed;
+            }
+        } 
+
+        close(fd);
+    }  /* for (rp=res; rp!=NULL; rp=rp->ai_next)  */
+
+
+    if(sock->fd < 0)
+    {
+        close(fd);
+        goto failed;
+    }
+
+
+connecting: 
+    if(SOCK_STAT_CONNECTING == sock->status)
+    { 
+
+        len = sizeof(sock->saddr); 
+
+        errno = 0;
+        if( !connect(sock->fd, &sock->saddr, len) )
+        {
+            /* connect() return 0 means it already connected */
+            sock->status = SOCK_STAT_CONNECTED; 
+            rv = 0;
+            goto connected;
+        }
+
+        /* Connect failure will continue to check */
+        switch (errno)
+        {
+            case EISCONN: 
+                sock->status = SOCK_STAT_CONNECTED; 
+                rv = 0;
+                goto connected;
+
+            case EALREADY: 
+            case EINPROGRESS:
+                log_dbg("socket[%d] connect to remote [%s:%d] in progress\n", sock->fd, raddr, rport);
+                rv = 0;
+                goto cleanup;
+
+            default:
+                log_err("socket[%d] connect to remote [%s:%d] failed: %s\n", sock->fd, raddr, rport, strerror(errno));
+                sock->status = SOCK_STAT_DISCONNECT; 
+                rv = -7;
+                break;
+        }
+    }
+
+connected:
+    if(SOCK_STAT_CONNECTED == sock->status)
+    { 
+        rv = 0;
+
+        log_nrml("socket[%d] connected to remote server [%s:%d]\n", sock->fd, raddr, rport);
+        /* Set remote address */ 
+        sock->rport=rport; 
+        strncpy (sock->raddr, raddr, sizeof(sock->raddr)-1); 
+        sock->actv_time = time_now();
+        
+        /* Get local address */ 
+        memset(&saddr, 0, len);
+        len = sizeof(saddr); 
+
+        if (!getsockname (sock->fd, (struct sockaddr *) &saddr, (socklen_t *) &len)) 
+        {
+            strncpy (sock->laddr, inet_ntoa (saddr.sin_addr), sizeof (sock->laddr) - 1);
+            sock->lport = ntohs (saddr.sin_port);
+        }
+        else
+        {
+            memset(&sock->laddr, 0, sizeof(sock->laddr));
+            sock->lport = lport;
+        }
+        goto cleanup;
+    }
+
+
+failed:
+    log_err("Create socket connect to [%s:%d] failed\n", raddr, rport);
+    if(sock && sock->fd >= 0)
+        close(sock->fd);
+
+cleanup:
+    if(res)
+        freeaddrinfo(res);  /* No longer needed */
+
+    return rv;
+}
+
+
+int cp_sock_recv(CP_SOCK *sock)
+{
+    int               rv, left;
+    int               flag;
+    cp_string         *rbuf;
+
+    if(!sock || !sock->rbuf || !sock->rbuf->data || sock->fd<0)
+    {
+        log_err("Invalide input arguments\n");
+        return -1;
+    }
+
+    rbuf = sock->rbuf;
+    left = rbuf->size-rbuf->len;
+    flag = left ? 0 : MSG_PEEK; 
+
+    if(left <= 0)
+        return 0;
+    
+    rv=recv(sock->fd, &rbuf->data[rbuf->len], left, flag);
+    if( rv > 0)
+    {
+        rbuf->len += rv;
+    }
+    else if(rv<0)
+    {
+        if(EAGAIN==errno || EINPROGRESS==errno)
+        { 
+            log_warn("socket [%d] please recv data again: %s\n", sock->fd, strerror(errno));
+            rv = 0;
+        }
+        else
+        {
+            log_err("socket [%d] recv data failed: %s\n", sock->fd, strerror(errno));
+            rv = -2;
+        }
+    }
+
+    if(rv > 0)
+    {
+        sock->actv_time = sock->msg_time = time_now();
+    }
+    return rv;
+}
+
+int cp_sock_send(CP_SOCK *sock)
+{
+    int                      rv;
+    struct pollfd            sock_poll;
+
+    if(!sock || sock->fd<0 || !sock->sbuf->data || sock->sbuf->len<=0)
+    {
+        log_err("Invalide input arguments\n");
+        return -1;
+    }
+
+    sock_poll.events = POLLOUT;
+    sock_poll.fd = sock->fd;
+
+    if( (rv=poll(&sock_poll, 1, 0)) > 0 )
+    {
+        if( !(POLLOUT &sock_poll.events) )
+        {
+            return -2;
+        }
+
+        if ( (rv=send(sock->fd, sock->sbuf->data, sock->sbuf->len, MSG_NOSIGNAL)) < 0) 
+        {
+            if (EAGAIN == errno) 
+            {
+                log_warn("socket [%d] please send data again: %s\n", sock->fd, strerror(errno));
+                return 0;
+            }
+            else
+            {
+                log_err("socket [%d] send data failed: %s\n", sock->fd, strerror(errno));
+                return -4;
+            }
+        }
+        else
+        {
+            sock->sbuf->len -= rv;
+            sock->actv_time = time_now();
+            memmove (sock->sbuf->data, sock->sbuf->data+rv, sock->sbuf->len);
+            return rv;
+        }
+    }
+    else /* poll()<0 means failed, poll()==0 means timeout */
+    {
+        log_err("send data from socket [%d] poll failed: %s\n", sock->fd, strerror(errno));
+        return 0;
+    }
+
+    return 0;
+}
+
+int cp_sock_set_nonblock(int sockfd)
+{
+    int opts;
+    /*
+     * fcntl may set: 
+     *
+     * EACCES, EAGAIN: Operation is prohibited by locks held by other 
+     *          processes. Or, operation is prohibited because the file has 
+     *          been memory-mapped by another process. 
+     * EBADF:   fd is not an open file descriptor, or the command was F_SETLK 
+     *          or F_SETLKW and the file descriptor open mode doesn't match 
+     *          with the type of lock requested.
+     * EDEADLK: It was detected that the specified F_SETLKW command would 
+     *          cause a deadlock.
+     * EFAULT:  lock is outside your accessible address space.
+     * EINTR:   For F_SETLKW, the command was interrupted by a signal. For 
+     *          F_GETLK and F_SETLK, the command was interrupted by a signal 
+     *          before the lock was checked or acquired. Most likely when 
+     *          locking a remote file (e.g. locking over NFS), but can 
+     *          sometimes happen locally.
+     * EINVAL:  For F_DUPFD, arg is negative or is greater than the maximum 
+     *          allowable value. For F_SETSIG, arg is not an allowable signal 
+     *          number.
+     * EMFILE:  For F_DUPFD, the process already has the maximum number of 
+     *          file descriptors open. 
+     * ENOLCK:  Too many segment locks open, lock table is full, or a remote 
+     *          locking protocol failed (e.g. locking over NFS).
+     * EPERM:   Attempted to clear the O_APPEND flag on a file that has the 
+     *          append-only attribute set.
+     */
+    opts = fcntl(sockfd, F_GETFL);
+    if (opts < 0)
+    {
+        log_warn("fcntl() get socket options failure: %s\n", strerror(errno));
+        return -1;
+    } 
+
+    opts |= O_NONBLOCK;
+
+    if (fcntl(sockfd, F_SETFL, opts) < 0)
+    {
+        log_warn("fcntl() set socket options failure: %s\n", strerror(errno));
+        return -1;
+    }
+
+    log_dbg("Set socket[%d] none blocking\n", sockfd);
+    return opts;
+}
+
+int cp_sock_set_buffer(int sockfd, int rsize, int ssize)
+{
+    int        opt;
+    socklen_t  optlen = sizeof(opt);
+
+    if(sockfd < 0)
+        return -1;
+
+    /* Get system default receive buffer size, Linux X86: 85K */
+    if (getsockopt (sockfd, SOL_SOCKET, SO_RCVBUF, (char *) &opt, &optlen)) 
+    {
+        log_warn("getsockopt() get receive buffer failure: %s\n", strerror(errno));
+        return -2;
+    }
+
+    /* Only when current receive buffer size larger than the default one will change it  */
+    if(rsize > opt)
+    {
+        opt = (int) rsize;
+        if (setsockopt (sockfd, SOL_SOCKET, SO_RCVBUF, (char *) &opt, optlen)) 
+        {
+            log_warn("setsockopt() set receive buffer to %d failure: %s\n", opt, strerror(errno));
+            return -2;
+        }
+    }
+
+    /* Get system default send buffer size, Linux X86: 16K */
+    if (getsockopt (sockfd, SOL_SOCKET, SO_SNDBUF, (char *) &opt, &optlen)) 
+    {
+        log_warn("getsockopt() get send buffer failure: %s\n", strerror(errno));
+        return -3;
+    }
+
+    /* Only when current receive buffer size larger than the default one will change it  */
+    if(ssize > opt)
+    {
+        opt = (int) ssize;
+        if (setsockopt (sockfd, SOL_SOCKET, SO_SNDBUF, (char *) &opt, optlen)) 
+        {
+            log_warn("setsockopt() set send buffer to %d failure: %s\n", opt, strerror(errno));
+            return -3;
+        }
+    }
+
+    log_info("Set socket[%d] RCVBUF size:%d  SNDBUF size:%d\n", sockfd, rsize, ssize);
+    return 0;
+}
+
+int cp_sock_set_reuseaddr(int sockfd)
+{
+    int opt = 1;
+    int len = sizeof (int);
+
+    if (setsockopt (sockfd, SOL_SOCKET, SO_REUSEADDR, (void *) &opt, len)) 
+    {
+        log_err("Set socket[%d] option SO_REUSEADDR failed:%s\n", sockfd, strerror(errno));
+        return -1;
+    } 
+    log_dbg("Set socket[%d] option SO_REUSEADDR ok\n", sockfd);
+
+    return 0;
+}
+
+/*
+ * Enable socket SO_KEEPALIVE, if the connection disconnected, any system call on socket
+ * will return immediately and errno will be set to "WSAENOTCONN"
+ *
+ * keepalive is not program related, but socket related, * so if you have multiple sockets, 
+ * you can handle keepalive for each of them separately.
+ *
+ * Reference: http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
+ */
+int cp_sock_set_keepalive(int sockfd, int keepintvl, int keepcnt)
+{
+    int  opt;
+
+    if(sockfd < 0)
+        return -1;
+
+    /* Enable the KEEPALIVE flag */
+    opt = 1;
+    if (setsockopt (sockfd, SOL_SOCKET, SO_KEEPALIVE, (char *) &opt, sizeof (opt))) 
+    {
+        log_warn("setsockopt() enable SO_KEEPALIVE failure: %s\n", strerror(errno));
+        return -2;
+    }
+
+    if(keepintvl || keepcnt)
+    {
+        /*
+         *  The tcp_keepidle parameter specifies the interval between the last data packet sent 
+         *  (simple ACKs are not considered data) and the first keepalive probe; after the 
+         *  connection is marked to need keepalive, this counter is not used any further. 
+         *  ~ >: cat /proc/sys/net/ipv4/tcp_keepalive_time 
+         *  7200
+         */
+        opt = 3; /* 3 seconds  */
+        if (setsockopt (sockfd, SOL_TCP, TCP_KEEPIDLE, (char *) &opt, sizeof (opt))) 
+        {
+            log_err("setsockopt() set TCP_KEEPIDLE to %d seconds failure: %s\n", opt, strerror(errno));
+            return -3;
+        }
+
+        if((opt=keepintvl) > 0)
+        {
+            /*
+             * The tcp_keepintvl parameter specifies the interval between subsequential keepalive 
+             * probes, regardless of what the connection has exchanged in the meantime.
+             * ~ >: cat /proc/sys/net/ipv4/tcp_keepalive_intvl 
+             * 75
+             */
+            if (setsockopt (sockfd, SOL_TCP, TCP_KEEPINTVL, (char *) &opt, sizeof (opt))) 
+            {
+                log_err("setsockopt() set TCP_KEEPINTVL to %d failure: %s\n", opt, strerror(errno));
+                return -4;
+            }
+        }
+
+        if((opt=keepcnt) > 0)
+        {
+            /*
+             * The TCP_KEEPCNT option specifies the maximum number of unacknowledged probes to 
+             * send before considering the connection dead and notifying the application layer
+             * probes to be sent. The value of TCP_KEEPCNT is an integer value between 1 and n, 
+             * where n is the value of the systemwide tcp_keepcnt parameter. 
+             * ~ >: cat /proc/sys/net/ipv4/tcp_keepalive_probes 
+             * 9
+             */
+            if (setsockopt (sockfd, SOL_TCP, TCP_KEEPCNT, (char *) &opt, sizeof (opt)))
+            {
+                log_err("setsockopt() set TCP_KEEPCNT to %d failure: %s\n", opt, strerror(errno));
+                return -5;
+            }
+        }
+    }
+
+    log_dbg("Set socket[%d] KEEPINTVL:%d  KEEPCNT:%d\n", sockfd, keepintvl, keepcnt);
+    return 0;
+}
+
+
diff --git a/program/cp_library/cp_sock.h b/program/cp_library/cp_sock.h
new file mode 100644
index 0000000..3979d0a
--- /dev/null
+++ b/program/cp_library/cp_sock.h
@@ -0,0 +1,184 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_sock.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(10/26/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/26/2012 01:21:38 PM"
+ *                 
+ ********************************************************************************/
+#ifndef __CP_SOCK_H
+#define __CP_SOCK_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <netdb.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/un.h>
+#include <poll.h>
+#include <errno.h> 
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <linux/sockios.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <arpa/inet.h>
+
+#include "cp_klist.h"
+#include "cp_string.h"
+#include "cp_fds.h"
+
+
+#define CP_DEF_RCVBUF_SIZE                2048
+#define CP_DEF_SNDBUF_SIZE                2048
+
+#define CP_SOCK_RCVBUF                    2048
+#define CP_SOCK_SNDBUF                    2048
+
+#define CP_SOCK_DEF_IDLE_TIMEOUT          120*1000 /* 2 minutes */
+#define CP_SOCK_DEF_MSG_TIMEOUT           120*1000 /* 2 minutes */
+
+#define CP_SOCK_KEEPINTVL                 600
+#define CP_SOCK_KEEPCNT                   3
+
+#define CP_SOCK_MODE_NONE                 0
+#define CP_SOCK_MODE_ACCEPT               1
+#define CP_SOCK_MODE_CONNECT              2
+#define CP_SOCK_MODE_LISTEN               3
+
+enum 
+{
+    CP_SOCK_EVENT_READ         =          EPOLLIN,   /* compatilbe with EPOLLIN  */
+    CP_SOCK_EVENT_WRITE        =          EPOLLOUT,  /* compatilbe with EPOLLOUT */
+    CP_SOCK_EVENT_ERROR        =          EPOLLERR,  /* compatilbe with EPOLLERR  */
+    CP_SOCK_EVENT_HUP          =          EPOLLHUP,  /* compatilbe with EPOLLHUP */
+    CP_SOCK_EVENT_IDLE_TIMEOUT =          (1<<16),   /* compatilbe with EPOLL reserved*/  
+    CP_SOCK_EVENT_MSG_TIMEOUT  =          (1<<17),   /* compatible with EPOLL reserved*/
+};
+
+struct _CP_SOCK;
+struct _CP_FDS;
+
+typedef void (*PRIVT_FREE)(void);
+typedef int (*CP_SOCK_EVENT_CALLBACK)(struct _CP_SOCK *sock);
+typedef struct _CP_SOCK_CALLBACK
+{
+    CP_SOCK_EVENT_CALLBACK  error;
+    CP_SOCK_EVENT_CALLBACK  read;
+    CP_SOCK_EVENT_CALLBACK  write;
+} CP_SOCK_CALLBACK; 
+
+
+#define FLAG_SOCK_INIT             (1<<0)
+#define FLAG_SOCK_MALLOC           (1<<1)
+#define FLAG_SOCK_EPOLLED          (1<<2)
+#define FLAG_SOCK_REGISTRY         (1<<3)
+#define FLAG_SOCK_INQUEUE          (1<<4)
+#define FLAG_SOCK_TASKED           (1<<5)
+
+#define SOCK_STAT_INIT             0
+#define SOCK_STAT_CONNECTING       1
+#define SOCK_STAT_CONNECTED        2
+#define SOCK_STAT_LISTENED         2
+#define SOCK_STAT_ACCEPTED         2
+#define SOCK_STAT_ALREADY          2
+#define SOCK_STAT_DISCONNECT       3
+
+typedef struct _CP_SOCK
+{
+    int                      fd;          /* the socket file description */
+    int                      mode;        /* socket work mode: listen, accept, connect */
+    unsigned short           flag;        /* Refer to the follow definition  */
+    unsigned char            status;      /* current socket status */
+
+    unsigned long            actv_time;     /* The last time get event(send/recv) data in this socket */
+    unsigned long            msg_time;      /* The last time get incoming data in this socket */
+    unsigned long            idle_timeout;  /* this is set to the socket idle timeout value, when timeout will disconnect */
+    unsigned long            msg_timeout;   /* this is set to the socket recv data timeout value,  */
+
+    int                      keepintvl;   /* heartbeat(keepalive) detect interval */
+    int                      keepcnt;     /* heartbeat(keepalive) count */
+    int                      rsize;       /* ioctl() set socket recv buffer size  */
+    int                      ssize;       /* ioctl() set socket send buffer size  */
+
+    struct epoll_event       event;       /* epoll_wait returned event */
+
+    cp_string                *sbuf;       /* send buffer */
+    cp_string                *rbuf;       /* receive buffer  */
+
+    struct sockaddr          saddr;       /* sockaddr for connect */
+    char                     laddr[16];   /* local IP address*/
+    int                      lport;       /* local port */
+    char                     raddr[16];   /* remote IP address  */
+    int                      rport;       /* remote port */
+
+    struct _CP_FDS           *fds;        /* epoll fds contex */
+    CP_SOCK_EVENT_CALLBACK   cbfunc;      /* event callback function */
+    CP_SOCK_EVENT_CALLBACK   client_func; /* client data callback function, only server socket use it */
+    struct _CP_SOCK          *serv_sock;  /* Accept socket used to point to the server socket */
+
+    int                      max_client;  /* max clients, only listen socket use it*/
+    int                      accept_cnt;  /* current clients number, only listen socket use it*/
+    struct list_head         accept_list; /* all the accept client list head, only listen socket use it */
+
+    void                     *privt;      /* socket private data */
+    PRIVT_FREE               privt_free;  /* private data free function if it's malloc */
+
+    int                      index;       /* The index member position in the task array */
+    struct list_head         rlist;       /* The list_head member position just for the registry list */
+
+  /*  flag definitions
+   *  1 1 1 1 1 1 1 1
+   *  | | | | | | | |______ Initial    flag  - 0: no            1: yes
+   *  | | | | | | |________ Malloc     flag  - 0: variable,     1: malloc
+   *  | | | | | |__________ registry   flag  - 0: not in,       1: in the registry list
+   *  | | | | |____________ epolled    flag  - 0: not in,       1: put in epoll
+   *  | | | |______________ in queue   flag  - 0: not in,       1: put in queue
+   *  | | |________________ task       flag  - 0: not in,       1: in the task list
+   *  | |__________________ reserved
+   *  |____________________ reserved
+   */
+} CP_SOCK;
+
+
+static void inline cp_sock_set_idle_timeout(CP_SOCK *sock, unsigned long timeout)
+{
+    sock->idle_timeout = timeout;
+}
+
+static void inline cp_sock_set_msg_timeout(CP_SOCK *sock, unsigned long timeout)
+{
+    sock->msg_timeout = timeout;
+}
+
+static void inline cp_sock_set_private_data(CP_SOCK *sock, void *data, PRIVT_FREE free)
+{
+    sock->privt = data;
+    sock->privt_free = free;
+}
+
+extern CP_SOCK *cp_sock_init(CP_SOCK *sock, unsigned int rsize, unsigned int ssize, int keepintvl, int keepcnt);
+extern int cp_sock_close(CP_SOCK *sock);
+extern void cp_sock_term(CP_SOCK *sock);
+#define cp_sock_term_clear(sock) {cp_sock_term(sock); sock=NULL;}
+
+extern int cp_sock_listen(CP_SOCK *sock, char *laddr, int lport, int backlog);
+extern int cp_sock_connect(CP_SOCK *sock, char *raddr, int rport, int lport);
+extern int cp_sock_accept(CP_SOCK *serv_sock, CP_SOCK *new_sock);
+
+extern int cp_sock_recv(CP_SOCK *sock);
+extern int cp_sock_send(CP_SOCK *sock);
+
+extern int cp_sock_set_reuseaddr(int sockfd);
+extern int cp_sock_set_keepalive(int sockfd, int keepintvl, int keepcnt);
+extern int cp_sock_set_nonblock(int sockfd);
+extern int cp_sock_set_buffer(int sockfd, int rsize, int ssize);
+
+#endif /* __CP_SOCK_H */
diff --git a/program/cp_library/cp_string.c b/program/cp_library/cp_string.c
new file mode 100644
index 0000000..c6f020f
--- /dev/null
+++ b/program/cp_library/cp_string.c
@@ -0,0 +1,673 @@
+
+/**
+ * @addtogroup cp_string
+ */
+/** @{ */
+/**
+ * @file
+ * cp_string - 'safe' string implementation
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "cp_string.h"
+#include "cp_common.h"
+
+cp_string *cp_string_create(char *data, int len)
+{
+	cp_string *str;
+	
+#ifdef DEBUG
+	if (len < 0) 
+	{
+		return NULL;
+	}
+#endif
+	
+	str = t_malloc(sizeof(cp_string));
+
+	if (str)
+	{
+		str->len = len;
+		str->size = str->len + 1;
+		str->data = t_malloc(str->size * sizeof(char));
+		if (str->data)
+			memcpy(str->data, data, str->len);
+		else
+		{
+			t_free(str);
+			str = NULL;
+		}
+	}
+
+	return str;
+}
+
+cp_string *cp_string_create_empty(int initial_size)
+{
+	cp_string *str = t_malloc(sizeof(cp_string));
+
+	if (str)
+    { 
+		str->len = 0;
+		str->size = initial_size;
+		str->data = (char *) t_malloc(str->size * sizeof(char));
+		if (str->data == NULL)
+		{
+			t_free(str);
+			str = NULL;
+		}
+	}
+
+	return str;
+}
+
+void cp_string_destroy(cp_string *str)
+{
+	if (str)
+	{
+		if (str->data)
+        {
+			t_free(str->data);
+        }
+
+		t_free(str);
+	}
+}
+
+
+void cp_string_clear_data(cp_string *str)
+{
+	if (str && str->data)
+    {
+        memset(str->data, 0, str->size);
+        str->len = 0;
+    }
+}
+
+cp_string *cp_string_cstrcpy(cp_string *str, char *cstr)
+{
+	if (str)
+	{
+		str->len = strlen(cstr);
+		if (str->size < str->len + 1)
+		{
+			str->size = str->len + 1;
+			str->data = t_malloc(str->size * sizeof(char));
+		}
+		if (str->data)
+			memcpy(str->data, cstr, str->size * sizeof(char));
+		else
+		{
+			t_free(str);
+			str = NULL;
+		}
+	}
+
+	return str;
+}
+
+int cp_string_copy(cp_string *dst, cp_string *src)
+{
+    int        left;
+    int        size;
+
+    if(!dst || !dst->data || !src || !src->data)
+        return 0;
+
+    left=dst->size - dst->len;
+    size = left>src->len ? src->len : left;
+
+    memcpy(&dst->data[dst->len], src->data, size);
+    dst->len += size;
+
+    return size;
+}
+
+int cp_string_cstrcopy(cp_string *dst, char *string, int len)
+{
+    int        left;
+    int        size;
+
+    if(!dst || !dst->data || !string || len<=0)
+        return 0;
+
+    left=dst->size - dst->len;
+    size = left>len ? len : left;
+
+    memcpy(&dst->data[dst->len], string, size);
+    dst->len += size;
+
+    return size;
+}
+
+
+int cp_string_move(cp_string *dst, cp_string *src)
+{
+    int        left;
+    int        size;
+
+    if(!dst || !dst->data || !src || !src->data)
+        return 0;
+
+    /* Check how many left size in $dst and set the size */
+    left=dst->size - dst->len;
+    size = left>src->len ? src->len : left;
+
+    /* copy the $src data to $dst  */
+    memcpy(&dst->data[dst->len], src->data, size);
+    dst->len += size;
+
+    /* remove the $src copied data in it*/
+    src->len -= size;
+    memmove (src->data, src->data+size, src->len);
+
+    return size;
+}
+
+cp_string *cp_string_dup(cp_string *src)
+{
+	cp_string *str = t_malloc(sizeof(cp_string));
+
+	if (str)
+	{
+		*str = *src; /* bitwise copy */
+		str->data = t_malloc((str->len + 1) * sizeof(char));
+		if (str->data)
+			memcpy(str->data, src->data, (str->len  + 1) * sizeof(char));
+		else
+		{
+			t_free(str);
+			str = NULL;
+		}
+	}
+
+	return str;
+}
+
+cp_string *cp_string_cstrdup(char *src)
+{
+	cp_string *str = t_malloc(sizeof(cp_string));
+
+	if (str)
+	{
+		str->len = strlen(src);
+		str->size = str->len + 1;
+		str->data = t_malloc(str->size * sizeof(char));
+		if (str->data == NULL)
+		{
+			t_free(str);
+			return NULL;
+		}
+		memcpy(str->data, src, str->size);
+	}
+
+	return str;
+}
+	
+cp_string *cp_string_cat(cp_string *str, cp_string *appendum)
+{
+	int len = str->len;
+	str->len += appendum->len;
+	if (str->len + 1 > str->size)
+	{
+		str->size = str->len + 1;
+		str->data = realloc(str->data, str->size * sizeof(char));
+	}
+	if (str->data)
+		memcpy(str->data + len * sizeof(char), appendum->data, 
+			appendum->len * sizeof(char));
+
+	return str;
+}
+
+cp_string *cp_string_cstrcat(cp_string *str, char *cstr)
+{
+	int len = str->len;
+	int clen = strlen(cstr);
+
+	str->len += clen * sizeof(char);
+	if (str->len + 1 > str->size)
+	{
+//		str->size = str->len + 0x400 - (str->len % 0x400); /* align to 1kb block */
+		str->size = str->len + 1;
+		str->data = realloc(str->data, str->size * sizeof(char));
+	}
+	if (str->data)
+		memcpy(str->data + len * sizeof(char), cstr, clen);
+
+	return str;
+}
+
+cp_string *cp_string_append_char(cp_string *str, char ch)
+{
+	if (str->len + 1 > str->size)
+	{
+		str->size = str->len + 0x100;
+		str->data = realloc(str->data, str->size * sizeof(char));
+		if (str->data == NULL) return NULL;
+	}
+	str->data[str->len++] = ch;
+
+	return str;
+}
+
+cp_string *cp_string_cat_bin(cp_string *str, void *bin, int len)
+{
+	int olen = str->len;
+	str->len += len;
+
+	if (str->len > str->size)
+	{
+		str->size = str->len + 0x400 - (str->len % 0x400); /* align to 1kb block */
+		str->data = realloc(str->data, str->size * sizeof(char));
+	}
+	memcpy(&str->data[olen], bin, len);
+
+	return str;
+}
+
+int cp_string_cmp(cp_string *s1, cp_string *s2)
+{
+	if (s1 == s2) return 0; //~~ implies cp_string_cmp(NULL, NULL) == 0
+
+	if (s1 == NULL) return -1;
+	if (s2 == NULL) return 1;
+
+	if (s1->len == s2->len)
+		return memcmp(s1->data, s2->data, s1->len);
+	else
+	{
+		int p = (s1->len > s2->len) ? s2->len : s1->len;
+		int rc = memcmp(s1->data, s2->data, p);
+		if (rc == 0) 
+			return s1->len - s2->len;
+		return rc;
+	}
+}
+
+char *cp_string_tocstr(cp_string *str)
+{
+	char *cstr = NULL;
+	
+	if (str)
+	{
+		str->data[str->len * sizeof(char)] = '\0';
+//		str->data[str->len * sizeof(char) + 1] = '\0';
+		cstr = str->data;
+	}
+
+	return cstr;
+}
+
+int cp_string_len(cp_string *s)
+{
+	return s->len;
+}
+
+char *cp_string_data(cp_string *s)
+{
+	return s->data;
+}
+
+#define CHUNK 0x1000
+cp_string *cp_string_read(int fd, int len)
+{
+	char buf[CHUNK];
+	int read_len;
+	cp_string *res = NULL;
+	
+	if (len == 0)
+		read_len = CHUNK;
+	else
+		read_len = len < CHUNK ? len : CHUNK;
+
+	while (len == 0 || res == NULL || res->len < len)
+	{
+		int rc = 
+			read(fd, buf, read_len);
+		if (rc <= 0) break;
+		if (res == NULL)
+		{
+			res = cp_string_create(buf, rc);
+			if (res == NULL) return NULL;
+		}
+		else
+			cp_string_cat_bin(res, buf, rc);
+	}
+
+	return res;
+}
+
+int cp_string_write(cp_string *str, int fd)
+{
+	int rc;
+	int total = 0;
+
+	while (total < str->len)
+	{
+		rc = write(fd, &str->data[total], str->len - total);
+
+		/* write sets EAGAIN when a socket is marked non-blocking and the
+		 * write would block. trying to write again could result in spinning
+		 * on the write call.
+		 */
+		if (rc == -1) 
+		{
+			if (errno == EINTR /* || errno == EAGAIN */) /* try again */ 
+				continue;
+			else 
+				break; 
+		}
+		total += rc;
+	}
+
+	return total;
+}
+
+cp_string *cp_string_read_file(char *filename)
+{
+	cp_string *res;
+	FILE *fp = fopen(filename, "rb");
+	if (fp == NULL) return NULL;
+
+	res = cp_string_read(fileno(fp), 0);
+	fclose(fp);
+
+	return res;
+}
+
+int cp_string_write_file(cp_string *str, char *filename)
+{
+	int rc;
+	FILE *fp = fopen(filename, "wb");
+	if (fp == NULL) return 0;
+
+	rc = cp_string_write(str, fileno(fp));
+	fclose(fp);
+
+	return rc;
+}
+
+#define LINELEN 81
+#define CHARS_PER_LINE 16
+
+static char *print_char = 
+	"                "
+	"                "
+	" !\"#$%&'()*+,-./"
+	"0123456789:;<=>?"
+	"@ABCDEFGHIJKLMNO"
+	"PQRSTUVWXYZ[\\]^_"
+	"`abcdefghijklmno"
+	"pqrstuvwxyz{|}~ "
+	"                "
+	"                "
+	" ???????????????"
+	"????????????????"
+	"????????????????"
+	"????????????????"
+	"????????????????"
+	"????????????????";
+
+void cp_cstring_dump(char *data, int len)
+{
+	int rc;
+	int idx;
+	char prn[LINELEN];
+	char lit[CHARS_PER_LINE + 1];
+	char hc[4];
+	short line_done = 1;
+
+	rc = len;
+	idx = 0;
+	lit[CHARS_PER_LINE] = '\0';
+	while (rc > 0)
+	{
+		if (line_done) 
+			snprintf(prn, LINELEN, "%08X: ", idx);
+		do
+		{
+			unsigned char c = data[idx];
+			snprintf(hc, 4, "%02X ", c);
+			strncat(prn, hc, 4);
+			lit[idx % CHARS_PER_LINE] = print_char[c];
+			++idx;
+		} while (--rc > 0 && (idx % CHARS_PER_LINE != 0));
+		line_done = (idx % CHARS_PER_LINE) == 0;
+		if (line_done) 
+			printf("%s  %s\n", prn, lit);
+		else if (rc == 0)
+			strncat(prn, "   ", LINELEN);
+	}
+	if (!line_done)
+	{
+		lit[(idx % CHARS_PER_LINE)] = '\0';
+		while ((++idx % CHARS_PER_LINE) != 0) 
+			strncat(prn, "   ", LINELEN);
+
+		printf("%s  %s\n", prn, lit);
+
+	}
+}
+
+const char *cp_hexdump_string(const void *data, size_t len)
+{ 
+    static char string[1024]; 
+    unsigned char *d = (unsigned char *)data; 
+    unsigned int i, left;
+                      
+    string[0] = '\0';
+    left = sizeof(string);
+    for (i = 0; len--; i += 3) { 
+        if (i >= sizeof(string) - 4)
+            break;
+        snprintf(string + i, 4, " %02x", *d++);
+    }
+
+    return string;
+}
+
+
+void cp_string_dump(cp_string *str)
+{
+	int rc;
+	int idx;
+	char prn[LINELEN];
+	char lit[CHARS_PER_LINE + 1];
+	char hc[4];
+	short line_done = 1;
+
+	rc = str->len;
+	idx = 0;
+	lit[CHARS_PER_LINE] = '\0';
+	while (rc > 0)
+	{
+		if (line_done) 
+			snprintf(prn, LINELEN, "%08X: ", idx);
+		do
+		{
+			unsigned char c = str->data[idx];
+			snprintf(hc, 4, "%02X ", c);
+			strncat(prn, hc, 4);
+			lit[idx % CHARS_PER_LINE] = print_char[c];
+			++idx;
+		} while (--rc > 0 && (idx % CHARS_PER_LINE != 0));
+		line_done = (idx % CHARS_PER_LINE) == 0;
+		if (line_done) 
+			printf("%s  %s\n", prn, lit);
+		else if (rc == 0)
+			strncat(prn, "   ", LINELEN);
+	}
+	if (!line_done)
+	{
+		lit[(idx % CHARS_PER_LINE)] = '\0';
+		while ((++idx % CHARS_PER_LINE) != 0) 
+			strncat(prn, "   ", LINELEN);
+
+		printf("%s  %s\n", prn, lit);
+	}
+}
+
+/** flip the contents of a cp_string */
+void cp_string_flip(cp_string *str)
+{
+	if (str->len)
+	{
+		char *i, *f, ch;
+		f = &str->data[str->len - 1];
+		i = str->data;
+		while (i < f)
+		{
+			ch = *i;
+			*i = *f;
+			*f = ch;
+			i++;
+			f--;
+		}
+	}
+}
+
+/* remove all occurrences of letters from str */
+cp_string *cp_string_filter(cp_string *str, char *letters)
+{
+	char *i;
+	char *f;
+
+	str->data[str->len] = '\0';
+	i = str->data;
+	while ((f = strpbrk(i, letters)))
+	{
+		i = f;
+		while (*f && strchr(letters, *f)) f++;
+		if (*f)
+		{
+			memmove(i, f, str->len - (f - str->data));
+			str->len -= f - i;
+			str->data[str->len] = '\0';
+		}
+		else
+		{
+			*i = '\0';
+			str->len -= str->len - (i - str->data);
+			break;
+		}
+	}
+
+	return str;
+}
+
+/** @} */
+
+
+char *del_char_from_string(char *str, char delchar)
+{
+    char *idx = str;
+    char *end = str;
+    while (*idx)
+    {
+        if (*idx == delchar)
+        {
+            ++idx;
+        }
+        else
+        {
+            *end = *idx;
+            ++end;
+            ++idx;
+        }
+    }
+    *end = '\0';
+    return str;
+}
+
+int split_string_to_value(char *str, char *fmt, ...)
+{
+    va_list     ap;
+
+    int         *iPtr;
+    long        *lPtr;
+    char        *pcPtr;
+
+    char        delim[2]={*(fmt+2), '\0'};
+    char        *result;
+
+    va_start(ap, fmt);
+
+    result = strtok( str, delim );
+
+    while(*fmt)
+    {
+        switch (*fmt++)
+        {
+            case 's':  /* string */
+                pcPtr = va_arg(ap, char *);
+                if(NULL!= result)
+                {
+                    if(NULL!=pcPtr)
+                    {
+                        strcpy(pcPtr, result);
+                    }
+                    result = strtok( NULL, delim );
+                }
+                else
+                    goto OUT;
+
+                break;
+
+            case 'd':  /*  int */
+                iPtr = va_arg(ap, int *);
+                if(NULL!= result)
+                {
+                    if(NULL!=iPtr)
+                    {
+                        *iPtr = atoi(result);
+                    }
+                    result = strtok( NULL, delim );
+                }
+                else
+                    goto OUT;
+
+                break;
+
+            case 'l':  /*  long */
+                lPtr = va_arg(ap, long *);
+                if(NULL!= result)
+                {
+                    if(NULL!=lPtr)
+                    {
+                        *lPtr = strtol(result, NULL, 10);
+                    }
+                    result = strtok( NULL, delim );
+                }
+                else
+                    goto OUT;
+
+                break;
+
+            case 'x':  /*  long hex*/
+                lPtr = va_arg(ap, long *);
+                if(NULL!= result)
+                {
+                    if(NULL!=lPtr)
+                    {
+                        *lPtr = strtol(result, NULL, 16);
+                    }
+                    result = strtok( NULL, delim );
+                }
+                else
+                    goto OUT;
+
+                break;
+        }
+    }
+
+OUT:
+    va_end(ap);
+    return 0;
+}
+
diff --git a/program/cp_library/cp_string.h b/program/cp_library/cp_string.h
new file mode 100644
index 0000000..aeea28f
--- /dev/null
+++ b/program/cp_library/cp_string.h
@@ -0,0 +1,86 @@
+#ifndef _CP_STRING_H
+#define _CP_STRING_H
+
+/** @{ */
+/**
+ * @file
+ * cp_string - 'safe' string allowing binary content 
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdarg.h>
+
+/** cp_string definition */
+typedef struct _cp_string
+{
+	int size;    /**< size allocated   */
+	int len;     /**< size used        */
+	char *data;  /**< internal buffer  */
+} cp_string;
+
+/** allocate a new cp_string */
+cp_string *cp_string_create(char *data, int len);
+/** allocate an empty cp_string with a given buffer size */
+cp_string *cp_string_create_empty(int initial_size);
+/** deallocate a cp_string */
+void cp_string_destroy(cp_string *str);
+/** Sets string data to 0 */
+void cp_string_clear_data(cp_string *str);
+/** copies the content of a null terminated c string */
+cp_string *cp_string_cstrcpy(cp_string *str, char *cstr);
+/** copies the content of a cp_string */
+//cp_string *cp_string_cp(cp_string *dst, cp_string *src);
+int cp_string_copy(cp_string *dst, cp_string *src);
+int cp_string_move(cp_string *dst, cp_string *src);
+/** copy the string into *dst  */
+int cp_string_cstrcopy(cp_string *dst, char *string, int len);
+/** creates a copy of src string. internal buffer is duplicated. */
+cp_string *cp_string_dup(cp_string *src);
+/** creates a cp_string with src as its content */
+cp_string *cp_string_cstrdup(char *src);
+/** concatenate cp_strings */
+cp_string *cp_string_cat(cp_string *str, cp_string *appendum);
+/** append data from a buffer */
+cp_string *cp_string_cat_bin(cp_string *str, void *bin, int len);
+/** append data from a null terminated c string */
+cp_string *cp_string_cstrcat(cp_string *str, char *cstr);
+/** append a character to a string */
+cp_string *cp_string_append_char(cp_string *str, char ch);
+/** compare cp_strings */
+int cp_string_cmp(cp_string *s1, cp_string *s2);
+/** return a pointer to the internal buffer */
+char *cp_string_tocstr(cp_string *str);
+/** return the length of the internal buffer */
+int cp_string_len(cp_string *s);
+/** return the internal buffer */
+char *cp_string_data(cp_string *s);
+
+/** read len bytes from an open file descriptor (blocking) */
+cp_string *cp_string_read(int fd, int len);
+/** write the content of a cp_string to a file descriptor (blocking) */
+int cp_string_write(cp_string *str, int fd);
+/** read the contents of a file into a cp_string */
+cp_string *cp_string_read_file(char *filename);
+/** write the contents of a cp_string to a file */
+int cp_string_write_file(cp_string *str, char *filename);
+
+/** flip the contents of a cp_string */
+void cp_string_flip(cp_string *str);
+/** remove all occurrences of letters from str */
+cp_string *cp_string_filter(cp_string *str, char *letters);
+
+/** dump a cp_string to stdout */
+const char *cp_hexdump_string(const void *data, size_t len);
+void cp_string_dump(cp_string *str);
+void cp_cstring_dump(char *data, int len);
+
+char *del_char_from_string(char *str, char delchar);
+int split_string_to_value(char *str, char *fmt, ...);
+
+/** @} */
+
+#endif
+
diff --git a/program/cp_library/cp_time.h b/program/cp_library/cp_time.h
new file mode 100644
index 0000000..3a35e1e
--- /dev/null
+++ b/program/cp_library/cp_time.h
@@ -0,0 +1,123 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 CoherentPlus Sdn. Bhd.
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_time.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(02/23/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/23/2012 07:46:37 AM"
+ *                 
+ ********************************************************************************/
+#ifndef __CP_TIME_H
+#define __CP_TIME_H
+
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <time.h>
+
+#include <linux/rtc.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+typedef struct __DATE_TIME
+{
+    int iYear;
+    int iMonth;
+    int iDay;
+    int iHour;
+    int iMinute;
+    int iSecond;
+    int iDayOfWeek;
+} DATE_TIME;
+
+static inline void micro_second_sleep(unsigned long ms)
+{
+    struct timespec cSleep;
+    unsigned long ulTmp;
+    cSleep.tv_sec = ms / 1000;
+    if (cSleep.tv_sec == 0)
+    {
+        ulTmp = ms * 10000;
+        cSleep.tv_nsec = ulTmp * 100;
+    }
+    else
+    {
+        cSleep.tv_nsec = 0;
+    } 
+    
+    nanosleep(&cSleep, 0);
+}
+
+/*UNIT: micro second*/
+static inline unsigned long time_now()
+{
+    struct timeval now; 
+    gettimeofday(&now, 0);
+    return (now.tv_sec * 1000) + (now.tv_usec / 1000);
+}
+
+/*UNIT: micro second*/
+static inline unsigned long time_elapsed(unsigned long start)
+{
+    unsigned long current = time_now(); 
+    
+    if (current < start)
+    {
+        return (0xFFFFFFFF - start) + current;
+    }
+
+    //printf("time_elapsed: %ld\n", current-start);
+    return current - start;
+}
+               
+static inline void get_current_time(DATE_TIME * date)
+{
+    time_t now = time(NULL);
+    struct tm *tnow = localtime(&now); 
+    
+    memset(date, 0, sizeof(DATE_TIME)); 
+    date->iYear = 1900 + tnow->tm_year;
+    date->iMonth = 1 + tnow->tm_mon;
+    date->iDay = tnow->tm_mday;
+
+    date->iHour = tnow->tm_hour;
+    date->iMinute = tnow->tm_min;
+    date->iSecond = tnow->tm_sec; 
+    date->iDayOfWeek = tnow->tm_wday; 
+    return;
+}
+#define get_sys_time(date)   get_current_time(date)
+
+static inline int get_rtc_time(DATE_TIME *date)
+{
+    int                 rv, fd = -1;
+    struct rtc_time     rtc_tm;  
+
+    memset(date, 0, sizeof(DATE_TIME));
+
+    if ((fd=open("/dev/rtc0", O_RDONLY)) < 0)
+        return -1;
+
+    if((rv=ioctl(fd, RTC_RD_TIME, &rtc_tm)) < 0)
+        return -2;
+
+    date->iYear = 1900 + rtc_tm.tm_year;
+    date->iMonth = 1 + rtc_tm.tm_mon;
+    date->iDay = rtc_tm.tm_mday;
+
+    date->iHour = rtc_tm.tm_hour;
+    date->iMinute = rtc_tm.tm_min;
+    date->iSecond = rtc_tm.tm_sec;
+    date->iDayOfWeek = rtc_tm.tm_wday;
+
+    close(fd);
+
+    return 0;
+}
+
+#endif
diff --git a/program/cp_library/cp_vector.c b/program/cp_library/cp_vector.c
new file mode 100644
index 0000000..525ea0a
--- /dev/null
+++ b/program/cp_library/cp_vector.c
@@ -0,0 +1,96 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_vector.c
+ *    Description:  This file is for a dynamic array
+ *                 
+ *        Version:  1.0.0(11/12/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/12/2012 11:20:30 AM"
+ *                 
+ ********************************************************************************/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "cp_vector.h"
+#include "cp_common.h"
+
+CP_VECTOR *cp_vector_init(int size)
+{
+    CP_VECTOR  *vector = NULL;
+    if(size < 0)
+        return NULL;
+
+    vector = (CP_VECTOR *)t_malloc(sizeof(CP_VECTOR));
+    if(!vector)
+    {
+        return NULL;
+    }
+
+    vector->mem = t_malloc(size*sizeof(void *));
+    if(!vector->mem)
+    {
+        t_free(vector);
+        return NULL;
+    }
+
+    memset(vector->mem, 0, size);
+    vector->size = size;
+    vector->used = 0;
+
+    return vector;
+}
+
+void *cp_vector_add(CP_VECTOR *vector, int index, void *item)
+{
+    if(index<0 || index>vector->size)
+        return NULL;
+
+    vector->mem[index]=item;
+    vector->used++;
+
+    return item;
+}
+
+void *cp_vector_del(CP_VECTOR *vector, int index)
+{
+    void    *save;
+
+    if(index<0 ||index>vector->size)
+        return NULL;
+
+    save = vector->mem[index];
+
+    vector->mem[index]=NULL;
+    vector->used--;
+
+    return save;
+}
+
+void *cp_vector_get(CP_VECTOR *vector, int index)
+{
+    if(index<0 ||index>vector->size)
+        return NULL;
+
+    return vector->mem[index];
+}
+
+void cp_vector_destroy(CP_VECTOR *vector)
+{
+    if(!vector)
+       return;
+
+    if(vector->mem)
+    {
+        t_free(vector->mem);
+    }
+
+    t_free(vector);
+}
+
+
+
diff --git a/program/cp_library/cp_vector.h b/program/cp_library/cp_vector.h
new file mode 100644
index 0000000..ffba647
--- /dev/null
+++ b/program/cp_library/cp_vector.h
@@ -0,0 +1,40 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_vector.h
+ *    Description:  This head file is for dynamic array
+ *
+ *        Version:  1.0.0(11/12/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/12/2012 11:20:53 AM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_VECTOR
+#define __CP_VECTOR
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct _CP_VECTOR
+{
+    int           size;
+    int           used;
+    void          **mem;
+} CP_VECTOR;
+
+#define cp_vector_count(v)  ((v) ? (v)->used : 0)
+#define cp_vector_size(v)  ((v) ? (v)->size : 0)
+
+CP_VECTOR *cp_vector_init(int size);
+void *cp_vector_add(CP_VECTOR *vector, int index, void *item);
+void *cp_vector_del(CP_VECTOR *vector, int index);
+void *cp_vector_get(CP_VECTOR *vector, int index);
+void cp_vector_destroy(CP_VECTOR *vector);
+
+#endif
+
+
diff --git a/program/cp_library/cscope.in.out b/program/cp_library/cscope.in.out
new file mode 100644
index 0000000..12ecb10
--- /dev/null
+++ b/program/cp_library/cscope.in.out
Binary files differ
diff --git a/program/cp_library/cscope.out b/program/cp_library/cscope.out
new file mode 100644
index 0000000..43e51a0
--- /dev/null
+++ b/program/cp_library/cscope.out
@@ -0,0 +1,132502 @@
+cscope 15 $HOME/.project/aliyun/fl2440/program/cp_library -q 0000007577 0000736519
+	@at91_ioctl.h
+
+14 #i�de�
+__AT91_IOCTL_H
+
+
+15 
+	#__AT91_IOCTL_H
+
+
+	)
+
+17 
+	~<asm/io�l.h
+>
+
+18 #i�de�
+__KERNEL__
+
+
+19 
+	~<sys/io�l.h
+>
+
+26 
+	#PLATDRV_MAGIC
+ 0x60
+
+	)
+
+33 
+	#SET_DRV_DEBUG
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x01)
+
+	)
+
+34 
+	#GET_DRV_VER
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x02)
+
+	)
+
+41 
+	#GET_BATTERY_STAT
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x06)
+
+	)
+
+42 
+	#GET_GMTUBE_VHIGH
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x08)
+
+	)
+
+43 
+	#GET_GPRS_VBAT
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x09)
+
+	)
+
+44 
+	#GET_ADC_DATA
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x10)
+
+	)
+
+45 
+	#SET_ADC_INTERVEL
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x11)
+
+	)
+
+49 
+	#BUZZER_ON
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x12)
+
+	)
+
+50 
+	#BUZZER_BEEP
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x13)
+
+	)
+
+51 
+	#BUZZER_OFF
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x14)
+
+	)
+
+52 
+	#BUZZER_FREQ
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x15)
+
+	)
+
+55 
+	#GET_BUTTON_STATUS
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x17)
+
+	)
+
+58 
+	#LED_OFF
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x18)
+
+	)
+
+59 
+	#LED_ON
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x19)
+
+	)
+
+60 
+	#LED_BLINK
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x1A)
+
+	)
+
+61 
+	#TURN_ALL_LED
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x1B)
+
+	)
+
+64 
+	#ZIGBEE_RESET
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x1E)
+
+	)
+
+65 
+	#ZIGBEE_STATUS
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x1F)
+
+	)
+
+70 
+	#GSM_SET_POWER
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x30�
+
+	)
+
+71 
+	#GSM_GET_POWER
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x31�
+
+	)
+
+72 
+	#GSM_GET_ADC
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x32�
+
+	)
+
+74 
+	#GPS_SET_POWER
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x3A�
+
+	)
+
+75 
+	#GPS_GET_POWER
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x3B�
+
+	)
+
+80 
+	#GM_SET_MEASURE_RADI
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x40�
+
+	)
+
+81 
+	#GM_GET_MEASURE_DOSE
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x41�
+
+	)
+
+82 
+	#GM_SET_DUTY
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x42�
+
+	)
+
+83 
+	#GM_SET_INTERVAL
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x43�
+
+	)
+
+84 
+	#GM_GET_VOLTAGE
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x44�
+
+	)
+
+86 
+	#GM_SET_POWER
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x45�
+
+	)
+
+87 
+	#GM_SET_PWM_TC
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x46�
+
+	)
+
+88 
+	#GM_SET_MEASURE_TC
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x47�
+
+	)
+
+89 
+	#GM_SET_TIMER_TC
+ 
+	`_IO
+ (
+PLATDRV_MAGIC
+, 0x48�
+
+	)
+
+	@cp_array.c
+
+14 
+	~<�dlib.h
+>
+
+15 
+	~"�_��y.h
+"
+
+16 
+	~"�_comm�.h
+"
+
+17 
+	~"�_logg�.h
+"
+
+19 
+CP_ARRAY
+ *
+	$�_��y_��
+(
+CP_ARRAY
+ *
+��y
+, 
+size
+)
+
+21 
+i
+;
+
+23 if�!
+��y
+ )
+
+25 if�!(
+��y
+=
+	`t_m�loc
+((*array))) )
+
+27  
+NULL
+;
+
+31 
+	`mem�t
+(
+��y
+, 0, (*array));
+
+32 
+��y
+->
+�ag
+ |�
+CP_ARRAY_FLAG_MALLOC
+;
+
+38 
+	`mem�t
+(
+��y
+, 0, (*array));
+
+41 
+��y
+->
+size
+ = size;
+
+42 if�!
+��y
+->
+d�a
+ && !׼ay->d�a=(**)
+	`m�loc
+׼ay->
+size
+*(*))) )
+
+44 
+	`�_��y_�rm
+(
+��y
+);
+
+45  
+NULL
+;
+
+48 
+i
+=0; i<
+��y
+->
+size
+; i++)
+
+50 
+��y
+->
+d�a
+[
+i
+] = 
+NULL
+;
+
+53  
+��y
+;
+
+54 
+	}
+}
+
+56 
+	$�_��y_�rm
+(
+CP_ARRAY
+ *
+��y
+)
+
+58 if(!
+��y
+)
+
+61 if(
+��y
+->
+d�a
+)
+
+62 
+	`t_�
+(
+��y
+->
+d�a
+);
+
+64 if(
+��y
+->
+�ag
+&
+CP_ARRAY_FLAG_MALLOC
+)
+
+66 
+	`t_�
+(
+��y
+);
+
+70 
+	}
+}
+
+73 
+	$�_��y_add
+(
+CP_ARRAY
+ *
+��y
+, *
+d�a
+)
+
+75 
+i
+;
+
+76 *
+��y
+;
+
+78 if(!
+��y
+ || !
+d�a
+)
+
+80 
+	`log_�r
+("Invalude input�rguments\n");
+
+85 if(
+��y
+->
+�ems
+ >�y->
+size
+)
+
+87 
+	`log_�r
+("��y i�fu�,��nهdd d��[%p]\n", 
+d�a
+);
+
+92 
+	`�_li�_��y_f�_�ch
+(
+��y
+, 
+i
+, 
+��y
+)
+
+94 if�!
+��y
+ )
+
+96 
+	`log_dbg
+("A�ay[%d]�dd d�a[%p] ok\n", 
+i
+, 
+d�a
+);
+
+97 
+��y
+->
+d�a
+[
+i
+] = data;
+
+98 
+��y
+->
+�ems
+ ++;
+
+103  
+i
+;
+
+104 
+	}
+}
+
+106 
+	$�_��y_rm_by�dex
+(
+CP_ARRAY
+ *
+��y
+, 
+�dex
+)
+
+109 if(!
+��y
+ || 
+�dex
+<0)
+
+111 
+	`log_�r
+("Invalude input�rguments\n");
+
+115 if(
+��y
+->
+d�a
+[
+�dex
+])
+
+117 
+��y
+->
+�ems
+ --;
+
+118 
+��y
+->
+d�a
+[
+�dex
+] = 
+NULL
+;
+
+120 
+	}
+}
+
+122 
+	$�_��y_rm_byd�a
+(
+CP_ARRAY
+ *
+��y
+, *
+d�a
+)
+
+124 
+i
+, 
+rv
+ = -3;
+
+125 *
+��y
+;
+
+127 if(!
+��y
+ || !
+d�a
+)
+
+129 
+	`log_�r
+("Invalude input�rguments\n");
+
+133 if(
+��y
+->
+�ems
+ <= 0)
+
+135 
+	`log_�r
+("��y i�em�y,��nلemov�d��[%p]\n", 
+d�a
+);
+
+140 
+	`�_li�_��y_f�_�ch
+(
+��y
+, 
+i
+, 
+��y
+)
+
+142 if�
+��y
+ =�
+d�a
+ )
+
+144 
+��y
+->
+�ems
+ --;
+
+145 
+��y
+->
+d�a
+[
+i
+] = 
+NULL
+;
+
+146 
+rv
+ = 0;
+
+151  
+rv
+;
+
+152 
+	}
+}
+
+154 
+	$�_��y_�av�
+(
+CP_ARRAY
+ *
+��y
+)
+
+156 
+i
+;
+
+157 *
+d�a
+;
+
+160 
+	`�_li�_��y_f�_�ch
+(
+��y
+, 
+i
+, 
+d�a
+)
+
+162 
+	`log_dbg
+("��y d�a[%d] sav�d��[%p]\n", 
+i
+, 
+d�a
+);
+
+166 
+	}
+}
+
+	@cp_array.h
+
+14 #i�de�
+__CP_ARRAY_H
+
+
+15 
+	#__CP_ARRAY_H
+
+
+	)
+
+17 
+	#CP_ARRAY_FLAG_MALLOC
+ (1<<0)
+
+	)
+
+18 
+	s_CP_ARRAY
+
+
+20 
+	m�ag
+;
+
+21 
+	msize
+;
+
+22 
+	m�ems
+;
+
+23 **
+	md�a
+;
+
+24 } 
+	tCP_ARRAY
+;
+
+26 
+	#�_��y_is_fu�
+(
+�r
+��׼)->
+size
+-1==׼)->
+�ems
+ ? 1 :0 )
+
+	)
+
+27 
+	#�_��y_is_em�y
+(
+�r
+��0==׼)->
+�ems
+ ? 1 : 0)
+
+	)
+
+28 
+	#�_��y_cou�
+(
+�r
+��׼)->
+�ems
+ )
+
+	)
+
+29 
+	#�_��y_size
+(
+�r
+��׼)->
+size
+-1 )
+
+	)
+
+31 
+	#�_li�_��y_f�_�ch
+(
+�r
+, 
+i
+, 
+��y
+�i=0,��y��->
+d�a
+[i]; i<�r->
+size
+; ++i,��y=i<�r->size?�r->d�a[i]:
+NULL
+)
+
+	)
+
+34 
+CP_ARRAY
+ *
+�_��y_��
+(CP_ARRAY *
+��y
+, 
+size
+);
+
+35 
+�_��y_�rm
+(
+CP_ARRAY
+ *
+��y
+);
+
+36 
+�_��y_add
+(
+CP_ARRAY
+ *
+��y
+, *
+d�a
+);
+
+37 
+�_��y_rm_by�dex
+(
+CP_ARRAY
+ *
+��y
+, 
+�dex
+);
+
+38 
+�_��y_rm_byd�a
+(
+CP_ARRAY
+ *
+��y
+, *
+d�a
+);
+
+39 
+�_��y_�av�
+(
+CP_ARRAY
+ *
+��y
+);
+
+	@cp_atcmd.c
+
+14 
+	~"�_�cmd.h
+"
+
+15 
+	~"�_�r�g.h
+"
+
+16 
+	~"�_logg�.h
+"
+
+17 
+	~"�_time.h
+"
+
+19 #i�de�
+ATCMD_REPLY_LEN
+
+
+20 
+	#ATCMD_REPLY_LEN
+ 512
+
+	)
+
+29 
+	$�nd_�cmd_check_ok
+(
+COM_PORT
+ *
+comp�t
+, *
+�cmd
+, 
+timeout
+)
+
+31 
+�tv�
+;
+
+32 
+�tv�
+ = 
+	`�nd_�cmd
+(
+comp�t
+, 
+�cmd
+, "OK\r\n", "ERROR\r\n", 
+timeout
+, 
+NULL
+, 0);
+
+34  0==
+�tv�
+ ? 0 : -2;
+
+35 
+	}
+}
+
+45 
+	$�nd_�cmd_check_v�ue
+(
+COM_PORT
+ *
+comp�t
+, *
+�cmd
+, 
+timeout
+, *
+buf
+, 
+buf_�n
+)
+
+47 
+i
+ = 0;
+
+48 
+�tv�
+=0;
+
+49 
+tmp
+[
+ATCMD_REPLY_LEN
+];
+
+50 *
+��t
+;
+
+52 if(
+NULL
+==
+buf
+)
+
+54 
+	`log_�r
+("Function call�rguments�rror!\n");
+
+58 
+	`mem�t
+(
+tmp
+, 0, (tmp));
+
+59 
+�tv�
+ = 
+	`�nd_�cmd
+(
+comp�t
+, 
+�cmd
+, "OK\r\n", "ERROR\r\n", 
+timeout
+, 
+tmp
+, (tmp));
+
+60 if�0 !�
+�tv�
+)
+
+66 if(
+NULL
+ !�(
+��t
+=
+	`�rchr
+(
+tmp
+, '\n')) )
+
+68 
+��t
+ ++;
+
+69 *
+��t
+!='\r' && 
+i
+<
+buf_�n
+-1)
+
+71 
+buf
+[
+i
+++] = *
+��t
+;
+
+72 
+��t
+ ++;
+
+75 
+buf
+[
+i
+] = '\0';
+
+77  ('\0'==
+buf
+[0] ? -3 : 0);
+
+78 
+	}
+}
+
+88 
+	$�nd_�cmd_check_�que�
+(
+COM_PORT
+ *
+comp�t
+, *
+�cmd
+, 
+timeout
+, *
+buf
+, 
+buf_�n
+)
+
+90 
+�tv�
+;
+
+91 
+i
+ = 0;
+
+92 
+tmp
+[
+ATCMD_REPLY_LEN
+];
+
+93 *
+�r
+ = 
+NULL
+;
+
+95 if(
+NULL
+==
+buf
+)
+
+97 
+	`log_�r
+("%s(��·rgum�t��r�!\n", 
+__FUNCTION__
+);
+
+101 
+	`mem�t
+(
+tmp
+, 0, (tmp));
+
+102 
+�tv�
+ = 
+	`�nd_�cmd
+(
+comp�t
+, 
+�cmd
+, "OK\r\n", "ERROR\r\n", 
+timeout
+, 
+tmp
+, (tmp));
+
+103 if�0 !�
+�tv�
+)
+
+109 if(
+NULL
+ !�(
+�r
+=
+	`�rchr
+ (
+tmp
+, ':')) )
+
+111 
+�r
+ += 2;
+
+112 *
+�r
+!='\r' && 
+i
+<
+buf_�n
+-1)
+
+114 
+buf
+[
+i
+++] = *
+�r
+;
+
+115 
+�r
+ ++;
+
+118 
+buf
+[
+i
+] = '\0';
+
+120  ('\0'==
+buf
+[0] ? -3 : 0);
+
+121 
+	}
+}
+
+128 
+	$�cmd_check_�_�ady
+(
+COM_PORT
+ *
+comp�t
+)
+
+130 
+�tv�
+;
+
+131 
+�tv�
+=
+	`�nd_�cmd_check_ok
+(
+comp�t
+, "ATE0\r", 500);
+
+132 if(
+�tv�
+)
+
+134 
+	`log_�r
+("ATE0 check AT command�eady [FAILED]\n");
+
+137 
+	`log_�ml
+("ATE0 check AT command�eady [OK]\n");
+
+139  
+�tv�
+;
+
+140 
+	}
+}
+
+146 
+	$�cmd_check_sim_v�id
+(
+COM_PORT
+ *
+comp�t
+)
+
+148 
+�tv�
+ = 0;
+
+149 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+151 
+�tv�
+ = 
+	`�nd_�cmd_check_�que�
+(
+comp�t
+, "AT+CPIN?\r", 800, 
+�cv_buf
+, (recv_buf));
+
+152 if(0x00 !�
+�tv�
+)
+
+154 
+�tv�
+ = 1;
+
+155 
+	`log_w�n
+("AT+CPIN? Check SIM Validation: [FAILED]\n");
+
+156  
+�tv�
+;
+
+159 if(
+	`�r�r
+(
+�cv_buf
+, "READY"))
+
+161 
+	`log_�ml
+("AT+CPIN? Check SIM Validataion: [OK]\n");
+
+166 
+	}
+}
+
+169 
+	$�cmd_check_g�s_sig�l
+(
+COM_PORT
+ *
+comp�t
+)
+
+171 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+172 
+�tv�
+;
+
+173 
+sig�l
+ = -1;
+
+175 
+	`mem�t
+(
+�cv_buf
+, 0, (recv_buf));
+
+176 
+�tv�
+ = 
+	`�nd_�cmd_check_�que�
+(
+comp�t
+, "AT+CSQ\r", 3000, 
+�cv_buf
+, (recv_buf));
+
+177 if�0 !�
+�tv�
+)
+
+179 
+	`log_�r
+("AT+CSQ Check Signal Strength: [FAILED]\n");
+
+180  
+�tv�
+;
+
+183 
+	`�l�_�r�g_to_v�ue
+(
+�cv_buf
+, "%d,%d", &
+sig�l
+, 
+NULL
+);
+
+185 
+	`log_�ml
+("AT+CSQ Check Sig��S��gth: [%d]\n", 
+sig�l
+);
+
+187  
+sig�l
+;
+
+188 
+	}
+}
+
+191 
+	$�cmd_check_g�s_�gi��
+(
+COM_PORT
+ *
+comp�t
+)
+
+193 
+�tv�
+, 
+��
+ = -1;
+
+194 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+196 
+	`mem�t
+(
+�cv_buf
+, 0, (recv_buf));
+
+197 
+�tv�
+ = 
+	`�nd_�cmd_check_�que�
+(
+comp�t
+, "AT+CREG?\r", 3000, 
+�cv_buf
+, (recv_buf));
+
+198 if�0 !�
+�tv�
+)
+
+200 
+	`log_�r
+("AT+CREG? Check SIM card Register: [FAILED]\n");
+
+201  
+��
+;
+
+204 
+	`�l�_�r�g_to_v�ue
+(
+�cv_buf
+, "%d,%d", 
+NULL
+, &
+��
+);
+
+205 
+	`log_�ml
+("AT+CREG? Check SIM C�d Regi��: [%d]\n", 
+��
+);
+
+207  
+��
+;
+
+208 
+	}
+}
+
+211 
+	$�cmd_check_g�s_���r
+(
+COM_PORT
+ *
+comp�t
+, *
+���r
+)
+
+213 
+�tv�
+;
+
+214 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+216 if(
+���r
+ =�
+NULL
+)
+
+221 
+�tv�
+ = 
+	`�nd_�cmd_check_�que�
+(
+comp�t
+, "AT+COPS?\r", 5000, 
+�cv_buf
+, (recv_buf));
+
+222 if(
+�tv�
+)
+
+224 
+	`log_w�n
+("AT+COPS? Check SIM Card Carrier: [FAILED]\n");
+
+225  
+�tv�
+;
+
+228 
+	`�l�_�r�g_to_v�ue
+(
+�cv_buf
+, "%d,%d,%s,%d", 
+NULL
+, NULL, 
+���r
+, NULL);
+
+229 
+	`d�_ch�_�om_�r�g
+(
+���r
+, '\"');
+
+231 
+	`log_�ml
+("AT+COPS? Check SIM C�d C�r�r: [%s]\n", 
+���r
+);
+
+234 
+	}
+}
+
+236 
+	$�cmd_check_g�s_mcc_mnc
+(
+COM_PORT
+ *
+comp�t
+, *
+mcc_mnc
+)
+
+238 
+�tv�
+;
+
+239 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+240 
+��us
+;
+
+241 
+mcc
+[5];
+
+242 
+mnc
+[5];
+
+243 *
+�r
+ = 
+NULL
+;
+
+245 
+�tv�
+=
+	`�nd_�cmd_check_ok
+(
+comp�t
+, "AT+QENG=1\r", 1000);
+
+246 if(
+�tv�
+)
+
+248 
+	`log_�r
+("Send AT command AT+QENG=1 failure\n");
+
+249  
+�tv�
+;
+
+252 
+�tv�
+ = 
+	`�nd_�cmd
+(
+comp�t
+, "AT+QENG?\r", "OK\r\n", "ERROR\r\n", 5000, 
+�cv_buf
+, (recv_buf));
+
+253 if(
+�tv�
+)
+
+255 
+	`log_�r
+("AT+QENG? Check GPRS MCC�nd MNC failure\n");
+
+256  
+�tv�
+;
+
+263 if(
+NULL
+ !�(
+�r
+=
+	`��chr
+ (
+�cv_buf
+, ':')) )
+
+265 
+	`�l�_�r�g_to_v�ue
+(
+�r
+, "%d,%s,%s,%s", &
+��us
+, 
+mcc
+, 
+mnc
+, 
+NULL
+);
+
+266 if(!
+��us
+)
+
+268 
+	`�r�tf
+(
+mcc_mnc
+, "%s-%s", 
+mcc
+, 
+mnc
+);
+
+269 
+	`log_�ml
+("AT+QGSMLOC=1 Check GPRS Lo�ti� MCC-MNC: %s\n", 
+mcc_mnc
+);
+
+274 
+	`��tf
+("�r: %s\n", 
+�r
+);
+
+277 
+	}
+}
+
+280 
+	$�cmd_check_g�s_lo�ti�
+(
+COM_PORT
+ *
+comp�t
+, 
+GPRS_LOCATION
+ *
+loc
+)
+
+282 
+�tv�
+;
+
+283 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+284 
+��us
+;
+
+286 
+�tv�
+=
+	`�nd_�cmd_check_ok
+(
+comp�t
+, "AT+QIFGCNT=0\r", 1000);
+
+287 if(
+�tv�
+)
+
+289 
+	`log_w�n
+("Send AT command AT+QIFGCNT=0 failure\n");
+
+290  
+�tv�
+;
+
+293 
+�tv�
+ = 
+	`�nd_�cmd_check_�que�
+(
+comp�t
+, "AT+QGSMLOC=1\r", 10000, 
+�cv_buf
+, (recv_buf));
+
+294 if(
+�tv�
+)
+
+296 
+	`log_w�n
+("AT+QGSMLOC=1 Check GPRS Location: [FAILED]\n");
+
+297  
+�tv�
+;
+
+301 
+	`�l�_�r�g_to_v�ue
+(
+�cv_buf
+, "%d,%s,%s,%s,%s", &
+��us
+, 
+loc
+->
+l�g�ude
+,�oc->
+�t�ude
+,�oc->
+d�e
+,�oc->
+time
+);
+
+303 if(
+��us
+)
+
+305 
+	`mem�t
+(
+loc
+->
+l�g�ude
+, 0, (loc->longitude));
+
+306 
+	`mem�t
+(
+loc
+->
+�t�ude
+, 0, (loc->latitude));
+
+307 
+	`mem�t
+(
+loc
+->
+d�e
+, 0, (loc->date));
+
+308 
+	`mem�t
+(
+loc
+->
+time
+, 0, (loc->time));
+
+309 
+	`log_w�n
+("AT+QGSMLOC=1 Check GPRS Lo�ti� fa�u�: %s\n", 
+�cv_buf
+);
+
+313 
+	`log_�ml
+("GPRS�o�tiڄesu�=%d���ude,l�g�ude: [%s,%s]\n", 
+��us
+, 
+loc
+->
+�t�ude
+,�oc->
+l�g�ude
+);
+
+314 
+	`log_�ml
+("GPRS D���d�ime: %s,%s\n", 
+loc
+->
+d�e
+,�oc->
+time
+);
+
+316  
+�tv�
+;
+
+317 
+	}
+}
+
+320 
+	$�cmd_�t_�tw�k_mode
+(
+COM_PORT
+ *
+comp�t
+, 
+mode
+)
+
+322 
+�tv�
+;
+
+323 
+�cmd
+[64]={0};
+
+325 
+	`�r�tf
+ (
+�cmd
+, "AT+CNMP=%d\r", 
+mode
+);
+
+326 if(0 !�(
+�tv�
+=
+	`�nd_�cmd_check_ok
+(
+comp�t
+, 
+�cmd
+, 3000)) )
+
+328 
+	`log_w�n
+("AT+CNMP S� N�w�k Mod�a�%d: [FAILED]\n", 
+mode
+);
+
+329  
+�tv�
+;
+
+331 
+	`log_�ml
+("AT+CNMP=%d S� N�w�k Mode: [OK]\n", 
+mode
+);
+
+334 
+	`���y
+ (
+�cmd
+, "AT+CNAOP=2\r", (atcmd));
+
+335 if(0 !�(
+�tv�
+=
+	`�nd_�cmd_check_ok
+(
+comp�t
+, 
+�cmd
+, 3000)) )
+
+337 
+	`log_w�n
+("AT+CNAOP=2 Set Acquisitions order�reference�o WCDMA,GSM [FAILED]\n");
+
+338  
+�tv�
+;
+
+340 
+	`log_�ml
+("AT+CNAOP=2 Set Network Preference [OK]\n");
+
+343 
+	}
+}
+
+345 
+	$�cmd_check_g�s_�me
+(
+COM_PORT
+ *
+comp�t
+, *
+�me
+)
+
+347 
+�tv�
+;
+
+348 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+350 if(
+�me
+ =�
+NULL
+)
+
+355 
+�tv�
+ = 
+	`�nd_�cmd_check_v�ue
+(
+comp�t
+, "AT+CGMM\r", 5000, 
+�cv_buf
+, (recv_buf));
+
+356 if(
+�tv�
+)
+
+358 
+	`log_w�n
+("AT+CGMM Check GPRS Module Name: [FAILED]\n");
+
+359  
+�tv�
+;
+
+362 
+	`�r�y
+(
+�me
+, 
+�cv_buf
+);
+
+364 
+	`log_�ml
+("AT+CGMM Check GPRS Modu� Name: [%s]\n", 
+�me
+);
+
+367 
+	}
+}
+
+370 
+	$�cmd_check_g�s_v�si�
+(
+COM_PORT
+ *
+comp�t
+, *
+v�si�
+)
+
+372 
+�tv�
+;
+
+373 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+375 if(
+v�si�
+ =�
+NULL
+)
+
+380 
+�tv�
+ = 
+	`�nd_�cmd_check_�que�
+(
+comp�t
+, "AT+CGMR\r", 5000, 
+�cv_buf
+, (recv_buf));
+
+381 if(
+�tv�
+)
+
+383 
+	`log_w�n
+("AT+CGMR Check GPRS Module Version: [FAILED]\n");
+
+384  
+�tv�
+;
+
+387 
+	`�r�y
+(
+v�si�
+, 
+�cv_buf
+);
+
+388 
+	`log_�ml
+("AT+CGMR Check GPRS Modu� V�si�: [%s]\n", 
+v�si�
+);
+
+391 
+	}
+}
+
+393 
+	$�cmd_check_g�s_�mi
+(
+COM_PORT
+ *
+comp�t
+, *
+�mi
+)
+
+395 
+�tv�
+;
+
+396 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+398 if(
+�mi
+ =�
+NULL
+)
+
+403 
+�tv�
+ = 
+	`�nd_�cmd_check_v�ue
+(
+comp�t
+, "AT+CGSN\r", 5000, 
+�cv_buf
+, (recv_buf));
+
+404 if(
+�tv�
+)
+
+406 
+	`log_w�n
+("AT+CGSN Check GPRS Module IEMI: [FAILED]\n");
+
+407  
+�tv�
+;
+
+410 
+	`�r�y
+(
+�mi
+, 
+�cv_buf
+);
+
+411 
+	`log_�ml
+("AT+CGSN Check GPRS Modu� IEMI: [%s]\n", 
+�mi
+);
+
+414 
+	}
+}
+
+417 
+	$�cmd_check_g�s_�tw�k
+(
+COM_PORT
+ *
+comp�t
+, *
+�tw�k
+)
+
+419 
+�tv�
+;
+
+420 
+�cv_buf
+[
+ATCMD_REPLY_LEN
+];
+
+422 if(
+�tw�k
+ =�
+NULL
+)
+
+427 
+�tv�
+ = 
+	`�nd_�cmd_check_�que�
+(
+comp�t
+, "AT+CNSMOD?\r", 5000, 
+�cv_buf
+, (recv_buf));
+
+428 if(
+�tv�
+)
+
+430 
+	`log_w�n
+("AT+CNSMOD Check Network Mode: [FAILED]\n");
+
+431  
+�tv�
+;
+
+434 
+	`�l�_�r�g_to_v�ue
+(
+�cv_buf
+, "%d,%d", 
+NULL
+, 
+�tw�k
+);
+
+436 
+	`log_�ml
+("AT+CNSMOD? Check N�w�k Mode: [%d]\n", *
+�tw�k
+);
+
+438 
+	}
+}
+
+441 
+	$�cmd_�t_�n
+(
+COM_PORT
+ *
+comp�t
+, *
+�n
+)
+
+443 
+�cmd
+[64]={0};
+
+444 
+�tv�
+;
+
+446 
+	`�r�tf
+ (
+�cmd
+, "AT+CGDCONT=1,\"IP\",\"%s\"\r", 
+�n
+);
+
+447 if(0 !�(
+�tv�
+=
+	`�nd_�cmd_check_ok
+(
+comp�t
+, 
+�cmd
+, 2000)) )
+
+449 
+	`log_�r
+("AT+CGDCONT S� APN��\"%s\" [FAILED]\n", 
+�n
+);
+
+450  
+�tv�
+;
+
+453 
+	`log_�ml
+("AT+CGDCONT Set APN�s \"%s\" [OK]\n");
+
+454  
+�tv�
+;
+
+455 
+	}
+}
+
+458 
+	$�_m�ch
+ (*
+p_pcS�
+, *
+p_pcM�ch
+)
+
+460 
+acBuf
+ [256],
+
+461 *
+pcS��
+ = 
+NULL
+,
+
+462 *
+pcTab
+ = 
+NULL
+;
+
+464 
+pcS��
+ = 
+p_pcM�ch
+;
+
+466 0 !�
+pcS��
+)
+
+468 
+	`mem�t
+ (
+acBuf
+, 0x00,  (acBuf));
+
+470 
+pcTab
+ = 
+	`�rchr
+ (
+pcS��
+, 9);
+
+471 i�(0 !�
+pcTab
+)
+
+473 i�(
+pcTab
+ !�
+pcS��
+)
+
+475 
+	`���y
+ (
+acBuf
+, 
+pcS��
+, 
+pcTab
+ -�cStart);
+
+477 
+pcS��
+ = (0 !�*(++
+pcTab
+)) ?�cTab : 0;
+
+481 
+	`�r�y
+ (
+acBuf
+, 
+pcS��
+);
+
+482 
+pcS��
+ = 
+NULL
+;
+
+484 i�(0 !�
+acBuf
+ [0] && 0 !�
+	`�r�r
+ (
+p_pcS�
+,�cBuf))
+
+490 
+	}
+}
+
+509 
+	$�nd_�cmd
+(
+COM_PORT
+ *
+comp�t
+, *
+�Cmd
+, *
+ex��
+, *
+�r�
+,
+
+510 
+timeout
+, *
+��y
+, 
+��y_�n
+)
+
+512 
+�tv�
+ = -1;
+
+513 
+d�ay
+ = 200;
+
+514 
+g�
+ = 300;
+
+515 
+ulS��Time
+;
+
+517 
+iCmdL�
+ = 0,
+
+518 
+iRecvL�
+ = 0,
+
+519 
+iRecvSize
+ = 0,
+
+520 
+iSize
+ = 0;
+
+523 
+acRecv
+[1024];
+
+524 *
+pcRecvP�
+ = 
+NULL
+;
+
+526 if(
+comp�t
+->
+is_c��ed
+ != 0x01)
+
+528 
+	`log_dbg
+("Comport�ot opened.\n");
+
+536 if(0 !�
+d�ay
+)
+
+538 
+ulS��Time
+ = 
+	`time_now
+();
+
+539 
+	`time_���d
+(
+ulS��Time
+�< 
+d�ay
+)
+
+541 
+	`mi�o_�c�d_��p
+(1);
+
+549 
+ulS��Time
+ = 
+	`time_now
+();
+
+550 
+	`mem�t
+(&
+acRecv
+, 0, (acRecv));
+
+552 
+	`time_���d
+(
+ulS��Time
+�< 
+d�ay
+)
+
+554 
+iSize
+ = 
+	`comp�t_�cv
+(
+comp�t
+, 
+acRecv
+, 1, 50);
+
+555 if(
+iSize
+ <= 0)
+
+559 
+	`mi�o_�c�d_��p
+(1);
+
+566 
+iCmdL�
+ = 
+	`���
+(
+�Cmd
+);
+
+567 
+�tv�
+ = 
+	`comp�t_�nd
+ (
+comp�t
+, 
+�Cmd
+, 
+iCmdL�
+);
+
+568 i�(0 !�
+�tv�
+)
+
+570 
+�tv�
+ = 0x02;
+
+571 
+C˪Up
+;
+
+577 if(0 !�
+g�
+)
+
+579 
+ulS��Time
+ = 
+	`time_now
+();
+
+580 
+	`time_���d
+(
+ulS��Time
+�< 
+g�
+)
+
+582 
+	`mi�o_�c�d_��p
+(1);
+
+586 
+	`mem�t
+ (
+acRecv
+, 0,  (acRecv));
+
+587 
+pcRecvP�
+ = 
+acRecv
+;
+
+588 
+iRecvL�
+ = 0;
+
+589 
+iRecvSize
+ =  (
+acRecv
+);
+
+591 
+�tv�
+ = -1;
+
+592 
+ulS��Time
+ = 
+	`time_now
+();
+
+594 
+	`time_���d
+(
+ulS��Time
+�< 
+timeout
+)
+
+596 i��
+iRecvL�
+ < (
+iRecvSize
+-1) )
+
+598 
+iSize
+ = 
+	`comp�t_�cv
+ (
+comp�t
+, 
+pcRecvP�
+, 1, 50);
+
+599 i�(
+iSize
+ >0)
+
+601 
+iRecvL�
+ +�
+iSize
+;
+
+602 
+pcRecvP�
+ +�
+iSize
+;
+
+603 
+acRecv
+ [
+iRecvSize
+-1] = 0;
+
+608 if(
+NULL
+ !�
+ex��
+)
+
+610 i�(0x00 =�
+	`�_m�ch
+(
+acRecv
+, 
+ex��
+))
+
+612 
+�tv�
+ = 0;
+
+613 
+C˪Up
+;
+
+620 if(
+NULL
+ !�
+�r�
+)
+
+622 i�(0x00 =�
+	`�_m�ch
+(
+acRecv
+, 
+�r�
+))
+
+624 
+�tv�
+ = -3;
+
+625 
+C˪Up
+;
+
+631 
+	`mi�o_�c�d_��p
+(1);
+
+635 if(
+NULL
+==
+ex��
+)
+
+636 
+�tv�
+ = 0x00;
+
+638 
+�tv�
+ = -4;
+
+640 
+C˪Up
+:
+
+642 if�
+NULL
+ !�
+��y
+)
+
+644 
+	`���y
+(
+��y
+, 
+acRecv
+, 
+��y_�n
+);
+
+649 
+log
+[512] = {0};
+
+650 
+	`���tf
+(
+log
+, 512, "S�d AT comm�d: \"%s\" g���ly \"%s\"", 
+�Cmd
+, 
+acRecv
+);
+
+651 
+i
+ = 0;
+
+652 
+i
+=0; i<512; i++)
+
+654 if('\r'==
+log
+[
+i
+] || '\n'==log[i] || '\t'==log[i])
+
+656 
+log
+[
+i
+]=' ';
+
+658 i�(0 =�
+log
+[
+i
+])
+
+663 
+	`log_�fo
+("%s\n", 
+log
+);
+
+667  
+�tv�
+;
+
+668 
+	}
+}
+
+	@cp_atcmd.h
+
+14 #i�de�
+__CP_ATCMD_H
+
+
+15 
+	#__CP_ATCMD_H
+
+
+	)
+
+17 
+	~"�_comp�t.h
+"
+
+20 
+	s_GPRS_LOCATION
+
+
+22 
+	ml�g�ude
+[15];
+
+23 
+	m�t�ude
+[15];
+
+24 
+	md�e
+[15];
+
+25 
+	mtime
+[15];
+
+26 
+	mmcc_mnc
+[16];
+
+27 } 
+	tGPRS_LOCATION
+;
+
+29 
+	s_REGISTER_INFO
+
+
+31 
+	mty�
+;
+
+32 
+	msig�l
+;
+
+33 
+	m���r
+[64];
+
+34 
+GPRS_LOCATION
+ 
+	mloc
+;
+
+35 } 
+	tREGISTER_INFO
+;
+
+38 
+	s_HARDWARE_INFO
+
+
+40 
+	mmod�
+[64];
+
+41 
+	mm�v
+[64];
+
+42 
+	m�mi
+[64];
+
+43 } 
+	tHW_INFO
+;
+
+45 

+�nd_�cmd
+(
+COM_PORT
+ *
+�_comp�t
+, *
+�Cmd
+, *
+ex��
+, *
+�r�
+,
+
+46 
+timeout
+, *
+��y
+, 
+��y_�n
+);
+
+48 

+�nd_�cmd_check_ok
+(
+COM_PORT
+ *
+comp�t
+, *
+�cmd
+, 
+timeout
+);
+
+49 

+�nd_�cmd_check_v�ue
+(
+COM_PORT
+ *
+comp�t
+, *
+�cmd
+, 
+timeout
+, *
+buf
+, 
+buf_�n
+);
+
+50 

+�nd_�cmd_check_�que�
+(
+COM_PORT
+ *
+comp�t
+, *
+�cmd
+, 
+timeout
+, *
+buf
+, 
+buf_�n
+);
+
+53 

+�cmd_check_�_�ady
+(
+COM_PORT
+ *
+comp�t
+);
+
+54 

+�cmd_check_sim_v�id
+(
+COM_PORT
+ *
+comp�t
+);
+
+55 

+�cmd_check_g�s_sig�l
+(
+COM_PORT
+ *
+comp�t
+);
+
+56 

+�cmd_check_g�s_�gi��
+(
+COM_PORT
+ *
+comp�t
+);
+
+57 

+�cmd_check_g�s_���r
+(
+COM_PORT
+ *
+comp�t
+, *
+���r
+);
+
+58 

+�cmd_check_g�s_�me
+(
+COM_PORT
+ *
+comp�t
+, *
+�me
+);
+
+59 

+�cmd_check_g�s_v�si�
+(
+COM_PORT
+ *
+comp�t
+, *
+v�si�
+);
+
+60 

+�cmd_check_g�s_�mi
+(
+COM_PORT
+ *
+comp�t
+, *
+�mi
+);
+
+61 

+�cmd_check_g�s_�tw�k
+(
+COM_PORT
+ *
+comp�t
+, *
+�tw�k
+);
+
+62 

+�cmd_check_g�s_lo�ti�
+(
+COM_PORT
+ *
+comp�t
+, 
+GPRS_LOCATION
+ *
+lo�ti�
+);
+
+63 

+�cmd_check_g�s_mcc_mnc
+(
+COM_PORT
+ *
+comp�t
+, *
+mcc_mnc
+);
+
+65 

+�cmd_�t_�tw�k_mode
+(
+COM_PORT
+ *
+comp�t
+, 
+mode
+);
+
+66 

+�cmd_�t_�n
+(
+COM_PORT
+ *
+comp�t
+, *
+�n
+);
+
+	@cp_common.h
+
+14 #i�de�
+__CP_COMMON_H
+
+
+15 
+	#__CP_COMMON_H
+
+
+	)
+
+17 
+	~<�dio.h
+>
+
+18 
+	~<�dlib.h
+>
+
+19 
+	~<�r�g.h
+>
+
+21 #i�de�
+off�tof
+
+
+22 
+	#off�tof
+(
+TYPE
+, 
+MEMBER
+�((
+size_t
+�&((TYPE *)0)->MEMBER)
+
+	)
+
+25 
+	#cڏ��_of
+(
+�r
+, 
+ty�
+, 
+memb�
+) ({ \
+
+26 cڡ 
+	`ty�of
+�((
+ty�
+ *)0)->
+memb�
+ ) *
+__m�r
+ = (
+�r
+); \
+
+27 (
+ty�
+ *)�(*)
+__m�r
+ - 
+	`off�tof
+�y�,
+memb�
+�);})
+
+	)
+
+31 
+�l�e
+ *
+_t_m�loc
+(
+size_t
+ 
+size
+
+
+32 #ifde�
+MEM_LEAK_CHECK
+
+
+33 , cڡ *
+f�e
+, 
+l�e
+
+
+37 *
+	g�r
+;
+
+39 i�((
+	g�r
+ = 
+m�loc
+ (
+size
+)))
+
+40 
+mem�t
+ (
+�r
+, 0, 
+size
+);
+
+41 #ifde�
+MEM_LEAK_CHECK
+
+
+42 
+��tf
+ ("MALLOC,0x%�@%s:%u\n", 
+�r
+, 
+f�e
+, 
+l�e
+);
+
+44  
+	g�r
+;
+
+47 
+�l�e
+ 
+_t_�
+(*
+�r
+
+
+48 #ifde�
+MEM_LEAK_CHECK
+
+
+49 , cڡ *
+f�e
+, 
+l�e
+
+
+53 #ifde�
+MEM_LEAK_CHECK
+
+
+54 
+��tf
+ ("FREE,0x%�@%s:%u\n", 
+�r
+, 
+f�e
+, 
+l�e
+);
+
+56 
+�
+(
+�r
+);
+
+59 #ifde�
+MEM_LEAK_CHECK
+
+
+60 
+	#t_�
+(
+p
+�if�){ 
+	`_t_�
+�, 
+__FILE__
+, 
+__LINE__
+);�=
+NULL
+; }
+
+	)
+
+61 
+	#t_m�loc
+(
+s
+�
+	`_t_m�loc
+(s, 
+__FILE__
+, 
+__LINE__
+)
+
+	)
+
+63 
+	#t_�
+(
+p
+�if�){ 
+	`_t_�
+�);�=
+NULL
+; }
+
+	)
+
+64 
+	#t_m�loc
+(
+s
+�
+	`_t_m�loc
+(s)
+
+	)
+
+	@cp_comport.c
+
+14 
+	~"�_comp�t.h
+"
+
+24 
+COM_PORT
+ *
+	$comp�t_��
+(cڡ *
+dev_�me
+, 
+baud��
+, cڡ *
+���gs
+)
+
+26 
+COM_PORT
+ *
+comp�t
+ = 
+NULL
+;
+
+27 i�(
+NULL
+ =�(
+comp�t
+ = (
+COM_PORT
+ *�
+	`m�loc
+((COM_PORT))))
+
+29  
+NULL
+;
+
+31 
+	`mem�t
+(
+comp�t
+, 0, (
+COM_PORT
+));
+
+32 
+comp�t
+->
+is_c��ed
+ = 0;
+
+33 
+comp�t
+->
+�ag_size
+ = 128;
+
+35 
+	`���y
+(
+comp�t
+->
+dev_�me
+, dev_�me, 
+DEVNAME_LEN
+);
+
+36 
+comp�t
+->
+baud��
+ = baudrate;
+
+38 
+	`�t_���gs
+(
+comp�t
+, 
+���gs
+);
+
+39 #ifde� 
+COM_DEBUG
+
+
+40 
+	`di�_���gs
+(
+comp�t
+);
+
+43  
+comp�t
+;
+
+44 
+	}
+}
+
+46 #ifde� 
+COM_DEBUG
+
+
+47 
+	$di�_���gs
+(
+COM_PORT
+ * 
+comp�t
+)
+
+49 
+	`COM_PRINT
+("Devi�:\t\t\t\"%s\"\n", 
+comp�t
+->
+dev_�me
+);
+
+50 
+	`COM_PRINT
+("Baud��:\t\t%ld\n", 
+comp�t
+->
+baud��
+);
+
+51 
+	`COM_PRINT
+("D�aB�:\t\t\'%d\'\n", 
+comp�t
+->
+d�ab�
+);
+
+52 
+comp�t
+->
+�r�y
+)
+
+55 
+	`COM_PRINT
+("Parity:\t\t\t\'N\'\n");
+
+58 
+	`COM_PRINT
+("Parity:\t\t\t\'O\'\n");
+
+61 
+	`COM_PRINT
+("Parity:\t\t\t\'E\'\n");
+
+64 
+	`COM_PRINT
+("Parity:\t\t\t\'S\'\n");
+
+67 
+	`COM_PRINT
+("St�B�:\t\t\'%ld\'\n", ()
+comp�t
+->
+��b�
+);
+
+68 
+comp�t
+->
+�ow��
+)
+
+71 
+	`COM_PRINT
+("FlowCtrl:\t\t\'N\'\n");
+
+74 
+	`COM_PRINT
+("FlowCtrl:\t\t\'S\'\n");
+
+77 
+	`COM_PRINT
+("FlowCtrl:\t\t\'H\'\n");
+
+80 
+	`COM_PRINT
+("FlowCtrl:\t\t\'B\'\n");
+
+83 
+	`COM_PRINT
+("\n");
+
+85 
+	}
+}
+
+95 
+	$�t_���gs
+(
+COM_PORT
+ * 
+comp�t
+, cڡ *
+���gs
+)
+
+97 if(
+NULL
+==
+���gs
+ || NULL==
+comp�t
+)
+
+100 
+���gs
+[0])
+
+103 
+comp�t
+->
+d�ab�
+ = 7;
+
+107 
+comp�t
+->
+d�ab�
+ = 8;
+
+111 
+���gs
+[1])
+
+115 
+comp�t
+->
+�r�y
+ = 1;
+
+119 
+comp�t
+->
+�r�y
+ = 2;
+
+123 
+comp�t
+->
+�r�y
+ = 3;
+
+128 
+comp�t
+->
+�r�y
+ = 0;
+
+132 
+���gs
+[2])
+
+135 
+comp�t
+->
+��b�
+ = 0;
+
+139 
+comp�t
+->
+��b�
+ = 1;
+
+143 
+���gs
+[3])
+
+147 
+comp�t
+->
+�ow��
+ = 1;
+
+151 
+comp�t
+->
+�ow��
+ = 2;
+
+155 
+comp�t
+->
+�ow��
+ = 3;
+
+160 
+comp�t
+->
+�ow��
+ = 0;
+
+163 
+	}
+}
+
+165 
+	$comp�t_�o�
+(
+COM_PORT
+ * 
+comp�t
+)
+
+167 i�(0 !�
+comp�t
+->
+fd
+)
+
+169 
+	`COM_PRINT
+("Clo� devi� \"%s\"\n", 
+comp�t
+->
+dev_�me
+);
+
+170 
+	`�o�
+(
+comp�t
+->
+fd
+);
+
+172 
+comp�t
+->
+is_c��ed
+ = 0x00;
+
+173 
+comp�t
+->
+fd
+ = -1;
+
+174 
+	}
+}
+
+176 
+	$comp�t_�rm
+(
+COM_PORT
+ * 
+comp�t
+)
+
+178 if(
+NULL
+ =�
+comp�t
+)
+
+181 i�(0 !�
+comp�t
+->
+fd
+)
+
+183 
+	`comp�t_�o�
+(
+comp�t
+);
+
+185 
+	`mem�t
+(
+comp�t
+, 0x00, (
+COM_PORT
+));
+
+186 
+	`�
+(
+comp�t
+);
+
+187 
+comp�t
+ = 
+NULL
+;
+
+190 
+	}
+}
+
+192 
+	$comp�t_ݒ
+(
+COM_PORT
+ * 
+comp�t
+)
+
+194 
+�tv�
+ = -1;
+
+195 
+�rmios
+ 
+�d_cfg
+, 
+�w_cfg
+;
+
+196 
+�d_�ags
+;
+
+197 
+tmp
+;
+
+199 if(
+NULL
+==
+comp�t
+)
+
+202 
+	`comp�t_�o�
+(
+comp�t
+);
+
+206 if�!
+	`�r�r
+(
+comp�t
+->
+dev_�me
+, "tty"))
+
+208 
+	`COM_PRINT
+("O��Nفty devi� \"%s\"\n", 
+comp�t
+->
+dev_�me
+);
+
+209 
+comp�t
+->
+fd
+ = 
+	`ݒ
+(comp�t->
+dev_�me
+, 
+O_RDWR
+);
+
+210 
+�tv�
+ = 
+comp�t
+->
+fd
+<0 ? -2 : comport->fd;
+
+211 
+C˪Up
+;
+
+214 
+comp�t
+->
+fd
+ = 
+	`ݒ
+(comp�t->
+dev_�me
+, 
+O_RDWR
+ | 
+O_NOCTTY
+ | 
+O_NONBLOCK
+);
+
+215 i�(
+comp�t
+->
+fd
+ < 0)
+
+217 
+�tv�
+ = -3;
+
+218 
+C˪Up
+;
+
+220 
+	`COM_PRINT
+("O��devi� \"%s\"\n", 
+comp�t
+->
+dev_�me
+);
+
+222 i�((-1 !�(
+�d_�ags
+ = 
+	`f��
+(
+comp�t
+->
+fd
+, 
+F_GETFL
+, 0)))
+
+223 && (-1 !�
+	`f��
+(
+comp�t
+->
+fd
+, 
+F_SETFL
+, 
+�d_�ags
+ & ~
+O_NONBLOCK
+)))
+
+226 i�(-1 =�
+	`tc�ush
+(
+comp�t
+->
+fd
+, 
+TCIOFLUSH
+))
+
+228 
+�tv�
+ = -4;
+
+229 
+C˪Up
+;
+
+234 
+�tv�
+ = -5;
+
+235 
+C˪Up
+;
+
+238 i�(0 !�
+	`tcg���
+(
+comp�t
+->
+fd
+, &
+�d_cfg
+))
+
+240 
+�tv�
+ = -6;
+
+241 
+C˪Up
+;
+
+244 
+	`mem�t
+(&
+�w_cfg
+, 0, (new_cfg));
+
+250 
+�w_cfg
+.
+c_c�ag
+ &�~
+CSIZE
+;
+
+251 
+�w_cfg
+.
+c_l�ag
+ &�~(
+ICANON
+ | 
+ECHO
+ | 
+ECHOE
+ | 
+ISIG
+);
+
+252 
+�w_cfg
+.
+c_i�ag
+ &�~(
+BRKINT
+ | 
+ICRNL
+ | 
+INPCK
+ | 
+ISTRIP
+ | 
+IXON
+);
+
+253 
+�w_cfg
+.
+c_o�ag
+ &�~(
+OPOST
+);
+
+256 
+comp�t
+->
+d�ab�
+)
+
+259 
+�w_cfg
+.
+c_c�ag
+ |�
+CS7
+;
+
+262 
+�w_cfg
+.
+c_c�ag
+ |�
+CS6
+;
+
+265 
+�w_cfg
+.
+c_c�ag
+ |�
+CS5
+;
+
+268 
+�w_cfg
+.
+c_c�ag
+ |�
+CS8
+;
+
+273 
+comp�t
+->
+�r�y
+)
+
+276 
+�w_cfg
+.
+c_c�ag
+ |�(
+PARENB
+ | 
+PARODD
+);
+
+277 
+�w_cfg
+.
+c_c�ag
+ |�(
+INPCK
+ | 
+ISTRIP
+);
+
+280 
+�w_cfg
+.
+c_c�ag
+ |�
+PARENB
+;
+
+281 
+�w_cfg
+.
+c_c�ag
+ &�~
+PARODD
+;;
+
+282 
+�w_cfg
+.
+c_c�ag
+ |�(
+INPCK
+ | 
+ISTRIP
+);
+
+285 
+�w_cfg
+.
+c_c�ag
+ &�~
+PARENB
+;
+
+286 
+�w_cfg
+.
+c_c�ag
+ &�~
+CSTOPB
+;
+
+289 
+�w_cfg
+.
+c_c�ag
+ &�~
+PARENB
+;
+
+293 i�(0x01 !�
+comp�t
+->
+��b�
+)
+
+295 
+�w_cfg
+.
+c_c�ag
+ |�
+CSTOPB
+;
+
+299 
+�w_cfg
+.
+c_c�ag
+ &�~
+CSTOPB
+;
+
+303 
+comp�t
+->
+�ow��
+)
+
+307 
+�w_cfg
+.
+c_c�ag
+ &�~(
+CRTSCTS
+);
+
+308 
+�w_cfg
+.
+c_i�ag
+ |�(
+IXON
+ | 
+IXOFF
+);
+
+311 
+�w_cfg
+.
+c_c�ag
+ |�
+CRTSCTS
+;
+
+312 
+�w_cfg
+.
+c_i�ag
+ &�~(
+IXON
+ | 
+IXOFF
+);
+
+315 
+�w_cfg
+.
+c_c�ag
+ &�~(
+CRTSCTS
+);
+
+316 
+�w_cfg
+.
+c_i�ag
+ &�~(
+IXON
+ | 
+IXOFF
+);
+
+321 
+comp�t
+->
+baud��
+)
+
+324 
+tmp
+ = 
+B115200
+;
+
+327 
+tmp
+ = 
+B57600
+;
+
+330 
+tmp
+ = 
+B38400
+;
+
+333 
+tmp
+ = 
+B19200
+;
+
+336 
+tmp
+ = 
+B9600
+;
+
+339 
+tmp
+ = 
+B4800
+;
+
+342 
+tmp
+ = 
+B2400
+;
+
+345 
+tmp
+ = 
+B1800
+;
+
+348 
+tmp
+ = 
+B1200
+;
+
+351 
+tmp
+ = 
+B600
+;
+
+354 
+tmp
+ = 
+B300
+;
+
+357 
+tmp
+ = 
+B200
+;
+
+360 
+tmp
+ = 
+B150
+;
+
+363 
+tmp
+ = 
+B134
+;
+
+366 
+tmp
+ = 
+B110
+;
+
+369 
+tmp
+ = 
+B75
+;
+
+372 
+tmp
+ = 
+B50
+;
+
+375 
+tmp
+ = 
+B115200
+;
+
+377 
+	`cf�ti��d
+(&
+�w_cfg
+, 
+tmp
+);
+
+378 
+	`cf�ti��d
+(&
+�w_cfg
+, 
+tmp
+);
+
+381 
+�w_cfg
+.
+c_cc
+[
+VMIN
+] = 0;
+
+382 
+�w_cfg
+.
+c_cc
+[
+VTIME
+] = 0;
+
+384 
+	`tc�ush
+(
+comp�t
+->
+fd
+, 
+TCIFLUSH
+);
+
+385 i�(0 !�
+	`tc���r
+(
+comp�t
+->
+fd
+, 
+TCSANOW
+, &
+�w_cfg
+))
+
+387 
+�tv�
+ = -7;
+
+388 
+C˪Up
+;
+
+391 
+	`COM_PRINT
+("C���ed devi� \"%s\".\n", 
+comp�t
+->
+dev_�me
+);
+
+392 
+comp�t
+->
+is_c��ed
+ = 0x01;
+
+393 
+�tv�
+ = 
+comp�t
+->
+fd
+;
+
+395 
+C˪Up
+:
+
+396 
+	`COM_PRINT
+("O��devi� \"%s\" %s.\n", 
+comp�t
+->
+dev_�me
+, 
+�tv�
+>0 ? "successfully" : "failure");
+
+397  
+�tv�
+;
+
+398 
+	}
+}
+
+400 
+	$n�block
+()
+
+402 
+�rmios
+ 
+�y��e
+;
+
+405 
+	`tcg���
+(
+STDIN_FILENO
+, &
+�y��e
+);
+
+408 
+�y��e
+.
+c_l�ag
+ &�~
+ICANON
+;
+
+410 
+�y��e
+.
+c_cc
+[
+VMIN
+] = 1;
+
+413 
+	`tc���r
+(
+STDIN_FILENO
+, 
+TCSANOW
+, &
+�y��e
+);
+
+414 
+	}
+}
+
+416 
+	$kbh�
+()
+
+418 
+timev�
+ 
+tv
+;
+
+419 
+fd_�t
+ 
+fds
+;
+
+420 
+tv
+.
+tv_�c
+ = 0;
+
+421 
+tv
+.
+tv_u�c
+ = 0;
+
+422 
+	`FD_ZERO
+(&
+fds
+);
+
+423 
+	`FD_SET
+(
+STDIN_FILENO
+, &
+fds
+);
+
+424 
+	`���
+(
+STDIN_FILENO
+ + 1, &
+fds
+, 
+NULL
+, NULL, &
+tv
+);
+
+425  
+	`FD_ISSET
+(
+STDIN_FILENO
+, &
+fds
+);
+
+426 
+	}
+}
+
+428 
+	$comp�t_�cv
+(
+COM_PORT
+ * 
+comp�t
+, *
+buf
+, 
+buf_size
+, 
+timeout
+)
+
+430 
+�tv�
+ = 0;
+
+431 
+iR�
+;
+
+432 
+fd_�t
+ 
+�R�dFds
+, 
+�Ex�Fds
+;
+
+433 
+timev�
+ 
+�Time
+;
+
+435 i�(
+NULL
+ =�
+buf
+ || 0 >�
+buf_size
+)
+
+437 
+	`COM_PRINT
+("%s(�u�g��r�.\n", 
+__FUNCTION__
+);
+
+438 
+�tv�
+ = -1;
+
+439 
+C˪Up
+;
+
+442 i�(0x01 !�
+comp�t
+->
+is_c��ed
+)
+
+444 
+	`COM_PRINT
+("%s(�comp܈n� c���ed.\n", 
+__FUNCTION__
+);
+
+445 
+�tv�
+ = -2;
+
+446 
+C˪Up
+;
+
+451 
+	`FD_ZERO
+(&
+�R�dFds
+);
+
+452 
+	`FD_ZERO
+(&
+�Ex�Fds
+);
+
+453 
+	`FD_SET
+(
+comp�t
+->
+fd
+, &
+�R�dFds
+);
+
+454 
+	`FD_SET
+(
+comp�t
+->
+fd
+, &
+�Ex�Fds
+);
+
+456 i�(0xFFFFFFFF !�
+timeout
+)
+
+458 
+�Time
+.
+tv_�c
+ = (
+time_t
+�(
+timeout
+ / 1000);
+
+459 
+�Time
+.
+tv_u�c
+ = ()(1000 * (
+timeout
+ % 1000));
+
+461 
+iR�
+ = 
+	`���
+(
+comp�t
+->
+fd
+ + 1, &
+�R�dFds
+, 0, &
+�Ex�Fds
+, &
+�Time
+);
+
+462 i�(0 =�
+iR�
+)
+
+464 
+�tv�
+ = 0;
+
+465 
+C˪Up
+;
+
+467 i�(0 < 
+iR�
+)
+
+469 i�(0 !�
+	`FD_ISSET
+(
+comp�t
+->
+fd
+, &
+�Ex�Fds
+))
+
+471 
+�tv�
+ = -6;
+
+472 
+	`COM_PRINT
+("Error checking�ecv status.\n");
+
+473 
+C˪Up
+;
+
+476 i�(0 =�
+	`FD_ISSET
+(
+comp�t
+->
+fd
+, &
+�R�dFds
+))
+
+478 
+�tv�
+ = 0;
+
+479 
+	`COM_PRINT
+("No incoming data.\n");
+
+480 
+C˪Up
+;
+
+485 i�(
+EINTR
+ =�
+��o
+)
+
+487 
+	`COM_PRINT
+("catch interrupt signal.\n");
+
+488 
+�tv�
+ = 0;
+
+492 
+	`COM_PRINT
+("Check�ecv status failure.\n");
+
+493 
+�tv�
+ = -7;
+
+496 
+C˪Up
+;
+
+500 
+	`u��p
+(10000);
+
+503 
+iR�
+ = 
+	`�ad
+(
+comp�t
+->
+fd
+, 
+buf
+, 
+buf_size
+);
+
+504 i�(0 > 
+iR�
+)
+
+506 i�(
+EINTR
+ =�
+��o
+)
+
+507 
+�tv�
+ = 0;
+
+509 
+�tv�
+ = -3;
+
+511 
+C˪Up
+;
+
+516 
+i
+=0;
+
+517 
+	`��tf
+("Re�iv�%d by��d�a: \n", 
+iR�
+);
+
+518 
+i
+=0; i<
+iR�
+; i++)
+
+520 
+	`��tf
+("0x%02x ", 
+buf
+[
+i
+]);
+
+522 
+	`��tf
+("\n");
+
+526 
+�tv�
+ = 
+iR�
+;
+
+528 
+C˪Up
+:
+
+529  
+�tv�
+;
+
+531 
+	}
+}
+
+533 
+	$comp�t_�nd
+(
+COM_PORT
+ * 
+comp�t
+, *
+buf
+, 
+�nd_by�s
+)
+
+535 *
+�r
+, *
+�d
+;
+
+536 
+�tv�
+ = 0;
+
+537 
+�nd
+ = 0;
+
+539 i�(
+NULL
+ =�
+buf
+ || 0 >�
+�nd_by�s
+)
+
+541 
+	`COM_PRINT
+("%s(�U�g��r�.\n", 
+__FUNCTION__
+);
+
+542 
+�tv�
+ = -1;
+
+543 
+C˪Up
+;
+
+546 i�(0x01 !�
+comp�t
+->
+is_c��ed
+)
+
+548 
+�tv�
+ = -3;
+
+549 
+	`COM_PRINT
+("Serail�ot connected.\n");
+
+550 
+C˪Up
+;
+
+556 i�(
+comp�t
+->
+�ag_size
+ < 
+�nd_by�s
+)
+
+558 
+�r
+ = 
+buf
+;
+
+559 
+�d
+ = 
+buf
+ + 
+�nd_by�s
+;
+
+564 i�(
+comp�t
+->
+�ag_size
+ < (
+�d
+ - 
+�r
+))
+
+566 
+�nd
+ = 
+	`wr�e
+(
+comp�t
+->
+fd
+, 
+�r
+, comp�t->
+�ag_size
+);
+
+567 i�(0 >�
+�nd
+ || 
+comp�t
+->
+�ag_size
+ != send)
+
+569 
+�tv�
+ = -4;
+
+570 
+C˪Up
+;
+
+572 
+�r
+ +�
+comp�t
+->
+�ag_size
+;
+
+576 
+�nd
+ = 
+	`wr�e
+(
+comp�t
+->
+fd
+, 
+�r
+, (
+�d
+ -�tr));
+
+577 i�(0 >�
+�nd
+ || (
+�d
+ - 
+�r
+) != send)
+
+579 
+�tv�
+ = -4;
+
+580 
+C˪Up
+;
+
+582 
+�r
+ +�(
+�d
+ -�tr);
+
+585 
+�r
+ < 
+�d
+);
+
+589 
+�nd
+ = 
+	`wr�e
+(
+comp�t
+->
+fd
+, 
+buf
+, 
+�nd_by�s
+);
+
+590 i�(0 >�
+�nd
+ || 
+�nd_by�s
+ != send)
+
+592 
+�tv�
+ = -5;
+
+593 
+C˪Up
+;
+
+597 
+C˪Up
+:
+
+598  
+�tv�
+;
+
+599 
+	}
+}
+
+	@cp_comport.h
+
+13 #i�de� 
+_CP_COMPORT_H
+
+
+14 
+	#_CP_COMPORT_H
+
+
+	)
+
+16 
+	~<�dio.h
+>
+
+17 
+	~<�dlib.h
+>
+
+18 
+	~<uni�d.h
+>
+
+19 
+	~<�r�g.h
+>
+
+20 
+	~<g��t.h
+>
+
+21 
+	~<f��.h
+>
+
+22 
+	~<��o.h
+>
+
+23 
+	~<�rmios.h
+>
+
+24 
+	~<sys/��.h
+>
+
+25 
+	~<sys/wa�.h
+>
+
+26 
+	~<sys/ty�s.h
+>
+
+27 
+	~<sys/��.h
+>
+
+28 
+	~<sys/���.h
+>
+
+30 
+	#BUF_64
+ 64
+
+	)
+
+32 #i�de�
+DEVNAME_LEN
+
+
+33 
+	#DEVNAME_LEN
+ 64
+
+	)
+
+37 #ifde� 
+COM_DEBUG
+
+
+38 
+	#COM_PRINT
+(
+f�m�
+,
+�gs
+...�
+	`��tf
+(f�m�, ##�gs)
+
+	)
+
+40 
+	#COM_PRINT
+(
+f�m�
+,
+�gs
+...�do{} 0);
+
+	)
+
+45 
+	s__COM_PORT
+
+
+47 
+	md�ab�
+, 
+	m�r�y
+, 
+	m��b�
+, 
+	m�ow��
+, 
+	mis_c��ed
+;
+
+48 
+	mdev_�me
+[
+DEVNAME_LEN
+];
+
+49 
+	mu�d
+;
+
+50 
+	mfd
+;
+
+51 
+	m�ag_size
+;
+
+52 
+	mbaud��
+;
+
+53 } 
+	tCOM_PORT
+;
+
+55 
+COM_PORT
+ *
+comp�t_��
+(cڡ *
+dev_�me
+, 
+baud��
+, cڡ *
+���gs
+);
+
+56 
+comp�t_�o�
+(
+COM_PORT
+ * 
+comp�t
+);
+
+57 
+comp�t_ݒ
+(
+COM_PORT
+ * 
+comp�t
+);
+
+58 
+comp�t_�rm
+(
+COM_PORT
+ * 
+comp�t
+);
+
+59 
+comp�t_�cv
+(
+COM_PORT
+ * 
+comp�t
+, *
+buf
+, 
+buf_size
+, 
+timeout
+);
+
+60 
+comp�t_�nd
+(
+COM_PORT
+ * 
+comp�t
+, *
+buf
+, 
+�nd_by�s
+);
+
+62 
+�t_���gs
+(
+COM_PORT
+ * 
+comp�t
+, cڡ *
+���gs
+);
+
+63 
+di�_���gs
+(
+COM_PORT
+ * 
+comp�t
+);
+
+64 
+n�block
+();
+
+65 
+kbh�
+();
+
+	@cp_dictionary.c
+
+16 
+	~"�_di�iڬy.h
+"
+
+18 
+	~<�dio.h
+>
+
+19 
+	~<�dlib.h
+>
+
+20 
+	~<�r�g.h
+>
+
+21 
+	~<uni�d.h
+>
+
+24 
+	#MAXVALSZ
+ 1024
+
+	)
+
+27 
+	#DICTMINSZ
+ 128
+
+	)
+
+30 
+	#DICT_INVALID_KEY
+ ((*)-1)
+
+	)
+
+38 * 
+	$mem_doub�
+(* 
+�r
+, 
+size
+)
+
+40 * 
+�w�r
+ ;
+
+42 
+�w�r
+ = 
+	`��oc
+(2*
+size
+, 1);
+
+43 i�(
+�w�r
+==
+NULL
+) {
+
+44  
+NULL
+ ;
+
+46 
+	`mem�y
+(
+�w�r
+, 
+�r
+, 
+size
+);
+
+47 
+	`�
+(
+�r
+);
+
+48  
+�w�r
+ ;
+
+49 
+	}
+}
+
+61 * 
+	$x�rdup
+(cڡ * 
+s
+)
+
+63 * 
+t
+ ;
+
+64 i�(!
+s
+)
+
+65  
+NULL
+ ;
+
+66 
+t
+ = (*)
+	`m�loc
+(
+	`���
+(
+s
+)+1) ;
+
+67 i�(
+t
+) {
+
+68 
+	`�r�y
+(
+t
+,
+s
+);
+
+70  
+t
+ ;
+
+71 
+	}
+}
+
+88 
+	$di�iڬy_hash
+(cڡ * 
+key
+)
+
+90 
+�n
+ ;
+
+91 
+hash
+ ;
+
+92 
+i
+ ;
+
+94 
+�n
+ = 
+	`���
+(
+key
+);
+
+95 
+hash
+=0, 
+i
+=0 ; i<
+�n
+ ; i++) {
+
+96 
+hash
+ +�()
+key
+[
+i
+] ;
+
+97 
+hash
+ += (hash<<10);
+
+98 
+hash
+ ^= (hash>>6) ;
+
+100 
+hash
+ += (hash <<3);
+
+101 
+hash
+ ^= (hash >>11);
+
+102 
+hash
+ += (hash <<15);
+
+103  
+hash
+ ;
+
+104 
+	}
+}
+
+117 
+di�iڬy
+ * 
+	$di�iڬy_�w
+(
+size
+)
+
+119 
+di�iڬy
+ * 
+d
+ ;
+
+122 i�(
+size
+<
+DICTMINSZ
+) size=DICTMINSZ ;
+
+124 i�(!(
+d
+ = (
+di�iڬy
+ *)
+	`��oc
+(1, (dictionary)))) {
+
+125  
+NULL
+;
+
+127 
+d
+->
+size
+ = size ;
+
+128 
+d
+->
+v�
+ = (**)
+	`��oc
+(
+size
+, (*));
+
+129 
+d
+->
+key
+ = (**)
+	`��oc
+(
+size
+, (*));
+
+130 
+d
+->
+hash
+ = (*)
+	`��oc
+(
+size
+, ());
+
+131  
+d
+ ;
+
+132 
+	}
+}
+
+143 
+	$di�iڬy_d�
+(
+di�iڬy
+ * 
+d
+)
+
+145 
+i
+ ;
+
+147 i�(
+d
+==
+NULL
+)  ;
+
+148 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+149 i�(
+d
+->
+key
+[
+i
+]!=
+NULL
+)
+
+150 
+	`�
+(
+d
+->
+key
+[
+i
+]);
+
+151 i�(
+d
+->
+v�
+[
+i
+]!=
+NULL
+)
+
+152 
+	`�
+(
+d
+->
+v�
+[
+i
+]);
+
+154 
+	`�
+(
+d
+->
+v�
+);
+
+155 
+	`�
+(
+d
+->
+key
+);
+
+156 
+	`�
+(
+d
+->
+hash
+);
+
+157 
+	`�
+(
+d
+);
+
+159 
+	}
+}
+
+175 * 
+	$di�iڬy_g�
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, * 
+def
+)
+
+177 
+hash
+ ;
+
+178 
+i
+ ;
+
+180 
+hash
+ = 
+	`di�iڬy_hash
+(
+key
+);
+
+181 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+182 i�(
+d
+->
+key
+[
+i
+]==
+NULL
+)
+
+185 i�(
+hash
+==
+d
+->hash[
+i
+]) {
+
+187 i�(!
+	`�rcmp
+(
+key
+, 
+d
+->key[
+i
+])) {
+
+188  
+d
+->
+v�
+[
+i
+] ;
+
+192  
+def
+ ;
+
+193 
+	}
+}
+
+221 
+	$di�iڬy_�t
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, cڡ * 
+v�
+)
+
+223 
+i
+ ;
+
+224 
+hash
+ ;
+
+226 i�(
+d
+==
+NULL
+ || 
+key
+==NULL)  -1 ;
+
+229 
+hash
+ = 
+	`di�iڬy_hash
+(
+key
+) ;
+
+231 i�(
+d
+->
+n
+>0) {
+
+232 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+233 i�(
+d
+->
+key
+[
+i
+]==
+NULL
+)
+
+235 i�(
+hash
+==
+d
+->hash[
+i
+]) {
+
+236 i�(!
+	`�rcmp
+(
+key
+, 
+d
+->key[
+i
+])) {
+
+238 i�(
+d
+->
+v�
+[
+i
+]!=
+NULL
+)
+
+239 
+	`�
+(
+d
+->
+v�
+[
+i
+]);
+
+240 
+d
+->
+v�
+[
+i
+] = v� ? 
+	`x�rdup
+(v��: 
+NULL
+ ;
+
+249 i�(
+d
+->
+n
+==d->
+size
+) {
+
+252 
+d
+->
+v�
+ = (**)
+	`mem_doub�
+(d->v�, d->
+size
+ * (*)) ;
+
+253 
+d
+->
+key
+ = (**)
+	`mem_doub�
+(d->key, d->
+size
+ * (*)) ;
+
+254 
+d
+->
+hash
+ = (*)
+	`mem_doub�
+(d->hash, d->
+size
+ * ()) ;
+
+255 i�((
+d
+->
+v�
+==
+NULL
+�|| (d->
+key
+==NULL�|| (d->
+hash
+==NULL)) {
+
+260 
+d
+->
+size
+ *= 2 ;
+
+266 
+i
+=
+d
+->
+n
+ ; d->
+key
+[i] ; ) {
+
+267 if(++
+i
+ =�
+d
+->
+size
+) i = 0;
+
+270 
+d
+->
+key
+[
+i
+] = 
+	`x�rdup
+(key);
+
+271 
+d
+->
+v�
+[
+i
+] = v� ? 
+	`x�rdup
+(v��: 
+NULL
+ ;
+
+272 
+d
+->
+hash
+[
+i
+] = hash;
+
+273 
+d
+->
+n
+ ++ ;
+
+275 
+	}
+}
+
+288 
+	$di�iڬy_un�t
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+)
+
+290 
+hash
+ ;
+
+291 
+i
+ ;
+
+293 i�(
+key
+ =�
+NULL
+) {
+
+297 
+hash
+ = 
+	`di�iڬy_hash
+(
+key
+);
+
+298 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+299 i�(
+d
+->
+key
+[
+i
+]==
+NULL
+)
+
+302 i�(
+hash
+==
+d
+->hash[
+i
+]) {
+
+304 i�(!
+	`�rcmp
+(
+key
+, 
+d
+->key[
+i
+])) {
+
+310 i�(
+i
+>=
+d
+->
+size
+)
+
+314 
+	`�
+(
+d
+->
+key
+[
+i
+]);
+
+315 
+d
+->
+key
+[
+i
+] = 
+NULL
+ ;
+
+316 i�(
+d
+->
+v�
+[
+i
+]!=
+NULL
+) {
+
+317 
+	`�
+(
+d
+->
+v�
+[
+i
+]);
+
+318 
+d
+->
+v�
+[
+i
+] = 
+NULL
+ ;
+
+320 
+d
+->
+hash
+[
+i
+] = 0 ;
+
+321 
+d
+->
+n
+ -- ;
+
+323 
+	}
+}
+
+337 
+	$di�iڬy_dump
+(
+di�iڬy
+ * 
+d
+, 
+FILE
+ * 
+out
+)
+
+339 
+i
+ ;
+
+341 i�(
+d
+==
+NULL
+ || 
+out
+==NULL)  ;
+
+342 i�(
+d
+->
+n
+<1) {
+
+343 
+	`�r�tf
+(
+out
+, "empty dictionary\n");
+
+346 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+347 i�(
+d
+->
+key
+[
+i
+]) {
+
+348 
+	`�r�tf
+(
+out
+, "%20s\t[%s]\n",
+
+349 
+d
+->
+key
+[
+i
+],
+
+350 
+d
+->
+v�
+[
+i
+] ? d->val[i] : "UNDEF");
+
+354 
+	}
+}
+
+358 #ifde�
+TESTDIC
+
+
+359 
+	#NVALS
+ 20000
+
+	)
+
+360 
+	$ma�
+(
+�gc
+, *
+�gv
+[])
+
+362 
+di�iڬy
+ * 
+d
+ ;
+
+363 * 
+v�
+ ;
+
+364 
+i
+ ;
+
+365 
+cv�
+[90] ;
+
+368 
+	`��tf
+("allocating...\n");
+
+369 
+d
+ = 
+	`di�iڬy_�w
+(0);
+
+372 
+	`��tf
+("���g %d v�ues...\n", 
+NVALS
+);
+
+373 
+i
+=0 ; i<
+NVALS
+ ; i++) {
+
+374 
+	`�r�tf
+(
+cv�
+, "%04d", 
+i
+);
+
+375 
+	`di�iڬy_�t
+(
+d
+, 
+cv�
+, "salut");
+
+377 
+	`��tf
+("g�t�g %d v�ues...\n", 
+NVALS
+);
+
+378 
+i
+=0 ; i<
+NVALS
+ ; i++) {
+
+379 
+	`�r�tf
+(
+cv�
+, "%04d", 
+i
+);
+
+380 
+v�
+ = 
+	`di�iڬy_g�
+(
+d
+, 
+cv�
+, 
+DICT_INVALID_KEY
+);
+
+381 i�(
+v�
+==
+DICT_INVALID_KEY
+) {
+
+382 
+	`��tf
+("��� g� v�u�f� key [%s]\n", 
+cv�
+);
+
+385 
+	`��tf
+("un���g %d v�ues...\n", 
+NVALS
+);
+
+386 
+i
+=0 ; i<
+NVALS
+ ; i++) {
+
+387 
+	`�r�tf
+(
+cv�
+, "%04d", 
+i
+);
+
+388 
+	`di�iڬy_un�t
+(
+d
+, 
+cv�
+);
+
+390 i�(
+d
+->
+n
+ != 0) {
+
+391 
+	`��tf
+("error deleting values\n");
+
+393 
+	`��tf
+("deallocating...\n");
+
+394 
+	`di�iڬy_d�
+(
+d
+);
+
+396 
+	}
+}
+
+	@cp_dictionary.h
+
+14 #i�de�
+_CP_DICTIONARY_H_
+
+
+15 
+	#_CP_DICTIONARY_H_
+
+
+	)
+
+21 
+	~<�dio.h
+>
+
+22 
+	~<�dlib.h
+>
+
+23 
+	~<�r�g.h
+>
+
+24 
+	~<uni�d.h
+>
+
+41 
+	s_di�iڬy_
+ {
+
+42 
+	mn
+ ;
+
+43 
+	msize
+ ;
+
+44 ** 
+	mv�
+ ;
+
+45 ** 
+	mkey
+ ;
+
+46 * 
+	mhash
+ ;
+
+47 } 
+	tdi�iڬy
+ ;
+
+66 
+di�iڬy_hash
+(cڡ * 
+key
+);
+
+79 
+di�iڬy
+ * 
+di�iڬy_�w
+(
+size
+);
+
+90 
+di�iڬy_d�
+(
+di�iڬy
+ * 
+vd
+);
+
+106 * 
+di�iڬy_g�
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, * 
+def
+);
+
+135 
+di�iڬy_�t
+(
+di�iڬy
+ * 
+vd
+, cڡ * 
+key
+, cڡ * 
+v�
+);
+
+148 
+di�iڬy_un�t
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+);
+
+163 
+di�iڬy_dump
+(
+di�iڬy
+ * 
+d
+, 
+FILE
+ * 
+out
+);
+
+	@cp_fds.c
+
+14 
+	~<sys/�sour�.h
+>
+
+15 
+	~"�_fds.h
+"
+
+16 
+	~"�_sock.h
+"
+
+17 
+	~"�_time.h
+"
+
+18 
+	~"�_comm�.h
+"
+
+21 
+	$�_fds_��lim�
+(
+maxfd
+)
+
+23 
+�im�
+ 
+�s
+;
+
+25 if(
+	`g��im�
+(
+RLIMIT_NOFILE
+, &
+�s
+) <0)
+
+27 
+	`log_�l
+("g��im� fa�ed: %s\n", 
+	`����
+(
+��o
+));
+
+31 if(
+�s
+.
+�im_cur
+ < 
+maxfd
+)
+
+33 
+�s
+.
+�im_cur
+ = 
+maxfd
+;
+
+34 if(
+	`��lim�
+(
+RLIMIT_NOFILE
+, &
+�s
+) <0)
+
+36 
+	`log_�l
+("��lim� fa�ed: %s\n", 
+	`����
+(
+��o
+));
+
+42 
+	}
+}
+
+45 
+CP_FDS
+ *
+	$�_fds_��
+(
+CP_FDS
+ *
+fds
+, 
+maxev�ts
+, 
+timeout
+)
+
+47 
+rv
+ = 0;
+
+49 if(
+NULL
+ !�
+fds
+)
+
+51 
+	`mem�t
+(
+fds
+, 0, (*fds));
+
+52 
+fds
+->
+�fd
+ = -1;
+
+56 if�!(
+fds
+=(
+CP_FDS
+ *)
+	`t_m�loc
+((*fds))) )
+
+58 
+	`log_�r
+("fd�cڋx�m�lo��ed: %s\n", 
+	`����
+(
+��o
+));
+
+59  
+NULL
+;
+
+63 
+	`log_�a�
+("m�lo�fd�w�h�dd�s�[%p]\n", 
+fds
+);
+
+64 
+	`mem�t
+(
+fds
+, 0, (*fds));
+
+65 
+fds
+->
+�fd
+ = -1;
+
+66 
+fds
+->
+�ag
+ |�
+FLAG_FDS_MALLOC
+;
+
+71 
+maxev�ts
+ = maxev�ts<
+CP_DEF_MAX_EVENTS
+ ? maxevents : CP_DEF_MAX_EVENTS;
+
+72 if�
+	`�_fds_��lim�
+(
+maxev�ts
+) )
+
+74 
+rv
+ = -2;
+
+75 
+��nup
+;
+
+79 
+fds
+->
+�fd
+ = 
+	`��l_���
+(
+maxev�ts
+);
+
+80 if(
+fds
+->
+�fd
+ < 0)
+
+82 
+rv
+ = -3;
+
+83 
+	`log_�l
+("��l_��� fa�ed: %s\n", 
+	`����
+(
+��o
+));
+
+84 
+��nup
+;
+
+86 
+	`log_�a�
+("O�����f��des��ti� [%d]\n", 
+fds
+->
+�fd
+);
+
+89 
+	`INIT_LIST_HEAD
+(&
+fds
+->
+�rv�_li�
+);
+
+90 
+	`INIT_LIST_HEAD
+(&
+fds
+->
+���_li�
+);
+
+91 
+fds
+->
+�sk_��y
+ = 
+	`�_��y_��
+(
+NULL
+, 
+maxev�ts
+);
+
+92 
+fds
+->
+ev�t_queue
+ = 
+	`�_queue_��
+(
+NULL
+, 
+maxev�ts
+);
+
+94 
+fds
+->
+timeout
+ =�imeout<0 ? -1 :�imeout;
+
+95 
+fds
+->
+max_ev�t
+ = 
+maxev�ts
+;
+
+96 
+fds
+->
+�ag
+ |�
+FLAG_FDS_INIT
+;
+
+98 
+��nup
+:
+
+99 if(
+rv
+)
+
+101 
+	`log_�r
+("Initialise fds contex failed\n");
+
+102 
+	`�_fds_�rm
+(
+fds
+);
+
+103  
+NULL
+;
+
+106 
+	`log_�ml
+("In��li� fd�cڋx [%p] ok\n", 
+fds
+);
+
+107  
+fds
+;
+
+108 
+	}
+}
+
+111 
+	$�_fds_�rm
+(
+CP_FDS
+ *
+fds
+)
+
+113 
+	`log_dbg
+("terminate�poll fds contex�ow\n");
+
+115 if(!
+fds
+)
+
+117 
+	`log_�r
+("Invalude input�rguments\n");
+
+121 if(
+fds
+->
+�fd
+ >= 0)
+
+123 
+	`log_dbg
+("Clo��p��f��des��ti� [%d]\n", 
+fds
+->
+�fd
+);
+
+124 
+	`�o�
+(
+fds
+->
+�fd
+);
+
+127 if(
+fds
+->
+�sk_��y
+)
+
+129 
+	`�_��y_�rm
+(
+fds
+->
+�sk_��y
+);
+
+132 if(
+fds
+->
+ev�t_queue
+)
+
+134 
+	`�_queue_de�roy
+(
+fds
+->
+ev�t_queue
+);
+
+137 if(
+fds
+->
+�ag
+& 
+FLAG_FDS_MALLOC
+)
+
+139 
+	`t_�
+(
+fds
+);
+
+142 
+	`log_�ml
+("Terminate�poll fds contex ok.\n");
+
+145 
+	}
+}
+
+148 
+	$�_add_��l_ev�t
+(
+CP_SOCK
+ *
+sock
+)
+
+150 
+rv
+ = 0;
+
+151 
+CP_FDS
+ *
+fds
+;
+
+153 if�!
+sock
+ || !(
+fds
+=sock->fds) )
+
+155 
+	`log_�r
+("Invalude input�rguments\n");
+
+159 if�
+sock
+->
+�ag
+&
+FLAG_SOCK_EPOLLED
+ )
+
+162 if(
+fds
+->
+ev�t_�t
+ > fds->
+max_ev�t
+)
+
+164 
+	`log_�l
+("No more�poll�vent space [%d/%d] for socket[%d]\n",
+
+165 
+fds
+->
+ev�t_�t
+, fds->
+max_ev�t
+, 
+sock
+->
+fd
+);
+
+169 
+	`mem�t
+(&
+sock
+->
+ev�t
+, 0, (sock->event));
+
+170 
+sock
+->
+ev�t
+.
+ev�ts
+ = 
+EPOLLIN
+;
+
+171 
+sock
+->
+ev�t
+.
+d�a
+.
+�r
+ = sock;
+
+173 i��
+	`��l_�l
+ (
+fds
+->
+�fd
+, 
+EPOLL_CTL_ADD
+, 
+sock
+->
+fd
+, &sock->
+ev�t
+) < 0)
+
+175 if(
+EEXIST
+ =�
+��o
+)
+
+177 
+	`log_w�n
+("sock�[%d]�̗dy�egi����p�l\n", 
+sock
+->
+fd
+);
+
+178 
+��nup
+;
+
+182 
+	`log_�r
+("sock�[%d]�egi����p���ed: %s\n", 
+sock
+->
+fd
+, 
+	`����
+(
+��o
+));
+
+183 
+rv
+ = -3;
+
+184 
+��nup
+;
+
+188 
+fds
+->
+ev�t_�t
+++;
+
+189 
+sock
+->
+�ag
+ |�
+FLAG_SOCK_EPOLLED
+;
+
+191 
+��nup
+:
+
+192 if(
+rv
+)
+
+193 
+	`log_�r
+("add sock� [%d]�ؕ��ev���ed\n", 
+sock
+->
+fd
+);
+
+195 
+	`log_dbg
+("add sock� [%d]�ؕ��ev��ok\n", 
+sock
+->
+fd
+);
+
+197  
+rv
+;
+
+198 
+	}
+}
+
+202 
+	$�_mod_��l_ev�t
+(
+CP_SOCK
+ *
+sock
+, 
+ev�t
+)
+
+204 
+CP_FDS
+ *
+fds
+;
+
+206 if�!
+sock
+ || !(
+fds
+=sock->fds) )
+
+208 
+	`log_�r
+("Invalude input�rguments\n");
+
+212 if�!(
+sock
+->
+�ag
+&
+FLAG_SOCK_EPOLLED
+) )
+
+217 
+sock
+->
+ev�t
+.
+ev�ts
+ =�vent;
+
+218 i��
+	`��l_�l
+ (
+fds
+->
+�fd
+, 
+EPOLL_CTL_MOD
+, 
+sock
+->
+fd
+, &sock->
+ev�t
+) < 0)
+
+220 
+	`log_�r
+("modidfy sock� [%d]�p��ev���ed: %s\n", 
+sock
+->
+fd
+, 
+	`����
+(
+��o
+));
+
+224 
+	`log_dbg
+("modidfy sock� [%d]�p��ev��ok\n", 
+sock
+->
+fd
+);
+
+227 
+	}
+}
+
+230 
+	$�_d�_��l_ev�t
+(
+CP_SOCK
+ *
+sock
+)
+
+232 
+CP_FDS
+ *
+fds
+;
+
+234 if�!
+sock
+ || !(
+fds
+=sock->fds) )
+
+236 
+	`log_�r
+("Invalude input�rguments\n");
+
+240 if�!(
+sock
+->
+�ag
+&
+FLAG_SOCK_EPOLLED
+) )
+
+243 
+sock
+->
+�ag
+ &�~
+FLAG_SOCK_EPOLLED
+;
+
+244 
+	`��l_�l
+(
+fds
+->
+�fd
+, 
+EPOLL_CTL_DEL
+, 
+sock
+->
+fd
+, 
+NULL
+);
+
+245 
+fds
+->
+ev�t_�t
+--;
+
+247 
+	`log_dbg
+("�mov�sock� [%d] from�p��ev��ok\n", 
+sock
+->
+fd
+);
+
+249 
+	}
+}
+
+252 
+	$�_fds_add_sock_�gi�ry
+(
+CP_SOCK
+ *
+sock
+)
+
+254 
+CP_FDS
+ *
+fds
+;
+
+256 if�!
+sock
+ || !(
+fds
+=sock->fds) )
+
+258 
+	`log_�r
+("Invalude input�rguments\n");
+
+262 if�
+sock
+->
+�ag
+&
+FLAG_SOCK_REGISTRY
+ )
+
+265 if(
+CP_SOCK_MODE_CONNECT
+ =�
+sock
+->
+mode
+)
+
+267 
+	`log_dbg
+("�gi� sock� [%p] o�CONNECT mod��t�����i� ok\n", 
+sock
+);
+
+268 
+	`li�_add_��
+(&
+sock
+->
+�i�
+, &
+fds
+->
+���_li�
+);
+
+270 if(
+CP_SOCK_MODE_LISTEN
+ =�
+sock
+->
+mode
+)
+
+272 
+	`log_dbg
+("�gi� sock� [%p] o�LISTEN mod��tأrv��i� ok\n", 
+sock
+);
+
+273 
+	`li�_add_��
+(&
+sock
+->
+�i�
+, &
+fds
+->
+�rv�_li�
+);
+
+275 if(
+CP_SOCK_MODE_ACCEPT
+==
+sock
+->
+mode
+ && sock->
+�rv_sock
+)
+
+277 
+	`log_dbg
+("�gi� sock� [%p] o�ACCEPT mod��tأrv��i� ok\n", 
+sock
+);
+
+278 
+	`li�_add_��
+(&
+sock
+->
+�i�
+, &sock->
+�rv_sock
+->
+ac��_li�
+);
+
+279 
+sock
+->
+�rv_sock
+->
+ac��_�t
+++;
+
+283 
+	`log_�r
+("�gi� sock� [%p] o�mod�%d i�����/�rv��i� fa�ed: Unsu�܈mode.\n", 
+sock
+, sock->
+mode
+);
+
+287 
+sock
+->
+�ag
+ |�
+FLAG_SOCK_REGISTRY
+;
+
+289 
+	}
+}
+
+292 
+	$�_fds_d�_sock_�gi�ry
+(
+CP_SOCK
+ *
+sock
+)
+
+294 if(!
+sock
+ || !(sock->
+�ag
+&
+FLAG_SOCK_REGISTRY
+) )
+
+297 if(
+CP_SOCK_MODE_ACCEPT
+==
+sock
+->
+mode
+ && sock->
+�rv_sock
+)
+
+298 
+sock
+->
+�rv_sock
+->
+ac��_�t
+--;
+
+300 
+	`log_dbg
+("�mov�sock� [%d] from sock��egi�ry�i� ok\n", 
+sock
+->
+fd
+);
+
+301 
+	`li�_d�
+(&
+sock
+->
+�i�
+);
+
+302 
+sock
+->
+�ag
+ &�~
+FLAG_SOCK_REGISTRY
+;
+
+305 
+	}
+}
+
+309 
+	$�_fds_add_sock_�sk
+(
+CP_SOCK
+ *
+sock
+)
+
+311 
+CP_FDS
+ *
+fds
+;
+
+312 
+rv
+;
+
+314 if�!
+sock
+ || !(
+fds
+=sock->fds) )
+
+316 
+	`log_�r
+("Invalude input�rguments\n");
+
+320 if�
+sock
+->
+�ag
+&
+FLAG_SOCK_TASKED
+ )
+
+323 
+	`log_�fo
+("add sock� [%d] i�؏sk�i�\n", 
+sock
+->
+fd
+);
+
+324 if�(
+rv
+=
+	`�_��y_add
+(
+fds
+->
+�sk_��y
+, 
+sock
+)) >=0 )
+
+326 
+sock
+->
+�dex
+ = 
+rv
+;
+
+327 
+sock
+->
+�ag
+ |�
+FLAG_SOCK_TASKED
+;
+
+332 
+	}
+}
+
+334 
+	$�_fds_d�_sock_�sk
+(
+CP_SOCK
+ *
+sock
+)
+
+336 if(!
+sock
+ || !(sock->
+�ag
+&
+FLAG_SOCK_TASKED
+))
+
+339 
+	`log_�fo
+("�mov�sock� [%d:%p] from�ask�i�[%p] by index [%d]\n", 
+sock
+->
+fd
+, sock, sock->
+fds
+->
+�sk_��y
+, sock->
+�dex
+);
+
+341 if(
+sock
+->
+�dex
+ >= 0)
+
+342 
+	`�_��y_rm_by�dex
+(
+sock
+->
+fds
+->
+�sk_��y
+, sock->
+�dex
+);
+
+344 
+	`�_��y_rm_byd�a
+(
+sock
+->
+fds
+->
+�sk_��y
+, sock);
+
+346 
+sock
+->
+�ag
+ &�~
+FLAG_SOCK_TASKED
+;
+
+347 
+sock
+->
+�dex
+ = -1;
+
+348 
+	`mem�t
+(&
+sock
+->
+ev�t
+, 0, (
+��l_ev�t
+));
+
+351 
+	}
+}
+
+353 *
+	$�_fds_sock_�queue
+(
+CP_SOCK
+ *
+sock
+)
+
+355 if(!
+sock
+ || sock->
+�ag
+&
+FLAG_SOCK_INQUEUE
+ || sock->�ag&
+FLAG_SOCK_TASKED
+ || !sock->
+fds
+)
+
+356  
+NULL
+;
+
+358 
+sock
+->
+�ag
+ |�
+FLAG_SOCK_INQUEUE
+;
+
+359  
+	`�_�queue
+(
+sock
+->
+fds
+->
+ev�t_queue
+, sock);
+
+360 
+	}
+}
+
+362 *
+	$�_fds_sock_dequeue
+(
+CP_FDS
+ *
+fds
+)
+
+364 
+CP_SOCK
+ *
+sock
+ = 
+NULL
+;
+
+366 if�!
+fds
+ )
+
+367  
+NULL
+;
+
+369 
+sock
+ = 
+	`�_dequeue
+(
+fds
+->
+ev�t_queue
+);
+
+370 
+sock
+->
+�ag
+ &�~
+FLAG_SOCK_INQUEUE
+;
+
+372  
+sock
+;
+
+373 
+	}
+}
+
+375 *
+	$�_fds_sock_rmqueue
+(
+CP_SOCK
+ *
+sock
+)
+
+377 if(!
+sock
+ || !(sock->
+�ag
+&
+FLAG_SOCK_INQUEUE
+�|| !sock->
+fds
+)
+
+378  
+NULL
+;
+
+380 
+sock
+->
+�ag
+ &�~
+FLAG_SOCK_INQUEUE
+;
+
+381  
+	`�_rmqueue
+(
+sock
+->
+fds
+->
+ev�t_queue
+, sock);
+
+382 
+	}
+}
+
+384 
+	$�_fds_li�_sock_�sk
+(
+CP_FDS
+ *
+fds
+)
+
+386 
+i
+;
+
+387 
+CP_SOCK
+ *
+sock
+;
+
+389 if(!
+fds
+)
+
+392 
+	`log_dbg
+("list�ll�he socket in�ask�ist:\n");
+
+395 
+	`�_li�_��y_f�_�ch
+(
+fds
+->
+�sk_��y
+, 
+i
+, 
+sock
+)
+
+397 if(
+sock
+)
+
+398 
+	`log_dbg
+("sock�[%d:%p] i��sk�i�\n", 
+sock
+->
+fd
+, sock);
+
+402 
+	}
+}
+
+405 
+	$�_fds_de�roy_sock
+(
+CP_SOCK
+ *
+sock
+)
+
+407 
+	`�_fds_d�_sock_�sk
+(
+sock
+);
+
+408 
+	`�_fds_sock_rmqueue
+(
+sock
+);
+
+409 
+	`�_d�_��l_ev�t
+(
+sock
+);
+
+410 
+	`�_fds_d�_sock_�gi�ry
+(
+sock
+);
+
+411 
+	`�_sock_�rm
+(
+sock
+);
+
+414 
+	}
+}
+
+417 
+	$�_fds_d�e�_ev�t
+(
+CP_FDS
+ *
+fds
+)
+
+419 
+i
+=0, 
+nfds
+=0;
+
+420 
+CP_SOCK
+ *
+sock
+;
+
+421 
+��l_ev�t
+ 
+evts
+[
+CP_MAX_EVENT_ONCE
+];
+
+423 if�!
+fds
+ )
+
+426 
+nfds
+ = 
+	`��l_wa�
+(
+fds
+->
+�fd
+, 
+evts
+, 
+CP_MAX_EVENT_ONCE
+, fds->
+timeout
+);
+
+428 if(
+nfds
+<0)
+
+430 
+	`log_�l
+("��l_wa� fa�u�: %s\n", 
+	`����
+(
+��o
+));
+
+434 if(
+nfds
+ == 0)
+
+437 
+	`log_dbg
+("��l_wa� g� [%d]�v�ts\n", 
+nfds
+);
+
+439 
+i
+=0; i<
+nfds
+; i++)
+
+441 
+sock
+=(
+CP_SOCK
+ *)
+evts
+[
+i
+].
+d�a
+.
+�r
+;
+
+442 
+sock
+->
+ev�t
+ = 
+evts
+[
+i
+];
+
+443 
+sock
+->
+a�v_time
+ = 
+	`time_now
+();
+
+445 
+	`log_dbg
+("sock� [%d] g��v��[0x%0x]�nd�dded��ev��queu�ok\n", 
+sock
+->
+fd
+, sock->
+ev�t
+.
+ev�ts
+);
+
+446 if�
+SOCK_STAT_ALREADY
+==
+sock
+->
+��us
+ )
+
+447 
+	`�_fds_sock_�queue
+(
+sock
+);
+
+451 
+	}
+}
+
+453 
+	$�_fds_�oc_ev�t
+(
+CP_FDS
+ *
+fds
+)
+
+455 
+i
+;
+
+456 
+CP_SOCK
+ *
+sock
+;
+
+457 
+rv
+;
+
+459 if�!
+fds
+ )
+
+467 
+	`�_li�_��y_f�_�ch
+(
+fds
+->
+�sk_��y
+, 
+i
+, 
+sock
+)
+
+469 if(
+sock
+)
+
+471 if(
+sock
+->
+cbfunc
+)
+
+473 
+	`log_dbg
+("Pro�s�sock� [%d] i��sk�i� o�ev��[%d]\n", 
+sock
+->
+fd
+, sock->
+ev�t
+.
+ev�ts
+);
+
+474 
+rv
+ = 
+sock
+->
+	`cbfunc
+(sock);
+
+478 
+	`log_�r
+("Pro�s�Sock� [%d:%p]�� im�em��ev����back�nd�emov��\n", 
+sock
+->
+fd
+, sock);
+
+479 
+	`�_fds_d�_sock_�sk
+(
+sock
+);
+
+485 !
+	`�_queue_is_em�y
+(
+fds
+->
+ev�t_queue
+))
+
+487 if�
+NULL
+!�(
+sock
+=
+	`�_fds_sock_dequeue
+(
+fds
+)) )
+
+490 if(
+sock
+->
+cbfunc
+)
+
+492 
+	`log_dbg
+("Pro�s�sock� [%d %p] i�ev��queu�ڃv��[%d]\n", 
+sock
+->
+fd
+, sock, sock->
+ev�t
+.
+ev�ts
+);
+
+493 
+rv
+ = 
+sock
+->
+	`cbfunc
+(sock);
+
+497 
+	`log_�r
+("Pro�s�Sock� [%d:%p]�� im�em��ev����back�nd�emov��\n", 
+sock
+->
+fd
+, sock);
+
+504 
+	}
+}
+
+507 
+	$�_sock_�rm_�rv�
+(
+CP_SOCK
+ *
+�rv_sock
+)
+
+509 
+CP_SOCK
+ *
+sock
+, *
+tsock
+;
+
+511 
+	`log_w�n
+("�rm����rv� sock� [%d]�nd [%d]�c�� cl���ow\n", 
+�rv_sock
+->
+fd
+, s�v_sock->
+ac��_�t
+);
+
+512 
+	`li�_f�_�ch_��y_��
+(
+sock
+, 
+tsock
+, &
+�rv_sock
+->
+ac��_li�
+, 
+�i�
+)
+
+516 
+	`�_fds_de�roy_sock
+(
+sock
+);
+
+520 
+	`log_w�n
+("�rm����rv� sock� [%d]�nd it�ac�� cl�� ok\n", 
+�rv_sock
+->
+fd
+);
+
+521 
+	`�_fds_de�roy_sock
+(
+�rv_sock
+);
+
+524 
+	}
+}
+
+527 
+	$�_sock_�rm_�l_�rv�
+(
+CP_FDS
+ *
+fds
+)
+
+529 
+CP_SOCK
+ *
+sock
+, *
+tsock
+;
+
+531 
+	`log_dbg
+("destroy�ll�he�isten socket�ow\n");
+
+534 
+	`li�_f�_�ch_��y_��
+(
+sock
+, 
+tsock
+, &
+fds
+->
+�rv�_li�
+, 
+�i�
+)
+
+536 
+	`�_sock_�rm_�rv�
+(
+sock
+);
+
+539 
+	`log_w�n
+("destroy�ll�he�isten socket ok\n");
+
+542 
+	}
+}
+
+545 
+	$�_sock_�rm_�l_���
+(
+CP_FDS
+ *
+fds
+)
+
+547 
+CP_SOCK
+ *
+sock
+ = 
+NULL
+, *
+tsock
+;
+
+549 
+	`log_dbg
+("destroy�ll�he connect socket�ow\n");
+
+551 
+	`li�_f�_�ch_��y_��
+(
+sock
+, 
+tsock
+, &
+fds
+->
+���_li�
+, 
+�i�
+)
+
+554 
+	`�_fds_de�roy_sock
+(
+sock
+);
+
+556 
+	`log_w�n
+("destroy�ll�he connect socket ok\n");
+
+557 
+	}
+}
+
+560 
+	$�_sock_d�e�_timeout
+(
+CP_FDS
+ *
+fds
+)
+
+562 
+CP_SOCK
+ *
+sock
+, *
+tsock
+, *
+�rv_sock
+;
+
+565 
+	`li�_f�_�ch_��y_��
+(
+sock
+, 
+tsock
+, &
+fds
+->
+���_li�
+, 
+�i�
+)
+
+568 if�
+sock
+->
+id�_timeout
+>0 && 
+	`time_���d
+(sock->
+a�v_time
+)>sock->idle_timeout )
+
+570 
+	`log_w�n
+("sock�[%d] idˁimeou�h���d�nd�dd�؏sk�i�\n", 
+sock
+->
+fd
+);
+
+571 
+	`log_dbg
+("ϡ: %lu��p�d�ime: %lu id��imeout: %lu\n", 
+sock
+->
+a�v_time
+, 
+	`time_���d
+(sock->a�v_time), sock->
+id�_timeout
+);
+
+572 
+sock
+->
+ev�t
+.
+ev�ts
+ = 
+CP_SOCK_EVENT_IDLE_TIMEOUT
+;
+
+573 
+	`�_fds_add_sock_�sk
+(
+sock
+);
+
+575 if�
+sock
+->
+msg_timeout
+>0 && sock->
+msg_time
+>0 && 
+	`time_���d
+(sock->msg_time)>sock->msg_timeout )
+
+577 
+	`log_w�n
+("sock�[%d] mes�g�timeou�h���d�nd�dd�؏sk�i�\n", 
+sock
+->
+fd
+);
+
+578 
+sock
+->
+ev�t
+.
+ev�ts
+ = 
+CP_SOCK_EVENT_MSG_TIMEOUT
+;
+
+579 
+	`�_fds_add_sock_�sk
+(
+sock
+);
+
+584 
+	`li�_f�_�ch_��y
+(
+�rv_sock
+, &
+fds
+->
+�rv�_li�
+, 
+�i�
+)
+
+586 
+	`li�_f�_�ch_��y_��
+(
+sock
+, 
+tsock
+, &
+�rv_sock
+->
+ac��_li�
+, 
+�i�
+)
+
+589 if�
+sock
+->
+id�_timeout
+>0 && 
+	`time_���d
+(sock->
+a�v_time
+)>sock->idle_timeout )
+
+591 
+sock
+->
+ev�t
+.
+ev�ts
+ = 
+CP_SOCK_EVENT_IDLE_TIMEOUT
+;
+
+592 
+	`log_w�n
+("sock�[%d] idˁimeou�h���d�nd�dd�؏sk�i�\n", 
+sock
+->
+fd
+);
+
+593 
+	`log_dbg
+("ϡ: %lu��p�d�ime: %lu id��imeout: %lu\n", 
+sock
+->
+a�v_time
+, 
+	`time_���d
+(sock->a�v_time), sock->
+id�_timeout
+);
+
+594 
+	`�_fds_add_sock_�sk
+(
+sock
+);
+
+596 if�
+sock
+->
+msg_timeout
+>0 && sock->
+msg_time
+>0 && 
+	`time_���d
+(sock->msg_time)>sock->msg_timeout )
+
+598 
+sock
+->
+ev�t
+.
+ev�ts
+ = 
+CP_SOCK_EVENT_MSG_TIMEOUT
+;
+
+599 
+	`log_w�n
+("sock�[%d] mes�g�timeou�h���d�nd�dd�؏sk�i�\n", 
+sock
+->
+fd
+);
+
+600 
+	`�_fds_add_sock_�sk
+(
+sock
+);
+
+604 
+	}
+}
+
+607 
+	$�_sock_�rm_�l_�sk
+(
+CP_FDS
+ *
+fds
+)
+
+609 
+i
+;
+
+610 
+CP_SOCK
+ *
+sock
+;
+
+612 
+	`log_dbg
+("remove�ll�he socket in�ask�ist�ow\n");
+
+615 
+	`�_li�_��y_f�_�ch
+(
+fds
+->
+�sk_��y
+, 
+i
+, 
+sock
+)
+
+618 if(
+sock
+)
+
+619 
+	`�_fds_d�_sock_�sk
+(
+sock
+);
+
+622  !
+	`�_queue_is_em�y
+(
+fds
+->
+ev�t_queue
+) )
+
+624 
+	`�_dequeue
+(
+fds
+->
+ev�t_queue
+);
+
+627 
+	`log_w�n
+("remove�ll�he socket in�ask�ist ok\n");
+
+630 
+	}
+}
+
+	@cp_fds.h
+
+14 #i�de�
+__CP_FDS_H
+
+
+15 
+	#__CP_FDS_H
+
+
+	)
+
+17 
+	~<�dio.h
+>
+
+18 
+	~<uni�d.h
+>
+
+19 
+	~<�dlib.h
+>
+
+20 
+	~<��o.h
+>
+
+21 
+	~<�r�g.h
+>
+
+23 
+	~<sys/��l.h
+>
+
+25 
+	~"�_kli�.h
+"
+
+26 
+	~"�_logg�.h
+"
+
+27 
+	~"�_sock.h
+"
+
+28 
+	~"�_queue.h
+"
+
+29 
+	~"�_��y.h
+"
+
+31 
+	#CP_MAX_EVENT_ONCE
+ 128
+
+	)
+
+32 
+	#CP_DEF_MAX_EVENTS
+ 1024
+
+	)
+
+33 
+	#CP_DEF_FDS_TIMEOUT
+ 10
+
+	)
+
+35 
+	#IN_EVENT_LIST
+ 0
+
+	)
+
+36 
+	#IN_TASK_LIST
+ 1
+
+	)
+
+38 
+	#FLAG_FDS_INIT
+ (1<<0)
+
+	)
+
+39 
+	#FLAG_FDS_MALLOC
+ (1<<1)
+
+	)
+
+41 
+	g_CP_SOCK
+;
+
+42 
+	g_CP_FDS
+;
+
+44 
+	s_CP_FDS
+
+
+46 
+	m�ag
+;
+
+47 
+	m�fd
+;
+
+48 
+	mtimeout
+;
+
+49 
+	mmax_ev�t
+;
+
+50 
+	mev�t_�t
+;
+
+52 
+li�_h�d
+ 
+	m�rv�_li�
+;
+
+53 
+li�_h�d
+ 
+	m���_li�
+;
+
+54 
+CP_QUEUE
+ *
+	mev�t_queue
+;
+
+55 
+CP_ARRAY
+ *
+	m�sk_��y
+;
+
+65 } 
+	tCP_FDS
+;
+
+68 
+CP_FDS
+ *
+�_fds_��
+(CP_FDS *
+fds
+, 
+maxev�ts
+, 
+timeout
+);
+
+70 

+�_fds_�rm
+(
+CP_FDS
+ *
+fds
+);
+
+71 
+	#�_fds_�rm_��r
+(
+fds
+�{
+	`�_fds_�rm
+(fds); fds=
+NULL
+;}
+
+	)
+
+74 
+�_add_��l_ev�t
+(
+_CP_SOCK
+ *
+sock
+);
+
+76 
+�_mod_��l_ev�t
+(
+_CP_SOCK
+ *
+sock
+, 
+ev�t
+);
+
+78 
+�_d�_��l_ev�t
+(
+_CP_SOCK
+ *
+sock
+);
+
+82 
+�_fds_add_sock_�gi�ry
+(
+_CP_SOCK
+ *
+sock
+);
+
+84 
+�_fds_d�_sock_�gi�ry
+(
+_CP_SOCK
+ *
+sock
+);
+
+87 
+�_fds_add_sock_�sk
+(
+_CP_SOCK
+ *
+sock
+);
+
+89 
+�_fds_d�_sock_�sk
+(
+_CP_SOCK
+ *
+sock
+);
+
+91 
+�_fds_li�_sock_�sk
+(
+CP_FDS
+ *
+fds
+);
+
+93 *
+�_fds_sock_�queue
+(
+_CP_SOCK
+ *
+sock
+);
+
+94 *
+�_fds_sock_rmqueue
+(
+_CP_SOCK
+ *
+sock
+);
+
+95 *
+�_fds_sock_dequeue
+(
+CP_FDS
+ *
+fds
+);
+
+98 
+�_fds_de�roy_sock
+(
+_CP_SOCK
+ *
+sock
+);
+
+99 
+	#�_fds_de�roy_sock_��r
+(
+sock
+�{
+	`�_fds_de�roy_sock
+(sock); sock=
+NULL
+;}
+
+	)
+
+102 

+�_fds_d�e�_ev�t
+(
+CP_FDS
+ *
+fds
+);
+
+104 

+�_fds_�oc_ev�t
+(
+CP_FDS
+ *
+fds
+);
+
+106 

+�_sock_d�e�_timeout
+(
+CP_FDS
+ *
+fds
+);
+
+109 

+�_sock_�rm_�rv�
+(
+_CP_SOCK
+ *
+�rv_sock
+);
+
+110 

+�_sock_�rm_�l_�rv�
+(
+CP_FDS
+ *
+fds
+);
+
+111 

+�_sock_�rm_�l_���
+(
+CP_FDS
+ *
+fds
+);
+
+112 

+�_sock_�rm_�l_�sk
+(
+CP_FDS
+ *
+fds
+);
+
+	@cp_gprs.c
+
+14 
+	~"�_g�s.h
+"
+
+15 
+	~"�_h�.h
+"
+
+16 
+	~"�_�oc.h
+"
+
+17 
+	~"�_gsmmux.h
+"
+
+18 
+	~"�91_io�l.h
+"
+
+20 
+	$��_gsm_modu�
+(
+MODULE_INFO
+ *
+modu�
+)
+
+22 
+i
+=0;
+
+23 
+dev�me
+[
+DEVNAME_LEN
+];
+
+25 
+	`log_�fo
+("Initialize GSM module context\n");
+
+27 
+	`mem�t
+(
+modu�
+, 0, (*module));
+
+29 
+modu�
+->
+ev�t
+ = 
+REQ_POWER_RESET
+;
+
+31 
+	`�h�ad_mu�x_��
+(&
+modu�
+->
+lock
+, 
+NULL
+);
+
+33 if�!(
+modu�
+->
+gsmp�t
+=
+	`comp�t_��
+(
+GSM_DATAPORT
+, 115200, "8N1N")) )
+
+39 
+modu�
+->
+comp�t_�t
+ = 
+MAX_DATAPORT
+;
+
+40 
+i
+=0; i<
+modu�
+->
+comp�t_�t
+; i++)
+
+42 
+	`���tf
+(
+dev�me
+, 
+DEVNAME_LEN
+, "%s%d", 
+CMUX_DATAPORT
+, 
+i
++
+CMUX_PORT_START_INDEX
+);
+
+43 
+modu�
+->
+comp�t
+[
+i
+] = 
+	`comp�t_��
+(
+dev�me
+, 115200, "8N1N");
+
+44 if(
+NULL
+ =�
+modu�
+->
+comp�t
+[
+i
+])
+
+45 
+ERROR
+;
+
+52 
+ERROR
+:
+
+53 
+i
+-- >= 0)
+
+55 
+	`comp�t_�rm
+(
+modu�
+->
+comp�t
+[
+i
+]);
+
+58 
+	}
+}
+
+66 
+	$�o�_gsm_d���t
+(
+MODULE_INFO
+ *
+modu�
+)
+
+68 
+i
+;
+
+70 
+i
+=0; i<
+modu�
+->
+comp�t_�t
+; i++)
+
+72 
+	`log_�ml
+("Clo� GPRS d��܈%s=>[fd:%d]\n", 
+modu�
+->
+comp�t
+[
+i
+]->
+dev_�me
+, modu�->comp�t[i]->
+fd
+);
+
+73 
+	`comp�t_�o�
+(
+modu�
+->
+comp�t
+[
+i
+]);
+
+77 
+	}
+}
+
+84 
+	$ݒ_gsm_d���t
+(
+MODULE_INFO
+ *
+modu�
+)
+
+86 
+i
+, 
+�tv�
+ = -1;
+
+88 
+i
+=0; i<
+modu�
+->
+comp�t_�t
+; i++)
+
+90 if�(
+�tv�
+=
+	`comp�t_ݒ
+(
+modu�
+->
+comp�t
+[
+i
+])) < 0)
+
+92 
+	`log_�r
+("O��GPRS d��܈%��u�: %d\n", 
+modu�
+->
+comp�t
+[
+i
+]->
+dev_�me
+, 
+�tv�
+);
+
+93 
+ERROR
+;
+
+95 
+	`log_�ml
+("O��GPRS d���t[%p] %s=>[fd:%d]\n", 
+modu�
+->
+comp�t
+, modu�->comp�t[
+i
+]->
+dev_�me
+, modu�->comp�t[i]->
+fd
+);
+
+100 
+ERROR
+:
+
+101 
+	`�o�_gsm_d���t
+(
+modu�
+);
+
+102  
+�tv�
+;
+
+103 
+	}
+}
+
+113 
+COM_PORT
+ *
+	$�loc_gsm_d���t
+(*
+who
+, 
+MODULE_INFO
+ *
+modu�
+)
+
+115 
+lock
+ = 0;
+
+116 
+i
+;
+
+117 
+COM_PORT
+ *
+comp�t
+ = 
+NULL
+;
+
+119 if(
+lock
+)
+
+120  
+NULL
+;
+
+122 
+lock
+ = 1;
+
+125 
+i
+=0; i<
+modu�
+->
+comp�t_�t
+; i++)
+
+127 if(
+modu�
+->
+comp�t
+[
+i
+]->
+u�d
+ !�
+YES
+)
+
+129 
+comp�t
+ = 
+modu�
+->comp�t[
+i
+];
+
+130 
+comp�t
+->
+u�d
+ = 
+YES
+;
+
+135 
+lock
+ = 0;
+
+137 if(
+comp�t
+)
+
+139 
+	`log_dbg
+("%��lo�� GPRS d���t[%d] %s=>[fd:%d] ok\n", 
+who
+, 
+i
+, 
+comp�t
+->
+dev_�me
+, comp�t->
+fd
+);
+
+140 
+modu�
+->
+u�rs
+++;
+
+144 
+	`log_dbg
+("%��lo�� GPRS d��܈�u�\n", 
+who
+);
+
+148  
+comp�t
+;
+
+149 
+	}
+}
+
+156 
+	$�_gsm_d���t
+(*
+who
+, 
+MODULE_INFO
+ *
+modu�
+, 
+COM_PORT
+ **
+comp�t
+)
+
+158 
+i
+;
+
+161 
+i
+=0; i<
+modu�
+->
+comp�t_�t
+; i++)
+
+163 if(
+modu�
+->
+comp�t
+[
+i
+] == *comport)
+
+165 
+	`log_dbg
+("%�� GPRS d��܈%s=>[fd:%d]\n", 
+who
+, (*
+comp�t
+)->
+dev_�me
+, (*comp�t)->
+fd
+);
+
+166 
+modu�
+->
+comp�t
+[
+i
+]->
+u�d
+ = 
+NO
+;
+
+167 
+modu�
+->
+u�rs
+--;
+
+168 *
+comp�t
+ = 
+NULL
+;
+
+174 
+	}
+}
+
+182 
+	$pow�_�_modu�
+(
+MODULE_INFO
+ *
+modu�
+)
+
+184 
+rv
+ = 0;
+
+185 
+	`log_dbg
+("Turn on GPRS module�ow\n");
+
+187 if�
+ON
+ =�(
+modu�
+->
+pwr_��us
+=
+	`h�_g�_g�s_pow�
+()) )
+
+189 
+rv
+ = 0;
+
+190 
+	`log_dbg
+("GPRS module�lready�ower on\n");
+
+191 
+��nup
+;
+
+194 if�(
+rv
+=
+	`h�_tu�_g�s_pow�
+(
+ON
+)�|| ON!=
+	`h�_g�_g�s_pow�
+())
+
+196 
+	`log_�r
+("Tu� o�GPRS modu� fa�u�:�v=%d�ow�=%d\n", 
+rv
+, 
+	`h�_g�_g�s_pow�
+());
+
+197 
+rv
+ = -1;
+
+198 
+��nup
+;
+
+201 
+	`mi�o_�c�d_��p
+(500);
+
+203 if�
+	`comp�t_ݒ
+(
+modu�
+->
+gsmp�t
+) < 0)
+
+205 
+	`log_�r
+("O��GSM s���p܈[%s] fa�u�\n", 
+modu�
+->
+gsmp�t
+->
+dev_�me
+);
+
+209 if�!
+	`�cmd_check_pow�_�
+(
+modu�
+->
+gsmp�t
+) )
+
+211 
+	`log_�r
+("S�d ATE0 check GPRS modu� AT comm�d fa�u�\n", 
+modu�
+->
+gsmp�t
+->
+dev_�me
+);
+
+215 
+	`��ch_gsm0710
+(
+modu�
+->
+gsmp�t
+);
+
+217 if�0 !�
+	`ݒ_gsm_d���t
+(
+modu�
+) )
+
+219 
+rv
+ = -3;
+
+220 
+	`log_�r
+("Open GPRS module comport failure\n");
+
+221 
+��nup
+;
+
+224 
+��nup
+:
+
+226 if(!
+rv
+)
+
+228 
+modu�
+->
+�ady
+ = 
+MODULE_READY
+;
+
+229 
+	`log_�ml
+("Turn on GPRS module succesfully\n");
+
+233 
+modu�
+->
+�ady
+ = 
+NOT_READY
+;
+
+234 
+	`log_�ml
+("Tu� o�GPRS modu� fa�ed,�v=%d\n", 
+rv
+);
+
+237 
+modu�
+->
+�ady
+ = 0!=
+rv
+ ? 
+NOT_READY
+ : 
+MODULE_READY
+;
+
+238 
+	`mem�t
+(&(
+modu�
+->
+�g
+), 0, (
+REGISTER_INFO
+));
+
+239 
+modu�
+->
+pwr_��us
+ = 
+	`h�_g�_g�s_pow�
+();
+
+241  
+rv
+;
+
+242 
+	}
+}
+
+249 
+	$pow�_off_modu�
+(
+MODULE_INFO
+ *
+modu�
+)
+
+251 if�
+OFF
+ =�(
+modu�
+->
+pwr_��us
+=
+	`h�_g�_g�s_pow�
+()) )
+
+253 
+	`log_dbg
+("GPRS module�lready�ower off\n");
+
+257 
+modu�
+->
+u�rs
+)
+
+259 
+	`log_w�n
+("%d��li�ti� st��u��h�GPRS modu� d���t, wa�����d...\n", 
+modu�
+->
+u�rs
+);
+
+260 
+	`��p
+(1);
+
+263 
+	`log_�ml
+("Turn off GPRS module�ow\n");
+
+264 
+	`�o�_gsm_d���t
+(
+modu�
+);
+
+266 
+	`comp�t_�o�
+(
+modu�
+->
+gsmp�t
+);
+
+267 
+	`h�_tu�_g�s_pow�
+(
+OFF
+);
+
+269 
+modu�
+->
+�ady
+ = 
+NOT_READY
+;
+
+270 
+	`mem�t
+(&(
+modu�
+->
+�g
+), 0, (
+REGISTER_INFO
+));
+
+271 
+modu�
+->
+pwr_��us
+ = 
+	`h�_g�_g�s_pow�
+();
+
+273 
+	`mi�o_�c�d_��p
+(800);
+
+275 
+	}
+}
+
+277 
+	$�t_modu�_ev�t
+(
+MODULE_INFO
+ *
+modu�
+, 
+�que�
+)
+
+279 
+	`log_dbg
+("S��h�modu˃v���que�[%d]\n", 
+�que�
+);
+
+280 
+	`�h�ad_mu�x_lock
+(&
+modu�
+->
+lock
+);
+
+281 
+modu�
+->
+ev�t
+ = 
+�que�
+;
+
+282 
+	`�h�ad_mu�x_u�ock
+(&
+modu�
+->
+lock
+);
+
+283 
+	}
+}
+
+290 
+	$�t_modu�_ev�t_pow�
+(
+MODULE_INFO
+ *
+modu�
+)
+
+292 
+rv
+ = 0;
+
+293 
+modu�
+->
+ev�t
+)
+
+295 
+REQ_POWER_ON
+:
+
+296 
+rv
+ = 
+	`pow�_�_modu�
+(
+modu�
+);
+
+299 
+REQ_POWER_OFF
+:
+
+300 
+rv
+ = 
+	`pow�_off_modu�
+(
+modu�
+);
+
+303 
+REQ_POWER_RESET
+:
+
+304 
+rv
+ = 
+	`pow�_off_modu�
+(
+modu�
+);
+
+305 
+rv
+ = 
+	`pow�_�_modu�
+(
+modu�
+);
+
+309 if�
+rv
+ )
+
+311 
+	`log_�ml
+("Re�ڣ f܁h�GPRS�eque��v��%d fa�u�,�v=%d\n", 
+modu�
+->
+ev�t
+, 
+rv
+);
+
+312  
+rv
+;
+
+316 
+	`log_�ml
+("Re�ڣ f܁h�GPRS�eque��v��%d�nd cˬ�hi�ev��ok\n", 
+modu�
+->
+ev�t
+);
+
+317 
+	`�t_modu�_ev�t
+(
+modu�
+, 
+REQ_EVENT_NONE
+);
+
+320 
+	}
+}
+
+323 
+	$�cmd_��e�_��us
+(
+MODULE_INFO
+ *
+modu�
+)
+
+325 
+COM_PORT
+ *
+comp�t
+;
+
+326 
+REGISTER_INFO
+ *
+�g
+ = &(
+modu�
+->reg);
+
+327 *
+who
+ = "atcmd_inspect_status()";
+
+329 
+��t_time
+ ;
+
+332 if(
+��t_time
+ && 
+	`time_���d
+(start_time) < 10000)
+
+337 
+��t_time
+�
+	`time_now
+();
+
+339 
+comp�t
+ = 
+	`�loc_gsm_d���t
+(
+who
+, 
+modu�
+);
+
+340 if(
+NULL
+ !�
+comp�t
+)
+
+342 
+	`log_dbg
+("A�o�d��܈%s=>[fd:%d]\n", 
+comp�t
+->
+dev_�me
+, comp�t->
+fd
+);
+
+347 
+�g
+->
+sig�l
+ = 
+	`�cmd_check_g�s_sig�l
+(
+comp�t
+);
+
+349 
+	`�cmd_check_g�s_lo�ti�
+(
+comp�t
+, &
+�g
+->
+loc
+);
+
+351 
+	`log_dbg
+("F��d��܈%s=>[fd:%d]\n", 
+comp�t
+->
+dev_�me
+, comp�t->
+fd
+);
+
+352 
+	`�_gsm_d���t
+(
+who
+, 
+modu�
+, &
+comp�t
+);
+
+355 
+	}
+}
+
+364 
+	$�cmd_check_modu�_�ady
+(
+COM_PORT
+ *
+comp�t
+, 
+times
+)
+
+366 
+rv
+;
+
+367 
+�_�t
+ = 0;
+
+370 
+rv
+ = 
+	`�cmd_check_�_�ady
+(
+comp�t
+);
+
+371 if(
+rv
+)
+
+372 
+��nup
+;
+
+375 
+rv
+ = 
+	`�cmd_check_sim_v�id
+(
+comp�t
+);
+
+377 
+��nup
+:
+
+378 if(
+rv
+)
+
+380 if(
+�_�t
+ < 
+times
+)
+
+382 
+�_�t
+ ++;
+
+387 
+�_�t
+ = 0;
+
+393 
+�_�t
+ = 0;
+
+396 
+	}
+}
+
+398 
+	$�cmd_check_pow�_�
+(
+COM_PORT
+ *
+comp�t
+)
+
+400 
+i
+, 
+rv
+ = 0;
+
+402 
+i
+=0; i<10; i++)
+
+404 if�!
+	`�cmd_check_�_�ady
+(
+comp�t
+) )
+
+406 
+rv
+ = 1;
+
+411  
+rv
+;
+
+412 
+	}
+}
+
+417 
+	$�cmd_modu�_�e�t
+(
+COM_PORT
+ *
+comp�t
+)
+
+419 
+�tv�
+ = 0;
+
+422 if(0 !�(
+�tv�
+=
+	`�nd_�cmd_check_ok
+(
+comp�t
+, "AT+COPS=0\r", 3000)) )
+
+424 
+	`log_w�n
+("AT+COPS=0 Set Auto Select Carrier: [FAILED]\n");
+
+427 
+	`log_�ml
+("AT+COPS=0 Set Auto Select Carrier: [OK]\n");
+
+429  
+�tv�
+;
+
+430 
+	}
+}
+
+433 
+	$�cmd_check_hw�fo
+(
+COM_PORT
+ *
+comp�t
+, 
+HW_INFO
+ *
+hw
+, 
+times
+)
+
+435 
+rv
+;
+
+436 
+�_�t
+ = 0;
+
+439 
+rv
+ = 
+	`�cmd_check_g�s_�me
+(
+comp�t
+, 
+hw
+->
+mod�
+);
+
+440 if(
+rv
+)
+
+441 
+��nup
+;
+
+444 
+rv
+ = 
+	`�cmd_check_g�s_v�si�
+(
+comp�t
+, 
+hw
+->
+m�v
+);
+
+445 if(
+rv
+)
+
+446 
+��nup
+;
+
+449 
+rv
+ = 
+	`�cmd_check_g�s_�mi
+(
+comp�t
+, 
+hw
+->
+�mi
+);
+
+451 
+��nup
+:
+
+452 if(
+rv
+)
+
+454 if(
+�_�t
+ < 
+times
+)
+
+456 
+�_�t
+ ++;
+
+461 
+�_�t
+ = 0;
+
+467 
+�_�t
+ = 0;
+
+470 
+	}
+}
+
+473 
+	$�cmd_check_�gi�
+(
+COM_PORT
+ *
+comp�t
+, 
+REGISTER_INFO
+ *
+�g
+, 
+times
+)
+
+475 
+rv
+ = 0;
+
+476 
+�_�t
+ = 0;
+
+479 
+�g
+->
+sig�l
+ = 
+	`�cmd_check_g�s_sig�l
+(
+comp�t
+);
+
+480 if(
+�g
+->
+sig�l
+<2 &&�eg->signal>31)
+
+482 
+rv
+ = -1;
+
+483 
+��nup
+;
+
+487 
+�g
+->
+ty�
+ = 
+	`�cmd_check_g�s_�gi��
+(
+comp�t
+);
+
+489 if(
+REG_HOMEWORK
+==
+�g
+->
+ty�
+ || 
+REG_ROAMING
+==�eg->type)
+
+492 
+	`log_�ml
+("SIM card�egister successfully.\n");
+
+493 
+rv
+ = 0;
+
+495 if(
+REG_DENIED
+==
+�g
+->
+ty�
+)
+
+498 
+	`log_�r
+("SIM card�egist denied.\n");
+
+499 
+rv
+ = -2;
+
+500 
+��nup
+;
+
+504 
+	`log_�r
+("SIM card�egist failure.\n");
+
+505 
+rv
+ = -3;
+
+506 
+��nup
+;
+
+509 
+rv
+ = 
+	`�cmd_check_g�s_���r
+(
+comp�t
+, 
+�g
+->
+���r
+);
+
+510 if(
+rv
+)
+
+512 
+rv
+ = -4;
+
+513 
+	`log_�r
+("Check SIM card�crrier failure.\n");
+
+514 
+��nup
+;
+
+517 
+rv
+ = 
+	`�cmd_check_g�s_mcc_mnc
+(
+comp�t
+, 
+�g
+->
+loc
+.
+mcc_mnc
+);
+
+518 if(
+rv
+)
+
+520 
+rv
+ = -4;
+
+521 
+	`log_�r
+("Check SIM card�egister MCC-MNC failure\n");
+
+522 
+��nup
+;
+
+526 
+��nup
+:
+
+527 if(
+rv
+)
+
+529 if(
+�_�t
+ < 
+times
+)
+
+531 
+�_�t
+ ++;
+
+536 
+�_�t
+ = 0;
+
+542 
+�_�t
+ = 0;
+
+546 
+	}
+}
+
+548 
+	$�cmd_check_�tw�k_�fo
+(
+COM_PORT
+ *
+comp�t
+, 
+REGISTER_INFO
+ *
+�g
+)
+
+550 
+�tv�
+ = 0;
+
+553 
+�tv�
+ = 
+	`�cmd_check_g�s_���r
+(
+comp�t
+, 
+�g
+->
+���r
+);
+
+554 if(
+�tv�
+)  -1;
+
+557 
+�tv�
+ = 
+	`�cmd_check_g�s_lo�ti�
+(
+comp�t
+, &(
+�g
+->
+loc
+));
+
+558 if(
+�tv�
+)  -3;
+
+560  
+�tv�
+;
+
+561 
+	}
+}
+
+564 
+	$�cmd_check_�ady
+(
+MODULE_INFO
+ *
+modu�
+)
+
+566 
+rv
+;
+
+567 
+COM_PORT
+ *
+comp�t
+;
+
+568 *
+who
+ = "atcmd_check_ready()";
+
+570 
+	`log_�ml
+("AT command check GPRS�egistry status�ow\n");
+
+572 
+comp�t
+ = 
+	`�loc_gsm_d���t
+(
+who
+, 
+modu�
+);
+
+573 if(
+NULL
+ =�
+comp�t
+)
+
+575 
+	`log_w�n
+("A�o�d��܈f� %s(��u�.\n", 
+__FUNCTION__
+);
+
+578 
+	`log_dbg
+("A�o�d��܈%s=>[fd:%d]\n", 
+comp�t
+->
+dev_�me
+, comp�t->
+fd
+);
+
+580 
+modu�
+->
+�ady
+)
+
+582 
+MODULE_READY
+:
+
+583 
+rv
+ = 
+	`�cmd_check_modu�_�ady
+(
+comp�t
+, 10);
+
+584 if(
+rv
+ > 0)
+
+586 
+	`log_�ml
+("GPRS AT command�eady�nd SIM card valid successfully\n");
+
+587 
+modu�
+->
+�ady
+++;
+
+589 if(
+rv
+ == 0)
+
+591 
+	`log_�ml
+("GPRS AT command�eady�nd SIM card valid check continue...\n");
+
+593 if(
+rv
+ < 0)
+
+595 
+	`log_�ml
+("GPRS AT command�eady�nd SIM card valid check failed\n");
+
+596 
+	`�t_modu�_ev�t
+(
+modu�
+, 
+REQ_POWER_RESET
+);
+
+600 
+CHECK_HWINFO
+:
+
+601 
+rv
+ = 
+	`�cmd_check_hw�fo
+(
+comp�t
+, &(
+modu�
+->
+hw
+), 10);
+
+602 if(
+rv
+ > 0)
+
+604 
+	`log_�ml
+("Check�he GPRS Module hardware information successfully\n");
+
+605 
+modu�
+->
+�ady
+++;
+
+607 if(
+rv
+ == 0)
+
+609 
+	`log_�ml
+("Check�he GPRS Module hardware information continue...\n");
+
+611 if(
+rv
+ < 0)
+
+613 
+	`log_�ml
+("Check�he GPRS Module hardware information failed...\n");
+
+614 
+	`�t_modu�_ev�t
+(
+modu�
+, 
+REQ_POWER_RESET
+);
+
+618 
+CHECK_REGISTRY
+:
+
+619 
+rv
+ = 
+	`�cmd_check_�gi�
+(
+comp�t
+, &(
+modu�
+->
+�g
+), 10);
+
+620 if(
+rv
+ > 0)
+
+622 
+	`log_�ml
+("Check�he SIM card�egistry successfully\n");
+
+623 
+modu�
+->
+�ady
+++;
+
+625 if(
+rv
+ == 0)
+
+627 
+	`log_�ml
+("Check�he SIM card�egistry continue...\n");
+
+629 if(
+rv
+ < 0)
+
+631 
+	`log_�ml
+("Check�he SIM card�egistry failed\n");
+
+632 
+	`�t_modu�_ev�t
+(
+modu�
+, 
+REQ_POWER_RESET
+);
+
+637 
+	`�_gsm_d���t
+(
+who
+, 
+modu�
+, &
+comp�t
+);
+
+638  
+rv
+;
+
+639 
+	}
+}
+
+646 
+	$��_th�ad_�rm
+(*
+th�ad_�g
+)
+
+648 
+i
+=0;
+
+649 
+MODULE_INFO
+ *
+modu�
+ = (MODULE_INFO *)
+th�ad_�g
+;
+
+651 
+	`log_�ml
+("start�erminate GPRS main(control)�hread\n");
+
+653 
+	`pow�_off_modu�
+(
+modu�
+);
+
+655 
+i
+=0; i<
+modu�
+->
+comp�t_�t
+; i++)
+
+657 
+	`comp�t_�rm
+(
+modu�
+->
+comp�t
+[
+i
+]);
+
+659 
+	}
+}
+
+668 
+	$��_th�ad_��t
+(*
+th�ad_�g
+)
+
+670 
+MODULE_INFO
+ *
+modu�
+ = (MODULE_INFO *)
+th�ad_�g
+;
+
+672 
+	`log_�ml
+("GPRS�ower control�hread start�unning\n");
+
+674  !
+g_�_sig�l
+.
+��
+ )
+
+677 if(
+modu�
+->
+ev�t
+)
+
+679 
+	`�t_modu�_ev�t_pow�
+(
+modu�
+);
+
+682 if(
+ALL_READY
+ =�
+modu�
+->
+�ady
+)
+
+686 
+	`�cmd_��e�_��us
+(
+modu�
+);
+
+692 if�
+ON
+ =�
+modu�
+->
+pwr_��us
+ )
+
+694 
+	`�cmd_check_�ady
+(
+modu�
+);
+
+698 
+	`��p
+(1);
+
+702 
+	`��_th�ad_�rm
+(
+th�ad_�g
+);
+
+705 
+	}
+}
+
+	@cp_gprs.h
+
+14 #i�de�
+__CP_GPRS_H
+
+
+15 
+	#__CP_GPRS_H
+
+
+	)
+
+17 
+	~<�dio.h
+>
+
+18 
+	~<�dlib.h
+>
+
+19 
+	~<uni�d.h
+>
+
+20 
+	~<�h�ad.h
+>
+
+22 
+	~"�_comm�.h
+"
+
+23 
+	~"�_logg�.h
+"
+
+24 
+	~"�_comp�t.h
+"
+
+25 
+	~"�_�cmd.h
+"
+
+26 
+	~"�_time.h
+"
+
+27 
+	~"�_h�.h
+"
+
+29 
+	#YES
+ 1
+
+	)
+
+30 
+	#NO
+ 0
+
+	)
+
+32 
+	#GSM_CTRLPORT
+ "/dev/g�s"
+
+	)
+
+33 
+	#GSM_DATAPORT
+ "/dev/�yS2"
+
+	)
+
+35 
+	#MAX_DATAPORT
+ 4
+
+	)
+
+36 
+	#CMUX_PORT_START_INDEX
+ 1
+
+	)
+
+37 
+	#CMUX_DATAPORT
+ "/dev/gsm�y"
+
+	)
+
+42 
+	mREQ_EVENT_NONE
+ = 0,
+
+43 
+	mREQ_POWER_OFF
+,
+
+44 
+	mREQ_POWER_ON
+,
+
+45 
+	mREQ_POWER_RESET
+,
+
+51 
+	mNOT_READY
+,
+
+52 
+	mMODULE_READY
+,
+
+53 
+	mCHECK_HWINFO
+,
+
+54 
+	mCHECK_REGISTRY
+,
+
+55 
+	mALL_READY
+,
+
+61 
+	mREG_UNREGIST
+ = 0,
+
+62 
+	mREG_HOMEWORK
+,
+
+63 
+	mREG_SEARCHING
+,
+
+64 
+	mREG_DENIED
+,
+
+65 
+	mREG_UNKNOW
+,
+
+66 
+	mREG_ROAMING
+,
+
+70 
+	#MODE_AUTO
+ 2
+
+	)
+
+71 
+	#MODE_GSM
+ 13
+
+	)
+
+72 
+	#MODE_WCDMA
+ 14
+
+	)
+
+77 
+	mNS_NONE
+ = 0,
+
+78 
+	mNS_GSM
+,
+
+79 
+	mNS_GPRS
+,
+
+80 
+	mNS_EGPRS
+,
+
+81 
+	mNS_WCDMA
+,
+
+82 
+	mNS_HSDPA
+,
+
+83 
+	mNS_HSUPA
+,
+
+84 
+	mNS_HSPA
+,
+
+87 
+	s__MODULE_INFO
+
+
+89 
+	mu�rs
+;
+
+90 
+	m�ady
+;
+
+91 
+	mev�t
+;
+
+92 
+	mpwr_��us
+;
+
+94 
+�h�ad_mu�x_t
+ 
+	mlock
+;
+
+96 
+HW_INFO
+ 
+	mhw
+;
+
+97 
+REGISTER_INFO
+ 
+	m�g
+;
+
+99 
+COM_PORT
+ *
+	mgsmp�t
+;
+
+101 
+	mcomp�t_�t
+;
+
+102 
+COM_PORT
+ *
+	mcomp�t
+[
+MAX_DATAPORT
+];
+
+103 } 
+	tMODULE_INFO
+;
+
+106 

+��_gsm_modu�
+(
+MODULE_INFO
+ *
+modu�
+);
+
+107 

+ݒ_gsm_d���t
+(
+MODULE_INFO
+ *
+modu�
+);
+
+108 

+�o�_gsm_d���t
+(
+MODULE_INFO
+ *
+modu�
+);
+
+109 
+COM_PORT
+ *
+�loc_gsm_d���t
+(*
+who
+, 
+MODULE_INFO
+ *
+modu�
+);
+
+110 

+�_gsm_d���t
+(*
+who
+, 
+MODULE_INFO
+ *
+modu�
+, 
+COM_PORT
+ **
+comp�t
+);
+
+112 

+pow�_�_modu�
+(
+MODULE_INFO
+ *
+modu�
+);
+
+113 

+pow�_off_modu�
+(
+MODULE_INFO
+ *
+modu�
+);
+
+115 

+�cmd_check_�ady
+(
+MODULE_INFO
+ *
+modu�
+);
+
+116 

+�cmd_��e�_��us
+(
+MODULE_INFO
+ *
+modu�
+);
+
+117 

+�cmd_check_pow�_�
+(
+COM_PORT
+ *
+comp�t
+);
+
+120 

+�t_modu�_ev�t
+(
+MODULE_INFO
+ *
+modu�
+, 
+�que�
+);
+
+121 

+�t_modu�_ev�t_pow�
+(
+MODULE_INFO
+ *
+modu�
+);
+
+123 

+��_th�ad_��t
+(*
+th�ad_�g
+);
+
+124 

+��_th�ad_�rm
+(*
+th�ad_�g
+);
+
+	@cp_gsmmux.c
+
+15 
+	~<�dlib.h
+>
+
+16 
+	~<�dio.h
+>
+
+17 
+	~<�r�g.h
+>
+
+18 
+	~<sys/ty�s.h
+>
+
+19 
+	~<sys/��.h
+>
+
+20 
+	~<f��.h
+>
+
+21 
+	~<sys/io�l.h
+>
+
+22 
+	~<��o.h
+>
+
+23 
+	~<�rmios.h
+>
+
+24 
+	~<uni�d.h
+>
+
+26 
+	~"�_logg�.h
+"
+
+27 
+	~"�_gsmmux.h
+"
+
+29 
+	$��ch_gsm0710
+(
+COM_PORT
+ *
+comp�t
+)
+
+31 
+ldisc
+ = 
+N_GSM0710
+;
+
+32 
+gsm_c�fig
+ 
+c
+;
+
+34 
+	`log_�ml
+("A�ach GMUX o�GSM�܈\"%s\"�ow\n", 
+comp�t
+->
+dev_�me
+);
+
+36 if�
+	`�nd_�cmd_check_ok
+(
+comp�t
+, "AT+CMUX=0\r", 3000) )
+
+38 
+	`log_�r
+("S�d \"AT+CMUX=0\" comm�d check %��u�\n", 
+comp�t
+->
+dev_�me
+);
+
+42 i�(
+	`io�l
+(
+comp�t
+->
+fd
+, 
+TIOCSETD
+, &
+ldisc
+) < 0)
+
+44 
+	`log_�r
+("C��ه�ach N_GSM0710��comp܈\"%s\" \n", 
+comp�t
+->
+dev_�me
+);
+
+49 
+	`io�l
+(
+comp�t
+->
+fd
+, 
+GSMIOC_GETCONF
+, &
+c
+);
+
+52 
+c
+.
+���t�
+ = 1;
+
+53 
+c
+.
+��psu�ti�
+ = 0;
+
+56 
+c
+.
+mru
+ = 127;
+
+57 
+c
+.
+mtu
+ = 127;
+
+60 
+	`io�l
+(
+comp�t
+->
+fd
+, 
+GSMIOC_SETCONF
+, &
+c
+);
+
+62 
+	`log_�ml
+("A�ach GMUX o�GSM�܈\"%s\" OK\n", 
+comp�t
+->
+dev_�me
+);
+
+63 
+	`��p
+(1);
+
+66 
+	}
+}
+
+70 
+	$d�ach_gsm0710
+(
+COM_PORT
+ *
+comp�t
+)
+
+72 
+	`log_�ml
+("D��ch GMUX o�GSM�܈\"%s\"�ow\n", 
+comp�t
+->
+dev_�me
+);
+
+74 
+	}
+}
+
+	@cp_gsmmux.h
+
+15 #i�de�
+__CP_GSMMUX_H_
+
+
+16 
+	#__CP_GSMMUX_H_
+
+
+	)
+
+18 
+	~"�_�cmd.h
+"
+
+20 
+	sgsm_c�fig
+
+
+22 
+	mad�ti�
+;
+
+23 
+	m��psu�ti�
+;
+
+24 
+	m���t�
+;
+
+25 
+	mt1
+;
+
+26 
+	mt2
+;
+
+27 
+	mt3
+;
+
+28 
+	mn2
+;
+
+29 
+	mmru
+;
+
+30 
+	mmtu
+;
+
+31 
+	mk
+;
+
+32 
+	mi
+;
+
+33 
+	munu�d
+[8];
+
+36 
+	#GSMIOC_GETCONF
+ 
+	`_IOR
+('G', 0, 
+gsm_c�fig
+)
+
+	)
+
+37 
+	#GSMIOC_SETCONF
+ 
+	`_IOW
+('G', 1, 
+gsm_c�fig
+)
+
+	)
+
+39 
+	#N_GSM0710
+ 21
+
+	)
+
+41 
+��ch_gsm0710
+(
+COM_PORT
+ *
+comp�t
+);
+
+	@cp_hal.c
+
+15 
+	~"�_h�.h
+"
+
+17 
+	$h�_tu�_�d_�
+(
+�d
+)
+
+19 
+fd
+ = -1;
+
+21 if((
+fd
+=
+	`ݒ
+(
+DEV_LED_PATH
+, 
+O_RDWR
+)) < 0)
+
+26 
+	`io�l
+(
+fd
+, 
+LED_ON
+, 
+�d
+);
+
+28 
+	`�o�
+(
+fd
+);
+
+30 
+	}
+}
+
+32 
+	$h�_tu�_�d_off
+(
+�d
+)
+
+34 
+fd
+ = -1;
+
+36 if((
+fd
+=
+	`ݒ
+(
+DEV_LED_PATH
+, 
+O_RDWR
+)) < 0)
+
+41 
+	`io�l
+(
+fd
+, 
+LED_OFF
+, 
+�d
+);
+
+43 
+	`�o�
+(
+fd
+);
+
+45 
+	}
+}
+
+47 
+	$h�_tu�_�d_bl�k
+(
+�d
+, 
+mode
+)
+
+49 
+fd
+ = -1;
+
+50 
+�g
+ = 
+�d
+|(
+mode
+<<3);
+
+52 if((
+fd
+=
+	`ݒ
+(
+DEV_LED_PATH
+, 
+O_RDWR
+)) < 0)
+
+57 
+	`io�l
+(
+fd
+, 
+LED_BLINK
+, 
+�g
+);
+
+59 
+	`�o�
+(
+fd
+);
+
+61 
+	}
+}
+
+68 
+	$h�_tu�_g�s_pow�
+(
+��us
+)
+
+70 
+fd
+ = -1;
+
+71 
+rv
+ = 0;
+
+73 if((
+fd
+=
+	`ݒ
+(
+DEV_GSM_PATH
+, 
+O_RDWR
+)) < 0)
+
+78 if�(
+rv
+=
+	`io�l
+(
+fd
+, 
+GSM_SET_POWER
+, 
+��us
+)) < 0)
+
+80 
+	`�o�
+(
+fd
+);
+
+84 
+	`�o�
+(
+fd
+);
+
+85  
+rv
+;
+
+86 
+	}
+}
+
+92 
+	$h�_g�_g�s_pow�
+()
+
+94 
+fd
+ = -1;
+
+95 
+��us
+;
+
+97 if((
+fd
+=
+	`ݒ
+(
+DEV_GSM_PATH
+, 
+O_RDWR
+)) < 0)
+
+102 if�(
+��us
+=
+	`io�l
+(
+fd
+, 
+GSM_GET_POWER
+, 0)) < 0)
+
+104 
+	`�o�
+(
+fd
+);
+
+108 
+	`�o�
+(
+fd
+);
+
+109  
+��us
+;
+
+110 
+	}
+}
+
+116 
+	$h�_tu�_gps_pow�
+(
+��us
+)
+
+118 
+fd
+ = -1;
+
+119 
+rv
+ = 0;
+
+121 if((
+fd
+=
+	`ݒ
+(
+DEV_GPS_PATH
+, 
+O_RDWR
+)) < 0)
+
+126 if�(
+rv
+=
+	`io�l
+(
+fd
+, 
+GPS_SET_POWER
+, 
+��us
+)) < 0)
+
+128 
+	`�o�
+(
+fd
+);
+
+132 
+	`�o�
+(
+fd
+);
+
+133  
+rv
+;
+
+134 
+	}
+}
+
+140 
+	$h�_g�_gps_pow�
+()
+
+142 
+fd
+ = -1;
+
+143 
+��us
+;
+
+145 if((
+fd
+=
+	`ݒ
+(
+DEV_GPS_PATH
+, 
+O_RDWR
+)) < 0)
+
+150 if�(
+��us
+=
+	`io�l
+(
+fd
+, 
+GPS_GET_POWER
+, 0)) < 0)
+
+152 
+	`�o�
+(
+fd
+);
+
+156 
+	`�o�
+(
+fd
+);
+
+157  
+��us
+;
+
+158 
+	}
+}
+
+164 
+	$h�_��t_zigb�
+()
+
+166 
+fd
+ = -1;
+
+168 if((
+fd
+=
+	`ݒ
+(
+DEV_ZIGBEE_PATH
+, 
+O_RDWR
+)) < 0)
+
+173 if�
+	`io�l
+(
+fd
+, 
+ZIGBEE_RESET
+, 0) < 0)
+
+175 
+	`�o�
+(
+fd
+);
+
+179 
+	`�o�
+(
+fd
+);
+
+181 
+	}
+}
+
+186 
+	$h�_g�_zigb�_��us
+()
+
+188 
+fd
+ = -1;
+
+189 
+��us
+;
+
+191 if((
+fd
+=
+	`ݒ
+(
+DEV_ZIGBEE_PATH
+, 
+O_RDWR
+)) < 0)
+
+196 if�(
+��us
+=
+	`io�l
+(
+fd
+, 
+ZIGBEE_STATUS
+, 0)) < 0)
+
+198 
+	`�o�
+(
+fd
+);
+
+202 
+	`�o�
+(
+fd
+);
+
+203  
+��us
+;
+
+204 
+	}
+}
+
+212 
+	$h�_�t_gmtube
+(
+��us
+)
+
+214 
+fd
+ = -1;
+
+215 
+do�
+ = 0;
+
+217 if((
+fd
+=
+	`ݒ
+(
+DEV_GMTUBE_PATH
+, 
+O_RDWR
+)) < 0)
+
+222 if�(
+do�
+=
+	`io�l
+(
+fd
+, 
+GM_SET_MEASURE_RADI
+, 
+��us
+)) < 0)
+
+224 
+	`�o�
+(
+fd
+);
+
+228 
+	`�o�
+(
+fd
+);
+
+229  
+do�
+;
+
+230 
+	}
+}
+
+238 
+	$h�_g�_gmtube_do�
+()
+
+240 
+fd
+ = -1;
+
+241 
+do�
+ = 0;
+
+243 if((
+fd
+=
+	`ݒ
+(
+DEV_GMTUBE_PATH
+, 
+O_RDWR
+)) < 0)
+
+248 if�(
+do�
+=
+	`io�l
+(
+fd
+, 
+GM_GET_MEASURE_DOSE
+, 0)) < 0)
+
+250 
+	`�o�
+(
+fd
+);
+
+254 
+	`�o�
+(
+fd
+);
+
+255  
+do�
+;
+
+256 
+	}
+}
+
+	@cp_hal.h
+
+13 #i�de�
+__CP_HAL_H
+
+
+14 
+	#__CP_HAL_H
+
+
+	)
+
+16 
+	~<uni�d.h
+>
+
+17 
+	~<�dio.h
+>
+
+18 
+	~<�dlib.h
+>
+
+19 
+	~<�r�g.h
+>
+
+20 
+	~<��o.h
+>
+
+21 
+	~<f��.h
+>
+
+22 
+	~<sys/ty�s.h
+>
+
+23 
+	~<sys/��.h
+>
+
+25 
+	~"�91_io�l.h
+"
+
+27 
+	#DEV_LED_PATH
+ "/dev/�d"
+
+	)
+
+28 
+	#DEV_GSM_PATH
+ "/dev/g�s"
+
+	)
+
+29 
+	#DEV_GPS_PATH
+ "/dev/gps"
+
+	)
+
+30 
+	#DEV_ZIGBEE_PATH
+ "/dev/zigb�"
+
+	)
+
+31 
+	#DEV_GMTUBE_PATH
+ "/dev/gmtube"
+
+	)
+
+33 
+	#OFF
+ 0
+
+	)
+
+34 
+	#ON
+ 1
+
+	)
+
+35 
+	#BLINK
+ 2
+
+	)
+
+36 
+	#RESET
+ 2
+
+	)
+
+38 
+	#MODE_SLOW
+ 0
+
+	)
+
+39 
+	#MODE_FAST
+ 1
+
+	)
+
+41 
+	#START
+ 1
+
+	)
+
+42 
+	#STOP
+ 0
+
+	)
+
+44 
+	#LED_SYS
+ 0
+
+	)
+
+46 

+h�_tu�_�d_�
+(
+�d
+);
+
+47 

+h�_tu�_�d_off
+(
+�d
+);
+
+48 

+h�_tu�_�d_bl�k
+(
+�d
+, 
+mode
+);
+
+50 

+h�_tu�_g�s_pow�
+(
+��us
+);
+
+51 

+h�_g�_g�s_pow�
+();
+
+53 

+h�_tu�_gps_pow�
+(
+��us
+);
+
+54 

+h�_g�_gps_pow�
+();
+
+	@cp_iniparser.c
+
+10 
+	~<�y�.h
+>
+
+11 
+	~"�_����r.h
+"
+
+14 
+	#ASCIILINESZ
+ (1024)
+
+	)
+
+15 
+	#INI_INVALID_KEY
+ ((*)-1)
+
+	)
+
+23 
+	e_l�e_��us_
+ {
+
+24 
+	mLINE_UNPROCESSED
+,
+
+25 
+	mLINE_ERROR
+,
+
+26 
+	mLINE_EMPTY
+,
+
+27 
+	mLINE_COMMENT
+,
+
+28 
+	mLINE_SECTION
+,
+
+29 
+	mLINE_VALUE
+
+
+30 } 
+	tl�e_��us
+ ;
+
+44 * 
+	$��wc
+(cڡ * 
+s
+)
+
+46 
+l
+[
+ASCIILINESZ
++1];
+
+47 
+i
+ ;
+
+49 i�(
+s
+==
+NULL
+)  NULL ;
+
+50 
+	`mem�t
+(
+l
+, 0, 
+ASCIILINESZ
++1);
+
+51 
+i
+=0 ;
+
+52 
+s
+[
+i
+] && i<
+ASCIILINESZ
+) {
+
+53 
+l
+[
+i
+] = ()
+	`t�ow�
+(()
+s
+[i]);
+
+54 
+i
+++ ;
+
+56 
+l
+[
+ASCIILINESZ
+]=()0;
+
+57  
+l
+ ;
+
+58 
+	}
+}
+
+74 * 
+	$�r�r�
+(cڡ * 
+s
+)
+
+76 
+l
+[
+ASCIILINESZ
++1];
+
+77 * 
+ϡ
+ ;
+
+79 i�(
+s
+==
+NULL
+)  NULL ;
+
+81 
+	`is�a�
+(()*
+s
+) && *s) s++;
+
+82 
+	`mem�t
+(
+l
+, 0, 
+ASCIILINESZ
++1);
+
+83 
+	`�r�y
+(
+l
+, 
+s
+);
+
+84 
+ϡ
+ = 
+l
+ + 
+	`���
+(l);
+
+85 
+ϡ
+ > 
+l
+) {
+
+86 i�(!
+	`is�a�
+(()*(
+ϡ
+-1)))
+
+88 
+ϡ
+ -- ;
+
+90 *
+ϡ
+ = ()0;
+
+91  (*)
+l
+ ;
+
+92 
+	}
+}
+
+112 
+	$����r_g�n�c
+(
+di�iڬy
+ * 
+d
+)
+
+114 
+i
+ ;
+
+115 
+n�c
+ ;
+
+117 i�(
+d
+==
+NULL
+)  -1 ;
+
+118 
+n�c
+=0 ;
+
+119 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+120 i�(
+d
+->
+key
+[
+i
+]==
+NULL
+)
+
+122 i�(
+	`�rchr
+(
+d
+->
+key
+[
+i
+], ':')==
+NULL
+) {
+
+123 
+n�c
+ ++ ;
+
+126  
+n�c
+ ;
+
+127 
+	}
+}
+
+143 * 
+	$����r_g���ame
+(
+di�iڬy
+ * 
+d
+, 
+n
+)
+
+145 
+i
+ ;
+
+146 
+found�c
+ ;
+
+148 i�(
+d
+==
+NULL
+ || 
+n
+<0)  NULL ;
+
+149 
+found�c
+=0 ;
+
+150 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+151 i�(
+d
+->
+key
+[
+i
+]==
+NULL
+)
+
+153 i�(
+	`�rchr
+(
+d
+->
+key
+[
+i
+], ':')==
+NULL
+) {
+
+154 
+found�c
+++ ;
+
+155 i�(
+found�c
+>
+n
+)
+
+159 i�(
+found�c
+<=
+n
+) {
+
+160  
+NULL
+ ;
+
+162  
+d
+->
+key
+[
+i
+] ;
+
+163 
+	}
+}
+
+178 
+	$����r_dump
+(
+di�iڬy
+ * 
+d
+, 
+FILE
+ * 
+f
+)
+
+180 
+i
+ ;
+
+182 i�(
+d
+==
+NULL
+ || 
+f
+==NULL)  ;
+
+183 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+184 i�(
+d
+->
+key
+[
+i
+]==
+NULL
+)
+
+186 i�(
+d
+->
+v�
+[
+i
+]!=
+NULL
+) {
+
+187 
+	`�r�tf
+(
+f
+, "[%s]=[%s]\n", 
+d
+->
+key
+[
+i
+], d->
+v�
+[i]);
+
+189 
+	`�r�tf
+(
+f
+, "[%s]=UNDEF\n", 
+d
+->
+key
+[
+i
+]);
+
+193 
+	}
+}
+
+206 
+	$����r_dump_�i
+(
+di�iڬy
+ * 
+d
+, 
+FILE
+ * 
+f
+)
+
+208 
+i
+ ;
+
+209 
+n�c
+ ;
+
+210 * 
+��ame
+ ;
+
+212 i�(
+d
+==
+NULL
+ || 
+f
+==NULL)  ;
+
+214 
+n�c
+ = 
+	`����r_g�n�c
+(
+d
+);
+
+215 i�(
+n�c
+<1) {
+
+217 
+i
+=0 ; i<
+d
+->
+size
+ ; i++) {
+
+218 i�(
+d
+->
+key
+[
+i
+]==
+NULL
+)
+
+220 
+	`�r�tf
+(
+f
+, "%��%s\n", 
+d
+->
+key
+[
+i
+], d->
+v�
+[i]);
+
+224 
+i
+=0 ; i<
+n�c
+ ; i++) {
+
+225 
+��ame
+ = 
+	`����r_g���ame
+(
+d
+, 
+i
+) ;
+
+226 
+	`����r_dump��i�_�i
+(
+d
+, 
+��ame
+, 
+f
+) ;
+
+228 
+	`�r�tf
+(
+f
+, "\n");
+
+230 
+	}
+}
+
+244 
+	$����r_dump��i�_�i
+(
+di�iڬy
+ * 
+d
+, * 
+s
+, 
+FILE
+ * 
+f
+)
+
+246 
+j
+ ;
+
+247 
+keym
+[
+ASCIILINESZ
++1];
+
+248 
+���
+ ;
+
+250 i�(
+d
+==
+NULL
+ || 
+f
+==NULL)  ;
+
+251 i�(! 
+	`����r_f�d_��y
+(
+d
+, 
+s
+))  ;
+
+253 
+���
+ = ()
+	`���
+(
+s
+);
+
+254 
+	`�r�tf
+(
+f
+, "\n[%s]\n", 
+s
+);
+
+255 
+	`�r�tf
+(
+keym
+, "%s:", 
+s
+);
+
+256 
+j
+=0 ; j<
+d
+->
+size
+ ; j++) {
+
+257 i�(
+d
+->
+key
+[
+j
+]==
+NULL
+)
+
+259 i�(!
+	`��cmp
+(
+d
+->
+key
+[
+j
+], 
+keym
+, 
+���
++1)) {
+
+260 
+	`�r�tf
+(
+f
+,
+
+262 
+d
+->
+key
+[
+j
+]+
+���
++1,
+
+263 
+d
+->
+v�
+[
+j
+] ? d->val[j] : "");
+
+266 
+	`�r�tf
+(
+f
+, "\n");
+
+268 
+	}
+}
+
+278 
+	$����r_g���keys
+(
+di�iڬy
+ * 
+d
+, * 
+s
+)
+
+280 
+���
+, 
+nkeys
+ ;
+
+281 
+keym
+[
+ASCIILINESZ
++1];
+
+282 
+j
+ ;
+
+284 
+nkeys
+ = 0;
+
+286 i�(
+d
+==
+NULL
+� 
+nkeys
+;
+
+287 i�(! 
+	`����r_f�d_��y
+(
+d
+, 
+s
+)� 
+nkeys
+;
+
+289 
+���
+ = ()
+	`���
+(
+s
+);
+
+290 
+	`�r�tf
+(
+keym
+, "%s:", 
+s
+);
+
+292 
+j
+=0 ; j<
+d
+->
+size
+ ; j++) {
+
+293 i�(
+d
+->
+key
+[
+j
+]==
+NULL
+)
+
+295 i�(!
+	`��cmp
+(
+d
+->
+key
+[
+j
+], 
+keym
+, 
+���
++1))
+
+296 
+nkeys
+++;
+
+299  
+nkeys
+;
+
+301 
+	}
+}
+
+317 ** 
+	$����r_g��ckeys
+(
+di�iڬy
+ * 
+d
+, * 
+s
+)
+
+320 **
+keys
+;
+
+322 
+i
+, 
+j
+ ;
+
+323 
+keym
+[
+ASCIILINESZ
++1];
+
+324 
+���
+, 
+nkeys
+ ;
+
+326 
+keys
+ = 
+NULL
+;
+
+328 i�(
+d
+==
+NULL
+� 
+keys
+;
+
+329 i�(! 
+	`����r_f�d_��y
+(
+d
+, 
+s
+)� 
+keys
+;
+
+331 
+nkeys
+ = 
+	`����r_g���keys
+(
+d
+, 
+s
+);
+
+333 
+keys
+ = (**�
+	`m�loc
+(
+nkeys
+*(*));
+
+335 
+���
+ = ()
+	`���
+(
+s
+);
+
+336 
+	`�r�tf
+(
+keym
+, "%s:", 
+s
+);
+
+338 
+i
+ = 0;
+
+340 
+j
+=0 ; j<
+d
+->
+size
+ ; j++) {
+
+341 i�(
+d
+->
+key
+[
+j
+]==
+NULL
+)
+
+343 i�(!
+	`��cmp
+(
+d
+->
+key
+[
+j
+], 
+keym
+, 
+���
++1)) {
+
+344 
+keys
+[
+i
+] = 
+d
+->
+key
+[
+j
+];
+
+345 
+i
+++;
+
+349  
+keys
+;
+
+351 
+	}
+}
+
+368 * 
+	$����r_g��r�g
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, * 
+def
+)
+
+370 * 
+lc_key
+ ;
+
+371 * 
+sv�
+ ;
+
+373 i�(
+d
+==
+NULL
+ || 
+key
+==NULL)
+
+374  
+def
+ ;
+
+376 
+lc_key
+ = 
+	`��wc
+(
+key
+);
+
+377 
+sv�
+ = 
+	`di�iڬy_g�
+(
+d
+, 
+lc_key
+, 
+def
+);
+
+378  
+sv�
+ ;
+
+379 
+	}
+}
+
+408 
+	$����r_g��t
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, 
+n�found
+)
+
+410 * 
+�r
+ ;
+
+412 
+�r
+ = 
+	`����r_g��r�g
+(
+d
+, 
+key
+, 
+INI_INVALID_KEY
+);
+
+413 i�(
+�r
+==
+INI_INVALID_KEY
+� 
+n�found
+ ;
+
+414  ()
+	`���
+(
+�r
+, 
+NULL
+, 0);
+
+415 
+	}
+}
+
+417 
+	$����r_g�l�g
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, 
+n�found
+)
+
+419 * 
+�r
+ ;
+
+421 
+�r
+ = 
+	`����r_g��r�g
+(
+d
+, 
+key
+, 
+INI_INVALID_KEY
+);
+
+422 i�(
+�r
+==
+INI_INVALID_KEY
+� 
+n�found
+ ;
+
+423  
+	`���
+(
+�r
+, 
+NULL
+, 0);
+
+424 
+	}
+}
+
+438 
+	$����r_g�doub�
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, 
+n�found
+)
+
+440 * 
+�r
+ ;
+
+442 
+�r
+ = 
+	`����r_g��r�g
+(
+d
+, 
+key
+, 
+INI_INVALID_KEY
+);
+
+443 i�(
+�r
+==
+INI_INVALID_KEY
+� 
+n�found
+ ;
+
+444  
+	`�of
+(
+�r
+);
+
+445 
+	}
+}
+
+479 
+	$����r_g�boޗn
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, 
+n�found
+)
+
+481 * 
+c
+ ;
+
+482 
+�t
+ ;
+
+484 
+c
+ = 
+	`����r_g��r�g
+(
+d
+, 
+key
+, 
+INI_INVALID_KEY
+);
+
+485 i�(
+c
+==
+INI_INVALID_KEY
+� 
+n�found
+ ;
+
+486 i�(
+c
+[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') {
+
+487 
+�t
+ = 1 ;
+
+488 } i�(
+c
+[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') {
+
+489 
+�t
+ = 0 ;
+
+491 
+�t
+ = 
+n�found
+ ;
+
+493  
+�t
+;
+
+494 
+	}
+}
+
+508 
+	$����r_f�d_��y
+(
+
+509 
+di�iڬy
+ * 
+�i
+,
+
+510 cڡ * 
+��y
+
+
+513 
+found
+=0 ;
+
+514 i�(
+	`����r_g��r�g
+(
+�i
+, 
+��y
+, 
+INI_INVALID_KEY
+)!=INI_INVALID_KEY) {
+
+515 
+found
+ = 1 ;
+
+517  
+found
+ ;
+
+518 
+	}
+}
+
+533 
+	$����r_�t
+(
+di�iڬy
+ * 
+�i
+, cڡ * 
+��y
+, cڡ * 
+v�
+)
+
+535  
+	`di�iڬy_�t
+(
+�i
+, 
+	`��wc
+(
+��y
+), 
+v�
+) ;
+
+536 
+	}
+}
+
+548 
+	$����r_un�t
+(
+di�iڬy
+ * 
+�i
+, cڡ * 
+��y
+)
+
+550 
+	`di�iڬy_un�t
+(
+�i
+, 
+	`��wc
+(
+��y
+));
+
+551 
+	}
+}
+
+563 
+l�e_��us
+ 
+	$����r_l�e
+(
+
+564 * 
+�put_l�e
+,
+
+565 * 
+��i�
+,
+
+566 * 
+key
+,
+
+567 * 
+v�ue
+)
+
+569 
+l�e_��us
+ 
+�a
+ ;
+
+570 
+l�e
+[
+ASCIILINESZ
++1];
+
+571 
+��_l�e
+[
+ASCIILINESZ
++1];
+
+572 
+�n
+, 
+off�t
+ ;
+
+574 
+	`�r�y
+(
+l�e
+, 
+	`�r�r�
+(
+�put_l�e
+));
+
+575 
+�n
+ = ()
+	`���
+(
+l�e
+);
+
+577 
+�a
+ = 
+LINE_UNPROCESSED
+ ;
+
+578 i�(
+�n
+<1) {
+
+580 
+�a
+ = 
+LINE_EMPTY
+ ;
+
+581 
+	`mem�t
+(
+�put_l�e
+, 0, 
+�n
+);
+
+582 } i�(
+l�e
+[0]=='#' ||�ine[0]==';') {
+
+584 
+�a
+ = 
+LINE_COMMENT
+ ;
+
+585 
+	`mem�t
+(
+�put_l�e
+, 0, 
+�n
+);
+
+586 } i�(
+l�e
+[0]=='[') {
+
+588 
+	`ss�nf
+(
+l�e
+, "[%[^]]", 
+��i�
+);
+
+589 
+	`�r�y
+(
+��i�
+, 
+	`�r�r�
+(section));
+
+590 
+	`�r�y
+(
+��i�
+, 
+	`��wc
+(section));
+
+593 
+off�t
+ = 
+	`���
+(
+��i�
+) + 2;
+
+594 
+	`�r�y
+�
+��_l�e
+, 
+	`�r�r�
+(&(
+l�e
+[
+off�t
+])) );
+
+595 
+	`�r�y
+�
+��_l�e
+, 
+	`�r�r�
+(left_line));
+
+597 if�
+	`���
+(
+��_l�e
+) > 0)
+
+599 
+	`�r�y
+(
+�put_l�e
+, 
+��_l�e
+);
+
+600 
+	`�r�t
+(
+�put_l�e
+, "\n");
+
+604 
+	`mem�t
+(
+�put_l�e
+, 0, 
+�n
+);
+
+606 
+�a
+ = 
+LINE_SECTION
+ ;
+
+607 } i�(
+	`ss�nf
+ (
+l�e
+, "%[^=] = \"%[^\"]\"", 
+key
+, 
+v�ue
+) == 2
+
+608 || 
+	`ss�nf
+ (
+l�e
+, "%[^=] = '%[^\']'", 
+key
+, 
+v�ue
+) == 2
+
+609 || 
+	`ss�nf
+ (
+l�e
+, "%[^=] = %[^;#]", 
+key
+, 
+v�ue
+) == 2) {
+
+610 *
+�r
+ = 
+NULL
+;
+
+613 
+	`�r�y
+(
+key
+, 
+	`�r�r�
+(key));
+
+614 
+	`�r�y
+(
+key
+, 
+	`��wc
+(key));
+
+615 
+	`�r�y
+(
+v�ue
+, 
+	`�r�r�
+(value));
+
+620 i�(!
+	`��cmp
+(
+v�ue
+, "\"\"", 2) || (!strncmp(value, "''", 2)) ) {
+
+621 
+v�ue
+[0]=0 ;
+
+624 
+�r
+ = 
+	`�rchr
+(
+l�e
+, '=');
+
+625 if('\''==*(
+�r
++1) || '\"'==*(ptr+1))
+
+627 
+off�t
+ = 
+	`���
+(
+key
+)+���(
+v�ue
+) + 1 + 2;
+
+631 
+off�t
+ = 
+	`���
+(
+key
+)+���(
+v�ue
+) + 1;
+
+633 
+	`�r�y
+�
+��_l�e
+, 
+	`�r�r�
+(&(
+l�e
+[
+off�t
+])) );
+
+635 if�
+	`���
+(
+��_l�e
+) > 0)
+
+637 
+	`�r�y
+(
+�put_l�e
+, 
+��_l�e
+);
+
+638 
+	`�r�t
+(
+�put_l�e
+, "\n");
+
+642 
+	`mem�t
+(
+�put_l�e
+, 0, 
+�n
+);
+
+644 
+�a
+ = 
+LINE_VALUE
+ ;
+
+645 } i�(
+	`ss�nf
+(
+l�e
+, "%[^=] = %[;#]", 
+key
+, 
+v�ue
+)==2
+
+646 || 
+	`ss�nf
+(
+l�e
+, "%[^=] %[=]", 
+key
+, 
+v�ue
+) == 2) {
+
+653 
+	`�r�y
+(
+key
+, 
+	`�r�r�
+(key));
+
+654 
+	`�r�y
+(
+key
+, 
+	`��wc
+(key));
+
+655 
+v�ue
+[0]=0 ;
+
+656 
+�a
+ = 
+LINE_VALUE
+ ;
+
+659 
+�a
+ = 
+LINE_ERROR
+ ;
+
+660 
+	`mem�t
+(
+�put_l�e
+, 0, 
+�n
+);
+
+662  
+�a
+ ;
+
+663 
+	}
+}
+
+679 
+di�iڬy
+ * 
+	$����r_l�d
+(cڡ * 
+��ame
+)
+
+681 
+FILE
+ * 
+�
+ ;
+
+683 
+l�e
+ [
+ASCIILINESZ
++1] ;
+
+684 
+��i�
+ [
+ASCIILINESZ
++1] ;
+
+685 
+key
+ [
+ASCIILINESZ
++1] ;
+
+686 
+tmp
+ [
+ASCIILINESZ
++1] ;
+
+687 
+v�
+ [
+ASCIILINESZ
++1] ;
+
+689 
+ϡ
+=0 ;
+
+690 
+�n
+ ;
+
+691 
+l��o
+=0 ;
+
+692 
+�rs
+=0;
+
+694 
+di�iڬy
+ * 
+di�
+ ;
+
+696 i�((
+�
+=
+	`fݒ
+(
+��ame
+, "r"))==
+NULL
+) {
+
+697 
+	`�r�tf
+(
+�d�r
+, "����r: c�n� o��%s\n", 
+��ame
+);
+
+698  
+NULL
+ ;
+
+701 
+di�
+ = 
+	`di�iڬy_�w
+(0) ;
+
+702 i�(!
+di�
+) {
+
+703 
+	`f�o�
+(
+�
+);
+
+704  
+NULL
+ ;
+
+707 
+	`mem�t
+(
+l�e
+, 0, 
+ASCIILINESZ
+);
+
+708 
+	`mem�t
+(
+��i�
+, 0, 
+ASCIILINESZ
+);
+
+709 
+	`mem�t
+(
+key
+, 0, 
+ASCIILINESZ
+);
+
+710 
+	`mem�t
+(
+v�
+, 0, 
+ASCIILINESZ
+);
+
+711 
+ϡ
+=0 ;
+
+713 
+	`fg�s
+(
+l�e
++
+ϡ
+, 
+ASCIILINESZ
+-ϡ, 
+�
+)!=
+NULL
+) {
+
+714 
+l��o
+++ ;
+
+715 
+CONTINUE_PARSER
+:
+
+716 
+�n
+ = ()
+	`���
+(
+l�e
+)-1;
+
+717 i�(
+�n
+==0)
+
+720 i�(
+l�e
+[
+�n
+]!='\n') {
+
+721 
+	`�r�tf
+(
+�d�r
+,
+
+723 
+��ame
+,
+
+724 
+l��o
+);
+
+725 
+	`di�iڬy_d�
+(
+di�
+);
+
+726 
+	`f�o�
+(
+�
+);
+
+727  
+NULL
+ ;
+
+730 (
+�n
+>=0) &&
+
+731 ((
+l�e
+[
+�n
+]=='\n'�|| (
+	`is�a�
+(line[len])))) {
+
+732 
+l�e
+[
+�n
+]=0 ;
+
+733 
+�n
+-- ;
+
+736 i�(
+l�e
+[
+�n
+]=='\\') {
+
+738 
+ϡ
+=
+�n
+ ;
+
+741 
+ϡ
+=0 ;
+
+744  
+	`����r_l�e
+(
+l�e
+, 
+��i�
+, 
+key
+, 
+v�
+) ) {
+
+745 
+LINE_EMPTY
+:
+
+746 
+LINE_COMMENT
+:
+
+749 
+LINE_SECTION
+:
+
+750 
+�rs
+ = 
+	`di�iڬy_�t
+(
+di�
+, 
+��i�
+, 
+NULL
+);
+
+753 
+LINE_VALUE
+:
+
+754 
+	`�r�tf
+(
+tmp
+, "%s:%s", 
+��i�
+, 
+key
+);
+
+755 
+�rs
+ = 
+	`di�iڬy_�t
+(
+di�
+, 
+tmp
+, 
+v�
+) ;
+
+758 
+LINE_ERROR
+:
+
+759 
+	`�r�tf
+(
+�d�r
+, "iniparser: syntax�rror in %s (%d):\n",
+
+760 
+��ame
+,
+
+761 
+l��o
+);
+
+762 
+	`�r�tf
+(
+�d�r
+, "-> %s\n", 
+l�e
+);
+
+763 
+�rs
+++ ;
+
+770 if�
+	`���
+(
+l�e
+) > 0)
+
+772 
+CONTINUE_PARSER
+;
+
+775 
+	`mem�t
+(
+l�e
+, 0, 
+ASCIILINESZ
+);
+
+776 
+ϡ
+=0;
+
+777 i�(
+�rs
+<0) {
+
+778 
+	`�r�tf
+(
+�d�r
+, "iniparser: memory�llocation failure\n");
+
+782 i�(
+�rs
+) {
+
+783 
+	`di�iڬy_d�
+(
+di�
+);
+
+784 
+di�
+ = 
+NULL
+ ;
+
+786 
+	`f�o�
+(
+�
+);
+
+787  
+di�
+ ;
+
+788 
+	}
+}
+
+802 
+	$����r_�di�
+(
+di�iڬy
+ * 
+d
+)
+
+804 
+	`di�iڬy_d�
+(
+d
+);
+
+805 
+	}
+}
+
+	@cp_iniparser.h
+
+10 #i�de�
+_CP_INIPARSER_H_
+
+
+11 
+	#_CP_INIPARSER_H_
+
+
+	)
+
+17 
+	~<�dio.h
+>
+
+18 
+	~<�dlib.h
+>
+
+19 
+	~<�r�g.h
+>
+
+28 
+	~"�_di�iڬy.h
+"
+
+49 
+����r_g�n�c
+(
+di�iڬy
+ * 
+d
+);
+
+67 * 
+����r_g���ame
+(
+di�iڬy
+ * 
+d
+, 
+n
+);
+
+82 
+����r_dump_�i
+(
+di�iڬy
+ * 
+d
+, 
+FILE
+ * 
+f
+);
+
+97 
+����r_dump��i�_�i
+(
+di�iڬy
+ * 
+d
+, * 
+s
+, 
+FILE
+ * 
+f
+);
+
+112 
+����r_dump
+(
+di�iڬy
+ * 
+d
+, 
+FILE
+ * 
+f
+);
+
+122 
+����r_g���keys
+(
+di�iڬy
+ * 
+d
+, * 
+s
+);
+
+138 ** 
+����r_g��ckeys
+(
+di�iڬy
+ * 
+d
+, * 
+s
+);
+
+155 * 
+����r_g��r�g
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, * 
+def
+);
+
+184 
+����r_g��t
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, 
+n�found
+);
+
+185 
+����r_g�l�g
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, 
+n�found
+);
+
+200 
+����r_g�doub�
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, 
+n�found
+);
+
+234 
+����r_g�boޗn
+(
+di�iڬy
+ * 
+d
+, cڡ * 
+key
+, 
+n�found
+);
+
+250 
+����r_�t
+(
+di�iڬy
+ * 
+�i
+, cڡ * 
+��y
+, cڡ * 
+v�
+);
+
+263 
+����r_un�t
+(
+di�iڬy
+ * 
+�i
+, cڡ * 
+��y
+);
+
+277 
+����r_f�d_��y
+(
+di�iڬy
+ * 
+�i
+, cڡ * 
+��y
+) ;
+
+293 
+di�iڬy
+ * 
+����r_l�d
+(cڡ * 
+��ame
+);
+
+306 
+����r_�di�
+(
+di�iڬy
+ * 
+d
+);
+
+	@cp_klist.h
+
+14 #i�de�
+_LINUX_LIST_H
+
+
+15 
+	#_LINUX_LIST_H
+
+
+	)
+
+17 
+	~<l�ux/�ddef.h
+>
+
+27 #unde�
+off�tof
+
+
+28 
+	#off�tof
+(
+TYPE
+, 
+MEMBER
+�((
+size_t
+�&((TYPE *)0)->MEMBER)
+
+	)
+
+29 
+	#cڏ��_of
+(
+�r
+, 
+ty�
+, 
+memb�
+) ({ \
+
+30 cڡ 
+	`ty�of
+�((
+ty�
+ *)0)->
+memb�
+ ) *
+__m�r
+ = (
+�r
+); \
+
+31 (
+ty�
+ *)�(*)
+__m�r
+ - 
+	`off�tof
+�y�,
+memb�
+�);})
+
+	)
+
+39 #ifde�
+CONFIG_ILLEGAL_POINTER_VALUE
+
+
+40 
+	#POISON_POINTER_DELTA
+ 
+	`_AC
+(
+CONFIG_ILLEGAL_POINTER_VALUE
+, 
+UL
+)
+
+	)
+
+42 
+	#POISON_POINTER_DELTA
+ 0
+
+	)
+
+50 
+	#LIST_POISON1
+ ((*�0x00100100 + 
+POISON_POINTER_DELTA
+)
+
+	)
+
+51 
+	#LIST_POISON2
+ ((*�0x00200200 + 
+POISON_POINTER_DELTA
+)
+
+	)
+
+53 #i�de�
+ARCH_HAS_PREFETCH
+
+
+54 
+	#ARCH_HAS_PREFETCH
+
+
+	)
+
+55 
+�l�e
+ 
+	$�e�tch
+(cڡ *
+x
+�{;
+	}
+}
+
+68 
+	sli�_h�d
+ {
+
+69 
+li�_h�d
+ *
+	m�xt
+, *
+	m�ev
+;
+
+72 
+	#LIST_HEAD_INIT
+(
+�me
+�{ &�ame), &�ame�}
+
+	)
+
+74 
+	#LIST_HEAD
+(
+�me
+) \
+
+75 
+li�_h�d
+ 
+�me
+ = 
+	`LIST_HEAD_INIT
+�ame)
+
+	)
+
+77 
+�l�e
+ 
+	$INIT_LIST_HEAD
+(
+li�_h�d
+ *
+li�
+)
+
+79 
+li�
+->
+�xt
+ =�ist;
+
+80 
+li�
+->
+�ev
+ =�ist;
+
+81 
+	}
+}
+
+89 
+�l�e
+ 
+	$__li�_add
+(
+li�_h�d
+ *
+�w
+,
+
+90 
+li�_h�d
+ *
+�ev
+,
+
+91 
+li�_h�d
+ *
+�xt
+)
+
+93 
+�xt
+->
+�ev
+ = 
+�w
+;
+
+94 
+�w
+->
+�xt
+ =�ext;
+
+95 
+�w
+->
+�ev
+ =�rev;
+
+96 
+�ev
+->
+�xt
+ = 
+�w
+;
+
+97 
+	}
+}
+
+107 
+�l�e
+ 
+	$li�_add
+(
+li�_h�d
+ *
+�w
+, li�_h�d *
+h�d
+)
+
+109 
+	`__li�_add
+(
+�w
+, 
+h�d
+, h�d->
+�xt
+);
+
+110 
+	}
+}
+
+120 
+�l�e
+ 
+	$li�_add_��
+(
+li�_h�d
+ *
+�w
+, li�_h�d *
+h�d
+)
+
+122 
+	`__li�_add
+(
+�w
+, 
+h�d
+->
+�ev
+, head);
+
+123 
+	}
+}
+
+132 
+�l�e
+ 
+	$__li�_d�
+(
+li�_h�d
+ *
+�ev
+, li�_h�d *
+�xt
+)
+
+134 
+�xt
+->
+�ev
+ =�rev;
+
+135 
+�ev
+->
+�xt
+ =�ext;
+
+136 
+	}
+}
+
+144 
+�l�e
+ 
+	$li�_d�
+(
+li�_h�d
+ *
+��y
+)
+
+146 
+	`__li�_d�
+(
+��y
+->
+�ev
+,��ry->
+�xt
+);
+
+147 
+��y
+->
+�xt
+ = 
+LIST_POISON1
+;
+
+148 
+��y
+->
+�ev
+ = 
+LIST_POISON2
+;
+
+149 
+	}
+}
+
+158 
+�l�e
+ 
+	$li�_��a�
+(
+li�_h�d
+ *
+�d
+,
+
+159 
+li�_h�d
+ *
+�w
+)
+
+161 
+�w
+->
+�xt
+ = 
+�d
+->next;
+
+162 
+�w
+->
+�xt
+->
+�ev
+ =�ew;
+
+163 
+�w
+->
+�ev
+ = 
+�d
+->prev;
+
+164 
+�w
+->
+�ev
+->
+�xt
+ =�ew;
+
+165 
+	}
+}
+
+167 
+�l�e
+ 
+	$li�_��a�_��
+(
+li�_h�d
+ *
+�d
+,
+
+168 
+li�_h�d
+ *
+�w
+)
+
+170 
+	`li�_��a�
+(
+�d
+, 
+�w
+);
+
+171 
+	`INIT_LIST_HEAD
+(
+�d
+);
+
+172 
+	}
+}
+
+178 
+�l�e
+ 
+	$li�_d�_��
+(
+li�_h�d
+ *
+��y
+)
+
+180 
+	`__li�_d�
+(
+��y
+->
+�ev
+,��ry->
+�xt
+);
+
+181 
+	`INIT_LIST_HEAD
+(
+��y
+);
+
+182 
+	}
+}
+
+189 
+�l�e
+ 
+	$li�_move
+(
+li�_h�d
+ *
+li�
+, li�_h�d *
+h�d
+)
+
+191 
+	`__li�_d�
+(
+li�
+->
+�ev
+,�i�->
+�xt
+);
+
+192 
+	`li�_add
+(
+li�
+, 
+h�d
+);
+
+193 
+	}
+}
+
+200 
+�l�e
+ 
+	$li�_move_��
+(
+li�_h�d
+ *
+li�
+,
+
+201 
+li�_h�d
+ *
+h�d
+)
+
+203 
+	`__li�_d�
+(
+li�
+->
+�ev
+,�i�->
+�xt
+);
+
+204 
+	`li�_add_��
+(
+li�
+, 
+h�d
+);
+
+205 
+	}
+}
+
+212 
+�l�e
+ 
+	$li�_is_ϡ
+(cڡ 
+li�_h�d
+ *
+li�
+,
+
+213 cڡ 
+li�_h�d
+ *
+h�d
+)
+
+215  
+li�
+->
+�xt
+ =�
+h�d
+;
+
+216 
+	}
+}
+
+222 
+�l�e
+ 
+	$li�_em�y
+(cڡ 
+li�_h�d
+ *
+h�d
+)
+
+224  
+h�d
+->
+�xt
+ == head;
+
+225 
+	}
+}
+
+240 
+�l�e
+ 
+	$li�_em�y_��ful
+(cڡ 
+li�_h�d
+ *
+h�d
+)
+
+242 
+li�_h�d
+ *
+�xt
+ = 
+h�d
+->next;
+
+243  (
+�xt
+ =�
+h�d
+�&& (�x�=�h�d->
+�ev
+);
+
+244 
+	}
+}
+
+250 
+�l�e
+ 
+	$li�_is_s�gu�r
+(cڡ 
+li�_h�d
+ *
+h�d
+)
+
+252  !
+	`li�_em�y
+(
+h�d
+�&& (h�d->
+�xt
+ =�h�d->
+�ev
+);
+
+253 
+	}
+}
+
+255 
+�l�e
+ 
+	$__li�_cut_pos�i�
+(
+li�_h�d
+ *
+li�
+,
+
+256 
+li�_h�d
+ *
+h�d
+, li�_h�d *
+��y
+)
+
+258 
+li�_h�d
+ *
+�w_f��
+ = 
+��y
+->
+�xt
+;
+
+259 
+li�
+->
+�xt
+ = 
+h�d
+->next;
+
+260 
+li�
+->
+�xt
+->
+�ev
+ =�ist;
+
+261 
+li�
+->
+�ev
+ = 
+��y
+;
+
+262 
+��y
+->
+�xt
+ = 
+li�
+;
+
+263 
+h�d
+->
+�xt
+ = 
+�w_f��
+;
+
+264 
+�w_f��
+->
+�ev
+ = 
+h�d
+;
+
+265 
+	}
+}
+
+281 
+�l�e
+ 
+	$li�_cut_pos�i�
+(
+li�_h�d
+ *
+li�
+,
+
+282 
+li�_h�d
+ *
+h�d
+, li�_h�d *
+��y
+)
+
+284 i�(
+	`li�_em�y
+(
+h�d
+))
+
+286 i�(
+	`li�_is_s�gu�r
+(
+h�d
+) &&
+
+287 (
+h�d
+->
+�xt
+ !�
+��y
+ && head !=�ntry))
+
+289 i�(
+��y
+ =�
+h�d
+)
+
+290 
+	`INIT_LIST_HEAD
+(
+li�
+);
+
+292 
+	`__li�_cut_pos�i�
+(
+li�
+, 
+h�d
+, 
+��y
+);
+
+293 
+	}
+}
+
+295 
+�l�e
+ 
+	$__li�_�li�
+(cڡ 
+li�_h�d
+ *
+li�
+,
+
+296 
+li�_h�d
+ *
+�ev
+,
+
+297 
+li�_h�d
+ *
+�xt
+)
+
+299 
+li�_h�d
+ *
+f��
+ = 
+li�
+->
+�xt
+;
+
+300 
+li�_h�d
+ *
+ϡ
+ = 
+li�
+->
+�ev
+;
+
+302 
+f��
+->
+�ev
+ =�rev;
+
+303 
+�ev
+->
+�xt
+ = 
+f��
+;
+
+305 
+ϡ
+->
+�xt
+ =�ext;
+
+306 
+�xt
+->
+�ev
+ = 
+ϡ
+;
+
+307 
+	}
+}
+
+314 
+�l�e
+ 
+	$li�_�li�
+(cڡ 
+li�_h�d
+ *
+li�
+,
+
+315 
+li�_h�d
+ *
+h�d
+)
+
+317 i�(!
+	`li�_em�y
+(
+li�
+))
+
+318 
+	`__li�_�li�
+(
+li�
+, 
+h�d
+, h�d->
+�xt
+);
+
+319 
+	}
+}
+
+326 
+�l�e
+ 
+	$li�_�li�_��
+(
+li�_h�d
+ *
+li�
+,
+
+327 
+li�_h�d
+ *
+h�d
+)
+
+329 i�(!
+	`li�_em�y
+(
+li�
+))
+
+330 
+	`__li�_�li�
+(
+li�
+, 
+h�d
+->
+�ev
+, head);
+
+331 
+	}
+}
+
+340 
+�l�e
+ 
+	$li�_�li�_��
+(
+li�_h�d
+ *
+li�
+,
+
+341 
+li�_h�d
+ *
+h�d
+)
+
+343 i�(!
+	`li�_em�y
+(
+li�
+)) {
+
+344 
+	`__li�_�li�
+(
+li�
+, 
+h�d
+, h�d->
+�xt
+);
+
+345 
+	`INIT_LIST_HEAD
+(
+li�
+);
+
+347 
+	}
+}
+
+357 
+�l�e
+ 
+	$li�_�li�_��_��
+(
+li�_h�d
+ *
+li�
+,
+
+358 
+li�_h�d
+ *
+h�d
+)
+
+360 i�(!
+	`li�_em�y
+(
+li�
+)) {
+
+361 
+	`__li�_�li�
+(
+li�
+, 
+h�d
+->
+�ev
+, head);
+
+362 
+	`INIT_LIST_HEAD
+(
+li�
+);
+
+364 
+	}
+}
+
+372 
+	#li�_��y
+(
+�r
+, 
+ty�
+, 
+memb�
+) \
+
+373 
+	`cڏ��_of
+(
+�r
+, 
+ty�
+, 
+memb�
+)
+
+	)
+
+383 
+	#li�_f��_��y
+(
+�r
+, 
+ty�
+, 
+memb�
+) \
+
+384 
+	`li�_��y
+((
+�r
+)->
+�xt
+, 
+ty�
+, 
+memb�
+)
+
+	)
+
+391 
+	#li�_f�_�ch
+(
+pos
+, 
+h�d
+) \
+
+392 
+pos
+ = (
+h�d
+)->
+�xt
+; 
+	`�e�tch
+(pos->next),�os != (head); \
+
+393 
+pos
+ =�os->
+�xt
+)
+
+	)
+
+405 
+	#__li�_f�_�ch
+(
+pos
+, 
+h�d
+) \
+
+406 
+pos
+ = (
+h�d
+)->
+�xt
+;�o�!�(h�d);�o��pos->�xt)
+
+	)
+
+413 
+	#li�_f�_�ch_�ev
+(
+pos
+, 
+h�d
+) \
+
+414 
+pos
+ = (
+h�d
+)->
+�ev
+; 
+	`�e�tch
+(pos->prev),�os != (head); \
+
+415 
+pos
+ =�os->
+�ev
+)
+
+	)
+
+423 
+	#li�_f�_�ch_��
+(
+pos
+, 
+n
+, 
+h�d
+) \
+
+424 
+pos
+ = (
+h�d
+)->
+�xt
+, 
+n
+ =�os->next;�os != (head); \
+
+425 
+pos
+ = 
+n
+,� =�os->
+�xt
+)
+
+	)
+
+433 
+	#li�_f�_�ch_�ev_��
+(
+pos
+, 
+n
+, 
+h�d
+) \
+
+434 
+pos
+ = (
+h�d
+)->
+�ev
+, 
+n
+ =�os->prev; \
+
+435 
+	`�e�tch
+(
+pos
+->
+�ev
+),�o�!�(
+h�d
+); \
+
+436 
+pos
+ = 
+n
+,� =�os->
+�ev
+)
+
+	)
+
+444 
+	#li�_f�_�ch_��y
+(
+pos
+, 
+h�d
+, 
+memb�
+) \
+
+445 
+pos
+ = 
+	`li�_��y
+((
+h�d
+)->
+�xt
+, 
+	`ty�of
+(*pos), 
+memb�
+); \
+
+446 
+	`�e�tch
+(
+pos
+->
+memb�
+.
+�xt
+), &pos->memb� !�(
+h�d
+); \
+
+447 
+pos
+ = 
+	`li�_��y
+�os->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*pos), memb�))
+
+	)
+
+455 
+	#li�_f�_�ch_��y_�v��
+(
+pos
+, 
+h�d
+, 
+memb�
+) \
+
+456 
+pos
+ = 
+	`li�_��y
+((
+h�d
+)->
+�ev
+, 
+	`ty�of
+(*pos), 
+memb�
+); \
+
+457 
+	`�e�tch
+(
+pos
+->
+memb�
+.
+�ev
+), &pos->memb� !�(
+h�d
+); \
+
+458 
+pos
+ = 
+	`li�_��y
+�os->
+memb�
+.
+�ev
+, 
+	`ty�of
+(*pos), memb�))
+
+	)
+
+468 
+	#li�_���e_��y
+(
+pos
+, 
+h�d
+, 
+memb�
+) \
+
+469 ((
+pos
+�? : 
+	`li�_��y
+(
+h�d
+, 
+	`ty�of
+(*pos), 
+memb�
+))
+
+	)
+
+480 
+	#li�_f�_�ch_��y_c�t�ue
+(
+pos
+, 
+h�d
+, 
+memb�
+) \
+
+481 
+pos
+ = 
+	`li�_��y
+�os->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*pos), member); \
+
+482 
+	`�e�tch
+(
+pos
+->
+memb�
+.
+�xt
+), &pos->memb� !�(
+h�d
+); \
+
+483 
+pos
+ = 
+	`li�_��y
+�os->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*pos), memb�))
+
+	)
+
+494 
+	#li�_f�_�ch_��y_c�t�ue_�v��
+(
+pos
+, 
+h�d
+, 
+memb�
+) \
+
+495 
+pos
+ = 
+	`li�_��y
+�os->
+memb�
+.
+�ev
+, 
+	`ty�of
+(*pos), member); \
+
+496 
+	`�e�tch
+(
+pos
+->
+memb�
+.
+�ev
+), &pos->memb� !�(
+h�d
+); \
+
+497 
+pos
+ = 
+	`li�_��y
+�os->
+memb�
+.
+�ev
+, 
+	`ty�of
+(*pos), memb�))
+
+	)
+
+507 
+	#li�_f�_�ch_��y_�om
+(
+pos
+, 
+h�d
+, 
+memb�
+) \
+
+508 ; 
+	`�e�tch
+(
+pos
+->
+memb�
+.
+�xt
+), &pos->memb� !�(
+h�d
+); \
+
+509 
+pos
+ = 
+	`li�_��y
+�os->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*pos), memb�))
+
+	)
+
+518 
+	#li�_f�_�ch_��y_��
+(
+pos
+, 
+n
+, 
+h�d
+, 
+memb�
+) \
+
+519 
+pos
+ = 
+	`li�_��y
+((
+h�d
+)->
+�xt
+, 
+	`ty�of
+(*pos), 
+memb�
+), \
+
+520 
+n
+ = 
+	`li�_��y
+(
+pos
+->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*pos), member); \
+
+521 &
+pos
+->
+memb�
+ !�(
+h�d
+); \
+
+522 
+pos
+ = 
+n
+,� = 
+	`li�_��y
+�->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*n), memb�))
+
+	)
+
+534 
+	#li�_f�_�ch_��y_��_c�t�ue
+(
+pos
+, 
+n
+, 
+h�d
+, 
+memb�
+) \
+
+535 
+pos
+ = 
+	`li�_��y
+�os->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*pos), member), \
+
+536 
+n
+ = 
+	`li�_��y
+(
+pos
+->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*pos), member); \
+
+537 &
+pos
+->
+memb�
+ !�(
+h�d
+); \
+
+538 
+pos
+ = 
+n
+,� = 
+	`li�_��y
+�->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*n), memb�))
+
+	)
+
+550 
+	#li�_f�_�ch_��y_��_�om
+(
+pos
+, 
+n
+, 
+h�d
+, 
+memb�
+) \
+
+551 
+n
+ = 
+	`li�_��y
+(
+pos
+->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*pos), member); \
+
+552 &
+pos
+->
+memb�
+ !�(
+h�d
+); \
+
+553 
+pos
+ = 
+n
+,� = 
+	`li�_��y
+�->
+memb�
+.
+�xt
+, 
+	`ty�of
+(*n), memb�))
+
+	)
+
+565 
+	#li�_f�_�ch_��y_��_�v��
+(
+pos
+, 
+n
+, 
+h�d
+, 
+memb�
+) \
+
+566 
+pos
+ = 
+	`li�_��y
+((
+h�d
+)->
+�ev
+, 
+	`ty�of
+(*pos), 
+memb�
+), \
+
+567 
+n
+ = 
+	`li�_��y
+(
+pos
+->
+memb�
+.
+�ev
+, 
+	`ty�of
+(*pos), member); \
+
+568 &
+pos
+->
+memb�
+ !�(
+h�d
+); \
+
+569 
+pos
+ = 
+n
+,� = 
+	`li�_��y
+�->
+memb�
+.
+�ev
+, 
+	`ty�of
+(*n), memb�))
+
+	)
+
+578 
+	shli�_h�d
+ {
+
+579 
+hli�_node
+ *
+	mf��
+;
+
+582 
+	shli�_node
+ {
+
+583 
+hli�_node
+ *
+	m�xt
+, **
+	m��v
+;
+
+586 
+	#HLIST_HEAD_INIT
+ { .
+f��
+ = 
+NULL
+ }
+
+	)
+
+587 
+	#HLIST_HEAD
+(
+�me
+�
+hli�_h�d
+�am��{ .
+f��
+ = 
+NULL
+ }
+
+	)
+
+588 
+	#INIT_HLIST_HEAD
+(
+�r
+�(Ռ)->
+f��
+ = 
+NULL
+)
+
+	)
+
+589 
+�l�e
+ 
+	$INIT_HLIST_NODE
+(
+hli�_node
+ *
+h
+)
+
+591 
+h
+->
+�xt
+ = 
+NULL
+;
+
+592 
+h
+->
+��v
+ = 
+NULL
+;
+
+593 
+	}
+}
+
+595 
+�l�e
+ 
+	$hli�_unhashed
+(cڡ 
+hli�_node
+ *
+h
+)
+
+597  !
+h
+->
+��v
+;
+
+598 
+	}
+}
+
+600 
+�l�e
+ 
+	$hli�_em�y
+(cڡ 
+hli�_h�d
+ *
+h
+)
+
+602  !
+h
+->
+f��
+;
+
+603 
+	}
+}
+
+605 
+�l�e
+ 
+	$__hli�_d�
+(
+hli�_node
+ *
+n
+)
+
+607 
+hli�_node
+ *
+�xt
+ = 
+n
+->next;
+
+608 
+hli�_node
+ **
+��v
+ = 
+n
+->pprev;
+
+609 *
+��v
+ = 
+�xt
+;
+
+610 i�(
+�xt
+)
+
+611 
+�xt
+->
+��v
+ =�prev;
+
+612 
+	}
+}
+
+614 
+�l�e
+ 
+	$hli�_d�
+(
+hli�_node
+ *
+n
+)
+
+616 
+	`__hli�_d�
+(
+n
+);
+
+617 
+n
+->
+�xt
+ = 
+LIST_POISON1
+;
+
+618 
+n
+->
+��v
+ = 
+LIST_POISON2
+;
+
+619 
+	}
+}
+
+621 
+�l�e
+ 
+	$hli�_d�_��
+(
+hli�_node
+ *
+n
+)
+
+623 i�(!
+	`hli�_unhashed
+(
+n
+)) {
+
+624 
+	`__hli�_d�
+(
+n
+);
+
+625 
+	`INIT_HLIST_NODE
+(
+n
+);
+
+627 
+	}
+}
+
+629 
+�l�e
+ 
+	$hli�_add_h�d
+(
+hli�_node
+ *
+n
+, 
+hli�_h�d
+ *
+h
+)
+
+631 
+hli�_node
+ *
+f��
+ = 
+h
+->first;
+
+632 
+n
+->
+�xt
+ = 
+f��
+;
+
+633 i�(
+f��
+)
+
+634 
+f��
+->
+��v
+ = &
+n
+->
+�xt
+;
+
+635 
+h
+->
+f��
+ = 
+n
+;
+
+636 
+n
+->
+��v
+ = &
+h
+->
+f��
+;
+
+637 
+	}
+}
+
+640 
+�l�e
+ 
+	$hli�_add_bef�e
+(
+hli�_node
+ *
+n
+,
+
+641 
+hli�_node
+ *
+�xt
+)
+
+643 
+n
+->
+��v
+ = 
+�xt
+->pprev;
+
+644 
+n
+->
+�xt
+ =�ext;
+
+645 
+�xt
+->
+��v
+ = &
+n
+->next;
+
+646 *(
+n
+->
+��v
+) =�;
+
+647 
+	}
+}
+
+649 
+�l�e
+ 
+	$hli�_add_a�
+(
+hli�_node
+ *
+n
+,
+
+650 
+hli�_node
+ *
+�xt
+)
+
+652 
+�xt
+->�x��
+n
+->next;
+
+653 
+n
+->
+�xt
+ =�ext;
+
+654 
+�xt
+->
+��v
+ = &
+n
+->next;
+
+656 if(
+�xt
+->next)
+
+657 
+�xt
+->�xt->
+��v
+ = &next->next;
+
+658 
+	}
+}
+
+660 
+	#hli�_��y
+(
+�r
+, 
+ty�
+, 
+memb�
+�
+	`cڏ��_of
+Ռ,ty�,memb�)
+
+	)
+
+662 
+	#hli�_f�_�ch
+(
+pos
+, 
+h�d
+) \
+
+663 
+pos
+ = (
+h�d
+)->
+f��
+;�o�&& ({ 
+	`�e�tch
+�os->
+�xt
+); 1; }); \
+
+664 
+pos
+ =�os->
+�xt
+)
+
+	)
+
+666 
+	#hli�_f�_�ch_��
+(
+pos
+, 
+n
+, 
+h�d
+) \
+
+667 
+pos
+ = (
+h�d
+)->
+f��
+;�o�&& ({ 
+n
+ =�os->
+�xt
+; 1; }); \
+
+668 
+pos
+ = 
+n
+)
+
+	)
+
+677 
+	#hli�_f�_�ch_��y
+(
+�os
+, 
+pos
+, 
+h�d
+, 
+memb�
+) \
+
+678 
+pos
+ = (
+h�d
+)->
+f��
+; \
+
+679 
+pos
+ && ({ 
+	`�e�tch
+�os->
+�xt
+); 1;}) && \
+
+680 ({ 
+�os
+ = 
+	`hli�_��y
+(
+pos
+, 
+	`ty�of
+(*�os), 
+memb�
+); 1;}); \
+
+681 
+pos
+ =�os->
+�xt
+)
+
+	)
+
+689 
+	#hli�_f�_�ch_��y_c�t�ue
+(
+�os
+, 
+pos
+, 
+memb�
+) \
+
+690 
+pos
+ = (pos)->
+�xt
+; \
+
+691 
+pos
+ && ({ 
+	`�e�tch
+�os->
+�xt
+); 1;}) && \
+
+692 ({ 
+�os
+ = 
+	`hli�_��y
+(
+pos
+, 
+	`ty�of
+(*�os), 
+memb�
+); 1;}); \
+
+693 
+pos
+ =�os->
+�xt
+)
+
+	)
+
+701 
+	#hli�_f�_�ch_��y_�om
+(
+�os
+, 
+pos
+, 
+memb�
+) \
+
+702 ; 
+pos
+ && ({ 
+	`�e�tch
+�os->
+�xt
+); 1;}) && \
+
+703 ({ 
+�os
+ = 
+	`hli�_��y
+(
+pos
+, 
+	`ty�of
+(*�os), 
+memb�
+); 1;}); \
+
+704 
+pos
+ =�os->
+�xt
+)
+
+	)
+
+714 
+	#hli�_f�_�ch_��y_��
+(
+�os
+, 
+pos
+, 
+n
+, 
+h�d
+, 
+memb�
+) \
+
+715 
+pos
+ = (
+h�d
+)->
+f��
+; \
+
+716 
+pos
+ && ({ 
+n
+ =�os->
+�xt
+; 1; }) && \
+
+717 ({ 
+�os
+ = 
+	`hli�_��y
+(
+pos
+, 
+	`ty�of
+(*�os), 
+memb�
+); 1;}); \
+
+718 
+pos
+ = 
+n
+)
+
+	)
+
+	@cp_logger.c
+
+14 
+	~"�_logg�.h
+"
+
+15 
+	~"�_comm�.h
+"
+
+17 
+	#PRECISE_TIME_FACTOR
+ 1000
+
+	)
+
+19 
+	glog_r�lback_size
+ = 
+LOG_ROLLBACK_NONE
+;
+
+21 
+�_logg�
+ *
+	glogg�
+ = 
+NULL
+;
+
+23 *
+	glog_�r
+[
+LOG_LEVEL_MAX
+ + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" };
+
+25 *
+	g�_time_f�m�
+ = 
+DEFAULT_TIME_FORMAT
+;
+
+27 
+	$�_log_�t_time_f�m�
+(*
+time_f�m�
+)
+
+29 
+�_time_f�m�
+ = 
+time_f�m�
+;
+
+30 
+	}
+}
+
+32 
+	$�_log_de�u�_sig�l_h�d�r
+(
+sig
+)
+
+34 if(!
+logg�
+)
+
+37 i�(
+sig
+ =�
+SIGHUP
+)
+
+39 
+	`sig�l
+(
+SIGHUP
+, 
+�_log_de�u�_sig�l_h�d�r
+);
+
+40 
+	`log_�l
+("SIGHUP�e�ived -�eݒn�g�og f��[%s]", 
+logg�
+->
+f�e
+);
+
+41 
+	`�_log_�ݒ
+();
+
+43 
+	}
+}
+
+45 
+	$log_b��r
+(*
+�efix
+)
+
+47 if(!
+logg�
+)
+
+50 
+	`�r�tf
+(
+logg�
+->
+�
+, "%s�og \"%s\" on�evel [%s] size [%lu],�og system version %s\n",
+
+51 
+�efix
+, 
+logg�
+->
+f�e
+, 
+log_�r
+[logg�->
+�v�
+], 
+log_r�lback_size
+ / 1024, 
+LOG_VERSION_STR
+);
+
+52 #ifde�
+LOG_FILE_LINE
+
+
+53 
+	`�r�tf
+(
+logg�
+->
+�
+, " [Date] [Time] [Level] [PID/TID] [File/Line] [Content]\n");
+
+55 
+	`�r�tf
+(
+logg�
+->
+�
+, " [Date] [Time] [Level] [PID/TID] [Content]\n");
+
+57 
+	`�r�tf
+(
+logg�
+->
+�
+, "-------------------------------------------------------------\n");
+
+58 
+	}
+}
+
+60 
+	$check_�d_r�lback
+()
+
+62 if(!
+logg�
+)
+
+65 i�(
+log_r�lback_size
+ !�
+LOG_ROLLBACK_NONE
+)
+
+67 
+_curOff�t
+ = 
+	`�l
+(
+logg�
+->
+�
+);
+
+69 i�((
+_curOff�t
+ !�-1�&& (_curOff��>�
+log_r�lback_size
+))
+
+71 
+cmd
+[512];
+
+73 
+	`���tf
+(
+cmd
+, (cmd), "� -�%�%s.r�l", 
+logg�
+->
+f�e
+,�ogger->file);
+
+74 
+	`sy�em
+(
+cmd
+);
+
+76 i�(-1 =�
+	`f�ek
+(
+logg�
+->
+�
+, 0L, 
+SEEK_SET
+))
+
+77 
+	`�r�tf
+(
+logg�
+->
+�
+, "log�ollback fseek failed \n");
+
+79 
+	`�w�d
+(
+logg�
+->
+�
+);
+
+81 
+	`�un��
+(
+logg�
+->
+f�e
+, 0);
+
+82 
+	`log_b��r
+("Already�ollback");
+
+85 
+	}
+}
+
+87 
+�_logg�
+ *
+	$�_log_��
+(
+�_logg�
+ *
+log
+, *
+f��ame
+, 
+�v�
+, 
+log_size
+)
+
+89 if(
+NULL
+ =�
+log
+)
+
+91 
+logg�
+ = 
+	`t_m�loc
+((
+�_logg�
+));
+
+92 
+	`mem�t
+(
+logg�
+, 0, (
+�_logg�
+));
+
+93 
+logg�
+->
+�ag
+ |�
+CP_LOGGER_MALLOC
+;
+
+97 
+logg�
+ = 
+log
+;
+
+98 
+	`mem�t
+(
+logg�
+, 0, (
+�_logg�
+));
+
+99 
+logg�
+->
+�ag
+ |�
+CP_LOGGER_ARGUMENT
+;
+
+102 if(
+NULL
+ =�
+logg�
+)
+
+104  
+NULL
+;
+
+107 
+	`���y
+(
+logg�
+->
+f�e
+, 
+f��ame
+, 
+FILENAME_LEN
+);
+
+108 
+logg�
+->
+�v�
+ =�evel;
+
+109 
+logg�
+->
+size
+ = 
+log_size
+;
+
+111  
+logg�
+;
+
+112 
+	}
+}
+
+114 
+	$�_log_ݒ
+()
+
+116 
+siga�i�
+ 
+a�
+;
+
+117 *
+f�emode
+;
+
+119 if(!
+logg�
+)
+
+124 
+log_r�lback_size
+ = 
+logg�
+->
+size
+ <�0 ? 
+LOG_ROLLBACK_NONE
+ :�ogger->size*1024;
+
+126 i�('\0' =�
+logg�
+->
+f�e
+)
+
+129 i�(!
+	`�rcmp
+(
+logg�
+->
+f�e
+, 
+DBG_LOG_FILE
+))
+
+131 
+logg�
+->
+�
+ = 
+�d�r
+;
+
+132 
+log_r�lback_size
+ = 
+LOG_ROLLBACK_NONE
+;
+
+133 
+logg�
+->
+�ag
+ |�
+CP_LOGGER_CONSOLE
+;
+
+134 
+OUT
+;
+
+138 
+f�emode
+ = "a+";
+
+140 
+logg�
+->
+�
+ = 
+	`fݒ
+�ogg�->
+f�e
+, 
+f�emode
+);
+
+141 i�(
+NULL
+ =�
+logg�
+->
+�
+)
+
+143 
+	`�r�tf
+(
+�d�r
+, "O��log f��\"%s\" i�%��u�\n", 
+logg�
+->
+f�e
+, 
+f�emode
+);
+
+147 
+a�
+.
+�_h�d�r
+ = 
+�_log_de�u�_sig�l_h�d�r
+;
+
+148 
+	`sigem�y�t
+(&
+a�
+.
+�_mask
+);
+
+149 
+a�
+.
+�_�ags
+ = 0;
+
+150 
+	`siga�i�
+(
+SIGHUP
+, &
+a�
+, 
+NULL
+);
+
+152 
+OUT
+:
+
+153 
+	`log_b��r
+("Initialize");
+
+156 
+	}
+}
+
+158 
+	$�_log_�o�
+()
+
+160 i�(!
+logg�
+ || !logg�->
+�
+ )
+
+163 
+	`log_b��r
+("\nTerminate");
+
+164 
+	`�_log_�w
+("\n\n\n\n");
+
+166 
+	`f�ush
+(
+logg�
+->
+�
+);
+
+168 
+	`f�o�
+(
+logg�
+->
+�
+);
+
+169 
+logg�
+->
+�
+ = 
+NULL
+;
+
+172 
+	}
+}
+
+174 
+	$�_log_�ݒ
+()
+
+176 
+rc
+ = 0;
+
+177 *
+f�emode
+;
+
+179 if�!
+logg�
+ )
+
+182 i�(
+logg�
+->
+�ag
+ & 
+CP_LOGGER_CONSOLE
+ )
+
+184 
+	`f�ush
+(
+logg�
+->
+�
+);
+
+185 
+logg�
+->
+�
+ = 
+�d�r
+;
+
+189 i�(
+logg�
+->
+�
+)
+
+191 
+	`�_log_�o�
+();
+
+193 
+f�emode
+ = "a+";
+
+194 
+logg�
+->
+�
+ = 
+	`fݒ
+�ogg�->
+f�e
+, 
+f�emode
+);
+
+196 i�(
+logg�
+->
+�
+ =�
+NULL
+)
+
+197 
+rc
+ = -2;
+
+201 
+rc
+ = -3;
+
+204 i�(!
+rc
+)
+
+206 
+	`log_b��r
+("\nReopen");
+
+208  
+rc
+;
+
+209 
+	}
+}
+
+211 
+	$�_log_�rm
+()
+
+213 if(!
+logg�
+)
+
+216 
+	`�_log_�o�
+();
+
+218 i�(
+logg�
+->
+�ag
+ & 
+CP_LOGGER_MALLOC
+ )
+
+220 
+	`t_�
+(
+logg�
+);
+
+222 
+logg�
+ = 
+NULL
+;
+
+223 
+	}
+}
+
+225 
+	$�_log_�w
+(cڡ *
+fmt
+, ...)
+
+227 
+va_li�
+ 
+�gp
+;
+
+229 i�(!
+logg�
+ || !logg�->
+�
+)
+
+232 
+	`check_�d_r�lback
+();
+
+234 
+	`va_��t
+(
+�gp
+, 
+fmt
+);
+
+235 
+	`v�r�tf
+(
+logg�
+->
+�
+, 
+fmt
+, 
+�gp
+);
+
+236 
+	`va_�d
+(
+�gp
+);
+
+237 
+	}
+}
+
+239 
+	$�_��tout
+(*
+�v�
+, *
+fmt
+, 
+va_li�
+ 
+�gp
+)
+
+241 
+buf
+[
+MAX_LOG_MESSAGE_LEN
+];
+
+242 
+tm
+ *
+lo�l
+;
+
+243 
+timev�
+ 
+now
+;
+
+244 
+time�r
+[256];
+
+246 if(!
+logg�
+)
+
+249 
+�h�ad_t
+ 
+tid
+;
+
+251 
+	`check_�d_r�lback
+();
+
+253 #ifde�
+MULTHREADS
+
+
+254 
+tid
+ = 
+	`�h�ad_�lf
+();
+
+256 
+tid
+ = 
+	`g�pid
+();
+
+259 
+	`g�timeofday
+(&
+now
+, 
+NULL
+);
+
+260 
+lo�l
+ = 
+	`lo��ime
+(&
+now
+.
+tv_�c
+);
+
+262 
+	`�r�ime
+(
+time�r
+, 256, 
+�_time_f�m�
+, 
+lo�l
+);
+
+263 
+	`v���tf
+(
+buf
+, 
+MAX_LOG_MESSAGE_LEN
+, 
+fmt
+, 
+�gp
+);
+
+265 #ifde�
+DUMPLICATE_OUTPUT
+
+
+266 
+	`��tf
+("%s.%03ld [%s] [%06lu]: %s",
+
+267 
+time�r
+, 
+now
+.
+tv_u�c
+ / 
+PRECISE_TIME_FACTOR
+, 
+�v�
+, 
+tid
+, 
+buf
+);
+
+270 i�(
+logg�
+->
+�
+)
+
+271 
+	`�r�tf
+(
+logg�
+->
+�
+, "%s.%03ld [%s] [%06lu]: %s", 
+time�r
+, 
+now
+.
+tv_u�c
+ / 
+PRECISE_TIME_FACTOR
+,
+
+272 
+�v�
+, 
+tid
+, 
+buf
+);
+
+274 i�(
+logg�
+->
+�
+)
+
+275 
+	`f�ush
+(
+logg�
+->
+�
+);
+
+276 
+	}
+}
+
+278 
+	$�_��tout_l�e
+(*
+�v�
+, *
+fmt
+, *
+f�e
+, 
+l�e
+, 
+va_li�
+ 
+�gp
+)
+
+280 
+buf
+[
+MAX_LOG_MESSAGE_LEN
+];
+
+281 
+tm
+ *
+lo�l
+;
+
+282 
+timev�
+ 
+now
+;
+
+283 
+time�r
+[256];
+
+285 if(!
+logg�
+)
+
+288 
+�h�ad_t
+ 
+tid
+;
+
+290 
+	`check_�d_r�lback
+();
+
+292 #ifde�
+MULTHREADS
+
+
+293 
+tid
+ = 
+	`�h�ad_�lf
+();
+
+295 
+tid
+ = 
+	`g�pid
+();
+
+298 
+	`g�timeofday
+(&
+now
+, 
+NULL
+);
+
+299 
+lo�l
+ = 
+	`lo��ime
+(&
+now
+.
+tv_�c
+);
+
+301 
+	`�r�ime
+(
+time�r
+, 256, 
+�_time_f�m�
+, 
+lo�l
+);
+
+302 
+	`v���tf
+(
+buf
+, 
+MAX_LOG_MESSAGE_LEN
+, 
+fmt
+, 
+�gp
+);
+
+304 #ifde�
+DUMPLICATE_OUTPUT
+
+
+305 
+	`��tf
+("%s.%03ld [%s] [%06lu] (%s [%04d]) : %s",
+
+306 
+time�r
+, 
+now
+.
+tv_u�c
+ / 
+PRECISE_TIME_FACTOR
+, 
+�v�
+, 
+tid
+, 
+f�e
+, 
+l�e
+, 
+buf
+);
+
+309 i�(
+logg�
+->
+�
+)
+
+310 
+	`�r�tf
+(
+logg�
+->
+�
+, "%s.%03ld [%s] [%06lu] (%s [%04d]) : %s",
+
+311 
+time�r
+, 
+now
+.
+tv_u�c
+ / 
+PRECISE_TIME_FACTOR
+, 
+�v�
+, 
+tid
+, 
+f�e
+, 
+l�e
+, 
+buf
+);
+
+313 i�(
+logg�
+->
+�
+)
+
+314 
+	`f�ush
+(
+logg�
+->
+�
+);
+
+315 
+	}
+}
+
+317 
+	$�_log
+(
+�v�
+, *
+fmt
+, ...)
+
+319 
+va_li�
+ 
+�gp
+;
+
+321 i�(!
+logg�
+ || 
+�v�
+>logger->level)
+
+324 
+	`va_��t
+(
+�gp
+, 
+fmt
+);
+
+325 
+	`�_��tout
+(
+log_�r
+[
+�v�
+], 
+fmt
+, 
+�gp
+);
+
+326 
+	`va_�d
+(
+�gp
+);
+
+327 
+	}
+}
+
+329 
+	$�_log_l�e
+(
+�v�
+, *
+f�e
+, 
+l�e
+, *
+fmt
+, ...)
+
+331 
+va_li�
+ 
+�gp
+;
+
+333 i�(!
+logg�
+ || 
+�v�
+>logger->level)
+
+336 
+	`va_��t
+(
+�gp
+, 
+fmt
+);
+
+337 
+	`�_��tout_l�e
+(
+log_�r
+[
+�v�
+], 
+fmt
+, 
+f�e
+, 
+l�e
+, 
+�gp
+);
+
+339 
+	`va_�d
+(
+�gp
+);
+
+340 
+	}
+}
+
+342 
+	#LINELEN
+ 81
+
+	)
+
+343 
+	#CHARS_PER_LINE
+ 16
+
+	)
+
+344 *
+	g��t_ch�
+ =
+
+362 
+	$�_log_dump
+(
+�v�
+, *
+buf
+, 
+�n
+)
+
+364 
+rc
+;
+
+365 
+idx
+;
+
+366 
+�n
+[
+LINELEN
+];
+
+367 
+l�
+[
+CHARS_PER_LINE
+ + 2];
+
+368 
+hc
+[4];
+
+369 
+l�e_d�e
+ = 1;
+
+371 i�(!
+logg�
+ || 
+�v�
+>logger->level)
+
+374 
+rc
+ = 
+�n
+;
+
+375 
+idx
+ = 0;
+
+376 
+l�
+[
+CHARS_PER_LINE
+] = '\0';
+
+378 
+rc
+ > 0)
+
+380 i�(
+l�e_d�e
+)
+
+381 
+	`���tf
+(
+�n
+, 
+LINELEN
+, "%08X: ", 
+idx
+);
+
+385 
+c
+ = 
+buf
+[
+idx
+];
+
+386 
+	`���tf
+(
+hc
+, 4, "%02X ", 
+c
+);
+
+387 
+	`���t
+(
+�n
+, 
+hc
+, 
+LINELEN
+);
+
+389 
+l�
+[
+idx
+ % 
+CHARS_PER_LINE
+] = 
+��t_ch�
+[
+c
+];
+
+391 --
+rc
+ > 0 && (++
+idx
+ % 
+CHARS_PER_LINE
+ != 0));
+
+393 
+l�e_d�e
+ = (
+idx
+ % 
+CHARS_PER_LINE
+) == 0;
+
+394 i�(
+l�e_d�e
+)
+
+396 #ifde�
+DUMPLICATE_OUTPUT
+
+
+397 
+	`��tf
+("%� %s\n", 
+�n
+, 
+l�
+);
+
+399 i�(
+logg�
+->
+�
+)
+
+400 
+	`�r�tf
+(
+logg�
+->
+�
+, "%� %s\n", 
+�n
+, 
+l�
+);
+
+404 i�(!
+l�e_d�e
+)
+
+406 
+ldx
+ = 
+idx
+ % 
+CHARS_PER_LINE
+;
+
+407 
+l�
+[
+ldx
+++] = 
+��t_ch�
+[()
+buf
+[
+idx
+]];
+
+408 
+l�
+[
+ldx
+] = '\0';
+
+410 (++
+idx
+ % 
+CHARS_PER_LINE
+) != 0)
+
+411 
+	`���t
+(
+�n
+, " ", 
+LINELEN
+);
+
+413 #ifde�
+DUMPLICATE_OUTPUT
+
+
+414 
+	`��tf
+("%� %s\n", 
+�n
+, 
+l�
+);
+
+416 i�(
+logg�
+->
+�
+)
+
+417 
+	`�r�tf
+(
+logg�
+->
+�
+, "%� %s\n", 
+�n
+, 
+l�
+);
+
+420 
+	}
+}
+
+	@cp_logger.h
+
+14 #i�de�
+__CP_LOG_H
+
+
+15 
+	#__CP_LOG_H
+
+
+	)
+
+17 
+	~<�d�g.h
+>
+
+18 
+	~<�dio.h
+>
+
+19 
+	~<�dlib.h
+>
+
+20 
+	~<�r�g.h
+>
+
+21 
+	~<uni�d.h
+>
+
+22 
+	~<sig�l.h
+>
+
+23 
+	~<time.h
+>
+
+24 
+	~<��o.h
+>
+
+26 
+	~<�h�ad.h
+>
+
+27 
+	~<sys/ty�s.h
+>
+
+28 
+	~<sys/time.h
+>
+
+30 
+	#LOG_VERSION_STR
+ "1.0.0"
+
+	)
+
+32 #i�de�
+FILENAME_LEN
+
+
+33 
+	#FILENAME_LEN
+ 64
+
+	)
+
+36 
+	#DEFAULT_LOGFILE
+ "�_logg�.log"
+
+	)
+
+37 
+	#DBG_LOG_FILE
+ "c�s�e"
+
+	)
+
+39 
+	#LOG_ROLLBACK_SIZE
+ 512
+
+	)
+
+40 
+	#LOG_ROLLBACK_NONE
+ 0
+
+	)
+
+42 
+	#DEFAULT_TIME_FORMAT
+ "%Y-%m-%d %H:%M:%S"
+
+	)
+
+43 
+	#MAX_LOG_MESSAGE_LEN
+ 0x1000
+
+	)
+
+46 
+	#LOG_FILE_LINE
+
+
+	)
+
+50 
+	mLOG_LEVEL_DISB
+ = 0,
+
+51 
+	mLOG_LEVEL_FATAL
+,
+
+52 
+	mLOG_LEVEL_ERROR
+,
+
+53 
+	mLOG_LEVEL_WARN
+,
+
+54 
+	mLOG_LEVEL_NRML
+,
+
+55 
+	mLOG_LEVEL_DEBUG
+,
+
+56 
+	mLOG_LEVEL_INFO
+,
+
+57 
+	mLOG_LEVEL_TRACE
+,
+
+58 
+	mLOG_LEVEL_MAX
+,
+
+61 
+	#CP_LOGGER_MALLOC
+ 1<<0
+
+	)
+
+62 
+	#CP_LOGGER_ARGUMENT
+ 0<<0
+
+	)
+
+64 
+	#CP_LOGGER_CONSOLE
+ 1<<1
+
+	)
+
+65 
+	#CP_LOGGER_FILE
+ 0<<1
+
+	)
+
+67 
+	#CP_LOGGER_LEVEL_OPT
+ 1<<2
+
+	)
+
+68 
+	s_�_logg�
+
+
+70 
+	m�ag
+;
+
+71 
+	mf�e
+[
+FILENAME_LEN
+];
+
+72 
+	m�v�
+;
+
+73 
+	msize
+;
+
+75 
+FILE
+ *
+	m�
+;
+
+76 } 
+	t�_logg�
+;
+
+78 
*
+log_�r
+[];
+
+80 
+�_logg�
+ *
+�_log_��
+(�_logg� *
+log
+, *
+f��ame
+, 
+�v�
+, 
+log_size
+);
+
+81 

+�_log_ݒ
+();
+
+82 

+�_log_�t_time_f�m�
+(*
+time_f�m�
+);
+
+83 

+�_log_�ݒ
+();
+
+84 

+�_log_�rm
+();
+
+85 

+�_log_�w
+(cڡ *
+fmt
+, ...);
+
+86 

+�_log
+(
+�v�
+, *
+fmt
+, ...);
+
+87 

+�_log_l�e
+(
+�v�
+, *
+f�e
+, 
+l�e
+, *
+fmt
+, ...);
+
+89 

+�_log_dump
+(
+�v�
+, *
+buf
+, 
+�n
+);
+
+91 #ifde�
+LOG_FILE_LINE
+
+
+92 
+	#log_�a�
+(
+fmt
+, ...�
+	`�_log_l�e
+(
+LOG_LEVEL_TRACE
+, 
+__FILE__
+, 
+__LINE__
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+93 
+	#log_�fo
+(
+fmt
+, ...�
+	`�_log_l�e
+(
+LOG_LEVEL_INFO
+, 
+__FILE__
+, 
+__LINE__
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+94 
+	#log_dbg
+(
+fmt
+, ...�
+	`�_log_l�e
+(
+LOG_LEVEL_DEBUG
+, 
+__FILE__
+, 
+__LINE__
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+95 
+	#log_�ml
+(
+fmt
+, ...�
+	`�_log_l�e
+(
+LOG_LEVEL_NRML
+, 
+__FILE__
+, 
+__LINE__
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+96 
+	#log_w�n
+(
+fmt
+, ...�
+	`�_log_l�e
+(
+LOG_LEVEL_WARN
+, 
+__FILE__
+, 
+__LINE__
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+97 
+	#log_�r
+(
+fmt
+, ...�
+	`�_log_l�e
+(
+LOG_LEVEL_ERROR
+, 
+__FILE__
+, 
+__LINE__
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+98 
+	#log_�l
+(
+fmt
+, ...�
+	`�_log_l�e
+(
+LOG_LEVEL_FATAL
+, 
+__FILE__
+, 
+__LINE__
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+100 
+	#log_�a�
+(
+fmt
+, ...�
+	`�_log
+(
+LOG_LEVEL_TRACE
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+101 
+	#log_�fo
+(
+fmt
+, ...�
+	`�_log
+(
+LOG_LEVEL_INFO
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+102 
+	#log_dbg
+(
+fmt
+, ...�
+	`�_log
+(
+LOG_LEVEL_DEBUG
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+103 
+	#log_�ml
+(
+fmt
+, ...�
+	`�_log
+(
+LOG_LEVEL_NRML
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+104 
+	#log_w�n
+(
+fmt
+, ...�
+	`�_log
+(
+LOG_LEVEL_WARN
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+105 
+	#log_�r
+(
+fmt
+, ...�
+	`�_log
+(
+LOG_LEVEL_ERROR
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+106 
+	#log_�l
+(
+fmt
+, ...�
+	`�_log
+(
+LOG_LEVEL_FATAL
+, fmt, ##
+__VA_ARGS__
+)
+
+	)
+
+	@cp_network.c
+
+13 
+	~<�t��/�.h
+>
+
+14 
+	~<�t/if.h
+>
+
+15 
+	~<�t/if_�p.h
+>
+
+16 
+	~<��/��.h
+>
+
+18 
+	~"�_sock.h
+"
+
+19 
+	~"�_fds.h
+"
+
+20 
+	~"�_�tw�k.h
+"
+
+21 
+	~"�_�tw�k.h
+"
+
+22 
+	~"�_�oc.h
+"
+
+29 
+	$nic_�tw�k_c�fig
+(*
+nic
+, *
+mac
+, *
+�
+)
+
+31 if(!
+nic
+)
+
+35 if(
+mac
+ && 17==
+	`���
+(mac))
+
+38 
+	`exec_sy�em_cmd
+("ifc�fig %�down", 
+nic
+,�ic);
+
+39 
+	`��p
+(1);
+
+40 
+	`exec_sy�em_cmd
+("ifc�fig %�hw�th� %�up", 
+nic
+, 
+mac
+);
+
+44 if(
+�
+ && 
+	`��_addr
+(ip))
+
+46 
+	`exec_sy�em_cmd
+("ifc�fig %�dow�&& ifc�fig %�0.0.0.0", 
+nic
+,�ic);
+
+47 
+	`��p
+(2);
+
+48 
+	`exec_sy�em_cmd
+("ifc�fig %�%�up", 
+nic
+, 
+�
+);
+
+52 
+	}
+}
+
+55 
+	$nic_g�_�addr
+(*
+nic
+, *
+�addr
+)
+
+57 
+fd
+;
+
+58 
+i�eq
+ 
+i�
+;
+
+59 
+sockaddr_�
+ *
+s�
+;
+
+61 if�!
+nic
+ || !
+�addr
+ )
+
+64 
+fd
+ = 
+	`sock�
+(
+AF_INET
+, 
+SOCK_DGRAM
+, 0);
+
+65 
+	`�r�y
+(
+i�
+.
+i�_�me
+, 
+nic
+);
+
+67 i�((
+	`io�l
+(
+fd
+, 
+SIOCGIFADDR
+, (
+�ddr_t
+)&
+i�
+, (
+i�eq
+))) < 0)
+
+69 
+	`log_�l
+("Sy�em c��io�l(�w�h SIOCGIFADDR g� %�IP�dd�s��u�.\n", 
+nic
+);
+
+73 
+s�
+ = (
+sockaddr_�
+ *)&
+i�
+.
+i�_addr
+;
+
+74 
+	`�r�y
+(
+�addr
+, (cڡ *)
+	`��_��
+(
+s�
+->
+s�_addr
+));
+
+76 
+	`log_dbg
+("G� %�lo��IP�dd�ss: %s\n", 
+nic
+, 
+�addr
+);
+
+79 
+	}
+}
+
+81 
+	$nic_g�_��ddr
+(*
+nic
+, *
+��ddr
+)
+
+83 
+fd
+;
+
+84 
+i�eq
+ 
+i�
+;
+
+85 
+sockaddr_�
+ *
+s�
+;
+
+87 
+fd
+ = 
+	`sock�
+(
+AF_INET
+, 
+SOCK_DGRAM
+, 0);
+
+88 
+	`�r�y
+(
+i�
+.
+i�_�me
+, 
+nic
+);
+
+90 i�((
+	`io�l
+(
+fd
+, 
+SIOCGIFDSTADDR
+, (
+�ddr_t
+�& 
+i�
+, (
+i�eq
+))) < 0)
+
+92 
+	`log_�l
+("Sy�em c��io�l(�w�h SIOCGIFDSTADDR g� %�IP�dd�s��u�.\n", 
+nic
+);
+
+96 
+s�
+ = (
+sockaddr_�
+ *)&
+i�
+.
+i�_d�addr
+;
+
+97 
+	`�r�y
+(
+��ddr
+, (cڡ *)
+	`��_��
+(
+s�
+->
+s�_addr
+));
+
+98 
+	`log_dbg
+("G� %��mِIP�dd�ss: %s\n", 
+nic
+, 
+��ddr
+);
+
+101 
+	}
+}
+
+111 
+	$�tw�k_p�g_��
+(*
+�om
+, *
+p�g_�
+)
+
+113 
+FILE
+ *
+�
+;
+
+114 
+cmd
+[256];
+
+115 
+buf
+[512];
+
+116 
+lo�_�r��
+ = 100;
+
+117 
+tx_�ck�s
+ = 0;
+
+118 
+rx_�ck�s
+ = 0;
+
+120 
+	`mem�t
+(
+cmd
+, 0, (cmd));
+
+121 if(
+�om
+)
+
+123 
+	`���tf
+(
+cmd
+, (cmd), "p�g -W1 -c5 -s4 %�-I %s", 
+p�g_�
+, 
+�om
+);
+
+127 
+	`���tf
+(
+cmd
+, (cmd), "p�g -W1 -c5 -s4 %s", 
+p�g_�
+);
+
+130 i�(
+NULL
+ =�(
+�
+ = 
+	`pݒ
+(
+cmd
+, "r")))
+
+135 
+NULL
+ !�
+	`fg�s
+(
+buf
+, (buf), 
+�
+))
+
+137 i�(
+	`�r�r
+(
+buf
+, "transmitted"))
+
+139 
+	`�l�_�r�g_to_v�ue
+(
+buf
+, "%l,%l,%d", &
+tx_�ck�s
+, &
+rx_�ck�s
+, &
+lo�_�r��
+);
+
+144 
+	`p�o�
+(
+�
+);
+
+145  
+lo�_�r��
+;
+
+146 
+	}
+}
+
+149 
+	$�_sock_ac��_�gi�
+(
+CP_SOCK
+ *
+�rv_sock
+)
+
+151 
+CP_SOCK
+ *
+�w_sock
+ = 
+NULL
+;
+
+152 
+rv
+ = 0;
+
+154 if(!
+�rv_sock
+)
+
+156 
+	`log_�r
+("Invalude input�rguments\n");
+
+160 
+	`log_dbg
+("Accept�nd�egist�ew client from server [%d] on [%s:%d]�ow\n",
+
+161 
+�rv_sock
+->
+fd
+, s�v_sock->
+�ddr
+, s�v_sock->
+��t
+);
+
+163 if(
+�rv_sock
+->
+ac��_�t
+ >�rv_sock->
+max_���
+)
+
+165 
+	`log_�r
+("N�mܐ����esour��v�b� o��rv� sock� [%d]\n", 
+�rv_sock
+->
+fd
+);
+
+166 
+ex�_out
+;
+
+169 if�!(
+�w_sock
+=
+	`�_sock_��
+(
+NULL
+, 
+CP_SOCK_RCVBUF
+, 
+CP_SOCK_SNDBUF
+, 
+CP_SOCK_KEEPINTVL
+, 
+CP_SOCK_KEEPCNT
+)) )
+
+171 
+	`log_�r
+("Create��ew socket contex for�ccept�ew client failed.\n");
+
+172 
+ex�_out
+;
+
+175 
+�w_sock
+->
+�rv_sock
+ = serv_sock;
+
+176 
+�w_sock
+->
+fds
+ = 
+�rv_sock
+->fds;
+
+177 
+�w_sock
+->
+�ivt
+ = 
+�rv_sock
+->privt;
+
+178 
+�w_sock
+->
+cbfunc
+ = 
+�rv_sock
+->
+���_func
+;
+
+179 
+�w_sock
+->
+mode
+ = 
+CP_SOCK_MODE_ACCEPT
+;
+
+182 if�
+	`�_fds_add_sock_�gi�ry
+(
+�w_sock
+) )
+
+184 
+rv
+ = -2;
+
+185 
+�rm_sock
+;
+
+189 if�
+	`�_sock_ac��
+(
+�rv_sock
+, 
+�w_sock
+) )
+
+191 
+rv
+ = -3;
+
+192 
+d�_�gi�
+;
+
+195 if�
+	`�_add_��l_ev�t
+(
+�w_sock
+) )
+
+197 
+rv
+ = -4;
+
+198 
+d�_�gi�
+;
+
+201 
+	`log_dbg
+("Accept�nd�egist�ew client from server [%d] on [%s:%d] ok\n",
+
+202 
+�rv_sock
+->
+fd
+, s�v_sock->
+�ddr
+, s�v_sock->
+��t
+);
+
+206 
+d�_�gi�
+:
+
+207 
+	`�_fds_d�_sock_�gi�ry
+(
+�w_sock
+);
+
+209 
+�rm_sock
+:
+
+210 if(
+�w_sock
+)
+
+211 
+	`�_sock_�rm_��r
+(
+�w_sock
+);
+
+213 
+ex�_out
+:
+
+214 
+	`log_�r
+("Accept�nd�egist�ew client from server [%d] on [%s:%d] failed\n",
+
+215 
+�rv_sock
+->
+fd
+, s�v_sock->
+�ddr
+, s�v_sock->
+��t
+);
+
+217 
+	`�_fds_d�_sock_�sk
+(
+�rv_sock
+);
+
+218  
+rv
+;
+
+219 
+	}
+}
+
+221 
+CP_SOCK
+ *
+	$�_sock_c���_�gi�
+(
+CP_FDS
+ *
+fds
+, 
+CP_SOCK
+ *
+sock
+, *
+�ddr
+, 
+��t
+, 
+��t
+, 
+CP_SOCK_EVENT_CALLBACK
+ 
+�rvi�_rou�
+)
+
+223 if(!
+fds
+ || !
+�ddr
+ || 
+��t
+<0)
+
+225 
+	`log_�r
+("Invalude input�rguments\n");
+
+226 
+ex�_out
+;
+
+229 if�!
+sock
+ && !(sock=
+	`�_sock_��
+(sock, 
+CP_SOCK_RCVBUF
+, 
+CP_SOCK_SNDBUF
+, 
+CP_SOCK_KEEPINTVL
+, 
+CP_SOCK_KEEPCNT
+)) )
+
+231 
+ex�_out
+;
+
+234 if�
+SOCK_STAT_CONNECTED
+ =�
+sock
+->
+��us
+ )
+
+235  
+sock
+;
+
+237 if�!(
+sock
+->
+�ag
+&
+FLAG_SOCK_REGISTRY
+) )
+
+239 
+sock
+->
+fds
+ = fds;
+
+240 
+sock
+->
+cbfunc
+ = 
+�rvi�_rou�
+;
+
+241 
+sock
+->
+mode
+ = 
+CP_SOCK_MODE_CONNECT
+;
+
+242 
+	`���y
+(
+sock
+->
+�ddr
+, "0.0.0.0", (sock->laddr));
+
+243 
+	`log_dbg
+("C����nd�egi� sock��ػmِ[%s:%d]�ow\n", 
+�ddr
+, 
+��t
+);
+
+245 if�
+	`�_fds_add_sock_�gi�ry
+�
+sock
+) )
+
+246 
+�rm_sock
+;
+
+249 i��
+	`�_sock_c���
+(
+sock
+, 
+�ddr
+, 
+��t
+, 
+��t
+) )
+
+251 
+	`log_dbg
+("sock� [%d] c��� fa�ed, s���ػmov��gi�ry i�now.\n", 
+sock
+->
+fd
+);
+
+252 
+d�_�gi�
+;
+
+256 if�
+	`�_add_��l_ev�t
+(
+sock
+) )
+
+257 
+d�_�gi�
+;
+
+260  
+sock
+;
+
+262 
+d�_�gi�
+:
+
+263 
+	`�_fds_d�_sock_�gi�ry
+(
+sock
+);
+
+265 
+�rm_sock
+:
+
+266 
+	`�_fds_d�_sock_�sk
+(
+sock
+);
+
+267 if(
+sock
+)
+
+268 
+	`�_sock_�rm
+(
+sock
+);
+
+270 
+ex�_out
+:
+
+271 
+	`log_�r
+("C����nd�egi��ew sock��ػmِ�rv� [%s:%d] fa�ed\n", 
+�ddr
+, 
+��t
+);
+
+272  
+NULL
+;
+
+273 
+	}
+}
+
+275 
+CP_SOCK
+ *
+	$�_sock_�rv�_�gi�
+(
+CP_FDS
+ *
+fds
+, *
+addr
+, 
+p�t
+, 
+max_���
+, 
+CP_SOCK_EVENT_CALLBACK
+ 
+�rvi�_rou�
+, *
+d�a
+)
+
+277 
+rv
+ = 0;
+
+279 
+CP_SOCK
+ *
+sock
+ = 
+NULL
+;
+
+281 
+	`log_dbg
+("Regi� sock� s�v��i�� o�[%s:%d]�ow\n", 
+addr
+?addr:"lo�l", 
+p�t
+);
+
+283 if(!
+fds
+ || 
+p�t
+ < 0)
+
+285 
+rv
+ = -1;
+
+286 
+	`log_�r
+("Invalude input�rguments\n");
+
+287 
+ex�_out
+;
+
+290 if�!(
+sock
+=
+	`�_sock_��
+(
+NULL
+, 
+CP_SOCK_RCVBUF
+, 
+CP_SOCK_SNDBUF
+, 
+CP_SOCK_KEEPINTVL
+, 
+CP_SOCK_KEEPCNT
+)) )
+
+292 
+rv
+ = -2;
+
+293 
+ex�_out
+;
+
+296 
+	`INIT_LIST_HEAD
+(&
+sock
+->
+ac��_li�
+);
+
+297 
+sock
+->
+fds
+ = fds;
+
+298 
+sock
+->
+cbfunc
+ = 
+�_sock_ac��_�gi�
+;
+
+299 
+sock
+->
+���_func
+ = 
+�rvi�_rou�
+;
+
+300 
+sock
+->
+�ivt
+ = 
+d�a
+;
+
+301 
+sock
+->
+mode
+ = 
+CP_SOCK_MODE_LISTEN
+;
+
+303 if�
+	`�_fds_add_sock_�gi�ry
+(
+sock
+) )
+
+305 
+rv
+ = -3;
+
+306 
+�rm_sock
+;
+
+310 
+sock
+->
+max_���
+ = max_���<=0 ? 
+CP_DEF_MAX_CLIENTS
+ : max_client;
+
+313 
+sock
+->
+max_���
+ = max_���<
+fds
+->
+max_ev�t
+ ? sock->max_��� : 
+CP_DEF_MAX_CLIENTS
+;
+
+315 if�
+	`�_sock_li��
+(
+sock
+, 
+addr
+, 
+p�t
+, sock->
+max_���
+) )
+
+317 
+rv
+ = -4;
+
+318 
+d�_�gi�
+;
+
+322 if�
+	`�_add_��l_ev�t
+(
+sock
+) )
+
+324 
+rv
+ = -5;
+
+325 
+d�_�gi�
+;
+
+328 
+	`log_�ml
+("Regi��sock�[%d] s�v��i�� o�[%s:%d] ok.\n", 
+sock
+->
+fd
+, sock->
+�ddr
+, sock->
+��t
+);
+
+329  
+sock
+;
+
+331 
+d�_�gi�
+:
+
+332 
+	`�_fds_d�_sock_�gi�ry
+(
+sock
+);
+
+334 
+�rm_sock
+:
+
+335 
+	`�_fds_d�_sock_�sk
+(
+sock
+);
+
+336 if(
+sock
+)
+
+337 
+	`�_sock_�rm_��r
+(
+sock
+);
+
+339 
+ex�_out
+:
+
+340 
+	`log_�r
+("Regi��sock� s�v��i�� o�[%s:%d] fa�ed.\n", 
+addr
+, 
+p�t
+);
+
+341  
+NULL
+;
+
+342 
+	}
+}
+
+344 
+	$�_sock_�rm_�l_�rvi�
+(
+CP_FDS
+ *
+fds
+)
+
+346 if(!
+fds
+)
+
+349 
+	`log_dbg
+("Terminate�ll�he service�ow\n");
+
+351 
+	`�_sock_�rm_�l_�sk
+(
+fds
+);
+
+352 
+	`�_sock_�rm_�l_�rv�
+(
+fds
+);
+
+353 
+	`�_sock_�rm_�l_���
+(
+fds
+);
+
+355 
+	`�_fds_�rm
+(
+fds
+);
+
+356 
+	`log_w�n
+("Terminate�ll�he service ok\n");
+
+357 
+	}
+}
+
+	@cp_network.h
+
+13 #i�de�
+__CP_NETWORK_H
+
+
+14 
+	#__CP_NETWORK_H
+
+
+	)
+
+16 
+	~"�_fds.h
+"
+
+17 
+	~"�_sock.h
+"
+
+19 
+	#CP_DEF_MAX_CLIENTS
+ 1024
+
+	)
+
+20 
+	#CP_DEF_TIMEOUT
+ 10
+
+	)
+
+22 

+nic_�tw�k_c�fig
+(*
+nic
+, *
+mac
+, *
+�
+);
+
+23 

+nic_g�_�addr
+(*
+nic
+, *
+�addr
+);
+
+24 

+nic_g�_��ddr
+(*
+nic
+, *
+��ddr
+);
+
+25 

+�tw�k_p�g_��
+(*
+�om
+, *
+p�g_�
+);
+
+27 

+�_sock_ac��_�gi�
+(
+CP_SOCK
+ *
+�rv_sock
+);
+
+29 
+CP_SOCK
+ *
+�_sock_c���_�gi�
+(
+CP_FDS
+ *
+fds
+, CP_SOCK *
+sock
+, *
+�ddr
+, 
+��t
+, 
+��t
+, 
+CP_SOCK_EVENT_CALLBACK
+ 
+�rvi�_rou�
+);
+
+31 
+CP_SOCK
+ *
+�_sock_�rv�_�gi�
+(
+CP_FDS
+ *
+fds
+, *
+addr
+, 
+p�t
+, 
+max_���
+, 
+CP_SOCK_EVENT_CALLBACK
+ 
+�rvi�_rou�
+, *
+d�a
+);
+
+33 

+�_sock_�rm_�l_�rvi�
+(
+CP_FDS
+ *
+fds
+);
+
+34 
+	#�_sock_�rm_�l_�rvi�_��r
+(
+fds
+�{
+	`�_sock_�rm_�l_�rvi�
+(fds); fds=
+NULL
+;}
+
+	)
+
+	@cp_ppp.c
+
+13 
+	~<sys/io�l.h
+>
+
+14 
+	~<�t��/�.h
+>
+
+15 
+	~<�t/if.h
+>
+
+16 
+	~<�t/if_�p.h
+>
+
+17 
+	~<��/��.h
+>
+
+18 
+	~"�_�p.h
+"
+
+19 
+	~"�_�r�g.h
+"
+
+20 
+	~"�_����r.h
+"
+
+21 
+	~"�_�tw�k.h
+"
+
+31 
+	$check_�p_��r��
+(*
+�p_dev
+)
+
+33 
+fd
+ = -1;
+
+34 
+�tv�
+ = -1;
+
+35 
+buf
+[512];
+
+37 i�((
+fd
+ = 
+	`ݒ
+("/�oc/�t/dev", 
+O_RDONLY
+, 0666)) < 0)
+
+42 
+	`�ad
+(
+fd
+, 
+buf
+, (buf)) > 0)
+
+44 i�(
+NULL
+ !�
+	`�r�r
+(
+buf
+, 
+�p_dev
+))
+
+46 
+�tv�
+ = 0;
+
+51 
+	`�o�
+(
+fd
+);
+
+52  
+�tv�
+;
+
+53 
+	}
+}
+
+55 
+	$check_�p_�addr
+(
+PPPD_INFO
+ *
+�pd_�fo
+, *
+�p_dev
+)
+
+57 
+fd
+;
+
+58 
+i�eq
+ 
+i�
+;
+
+59 
+sockaddr_�
+ *
+s�
+;
+
+61 if(
+	`check_�p_��r��
+(
+�p_dev
+))
+
+64 
+fd
+ = 
+	`sock�
+(
+AF_INET
+, 
+SOCK_DGRAM
+, 0);
+
+65 
+	`�r�y
+(
+i�
+.
+i�_�me
+, 
+�p_dev
+);
+
+67 i�((
+	`io�l
+(
+fd
+, 
+SIOCGIFADDR
+, (
+�ddr_t
+�& 
+i�
+, (
+i�eq
+))) < 0)
+
+69 
+	`log_�l
+("Sy�em c��io�l(�w�h SIOCGIFADDR fa�u�.\n", 
+�p_dev
+);
+
+73 
+s�
+ = (
+sockaddr_�
+ *)&
+i�
+.
+i�_addr
+;
+
+74 
+	`�r�y
+(
+�pd_�fo
+->
+Ïddr
+, (cڡ *)
+	`��_��
+(
+s�
+->
+s�_addr
+));
+
+75 
+	`log_�ml
+("G� %�lo��IP�dd�ss: %s\n", 
+�p_dev
+, 
+�pd_�fo
+->
+Ïddr
+);
+
+77 i�((
+	`io�l
+(
+fd
+, 
+SIOCGIFDSTADDR
+, (
+�ddr_t
+�& 
+i�
+, (
+i�eq
+))) < 0)
+
+79 
+	`log_�l
+("Sy�em c��io�l(�w�h SIOCGIFDSTADDR fa�u�.\n", 
+�p_dev
+);
+
+82 
+s�
+ = (
+sockaddr_�
+ *)&
+i�
+.
+i�_d�addr
+;
+
+83 
+	`�r�y
+(
+�pd_�fo
+->
+��ddr
+, (cڡ *)
+	`��_��
+(
+s�
+->
+s�_addr
+));
+
+84 
+	`log_�ml
+("G� %��mِIP�dd�ss: %s\n", 
+�p_dev
+, 
+�pd_�fo
+->
+��ddr
+);
+
+87 
+	}
+}
+
+89 
+	$check_�p_��
+(
+PPP_STAT
+ *
+�p_��
+, *
+�p_dev
+)
+
+91 
+�tv�
+;
+
+92 
+FILE
+ *
+�
+;
+
+93 *
+�r
+;
+
+94 
+buf
+[512];
+
+96 if�
+NULL
+ =�(
+�
+=
+	`fݒ
+(
+PPP_PROC_NET_DEV
+, "r")) )
+
+98 
+	`log_�r
+("C��� o��%s.\n", 
+PPP_PROC_NET_DEV
+);
+
+102 
+	`fg�s
+(
+buf
+, (buf), 
+�
+);
+
+103 
+	`fg�s
+(
+buf
+, (buf), 
+�
+);
+
+105 
+	`fg�s
+(
+buf
+, (buf), 
+�
+))
+
+107 
+�r
+=
+	`�r�r
+(
+buf
+, 
+�p_dev
+);
+
+108 if(
+NULL
+ =�
+�r
+)
+
+110 
+	`log_�r
+("C��� f�d %���r�� s�ti�i�d��� %s\n", 
+�p_dev
+, 
+PPP_PROC_NET_DEV
+);
+
+111 
+�tv�
+ = -1;
+
+116 
+�r
+ = 
+	`�rchr
+(ptr, ':');
+
+117 
+�r
+++;
+
+118 
+	`ss�nf
+(
+�r
+, "%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu",
+
+119 &(
+�p_��
+->
+u�Rx_By�s
+),
+
+120 &(
+�p_��
+->
+u�Rx_Pack�s
+),
+
+121 &(
+�p_��
+->
+ulRx_E��s
+),
+
+122 &(
+�p_��
+->
+ulRx_Drݳd
+),
+
+123 &(
+�p_��
+->
+ulRx_FIFO_E��s
+),
+
+124 &(
+�p_��
+->
+ulRx_F�me_E��s
+),
+
+125 &(
+�p_��
+->
+ulRx_Com�es�d
+),
+
+126 &(
+�p_��
+->
+ulRx_Mu�i��
+),
+
+127 &(
+�p_��
+->
+u�Tx_By�s
+),
+
+128 &(
+�p_��
+->
+u�Tx_Pack�s
+),
+
+129 &(
+�p_��
+->
+ulTx_E��s
+),
+
+130 &(
+�p_��
+->
+ulTx_Drݳd
+),
+
+131 &(
+�p_��
+->
+ulTx_FIFO_E��s
+),
+
+132 &(
+�p_��
+->
+ulC�lisi�s
+),
+
+133 &(
+�p_��
+->
+ulTx_C�r�r_E��s
+),
+
+134 &(
+�p_��
+->
+ulTx_Com�es�d
+)
+
+136 
+�tv�
+ = 0;
+
+141 if(0 =�
+�tv�
+ )
+
+142 
+	`log_dbg
+("Check PPP��w�k��ffic: Tx %�u by�s, Rx %�u by�s.\n", 
+�p_��
+->
+u�Tx_By�s
+,��_��->
+u�Rx_By�s
+);
+
+143 
+	`f�o�
+(
+�
+);
+
+144  
+�tv�
+;
+
+145 
+	}
+}
+
+147 
+	$k�l_�pd_�o�ss
+(
+COM_PORT
+ *
+comp�t
+)
+
+149 
+pid
+ = -1;
+
+151  (
+pid
+=
+	`check_�pd_pid
+(
+comp�t
+->
+dev_�me
+)) > 0)
+
+153 
+	`log_�ml
+("T�m����pd�ro�s�[pid=%d]\n", 
+pid
+);
+
+154 
+	`k�l
+(
+pid
+, 
+SIGTERM
+);
+
+155 
+	`��p
+(1);
+
+159 
+	}
+}
+
+161 
+	$��_�p_c���
+(
+PPP_CTX
+ *
+�p_�x
+)
+
+163 
+	`log_w�n
+("Stop PPP connection�ow.\n");
+
+165 if(
+	`check_�p_��r��
+(
+�p_�x
+->
+dev
+))
+
+168 
+	`k�l_�pd_�o�ss
+(
+�p_�x
+->
+comp�t
+);
+
+170 if(
+�p_�x
+->
+comp�t
+)
+
+172 
+	`�_gsm_d���t
+("��_�p_c���()", 
+�p_�x
+->
+modu�
+, &յ_�x->
+comp�t
+));
+
+175 
+	}
+}
+
+177 
+	$g�_�n_c�f
+(*
+�i_�me
+, *
+�i_key
+, 
+APN_ACCOUNT
+ *
+�n
+, 
+ty�
+)
+
+179 
+di�iڬy
+ *
+�i
+ ;
+
+180 
+tmp
+[64];
+
+181 *
+�r
+;
+
+183 if(
+NULL
+==
+�i_�me
+ || NULL==
+�i_key
+ || NULL==
+�n
+)
+
+188 
+�i
+ = 
+	`����r_l�d
+(
+�i_�me
+);
+
+189 i�(
+�i
+==
+NULL
+)
+
+191 
+	`log_�r
+("��ن�d de�u� APN c�figu� f�e: %s\n", 
+�i_�me
+);
+
+194 
+	`log_dbg
+("P���de�u� APN c�figu� f��%s\n", 
+�i_�me
+);
+
+197 
+	`���tf
+(
+tmp
+, 64, "%s:%s", 
+�i_key
+, 
+APN_3G
+==
+ty�
+?"3g_apn":"apn");
+
+198 if�!(
+�r
+=
+	`����r_g��r�g
+(
+�i
+, 
+tmp
+, 
+NULL
+)) )
+
+200 
+	`log_�r
+("��� f�d APN s�t�g f� SIM [%s] i�f�e: %s\n", 
+�i_key
+, 
+�i_�me
+);
+
+201 
+	`mem�t
+(
+�n
+, 0, (
+APN_ACCOUNT
+));
+
+206 
+	`���y
+(
+�n
+->�n, 
+�r
+, 
+APN_LEN
+);
+
+210 
+	`���tf
+(
+tmp
+, 64, "%s:%s", 
+�i_key
+, 
+APN_3G
+==
+ty�
+?"3g_uid":"uid");
+
+211 
+�r
+ = 
+	`����r_g��r�g
+(
+�i
+, 
+tmp
+, 
+NULL
+);
+
+212 
+	`���y
+(
+�n
+->
+uid
+, 
+�r
+, 
+UID_LEN
+);
+
+216 
+	`���tf
+(
+tmp
+, 64, "%s:%s", 
+�i_key
+, 
+APN_3G
+==
+ty�
+?"3g_pwd":"pwd");
+
+217 
+�r
+ = 
+	`����r_g��r�g
+(
+�i
+, 
+tmp
+, 
+NULL
+);
+
+218 
+	`���y
+(
+�n
+->
+pwd
+, 
+�r
+, 
+PWD_LEN
+);
+
+220 
+	`����r_�di�
+(
+�i
+);
+
+222 
+	}
+}
+
+225 
+	$���_�n
+(
+PPP_CTX
+ *
+�p_�x
+, *
+key
+)
+
+227 
+�tv�
+;
+
+228 
+ty�
+ = 
+APN_2G
+;
+
+230 
+	`log_�ml
+("GPRS module work on GPRS mode, select APN�ow.\n");
+
+232 
+�tv�
+ = 
+	`g�_�n_c�f
+(
+APN_DEF_CONF_FILE
+, 
+key
+, &(
+�p_�x
+->
+�n
+), 
+ty�
+);
+
+233 if(!
+�tv�
+)
+
+235 
+	`log_�r
+("G� de�u� APN [%s] from %�ok\n", 
+�p_�x
+->
+�n
+.�n, 
+APN_DEF_CONF_FILE
+);
+
+240 
+	}
+}
+
+242 
+	#PPPD_CMD_LEN
+ 512
+
+	)
+
+243 
+	$��t_�p_d�l_cmd
+(
+COM_PORT
+ *
+comp�t
+, 
+APN_ACCOUNT
+ *
+�n
+, *
+�p_dev
+)
+
+245 
+tmp
+[64];
+
+246 
+�pd_cmd
+[
+PPPD_CMD_LEN
+];
+
+247 
+pid_t
+ 
+pid
+;
+
+249 if�!
+comp�t
+ || !comp�t->
+is_c��ed
+ )
+
+251 
+	`log_�r
+("GPRS modu� d��p܈%�i�n� o��d.\n", 
+comp�t
+->
+dev_�me
+);
+
+255 if�!
+�n
+ || 
+	`���
+(apn->apn)<=0 )
+
+257 
+	`log_�r
+("No valid APN was set.\n");
+
+261 
+	`log_�ml
+("S�� PPP c���i� w�h APN \"%s\"�ow.\n", 
+�n
+->apn);
+
+263 
+	`mem�t
+(
+�pd_cmd
+, 0, 
+PPPD_CMD_LEN
+);
+
+264 
+	`���tf
+(
+�pd_cmd
+, 
+PPPD_CMD_LEN
+, "%�-d %�", 
+PPPD_DIAL_SCRIPTS
+, 
+comp�t
+->
+dev_�me
+);
+
+266 
+	`���tf
+(
+tmp
+, �mp), " -�%�", 
+�n
+->apn);
+
+267 
+	`���t
+(
+�pd_cmd
+, 
+tmp
+, 
+PPPD_CMD_LEN
+);
+
+269 if�
+	`���
+(
+�n
+->
+uid
+) > 0 )
+
+271 
+	`���tf
+(
+tmp
+, �mp), " -u %�", 
+�n
+->
+uid
+);
+
+272 
+	`���t
+(
+�pd_cmd
+, 
+tmp
+, 
+PPPD_CMD_LEN
+);
+
+275 if�
+	`���
+(
+�n
+->
+pwd
+) > 0 )
+
+277 
+	`���tf
+(
+tmp
+, �mp), " -�%�", 
+�n
+->
+pwd
+);
+
+278 
+	`���t
+(
+�pd_cmd
+, 
+tmp
+, 
+PPPD_CMD_LEN
+);
+
+281 if�
+	`���
+(
+�n
+->
+auth
+) > 0 )
+
+283 
+	`���tf
+(
+tmp
+, �mp), " -v %�", 
+�n
+->
+auth
+);
+
+284 
+	`���t
+(
+�pd_cmd
+, 
+tmp
+, 
+PPPD_CMD_LEN
+);
+
+287 
+	`���t
+(
+�pd_cmd
+, 
+�p_dev
+, 
+PPPD_CMD_LEN
+);
+
+289 
+	`log_�ml
+("��d��u�comm�d: %s\n", 
+�pd_cmd
+);
+
+291 
+pid
+ = 
+	`f�k
+();
+
+292 if�0 =�
+pid
+ )
+
+294 
+	`sy�em
+(
+�pd_cmd
+);
+
+295 
+	`ex�
+(0);
+
+297 i�(
+pid
+ < 0)
+
+299 
+	`log_�r
+("Create�ew�rocess failure.\n");
+
+304 
+	`log_dbg
+("pppd�rogram�lready�unning.\n");
+
+305 
+	`mi�o_�c�d_��p
+(1000);
+
+309 
+	}
+}
+
+311 
+	$check_�pd_pid
+(*
+f�d_key
+)
+
+313 
+buf
+[10];
+
+314 
+cmd
+[128];
+
+315 
+FILE
+ *
+�
+ = 
+NULL
+;
+
+316 
+pid
+ = -1;
+
+318 
+	`���tf
+(
+cmd
+, (cmd), "p�| g��-v g��| g���pd | g��%�|�wk '{���$1}'", 
+f�d_key
+);
+
+320 
+�
+ = 
+	`pݒ
+(
+cmd
+, "r");
+
+321 if(
+NULL
+ =�
+�
+)
+
+323 
+	`log_�l
+("popen()�o check�he�ppd�rocess ID failure.\n");
+
+327 
+	`mem�t
+(
+buf
+, 0, (buf));
+
+328 
+	`fg�s
+(
+buf
+, (buf), 
+�
+);
+
+330 
+pid
+ = 
+	`�oi
+(
+buf
+);
+
+332 if(
+pid
+ <= 1)
+
+334 
+	`log_�r
+("Get�ppd�rogram�unning�id failure\n");
+
+335 
+pid
+ = -1;
+
+340 
+	`log_�a�
+("�pd�rog�m�ušg�id i�[%d]\n", 
+pid
+);
+
+344 
+	`p�o�
+(
+�
+);
+
+345  
+pid
+;
+
+346 
+	}
+}
+
+348 
+	$�t_�p_disc���
+(
+PPP_CTX
+ *
+�p_�x
+)
+
+350 
+�p_�x
+->
+��us
+ = 
+DISCONNECT
+;
+
+351 
+�p_�x
+->
+�pd_�fo
+.
+��t_time
+ = 0;
+
+353 
+	`mem�t
+(&(
+�p_�x
+->
+�pd_�fo
+), 0, (
+PPPD_INFO
+));
+
+354 
+	`mem�t
+(&(
+�p_�x
+->
+�p_��
+), 0, (
+PPP_STAT
+));
+
+355 
+�p_�x
+->
+�tw�k
+ = 
+PPP_STOP
+;
+
+356 
+	}
+}
+
+359 
+	$�p_cڋxt_��
+(
+PPP_CTX
+ *
+�p_�x
+, 
+MODULE_INFO
+ *
+modu�
+)
+
+361 
+	`mem�t
+(
+�p_�x
+, 0, (*ppp_ctx));
+
+363 
+�p_�x
+->
+th�ad_id
+ = 
+	`�h�ad_�lf
+();
+
+364 
+�p_�x
+->
+modu�
+ = module;
+
+365 
+	`���y
+(
+�p_�x
+->
+dev
+, 
+PPP_INTERFACE_NAME
+, (ppp_ctx->dev));
+
+366 
+	`���y
+(
+�p_�x
+->
+p�g_�
+, 
+DEF_PING_DST
+, (ppp_ctx->ping_ip));
+
+367 
+�p_�x
+->
+p�g_��rv�
+ = 
+PING_INTERVAL_TIME
+;
+
+368 
+	`�t_�p_disc���
+(
+�p_�x
+);
+
+370 
+	`log_�ml
+("Initialize PPP�hread context ok\n");
+
+372 
+	}
+}
+
+374 
+	$�p_cڋxt_�rm
+(
+PPP_CTX
+ *
+�p_�x
+)
+
+376 
+	`��_�p_c���
+(
+�p_�x
+);
+
+377 
+	`�t_�p_disc���
+(
+�p_�x
+);
+
+379 
+	`log_�ml
+("Terminate PPP�hread context ok\n");
+
+380 
+	}
+}
+
+382 
+	$��t_�p_c���
+(
+PPP_CTX
+ *
+�p_�x
+)
+
+384 
+�tv�
+;
+
+385 
+MODULE_INFO
+ *
+modu�
+ = 
+�p_�x
+->module;
+
+387 if�!
+�p_�x
+->
+comp�t
+ )
+
+389 
+�p_�x
+->
+comp�t
+=
+	`�loc_gsm_d���t
+("��t_�p_c���()",��_�x->
+modu�
+);
+
+390 if(!
+�p_�x
+->
+comp�t
+)
+
+393 
+	`log_dbg
+("PPP�h�ad��o�GPRS d��܈%s=>[fd:%d]\n", 
+�p_�x
+->
+comp�t
+->
+dev_�me
+,��_�x->comp�t->
+fd
+);
+
+397 
+�p_�x
+->
+��us
+)
+
+399 
+DISCONNECT
+:
+
+400 
+	`�t_�p_disc���
+(
+�p_�x
+);
+
+401 
+�tv�
+ = 
+	`���_�n
+(
+�p_�x
+, 
+modu�
+->
+�g
+.
+loc
+.
+mcc_mnc
+);
+
+402 if(!
+�tv�
+)
+
+404 
+	`log_�ml
+("Select APN successfully, go�o�ext stage.\n");
+
+405 
+�p_�x
+->
+�_�t
+ = 0;
+
+406 
+�p_�x
+->
+��us
+++;
+
+410 
+	`log_w�n
+("Select APN failure,�equest�o�eset GPRS module\n");
+
+411 
+�p_�x
+->
+�_�t
+ ++;
+
+412 
+	`�t_modu�_ev�t
+(
+modu�
+, 
+REQ_POWER_RESET
+);
+
+416 
+SELECTED_APN
+:
+
+417 
+	`log_w�n
+("Run�ppd�rogram�o start PPP connection�ow\n");
+
+418 
+�p_�x
+->
+�tw�k
+ = 
+PPP_CONN
+;
+
+419 
+	`��t_�p_d�l_cmd
+(
+�p_�x
+->
+comp�t
+, &յ_�x->
+�n
+),��_�x->
+dev
+);
+
+420 
+�p_�x
+->
+��us
+++;
+
+425 
+	}
+}
+
+427 
+	$��e�_�tw�k_��us
+(
+PPP_CTX
+ *
+�p_�x
+)
+
+429 
+PPPD_INFO
+ *
+�pd_�fo
+ = &(
+�p_�x
+->pppd_info);
+
+430 
+PPP_STAT
+ *
+�p_��
+ = &(
+�p_�x
+->ppp_stat);
+
+431 
+lo�_�r��
+;
+
+432 
+ϡ_tx_by�s
+�
+�p_��
+->
+u�Tx_By�s
+;
+
+433 
+ϡ_rx_by�s
+�
+�p_��
+->
+u�Rx_By�s
+;
+
+435 if�
+CONNECTED
+ !�
+�p_�x
+->
+��us
+)
+
+437 
+�p_�x
+->
+�pd_�fo
+.
+p�g_time
+ = 0;
+
+438 
+	`mem�t
+(
+�p_��
+, 0, (
+PPP_STAT
+));
+
+440 
+�pd_�fo
+->
+pid
+ = 
+	`check_�pd_pid
+(
+�p_�x
+->
+comp�t
+->
+dev_�me
+);
+
+441 if(
+�pd_�fo
+->
+pid
+ <= 0)
+
+444 if(
+	`time_���d
+(
+�pd_�fo
+->
+��t_time
+�>�
+PPPD_DIAL_TIMEOUT
+)
+
+447 
+	`mi�o_�c�d_��p
+(2000);
+
+448 
+	`log_�r
+("pppd�rocess�xit when do�pp dialing, set status�o DISCONNECT.\n");
+
+449 
+	`�t_�p_disc���
+(
+�p_�x
+);
+
+454 if(
+	`���
+(
+�pd_�fo
+->
+Ïddr
+) <=0 )
+
+456 
+	`check_�p_�addr
+(
+�pd_�fo
+, 
+�p_�x
+->
+dev
+);
+
+457 
+	`log_dbg
+("�pd�ušg�ro�s�ID [%d].\n", 
+�pd_�fo
+->
+pid
+);
+
+462 if�
+	`time_���d
+(
+�pd_�fo
+->
+p�g_time
+�>�
+�p_�x
+->
+p�g_��rv�
+*1000 )
+
+464 if(
+�p_�x
+->
+�_�t
+ >�
+MAX_PPP_FAIL_CNT
+)
+
+467 
+	`mi�o_�c�d_��p
+(2000);
+
+468 
+	`log_w�n
+("PPP�etwork inspect status failure, set status�o DISCONNECT.\n");
+
+469 
+	`�t_�p_disc���
+(
+�p_�x
+);
+
+473 
+lo�_�r��
+ = 
+	`�tw�k_p�g_��
+(
+�p_�x
+->
+dev
+,��_�x->
+p�g_�
+);
+
+474 
+�p_�x
+->
+�tw�k
+ = 
+lo�_�r��
+<=60 ? 
+PPP_GOOD
+ : 
+PPP_BAD
+;
+
+476 if(
+lo�_�r��
+ <= 80)
+
+478 
+	`check_�p_��
+(
+�p_��
+, 
+�p_�x
+->
+dev
+);
+
+479 if(
+ϡ_tx_by�s
+==
+�p_��
+->
+u�Tx_By�s
+ || 
+ϡ_rx_by�s
+=��_��->
+u�Rx_By�s
+)
+
+481 
+	`log_w�n
+("PPP interface�raffic�ot increased, maybe�pp disconnected?\n");
+
+482 
+�p_�x
+->
+�_�t
+++;
+
+486 
+	`log_�ml
+("Set PPP connection status�o CONNECTED.\n");
+
+487 
+	`�t_�p_disc���
+(
+�p_�x
+);
+
+488 
+�p_�x
+->
+�_�t
+=0;
+
+493 
+�p_�x
+->
+�_�t
+++;
+
+495 
+�p_�x
+->
+�pd_�fo
+.
+p�g_time
+ = 
+	`time_now
+();
+
+499 
+	}
+}
+
+502 *
+	$�p_th�ad_w�kbody
+(*
+th�ad_�g
+)
+
+504 
+PPP_CTX
+ 
+�p_�x
+;
+
+506 
+MODULE_INFO
+ *
+modu�
+;
+
+508 
+modu�
+ = (
+MODULE_INFO
+ *)
+th�ad_�g
+;
+
+509 
+	`�p_cڋxt_��
+(&
+�p_�x
+, 
+modu�
+);
+
+511 
+	`log_�ml
+("GPRS PPP�hread start�unning\n");
+
+513  !
+g_�_sig�l
+.
+��
+ )
+
+515 if(
+ALL_READY
+ !�
+modu�
+->
+�ady
+)
+
+517 if(
+�p_�x
+.
+��us
+>=
+CONNECTING
+)
+
+519 
+	`log_�ml
+("Stop�xist PPP connection�nd free TTY data�ort\n");
+
+520 
+	`��_�p_c���
+(&
+�p_�x
+);
+
+524 
+	`mi�o_�c�d_��p
+(200);
+
+529 if(
+�p_�x
+.
+��us
+>=
+CONNECTING
+)
+
+531 
+	`��e�_�tw�k_��us
+(&
+�p_�x
+);
+
+535 
+	`��t_�p_c���
+(&
+�p_�x
+);
+
+539 
+	`��p
+(1);
+
+542 
+	`�p_cڋxt_�rm
+(&
+�p_�x
+);
+
+543 
+	`�h�ad_ex�
+(0);
+
+544  
+NULL
+;
+
+545 
+	}
+}
+
+547 
+	$��t_th�ad_�p
+(
+MODULE_INFO
+ *
+modu�
+)
+
+549 
+�h�ad_t
+ 
+tid
+;
+
+551  
+	`th�ad_��t
+(&
+tid
+, 
+�p_th�ad_w�kbody
+, 
+modu�
+);
+
+552 
+	}
+}
+
+	@cp_ppp.h
+
+13 #i�de�
+__PPP_H
+
+
+14 
+	#__PPP_H
+
+
+	)
+
+16 
+	~<�t��/�.h
+>
+
+18 
+	~"�_comp�t.h
+"
+
+19 
+	~"�_�oc.h
+"
+
+20 
+	~"�_g�s.h
+"
+
+22 
+	#PPPD_DIAL_TIMEOUT
+ 20000
+
+	)
+
+23 
+	#PING_INTERVAL_TIME
+ 10000
+
+	)
+
+25 
+	#DEFAULT_PING_INTERVAL
+ 30
+
+	)
+
+26 
+	#APN_LEN
+ 128
+
+	)
+
+27 
+	#UID_LEN
+ 64
+
+	)
+
+28 
+	#PWD_LEN
+ 64
+
+	)
+
+30 
+	#APN_3G
+ 3
+
+	)
+
+31 
+	#APN_2G
+ 2
+
+	)
+
+33 
+	#PPPD_DIAL_SCRIPTS
+ "/�ps/to�s/ifup-�p"
+
+	)
+
+34 
+	#PPP_INTERFACE_NAME
+ "�p10"
+
+	)
+
+35 
+	#PPP_PROC_NET_DEV
+ "/�oc/�t/dev"
+
+	)
+
+37 
+	#DEF_PING_DST
+ "4.2.2.2"
+
+	)
+
+39 
+	#APN_DEF_CONF_FILE
+ "/�ps/�c/�p/de�u�_�n.c�f"
+
+	)
+
+43 
+	mDISCONNECT
+ = 0,
+
+44 
+	mSELECTED_APN
+,
+
+45 
+	mCONNECTING
+,
+
+46 
+	mCONNECTED
+,
+
+50 
+	s__APN_ACCOUNT
+
+
+52 
+	m�n
+[
+APN_LEN
+];
+
+53 
+	muid
+[
+UID_LEN
+];
+
+54 
+	mpwd
+[
+PWD_LEN
+];
+
+55 
+	mauth
+[10];
+
+56 } 
+	tAPN_ACCOUNT
+;
+
+58 
+	s__PPPD_INFO
+
+
+60 
+	mÏddr
+[
+INET_ADDRSTRLEN
+];
+
+61 
+	m��ddr
+[
+INET_ADDRSTRLEN
+];
+
+62 
+	m��t_time
+;
+
+63 
+	mp�g_time
+;
+
+64 
+pid_t
+ 
+	mpid
+;
+
+65 } 
+	tPPPD_INFO
+;
+
+67 
+	s__PPP_STAT
+
+
+69 
+	mu�Rx_Pack�s
+;
+
+70 
+	mu�Tx_Pack�s
+;
+
+71 
+	mu�Rx_By�s
+;
+
+72 
+	mu�Tx_By�s
+;
+
+74 
+	mulRx_E��s
+;
+
+75 
+	mulTx_E��s
+;
+
+76 
+	mulRx_Drݳd
+;
+
+77 
+	mulTx_Drݳd
+;
+
+78 
+	mulRx_Mu�i��
+;
+
+79 
+	mulRx_Com�es�d
+;
+
+80 
+	mulTx_Com�es�d
+;
+
+81 
+	mulC�lisi�s
+;
+
+84 
+	mulRx_L�gth_E��s
+;
+
+85 
+	mulRx_Ov�_E��s
+;
+
+86 
+	mulRx_CRC_E��s
+;
+
+87 
+	mulRx_F�me_E��s
+;
+
+88 
+	mulRx_FIFO_E��s
+;
+
+89 
+	mulRx_Mis�d_E��s
+;
+
+92 
+	mulTx_Ab܋d_E��s
+;
+
+93 
+	mulTx_C�r�r_E��s
+;
+
+94 
+	mulTx_FIFO_E��s
+;
+
+95 
+	mulTx_H��b�t_E��s
+;
+
+96 
+	mulTx_W�dow_E��s
+;
+
+97 } 
+	tPPP_STAT
+;
+
+99 
+	#MAX_PPP_FAIL_CNT
+ 3
+
+	)
+
+101 
+	#PPP_STOP
+ 0
+
+	)
+
+102 
+	#SIG_WEAK
+ 1
+
+	)
+
+103 
+	#PPP_CONN
+ 2
+
+	)
+
+104 
+	#PPP_BAD
+ 3
+
+	)
+
+105 
+	#PPP_GOOD
+ 4
+
+	)
+
+106 
+	s__PPP_CTX
+
+
+108 
+	m�ab�
+;
+
+109 
+	m��us
+;
+
+110 
+	m�tw�k
+;
+
+111 
+	mdev
+[10];
+
+113 
+�h�ad_t
+ 
+	mth�ad_id
+;
+
+115 
+PPPD_INFO
+ 
+	m�pd_�fo
+;
+
+116 
+PPP_STAT
+ 
+	m�p_��
+;
+
+117 
+	m�_�t
+;
+
+119 
+APN_ACCOUNT
+ 
+	m�n
+;
+
+121 
+	mp�g_�
+[
+INET_ADDRSTRLEN
+];
+
+122 
+	mp�g_��rv�
+;
+
+124 
+COM_PORT
+ *
+	mcomp�t
+;
+
+125 
+MODULE_INFO
+ *
+	mmodu�
+;
+
+126 } 
+	tPPP_CTX
+;
+
+128 
+g�_�n_c�f
+(*
+�i_�me
+, *
+�i_key
+, 
+APN_ACCOUNT
+ *
+�n
+, 
+ty�
+);
+
+129 
+check_�pd_pid
+(*
+f�d_key
+);
+
+130 
+check_�p_��r��
+(*
+�p_�f
+);
+
+131 
+��t_�p_d�l_cmd
+(
+COM_PORT
+ *
+comp�t
+, 
+APN_ACCOUNT
+ *
+�n
+, *
+�p_�f
+);
+
+132 
+check_�p_�addr
+(
+PPPD_INFO
+ *
+�pd_�fo
+, *
+�p_�f
+);
+
+133 
+check_�p_��
+(
+PPP_STAT
+ *
+�p_��
+, *
+�p_�f
+);
+
+134 
+��_�p_c���
+(
+PPP_CTX
+ *
+�p_�x
+);
+
+136 
+��t_th�ad_�p
+(
+MODULE_INFO
+ *
+modu�
+);
+
+	@cp_proc.c
+
+14 
+	~<�dio.h
+>
+
+15 
+	~<�dlib.h
+>
+
+16 
+	~<uni�d.h
+>
+
+17 
+	~<libg�.h
+>
+
+18 
+	~<f��.h
+>
+
+19 
+	~<sys/ty�s.h
+>
+
+20 
+	~<sys/��.h
+>
+
+22 
+	~"�_�oc.h
+"
+
+23 
+	~"�_logg�.h
+"
+
+25 
+CP_PROC_SIG
+ 
+	gg_�_sig�l
+={0};
+
+27 
+	$�_�oc_sigh�d�r
+(
+sig
+)
+
+29 
+sig
+)
+
+31 
+SIGINT
+:
+
+32 
+	`log_w�n
+("SIGINT - stopping\n");
+
+33 
+g_�_sig�l
+.
+��
+ = 1;
+
+36 
+SIGTERM
+:
+
+38 
+g_�_sig�l
+.
+��
+ = 1;
+
+41 
+SIGSEGV
+:
+
+42 
+	`log_�r
+("SIGSEGV - stopping\n");
+
+43 if(
+g_�_sig�l
+.
+��
+)
+
+44 
+	`ex�
+(0);
+
+46 
+g_�_sig�l
+.
+��
+ = 1;
+
+50 
+SIGPIPE
+:
+
+51 
+	`log_w�n
+("SIGPIPE - warnning\n");
+
+52 
+g_�_sig�l
+.
+��
+ = 1;
+
+58 
+	}
+}
+
+61 
+	$�_���l_�oc_sig�l
+()
+
+63 
+siga�i�
+ 
+siga�
+, 
+sigign
+;
+
+65 
+	`log_�ml
+("Install default signal handler.\n");
+
+68 
+	`sigem�y�t
+(&
+siga�
+.
+�_mask
+);
+
+69 
+siga�
+.
+�_�ags
+ = 0;
+
+70 
+siga�
+.
+�_h�d�r
+ = 
+�_�oc_sigh�d�r
+;
+
+73 
+	`sigem�y�t
+(&
+sigign
+.
+�_mask
+);
+
+74 
+sigign
+.
+�_�ags
+ = 0;
+
+75 
+sigign
+.
+�_h�d�r
+ = 
+SIG_IGN
+;
+
+77 
+	`siga�i�
+(
+SIGTERM
+, &
+siga�
+, 0);
+
+78 
+	`siga�i�
+(
+SIGINT
+, &
+siga�
+, 0);
+
+80 
+	`siga�i�
+(
+SIGPIPE
+, &
+siga�
+, 0);
+
+82 
+	`siga�i�
+(
+SIGCHLD
+, &
+siga�
+, 0);
+
+83 
+	`siga�i�
+(
+SIGUSR2
+, &
+siga�
+, 0);
+
+85 
+	}
+}
+
+96 
+	$d�m�ize
+(
+nochd�
+, 
+no�o�
+)
+
+98 
+�tv�
+, 
+fd
+;
+
+99 
+i
+;
+
+102 i�(1 =�
+	`g��id
+())
+
+106 
+�tv�
+ = 
+	`f�k
+();
+
+107 i�(
+�tv�
+ < 0�
+	`ex�
+(1);
+
+110 i�(
+�tv�
+ > 0)
+
+111 
+	`ex�
+(0);
+
+114 
+	`�tsid
+();
+
+116 i�(!
+no�o�
+)
+
+119 
+i
+ = 
+	`g�d�b�size
+(); i >= 0; --i)
+
+122 
+	`�o�
+(
+i
+);
+
+126 
+fd
+ = 
+	`ݒ
+("/dev/nu�", 
+O_RDWR
+);
+
+129 
+	`dup
+(
+fd
+);
+
+132 
+	`dup
+(
+fd
+);
+
+135 
+	`umask
+(0);
+
+137 i�(!
+nochd�
+)
+
+138 
+	`chd�
+("/");
+
+141 
+	}
+}
+
+150 
+	$�c�d_d�m�_pid
+(cڡ *
+pid_f�e
+)
+
+152 
+��
+ 
+fS�tBuf
+;
+
+153 
+fd
+ = -1;
+
+154 
+mode
+ = 
+S_IROTH
+ | 
+S_IXOTH
+ | 
+S_IRGRP
+ | 
+S_IXGRP
+ | 
+S_IRWXU
+;
+
+155 
+�c_d�
+[64] = { 0 };
+
+157 
+	`���y
+(
+�c_d�
+, 
+pid_f�e
+, 64);
+
+160 
+	`d��me
+(
+�c_d�
+);
+
+163 i�(
+	`��
+(
+�c_d�
+, &
+fS�tBuf
+) < 0)
+
+165 i�(
+	`mkd�
+(
+�c_d�
+, 
+mode
+) < 0)
+
+167 
+	`log_�l
+("��� c���%s: %s\n", 
+�c_d�
+, 
+	`����
+(
+��o
+));
+
+171 ()
+	`chmod
+(
+�c_d�
+, 
+mode
+);
+
+175 
+mode
+ = 
+S_IRUSR
+ | 
+S_IWUSR
+ | 
+S_IRGRP
+ | 
+S_IROTH
+;
+
+176 i�((
+fd
+ = 
+	`ݒ
+(
+pid_f�e
+, 
+O_RDWR
+ | 
+O_CREAT
+ | 
+O_TRUNC
+, 
+mode
+)) >= 0)
+
+178 
+pid
+[
+PID_ASCII_SIZE
+];
+
+179 
+	`���tf
+(
+pid
+, �id), "%u\n", ()
+	`g�pid
+());
+
+180 
+	`wr�e
+(
+fd
+, 
+pid
+, 
+	`���
+(pid));
+
+181 
+	`�o�
+(
+fd
+);
+
+183 
+	`log_dbg
+("Rec�d PID<%u>��f��%s.\n", 
+	`g�pid
+(), 
+pid_f�e
+);
+
+187 
+	`log_�l
+("��� c���%s: %s\n", 
+pid_f�e
+, 
+	`����
+(
+��o
+));
+
+192 
+	}
+}
+
+201 
+pid_t
+ 
+	$g�_d�m�_pid
+(cڡ *
+pid_f�e
+)
+
+203 
+FILE
+ *
+f
+;
+
+204 
+pid_t
+ 
+pid
+;
+
+206 i�((
+f
+ = 
+	`fݒ
+(
+pid_f�e
+, "rb")�!�
+NULL
+)
+
+208 
+pid_ascii
+[
+PID_ASCII_SIZE
+];
+
+209 ()
+	`fg�s
+(
+pid_ascii
+, 
+PID_ASCII_SIZE
+, 
+f
+);
+
+210 ()
+	`f�o�
+(
+f
+);
+
+211 
+pid
+ = 
+	`�oi
+(
+pid_ascii
+);
+
+215 
+	`log_�l
+("C�'�ݒ PID�ec�d f��%s: %s\n", 
+pid_f�e
+, 
+	`����
+(
+��o
+));
+
+218  
+pid
+;
+
+219 
+	}
+}
+
+228 
+	$check_d�m�_rušg
+(cڡ *
+pid_f�e
+)
+
+230 
+�tV�
+ = -1;
+
+231 
+��
+ 
+fS�tBuf
+;
+
+233 
+�tV�
+ = 
+	`��
+(
+pid_f�e
+, &
+fS�tBuf
+);
+
+234 i�(0 =�
+�tV�
+)
+
+236 
+pid_t
+ 
+pid
+ = -1;
+
+237 
+	`��tf
+("PID�ec�d f��\"%s\"�xi�.\n", 
+pid_f�e
+);
+
+239 
+pid
+ = 
+	`g�_d�m�_pid
+(
+pid_f�e
+);
+
+240 i�(
+pid
+ > 0)
+
+242 i�((
+�tV�
+ = 
+	`k�l
+(
+pid
+, 0)) == 0)
+
+244 
+	`��tf
+("Prog�m w�h PID[%d] s�m�rušg.\n", 
+pid
+);
+
+249 
+	`��tf
+("Prog�m w�h PID[%d] s�m�ex�.\n", 
+pid
+);
+
+250 
+	`�move
+(
+pid_f�e
+);
+
+254 i�(0 =�
+pid
+)
+
+256 
+	`��tf
+("Can�ot�ead�rogram PID form�ecord file.\n");
+
+257 
+	`�move
+(
+pid_f�e
+);
+
+262 
+	`��tf
+("R�d�ec�d f��\"%s\" fa�u�, mayb��og�m st��rušg.\n", 
+pid_f�e
+);
+
+268 
+	}
+}
+
+278 
+	$�t_d�m�_rušg
+(cڡ *
+pid_f�e
+)
+
+280 
+	`d�m�ize
+(0, 1);
+
+281 
+	`log_�ml
+("Prog�m�ušg��d�m� [PID:%d].\n", 
+	`g�pid
+());
+
+283 i�(
+	`�c�d_d�m�_pid
+(
+pid_f�e
+) < 0)
+
+285 
+	`log_�l
+("Rec�d PID��f��\"%s\" fa�u�.\n", 
+pid_f�e
+);
+
+290 
+	}
+}
+
+293 
+	$th�ad_��t
+(
+�h�ad_t
+ * 
+th�ad_id
+, 
+THREAD_BODY
+ * 
+th�ad_w�kbody
+, *
+th�ad_�g
+)
+
+295 
+�tv�
+ = 0;
+
+297 
+�h�ad_��_t
+ 
+th�ad_��
+;
+
+300 
+�tv�
+ = 
+	`�h�ad_��_��
+(&
+th�ad_��
+);
+
+301 if(
+�tv�
+)
+
+305 
+�tv�
+ = 
+	`�h�ad_��_�t�acksize
+(&
+th�ad_��
+, 120 * 1024);
+
+306 if(
+�tv�
+)
+
+307 
+C˪Up
+;
+
+310 
+�tv�
+ = 
+	`�h�ad_��_�td�ach��e
+(&
+th�ad_��
+, 
+PTHREAD_CREATE_DETACHED
+);
+
+311 if(
+�tv�
+)
+
+312 
+C˪Up
+;
+
+315 
+�tv�
+ = 
+	`�h�ad_���
+(
+th�ad_id
+, &
+th�ad_��
+, 
+th�ad_w�kbody
+, 
+th�ad_�g
+);
+
+316 if(
+�tv�
+)
+
+317 
+C˪Up
+;
+
+319 
+C˪Up
+:
+
+321 
+	`�h�ad_��_de�roy
+(&
+th�ad_��
+);
+
+322  
+�tv�
+;
+
+323 
+	}
+}
+
+326 
+	$exec_sy�em_cmd
+(cڡ *
+f�m�
+, ...)
+
+328 
+cmd
+[256];
+
+329 
+va_li�
+ 
+�gs
+;
+
+330 
+d�e
+;
+
+332 
+	`mem�t
+(
+cmd
+, 0, (cmd));
+
+334 
+	`va_��t
+(
+�gs
+, 
+f�m�
+);
+
+335 
+d�e
+ = 
+	`v���tf
+(
+cmd
+, (cmd), 
+f�m�
+, 
+�gs
+);
+
+336 
+	`va_�d
+(
+�gs
+);
+
+338 
+	`sy�em
+(
+cmd
+);
+
+339 
+	}
+}
+
+	@cp_proc.h
+
+14 #i�de�
+__CP_PROC_H
+
+
+15 
+	#__CP_PROC_H
+
+
+	)
+
+17 
+	~<sig�l.h
+>
+
+19 
+	#PID_ASCII_SIZE
+ 11
+
+	)
+
+21 
+	s__CP_PROC_SIG
+
+
+23 
+	msig�l
+;
+
+24 
+	m��
+;
+
+25 } 
+	tCP_PROC_SIG
+;
+
+27 *(
+	tTHREAD_BODY
+�(*
+	tth�ad_�g
+);
+
+29 
+CP_PROC_SIG
+ 
+g_�_sig�l
+;
+
+30 

+�_���l_�oc_sig�l
+();
+
+32 

+d�m�ize
+(
+nochd�
+, 
+no�o�
+);
+
+33 

+�c�d_d�m�_pid
+(cڡ *
+pid_f�e
+);
+
+34 
+pid_t
+ 
+g�_d�m�_pid
+(cڡ *
+pid_f�e
+);
+
+35 

+check_d�m�_rušg
+(cڡ *
+pid_f�e
+);
+
+36 

+�t_d�m�_rušg
+(cڡ *
+pid_f�e
+);
+
+38 

+exec_sy�em_cmd
+(cڡ *
+f�m�
+, ...);
+
+40 

+th�ad_��t
+(
+�h�ad_t
+ * 
+th�ad_id
+, 
+THREAD_BODY
+ * 
+th�ad_w�kbody
+, *
+th�ad_�g
+);
+
+	@cp_queue.c
+
+14 
+	~"�_queue.h
+"
+
+15 
+	~"�_comm�.h
+"
+
+17 
+CP_QUEUE
+ *
+	$�_queue_��
+(
+CP_QUEUE
+ *
+queue
+, 
+size
+)
+
+19 if(!
+queue
+)
+
+21 
+queue
+ = 
+	`t_m�loc
+((*queue));
+
+23 
+	`mem�t
+(
+queue
+, 0, (*queue));
+
+25 
+queue
+->
+size
+ = size;
+
+26 
+queue
+->
+�ems
+ = 0;
+
+27 
+queue
+->
+��
+ = queue->
+��t
+ = 
+NULL
+;
+
+29  
+queue
+;
+
+30 
+	}
+}
+
+32 *
+	$�_�queue
+(
+CP_QUEUE
+ *
+queue
+, *
+d�a
+)
+
+34 
+CP_QNODE
+ *
+node
+;
+
+36 if(!
+queue
+ || 
+	`�_queue_is_fu�
+(queue))
+
+38  
+NULL
+;
+
+41 
+node
+ = 
+	`t_m�loc
+((*node));
+
+42 if(
+NULL
+ =�
+node
+)
+
+44  
+NULL
+;
+
+47 
+node
+->
+�em
+ = 
+d�a
+;
+
+48 
+node
+->
+�xt
+ = 
+NULL
+;
+
+50 if(
+	`�_queue_is_em�y
+(
+queue
+))
+
+52 
+queue
+->
+��t
+ = 
+node
+;
+
+56 
+queue
+->
+��
+->
+�xt
+ = 
+node
+;
+
+59 
+queue
+->
+��
+ = 
+node
+;
+
+60 
+queue
+->
+�ems
+++;
+
+62  
+d�a
+;
+
+63 
+	}
+}
+
+65 
+	$�_�av�_queue
+(
+CP_QUEUE
+ *
+queue
+)
+
+67 
+CP_QNODE
+ *
+node
+;
+
+69 
+node
+=
+queue
+->
+��t
+;�ode!=
+NULL
+;�ode�ode->
+�xt
+)
+
+71 
+	`��tf
+("queu�node[%p] sav�d��[%p]\n", 
+node
+,�ode->
+�em
+);
+
+73 
+	}
+}
+
+75 *
+	$�_rmqueue
+(
+CP_QUEUE
+ *
+queue
+, *
+d�a
+)
+
+77 
+CP_QNODE
+ *
+node
+, *
+tmp
+;
+
+79 if(!
+queue
+ || 
+	`�_queue_is_em�y
+(queue))
+
+81  
+NULL
+;
+
+85 if(
+queue
+->
+��t
+->
+�em
+==
+d�a
+)
+
+87 
+tmp
+ = 
+queue
+->
+��t
+;
+
+88 
+queue
+->
+��t
+ = queue->��t->
+�xt
+;
+
+89 
+queue
+->
+�ems
+ -= 1;
+
+90 
+	`t_�
+(
+tmp
+);
+
+91  
+d�a
+;
+
+94 
+node
+=
+queue
+->
+��t
+;�ode!=
+NULL
+;�ode�ode->
+�xt
+)
+
+96 if(
+node
+->
+�xt
+->
+�em
+ =�
+d�a
+)
+
+98 
+tmp
+ = 
+node
+->
+�xt
+;
+
+99 
+queue
+->
+�ems
+ -= 1;
+
+101 if(
+node
+->
+�xt
+ !�
+queue
+->
+��
+)
+
+102 
+node
+->
+�xt
+ =�ode->next->next;
+
+105 
+queue
+->
+��
+ = 
+node
+;
+
+106 
+queue
+->
+��
+->
+�xt
+ = 
+NULL
+;
+
+109 
+	`t_�
+(
+tmp
+);
+
+110  
+d�a
+;
+
+114  
+d�a
+;
+
+115 
+	}
+}
+
+117 *
+	$�_dequeue
+(
+CP_QUEUE
+ *
+queue
+)
+
+119 
+CP_QNODE
+ *
+node
+;
+
+120 *
+�em
+;
+
+122 if(!
+queue
+ || 
+	`�_queue_is_em�y
+(queue))
+
+124  
+NULL
+;
+
+127 
+node
+ = 
+queue
+->
+��t
+;
+
+128 
+queue
+->
+��t
+ = queue->��t->
+�xt
+;
+
+130 
+�em
+ = 
+node
+->item;
+
+131 
+	`t_�
+(
+node
+);
+
+133 
+queue
+->
+�ems
+--;
+
+135 if(
+queue
+->
+�ems
+ == 0)
+
+136 
+queue
+->
+��
+ = 
+NULL
+;
+
+138  
+�em
+;
+
+139 
+	}
+}
+
+141 
+	$�_queue_de�roy
+(
+CP_QUEUE
+ *
+queue
+)
+
+143 if(!
+queue
+)
+
+146  !
+	`�_queue_is_em�y
+(
+queue
+) )
+
+148 
+	`�_dequeue
+(
+queue
+);
+
+151 
+	`t_�
+(
+queue
+);
+
+154 
+	}
+}
+
+	@cp_queue.h
+
+13 #i�de�
+__CP_QUEUE
+
+
+14 
+	#__CP_QUEUE
+
+
+	)
+
+16 
+	~<�dio.h
+>
+
+17 
+	~<uni�d.h
+>
+
+18 
+	~<�dlib.h
+>
+
+19 
+	~<�r�g.h
+>
+
+21 
+	s_CP_QNODE
+
+
+23 *
+	m�em
+;
+
+24 
+_CP_QNODE
+ *
+	m�xt
+;
+
+25 } 
+	tCP_QNODE
+;
+
+28 
+	s_CP_QUEUE
+
+
+30 
+CP_QNODE
+ *
+	m��t
+;
+
+31 
+CP_QNODE
+ *
+	m��
+;
+
+32 
+	m�ems
+;
+
+33 
+	msize
+;
+
+34 } 
+	tCP_QUEUE
+;
+
+36 
+	#�_queue_is_fu�
+(
+pq
+���q)->
+size
+==�q)->
+�ems
+ ? 1 :0 )
+
+	)
+
+37 
+	#�_queue_is_em�y
+(
+pq
+��0==�q)->
+�ems
+ ? 1 : 0)
+
+	)
+
+38 
+	#�_queue_cou�
+(
+pq
+���q)->
+�ems
+ )
+
+	)
+
+39 
+	#�_queue_size
+(
+pq
+���q)->
+size
+ )
+
+	)
+
+41 
+CP_QUEUE
+ *
+�_queue_��
+(CP_QUEUE *
+queue
+, 
+size
+);
+
+42 *
+�_�queue
+(
+CP_QUEUE
+ *
+queue
+, *
+d�a
+);
+
+43 
+�_�av�_queue
+(
+CP_QUEUE
+ *
+queue
+);
+
+44 *
+�_rmqueue
+(
+CP_QUEUE
+ *
+queue
+, *
+d�a
+);
+
+45 *
+�_dequeue
+(
+CP_QUEUE
+ *
+queue
+);
+
+46 
+�_queue_de�roy
+(
+CP_QUEUE
+ *
+queue
+);
+
+47 
+	#�_queue_de�roy_��r
+(
+queue
+�{
+	`�_queue_de�roy
+(queue); queue=
+NULL
+;}
+
+	)
+
+	@cp_ringbuf.c
+
+22 
+	~<�r�g.h
+>
+
+23 
+	~<as��.h
+>
+
+24 
+	~"�_r�gbuf.h
+"
+
+26 
+	$rb_��
+ (
+r�g_buf�r
+ *
+r�g
+, 
+u_ch�
+* 
+buff
+, 
+size
+) {
+
+27 
+	`mem�t
+ (
+r�g
+, 0,  (
+r�g_buf�r
+));
+
+28 
+r�g
+->
+rd_po��r
+ = 0;
+
+29 
+r�g
+->
+wr_po��r
+ = 0;
+
+30 
+r�g
+->
+buf�r
+�
+buff
+;
+
+31 
+r�g
+->
+size
+ = size;
+
+32 
+	}
+}
+
+35 
+	$rb_wr�e
+ (
+r�g_buf�r
+ *
+rb
+, 
+u_ch�
+ * 
+buf
+, 
+�n
+)
+
+37 
+tٮ
+;
+
+38 
+i
+;
+
+41 
+tٮ
+ = 
+	`rb_�_size
+(
+rb
+);
+
+42 if(
+�n
+ > 
+tٮ
+)
+
+43 
+�n
+ = 
+tٮ
+;
+
+45 
+tٮ
+ = 
+�n
+;
+
+47 
+i
+ = 
+rb
+->
+wr_po��r
+;
+
+48 if(
+i
+ + 
+�n
+ > 
+rb
+->
+size
+)
+
+50 
+	`mem�y
+(
+rb
+->
+buf�r
+ + 
+i
+, 
+buf
+,�b->
+size
+ - i);
+
+51 
+buf
+ +�
+rb
+->
+size
+ - 
+i
+;
+
+52 
+�n
+ -�
+rb
+->
+size
+ - 
+i
+;
+
+53 
+i
+ = 0;
+
+55 
+	`mem�y
+(
+rb
+->
+buf�r
+ + 
+i
+, 
+buf
+, 
+�n
+);
+
+56 
+rb
+->
+wr_po��r
+ = 
+i
+ + 
+�n
+;
+
+57  
+tٮ
+;
+
+58 
+	}
+}
+
+60 
+	$rb_�_size
+ (
+r�g_buf�r
+ *
+rb
+){
+
+61  (
+rb
+->
+size
+ - 1 - 
+	`rb_d�a_size
+(rb));
+
+62 
+	}
+}
+
+64 
+	$rb_�ad
+ (
+r�g_buf�r
+ *
+rb
+, 
+u_ch�
+ * 
+buf
+, 
+max
+) {
+
+65 
+tٮ
+;
+
+66 
+i
+;
+
+68 
+tٮ
+ = 
+	`rb_d�a_size
+(
+rb
+);
+
+70 if(
+max
+ > 
+tٮ
+)
+
+71 
+max
+ = 
+tٮ
+;
+
+73 
+tٮ
+ = 
+max
+;
+
+75 
+i
+ = 
+rb
+->
+rd_po��r
+;
+
+76 if(
+i
+ + 
+max
+ > 
+rb
+->
+size
+)
+
+78 
+	`mem�y
+(
+buf
+, 
+rb
+->
+buf�r
+ + 
+i
+,�b->
+size
+ - i);
+
+79 
+buf
+ +�
+rb
+->
+size
+ - 
+i
+;
+
+80 
+max
+ -�
+rb
+->
+size
+ - 
+i
+;
+
+81 
+i
+ = 0;
+
+83 
+	`mem�y
+(
+buf
+, 
+rb
+->
+buf�r
+ + 
+i
+, 
+max
+);
+
+84 
+rb
+->
+rd_po��r
+ = 
+i
+ + 
+max
+;
+
+86  
+tٮ
+;
+
+87 
+	}
+}
+
+89 
+	$rb_d�a_size
+ (
+r�g_buf�r
+ *
+rb
+) {
+
+90  ((
+rb
+->
+wr_po��r
+ -�b->
+rd_po��r
+�& (rb->
+size
+-1));
+
+91 
+	}
+}
+
+93 
+	$rb_��r
+ (
+r�g_buf�r
+ *
+rb
+) {
+
+94 
+	`mem�t
+(
+rb
+->
+buf�r
+,0,rb->
+size
+);
+
+95 
+rb
+->
+rd_po��r
+=0;
+
+96 
+rb
+->
+wr_po��r
+=0;
+
+97 
+	}
+}
+
+99 
+u_ch�
+ 
+	$rb_�ek
+(
+r�g_buf�r
+* 
+rb
+, 
+�dex
+) {
+
+100 
+	`as��
+(
+�dex
+ < 
+	`rb_d�a_size
+(
+rb
+));
+
+102  
+rb
+->
+buf�r
+[(�b->
+rd_po��r
+ + 
+�dex
+�%�b->
+size
+)];
+
+103 
+	}
+}
+
+	@cp_ringbuf.h
+
+21 #i�de�
+__CP_RINGBUF_H_
+
+
+22 
+	#__CP_RINGBUF_H_
+
+
+	)
+
+24 
+	~<sys/ty�s.h
+>
+
+26 
+	sr�g_buf�r
+ {
+
+27 
+u_ch�
+ *
+	mbuf�r
+;
+
+28 
+	mwr_po��r
+;
+
+29 
+	mrd_po��r
+;
+
+30 
+	msize
+;
+
+34 
+rb_��
+ (
+r�g_buf�r
+ *
+r�g
+, 
+u_ch�
+* 
+buff
+, 
+size
+) ;
+
+40 
+rb_wr�e
+ (
+r�g_buf�r
+ *
+rb
+, 
+u_ch�
+ * 
+buf
+, 
+�n
+) ;
+
+43 
+rb_�_size
+ (
+r�g_buf�r
+ *
+rb
+);
+
+46 
+rb_�ad
+ (
+r�g_buf�r
+ *
+rb
+, 
+u_ch�
+ * 
+buf
+, 
+max
+);
+
+49 
+u_ch�
+ 
+rb_�ek
+(
+r�g_buf�r
+* 
+rb
+, 
+�dex
+);
+
+52 
+rb_d�a_size
+ (
+r�g_buf�r
+ *);
+
+55 
+rb_��r
+ (
+r�g_buf�r
+ *
+rb
+) ;
+
+	@cp_sock.c
+
+14 
+	~"�_sock.h
+"
+
+15 
+	~"�_logg�.h
+"
+
+16 
+	~"�_comm�.h
+"
+
+17 
+	~"�_time.h
+"
+
+19 
+CP_SOCK
+ *
+	$�_sock_��
+(
+CP_SOCK
+ *
+sock
+, 
+rsize
+, 
+ssize
+, 
+k�p�tvl
+, 
+k�p�t
+)
+
+21 if(!
+sock
+)
+
+23 if�!(
+sock
+=(
+CP_SOCK
+ *)
+	`t_m�loc
+((*sock))) )
+
+25 
+	`log_�r
+("sock� cڋx�m�lo��ed: %s\n", 
+	`����
+(
+��o
+));
+
+26 
+�ed
+;
+
+30 
+	`mem�t
+(
+sock
+, 0, (*sock));
+
+31 
+sock
+->
+�ag
+ |�
+FLAG_SOCK_MALLOC
+;
+
+36 
+	`mem�t
+(
+sock
+, 0, (*sock));
+
+39 if�!(
+sock
+->
+rbuf
+=
+	`�_�r�g_���_em�y
+(
+CP_DEF_RCVBUF_SIZE
+)) )
+
+41 
+	`log_�r
+("socket context create�ecv buffer failed\n");
+
+42 
+	`�_sock_�rm
+(
+sock
+);
+
+43 
+�ed
+;
+
+46 if�!(
+sock
+->
+sbuf
+=
+	`�_�r�g_���_em�y
+(
+CP_DEF_SNDBUF_SIZE
+)) )
+
+48 
+	`log_�r
+("socket context create send buffer failed\n");
+
+49 
+	`�_sock_�rm
+(
+sock
+);
+
+50 
+�ed
+;
+
+53 
+	`log_dbg
+("sock� cڋx�[%p] in��li� ok\n", 
+sock
+);
+
+54 
+sock
+->
+rsize
+ =�size;
+
+55 
+sock
+->
+ssize
+ = ssize;
+
+56 
+sock
+->
+k�p�tvl
+ = keepintvl;
+
+57 
+sock
+->
+k�p�t
+ = keepcnt;
+
+58 
+sock
+->
+id�_timeout
+ = 
+CP_SOCK_DEF_IDLE_TIMEOUT
+;
+
+59 
+sock
+->
+msg_timeout
+ = 
+CP_SOCK_DEF_MSG_TIMEOUT
+;
+
+60 
+sock
+->
+fd
+ = -1;
+
+61 
+sock
+->
+�dex
+ = -1;
+
+62 
+sock
+->
+a�v_time
+ = 
+	`time_now
+();
+
+64 
+sock
+->
+�ag
+ |�
+FLAG_SOCK_INIT
+;
+
+66  
+sock
+;
+
+68 
+�ed
+:
+
+69 
+	`log_�r
+("socket context initialize failed\n");
+
+70  
+NULL
+;
+
+71 
+	}
+}
+
+73 
+	$�_sock_�rm
+(
+CP_SOCK
+ *
+sock
+)
+
+75 if(!
+sock
+)
+
+78 
+	`log_dbg
+("�rm���sock� [%p:%d]�ow\n", 
+sock
+, sock->
+fd
+);
+
+80 if(
+sock
+->
+�ag
+ & 
+FLAG_SOCK_INIT
+)
+
+81 
+	`�_sock_�o�
+(
+sock
+);
+
+83 if(
+sock
+->
+rbuf
+)
+
+85 
+	`�_�r�g_de�roy
+(
+sock
+->
+rbuf
+);
+
+88 if(
+sock
+->
+�ivt
+ && sock->
+�ivt_�
+)
+
+90 
+sock
+->
+	`�ivt_�
+();
+
+93 if(
+sock
+->
+sbuf
+)
+
+95 
+	`�_�r�g_de�roy
+(
+sock
+->
+sbuf
+);
+
+98 if(
+sock
+->
+�ag
+ & 
+FLAG_SOCK_MALLOC
+)
+
+101 
+	`t_�
+(
+sock
+);
+
+106 
+sock
+->
+fd
+ = -1;
+
+109 
+	}
+}
+
+111 
+	$�_sock_�o�
+(
+CP_SOCK
+ *
+sock
+)
+
+113 
+rv
+ = 0;
+
+114 
+f��
+ = 0;
+
+116 if(!
+sock
+)
+
+119 if(
+sock
+->
+fd
+>0)
+
+121 
+	`log_dbg
+("Clo� sock�[%d] b�d [%s:%d]\n", 
+sock
+->
+fd
+, sock->
+�ddr
+, sock->
+��t
+);
+
+122 if(
+f��
+)
+
+129 
+l�g�
+ 
+so_l�g�
+;
+
+131 
+so_l�g�
+.
+l_�off
+ = 1;
+
+132 
+so_l�g�
+.
+l_l�g�
+ = 0;
+
+134 
+	`�tsock�t
+ (
+sock
+->
+fd
+, 
+SOL_SOCKET
+, 
+SO_LINGER
+, (*�&
+so_l�g�
+,  (
+l�g�
+));
+
+137 if(
+CP_SOCK_MODE_ACCEPT
+ =�
+sock
+->
+mode
+ || 
+CP_SOCK_MODE_CONNECT
+ == sock->mode)
+
+139 
+	`shutdown
+ (
+sock
+->
+fd
+, 
+SHUT_RDWR
+);
+
+142 if�(
+rv
+=
+	`�o�
+(
+sock
+->
+fd
+)) )
+
+148 
+sock
+->
+fd
+ = -1;
+
+149  
+rv
+;
+
+150 
+	}
+}
+
+153 
+	$�_sock_li��
+(
+CP_SOCK
+ *
+sock
+, *
+�ddr
+, 
+��t
+, 
+backlog
+)
+
+155 
+rv
+ = 0;
+
+156 
+fd
+ = -1;
+
+157 
+�rvi�
+[20];
+
+158 
+addr�fo
+ 
+h�ts
+, *
+�
+;
+
+159 
+addr�fo
+ *
+�s
+ = 
+NULL
+;
+
+160 
+�_addr
+ 
+�addr
+;
+
+162 if(!
+sock
+ || !(sock->
+�ag
+&
+FLAG_SOCK_INIT
+�|| 
+��t
+<=0 || 
+backlog
+ <=0)
+
+164 
+	`log_�r
+("Invalide input�rguments\n");
+
+165 
+rv
+ = -1;
+
+166 
+��nup
+;
+
+169 
+	`���y
+(
+sock
+->
+�ddr
+, (!laddr?"0.0.0.0":laddr), (sock->laddr));
+
+170 
+	`log_dbg
+("C���sock��i�� o�[%s:%d]�ow\n", 
+sock
+->
+�ddr
+, 
+��t
+);
+
+172 
+	`�_sock_�o�
+(
+sock
+);
+
+174 
+	`mem�t
+(&
+h�ts
+, 0, (
+addr�fo
+));
+
+175 
+h�ts
+.
+ai_�m�y
+ = 
+AF_INET
+;
+
+176 
+h�ts
+.
+ai_sockty�
+ = 
+SOCK_STREAM
+;
+
+177 
+h�ts
+.
+ai_��oc�
+ = 
+IPPROTO_TCP
+;
+
+178 
+h�ts
+.
+ai_�ags
+ = 
+AI_PASSIVE
+;
+
+181 if(
+�ddr
+ && 
+	`��_��
+�addr, &
+�addr
+))
+
+183 
+	`log_�fo
+("%�i��v�id IP�dd�ss, d�'�u��am��s�uti�.\n", 
+�ddr
+);
+
+184 
+h�ts
+.
+ai_�ags
+ |�
+AI_NUMERICHOST
+;
+
+188 
+	`���tf
+(
+�rvi�
+, (�rvi�), "%d", 
+��t
+);
+
+189 if�(
+rv
+=
+	`g�addr�fo
+(
+�ddr
+, 
+�rvi�
+, &
+h�ts
+, &
+�s
+)) )
+
+191 
+	`log_�r
+("g�addr�fo(�r��[%s:%s] fa�ed: %s\n", 
+�ddr
+, 
+�rvi�
+, 
+	`gai_����
+(
+rv
+));
+
+192 
+rv
+ = -2;
+
+193 
+��nup
+;
+
+199 
+sock
+->
+fd
+ = -1;
+
+200 
+�
+=
+�s
+;�p!=
+NULL
+;�p�p->
+ai_�xt
+)
+
+203 if�(
+fd
+=
+	`sock�
+(
+�
+->
+ai_�m�y
+,�p->
+ai_sockty�
+,�p->
+ai_��oc�
+)) < 0)
+
+205 
+	`log_�r
+("sock�(���� fa�ed: %s\n", 
+	`����
+(
+��o
+));
+
+206 
+rv
+ = -3;
+
+210 
+	`�_sock_�t_�u�addr
+(
+fd
+);
+
+211 
+	`�_sock_�t_k��live
+(
+fd
+, 
+sock
+->
+k�p�tvl
+, sock->
+k�p�t
+);
+
+212 
+	`�_sock_�t_n�block
+(
+fd
+);
+
+214 if�0==
+	`b�d
+(
+fd
+, 
+�
+->
+ai_addr
+,�p->
+ai_add��
+) )
+
+216 
+sockaddr_�
+ *
+�ddr
+ = (sockaddr_� *)
+�
+->
+ai_addr
+;
+
+217 
+sock
+->
+fd
+ = fd;
+
+218 
+sock
+->
+��t
+ =�port;
+
+220 
+	`���y
+ (
+sock
+->
+�ddr
+, 
+	`��_��
+ (
+�ddr
+->
+s�_addr
+), (sock->laddr)-1);
+
+221 
+	`log_dbg
+("B�d sock�[%d] ok\n", 
+fd
+);
+
+222 
+rv
+ = 0;
+
+227 
+rv
+ = -4;
+
+228 
+	`log_�r
+("B�d sock�[%d] fa�ed: %s\n", 
+fd
+, 
+	`����
+(
+��o
+));
+
+231 
+	`�o�
+(
+fd
+);
+
+235 if(
+sock
+->
+fd
+ < 0)
+
+237 
+	`�o�
+(
+fd
+);
+
+238 
+��nup
+;
+
+241 if(
+	`li��
+(
+sock
+->
+fd
+, 
+backlog
+))
+
+243 
+	`log_�r
+("Li�� o�sock�[%d] fa�ed: %s\n", 
+sock
+->
+fd
+, 
+	`����
+(
+��o
+));
+
+244 
+rv
+ = -6;
+
+245 
+��nup
+;
+
+248 
+sock
+->
+mode
+ = 
+CP_SOCK_MODE_LISTEN
+;
+
+249 
+sock
+->
+��t
+ = 0;
+
+250 
+	`mem�t
+(&
+sock
+->
+�ddr
+, 0, (sock->raddr));
+
+252 
+��nup
+:
+
+253 if�
+rv
+ )
+
+255 
+	`log_�r
+("C���sock��i�� o�[%s:%d] fa�ed\n", 
+sock
+->
+�ddr
+, 
+��t
+);
+
+256 if(
+sock
+->
+fd
+ > 0)
+
+257 
+	`�o�
+(
+sock
+->
+fd
+);
+
+261 
+sock
+->
+a�v_time
+ = 
+	`time_now
+();
+
+262 
+sock
+->
+��us
+ = 
+SOCK_STAT_LISTENED
+;
+
+263 
+	`log_�ml
+("C���sock�[%p:%d]�i�� [%s:%d] ok\n", 
+sock
+, sock->
+fd
+, sock->
+�ddr
+, 
+��t
+);
+
+266 if(
+�s
+)
+
+267 
+	`�addr�fo
+(
+�s
+);
+
+268  
+rv
+;
+
+269 
+	}
+}
+
+272 
+	$�_sock_ac��
+(
+CP_SOCK
+ *
+�rv_sock
+, CP_SOCK *
+�w_sock
+)
+
+274 
+sockaddr_�
+ 
+�ddr
+;
+
+275 
+sock�n_t
+ 
+�n
+ = (
+�ddr
+);
+
+276 
+fd
+ = -1;
+
+277 
+rv
+ = 0;
+
+279 if(!
+�rv_sock
+ || !
+�w_sock
+ || s�v_sock->
+fd
+<0 )
+
+281 
+	`log_�r
+("Invalide input�rguments\n");
+
+282 
+rv
+ = -1;
+
+283 
+��nup
+;
+
+286 
+	`log_dbg
+("ac���ew cl�� from s�v� [fd=%d %s:%d]�ow\n", 
+�rv_sock
+->
+fd
+, s�v_sock->
+�ddr
+, s�v_sock->
+��t
+);
+
+288 if�(
+fd
+=
+	`ac��
+(
+�rv_sock
+->fd, (
+sockaddr
+ *)&
+�ddr
+, &
+�n
+)) < 0 )
+
+290 
+	`log_�r
+("Accept�ew client from server [fd=%d %s:%d] failed: %s\n",
+
+291 
+�rv_sock
+->
+fd
+, s�v_sock->
+�ddr
+, s�v_sock->
+��t
+, 
+	`����
+(
+��o
+));
+
+292 
+rv
+ = -2;
+
+293 
+��nup
+;
+
+297 
+	`�_sock_�t_buf�r
+(
+fd
+, 
+�w_sock
+->
+rsize
+,�ew_sock->
+ssize
+);
+
+299 
+	`�_sock_�t_k��live
+(
+fd
+, 
+�w_sock
+->
+k�p�tvl
+,�ew_sock->
+k�p�t
+);
+
+300 
+	`�_sock_�t_n�block
+(
+fd
+);
+
+302 
+�w_sock
+->
+fd
+ = fd;
+
+303 
+�w_sock
+->
+mode
+ = 
+CP_SOCK_MODE_ACCEPT
+;
+
+305 
+	`���y
+ (
+�w_sock
+->
+�ddr
+, 
+	`��_��
+(
+�ddr
+.
+s�_addr
+), (new_sock->raddr)-1);
+
+306 
+�w_sock
+->
+��t
+ = 
+	`�ohs
+(
+�ddr
+.
+s�_p�t
+);
+
+309 
+�n
+ = (
+�ddr
+);
+
+310 i�(
+	`g�sock�me
+ (
+�w_sock
+->
+fd
+, (
+sockaddr
+ *�&
+�ddr
+, (
+sock�n_t
+ *�&
+�n
+))
+
+312 
+	`���y
+(
+�w_sock
+->
+�ddr
+, 
+�rv_sock
+->laddr, (new_sock->laddr)-1);
+
+313 
+�w_sock
+->
+��t
+ = 
+�rv_sock
+->lport;
+
+317 
+	`���y
+ (
+�w_sock
+->
+�ddr
+, 
+	`��_��
+ (
+�ddr
+.
+s�_addr
+),  (new_sock->laddr) - 1);
+
+318 
+�w_sock
+->
+��t
+ = 
+	`�ohs
+ (
+�ddr
+.
+s�_p�t
+);
+
+321 
+��nup
+:
+
+322 if(!
+rv
+)
+
+324 
+�w_sock
+->
+��us
+ = 
+SOCK_STAT_ACCEPTED
+;
+
+325 
+�w_sock
+->
+a�v_time
+ = 
+	`time_now
+();
+
+326 
+	`log_�ml
+("Accept�ew client socket [%d %s:%d] <== [%s:%d]\n",
+
+327 
+�w_sock
+->
+fd
+,�ew_sock->
+�ddr
+,�ew_sock->
+��t
+,�ew_sock->
+�ddr
+,�ew_sock->
+��t
+);
+
+331 
+	`log_�r
+("Accept�ew client from server [%d] on [%s:%d] failed\n",
+
+332 
+�rv_sock
+->
+fd
+, s�v_sock->
+�ddr
+, s�v_sock->
+��t
+);
+
+333 
+	`�o�
+(
+fd
+);
+
+336  
+rv
+;
+
+337 
+	}
+}
+
+349 
+	$�_sock_c���
+(
+CP_SOCK
+ *
+sock
+, *
+�ddr
+, 
+��t
+, 
+��t
+)
+
+351 
+rv
+ = 0;
+
+352 
+fd
+ = -1;
+
+353 
+�rvi�
+[20];
+
+354 
+addr�fo
+ 
+h�ts
+, *
+�
+;
+
+355 
+addr�fo
+ *
+�s
+ = 
+NULL
+;
+
+356 
+�_addr
+ 
+�addr
+;
+
+357 
+sockaddr_�
+ 
+�ddr
+;
+
+358 
+�n
+ = (
+�ddr
+);
+
+360 if(!
+sock
+ || !(sock->
+�ag
+&
+FLAG_SOCK_INIT
+�|| !
+�ddr
+ || 
+��t
+<=0)
+
+362 
+	`log_�r
+("Invalide input�rguments\n");
+
+363 
+rv
+ = -1;
+
+364 
+�ed
+;
+
+367 if(
+SOCK_STAT_CONNECTED
+ =�
+sock
+->
+��us
+)
+
+371 if(
+SOCK_STAT_CONNECTING
+ =�
+sock
+->
+��us
+)
+
+373 
+c����g
+;
+
+376 
+	`log_dbg
+("��� sock� c����ػmِ�rv� [%s:%d]�ow\n", 
+�ddr
+, 
+��t
+);
+
+378 
+	`mem�t
+(&
+h�ts
+, 0, (
+addr�fo
+));
+
+379 
+h�ts
+.
+ai_�m�y
+ = 
+AF_INET
+;
+
+380 
+h�ts
+.
+ai_sockty�
+ = 
+SOCK_STREAM
+;
+
+381 
+h�ts
+.
+ai_��oc�
+ = 
+IPPROTO_TCP
+;
+
+382 
+h�ts
+.
+ai_�ags
+ = 
+AI_PASSIVE
+;
+
+385 if(
+�ddr
+ && 
+	`��_��
+�addr, &
+�addr
+))
+
+387 
+	`log_�fo
+("%�i��v�id IP�dd�ss, d�'�u��am��s�uti�.\n", 
+�ddr
+);
+
+388 
+h�ts
+.
+ai_�ags
+ |�
+AI_NUMERICHOST
+;
+
+392 
+	`���tf
+(
+�rvi�
+, (�rvi�), "%d", 
+��t
+);
+
+393 if�(
+rv
+=
+	`g�addr�fo
+(
+�ddr
+, 
+�rvi�
+, &
+h�ts
+, &
+�s
+)) )
+
+395 
+	`log_�r
+("g�addr�fo(�r��[%s:%s] fa�ed: %s\n", 
+�ddr
+, 
+�rvi�
+, 
+	`gai_����
+(
+rv
+));
+
+396 
+rv
+ = -2;
+
+397 
+�ed
+;
+
+400 
+	`�_sock_�o�
+(
+sock
+);
+
+401 
+sock
+->
+fd
+ = -1;
+
+405 
+�
+=
+�s
+;�p!=
+NULL
+;�p�p->
+ai_�xt
+)
+
+407 
+fd
+ = 
+	`sock�
+(
+�
+->
+ai_�m�y
+,�p->
+ai_sockty�
+,�p->
+ai_��oc�
+);
+
+410 if�
+fd
+ < 0)
+
+412 
+	`log_�r
+("sock�(���� fa�ed: %s\n", 
+	`����
+(
+��o
+));
+
+413 
+rv
+ = -3;
+
+416 
+	`log_�a�
+("��� sock�[%p:%d] w�h c��� mod�ok\n", 
+sock
+, 
+fd
+);
+
+419 if(
+��t
+ > 0)
+
+421 
+	`mem�t
+(&
+�ddr
+, 0, 
+�n
+);
+
+422 
+�ddr
+.
+s�_�m�y
+ = 
+AF_INET
+;
+
+423 
+�ddr
+.
+s�_p�t
+ = 
+	`ht�s
+ ((
+u_sh�t
+�
+��t
+);
+
+425 i��
+	`b�d
+(
+fd
+, (
+sockaddr
+ *)&
+�ddr
+, 
+�n
+) )
+
+427 
+rv
+ = -4;
+
+428 
+	`�o�
+(
+fd
+);
+
+429 
+	`log_�r
+("B�d��t[%d]��c��� sock� [%d] fa�ed: %s\n", 
+��t
+, 
+fd
+, 
+	`����
+(
+��o
+));
+
+434 
+sock
+->
+��t
+ =�port;
+
+435 
+rv
+ = 0;
+
+436 
+	`log_dbg
+("B�d��t[%d]��c��� sock� [%d] OK\n", 
+��t
+, 
+fd
+);
+
+441 
+	`�_sock_�t_buf�r
+(
+fd
+, 
+sock
+->
+rsize
+, sock->
+ssize
+);
+
+442 
+	`�_sock_�t_k��live
+(
+fd
+, 
+sock
+->
+k�p�tvl
+, sock->
+k�p�t
+);
+
+443 
+	`�_sock_�t_n�block
+(
+fd
+);
+
+446 if(0==
+	`c���
+(
+fd
+, 
+�
+->
+ai_addr
+,�p->
+ai_add��
+))
+
+449 
+sock
+->
+fd
+ = fd;
+
+450 
+sock
+->
+��us
+ = 
+SOCK_STAT_CONNECTING
+;
+
+452 
+	`mem�y
+(&
+sock
+->
+�ddr
+, &
+�
+->
+ai_addr
+, (sock->saddr));
+
+454 
+rv
+ = 0;
+
+455 
+c���ed
+;
+
+459 if(
+EINPROGRESS
+ =�
+��o
+)
+
+462 
+sock
+->
+fd
+ = fd;
+
+463 
+sock
+->
+��us
+ = 
+SOCK_STAT_CONNECTING
+;
+
+464 
+	`mem�y
+(&
+sock
+->
+�ddr
+, &
+�
+->
+ai_addr
+, (sock->saddr));
+
+466 
+rv
+ = 0;
+
+467 
+c����g
+;
+
+472 
+	`�o�
+(
+fd
+);
+
+473 
+rv
+ = -5;
+
+474 
+	`log_�r
+("c���(�tأrv� fa�ed: %s\n", 
+	`����
+(
+��o
+));
+
+475 
+�ed
+;
+
+479 
+	`�o�
+(
+fd
+);
+
+483 if(
+sock
+->
+fd
+ < 0)
+
+485 
+	`�o�
+(
+fd
+);
+
+486 
+�ed
+;
+
+490 
+c����g
+:
+
+491 if(
+SOCK_STAT_CONNECTING
+ =�
+sock
+->
+��us
+)
+
+494 
+�n
+ = (
+sock
+->
+�ddr
+);
+
+496 
+��o
+ = 0;
+
+497 if�!
+	`c���
+(
+sock
+->
+fd
+, &sock->
+�ddr
+, 
+�n
+) )
+
+500 
+sock
+->
+��us
+ = 
+SOCK_STAT_CONNECTED
+;
+
+501 
+rv
+ = 0;
+
+502 
+c���ed
+;
+
+506 
+��o
+)
+
+508 
+EISCONN
+:
+
+509 
+sock
+->
+��us
+ = 
+SOCK_STAT_CONNECTED
+;
+
+510 
+rv
+ = 0;
+
+511 
+c���ed
+;
+
+513 
+EALREADY
+:
+
+514 
+EINPROGRESS
+:
+
+515 
+	`log_dbg
+("sock�[%d] c����ػmِ[%s:%d] i��og�ss\n", 
+sock
+->
+fd
+, 
+�ddr
+, 
+��t
+);
+
+516 
+rv
+ = 0;
+
+517 
+��nup
+;
+
+520 
+	`log_�r
+("sock�[%d] c����ػmِ[%s:%d] fa�ed: %s\n", 
+sock
+->
+fd
+, 
+�ddr
+, 
+��t
+, 
+	`����
+(
+��o
+));
+
+521 
+sock
+->
+��us
+ = 
+SOCK_STAT_DISCONNECT
+;
+
+522 
+rv
+ = -7;
+
+527 
+c���ed
+:
+
+528 if(
+SOCK_STAT_CONNECTED
+ =�
+sock
+->
+��us
+)
+
+530 
+rv
+ = 0;
+
+532 
+	`log_�ml
+("sock�[%d] c���ed�ػmِ�rv� [%s:%d]\n", 
+sock
+->
+fd
+, 
+�ddr
+, 
+��t
+);
+
+534 
+sock
+->
+��t
+=rport;
+
+535 
+	`���y
+ (
+sock
+->
+�ddr
+,�addr, (sock->raddr)-1);
+
+536 
+sock
+->
+a�v_time
+ = 
+	`time_now
+();
+
+539 
+	`mem�t
+(&
+�ddr
+, 0, 
+�n
+);
+
+540 
+�n
+ = (
+�ddr
+);
+
+542 i�(!
+	`g�sock�me
+ (
+sock
+->
+fd
+, (
+sockaddr
+ *�&
+�ddr
+, (
+sock�n_t
+ *�&
+�n
+))
+
+544 
+	`���y
+ (
+sock
+->
+�ddr
+, 
+	`��_��
+ (
+�ddr
+.
+s�_addr
+),  (sock->laddr) - 1);
+
+545 
+sock
+->
+��t
+ = 
+	`�ohs
+ (
+�ddr
+.
+s�_p�t
+);
+
+549 
+	`mem�t
+(&
+sock
+->
+�ddr
+, 0, (sock->laddr));
+
+550 
+sock
+->
+��t
+ =�port;
+
+552 
+��nup
+;
+
+556 
+�ed
+:
+
+557 
+	`log_�r
+("C���sock� c�����[%s:%d] fa�ed\n", 
+�ddr
+, 
+��t
+);
+
+558 if(
+sock
+ && sock->
+fd
+ >= 0)
+
+559 
+	`�o�
+(
+sock
+->
+fd
+);
+
+561 
+��nup
+:
+
+562 if(
+�s
+)
+
+563 
+	`�addr�fo
+(
+�s
+);
+
+565  
+rv
+;
+
+566 
+	}
+}
+
+569 
+	$�_sock_�cv
+(
+CP_SOCK
+ *
+sock
+)
+
+571 
+rv
+, 
+��
+;
+
+572 
+�ag
+;
+
+573 
+�_�r�g
+ *
+rbuf
+;
+
+575 if(!
+sock
+ || !sock->
+rbuf
+ || !sock->rbuf->
+d�a
+ || sock->
+fd
+<0)
+
+577 
+	`log_�r
+("Invalide input�rguments\n");
+
+581 
+rbuf
+ = 
+sock
+->rbuf;
+
+582 
+��
+ = 
+rbuf
+->
+size
+-rbuf->
+�n
+;
+
+583 
+�ag
+ = 
+��
+ ? 0 : 
+MSG_PEEK
+;
+
+585 if(
+��
+ <= 0)
+
+588 
+rv
+=
+	`�cv
+(
+sock
+->
+fd
+, &
+rbuf
+->
+d�a
+[rbuf->
+�n
+], 
+��
+, 
+�ag
+);
+
+589 if�
+rv
+ > 0)
+
+591 
+rbuf
+->
+�n
+ +�
+rv
+;
+
+593 if(
+rv
+<0)
+
+595 if(
+EAGAIN
+==
+��o
+ || 
+EINPROGRESS
+==errno)
+
+597 
+	`log_w�n
+("sock� [%d]��a��ecv d��aga�: %s\n", 
+sock
+->
+fd
+, 
+	`����
+(
+��o
+));
+
+598 
+rv
+ = 0;
+
+602 
+	`log_�r
+("sock� [%d]�ecv d���ed: %s\n", 
+sock
+->
+fd
+, 
+	`����
+(
+��o
+));
+
+603 
+rv
+ = -2;
+
+607 if(
+rv
+ > 0)
+
+609 
+sock
+->
+a�v_time
+ = sock->
+msg_time
+ = 
+	`time_now
+();
+
+611  
+rv
+;
+
+612 
+	}
+}
+
+614 
+	$�_sock_�nd
+(
+CP_SOCK
+ *
+sock
+)
+
+616 
+rv
+;
+
+617 
+p�lfd
+ 
+sock_p�l
+;
+
+619 if(!
+sock
+ || sock->
+fd
+<0 || !sock->
+sbuf
+->
+d�a
+ || sock->sbuf->
+�n
+<=0)
+
+621 
+	`log_�r
+("Invalide input�rguments\n");
+
+625 
+sock_p�l
+.
+ev�ts
+ = 
+POLLOUT
+;
+
+626 
+sock_p�l
+.
+fd
+ = 
+sock
+->fd;
+
+628 if�(
+rv
+=
+	`p�l
+(&
+sock_p�l
+, 1, 0)) > 0 )
+
+630 if�!(
+POLLOUT
+ &
+sock_p�l
+.
+ev�ts
+) )
+
+635 i��(
+rv
+=
+	`�nd
+(
+sock
+->
+fd
+, sock->
+sbuf
+->
+d�a
+, sock->sbuf->
+�n
+, 
+MSG_NOSIGNAL
+)) < 0)
+
+637 i�(
+EAGAIN
+ =�
+��o
+)
+
+639 
+	`log_w�n
+("sock� [%d]��a� s�d d��aga�: %s\n", 
+sock
+->
+fd
+, 
+	`����
+(
+��o
+));
+
+644 
+	`log_�r
+("sock� [%d] s�d d���ed: %s\n", 
+sock
+->
+fd
+, 
+	`����
+(
+��o
+));
+
+650 
+sock
+->
+sbuf
+->
+�n
+ -�
+rv
+;
+
+651 
+sock
+->
+a�v_time
+ = 
+	`time_now
+();
+
+652 
+	`memmove
+ (
+sock
+->
+sbuf
+->
+d�a
+, sock->sbuf->d�a+
+rv
+, sock->sbuf->
+�n
+);
+
+653  
+rv
+;
+
+658 
+	`log_�r
+("�nd d���om sock� [%d]����ed: %s\n", 
+sock
+->
+fd
+, 
+	`����
+(
+��o
+));
+
+663 
+	}
+}
+
+665 
+	$�_sock_�t_n�block
+(
+sockfd
+)
+
+667 
+�ts
+;
+
+695 
+�ts
+ = 
+	`f��
+(
+sockfd
+, 
+F_GETFL
+);
+
+696 i�(
+�ts
+ < 0)
+
+698 
+	`log_w�n
+("f��(�g� sock� o�iڠ�u�: %s\n", 
+	`����
+(
+��o
+));
+
+702 
+�ts
+ |�
+O_NONBLOCK
+;
+
+704 i�(
+	`f��
+(
+sockfd
+, 
+F_SETFL
+, 
+�ts
+) < 0)
+
+706 
+	`log_w�n
+("f��(裈sock� o�iڠ�u�: %s\n", 
+	`����
+(
+��o
+));
+
+710 
+	`log_dbg
+("S� sock�[%d]�ڐblock�g\n", 
+sockfd
+);
+
+711  
+�ts
+;
+
+712 
+	}
+}
+
+714 
+	$�_sock_�t_buf�r
+(
+sockfd
+, 
+rsize
+, 
+ssize
+)
+
+716 
+�t
+;
+
+717 
+sock�n_t
+ 
+ݎ�
+ = (
+�t
+);
+
+719 if(
+sockfd
+ < 0)
+
+723 i�(
+	`g�sock�t
+ (
+sockfd
+, 
+SOL_SOCKET
+, 
+SO_RCVBUF
+, (*�&
+�t
+, &
+ݎ�
+))
+
+725 
+	`log_w�n
+("g�sock�t(�g��e�iv�buf��u�: %s\n", 
+	`����
+(
+��o
+));
+
+730 if(
+rsize
+ > 
+�t
+)
+
+732 
+�t
+ = (�
+rsize
+;
+
+733 i�(
+	`�tsock�t
+ (
+sockfd
+, 
+SOL_SOCKET
+, 
+SO_RCVBUF
+, (*�&
+�t
+, 
+ݎ�
+))
+
+735 
+	`log_w�n
+("�tsock�t(裈��iv�buf�t�%d fa�u�: %s\n", 
+�t
+, 
+	`����
+(
+��o
+));
+
+741 i�(
+	`g�sock�t
+ (
+sockfd
+, 
+SOL_SOCKET
+, 
+SO_SNDBUF
+, (*�&
+�t
+, &
+ݎ�
+))
+
+743 
+	`log_w�n
+("g�sock�t(�g� s�d buf��u�: %s\n", 
+	`����
+(
+��o
+));
+
+748 if(
+ssize
+ > 
+�t
+)
+
+750 
+�t
+ = (�
+ssize
+;
+
+751 i�(
+	`�tsock�t
+ (
+sockfd
+, 
+SOL_SOCKET
+, 
+SO_SNDBUF
+, (*�&
+�t
+, 
+ݎ�
+))
+
+753 
+	`log_w�n
+("�tsock�t(裈�nd buf�t�%d fa�u�: %s\n", 
+�t
+, 
+	`����
+(
+��o
+));
+
+758 
+	`log_�fo
+("S� sock�[%d] RCVBUF size:%d SNDBUF size:%d\n", 
+sockfd
+, 
+rsize
+, 
+ssize
+);
+
+760 
+	}
+}
+
+762 
+	$�_sock_�t_�u�addr
+(
+sockfd
+)
+
+764 
+�t
+ = 1;
+
+765 
+�n
+ =  ();
+
+767 i�(
+	`�tsock�t
+ (
+sockfd
+, 
+SOL_SOCKET
+, 
+SO_REUSEADDR
+, (*�&
+�t
+, 
+�n
+))
+
+769 
+	`log_�r
+("S� sock�[%d] o�i� SO_REUSEADDR fa�ed:%s\n", 
+sockfd
+, 
+	`����
+(
+��o
+));
+
+772 
+	`log_dbg
+("S� sock�[%d] o�i� SO_REUSEADDR ok\n", 
+sockfd
+);
+
+775 
+	}
+}
+
+786 
+	$�_sock_�t_k��live
+(
+sockfd
+, 
+k�p�tvl
+, 
+k�p�t
+)
+
+788 
+�t
+;
+
+790 if(
+sockfd
+ < 0)
+
+794 
+�t
+ = 1;
+
+795 i�(
+	`�tsock�t
+ (
+sockfd
+, 
+SOL_SOCKET
+, 
+SO_KEEPALIVE
+, (*�&
+�t
+,  (opt)))
+
+797 
+	`log_w�n
+("�tsock�t(�ab� SO_KEEPALIVE fa�u�: %s\n", 
+	`����
+(
+��o
+));
+
+801 if(
+k�p�tvl
+ || 
+k�p�t
+)
+
+810 
+�t
+ = 3;
+
+811 i�(
+	`�tsock�t
+ (
+sockfd
+, 
+SOL_TCP
+, 
+TCP_KEEPIDLE
+, (*�&
+�t
+,  (opt)))
+
+813 
+	`log_�r
+("�tsock�t(裈TCP_KEEPIDLE��%d sec�d��u�: %s\n", 
+�t
+, 
+	`����
+(
+��o
+));
+
+817 if((
+�t
+=
+k�p�tvl
+) > 0)
+
+825 i�(
+	`�tsock�t
+ (
+sockfd
+, 
+SOL_TCP
+, 
+TCP_KEEPINTVL
+, (*�&
+�t
+,  (opt)))
+
+827 
+	`log_�r
+("�tsock�t(裈TCP_KEEPINTVL��%d fa�u�: %s\n", 
+�t
+, 
+	`����
+(
+��o
+));
+
+832 if((
+�t
+=
+k�p�t
+) > 0)
+
+842 i�(
+	`�tsock�t
+ (
+sockfd
+, 
+SOL_TCP
+, 
+TCP_KEEPCNT
+, (*�&
+�t
+,  (opt)))
+
+844 
+	`log_�r
+("�tsock�t(裈TCP_KEEPCNT��%d fa�u�: %s\n", 
+�t
+, 
+	`����
+(
+��o
+));
+
+850 
+	`log_dbg
+("S� sock�[%d] KEEPINTVL:%d KEEPCNT:%d\n", 
+sockfd
+, 
+k�p�tvl
+, 
+k�p�t
+);
+
+852 
+	}
+}
+
+	@cp_sock.h
+
+13 #i�de�
+__CP_SOCK_H
+
+
+14 
+	#__CP_SOCK_H
+
+
+	)
+
+16 
+	~<�dio.h
+>
+
+17 
+	~<�dlib.h
+>
+
+18 
+	~<�tdb.h
+>
+
+19 
+	~<f��.h
+>
+
+20 
+	~<uni�d.h
+>
+
+21 
+	~<sys/un.h
+>
+
+22 
+	~<p�l.h
+>
+
+23 
+	~<��o.h
+>
+
+25 
+	~<sys/ty�s.h
+>
+
+26 
+	~<sys/sock�.h
+>
+
+27 
+	~<l�ux/sockios.h
+>
+
+28 
+	~<sys/io�l.h
+>
+
+29 
+	~<sys/sock�.h
+>
+
+30 
+	~<�t��/�.h
+>
+
+31 
+	~<�t��/t�.h
+>
+
+32 
+	~<��/��.h
+>
+
+34 
+	~"�_kli�.h
+"
+
+35 
+	~"�_�r�g.h
+"
+
+36 
+	~"�_fds.h
+"
+
+39 
+	#CP_DEF_RCVBUF_SIZE
+ 2048
+
+	)
+
+40 
+	#CP_DEF_SNDBUF_SIZE
+ 2048
+
+	)
+
+42 
+	#CP_SOCK_RCVBUF
+ 2048
+
+	)
+
+43 
+	#CP_SOCK_SNDBUF
+ 2048
+
+	)
+
+45 
+	#CP_SOCK_DEF_IDLE_TIMEOUT
+ 120*1000
+
+	)
+
+46 
+	#CP_SOCK_DEF_MSG_TIMEOUT
+ 120*1000
+
+	)
+
+48 
+	#CP_SOCK_KEEPINTVL
+ 600
+
+	)
+
+49 
+	#CP_SOCK_KEEPCNT
+ 3
+
+	)
+
+51 
+	#CP_SOCK_MODE_NONE
+ 0
+
+	)
+
+52 
+	#CP_SOCK_MODE_ACCEPT
+ 1
+
+	)
+
+53 
+	#CP_SOCK_MODE_CONNECT
+ 2
+
+	)
+
+54 
+	#CP_SOCK_MODE_LISTEN
+ 3
+
+	)
+
+58 
+	mCP_SOCK_EVENT_READ
+ = 
+EPOLLIN
+,
+
+59 
+	mCP_SOCK_EVENT_WRITE
+ = 
+EPOLLOUT
+,
+
+60 
+	mCP_SOCK_EVENT_ERROR
+ = 
+EPOLLERR
+,
+
+61 
+	mCP_SOCK_EVENT_HUP
+ = 
+EPOLLHUP
+,
+
+62 
+	mCP_SOCK_EVENT_IDLE_TIMEOUT
+ = (1<<16),
+
+63 
+	mCP_SOCK_EVENT_MSG_TIMEOUT
+ = (1<<17),
+
+66 
+	g_CP_SOCK
+;
+
+67 
+	g_CP_FDS
+;
+
+69 (*
+	tPRIVT_FREE
+)();
+
+70 (*
+	tCP_SOCK_EVENT_CALLBACK
+)(
+	t_CP_SOCK
+ *
+	tsock
+);
+
+71 
+	s_CP_SOCK_CALLBACK
+
+
+73 
+CP_SOCK_EVENT_CALLBACK
+ 
+�r�
+;
+
+74 
+CP_SOCK_EVENT_CALLBACK
+ 
+�ad
+;
+
+75 
+CP_SOCK_EVENT_CALLBACK
+ 
+wr�e
+;
+
+76 } 
+	tCP_SOCK_CALLBACK
+;
+
+79 
+	#FLAG_SOCK_INIT
+ (1<<0)
+
+	)
+
+80 
+	#FLAG_SOCK_MALLOC
+ (1<<1)
+
+	)
+
+81 
+	#FLAG_SOCK_EPOLLED
+ (1<<2)
+
+	)
+
+82 
+	#FLAG_SOCK_REGISTRY
+ (1<<3)
+
+	)
+
+83 
+	#FLAG_SOCK_INQUEUE
+ (1<<4)
+
+	)
+
+84 
+	#FLAG_SOCK_TASKED
+ (1<<5)
+
+	)
+
+86 
+	#SOCK_STAT_INIT
+ 0
+
+	)
+
+87 
+	#SOCK_STAT_CONNECTING
+ 1
+
+	)
+
+88 
+	#SOCK_STAT_CONNECTED
+ 2
+
+	)
+
+89 
+	#SOCK_STAT_LISTENED
+ 2
+
+	)
+
+90 
+	#SOCK_STAT_ACCEPTED
+ 2
+
+	)
+
+91 
+	#SOCK_STAT_ALREADY
+ 2
+
+	)
+
+92 
+	#SOCK_STAT_DISCONNECT
+ 3
+
+	)
+
+94 
+	s_CP_SOCK
+
+
+96 
+fd
+;
+
+97 
+mode
+;
+
+98 
+�ag
+;
+
+99 
+��us
+;
+
+101 
+a�v_time
+;
+
+102 
+msg_time
+;
+
+103 
+id�_timeout
+;
+
+104 
+msg_timeout
+;
+
+106 
+k�p�tvl
+;
+
+107 
+k�p�t
+;
+
+108 
+rsize
+;
+
+109 
+ssize
+;
+
+111 
+��l_ev�t
+ 
+ev�t
+;
+
+113 
+�_�r�g
+ *
+sbuf
+;
+
+114 
+�_�r�g
+ *
+rbuf
+;
+
+116 
+sockaddr
+ 
+�ddr
+;
+
+117 
+�ddr
+[16];
+
+118 
+��t
+;
+
+119 
+�ddr
+[16];
+
+120 
+��t
+;
+
+122 
+_CP_FDS
+ *
+fds
+;
+
+123 
+CP_SOCK_EVENT_CALLBACK
+ 
+cbfunc
+;
+
+124 
+CP_SOCK_EVENT_CALLBACK
+ 
+���_func
+;
+
+125 
+_CP_SOCK
+ *
+�rv_sock
+;
+
+127 
+max_���
+;
+
+128 
+ac��_�t
+;
+
+129 
+li�_h�d
+ 
+ac��_li�
+;
+
+131 *
+�ivt
+;
+
+132 
+PRIVT_FREE
+ 
+�ivt_�
+;
+
+134 
+�dex
+;
+
+135 
+li�_h�d
+ 
+�i�
+;
+
+148 } 
+	tCP_SOCK
+;
+
+151 
+�l�e
+ 
+	$�_sock_�t_id�_timeout
+(
+CP_SOCK
+ *
+sock
+, 
+timeout
+)
+
+153 
+sock
+->
+id�_timeout
+ = 
+timeout
+;
+
+154 
+	}
+}
+
+156 
+�l�e
+ 
+	$�_sock_�t_msg_timeout
+(
+CP_SOCK
+ *
+sock
+, 
+timeout
+)
+
+158 
+sock
+->
+msg_timeout
+ = 
+timeout
+;
+
+159 
+	}
+}
+
+161 
+�l�e
+ 
+	$�_sock_�t_�iv�e_d�a
+(
+CP_SOCK
+ *
+sock
+, *
+d�a
+, 
+PRIVT_FREE
+ 
+�
+)
+
+163 
+sock
+->
+�ivt
+ = 
+d�a
+;
+
+164 
+sock
+->
+�ivt_�
+ = 
+�
+;
+
+165 
+	}
+}
+
+167 
+CP_SOCK
+ *
+�_sock_��
+(CP_SOCK *
+sock
+, 
+rsize
+, 
+ssize
+, 
+k�p�tvl
+, 
+k�p�t
+);
+
+168 

+�_sock_�o�
+(
+CP_SOCK
+ *
+sock
+);
+
+169 

+�_sock_�rm
+(
+CP_SOCK
+ *
+sock
+);
+
+170 
+	#�_sock_�rm_��r
+(
+sock
+�{
+	`�_sock_�rm
+(sock); sock=
+NULL
+;}
+
+	)
+
+172 

+�_sock_li��
+(
+CP_SOCK
+ *
+sock
+, *
+�ddr
+, 
+��t
+, 
+backlog
+);
+
+173 

+�_sock_c���
+(
+CP_SOCK
+ *
+sock
+, *
+�ddr
+, 
+��t
+, 
+��t
+);
+
+174 

+�_sock_ac��
+(
+CP_SOCK
+ *
+�rv_sock
+, CP_SOCK *
+�w_sock
+);
+
+176 

+�_sock_�cv
+(
+CP_SOCK
+ *
+sock
+);
+
+177 

+�_sock_�nd
+(
+CP_SOCK
+ *
+sock
+);
+
+179 

+�_sock_�t_�u�addr
+(
+sockfd
+);
+
+180 

+�_sock_�t_k��live
+(
+sockfd
+, 
+k�p�tvl
+, 
+k�p�t
+);
+
+181 

+�_sock_�t_n�block
+(
+sockfd
+);
+
+182 

+�_sock_�t_buf�r
+(
+sockfd
+, 
+rsize
+, 
+ssize
+);
+
+	@cp_string.c
+
+11 
+	~<�dio.h
+>
+
+12 
+	~<�dlib.h
+>
+
+13 
+	~<�r�g.h
+>
+
+14 
+	~<uni�d.h
+>
+
+15 
+	~<��o.h
+>
+
+17 
+	~"�_�r�g.h
+"
+
+18 
+	~"�_comm�.h
+"
+
+20 
+�_�r�g
+ *
+	$�_�r�g_���
+(*
+d�a
+, 
+�n
+)
+
+22 
+�_�r�g
+ *
+�r
+;
+
+24 #ifde�
+DEBUG
+
+
+25 i�(
+�n
+ < 0)
+
+27  
+NULL
+;
+
+31 
+�r
+ = 
+	`t_m�loc
+((
+�_�r�g
+));
+
+33 i�(
+�r
+)
+
+35 
+�r
+->
+�n
+ =�en;
+
+36 
+�r
+->
+size
+ = s�->
+�n
+ + 1;
+
+37 
+�r
+->
+d�a
+ = 
+	`t_m�loc
+(�r->
+size
+ * ());
+
+38 i�(
+�r
+->
+d�a
+)
+
+39 
+	`mem�y
+(
+�r
+->
+d�a
+, d�a, s�->
+�n
+);
+
+42 
+	`t_�
+(
+�r
+);
+
+43 
+�r
+ = 
+NULL
+;
+
+47  
+�r
+;
+
+48 
+	}
+}
+
+50 
+�_�r�g
+ *
+	$�_�r�g_���_em�y
+(
+���l_size
+)
+
+52 
+�_�r�g
+ *
+�r
+ = 
+	`t_m�loc
+((cp_string));
+
+54 i�(
+�r
+)
+
+56 
+�r
+->
+�n
+ = 0;
+
+57 
+�r
+->
+size
+ = 
+���l_size
+;
+
+58 
+�r
+->
+d�a
+ = (*�
+	`t_m�loc
+(�r->
+size
+ * ());
+
+59 i�(
+�r
+->
+d�a
+ =�
+NULL
+)
+
+61 
+	`t_�
+(
+�r
+);
+
+62 
+�r
+ = 
+NULL
+;
+
+66  
+�r
+;
+
+67 
+	}
+}
+
+69 
+	$�_�r�g_de�roy
+(
+�_�r�g
+ *
+�r
+)
+
+71 i�(
+�r
+)
+
+73 i�(
+�r
+->
+d�a
+)
+
+75 
+	`t_�
+(
+�r
+->
+d�a
+);
+
+78 
+	`t_�
+(
+�r
+);
+
+80 
+	}
+}
+
+83 
+	$�_�r�g_��r_d�a
+(
+�_�r�g
+ *
+�r
+)
+
+85 i�(
+�r
+ && s�->
+d�a
+)
+
+87 
+	`mem�t
+(
+�r
+->
+d�a
+, 0, s�->
+size
+);
+
+88 
+�r
+->
+�n
+ = 0;
+
+90 
+	}
+}
+
+92 
+�_�r�g
+ *
+	$�_�r�g_c�r�y
+(
+�_�r�g
+ *
+�r
+, *
+c�r
+)
+
+94 i�(
+�r
+)
+
+96 
+�r
+->
+�n
+ = 
+	`���
+(
+c�r
+);
+
+97 i�(
+�r
+->
+size
+ < s�->
+�n
+ + 1)
+
+99 
+�r
+->
+size
+ = s�->
+�n
+ + 1;
+
+100 
+�r
+->
+d�a
+ = 
+	`t_m�loc
+(�r->
+size
+ * ());
+
+102 i�(
+�r
+->
+d�a
+)
+
+103 
+	`mem�y
+(
+�r
+->
+d�a
+, 
+c�r
+, s�->
+size
+ * ());
+
+106 
+	`t_�
+(
+�r
+);
+
+107 
+�r
+ = 
+NULL
+;
+
+111  
+�r
+;
+
+112 
+	}
+}
+
+114 
+	$�_�r�g_c�y
+(
+�_�r�g
+ *
+d�
+, cp_�r�g *
+�c
+)
+
+116 
+��
+;
+
+117 
+size
+;
+
+119 if(!
+d�
+ || !d�->
+d�a
+ || !
+�c
+ || !src->data)
+
+122 
+��
+=
+d�
+->
+size
+ - d�->
+�n
+;
+
+123 
+size
+ = 
+��
+>
+�c
+->
+�n
+ ? src->len :�eft;
+
+125 
+	`mem�y
+(&
+d�
+->
+d�a
+[d�->
+�n
+], 
+�c
+->d�a, 
+size
+);
+
+126 
+d�
+->
+�n
+ +�
+size
+;
+
+128  
+size
+;
+
+129 
+	}
+}
+
+131 
+	$�_�r�g_c�rc�y
+(
+�_�r�g
+ *
+d�
+, *
+�r�g
+, 
+�n
+)
+
+133 
+��
+;
+
+134 
+size
+;
+
+136 if(!
+d�
+ || !d�->
+d�a
+ || !
+�r�g
+ || 
+�n
+<=0)
+
+139 
+��
+=
+d�
+->
+size
+ - d�->
+�n
+;
+
+140 
+size
+ = 
+��
+>
+�n
+ ?�en :�eft;
+
+142 
+	`mem�y
+(&
+d�
+->
+d�a
+[d�->
+�n
+], 
+�r�g
+, 
+size
+);
+
+143 
+d�
+->
+�n
+ +�
+size
+;
+
+145  
+size
+;
+
+146 
+	}
+}
+
+149 
+	$�_�r�g_move
+(
+�_�r�g
+ *
+d�
+, cp_�r�g *
+�c
+)
+
+151 
+��
+;
+
+152 
+size
+;
+
+154 if(!
+d�
+ || !d�->
+d�a
+ || !
+�c
+ || !src->data)
+
+158 
+��
+=
+d�
+->
+size
+ - d�->
+�n
+;
+
+159 
+size
+ = 
+��
+>
+�c
+->
+�n
+ ? src->len :�eft;
+
+162 
+	`mem�y
+(&
+d�
+->
+d�a
+[d�->
+�n
+], 
+�c
+->d�a, 
+size
+);
+
+163 
+d�
+->
+�n
+ +�
+size
+;
+
+166 
+�c
+->
+�n
+ -�
+size
+;
+
+167 
+	`memmove
+ (
+�c
+->
+d�a
+, src->d�a+
+size
+, src->
+�n
+);
+
+169  
+size
+;
+
+170 
+	}
+}
+
+172 
+�_�r�g
+ *
+	$�_�r�g_dup
+(
+�_�r�g
+ *
+�c
+)
+
+174 
+�_�r�g
+ *
+�r
+ = 
+	`t_m�loc
+((cp_string));
+
+176 i�(
+�r
+)
+
+178 *
+�r
+ = *
+�c
+;
+
+179 
+�r
+->
+d�a
+ = 
+	`t_m�loc
+((�r->
+�n
+ + 1) * ());
+
+180 i�(
+�r
+->
+d�a
+)
+
+181 
+	`mem�y
+(
+�r
+->
+d�a
+, 
+�c
+->d�a, (�r->
+�n
+ + 1) * ());
+
+184 
+	`t_�
+(
+�r
+);
+
+185 
+�r
+ = 
+NULL
+;
+
+189  
+�r
+;
+
+190 
+	}
+}
+
+192 
+�_�r�g
+ *
+	$�_�r�g_c�rdup
+(*
+�c
+)
+
+194 
+�_�r�g
+ *
+�r
+ = 
+	`t_m�loc
+((cp_string));
+
+196 i�(
+�r
+)
+
+198 
+�r
+->
+�n
+ = 
+	`���
+(
+�c
+);
+
+199 
+�r
+->
+size
+ = s�->
+�n
+ + 1;
+
+200 
+�r
+->
+d�a
+ = 
+	`t_m�loc
+(�r->
+size
+ * ());
+
+201 i�(
+�r
+->
+d�a
+ =�
+NULL
+)
+
+203 
+	`t_�
+(
+�r
+);
+
+204  
+NULL
+;
+
+206 
+	`mem�y
+(
+�r
+->
+d�a
+, 
+�c
+, s�->
+size
+);
+
+209  
+�r
+;
+
+210 
+	}
+}
+
+212 
+�_�r�g
+ *
+	$�_�r�g_�t
+(
+�_�r�g
+ *
+�r
+, cp_�r�g *
+��ndum
+)
+
+214 
+�n
+ = 
+�r
+->len;
+
+215 
+�r
+->
+�n
+ +�
+��ndum
+->len;
+
+216 i�(
+�r
+->
+�n
+ + 1 > s�->
+size
+)
+
+218 
+�r
+->
+size
+ = s�->
+�n
+ + 1;
+
+219 
+�r
+->
+d�a
+ = 
+	`��loc
+(�r->d�a, s�->
+size
+ * ());
+
+221 i�(
+�r
+->
+d�a
+)
+
+222 
+	`mem�y
+(
+�r
+->
+d�a
+ + 
+�n
+ * (), 
+��ndum
+->data,
+
+223 
+��ndum
+->
+�n
+ * ());
+
+225  
+�r
+;
+
+226 
+	}
+}
+
+228 
+�_�r�g
+ *
+	$�_�r�g_c�r�t
+(
+�_�r�g
+ *
+�r
+, *
+c�r
+)
+
+230 
+�n
+ = 
+�r
+->len;
+
+231 
+��
+ = 
+	`���
+(
+c�r
+);
+
+233 
+�r
+->
+�n
+ +�
+��
+ * ();
+
+234 i�(
+�r
+->
+�n
+ + 1 > s�->
+size
+)
+
+237 
+�r
+->
+size
+ = s�->
+�n
+ + 1;
+
+238 
+�r
+->
+d�a
+ = 
+	`��loc
+(�r->d�a, s�->
+size
+ * ());
+
+240 i�(
+�r
+->
+d�a
+)
+
+241 
+	`mem�y
+(
+�r
+->
+d�a
+ + 
+�n
+ * (), 
+c�r
+, 
+��
+);
+
+243  
+�r
+;
+
+244 
+	}
+}
+
+246 
+�_�r�g
+ *
+	$�_�r�g_��nd_ch�
+(
+�_�r�g
+ *
+�r
+, 
+ch
+)
+
+248 i�(
+�r
+->
+�n
+ + 1 > s�->
+size
+)
+
+250 
+�r
+->
+size
+ = s�->
+�n
+ + 0x100;
+
+251 
+�r
+->
+d�a
+ = 
+	`��loc
+(�r->d�a, s�->
+size
+ * ());
+
+252 i�(
+�r
+->
+d�a
+ =�
+NULL
+)  NULL;
+
+254 
+�r
+->
+d�a
+[�r->
+�n
+++] = 
+ch
+;
+
+256  
+�r
+;
+
+257 
+	}
+}
+
+259 
+�_�r�g
+ *
+	$�_�r�g_�t_b�
+(
+�_�r�g
+ *
+�r
+, *
+b�
+, 
+�n
+)
+
+261 
+ޒ
+ = 
+�r
+->
+�n
+;
+
+262 
+�r
+->
+�n
+ +=�en;
+
+264 i�(
+�r
+->
+�n
+ > s�->
+size
+)
+
+266 
+�r
+->
+size
+ = s�->
+�n
+ + 0x400 - (str->len % 0x400);
+
+267 
+�r
+->
+d�a
+ = 
+	`��loc
+(�r->d�a, s�->
+size
+ * ());
+
+269 
+	`mem�y
+(&
+�r
+->
+d�a
+[
+ޒ
+], 
+b�
+, 
+�n
+);
+
+271  
+�r
+;
+
+272 
+	}
+}
+
+274 
+	$�_�r�g_cmp
+(
+�_�r�g
+ *
+s1
+, cp_�r�g *
+s2
+)
+
+276 i�(
+s1
+ =�
+s2
+)  0;
+
+278 i�(
+s1
+ =�
+NULL
+)  -1;
+
+279 i�(
+s2
+ =�
+NULL
+)  1;
+
+281 i�(
+s1
+->
+�n
+ =�
+s2
+->len)
+
+282  
+	`memcmp
+(
+s1
+->
+d�a
+, 
+s2
+->d�a, s1->
+�n
+);
+
+285 
+p
+ = (
+s1
+->
+�n
+ > 
+s2
+->len) ? s2->len : s1->len;
+
+286 
+rc
+ = 
+	`memcmp
+(
+s1
+->
+d�a
+, 
+s2
+->d�a, 
+p
+);
+
+287 i�(
+rc
+ == 0)
+
+288  
+s1
+->
+�n
+ - 
+s2
+->len;
+
+289  
+rc
+;
+
+291 
+	}
+}
+
+293 *
+	$�_�r�g_toc�r
+(
+�_�r�g
+ *
+�r
+)
+
+295 *
+c�r
+ = 
+NULL
+;
+
+297 i�(
+�r
+)
+
+299 
+�r
+->
+d�a
+[�r->
+�n
+ * ()] = '\0';
+
+301 
+c�r
+ = 
+�r
+->
+d�a
+;
+
+304  
+c�r
+;
+
+305 
+	}
+}
+
+307 
+	$�_�r�g_�n
+(
+�_�r�g
+ *
+s
+)
+
+309  
+s
+->
+�n
+;
+
+310 
+	}
+}
+
+312 *
+	$�_�r�g_d�a
+(
+�_�r�g
+ *
+s
+)
+
+314  
+s
+->
+d�a
+;
+
+315 
+	}
+}
+
+317 
+	#CHUNK
+ 0x1000
+
+	)
+
+318 
+�_�r�g
+ *
+	$�_�r�g_�ad
+(
+fd
+, 
+�n
+)
+
+320 
+buf
+[
+CHUNK
+];
+
+321 
+�ad_�n
+;
+
+322 
+�_�r�g
+ *
+�s
+ = 
+NULL
+;
+
+324 i�(
+�n
+ == 0)
+
+325 
+�ad_�n
+ = 
+CHUNK
+;
+
+327 
+�ad_�n
+ = 
+�n
+ < 
+CHUNK
+ ?�en : CHUNK;
+
+329 
+�n
+ =�0 || 
+�s
+ =�
+NULL
+ ||�es->len <�en)
+
+331 
+rc
+ =
+
+332 
+	`�ad
+(
+fd
+, 
+buf
+, 
+�ad_�n
+);
+
+333 i�(
+rc
+ <= 0) ;
+
+334 i�(
+�s
+ =�
+NULL
+)
+
+336 
+�s
+ = 
+	`�_�r�g_���
+(
+buf
+, 
+rc
+);
+
+337 i�(
+�s
+ =�
+NULL
+)  NULL;
+
+340 
+	`�_�r�g_�t_b�
+(
+�s
+, 
+buf
+, 
+rc
+);
+
+343  
+�s
+;
+
+344 
+	}
+}
+
+346 
+	$�_�r�g_wr�e
+(
+�_�r�g
+ *
+�r
+, 
+fd
+)
+
+348 
+rc
+;
+
+349 
+tٮ
+ = 0;
+
+351 
+tٮ
+ < 
+�r
+->
+�n
+)
+
+353 
+rc
+ = 
+	`wr�e
+(
+fd
+, &
+�r
+->
+d�a
+[
+tٮ
+], s�->
+�n
+ -�otal);
+
+359 i�(
+rc
+ == -1)
+
+361 i�(
+��o
+ =�
+EINTR
+ )
+
+366 
+tٮ
+ +�
+rc
+;
+
+369  
+tٮ
+;
+
+370 
+	}
+}
+
+372 
+�_�r�g
+ *
+	$�_�r�g_�ad_f�e
+(*
+f��ame
+)
+
+374 
+�_�r�g
+ *
+�s
+;
+
+375 
+FILE
+ *
+�
+ = 
+	`fݒ
+(
+f��ame
+, "rb");
+
+376 i�(
+�
+ =�
+NULL
+)  NULL;
+
+378 
+�s
+ = 
+	`�_�r�g_�ad
+(
+	`f��o
+(
+�
+), 0);
+
+379 
+	`f�o�
+(
+�
+);
+
+381  
+�s
+;
+
+382 
+	}
+}
+
+384 
+	$�_�r�g_wr�e_f�e
+(
+�_�r�g
+ *
+�r
+, *
+f��ame
+)
+
+386 
+rc
+;
+
+387 
+FILE
+ *
+�
+ = 
+	`fݒ
+(
+f��ame
+, "wb");
+
+388 i�(
+�
+ =�
+NULL
+)  0;
+
+390 
+rc
+ = 
+	`�_�r�g_wr�e
+(
+�r
+, 
+	`f��o
+(
+�
+));
+
+391 
+	`f�o�
+(
+�
+);
+
+393  
+rc
+;
+
+394 
+	}
+}
+
+396 
+	#LINELEN
+ 81
+
+	)
+
+397 
+	#CHARS_PER_LINE
+ 16
+
+	)
+
+399 *
+	g��t_ch�
+ =
+
+417 
+	$�_c�r�g_dump
+(*
+d�a
+, 
+�n
+)
+
+419 
+rc
+;
+
+420 
+idx
+;
+
+421 
+�n
+[
+LINELEN
+];
+
+422 
+l�
+[
+CHARS_PER_LINE
+ + 1];
+
+423 
+hc
+[4];
+
+424 
+l�e_d�e
+ = 1;
+
+426 
+rc
+ = 
+�n
+;
+
+427 
+idx
+ = 0;
+
+428 
+l�
+[
+CHARS_PER_LINE
+] = '\0';
+
+429 
+rc
+ > 0)
+
+431 i�(
+l�e_d�e
+)
+
+432 
+	`���tf
+(
+�n
+, 
+LINELEN
+, "%08X: ", 
+idx
+);
+
+435 
+c
+ = 
+d�a
+[
+idx
+];
+
+436 
+	`���tf
+(
+hc
+, 4, "%02X ", 
+c
+);
+
+437 
+	`���t
+(
+�n
+, 
+hc
+, 4);
+
+438 
+l�
+[
+idx
+ % 
+CHARS_PER_LINE
+] = 
+��t_ch�
+[
+c
+];
+
+439 ++
+idx
+;
+
+440 } --
+rc
+ > 0 && (
+idx
+ % 
+CHARS_PER_LINE
+ != 0));
+
+441 
+l�e_d�e
+ = (
+idx
+ % 
+CHARS_PER_LINE
+) == 0;
+
+442 i�(
+l�e_d�e
+)
+
+443 
+	`��tf
+("%� %s\n", 
+�n
+, 
+l�
+);
+
+444 i�(
+rc
+ == 0)
+
+445 
+	`���t
+(
+�n
+, " ", 
+LINELEN
+);
+
+447 i�(!
+l�e_d�e
+)
+
+449 
+l�
+[(
+idx
+ % 
+CHARS_PER_LINE
+)] = '\0';
+
+450 (++
+idx
+ % 
+CHARS_PER_LINE
+) != 0)
+
+451 
+	`���t
+(
+�n
+, " ", 
+LINELEN
+);
+
+453 
+	`��tf
+("%� %s\n", 
+�n
+, 
+l�
+);
+
+456 
+	}
+}
+
+458 cڡ *
+	$�_hexdump_�r�g
+(cڡ *
+d�a
+, 
+size_t
+ 
+�n
+)
+
+460 
+�r�g
+[1024];
+
+461 *
+d
+ = (*)
+d�a
+;
+
+462 
+i
+, 
+��
+;
+
+464 
+�r�g
+[0] = '\0';
+
+465 
+��
+ = (
+�r�g
+);
+
+466 
+i
+ = 0; 
+�n
+--; i += 3) {
+
+467 i�(
+i
+ >�(
+�r�g
+) - 4)
+
+469 
+	`���tf
+(
+�r�g
+ + 
+i
+, 4, " %02x", *
+d
+++);
+
+472  
+�r�g
+;
+
+473 
+	}
+}
+
+476 
+	$�_�r�g_dump
+(
+�_�r�g
+ *
+�r
+)
+
+478 
+rc
+;
+
+479 
+idx
+;
+
+480 
+�n
+[
+LINELEN
+];
+
+481 
+l�
+[
+CHARS_PER_LINE
+ + 1];
+
+482 
+hc
+[4];
+
+483 
+l�e_d�e
+ = 1;
+
+485 
+rc
+ = 
+�r
+->
+�n
+;
+
+486 
+idx
+ = 0;
+
+487 
+l�
+[
+CHARS_PER_LINE
+] = '\0';
+
+488 
+rc
+ > 0)
+
+490 i�(
+l�e_d�e
+)
+
+491 
+	`���tf
+(
+�n
+, 
+LINELEN
+, "%08X: ", 
+idx
+);
+
+494 
+c
+ = 
+�r
+->
+d�a
+[
+idx
+];
+
+495 
+	`���tf
+(
+hc
+, 4, "%02X ", 
+c
+);
+
+496 
+	`���t
+(
+�n
+, 
+hc
+, 4);
+
+497 
+l�
+[
+idx
+ % 
+CHARS_PER_LINE
+] = 
+��t_ch�
+[
+c
+];
+
+498 ++
+idx
+;
+
+499 } --
+rc
+ > 0 && (
+idx
+ % 
+CHARS_PER_LINE
+ != 0));
+
+500 
+l�e_d�e
+ = (
+idx
+ % 
+CHARS_PER_LINE
+) == 0;
+
+501 i�(
+l�e_d�e
+)
+
+502 
+	`��tf
+("%� %s\n", 
+�n
+, 
+l�
+);
+
+503 i�(
+rc
+ == 0)
+
+504 
+	`���t
+(
+�n
+, " ", 
+LINELEN
+);
+
+506 i�(!
+l�e_d�e
+)
+
+508 
+l�
+[(
+idx
+ % 
+CHARS_PER_LINE
+)] = '\0';
+
+509 (++
+idx
+ % 
+CHARS_PER_LINE
+) != 0)
+
+510 
+	`���t
+(
+�n
+, " ", 
+LINELEN
+);
+
+512 
+	`��tf
+("%� %s\n", 
+�n
+, 
+l�
+);
+
+514 
+	}
+}
+
+517 
+	$�_�r�g_�
+(
+�_�r�g
+ *
+�r
+)
+
+519 i�(
+�r
+->
+�n
+)
+
+521 *
+i
+, *
+f
+, 
+ch
+;
+
+522 
+f
+ = &
+�r
+->
+d�a
+[�r->
+�n
+ - 1];
+
+523 
+i
+ = 
+�r
+->
+d�a
+;
+
+524 
+i
+ < 
+f
+)
+
+526 
+ch
+ = *
+i
+;
+
+527 *
+i
+ = *
+f
+;
+
+528 *
+f
+ = 
+ch
+;
+
+529 
+i
+++;
+
+530 
+f
+--;
+
+533 
+	}
+}
+
+536 
+�_�r�g
+ *
+	$�_�r�g_f��r
+(
+�_�r�g
+ *
+�r
+, *
+ˉ�s
+)
+
+538 *
+i
+;
+
+539 *
+f
+;
+
+541 
+�r
+->
+d�a
+[�r->
+�n
+] = '\0';
+
+542 
+i
+ = 
+�r
+->
+d�a
+;
+
+543 (
+f
+ = 
+	`��brk
+(
+i
+, 
+ˉ�s
+)))
+
+545 
+i
+ = 
+f
+;
+
+546 *
+f
+ && 
+	`�rchr
+(
+ˉ�s
+, *f)) f++;
+
+547 i�(*
+f
+)
+
+549 
+	`memmove
+(
+i
+, 
+f
+, 
+�r
+->
+�n
+ - (�- s�->
+d�a
+));
+
+550 
+�r
+->
+�n
+ -�
+f
+ - 
+i
+;
+
+551 
+�r
+->
+d�a
+[�r->
+�n
+] = '\0';
+
+555 *
+i
+ = '\0';
+
+556 
+�r
+->
+�n
+ -�r->��- (
+i
+ - s�->
+d�a
+);
+
+561  
+�r
+;
+
+562 
+	}
+}
+
+567 *
+	$d�_ch�_�om_�r�g
+(*
+�r
+, 
+d�ch�
+)
+
+569 *
+idx
+ = 
+�r
+;
+
+570 *
+�d
+ = 
+�r
+;
+
+571 *
+idx
+)
+
+573 i�(*
+idx
+ =�
+d�ch�
+)
+
+575 ++
+idx
+;
+
+579 *
+�d
+ = *
+idx
+;
+
+580 ++
+�d
+;
+
+581 ++
+idx
+;
+
+584 *
+�d
+ = '\0';
+
+585  
+�r
+;
+
+586 
+	}
+}
+
+588 
+	$�l�_�r�g_to_v�ue
+(*
+�r
+, *
+fmt
+, ...)
+
+590 
+va_li�
+ 
+�
+;
+
+592 *
+iP�
+;
+
+593 *
+lP�
+;
+
+594 *
+pcP�
+;
+
+596 
+d�im
+[2]={*(
+fmt
++2), '\0'};
+
+597 *
+�su�
+;
+
+599 
+	`va_��t
+(
+�
+, 
+fmt
+);
+
+601 
+�su�
+ = 
+	`��ok
+�
+�r
+, 
+d�im
+ );
+
+603 *
+fmt
+)
+
+605 *
+fmt
+++)
+
+608 
+pcP�
+ = 
+	`va_�g
+(
+�
+, *);
+
+609 if(
+NULL
+!�
+�su�
+)
+
+611 if(
+NULL
+!=
+pcP�
+)
+
+613 
+	`�r�y
+(
+pcP�
+, 
+�su�
+);
+
+615 
+�su�
+ = 
+	`��ok
+�
+NULL
+, 
+d�im
+ );
+
+618 
+OUT
+;
+
+623 
+iP�
+ = 
+	`va_�g
+(
+�
+, *);
+
+624 if(
+NULL
+!�
+�su�
+)
+
+626 if(
+NULL
+!=
+iP�
+)
+
+628 *
+iP�
+ = 
+	`�oi
+(
+�su�
+);
+
+630 
+�su�
+ = 
+	`��ok
+�
+NULL
+, 
+d�im
+ );
+
+633 
+OUT
+;
+
+638 
+lP�
+ = 
+	`va_�g
+(
+�
+, *);
+
+639 if(
+NULL
+!�
+�su�
+)
+
+641 if(
+NULL
+!=
+lP�
+)
+
+643 *
+lP�
+ = 
+	`���
+(
+�su�
+, 
+NULL
+, 10);
+
+645 
+�su�
+ = 
+	`��ok
+�
+NULL
+, 
+d�im
+ );
+
+648 
+OUT
+;
+
+653 
+lP�
+ = 
+	`va_�g
+(
+�
+, *);
+
+654 if(
+NULL
+!�
+�su�
+)
+
+656 if(
+NULL
+!=
+lP�
+)
+
+658 *
+lP�
+ = 
+	`���
+(
+�su�
+, 
+NULL
+, 16);
+
+660 
+�su�
+ = 
+	`��ok
+�
+NULL
+, 
+d�im
+ );
+
+663 
+OUT
+;
+
+669 
+OUT
+:
+
+670 
+	`va_�d
+(
+�
+);
+
+672 
+	}
+}
+
+	@cp_string.h
+
+1 #i�de�
+_CP_STRING_H
+
+
+2 
+	#_CP_STRING_H
+
+
+	)
+
+10 
+	~<�dio.h
+>
+
+11 
+	~<�r�g.h
+>
+
+12 
+	~<�dlib.h
+>
+
+13 
+	~<uni�d.h
+>
+
+14 
+	~<�d�g.h
+>
+
+17 
+	s_�_�r�g
+
+
+19 
+	msize
+;
+
+20 
+	m�n
+;
+
+21 *
+	md�a
+;
+
+22 } 
+	t�_�r�g
+;
+
+25 
+�_�r�g
+ *
+�_�r�g_���
+(*
+d�a
+, 
+�n
+);
+
+27 
+�_�r�g
+ *
+�_�r�g_���_em�y
+(
+���l_size
+);
+
+29 
+�_�r�g_de�roy
+(
+�_�r�g
+ *
+�r
+);
+
+31 
+�_�r�g_��r_d�a
+(
+�_�r�g
+ *
+�r
+);
+
+33 
+�_�r�g
+ *
+�_�r�g_c�r�y
+(�_�r�g *
+�r
+, *
+c�r
+);
+
+36 
+�_�r�g_c�y
+(
+�_�r�g
+ *
+d�
+, cp_�r�g *
+�c
+);
+
+37 
+�_�r�g_move
+(
+�_�r�g
+ *
+d�
+, cp_�r�g *
+�c
+);
+
+39 
+�_�r�g_c�rc�y
+(
+�_�r�g
+ *
+d�
+, *
+�r�g
+, 
+�n
+);
+
+41 
+�_�r�g
+ *
+�_�r�g_dup
+(�_�r�g *
+�c
+);
+
+43 
+�_�r�g
+ *
+�_�r�g_c�rdup
+(*
+�c
+);
+
+45 
+�_�r�g
+ *
+�_�r�g_�t
+(�_�r�g *
+�r
+, cp_�r�g *
+��ndum
+);
+
+47 
+�_�r�g
+ *
+�_�r�g_�t_b�
+(�_�r�g *
+�r
+, *
+b�
+, 
+�n
+);
+
+49 
+�_�r�g
+ *
+�_�r�g_c�r�t
+(�_�r�g *
+�r
+, *
+c�r
+);
+
+51 
+�_�r�g
+ *
+�_�r�g_��nd_ch�
+(�_�r�g *
+�r
+, 
+ch
+);
+
+53 
+�_�r�g_cmp
+(
+�_�r�g
+ *
+s1
+, cp_�r�g *
+s2
+);
+
+55 *
+�_�r�g_toc�r
+(
+�_�r�g
+ *
+�r
+);
+
+57 
+�_�r�g_�n
+(
+�_�r�g
+ *
+s
+);
+
+59 *
+�_�r�g_d�a
+(
+�_�r�g
+ *
+s
+);
+
+62 
+�_�r�g
+ *
+�_�r�g_�ad
+(
+fd
+, 
+�n
+);
+
+64 
+�_�r�g_wr�e
+(
+�_�r�g
+ *
+�r
+, 
+fd
+);
+
+66 
+�_�r�g
+ *
+�_�r�g_�ad_f�e
+(*
+f��ame
+);
+
+68 
+�_�r�g_wr�e_f�e
+(
+�_�r�g
+ *
+�r
+, *
+f��ame
+);
+
+71 
+�_�r�g_�
+(
+�_�r�g
+ *
+�r
+);
+
+73 
+�_�r�g
+ *
+�_�r�g_f��r
+(�_�r�g *
+�r
+, *
+ˉ�s
+);
+
+76 cڡ *
+�_hexdump_�r�g
+(cڡ *
+d�a
+, 
+size_t
+ 
+�n
+);
+
+77 
+�_�r�g_dump
+(
+�_�r�g
+ *
+�r
+);
+
+78 
+�_c�r�g_dump
+(*
+d�a
+, 
+�n
+);
+
+80 *
+d�_ch�_�om_�r�g
+(*
+�r
+, 
+d�ch�
+);
+
+81 
+�l�_�r�g_to_v�ue
+(*
+�r
+, *
+fmt
+, ...);
+
+	@cp_time.h
+
+13 #i�de�
+__CP_TIME_H
+
+
+14 
+	#__CP_TIME_H
+
+
+	)
+
+16 
+	~<uni�d.h
+>
+
+17 
+	~<�r�g.h
+>
+
+18 
+	~<f��.h
+>
+
+19 
+	~<time.h
+>
+
+21 
+	~<l�ux/�c.h
+>
+
+22 
+	~<sys/io�l.h
+>
+
+23 
+	~<sys/ty�s.h
+>
+
+24 
+	~<sys/��.h
+>
+
+25 
+	~<sys/time.h
+>
+
+27 
+	s__DATE_TIME
+
+
+29 
+	miY�r
+;
+
+30 
+	miM�th
+;
+
+31 
+	miDay
+;
+
+32 
+	miHour
+;
+
+33 
+	miM�u�
+;
+
+34 
+	miSec�d
+;
+
+35 
+	miDayOfW�k
+;
+
+36 } 
+	tDATE_TIME
+;
+
+38 
+�l�e
+ 
+	$mi�o_�c�d_��p
+(
+ms
+)
+
+40 
+time�ec
+ 
+cS˕
+;
+
+41 
+ulTmp
+;
+
+42 
+cS˕
+.
+tv_�c
+ = 
+ms
+ / 1000;
+
+43 i�(
+cS˕
+.
+tv_�c
+ == 0)
+
+45 
+ulTmp
+ = 
+ms
+ * 10000;
+
+46 
+cS˕
+.
+tv_n�c
+ = 
+ulTmp
+ * 100;
+
+50 
+cS˕
+.
+tv_n�c
+ = 0;
+
+53 
+	`�no��p
+(&
+cS˕
+, 0);
+
+54 
+	}
+}
+
+57 
+�l�e
+ 
+	$time_now
+()
+
+59 
+timev�
+ 
+now
+;
+
+60 
+	`g�timeofday
+(&
+now
+, 0);
+
+61  (
+now
+.
+tv_�c
+ * 1000�+ (now.
+tv_u�c
+ / 1000);
+
+62 
+	}
+}
+
+65 
+�l�e
+ 
+	$time_���d
+(
+��t
+)
+
+67 
+cu��t
+ = 
+	`time_now
+();
+
+69 i�(
+cu��t
+ < 
+��t
+)
+
+71  (0xFFFFFFFF - 
+��t
+�+ 
+cu��t
+;
+
+75  
+cu��t
+ - 
+��t
+;
+
+76 
+	}
+}
+
+78 
+�l�e
+ 
+	$g�_cu��t_time
+(
+DATE_TIME
+ * 
+d�e
+)
+
+80 
+time_t
+ 
+now
+ = 
+	`time
+(
+NULL
+);
+
+81 
+tm
+ *
+�ow
+ = 
+	`lo��ime
+(&
+now
+);
+
+83 
+	`mem�t
+(
+d�e
+, 0, (
+DATE_TIME
+));
+
+84 
+d�e
+->
+iY�r
+ = 1900 + 
+�ow
+->
+tm_y�r
+;
+
+85 
+d�e
+->
+iM�th
+ = 1 + 
+�ow
+->
+tm_m�
+;
+
+86 
+d�e
+->
+iDay
+ = 
+�ow
+->
+tm_mday
+;
+
+88 
+d�e
+->
+iHour
+ = 
+�ow
+->
+tm_hour
+;
+
+89 
+d�e
+->
+iM�u�
+ = 
+�ow
+->
+tm_m�
+;
+
+90 
+d�e
+->
+iSec�d
+ = 
+�ow
+->
+tm_�c
+;
+
+91 
+d�e
+->
+iDayOfW�k
+ = 
+�ow
+->
+tm_wday
+;
+
+93 
+	}
+}
+
+94 
+	#g�_sys_time
+(
+d�e
+�
+	`g�_cu��t_time
+(d�e)
+
+	)
+
+96 
+�l�e
+ 
+	$g�_�c_time
+(
+DATE_TIME
+ *
+d�e
+)
+
+98 
+rv
+, 
+fd
+ = -1;
+
+99 
+�c_time
+ 
+�c_tm
+;
+
+101 
+	`mem�t
+(
+d�e
+, 0, (
+DATE_TIME
+));
+
+103 i�((
+fd
+=
+	`ݒ
+("/dev/�c0", 
+O_RDONLY
+)) < 0)
+
+106 if((
+rv
+=
+	`io�l
+(
+fd
+, 
+RTC_RD_TIME
+, &
+�c_tm
+)) < 0)
+
+109 
+d�e
+->
+iY�r
+ = 1900 + 
+�c_tm
+.
+tm_y�r
+;
+
+110 
+d�e
+->
+iM�th
+ = 1 + 
+�c_tm
+.
+tm_m�
+;
+
+111 
+d�e
+->
+iDay
+ = 
+�c_tm
+.
+tm_mday
+;
+
+113 
+d�e
+->
+iHour
+ = 
+�c_tm
+.
+tm_hour
+;
+
+114 
+d�e
+->
+iM�u�
+ = 
+�c_tm
+.
+tm_m�
+;
+
+115 
+d�e
+->
+iSec�d
+ = 
+�c_tm
+.
+tm_�c
+;
+
+116 
+d�e
+->
+iDayOfW�k
+ = 
+�c_tm
+.
+tm_wday
+;
+
+118 
+	`�o�
+(
+fd
+);
+
+121 
+	}
+}
+
+	@cp_vector.c
+
+14 
+	~<�dio.h
+>
+
+15 
+	~<uni�d.h
+>
+
+16 
+	~<�dlib.h
+>
+
+17 
+	~<�r�g.h
+>
+
+19 
+	~"�_ve��.h
+"
+
+20 
+	~"�_comm�.h
+"
+
+22 
+CP_VECTOR
+ *
+	$�_ve��_��
+(
+size
+)
+
+24 
+CP_VECTOR
+ *
+ve��
+ = 
+NULL
+;
+
+25 if(
+size
+ < 0)
+
+26  
+NULL
+;
+
+28 
+ve��
+ = (
+CP_VECTOR
+ *)
+	`t_m�loc
+((CP_VECTOR));
+
+29 if(!
+ve��
+)
+
+31  
+NULL
+;
+
+34 
+ve��
+->
+mem
+ = 
+	`t_m�loc
+(
+size
+*(*));
+
+35 if(!
+ve��
+->
+mem
+)
+
+37 
+	`t_�
+(
+ve��
+);
+
+38  
+NULL
+;
+
+41 
+	`mem�t
+(
+ve��
+->
+mem
+, 0, 
+size
+);
+
+42 
+ve��
+->
+size
+ = size;
+
+43 
+ve��
+->
+u�d
+ = 0;
+
+45  
+ve��
+;
+
+46 
+	}
+}
+
+48 *
+	$�_ve��_add
+(
+CP_VECTOR
+ *
+ve��
+, 
+�dex
+, *
+�em
+)
+
+50 if(
+�dex
+<0 || index>
+ve��
+->
+size
+)
+
+51  
+NULL
+;
+
+53 
+ve��
+->
+mem
+[
+�dex
+]=
+�em
+;
+
+54 
+ve��
+->
+u�d
+++;
+
+56  
+�em
+;
+
+57 
+	}
+}
+
+59 *
+	$�_ve��_d�
+(
+CP_VECTOR
+ *
+ve��
+, 
+�dex
+)
+
+61 *
+�ve
+;
+
+63 if(
+�dex
+<0 ||�dex>
+ve��
+->
+size
+)
+
+64  
+NULL
+;
+
+66 
+�ve
+ = 
+ve��
+->
+mem
+[
+�dex
+];
+
+68 
+ve��
+->
+mem
+[
+�dex
+]=
+NULL
+;
+
+69 
+ve��
+->
+u�d
+--;
+
+71  
+�ve
+;
+
+72 
+	}
+}
+
+74 *
+	$�_ve��_g�
+(
+CP_VECTOR
+ *
+ve��
+, 
+�dex
+)
+
+76 if(
+�dex
+<0 ||�dex>
+ve��
+->
+size
+)
+
+77  
+NULL
+;
+
+79  
+ve��
+->
+mem
+[
+�dex
+];
+
+80 
+	}
+}
+
+82 
+	$�_ve��_de�roy
+(
+CP_VECTOR
+ *
+ve��
+)
+
+84 if(!
+ve��
+)
+
+87 if(
+ve��
+->
+mem
+)
+
+89 
+	`t_�
+(
+ve��
+->
+mem
+);
+
+92 
+	`t_�
+(
+ve��
+);
+
+93 
+	}
+}
+
+	@cp_vector.h
+
+14 #i�de�
+__CP_VECTOR
+
+
+15 
+	#__CP_VECTOR
+
+
+	)
+
+17 
+	~<�dio.h
+>
+
+18 
+	~<uni�d.h
+>
+
+19 
+	~<�dlib.h
+>
+
+20 
+	~<�r�g.h
+>
+
+22 
+	s_CP_VECTOR
+
+
+24 
+	msize
+;
+
+25 
+	mu�d
+;
+
+26 **
+	mmem
+;
+
+27 } 
+	tCP_VECTOR
+;
+
+29 
+	#�_ve��_cou�
+(
+v
+�((v�? (v)->
+u�d
+ : 0)
+
+	)
+
+30 
+	#�_ve��_size
+(
+v
+�((v�? (v)->
+size
+ : 0)
+
+	)
+
+32 
+CP_VECTOR
+ *
+�_ve��_��
+(
+size
+);
+
+33 *
+�_ve��_add
+(
+CP_VECTOR
+ *
+ve��
+, 
+�dex
+, *
+�em
+);
+
+34 *
+�_ve��_d�
+(
+CP_VECTOR
+ *
+ve��
+, 
+�dex
+);
+
+35 *
+�_ve��_g�
+(
+CP_VECTOR
+ *
+ve��
+, 
+�dex
+);
+
+36 
+�_ve��_de�roy
+(
+CP_VECTOR
+ *
+ve��
+);
+
+	@test/comport.c
+
+14 
+	~<g��t.h
+>
+
+15 
+	~<libg�.h
+>
+
+16 
+	~<sys/io�l.h
+>
+
+18 
+	~"�_comp�t.h
+"
+
+19 
+	~"�_comm�.h
+"
+
+20 
+	~"v�si�.h
+"
+
+22 
+	gg_ucProcTok�
+ = 0x01;
+
+23 
+	gg_ucC�lZ
+;
+
+25 
+��t_v�si�
+(*
+�me
+);
+
+26 
+u�ge
+(*
+�me
+);
+
+27 
+do_io�l
+(*
+dev_�me
+, 
+cmd
+, 
+�g
+);
+
+28 
+sig�l_h�d�r
+(
+i_sig
+);
+
+30 
+	$ma�
+(
+�gc
+, **
+�gv
+)
+
+32 
+�t
+ = 0;
+
+33 
+�tv�
+ = 0;
+
+34 
+�cv_size
+ = 0;
+
+35 
+i
+;
+
+36 *
+dev_�me
+ = 
+NULL
+;
+
+37 
+baud��
+ = 115200;
+
+38 *
+���gs
+ = "8N1N";
+
+39 
+buf
+[512];
+
+40 
+di�_mode
+ = 0x00;
+
+42 
+siga�i�
+ 
+siga�
+;
+
+44 
+�ti�
+ 
+l�g_�ti�s
+[] = {
+
+45 {"devi�", 
+�qu�ed_�gum�t
+, 
+NULL
+, 'd'},
+
+46 {"baud��", 
+�qu�ed_�gum�t
+, 
+NULL
+, 'b'},
+
+47 {"���gs", 
+�qu�ed_�gum�t
+, 
+NULL
+, 's'},
+
+48 {"io�l", 
+�qu�ed_�gum�t
+, 
+NULL
+, 'i'},
+
+49 {"hex", 
+no_�gum�t
+, 
+NULL
+, 'x'},
+
+50 {"v�si�", 
+no_�gum�t
+, 
+NULL
+, 'v'},
+
+51 {"h�p", 
+no_�gum�t
+, 
+NULL
+, 'h'},
+
+52 {
+NULL
+, 0, NULL, 0}
+
+55 (
+�t
+ = 
+	`g��t_l�g
+(
+�gc
+, 
+�gv
+, "d:b:s:ivh", 
+l�g_�ti�s
+, 
+NULL
+)) != -1)
+
+57 
+�t
+)
+
+60 
+dev_�me
+ = 
+ݏrg
+;
+
+63 
+baud��
+ = 
+	`�oi
+(
+ݏrg
+);
+
+66 
+���gs
+ = 
+ݏrg
+;
+
+69 i�(5 !�
+�gc
+)
+
+71 
+	`u�ge
+(
+�gv
+[0]);
+
+75 
+	`do_io�l
+(
+�gv
+[2], 
+	`�oi
+(argv[3]),�toi(argv[4]));
+
+79 
+di�_mode
+ = 0x01;
+
+82 
+	`��t_v�si�
+(
+�gv
+[0]);
+
+85 
+	`u�ge
+(
+�gv
+[0]);
+
+92 i�(
+�gc
+ < 2)
+
+94 
+	`u�ge
+(
+�gv
+[0]);
+
+98 
+COM_PORT
+ *
+comp�t
+ = 
+NULL
+;
+
+99 i�(
+NULL
+ =�(
+comp�t
+ = 
+	`comp�t_��
+(
+dev_�me
+, 
+baud��
+, 
+���gs
+)))
+
+101 
+	`��tf
+("Comport initialize failure.\n");
+
+105 i��(
+�tv�
+=
+	`comp�t_ݒ
+(
+comp�t
+)) < 0)
+
+107 
+	`��tf
+("Fa�ed��ݒ %�w�h baud�� %d, %s. R�Cod�[%d]\n", 
+dev_�me
+, 
+baud��
+,
+
+108 
+���gs
+, 
+�tv�
+);
+
+112 
+	`n�block
+();
+
+115 
+	`sigem�y�t
+(&
+siga�
+.
+�_mask
+);
+
+116 
+siga�
+.
+�_�ags
+ = 0;
+
+117 
+siga�
+.
+�_h�d�r
+ = 
+sig�l_h�d�r
+;
+
+119 
+	`siga�i�
+(
+SIGTERM
+, &
+siga�
+, 
+NULL
+);
+
+120 
+	`siga�i�
+(
+SIGINT
+, &
+siga�
+, 
+NULL
+);
+
+121 
+	`siga�i�
+(
+SIGSEGV
+, &
+siga�
+, 
+NULL
+);
+
+122 
+	`siga�i�
+(
+SIGTSTP
+, &
+siga�
+, 
+NULL
+);
+
+123 
+	`siga�i�
+(
+SIGSTOP
+, &
+siga�
+, 
+NULL
+);
+
+125 0x01 =�
+g_ucProcTok�
+)
+
+127 
+�cv_size
+ = 
+	`comp�t_�cv
+(
+comp�t
+, 
+buf
+, (buf) - 1, 10);
+
+128 i�(
+�cv_size
+ > 0)
+
+130 
+i
+ = 0; i < 
+�cv_size
+; i++)
+
+132 i�(0 =�
+di�_mode
+)
+
+133 
+	`��tf
+("%c", 
+buf
+[
+i
+]);
+
+135 
+	`��tf
+("%02X ", 
+buf
+[
+i
+]);
+
+137 
+	`f�ush
+(
+�dout
+);
+
+139 i�(0 !�
+	`kbh�
+())
+
+141 
+�tv�
+ = 
+	`fg�c
+(
+�d�
+);
+
+143 i�(0x0A =�
+�tv�
+)
+
+145 
+buf
+[0] = 0x0D;
+
+149 
+buf
+[0] = 
+�tv�
+;
+
+152 
+	`comp�t_�nd
+(
+comp�t
+, 
+buf
+, 1);
+
+154 i�(0x00 !�
+g_ucC�lZ
+)
+
+156 
+g_ucC�lZ
+ = 0x00;
+
+157 
+buf
+[0] = 0x1A;
+
+158 
+	`comp�t_�nd
+(
+comp�t
+, 
+buf
+, 1);
+
+162 
+	`comp�t_�rm
+(
+comp�t
+);
+
+164 
+	}
+}
+
+166 
+	$��t_v�si�
+(*
+�me
+)
+
+168 *
+�og�me
+ = 
+NULL
+;
+
+169 *
+�r
+ = 
+NULL
+;
+
+171 
+�r
+ = 
+	`�rdup
+(
+�me
+);
+
+172 
+�og�me
+ = 
+	`ba��me
+(
+�r
+);
+
+174 
+	`��tf
+("%�v�si�: %d.%d.%d Bu�d %04d o�%s\n", 
+�og�me
+, 
+MAJOR
+, 
+MINOR
+, 
+REVER
+, 
+SVNVER
+, 
+DATE
+);
+
+175 
+	`��tf
+("Copyright (C) 2010 guowenxue <guowenxue@gmail.com>\n");
+
+177 
+	`t_�
+(
+�r
+);
+
+179 
+	}
+}
+
+181 
+	$u�ge
+(*
+�me
+)
+
+183 *
+�og�me
+ = 
+NULL
+;
+
+184 *
+�r
+ = 
+NULL
+;
+
+186 
+�r
+ = 
+	`�rdup
+(
+�me
+);
+
+187 
+�og�me
+ = 
+	`ba��me
+(
+�r
+);
+
+188 
+	`��tf
+("Usage1: comport -d <device> [-b <baudrate>][-s <settings>] [-x]\n");
+
+189 
+	`��tf
+("Usage2: comport [-i <driver�ort> <cmd> <arg>][--help][--version]\n");
+
+190 
+	`��tf
+(" -d[device ] device�ame\n");
+
+191 
+	`��tf
+(" -b[baudrate] device baudrate (115200, 57600, 19200, 9600), default is 115200\n");
+
+192 
+	`��tf
+(" -s[settings] device settings�s�ike 8N1N(default setting)\n");
+
+193 
+	`��tf
+(" - data bits: 8, 7\n");
+
+194 
+	`��tf
+(" -�arity: N=None, O=Odd, E=Even, S=Space\n");
+
+195 
+	`��tf
+(" - stop bits: 1, 0\n");
+
+196 
+	`��tf
+(" - flow control: N=None, H=Hardware, S=Software, B=Both\n");
+
+197 
+	`��tf
+(" -x[hex ] display�eceived data in hex format\n");
+
+198 
+	`��tf
+(" -i[ioctl ] ioctl system call (cmd &�rg only support int)\n");
+
+199 
+	`��tf
+(" -v[version ] Display�he�rogram version\n");
+
+200 
+	`��tf
+(" -h[help ] Display�his help information\n");
+
+202 
+	`��t_v�si�
+(
+�og�me
+);
+
+204 
+	`t_�
+(
+�r
+);
+
+207 
+	}
+}
+
+209 
+	$do_io�l
+(*
+dev_�me
+, 
+cmd
+, 
+�g
+)
+
+211 
+fd
+ = -1;
+
+212 
+�tv�
+ = -1;
+
+213 i�(((
+fd
+ = 
+	`ݒ
+(
+dev_�me
+, 
+O_RDWR
+)) < 0))
+
+215 
+	`��tf
+("O��devi� \"%s\" fa�u�: %s\n", 
+dev_�me
+, 
+	`����
+(
+��o
+));
+
+219 
+�tv�
+ = 
+	`io�l
+(
+fd
+, 
+cmd
+, 
+�g
+);
+
+220 
+	`��tf
+("io��(%s, %d, %d�tu�ed %d\n", 
+dev_�me
+, 
+cmd
+, 
+�g
+, 
+�tv�
+);
+
+222 
+	`�o�
+(
+fd
+);
+
+223  
+�tv�
+;
+
+224 
+	}
+}
+
+226 
+	$sig�l_h�d�r
+(
+i_sig
+)
+
+228 i�(
+SIGTERM
+ =�
+i_sig
+ || 
+SIGINT
+ == i_sig)
+
+230 
+g_ucProcTok�
+ = 0x00;
+
+232 i�(20 =�
+i_sig
+)
+
+234 
+g_ucC�lZ
+ = 0x01;
+
+236 
+	}
+}
+
+	@test/swe_tpdud.c
+
+14 
+	~<uni�d.h
+>
+
+15 
+	~<g��t.h
+>
+
+16 
+	~<libg�.h
+>
+
+18 
+	~"�_comm�.h
+"
+
+19 
+	~"�_�tw�k.h
+"
+
+20 
+	~"�_logg�.h
+"
+
+21 
+	~"�_�oc.h
+"
+
+22 
+	~"�_time.h
+"
+
+23 
+	~"swe_�dud.h
+"
+
+24 
+	~"v�si�.h
+"
+
+26 
+	$��_�du_�rvi�
+(
+SWE_TPDU
+ *
+�du
+)
+
+28 if(!
+�du
+)
+
+31 
+	`log_dbg
+("��a��pdu cڋx [%p]\n", 
+�du
+);
+
+33 if�
+�du
+->
+dl�k
+ )
+
+35 
+	`log_�ml
+("�݁pdu s�vi� f� dowƚk sock� [%p:%d]\n", 
+�du
+->
+dl�k
+,�pdu->dl�k->
+fd
+);
+
+36 
+	`�_fds_de�roy_sock_��r
+(
+�du
+->
+dl�k
+);
+
+37 
+�du
+->
+dl�k
+ = 
+NULL
+;
+
+40 if�
+�du
+->
+ul�k
+ )
+
+42 
+	`log_�ml
+("�݁pdu s�vi� f� u��k sock� [%p:%d]\n", 
+�du
+->
+ul�k
+,�pdu->ul�k->
+fd
+);
+
+43 
+	`�_fds_de�roy_sock_��r
+(
+�du
+->
+ul�k
+);
+
+44 
+�du
+->
+ul�k
+ = 
+NULL
+;
+
+47 
+	`t_�
+(
+�du
+);
+
+48 
+	}
+}
+
+50 
+	$�oc_u��k_ev�t
+(
+CP_SOCK
+ *
+ul�k
+)
+
+52 
+rv
+;
+
+53 
+CP_SOCK
+ *
+dl�k
+ = 
+NULL
+;
+
+54 
+SWE_TPDU
+ *
+�du
+ = 
+NULL
+;
+
+56 if(!
+ul�k
+ || !(
+�du
+=ul�k->
+�ivt
+�|| !(
+dl�k
+=tpdu->dlink))
+
+58 
+	`log_�r
+("�du�dd�ss:[%p] ul�k�dd�ss:[%p] dl�k�dd�ss:[%p]\n", 
+�du
+, 
+ul�k
+, 
+dl�k
+);
+
+62 if(
+ul�k
+->
+��us
+ =�
+SOCK_STAT_DISCONNECT
+)
+
+64 
+��_�rvi�
+;
+
+67 if(
+ul�k
+->
+ev�t
+.
+ev�ts
+ & 
+CP_SOCK_EVENT_READ
+)
+
+69 
+rv
+ = 
+	`�_sock_�cv
+(
+ul�k
+);
+
+70 if�0==
+rv
+ )
+
+72 
+	`log_w�n
+("Socket [%d %s:%d]�emote socket [%s:%d] disconnect,�emove it�ow\n",
+
+73 
+ul�k
+->
+fd
+, ul�k->
+�ddr
+, ul�k->
+��t
+, ul�k->
+�ddr
+, ul�k->
+��t
+);
+
+74 
+��_�rvi�
+;
+
+76 if(
+rv
+ > 0)
+
+78 
+	`log_�ml
+("Sock� [%d %s:%d]�e�iv�%d by��d�a:\n", 
+ul�k
+->
+fd
+, ul�k->
+�ddr
+, ul�k->
+��t
+, 
+rv
+);
+
+79 
+	`�_log_dump
+(
+LOG_LEVEL_DEBUG
+, 
+ul�k
+->
+rbuf
+->
+d�a
+, ul�k->rbuf->
+�n
+);
+
+81 if(
+ul�k
+->
+rbuf
+->
+�n
+ > 0)
+
+83 
+	`�_�r�g_move
+(
+dl�k
+->
+sbuf
+, 
+ul�k
+->
+rbuf
+);
+
+84 
+	`�_sock_�nd
+(
+dl�k
+);
+
+89 
+	`log_�r
+("Sock� [%d %s:%d]�e�iv�d���ed: %s\n", 
+ul�k
+->
+fd
+, ul�k->
+�ddr
+, ul�k->
+��t
+, 
+	`����
+(
+��o
+));
+
+92 if(
+ul�k
+->
+ev�t
+.
+ev�ts
+ & 
+CP_SOCK_EVENT_IDLE_TIMEOUT
+)
+
+94 
+	`log_w�n
+("uplink socket [%d] is idle�nd�o-do something here\n");
+
+96 if(
+ul�k
+->
+ev�t
+.
+ev�ts
+ & 
+CP_SOCK_EVENT_MSG_TIMEOUT
+)
+
+98 
+	`log_w�n
+("uplink socket [%d] message is�imeout�nd�o-do something here\n");
+
+105 
+��_�rvi�
+:
+
+106 
+	`��_�du_�rvi�
+(
+�du
+);
+
+108 
+	}
+}
+
+111 
+	$�du_c���_u��k
+(
+SWE_TPDU
+ *
+�du
+)
+
+113 
+CP_SOCK
+ *
+ul�k
+;
+
+114 
+CP_SOCK
+ *
+dl�k
+;
+
+116 if(!
+�du
+ || !(
+dl�k
+=tpdu->dlink))
+
+118 
+	`log_�r
+("�du�dd�s�[%p] dl�k�dd�s�[%p]\n", 
+�du
+, 
+dl�k
+);
+
+122 
+ul�k
+ = 
+�du
+->ulink;
+
+124 
+ul�k
+=
+	`�_sock_c���_�gi�
+(
+dl�k
+->
+fds
+, ul�k, 
+�du
+->
+�ddr
+,�pdu->
+��t
+, 0, 
+�oc_u��k_ev�t
+);
+
+125 if�!
+ul�k
+ )
+
+129 
+	`log_�r
+("c����ػmِ[%s:%d] fa�u�\n", 
+�du
+->
+�ddr
+,�pdu->
+��t
+);
+
+130 
+�du
+->
+ul�k
+ = 
+NULL
+;
+
+135 
+ul�k
+->
+�ivt
+ = 
+�du
+;
+
+136 
+�du
+->
+ul�k
+ = ulink;
+
+137 
+	`log_�fo
+("c����ػmِ[%s:%d] i��og�ss\n", 
+�du
+->
+�ddr
+,�pdu->
+��t
+);
+
+138 
+	`�_fds_add_sock_�sk
+(
+dl�k
+);
+
+139 
+dl�k
+->
+ev�t
+.
+ev�ts
+ = 0;
+
+143 
+	}
+}
+
+145 
+	$�du_�rvi�_rou�
+(
+CP_SOCK
+ *
+dl�k
+)
+
+147 
+rv
+ = 0;
+
+149 
+SWE_TPDU
+ *
+�du
+;
+
+151 if�!
+dl�k
+ )
+
+154 
+�du
+ = 
+dl�k
+->
+�ivt
+;
+
+158 if�!
+�du
+ )
+
+160 if�!(
+�du
+=
+	`t_m�loc
+((*tpdu))) )
+
+162 
+	`log_�r
+("Malloc TPDU work contex failure\n");
+
+163 
+��_�rvi�
+;
+
+167 
+SWE_TPDU
+ *
+�rv_�du
+;
+
+168 
+	`log_�fo
+("m�lo�TPDU w�k cڋx [%p]\n", 
+�du
+);
+
+170 
+�rv_�du
+ = 
+dl�k
+->
+�rv_sock
+->
+�ivt
+;
+
+171 
+dl�k
+->
+�ivt
+ = 
+�du
+;
+
+172 
+�du
+->
+dl�k
+ = dlink;
+
+173 
+	`�r�y
+(
+�du
+->
+�ddr
+, 
+�rv_�du
+->raddr);
+
+174 
+�du
+->
+��t
+ = 
+�rv_�du
+->rport;
+
+178 
+	`log_dbg
+("Pro�s�sock� [%d %s:%d] w�h�v��[%d]\n", 
+dl�k
+->
+fd
+, dl�k->
+�ddr
+, dl�k->
+��t
+, dl�k->
+ev�t
+.
+ev�ts
+);
+
+181 if(
+dl�k
+->
+ev�t
+.
+ev�ts
+ & 
+CP_SOCK_EVENT_READ
+)
+
+183 
+rv
+ = 
+	`�_sock_�cv
+(
+dl�k
+);
+
+184 if�
+rv
+ == 0 )
+
+186 
+	`log_w�n
+("Socket [%d %s:%d]�emote socket [%s:%d] disconnect,�emove it�ow\n",
+
+187 
+dl�k
+->
+fd
+, dl�k->
+�ddr
+, dl�k->
+��t
+, dl�k->
+�ddr
+, dl�k->
+��t
+);
+
+188 
+��_�rvi�
+;
+
+190 if�
+rv
+ < 0)
+
+192 
+	`log_�r
+("Sock� [%d %s:%d]�e�iv�d���ed: %s\n", 
+dl�k
+->
+fd
+, dl�k->
+�ddr
+, dl�k->
+��t
+, 
+	`����
+(
+��o
+));
+
+193 
+��_�rvi�
+;
+
+197 
+	`log_�ml
+("Sock� [%d %s:%d]�e�iv�%d by��d�a:\n", 
+dl�k
+->
+fd
+, dl�k->
+�ddr
+, dl�k->
+��t
+, 
+rv
+);
+
+198 
+	`�_log_dump
+(
+LOG_LEVEL_DEBUG
+, 
+dl�k
+->
+rbuf
+->
+d�a
+, dl�k->rbuf->
+�n
+);
+
+200 if(
+dl�k
+->
+ev�t
+.
+ev�ts
+ & 
+CP_SOCK_EVENT_HUP
+)
+
+202 
+	`log_w�n
+("sock� [%d]�emِ��ady disc���\n", 
+dl�k
+->
+fd
+);
+
+203 
+dl�k
+->
+��us
+ = 
+SOCK_STAT_DISCONNECT
+;
+
+204 
+��_�rvi�
+;
+
+206 if(
+dl�k
+->
+ev�t
+.
+ev�ts
+ & 
+CP_SOCK_EVENT_IDLE_TIMEOUT
+)
+
+208 
+	`log_w�n
+("socket [%d] is idle�nd�o-do something here\n");
+
+210 if(
+dl�k
+->
+ev�t
+.
+ev�ts
+ & 
+CP_SOCK_EVENT_MSG_TIMEOUT
+)
+
+212 
+	`log_w�n
+("socket [%d] message is�imeout�nd�o-do something here\n");
+
+217 if�
+dl�k
+->
+rbuf
+->
+�n
+ > 0)
+
+219 
+SWE_TPDU
+ *
+�g
+ = 
+dl�k
+->
+�rv_sock
+->
+�ivt
+;
+
+221 
+�du
+->
+��t
+ = 
+�g
+->rport;
+
+222 
+	`���y
+(
+�du
+->
+�ddr
+, 
+�g
+->raddr, (tpdu->raddr));
+
+226 if�!
+�du
+->
+ul�k
+ || (�du->ul�k->
+��us
+==
+SOCK_STAT_CONNECTING
+))
+
+228 
+	`log_�ml
+("�du dl�k: %p\n", 
+�du
+->
+dl�k
+);
+
+229 if�
+	`�du_c���_u��k
+(
+�du
+) < 0 )
+
+230 
+��_�rvi�
+;
+
+234 if�!
+�du
+->
+ul�k
+ || (�du->ul�k->
+��us
+==
+SOCK_STAT_CONNECTED
+))
+
+236 
+	`log_dbg
+("c����ػmِ[%s:%d] ok�nd s�d %d by��d�a\n", 
+�du
+->
+�ddr
+,�pdu->
+��t
+, 
+dl�k
+->
+rbuf
+->
+�n
+);
+
+237 
+	`�_fds_d�_sock_�sk
+(
+dl�k
+);
+
+238 if(
+dl�k
+->
+rbuf
+->
+�n
+ > 0)
+
+240 
+	`�_�r�g_move
+(
+�du
+->
+ul�k
+->
+sbuf
+, 
+dl�k
+->
+rbuf
+);
+
+241 
+	`�_sock_�nd
+(
+�du
+->
+ul�k
+);
+
+248 
+��_�rvi�
+:
+
+249 
+	`��_�du_�rvi�
+(
+�du
+);
+
+250 
+�du
+ = 
+NULL
+;
+
+252 
+	}
+}
+
+254 
+	$��t_u�ge
+(*
+�og�me
+)
+
+256 
+	`v�si�
+(
+�og�me
+);
+
+257 
+	`��tf
+("U�ge: %�[OPTION]...\n", 
+�og�me
+);
+
+258 
+	`��tf
+(" %�i��h�d˅rog�m�������u– b�w��� incom�g�nd outgo�g FD\n", 
+�og�me
+);
+
+260 
+	`��tf
+("\nMandatory�rguments�o�ong options�re mandatory for short options�oo:\n");
+
+262 
+	`��tf
+(" -l[loglevel] To configure�he�ogger�evel [0(DIS)...8(MAX)], default 4[NRML]\n");
+
+263 
+	`��tf
+(" -p[p܈ ] T�c�figu��h�li���g��t, de�u� [%d]\n", 
+TPDUD_PORT
+);
+
+264 
+	`��tf
+(" -i[Rem�eIP] T�c�figu��h��m�e/outgo�g IP, de�u� [%s]\n", 
+HOSTSIM_IP
+);
+
+265 
+	`��tf
+(" -o[outgo�g] T�c�figu��h��m�e/outgo�g P�t, de�u� [%d]\n", 
+HOSTSIM_PORT
+);
+
+266 
+	`��tf
+(" -h[help ] Display�his help information\n");
+
+267 
+	`��tf
+(" -v[version ] Display�he�rogram version\n");
+
+268 
+	`��tf
+("\n");
+
+271 
+	}
+}
+
+280 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+282 
+CP_FDS
+ *
+fds
+;
+
+283 
+CP_SOCK
+ *
+sock
+;
+
+284 
+SWE_TPDU
+ 
+�du
+ = {.
+��t
+=
+TPDUD_PORT
+, .
+�ddr
+=
+HOSTSIM_IP
+, .
+��t
+=
+HOSTSIM_PORT
+};
+
+285 
+�t
+;
+
+286 
+log�v�
+ = 
+LOG_LEVEL_NRML
+;
+
+288 
+�ti�
+ 
+l�g_�ti�s
+[] =
+
+290 {"log�v�", 
+�qu�ed_�gum�t
+, 
+NULL
+, 'l'},
+
+291 {"p�t", 
+�qu�ed_�gum�t
+, 
+NULL
+, 'p'},
+
+292 {"ho�", 
+�qu�ed_�gum�t
+, 
+NULL
+, 'i'},
+
+293 {"outgo�g", 
+�qu�ed_�gum�t
+, 
+NULL
+, 'o'},
+
+294 {"v�si�", 
+no_�gum�t
+, 
+NULL
+, 'v'},
+
+295 {"h�p", 
+no_�gum�t
+, 
+NULL
+, 'h'},
+
+296 {
+NULL
+, 0, NULL, 0}
+
+299 (
+�t
+ = 
+	`g��t_l�g
+(
+�gc
+, 
+�gv
+, "l:p:i:o:vh", 
+l�g_�ti�s
+, 
+NULL
+)) != -1)
+
+301 
+�t
+)
+
+304 
+log�v�
+ = 
+	`�oi
+(
+ݏrg
+);
+
+308 
+�du
+.
+��t
+ = 
+	`�oi
+(
+ݏrg
+);
+
+312 
+	`���y
+(
+�du
+.
+�ddr
+, 
+ݏrg
+, (tpdu.raddr));
+
+316 
+�du
+.
+��t
+ = 
+	`�oi
+(
+ݏrg
+);
+
+320 
+	`v�si�
+(
+	`ba��me
+(
+�gv
+[0]));
+
+321  
+EXIT_SUCCESS
+;
+
+324 
+	`��t_u�ge
+(
+	`ba��me
+(
+�gv
+[0]));
+
+325  
+EXIT_SUCCESS
+;
+
+334 i�(!
+	`�_log_��
+(
+NULL
+, 
+DBG_LOG_FILE
+, 
+LOG_LEVEL_MAX
+, 
+LOG_ROLLBACK_NONE
+�|| 
+	`�_log_ݒ
+())
+
+336 
+��nup
+;
+
+338 
+	`�_���l_�oc_sig�l
+();
+
+340 if�!(
+fds
+=
+	`�_fds_��
+(
+NULL
+, 
+CP_DEF_MAX_EVENTS
+, 
+CP_DEF_FDS_TIMEOUT
+)) )
+
+341 
+��nup
+;
+
+343 if�!(
+sock
+=
+	`�_sock_�rv�_�gi�
+(
+fds
+, 
+NULL
+, 
+�du
+.
+��t
+, 0, 
+�du_�rvi�_rou�
+, (*)&tpdu)) )
+
+344 
+��nup
+;
+
+346  !
+g_�_sig�l
+.
+��
+ )
+
+348 
+	`�_fds_d�e�_ev�t
+(
+fds
+);
+
+349 
+	`�_fds_�oc_ev�t
+(
+fds
+);
+
+350 
+	`�_sock_d�e�_timeout
+(
+fds
+);
+
+351 
+	`mi�o_�c�d_��p
+(10);
+
+354 
+��nup
+:
+
+355 
+	`�_sock_�rm_�l_�rvi�_��r
+(
+fds
+);
+
+356 
+	`�_log_�rm
+();
+
+358 
+	}
+}
+
+	@test/swe_tpdud.h
+
+14 #i�de�
+__SWE_TPDUD_H
+
+
+15 
+	#__SWE_TPDUD_H
+
+
+	)
+
+17 
+	~<�_sock.h
+>
+
+19 
+	#HOSTSIM_PORT
+ 9002
+
+	)
+
+20 
+	#HOSTSIM_IP
+ "192.168.3.6"
+
+	)
+
+22 
+	#TPDUD_PORT
+ 8000
+
+	)
+
+23 
+	#UPLINK_ADDR
+ 
+HOSTSIM_IP
+
+
+	)
+
+24 
+	#UPLINK_PORT
+ 
+HOSTSIM_PORT
+
+
+	)
+
+26 
+	#FLAG_TPDU_INIT
+ (1<<0)
+
+	)
+
+27 
+	#FLAG_TPDU_STOP
+ (1<<7)
+
+	)
+
+29 
+	s_SWE_TPDU
+
+
+31 
+	m�ag
+;
+
+32 
+	m�ddr
+[32];
+
+33 
+	m��t
+;
+
+34 
+	m��t
+;
+
+36 
+CP_SOCK
+ *
+	mdl�k
+;
+
+37 
+CP_SOCK
+ *
+	mul�k
+;
+
+38 } 
+	tSWE_TPDU
+;
+
+	@test/test_array.c
+
+14 
+	~<�dio.h
+>
+
+15 
+	~<�r�g.h
+>
+
+16 
+	~<�dlib.h
+>
+
+18 
+	~"�_��y.h
+"
+
+19 
+	~"�_sock.h
+"
+
+20 
+	~"�_logg�.h
+"
+
+22 
+	#MAX_ITEMS
+ 10
+
+	)
+
+30 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+32 
+i
+;
+
+34 
+CP_SOCK
+ *
+sock
+ = 
+NULL
+;
+
+35 
+CP_SOCK
+ *
+tmp
+ = 
+NULL
+;
+
+36 
+CP_ARRAY
+ *
+��y
+ = 
+NULL
+;
+
+38 i�(!
+	`�_log_��
+(
+NULL
+, 
+DBG_LOG_FILE
+, 
+LOG_LEVEL_MAX
+, 
+LOG_ROLLBACK_NONE
+�|| 
+	`�_log_ݒ
+())
+
+41 if�!(
+��y
+=
+	`�_��y_��
+(
+NULL
+, 
+MAX_ITEMS
+)) )
+
+44 
+i
+=0; i<
+MAX_ITEMS
+; i++)
+
+46 
+sock
+ = 
+	`�_sock_��
+(
+NULL
+, 1024, 1024, 10, 30);
+
+47 if�
+	`�_��y_add
+(
+��y
+, 
+sock
+)<0 )
+
+49 
+	`�_sock_�rm
+(
+sock
+);
+
+53 if(
+i
+==3)
+
+55 
+tmp
+ = 
+sock
+;
+
+60 
+	`��tf
+("A�ay u�g�%d/%d \n", 
+	`�_��y_cou�
+(
+��y
+), 
+	`�_��y_size
+(array));
+
+62 
+	`�_��y_�av�
+(
+��y
+);
+
+64 if�!
+	`�_��y_rm_byd�a
+(
+��y
+, 
+tmp
+) )
+
+66 
+	`��tf
+("�mov��d��m���sock [%p] from��ay\n", 
+tmp
+);
+
+67 
+	`�_sock_�rm
+(
+tmp
+);
+
+69 
+	`�_��y_�av�
+(
+��y
+);
+
+71 
+	`�_li�_��y_f�_�ch
+(
+��y
+, 
+i
+, 
+sock
+)
+
+73 
+	`�_sock_�rm
+(
+sock
+);
+
+76 
+	`�_��y_�rm
+(
+��y
+);
+
+77 
+	`�_log_�rm
+();
+
+81 
+	}
+}
+
+	@test/test_hal.c
+
+14 
+	~<libg�.h
+>
+
+15 
+	~<g��t.h
+>
+
+16 
+	~"�_h�.h
+"
+
+18 
+	#HAL_LIBRARY_TEST
+
+
+	)
+
+20 
+	$��_�d_h�_�i
+()
+
+22 
+	`��tf
+("+------------------------------------+\n");
+
+23 
+	`��tf
+("| Test LED HAL API |\n");
+
+24 
+	`��tf
+("+------------------------------------+\n");
+
+26 
+	`��tf
+("Turn�ll LED off\n");
+
+27 
+	`h�_tu�_�d_off
+(
+LED_ALL
+);
+
+28 
+	`��p
+(2);
+
+30 
+	`��tf
+("Turn LED blink one by one\n");
+
+31 
+	`h�_tu�_�d_bl�k
+(
+LED_SYS
+, 
+MODE_FAST
+);
+
+32 
+	`h�_tu�_�d_bl�k
+(
+LED_SIM1
+, 
+MODE_FAST
+);
+
+33 
+	`h�_tu�_�d_bl�k
+(
+LED_SIM2
+, 
+MODE_FAST
+);
+
+34 
+	`h�_tu�_�d_bl�k
+(
+LED_WIFI
+, 
+MODE_FAST
+);
+
+35 
+	`h�_tu�_�d_bl�k
+(
+LED_ETH
+, 
+MODE_FAST
+);
+
+36 
+	`��p
+(4);
+
+38 
+	`��tf
+("Turn LED off one by one\n");
+
+39 
+	`h�_tu�_�d_off
+(
+LED_SYS
+);
+
+40 
+	`h�_tu�_�d_off
+(
+LED_SIM1
+);
+
+41 
+	`h�_tu�_�d_off
+(
+LED_SIM2
+);
+
+42 
+	`h�_tu�_�d_off
+(
+LED_WIFI
+);
+
+43 
+	`h�_tu�_�d_off
+(
+LED_ETH
+);
+
+44 
+	`��p
+(4);
+
+46 
+	`��tf
+("Turn LED on one by one\n");
+
+47 
+	`h�_tu�_�d_�
+(
+LED_SYS
+);
+
+48 
+	`h�_tu�_�d_�
+(
+LED_SIM1
+);
+
+49 
+	`h�_tu�_�d_�
+(
+LED_SIM2
+);
+
+50 
+	`h�_tu�_�d_�
+(
+LED_WIFI
+);
+
+51 
+	`h�_tu�_�d_�
+(
+LED_ETH
+);
+
+52 
+	`��p
+(4);
+
+54 
+	`��tf
+("Turn�ll LED off\n");
+
+55 
+	`h�_tu�_�d_off
+(
+LED_ALL
+);
+
+56 
+	`��p
+(2);
+
+58 
+	`��tf
+("Turn�ll LED blink\n");
+
+59 
+	`h�_tu�_�d_bl�k
+(
+LED_ALL
+, 
+MODE_SLOW
+);
+
+60 
+	`��p
+(4);
+
+62 
+	`��tf
+("Turn�ll LED on\n");
+
+63 
+	`h�_tu�_�d_�
+(
+LED_ALL
+);
+
+64 
+	`��p
+(4);
+
+65 
+	`h�_tu�_�d_off
+(
+LED_ALL
+);
+
+66 
+	}
+}
+
+68 
+	$��_buzz�_h�_�i
+()
+
+70 
+	`��tf
+("+------------------------------------+\n");
+
+71 
+	`��tf
+("| Test Buzzer HAL API |\n");
+
+72 
+	`��tf
+("+------------------------------------+\n");
+
+74 
+	`��tf
+("Turn buzzer on\n");
+
+75 
+	`h�_tu�_buzz�_�
+();
+
+76 
+	`��p
+(2);
+
+78 
+	`��tf
+("Turn buzzer off\n");
+
+79 
+	`h�_tu�_buzz�_off
+();
+
+80 
+	`��p
+(2);
+
+82 
+	`��tf
+("Turn buzzer beep for 5�imes\n");
+
+83 
+	`h�_tu�_buzz�_b�p
+(3);
+
+84 
+	`��p
+(4);
+
+86 
+	`��tf
+("Turn buzzer off\n");
+
+87 
+	`h�_tu�_buzz�_off
+();
+
+88 
+	`��p
+(3);
+
+90 
+	`��tf
+("Turn buzzer beep infinitely\n");
+
+91 
+	`h�_tu�_buzz�_b�p
+(0);
+
+92 
+	`��p
+(5);
+
+94 
+	`��tf
+("Turn buzzer off\n");
+
+95 
+	`h�_tu�_buzz�_off
+();
+
+96 
+	}
+}
+
+98 
+	$��_g�s_h�_�i
+()
+
+100 
+rv
+ = 0;
+
+102 
+	`��tf
+("+------------------------------------+\n");
+
+103 
+	`��tf
+("| Test GPRS HAL API |\n");
+
+104 
+	`��tf
+("+------------------------------------+\n");
+
+106 
+	`h�_pow��_g�s
+(
+SIM_NONE
+);
+
+108 
+rv
+ = 
+	`h�_check_simdo�
+(
+SIM_ALL
+);
+
+109 
+	`��tf
+("Check�� SIM c�d���� s�tus: 0x%02x\n", 
+rv
+);
+
+111 
+rv
+ = 
+	`h�_check_simdo�
+(
+SIM1
+);
+
+112 
+	`��tf
+("Check SIM1 c�d���� s�tus: 0x%02x\n", 
+rv
+);
+
+114 
+rv
+ = 
+	`h�_check_simdo�
+(
+SIM2
+);
+
+115 
+	`��tf
+("Check SIM2 c�d���� s�tus: 0x%02x\n", 
+rv
+);
+
+117 
+	`��tf
+("G� cu���w�k�g SIM c�d: 0x%02x\n", 
+	`h�_g�_w�ksim
+());
+
+119 
+	`h�_�t_w�ksim
+(
+SIM2
+);
+
+120 
+	`��tf
+("Set current working SIM�o SIM2\n");
+
+122 
+	`��tf
+("G� cu���w�k�g SIM c�d: 0x%02x\n", 
+	`h�_g�_w�ksim
+());
+
+124 
+	`h�_�t_w�ksim
+(
+SIM1
+);
+
+125 
+	`��tf
+("Set current working SIM�o SIM1\n");
+
+127 
+	`��tf
+("G� cu���w�k�g SIM c�d: 0x%02x\n", 
+	`h�_g�_w�ksim
+());
+
+128 
+	`h�_pow�off_g�s
+();
+
+130 
+	}
+}
+
+132 
+	$��t_u�ge
+(*
+�og�me
+)
+
+134 
+	`��tf
+("U�ge: %�[OPTION]...\n", 
+�og�me
+);
+
+135 
+	`��tf
+("\nMandatory�rguments�o�ong options�re mandatory for short options�oo:\n");
+
+137 
+	`��tf
+(" -l[led ] Test LED HAL API\n");
+
+138 
+	`��tf
+(" -b[buzzer ] Test Buzzer HAL API\n");
+
+139 
+	`��tf
+(" -g[gprs ] Test GPRS HAL API\n");
+
+140 
+	`��tf
+(" -h[help ] Display�his help information\n");
+
+143 
+	}
+}
+
+146 #ifde�
+HAL_LIBRARY_TEST
+
+
+153 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+155 
+�t
+;
+
+156 *
+�og�me
+=
+NULL
+;
+
+157 
+��_�d
+ = 0;
+
+158 
+��_g�s
+ = 0;
+
+159 
+��_buzz�
+ = 0;
+
+161 
+�ti�
+ 
+l�g_�ti�s
+[] = {
+
+162 {"�d", 
+no_�gum�t
+, 
+NULL
+, 'l'},
+
+163 {"buzz�", 
+no_�gum�t
+, 
+NULL
+, 'b'},
+
+164 {"g�s", 
+no_�gum�t
+, 
+NULL
+, 'g'},
+
+165 {"h�p", 
+no_�gum�t
+, 
+NULL
+, 'h'},
+
+166 {
+NULL
+, 0, NULL, 0}
+
+169 
+�og�me
+ = 
+	`ba��me
+(
+�gv
+[0]);
+
+171 (
+�t
+ = 
+	`g��t_l�g
+(
+�gc
+, 
+�gv
+, "bghl", 
+l�g_�ti�s
+, 
+NULL
+)) != -1)
+
+173 
+�t
+)
+
+176 
+��_buzz�
+ = 1;
+
+180 
+��_�d
+ = 1;
+
+184 
+��_g�s
+ = 1;
+
+188 
+	`��t_u�ge
+(
+�og�me
+);
+
+195 if(!
+��_buzz�
+ && !
+��_�d
+ && !
+��_g�s
+)
+
+196 
+	`��t_u�ge
+(
+�og�me
+);
+
+198 if(
+��_buzz�
+)
+
+199 
+	`��_buzz�_h�_�i
+();
+
+201 if(
+��_�d
+)
+
+202 
+	`��_�d_h�_�i
+();
+
+204 if(
+��_g�s
+)
+
+205 
+	`��_g�s_h�_�i
+();
+
+208 
+	}
+}
+
+	@test/test_hh.c
+
+14 
+	~<libg�.h
+>
+
+15 
+	~"�_comp�t.h
+"
+
+16 
+	#HH_DATAPORT
+ "/dev/�ySSHHR"
+
+	)
+
+24 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+26 
+i
+;
+
+27 
+COM_PORT
+ *
+comp�t
+ = 
+NULL
+;
+
+28 
+sbuf
+[10]={0x02, 0x48, 0x32, 0x03, 0x20, 0x00, 0x00, 0xF6, 0xBE, 0x03};
+
+29 
+rbuf
+[10];
+
+31 *
+HH_DATAPORT
+ = 
+NULL
+;
+
+33 if(
+�gc
+ != 2)
+
+35 
+	`��tf
+("U�ge: %�[devi��ame]\n", 
+	`ba��me
+(
+�gv
+[0]));
+
+38 
+HH_DATAPORT
+ = 
+�gv
+[1];
+
+41 if�!(
+comp�t
+=
+	`comp�t_��
+(
+HH_DATAPORT
+, 115200, "8N1N")) )
+
+43 
+	`��tf
+("In��li� comp܈%��u�\n", 
+HH_DATAPORT
+);
+
+47 if(
+	`comp�t_ݒ
+(
+comp�t
+)<0)
+
+49 
+	`��tf
+("O��comp܈%��u�\n", 
+HH_DATAPORT
+);
+
+53 if(
+	`comp�t_�nd
+(
+comp�t
+, (*)
+sbuf
+, (sbuf)) < 0)
+
+55 
+	`��tf
+("S�d 10 by��d��t�%��u�\n", 
+HH_DATAPORT
+);
+
+58 
+	`��tf
+("S�d %d by��d��t�%s:\n>>", (
+sbuf
+), 
+HH_DATAPORT
+);
+
+59 
+i
+=0; i<10; i++)
+
+61 
+	`��tf
+("%02x ", 
+sbuf
+[
+i
+]);
+
+63 
+	`��tf
+("\n");
+
+66 
+	`mem�t
+(
+rbuf
+, 0, (rbuf));
+
+67 if((
+i
+=
+	`comp�t_�cv
+(
+comp�t
+, (*)
+rbuf
+, (rbuf), 5000)) < 0)
+
+69 
+	`��tf
+("Re�iv�10 by��d��t�%��u�\n", 
+HH_DATAPORT
+);
+
+73 
+	`��tf
+("Re�iv�%d by��d���om %s:\n<<", 
+i
+, 
+HH_DATAPORT
+);
+
+74 
+i
+=0; i<10; i++)
+
+76 
+	`��tf
+("%02x ", 
+rbuf
+[
+i
+]);
+
+78 
+	`��tf
+("\n");
+
+80 
+	`comp�t_�rm
+(
+comp�t
+);
+
+83 
+	}
+}
+
+	@test/test_ini.c
+
+14 
+	~"�_����r.h
+"
+
+17 
+	#INI_CONF
+ "�m�e.�i"
+
+	)
+
+25 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+27 
+di�iڬy
+ *
+�i
+;
+
+28 
+FILE
+ *
+�
+;
+
+30 
+�i
+=
+	`����r_l�d
+(
+INI_CONF
+);
+
+32 
+�
+=
+	`fݒ
+(
+INI_CONF
+, "w+");
+
+34 
+	`����r_�t
+(
+�i
+, "section1:key1", "30");
+
+37 
+	`����r_dump
+(
+�i
+, 
+�d�r
+);
+
+39 
+	`����r_dump_�i
+(
+�i
+, 
+�
+);
+
+42 
+	`����r_�di�
+(
+�i
+);
+
+46 
+	}
+}
+
+	@test/test_klist.c
+
+14 
+	~"�_kli�.h
+"
+
+15 
+	~"�_sock.h
+"
+
+19 
+	$�av�_li�
+(
+li�_h�d
+ *
+h�d
+)
+
+21 
+CP_SOCK
+ *
+sock
+, *
+tsock
+;
+
+24 if�(
+sock
+=
+	`�_sock_��
+(
+NULL
+, 
+CP_SOCK_RCVBUF
+, 
+CP_SOCK_SNDBUF
+, 
+CP_SOCK_KEEPINTVL
+, 
+CP_SOCK_KEEPCNT
+)) )
+
+26 
+	`li�_add_��
+(&
+sock
+->
+�i�
+, 
+h�d
+);
+
+27 
+	`��tf
+("Add�ew sock� %�t�sock_li� \n", 
+sock
+);
+
+31 
+	`li�_f�_�ch_��y_��
+(
+sock
+, 
+tsock
+, 
+h�d
+, 
+�i�
+)
+
+33 
+	`��tf
+("T�v�2 sock��i� o�sock� %p\n", 
+sock
+);
+
+35 
+	}
+}
+
+44 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+46 
+i
+;
+
+47 
+li�_h�d
+ 
+sock_li�
+;
+
+48 
+CP_SOCK
+ *
+sock
+, *
+tsock
+;
+
+50 
+	`INIT_LIST_HEAD
+(&
+sock_li�
+);
+
+52 
+i
+=0; i<10; i++)
+
+54 if�(
+sock
+=
+	`�_sock_��
+(
+NULL
+, 
+CP_SOCK_RCVBUF
+, 
+CP_SOCK_SNDBUF
+, 
+CP_SOCK_KEEPINTVL
+, 
+CP_SOCK_KEEPCNT
+)) )
+
+56 
+	`li�_add_��
+(&
+sock
+->
+�i�
+, &
+sock_li�
+);
+
+57 
+	`��tf
+("Add sock� %�t�sock_li� \n", 
+sock
+);
+
+62 
+	`li�_f�_�ch_��y
+(
+sock
+, &
+sock_li�
+, 
+�i�
+)
+
+64 
+	`��tf
+("T�v� sock��i� o�sock� %p\n", 
+sock
+);
+
+67 
+	`�av�_li�
+(&
+sock_li�
+);
+
+70 
+	`li�_f�_�ch_��y_��
+(
+sock
+, 
+tsock
+, &
+sock_li�
+, 
+�i�
+)
+
+72 
+	`li�_d�
+(&
+sock
+->
+�i�
+);
+
+73 
+	`�_sock_�rm
+(
+sock
+);
+
+74 
+	`��tf
+("Remov��d de�roy sock� %��om sock��i�\n", 
+sock
+);
+
+78 
+	}
+}
+
+	@test/test_logger.c
+
+14 
+	~<uni�d.h
+>
+
+15 
+	~<�dio.h
+>
+
+16 
+	~<�r�g.h
+>
+
+17 
+	~<libg�.h
+>
+
+18 
+	~"�_logg�.h
+"
+
+27 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+29 
+buf
+[30]="Hello World!\n";
+
+30 
+f�e
+[
+FILENAME_LEN
+];
+
+32 
+	`���tf
+(
+f�e
+, 
+FILENAME_LEN
+, "%s.log", 
+	`ba��me
+(
+�gv
+[0]) );
+
+36 if(! 
+	`�_log_��
+(
+NULL
+, 
+f�e
+, 
+LOG_LEVEL_MAX
+, 12�|| 
+	`�_log_ݒ
+() )
+
+42 
+	`log_�fo
+("1connection.\n");
+
+43 
+	`log_dbg
+("2connection.\n");
+
+44 
+	`log_�ml
+("3connection.\n");
+
+45 
+	`log_w�n
+("4connection.\n");
+
+46 
+	`log_�r
+("5connection.\n");
+
+47 
+	`log_�l
+("6connection.\n");
+
+49 
+	`�_log_dump
+(
+LOG_LEVEL_DEBUG
+, 
+buf
+, 30);
+
+51 
+	`��p
+(1);
+
+54 
+	`�_log_�rm
+();
+
+57 
+	}
+}
+
+	@test/test_queue.c
+
+14 
+	~<�dio.h
+>
+
+15 
+	~<�r�g.h
+>
+
+16 
+	~<�dlib.h
+>
+
+18 
+	~"�_queue.h
+"
+
+19 
+	~"�_sock.h
+"
+
+21 
+	#MAX_ITEMS
+ 10
+
+	)
+
+29 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+31 
+i
+;
+
+33 
+CP_SOCK
+ *
+sock
+ = 
+NULL
+;
+
+34 
+CP_SOCK
+ *
+tmp
+ = 
+NULL
+;
+
+36 
+CP_QUEUE
+ *
+queue
+ = 
+NULL
+;
+
+38 
+queue
+ = 
+	`�_queue_��
+(
+NULL
+, 
+MAX_ITEMS
+);
+
+41 
+i
+=0; i<
+MAX_ITEMS
++10; i++)
+
+44 
+sock
+ = 
+	`�_sock_��
+(
+NULL
+, 1024, 1024, 10, 30);
+
+45 if�
+NULL
+==
+	`�_�queue
+(
+queue
+, 
+sock
+) )
+
+47 
+	`�_sock_�rm
+(
+sock
+);
+
+51 if(
+i
+==3)
+
+53 
+tmp
+ = 
+sock
+;
+
+55 
+	`��tf
+("�queu�sock %p\n", 
+sock
+);
+
+60 
+	`��tf
+("queu�u�g�%d/%d \n", 
+	`�_queue_cou�
+(
+queue
+), 
+	`�_queue_size
+(queue));
+
+62 
+	`�_�av�_queue
+(
+queue
+);
+
+63 if�
+	`�_rmqueue
+(
+queue
+, 
+tmp
+) )
+
+65 
+	`��tf
+("�mov��d��m���sock [%p] from queue\n", 
+tmp
+);
+
+66 
+	`�_sock_�rm
+(
+tmp
+);
+
+68 
+	`�_�av�_queue
+(
+queue
+);
+
+70 !
+	`�_queue_is_em�y
+(
+queue
+))
+
+72 if�(
+sock
+=
+	`�_dequeue
+(
+queue
+)) )
+
+74 
+	`��tf
+("T�m���sock�: %p\n", 
+sock
+);
+
+75 
+	`�_sock_�rm
+(
+sock
+);
+
+79 
+	`�_queue_de�roy
+(
+queue
+);
+
+83 
+	}
+}
+
+	@test/test_sock_client.c
+
+14 
+	~"�_�tw�k.h
+"
+
+15 
+	~"�_logg�.h
+"
+
+16 
+	~"�_�oc.h
+"
+
+17 
+	~"�_time.h
+"
+
+21 
+	#SERV_ADDR
+ "192.168.1.78"
+
+	)
+
+23 
+	#SERV_PORT
+ 8880
+
+	)
+
+25 
+	$�rvi�_rou�
+(
+CP_SOCK
+ *
+sock
+)
+
+27 
+rv
+;
+
+29 if�!
+sock
+ )
+
+32 
+	`��tf
+("Cl�� sock� [%d] g��v�t: %d\n", 
+sock
+->
+fd
+, sock->
+ev�t
+.
+ev�ts
+);
+
+33 if(
+sock
+->
+ev�t
+.
+ev�ts
+ & 
+EPOLLIN
+)
+
+35 
+rv
+ = 
+	`�_sock_�cv
+(
+sock
+);
+
+36 if(!
+rv
+)
+
+38 
+	`log_�ml
+("Socket [%d %s:%d]�emote socket [%s:%d] disconnect,�emove it�ow\n",
+
+39 
+sock
+->
+fd
+, sock->
+�ddr
+, sock->
+��t
+, sock->
+�ddr
+, sock->
+��t
+);
+
+41 
+	`�_fds_de�roy_sock
+(
+sock
+);
+
+42 
+g_�_sig�l
+.
+��
+ = 1;
+
+46 if(
+rv
+ > 0)
+
+48 
+	`log_�ml
+("Sock� [%d %s:%d]�e�iv�[%d] by��d�a:\n", 
+sock
+->
+fd
+, sock->
+�ddr
+, sock->
+��t
+, sock->
+rbuf
+->
+�n
+);
+
+49 
+	`�_log_dump
+(
+LOG_LEVEL_DEBUG
+, 
+sock
+->
+rbuf
+->
+d�a
+, sock->rbuf->
+�n
+);
+
+50 
+	`�_�r�g_��r_d�a
+(
+sock
+->
+rbuf
+);
+
+55 
+	}
+}
+
+64 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+66 
+CP_FDS
+ *
+fds
+;
+
+67 
+CP_SOCK
+ *
+sock
+ = 
+NULL
+;
+
+69 i��!
+	`�_log_��
+(
+NULL
+, 
+DBG_LOG_FILE
+, 
+LOG_LEVEL_NRML
+, 
+LOG_ROLLBACK_NONE
+�|| 
+	`�_log_ݒ
+() )
+
+73 
+	`�_���l_�oc_sig�l
+();
+
+75 if�!(
+fds
+=
+	`�_fds_��
+(
+NULL
+, 
+CP_DEF_MAX_EVENTS
+, 
+CP_DEF_FDS_TIMEOUT
+)) )
+
+78  !
+g_�_sig�l
+.
+��
+ )
+
+80 
+sock
+ = 
+	`�_sock_c���_�gi�
+(
+fds
+, sock, 
+SERV_ADDR
+, 
+SERV_PORT
+, 0, 
+�rvi�_rou�
+);
+
+81 if�
+sock
+ && sock->
+��us
+==
+SOCK_STAT_CONNECTING
+)
+
+84 
+	`��p
+(1);
+
+87 if(!
+sock
+ || sock->
+��us
+!=
+SOCK_STAT_CONNECTED
+)
+
+92 
+	`�_�r�g_c�r�y
+(
+sock
+->
+sbuf
+, "Hello World!\n");
+
+93 
+	`��tf
+("S�d buf�d�a: %s", 
+	`�_�r�g_d�a
+(
+sock
+->
+sbuf
+));
+
+94 
+	`�_sock_�nd
+(
+sock
+);
+
+96 
+	`�_fds_d�e�_ev�t
+(
+fds
+);
+
+98 
+	`�_fds_�oc_ev�t
+(
+fds
+);
+
+100 
+	`mi�o_�c�d_��p
+(100);
+
+103 
+	`�_sock_�rm_�l_�rvi�_��r
+(
+fds
+);
+
+105 
+	`�_log_�rm
+();
+
+108 
+	}
+}
+
+	@test/test_sock_server.c
+
+14 
+	~"�_�tw�k.h
+"
+
+15 
+	~"�_logg�.h
+"
+
+16 
+	~"�_�oc.h
+"
+
+17 
+	~"�_time.h
+"
+
+20 
+	#SERV_PORT1
+ 8880
+
+	)
+
+21 
+	#SERV_PORT2
+ 8881
+
+	)
+
+23 
+	#DOMAIN
+ "kk��l.oi�.�t"
+
+	)
+
+24 
+	#IPADDR
+ "192.168.1.78"
+
+	)
+
+26 
+	$�rvi�_rou�
+(
+CP_SOCK
+ *
+sock
+)
+
+28 
+rv
+ = 0;
+
+29 
+	`log_�ml
+("Pro�s�sock� [%d %s:%d] g��v��[%d]\n", 
+sock
+->
+fd
+, sock->
+�ddr
+, sock->
+��t
+, sock->
+ev�t
+.
+ev�ts
+);
+
+31 if(
+sock
+->
+ev�t
+.
+ev�ts
+ & 
+EPOLLIN
+)
+
+33 
+rv
+ = 
+	`�_sock_�cv
+(
+sock
+);
+
+34 if(0==
+rv
+)
+
+36 
+	`log_�ml
+("Socket [%d %s:%d]�emote socket [%s:%d] disconnect,�emove it�ow\n",
+
+37 
+sock
+->
+fd
+, sock->
+�ddr
+, sock->
+��t
+, sock->
+�ddr
+, sock->
+��t
+);
+
+39 
+	`�_fds_de�roy_sock
+(
+sock
+);
+
+43 if(
+rv
+ > 0)
+
+45 
+	`log_�ml
+("Sock�[%d]�ecv buf�%d by��d�a:\n", 
+sock
+->
+fd
+, sock->
+rbuf
+->
+�n
+);
+
+48 
+	`�_�r�g_move
+(
+sock
+->
+sbuf
+, sock->
+rbuf
+);
+
+50 
+	`log_�ml
+("Sock�[%d] s�d buf�%d by��d�a:\n", 
+sock
+->
+fd
+, sock->
+sbuf
+->
+�n
+);
+
+51 
+	`�_sock_�nd
+(
+sock
+);
+
+52 
+	`�_�r�g_��r_d�a
+(
+sock
+->
+sbuf
+);
+
+57 
+	}
+}
+
+65 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+67 
+CP_FDS
+ *
+fds
+;
+
+68 
+CP_SOCK
+ *
+sock
+;
+
+71 i�(!
+	`�_log_��
+(
+NULL
+, 
+DBG_LOG_FILE
+, 
+LOG_LEVEL_MAX
+, 
+LOG_ROLLBACK_NONE
+�|| 
+	`�_log_ݒ
+())
+
+72 
+��nup
+;
+
+74 
+	`�_���l_�oc_sig�l
+();
+
+76 if�!(
+fds
+=
+	`�_fds_��
+(
+NULL
+, 
+CP_DEF_MAX_EVENTS
+, 
+CP_DEF_FDS_TIMEOUT
+)) )
+
+77 
+��nup
+;
+
+79 if�!(
+sock
+=
+	`�_sock_�rv�_�gi�
+(
+fds
+, 
+NULL
+, 
+SERV_PORT1
+, 0, 
+�rvi�_rou�
+, NULL)) )
+
+80 
+��nup
+;
+
+82 if�!(
+sock
+=
+	`�_sock_�rv�_�gi�
+(
+fds
+, 
+NULL
+, 
+SERV_PORT2
+, 0, 
+�rvi�_rou�
+, NULL)) )
+
+83 
+��nup
+;
+
+85  !
+g_�_sig�l
+.
+��
+ )
+
+87 
+	`�_fds_d�e�_ev�t
+(
+fds
+);
+
+88 
+	`�_fds_�oc_ev�t
+(
+fds
+);
+
+89 
+	`mi�o_�c�d_��p
+(10);
+
+92 
+��nup
+:
+
+93 
+	`�_sock_�rm_�l_�rvi�_��r
+(
+fds
+);
+
+94 
+	`�_log_�rm
+();
+
+96 
+	}
+}
+
+	@test/test_string.c
+
+14 
+	~<�_�r�g.h
+>
+
+23 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+25 
+i
+;
+
+26 
+�_�r�g
+ *
+rcv
+;
+
+27 
+�_�r�g
+ *
+�d
+;
+
+29 
+rcv
+ = 
+	`�_�r�g_���_em�y
+(64);
+
+30 
+�d
+ = 
+	`�_�r�g_���_em�y
+(64);
+
+32 
+	`��tf
+("=======================\n");
+
+33 
+	`��tf
+("Test cp_string_copy \n");
+
+34 
+	`��tf
+("=======================\n");
+
+35 
+	`�_�r�g_��r_d�a
+(
+rcv
+);
+
+36 
+	`�_�r�g_c�r�y
+(
+rcv
+, "Hello world!");
+
+37 
+	`��tf
+("Receive buffer data:\n");
+
+38 
+	`�_�r�g_dump
+(
+rcv
+);
+
+40 
+i
+=0; i<20; i++)
+
+42 if�
+	`�_�r�g_c�y
+(
+�d
+, 
+rcv
+) > 0)
+
+44 
+	`��tf
+("[%d] S�d buf�d�a:\n", 
+i
+);
+
+45 
+	`�_�r�g_dump
+(
+�d
+);
+
+49 
+	`��tf
+("\n=======================\n");
+
+50 
+	`��tf
+("Test cp_string_move \n");
+
+51 
+	`��tf
+("=======================\n");
+
+53 
+	`�_�r�g_��r_d�a
+(
+�d
+);
+
+54 
+	`�_�r�g_��r_d�a
+(
+rcv
+);
+
+55 
+i
+=0; i<20; i++)
+
+57 
+	`�_�r�g_c�r�y
+(
+rcv
+, "Hello world!");
+
+59 
+	`�_�r�g_dump
+(
+rcv
+);
+
+61 if�
+	`�_�r�g_move
+(
+�d
+, 
+rcv
+) > 0)
+
+63 
+	`��tf
+("[%d] S�d buf�[%d] by��d�a:\n", 
+i
+, 
+	`�_�r�g_�n
+(
+�d
+));
+
+64 
+	`�_�r�g_dump
+(
+�d
+);
+
+66 
+	`��tf
+("[%d]�e�iv�buf�[%d] by��d�a:\n", 
+i
+, 
+	`�_�r�g_�n
+(
+rcv
+));
+
+67 
+	`�_�r�g_dump
+(
+rcv
+);
+
+71 
+	`�_�r�g_de�roy
+(
+rcv
+);
+
+72 
+	`�_�r�g_de�roy
+(
+�d
+);
+
+76 
+	}
+}
+
+	@test/test_vector.c
+
+14 
+	~<�dio.h
+>
+
+15 
+	~<�r�g.h
+>
+
+16 
+	~<�dlib.h
+>
+
+18 
+	~"�_ve��.h
+"
+
+19 
+	~"�_sock.h
+"
+
+27 
+	$ma�
+ (
+�gc
+, **
+�gv
+)
+
+30 
+i
+, 
+n
+;
+
+31 
+CP_SOCK
+ *
+p
+ = 
+NULL
+;
+
+33 
+CP_VECTOR
+ *
+v
+ = 
+	`�_ve��_��
+(1024);
+
+35 
+i
+ = 0; i < 10; i++)
+
+37 
+p
+ = 
+	`�_sock_��
+(
+NULL
+, 1024, 1024, 10, 30);
+
+38 
+	`�_ve��_add
+(
+v
+, 
+i
+, 
+p
+);
+
+41 
+n
+ = 
+	`�_ve��_cou�
+(
+v
+);
+
+42 
+i
+ = 0; i < 
+n
+; i++)
+
+44 
+p
+ = 
+	`�_ve��_g�
+(
+v
+, 
+i
+);
+
+45 
+	`��tf
+("%d: %p\n", 
+i
+, 
+p
+);
+
+48 
+p
+ = 
+	`�_sock_��
+(
+NULL
+, 1024, 1024, 10, 30);
+
+49 
+	`�_ve��_add
+(
+v
+, 28, 
+p
+);
+
+50 
+	`��tf
+("S� 28: %p\n", 
+p
+);
+
+52 
+i
+=0; i <
+	`�_ve��_size
+(
+v
+); i++)
+
+54 
+p
+ = 
+	`�_ve��_g�
+(
+v
+, 
+i
+);
+
+55 if(
+p
+)
+
+57 
+	`��tf
+("T�m���sock� %i: %p\n", 
+i
+, 
+p
+);
+
+58 
+	`�_sock_�rm
+(
+p
+);
+
+62 
+	`�_ve��_de�roy
+(
+v
+);
+
+66 
+	}
+}
+
+	@/usr/include/arpa/inet.h
+
+18 #i�de�
+_ARPA_INET_H
+
+
+19 
+	#_ARPA_INET_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+22 
+	~<�t��/�.h
+>
+
+25 #i�de�
+__sock�n_t_def�ed
+
+
+26 
+__sock�n_t
+ 
+	tsock�n_t
+;
+
+27 
+	#__sock�n_t_def�ed
+
+
+	)
+
+30 
+__BEGIN_DECLS
+
+
+34 
+�_addr_t
+ 
+	$��_addr
+ (cڡ *
+__�
+�
+__THROW
+;
+
+37 
+�_addr_t
+ 
+	$��_�aof
+ (
+�_addr
+ 
+__�
+�
+__THROW
+;
+
+41 

+�_addr
+ 
+	$��_mak�ddr
+ (
+�_addr_t
+ 
+__�t
+, in_addr_�
+__ho�
+)
+
+42 
+__THROW
+;
+
+45 
+�_addr_t
+ 
+	$��_�tof
+ (
+�_addr
+ 
+__�
+�
+__THROW
+;
+
+49 
+�_addr_t
+ 
+	$��_�tw�k
+ (cڡ *
+__�
+�
+__THROW
+;
+
+53 
*
+	$��_��
+ (
+�_addr
+ 
+__�
+�
+__THROW
+;
+
+58 

+	$��_��
+ (
+__af
+, cڡ *
+__��ri�
+ 
+__�
+,
+
+59 *
+__��ri�
+ 
+__buf
+�
+__THROW
+;
+
+64 
cڡ *
+	$��_��
+ (
+__af
+, cڡ *
+__��ri�
+ 
+__�
+,
+
+65 *
+__��ri�
+ 
+__buf
+, 
+sock�n_t
+ 
+__�n
+)
+
+66 
+__THROW
+;
+
+70 #ifde�
+__USE_MISC
+
+
+73 

+	$��_��
+ (cڡ *
+__�
+, 
+�_addr
+ *
+__�p
+�
+__THROW
+;
+
+77 
*
+	$��_Ï
+ (
+�_addr_t
+ 
+__�t
+, *
+__buf
+, 
+size_t
+ 
+__�n
+�
+__THROW
+;
+
+82 
*
+	$��_�t_��
+ (
+__af
+, cڡ *
+__�
+, 
+__b�s
+,
+
+83 *
+__buf
+, 
+size_t
+ 
+__�n
+�
+__THROW
+;
+
+88 

+	$��_�t_��
+ (
+__af
+, cڡ *
+__�
+,
+
+89 *
+__buf
+, 
+size_t
+ 
+__�n
+�
+__THROW
+;
+
+94 

+	$��_n�p_addr
+ (cڡ *
+__�
+,
+
+95 *
+__buf
+, 
+__�n
+�
+__THROW
+;
+
+99 
*
+	$��_n�p_��
+ (
+__�n
+, cڡ *
+__�
+,
+
+100 *
+__buf
+�
+__THROW
+;
+
+103 
+__END_DECLS
+
+
+	@/usr/include/asm/ioctl.h
+
+1 
+	~<asm-g��ic/io�l.h
+>
+
+	@/usr/include/assert.h
+
+22 #ifdef 
+_ASSERT_H
+
+
+24 #unde�
+_ASSERT_H
+
+
+25 #unde�
+as��
+
+
+26 #unde�
+__ASSERT_VOID_CAST
+
+
+28 #ifdef 
+__USE_GNU
+
+
+29 #unde�
+as��_���
+
+
+34 
+	#_ASSERT_H
+ 1
+
+	)
+
+35 
+	~<�u�s.h
+>
+
+37 #i�
+def�ed
+ 
+__�lu�lus
+ && 
+__GNUC_PREREQ
+ (2,95)
+
+38 
+	#__ASSERT_VOID_CAST
+ 
+��ic_��
+<>
+
+	)
+
+40 
+	#__ASSERT_VOID_CAST
+ ()
+
+	)
+
+48 #ifdef 
+NDEBUG
+
+
+50 
+	#as��
+(
+ex�
+�(
+	`__ASSERT_VOID_CAST
+ (0))
+
+	)
+
+58 #ifdef 
+__USE_GNU
+
+
+59 
+	#as��_���
+(
+��um
+�(
+	`__ASSERT_VOID_CAST
+ (0))
+
+	)
+
+64 #i�de�
+_ASSERT_H_DECLS
+
+
+65 
+	#_ASSERT_H_DECLS
+
+
+	)
+
+66 
+__BEGIN_DECLS
+
+
+69 

+	$__as��_�
+ (cڡ *
+__as��i�
+, cڡ *
+__f�e
+,
+
+70 
+__l�e
+, cڡ *
+__fun�i�
+)
+
+71 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+74 

+	$__as��_���_�
+ (
+__��um
+, cڡ *
+__f�e
+,
+
+75 
+__l�e
+, cڡ *
+__fun�i�
+)
+
+76 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+81 

+	$__as��
+ (cڡ *
+__as��i�
+, cڡ *
+__f�e
+, 
+__l�e
+)
+
+82 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+85 
+__END_DECLS
+
+
+88 
+	#as��
+(
+ex�
+) \
+
+89 ((
+ex�
+) \
+
+90 ? 
+	`__ASSERT_VOID_CAST
+ (0) \
+
+91 : 
+	`__as��_�
+ (
+	`__STRING
+(
+ex�
+), 
+__FILE__
+, 
+__LINE__
+, 
+__ASSERT_FUNCTION
+))
+
+	)
+
+93 #ifdef 
+__USE_GNU
+
+
+94 
+	#as��_���
+(
+��um
+) \
+
+95 (!(
+��um
+) \
+
+96 ? 
+	`__ASSERT_VOID_CAST
+ (0) \
+
+97 : 
+	`__as��_���_�
+ ((
+��um
+), 
+__FILE__
+, 
+__LINE__
+, 
+__ASSERT_FUNCTION
+))
+
+	)
+
+105 #i�
+def�ed
+ 
+__�lu�lus
+ ? 
+	`__GNUC_PREREQ
+ (2, 6) : __GNUC_PREREQ (2, 4)
+
+106 
+	#__ASSERT_FUNCTION
+ 
+__PRETTY_FUNCTION__
+
+
+	)
+
+108 #i�
+def�ed
+ 
+__STDC_VERSION__
+ && __STDC_VERSION__ >= 199901L
+
+109 
+	#__ASSERT_FUNCTION
+ 
+__func__
+
+
+	)
+
+111 
+	#__ASSERT_FUNCTION
+ ((cڡ *�0)
+
+	)
+
+118 #i�
+def�ed
+ 
+__USE_ISOC11
+ && !def�ed 
+__�lu�lus
+
+
+120 #unde�
+��ic_as��
+
+
+121 
+	#��ic_as��
+ 
+_S�tic_as��
+
+
+	)
+
+	@/usr/include/ctype.h
+
+22 #i�def 
+_CTYPE_H
+
+
+23 
+	#_CTYPE_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+26 
+	~<b�s/ty�s.h
+>
+
+28 
+	g__BEGIN_DECLS
+
+
+30 #i�de�
+_ISb�
+
+
+39 
+	~<�d�n.h
+>
+
+40 #i�
+__BYTE_ORDER
+ =�
+__BIG_ENDIAN
+
+
+41 
+	#_ISb�
+(
+b�
+�(1 << (b�))
+
+	)
+
+43 
+	#_ISb�
+(
+b�
+�((b��< 8 ? ((1 << (b�)�<< 8�: ((1 << (b�)�>> 8))
+
+	)
+
+48 
+	m_ISu��
+ = 
+_ISb�
+ (0),
+
+49 
+	m_ISlow�
+ = 
+_ISb�
+ (1),
+
+50 
+	m_IS�pha
+ = 
+_ISb�
+ (2),
+
+51 
+	m_ISdig�
+ = 
+_ISb�
+ (3),
+
+52 
+	m_ISxdig�
+ = 
+_ISb�
+ (4),
+
+53 
+	m_IS�a�
+ = 
+_ISb�
+ (5),
+
+54 
+	m_IS��t
+ = 
+_ISb�
+ (6),
+
+55 
+	m_ISg�ph
+ = 
+_ISb�
+ (7),
+
+56 
+	m_ISb�nk
+ = 
+_ISb�
+ (8),
+
+57 
+	m_IS��l
+ = 
+_ISb�
+ (9),
+
+58 
+	m_ISpun�
+ = 
+_ISb�
+ (10),
+
+59 
+	m_IS�num
+ = 
+_ISb�
+ (11)
+
+79 
cڡ **
+	$__�y�_b_loc
+ ()
+
+80 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+81 
cڡ 
+__�t32_t
+ **
+	$__�y�_t�ow�_loc
+ ()
+
+82 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+83 
cڡ 
+__�t32_t
+ **
+	$__�y�_tou��_loc
+ ()
+
+84 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+87 #i�de�
+__�lu�lus
+
+
+88 
+	#__is�y�
+(
+c
+, 
+ty�
+) \
+
+89 ((*
+	`__�y�_b_loc
+ ())[(�(
+c
+)] & (�
+ty�
+)
+
+	)
+
+90 #�i�
+def�ed
+ 
+__USE_EXTERN_INLINES
+
+
+91 
+	#__is�y�_f
+(
+ty�
+) \
+
+92 
+__ex��_�l�e
+ \
+
+93 
+is
+##
+	`ty�
+ (
+__c
+�
+__THROW
+ \
+
+95  (*
+	`__�y�_b_loc
+ ())[(�(
+__c
+)] & (�
+_IS
+##
+ty�
+; \
+
+96 
+	}
+
+	)
+}
+
+99 
+	#__i�scii
+(
+c
+�(((c�& ~0x7f�=�0�
+
+	)
+
+100 
+	#__t�scii
+(
+c
+�((c�& 0x7f�
+
+	)
+
+102 
+	#__ex�y�
+(
+�me
+�

+	`�me
+ (�
+__THROW
+
+
+	)
+
+104 
+__BEGIN_NAMESPACE_STD
+
+
+110 
+__ex�y�
+ (
+i��um
+);
+
+111 
+__ex�y�
+ (
+i��ha
+);
+
+112 
+__ex�y�
+ (
+is��l
+);
+
+113 
+__ex�y�
+ (
+isdig�
+);
+
+114 
+__ex�y�
+ (
+i�ow�
+);
+
+115 
+__ex�y�
+ (
+isg�ph
+);
+
+116 
+__ex�y�
+ (
+i�r�t
+);
+
+117 
+__ex�y�
+ (
+i�un�
+);
+
+118 
+__ex�y�
+ (
+is�a�
+);
+
+119 
+__ex�y�
+ (
+isu��
+);
+
+120 
+__ex�y�
+ (
+isxdig�
+);
+
+124 

+	$t�ow�
+ (
+__c
+�
+__THROW
+;
+
+127 

+	$tou��
+ (
+__c
+�
+__THROW
+;
+
+129 
+__END_NAMESPACE_STD
+
+
+133 #ifdef 
+__USE_ISOC99
+
+
+134 
+__BEGIN_NAMESPACE_C99
+
+
+136 
+	`__ex�y�
+ (
+isb�nk
+);
+
+138 
+__END_NAMESPACE_C99
+
+
+141 #ifde�
+__USE_GNU
+
+
+143 

+	$is�y�
+ (
+__c
+, 
+__mask
+�
+__THROW
+;
+
+146 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN
+
+
+150 

+	$i�scii
+ (
+__c
+�
+__THROW
+;
+
+154 

+	$t�scii
+ (
+__c
+�
+__THROW
+;
+
+158 
+	`__ex�y�
+ (
+_tou��
+);
+
+159 
+	`__ex�y�
+ (
+_t�ow�
+);
+
+163 
+	#__tobody
+(
+c
+, 
+f
+, 
+a
+, 
+�gs
+) \
+
+164 (
+__ex�nsi�__
+ \
+
+165 ({ 
+__�s
+; \
+
+166 i�( (
+c
+) > 1) \
+
+168 i�(
+	`__bu�t�_cڡ�t_p
+ (
+c
+)) \
+
+170 
+__c
+ = (
+c
+); \
+
+171 
+__�s
+ = 
+__c
+ < -128 || __�> 255 ? __�: (
+a
+)[__c]; \
+
+174 
+__�s
+ = 
+f
+ 
+�gs
+; \
+
+177 
+__�s
+ = (
+a
+)[(�(
+c
+)]; \
+
+178 
+__�s
+; 
+	}
+}))
+
+	)
+
+180 #i�!
+def�ed
+ 
+__NO_CTYPE
+
+
+181 #ifde�
+__is�y�_f
+
+
+182 
+	$__is�y�_f
+ (
+�num
+)
+
+183 
+	$__is�y�_f
+ (
+�pha
+)
+
+184 
+	$__is�y�_f
+ (
+��l
+)
+
+185 
+	$__is�y�_f
+ (
+dig�
+)
+
+186 
+	$__is�y�_f
+ (
+low�
+)
+
+187 
+	$__is�y�_f
+ (
+g�ph
+)
+
+188 
+	$__is�y�_f
+ (
+��t
+)
+
+189 
+	$__is�y�_f
+ (
+pun�
+)
+
+190 
+	$__is�y�_f
+ (
+�a�
+)
+
+191 
+	$__is�y�_f
+ (
+u��
+)
+
+192 
+	$__is�y�_f
+ (
+xdig�
+)
+
+193 #ifde�
+__USE_ISOC99
+
+
+194 
+	$__is�y�_f
+ (
+b�nk
+)
+
+196 #�i�
+def�ed
+ 
+__is�y�
+
+
+197 
+	#i��um
+(
+c
+�
+	`__is�y�
+((c), 
+_IS�num
+)
+
+	)
+
+198 
+	#i��ha
+(
+c
+�
+	`__is�y�
+((c), 
+_IS�pha
+)
+
+	)
+
+199 
+	#is��l
+(
+c
+�
+	`__is�y�
+((c), 
+_IS��l
+)
+
+	)
+
+200 
+	#isdig�
+(
+c
+�
+	`__is�y�
+((c), 
+_ISdig�
+)
+
+	)
+
+201 
+	#i�ow�
+(
+c
+�
+	`__is�y�
+((c), 
+_ISlow�
+)
+
+	)
+
+202 
+	#isg�ph
+(
+c
+�
+	`__is�y�
+((c), 
+_ISg�ph
+)
+
+	)
+
+203 
+	#i�r�t
+(
+c
+�
+	`__is�y�
+((c), 
+_IS��t
+)
+
+	)
+
+204 
+	#i�un�
+(
+c
+�
+	`__is�y�
+((c), 
+_ISpun�
+)
+
+	)
+
+205 
+	#is�a�
+(
+c
+�
+	`__is�y�
+((c), 
+_IS�a�
+)
+
+	)
+
+206 
+	#isu��
+(
+c
+�
+	`__is�y�
+((c), 
+_ISu��
+)
+
+	)
+
+207 
+	#isxdig�
+(
+c
+�
+	`__is�y�
+((c), 
+_ISxdig�
+)
+
+	)
+
+208 #ifde�
+__USE_ISOC99
+
+
+209 
+	#isb�nk
+(
+c
+�
+	`__is�y�
+((c), 
+_ISb�nk
+)
+
+	)
+
+213 #ifde�
+__USE_EXTERN_INLINES
+
+
+214 
+__ex��_�l�e
+ 
+
+215 
+	`__NTH
+ (
+	$t�ow�
+ (
+__c
+))
+
+217  
+__c
+ >�-128 && __�< 256 ? (*
+	`__�y�_t�ow�_loc
+ ())[__c] : __c;
+
+218 
+	}
+}
+
+220 
+__ex��_�l�e
+ 
+
+221 
+__NTH
+ (
+	$tou��
+ (
+__c
+))
+
+223  
+__c
+ >�-128 && __�< 256 ? (*
+	`__�y�_tou��_loc
+ ())[__c] : __c;
+
+224 
+	}
+}
+
+227 #i�
+__GNUC__
+ >�2 && 
+def�ed
+ 
+__OPTIMIZE__
+ && !def�ed 
+__�lu�lus
+
+
+228 
+	#t�ow�
+(
+c
+�
+	`__tobody
+ (c, 
+t�ow�
+, *
+	`__�y�_t�ow�_loc
+ (), (c))
+
+	)
+
+229 
+	#tou��
+(
+c
+�
+	`__tobody
+ (c, 
+tou��
+, *
+	`__�y�_tou��_loc
+ (), (c))
+
+	)
+
+232 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN
+
+
+233 
+	#i�scii
+(
+c
+�
+	`__i�scii
+ (c)
+
+	)
+
+234 
+	#t�scii
+(
+c
+�
+	`__t�scii
+ (c)
+
+	)
+
+236 
+	#_t�ow�
+(
+c
+�((�(*
+	`__�y�_t�ow�_loc
+ ())[(�(c)])
+
+	)
+
+237 
+	#_tou��
+(
+c
+�((�(*
+	`__�y�_tou��_loc
+ ())[(�(c)])
+
+	)
+
+243 #ifde�
+__USE_XOPEN2K8
+
+
+257 
+	~<xlo��.h
+>
+
+261 
+	#__is�y�_l
+(
+c
+, 
+ty�
+, 
+lo��
+) \
+
+262 ((
+lo��
+)->
+__�y�_b
+[(�(
+c
+)] & (�
+ty�
+)
+
+	)
+
+264 
+	#__ex�y�_l
+(
+�me
+) \
+
+265 

+	`�me
+ (, 
+__lo��_t
+�
+__THROW
+
+
+	)
+
+271 
+__ex�y�_l
+ (
+i��um_l
+);
+
+272 
+__ex�y�_l
+ (
+i��ha_l
+);
+
+273 
+__ex�y�_l
+ (
+is��l_l
+);
+
+274 
+__ex�y�_l
+ (
+isdig�_l
+);
+
+275 
+__ex�y�_l
+ (
+i�ow�_l
+);
+
+276 
+__ex�y�_l
+ (
+isg�ph_l
+);
+
+277 
+__ex�y�_l
+ (
+i�r�t_l
+);
+
+278 
+__ex�y�_l
+ (
+i�un�_l
+);
+
+279 
+__ex�y�_l
+ (
+is�a�_l
+);
+
+280 
+__ex�y�_l
+ (
+isu��_l
+);
+
+281 
+__ex�y�_l
+ (
+isxdig�_l
+);
+
+283 
+__ex�y�_l
+ (
+isb�nk_l
+);
+
+287 

+	$__t�ow�_l
+ (
+__c
+, 
+__lo��_t
+ 
+__l
+�
+__THROW
+;
+
+288 

+	$t�ow�_l
+ (
+__c
+, 
+__lo��_t
+ 
+__l
+�
+__THROW
+;
+
+291 

+	$__tou��_l
+ (
+__c
+, 
+__lo��_t
+ 
+__l
+�
+__THROW
+;
+
+292 

+	$tou��_l
+ (
+__c
+, 
+__lo��_t
+ 
+__l
+�
+__THROW
+;
+
+294 #i�
+__GNUC__
+ >�2 && 
+def�ed
+ 
+__OPTIMIZE__
+ && !def�ed 
+__�lu�lus
+
+
+295 
+	#__t�ow�_l
+(
+c
+, 
+lo��
+) \
+
+296 
+	`__tobody
+ (
+c
+, 
+__t�ow�_l
+, (
+lo��
+)->
+__�y�_t�ow�
+, (c,�o��))
+
+	)
+
+297 
+	#__tou��_l
+(
+c
+, 
+lo��
+) \
+
+298 
+	`__tobody
+ (
+c
+, 
+__tou��_l
+, (
+lo��
+)->
+__�y�_tou��
+, (c,�o��))
+
+	)
+
+299 
+	#t�ow�_l
+(
+c
+, 
+lo��
+�
+	`__t�ow�_l
+ ((c), (lo��))
+
+	)
+
+300 
+	#tou��_l
+(
+c
+, 
+lo��
+�
+	`__tou��_l
+ ((c), (lo��))
+
+	)
+
+304 #i�de�
+__NO_CTYPE
+
+
+305 
+	#__i��um_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_IS�num
+, (l))
+
+	)
+
+306 
+	#__i��ha_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_IS�pha
+, (l))
+
+	)
+
+307 
+	#__is��l_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_IS��l
+, (l))
+
+	)
+
+308 
+	#__isdig�_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_ISdig�
+, (l))
+
+	)
+
+309 
+	#__i�ow�_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_ISlow�
+, (l))
+
+	)
+
+310 
+	#__isg�ph_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_ISg�ph
+, (l))
+
+	)
+
+311 
+	#__i�r�t_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_IS��t
+, (l))
+
+	)
+
+312 
+	#__i�un�_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_ISpun�
+, (l))
+
+	)
+
+313 
+	#__is�a�_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_IS�a�
+, (l))
+
+	)
+
+314 
+	#__isu��_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_ISu��
+, (l))
+
+	)
+
+315 
+	#__isxdig�_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_ISxdig�
+, (l))
+
+	)
+
+317 
+	#__isb�nk_l
+(
+c
+,
+l
+�
+	`__is�y�_l
+((c), 
+_ISb�nk
+, (l))
+
+	)
+
+319 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_MISC
+
+
+320 
+	#__i�scii_l
+(
+c
+,
+l
+�(�), 
+	`__i�scii
+ (c))
+
+	)
+
+321 
+	#__t�scii_l
+(
+c
+,
+l
+�(�), 
+	`__t�scii
+ (c))
+
+	)
+
+324 
+	#i��um_l
+(
+c
+,
+l
+�
+	`__i��um_l
+ ((c), (l))
+
+	)
+
+325 
+	#i��ha_l
+(
+c
+,
+l
+�
+	`__i��ha_l
+ ((c), (l))
+
+	)
+
+326 
+	#is��l_l
+(
+c
+,
+l
+�
+	`__is��l_l
+ ((c), (l))
+
+	)
+
+327 
+	#isdig�_l
+(
+c
+,
+l
+�
+	`__isdig�_l
+ ((c), (l))
+
+	)
+
+328 
+	#i�ow�_l
+(
+c
+,
+l
+�
+	`__i�ow�_l
+ ((c), (l))
+
+	)
+
+329 
+	#isg�ph_l
+(
+c
+,
+l
+�
+	`__isg�ph_l
+ ((c), (l))
+
+	)
+
+330 
+	#i�r�t_l
+(
+c
+,
+l
+�
+	`__i�r�t_l
+ ((c), (l))
+
+	)
+
+331 
+	#i�un�_l
+(
+c
+,
+l
+�
+	`__i�un�_l
+ ((c), (l))
+
+	)
+
+332 
+	#is�a�_l
+(
+c
+,
+l
+�
+	`__is�a�_l
+ ((c), (l))
+
+	)
+
+333 
+	#isu��_l
+(
+c
+,
+l
+�
+	`__isu��_l
+ ((c), (l))
+
+	)
+
+334 
+	#isxdig�_l
+(
+c
+,
+l
+�
+	`__isxdig�_l
+ ((c), (l))
+
+	)
+
+336 
+	#isb�nk_l
+(
+c
+,
+l
+�
+	`__isb�nk_l
+ ((c), (l))
+
+	)
+
+338 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_MISC
+
+
+339 
+	#i�scii_l
+(
+c
+,
+l
+�
+	`__i�scii_l
+ ((c), (l))
+
+	)
+
+340 
+	#t�scii_l
+(
+c
+,
+l
+�
+	`__t�scii_l
+ ((c), (l))
+
+	)
+
+347 
+__END_DECLS
+
+
+	@/usr/include/errno.h
+
+22 #i�def 
+_ERRNO_H
+
+
+26 #i�def 
+__�ed_Em�h
+
+
+27 
+	#_ERRNO_H
+ 1
+
+	)
+
+28 
+	~<�u�s.h
+>
+
+31 
+	g__BEGIN_DECLS
+
+
+35 
+	~<b�s/��o.h
+>
+
+36 #unde�
+__�ed_Em�h
+
+
+38 #ifdef 
+_ERRNO_H
+
+
+45 #i�def 
+��o
+
+
+46 

+��o
+;
+
+49 #ifde�
+__USE_GNU
+
+
+54 
*
+�og�m_�vo�ti�_�me
+, *
+�og�m_�vo�ti�_sh�t_�me
+;
+
+58 
+	g__END_DECLS
+
+
+66 #i�
+def�ed
+ 
+__USE_GNU
+ || def�ed 
+__�ed_�r�_t
+
+
+67 #i�de�
+__�r�_t_def�ed
+
+
+68 
+	t�r�_t
+;
+
+69 
+	#__�r�_t_def�ed
+ 1
+
+	)
+
+71 #unde�
+__�ed_�r�_t
+
+
+	@/usr/include/fcntl.h
+
+22 #i�def 
+_FCNTL_H
+
+
+23 
+	#_FCNTL_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+28 
+	g__BEGIN_DECLS
+
+
+31 
+	~<b�s/ty�s.h
+>
+
+35 
+	~<b�s/f��.h
+>
+
+40 #i�de�
+__mode_t_def�ed
+
+
+41 
+__mode_t
+ 
+	tmode_t
+;
+
+42 
+	#__mode_t_def�ed
+
+
+	)
+
+45 #i�de�
+__off_t_def�ed
+
+
+46 #i�de�
+__USE_FILE_OFFSET64
+
+
+47 
+__off_t
+ 
+	toff_t
+;
+
+49 
+__off64_t
+ 
+	toff_t
+;
+
+51 
+	#__off_t_def�ed
+
+
+	)
+
+54 #i�
+def�ed
+ 
+__USE_LARGEFILE64
+ && !def�ed 
+__off64_t_def�ed
+
+
+55 
+__off64_t
+ 
+	toff64_t
+;
+
+56 
+	#__off64_t_def�ed
+
+
+	)
+
+59 #i�de�
+__pid_t_def�ed
+
+
+60 
+__pid_t
+ 
+	tpid_t
+;
+
+61 
+	#__pid_t_def�ed
+
+
+	)
+
+65 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+
+
+66 
+	#__�ed_time�ec
+
+
+	)
+
+67 
+	~<time.h
+>
+
+68 
+	~<b�s/��.h
+>
+
+70 
+	#S_IFMT
+ 
+__S_IFMT
+
+
+	)
+
+71 
+	#S_IFDIR
+ 
+__S_IFDIR
+
+
+	)
+
+72 
+	#S_IFCHR
+ 
+__S_IFCHR
+
+
+	)
+
+73 
+	#S_IFBLK
+ 
+__S_IFBLK
+
+
+	)
+
+74 
+	#S_IFREG
+ 
+__S_IFREG
+
+
+	)
+
+75 #ifde�
+__S_IFIFO
+
+
+76 
+	#S_IFIFO
+ 
+__S_IFIFO
+
+
+	)
+
+78 #ifde�
+__S_IFLNK
+
+
+79 
+	#S_IFLNK
+ 
+__S_IFLNK
+
+
+	)
+
+81 #i�(
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K8
+�&& def�ed 
+__S_IFSOCK
+
+
+82 
+	#S_IFSOCK
+ 
+__S_IFSOCK
+
+
+	)
+
+87 
+	#S_ISUID
+ 
+__S_ISUID
+
+
+	)
+
+88 
+	#S_ISGID
+ 
+__S_ISGID
+
+
+	)
+
+90 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN
+
+
+92 
+	#S_ISVTX
+ 
+__S_ISVTX
+
+
+	)
+
+95 
+	#S_IRUSR
+ 
+__S_IREAD
+
+
+	)
+
+96 
+	#S_IWUSR
+ 
+__S_IWRITE
+
+
+	)
+
+97 
+	#S_IXUSR
+ 
+__S_IEXEC
+
+
+	)
+
+99 
+	#S_IRWXU
+ (
+__S_IREAD
+|
+__S_IWRITE
+|
+__S_IEXEC
+)
+
+	)
+
+101 
+	#S_IRGRP
+ (
+S_IRUSR
+ >> 3�
+
+	)
+
+102 
+	#S_IWGRP
+ (
+S_IWUSR
+ >> 3�
+
+	)
+
+103 
+	#S_IXGRP
+ (
+S_IXUSR
+ >> 3�
+
+	)
+
+105 
+	#S_IRWXG
+ (
+S_IRWXU
+ >> 3)
+
+	)
+
+107 
+	#S_IROTH
+ (
+S_IRGRP
+ >> 3�
+
+	)
+
+108 
+	#S_IWOTH
+ (
+S_IWGRP
+ >> 3�
+
+	)
+
+109 
+	#S_IXOTH
+ (
+S_IXGRP
+ >> 3�
+
+	)
+
+111 
+	#S_IRWXO
+ (
+S_IRWXG
+ >> 3)
+
+	)
+
+114 #ifdef 
+__USE_MISC
+
+
+115 #i�de�
+R_OK
+
+
+118 
+	#R_OK
+ 4
+
+	)
+
+119 
+	#W_OK
+ 2
+
+	)
+
+120 
+	#X_OK
+ 1
+
+	)
+
+121 
+	#F_OK
+ 0
+
+	)
+
+126 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+
+
+127 
+	#SEEK_SET
+ 0
+
+	)
+
+128 
+	#SEEK_CUR
+ 1
+
+	)
+
+129 
+	#SEEK_END
+ 2
+
+	)
+
+137 

+f��
+ (
+__fd
+, 
+__cmd
+, ...);
+
+145 #i�de�
+__USE_FILE_OFFSET64
+
+
+146 

+	$ݒ
+ (cڡ *
+__f�e
+, 
+__o�ag
+, ...�
+	`__n�nu�
+ ((1));
+
+148 #ifde�
+__REDIRECT
+
+
+149 

+	`__REDIRECT
+ (
+ݒ
+, (cڡ *
+__f�e
+, 
+__o�ag
+, ...), 
+ݒ64
+)
+
+150 
+	`__n�nu�
+ ((1));
+
+152 
+	#ݒ
+ 
+ݒ64
+
+
+	)
+
+155 #ifde�
+__USE_LARGEFILE64
+
+
+156 

+	$ݒ64
+ (cڡ *
+__f�e
+, 
+__o�ag
+, ...�
+	`__n�nu�
+ ((1));
+
+159 #ifde�
+__USE_ATFILE
+
+
+169 #i�de�
+__USE_FILE_OFFSET64
+
+
+170 

+	$ݒ�
+ (
+__fd
+, cڡ *
+__f�e
+, 
+__o�ag
+, ...)
+
+171 
+	`__n�nu�
+ ((2));
+
+173 #ifde�
+__REDIRECT
+
+
+174 

+	`__REDIRECT
+ (
+ݒ�
+, (
+__fd
+, cڡ *
+__f�e
+, 
+__o�ag
+,
+
+175 ...), 
+ݒ�64
+�
+	`__n�nu�
+ ((2));
+
+177 
+	#ݒ�
+ 
+ݒ�64
+
+
+	)
+
+180 #ifde�
+__USE_LARGEFILE64
+
+
+181 

+	$ݒ�64
+ (
+__fd
+, cڡ *
+__f�e
+, 
+__o�ag
+, ...)
+
+182 
+	`__n�nu�
+ ((2));
+
+191 #i�de�
+__USE_FILE_OFFSET64
+
+
+192 

+	$��t
+ (cڡ *
+__f�e
+, 
+mode_t
+ 
+__mode
+�
+	`__n�nu�
+ ((1));
+
+194 #ifde�
+__REDIRECT
+
+
+195 

+	`__REDIRECT
+ (
+��t
+, (cڡ *
+__f�e
+, 
+mode_t
+ 
+__mode
+),
+
+196 
+��t64
+�
+	`__n�nu�
+ ((1));
+
+198 
+	#��t
+ 
+��t64
+
+
+	)
+
+201 #ifde�
+__USE_LARGEFILE64
+
+
+202 

+	$��t64
+ (cڡ *
+__f�e
+, 
+mode_t
+ 
+__mode
+�
+	`__n�nu�
+ ((1));
+
+205 #i�!
+def�ed
+ 
+F_LOCK
+ && (def�ed 
+__USE_MISC
+ || (def�ed 
+__USE_XOPEN_EXTENDED
+ \
+
+206 && !
+def�ed
+ 
+__USE_POSIX
+))
+
+215 
+	#F_ULOCK
+ 0
+
+	)
+
+216 
+	#F_LOCK
+ 1
+
+	)
+
+217 
+	#F_TLOCK
+ 2
+
+	)
+
+218 
+	#F_TEST
+ 3
+
+	)
+
+220 #i�de�
+__USE_FILE_OFFSET64
+
+
+221 

+	`lockf
+ (
+__fd
+, 
+__cmd
+, 
+off_t
+ 
+__�n
+);
+
+223 #ifde�
+__REDIRECT
+
+
+224 

+	`__REDIRECT
+ (
+lockf
+, (
+__fd
+, 
+__cmd
+, 
+__off64_t
+ 
+__�n
+), 
+lockf64
+);
+
+226 
+	#lockf
+ 
+lockf64
+
+
+	)
+
+229 #ifde�
+__USE_LARGEFILE64
+
+
+230 

+	`lockf64
+ (
+__fd
+, 
+__cmd
+, 
+off64_t
+ 
+__�n
+);
+
+234 #ifde�
+__USE_XOPEN2K
+
+
+237 #i�de�
+__USE_FILE_OFFSET64
+
+
+238 

+	$posix_�dvi�
+ (
+__fd
+, 
+off_t
+ 
+__off�t
+, off_�
+__�n
+,
+
+239 
+__advi�
+�
+__THROW
+;
+
+241 #ifde�
+__REDIRECT_NTH
+
+
+242 

+	`__REDIRECT_NTH
+ (
+posix_�dvi�
+, (
+__fd
+, 
+__off64_t
+ 
+__off�t
+,
+
+243 
+__off64_t
+ 
+__�n
+, 
+__advi�
+),
+
+244 
+posix_�dvi�64
+);
+
+246 
+	#posix_�dvi�
+ 
+posix_�dvi�64
+
+
+	)
+
+249 #ifde�
+__USE_LARGEFILE64
+
+
+250 

+	$posix_�dvi�64
+ (
+__fd
+, 
+off64_t
+ 
+__off�t
+, off64_�
+__�n
+,
+
+251 
+__advi�
+�
+__THROW
+;
+
+259 #i�de�
+__USE_FILE_OFFSET64
+
+
+260 

+	`posix_��o��
+ (
+__fd
+, 
+off_t
+ 
+__off�t
+, off_�
+__�n
+);
+
+262 #ifde�
+__REDIRECT
+
+
+263 

+	`__REDIRECT
+ (
+posix_��o��
+, (
+__fd
+, 
+__off64_t
+ 
+__off�t
+,
+
+264 
+__off64_t
+ 
+__�n
+),
+
+265 
+posix_��o��64
+);
+
+267 
+	#posix_��o��
+ 
+posix_��o��64
+
+
+	)
+
+270 #ifde�
+__USE_LARGEFILE64
+
+
+271 

+	`posix_��o��64
+ (
+__fd
+, 
+off64_t
+ 
+__off�t
+, off64_�
+__�n
+);
+
+277 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+ \
+
+278 && 
+def�ed
+ 
+__va_�g_�ck_�n
+
+
+279 
+	~<b�s/f��2.h
+>
+
+282 
+__END_DECLS
+
+
+	@/usr/include/getopt.h
+
+19 #i�de�
+_GETOPT_H
+
+
+21 #i�de�
+__�ed_g��t
+
+
+22 
+	#_GETOPT_H
+ 1
+
+	)
+
+32 #i�!
+def�ed
+ 
+__GNU_LIBRARY__
+
+
+33 
+	~<�y�.h
+>
+
+36 #i�de�
+__THROW
+
+
+37 #i�de�
+__GNUC_PREREQ
+
+
+38 
+	#__GNUC_PREREQ
+(
+maj
+, 
+m�
+�(0)
+
+	)
+
+40 #i�
+def�ed
+ 
+__�lu�lus
+ && 
+__GNUC_PREREQ
+ (2,8)
+
+41 
+	#__THROW
+ 
+	`throw
+ ()
+
+	)
+
+43 
+	#__THROW
+
+
+	)
+
+47 #ifdef 
+__�lu�lus
+
+
+57 
*
+ݏrg
+;
+
+71 

+�t�d
+;
+
+76 

+݋�
+;
+
+80 

+�t�t
+;
+
+82 #i�de�
+__�ed_g��t
+
+
+104 
+	s�ti�
+
+
+106 cڡ *
+	g�me
+;
+
+109 
+	ghas_�g
+;
+
+110 *
+	g�ag
+;
+
+111 
+	gv�
+;
+
+116 
+	#no_�gum�t
+ 0
+
+	)
+
+117 
+	#�qu�ed_�gum�t
+ 1
+
+	)
+
+118 
+	#�tiڮ_�gum�t
+ 2
+
+	)
+
+146 #ifde�
+__GNU_LIBRARY__
+
+
+150 

+g��t
+ (
+___�gc
+, *cڡ *
+___�gv
+, cڡ *
+__sh�t�ts
+)
+
+151 
+__THROW
+;
+
+153 #i�
+def�ed
+ 
+__�ed_g��t
+ && def�ed 
+__USE_POSIX2
+ \
+
+154 && !
+def�ed
+ 
+	g__USE_POSIX_IMPLICITLY
+ && !def�ed 
+	g__USE_GNU
+
+
+158 #ifde�
+__REDIRECT
+
+
+159 

+__REDIRECT_NTH
+ (
+g��t
+, (
+___�gc
+, *cڡ *
+___�gv
+,
+
+160 cڡ *
+__sh�t�ts
+),
+
+161 
+__posix_g��t
+);
+
+163 

+__posix_g��t
+ (
+___�gc
+, *cڡ *
+___�gv
+,
+
+164 cڡ *
+__sh�t�ts
+�
+__THROW
+;
+
+165 
+	#g��t
+ 
+__posix_g��t
+
+
+	)
+
+169 

+g��t
+ ();
+
+172 #i�de�
+__�ed_g��t
+
+
+173 

+g��t_l�g
+ (
+___�gc
+, *cڡ *
+___�gv
+,
+
+174 cڡ *
+__sh�t�ts
+,
+
+175 cڡ 
+�ti�
+ *
+__l�g�ts
+, *
+__l�g�d
+)
+
+176 
+__THROW
+;
+
+177 

+g��t_l�g_�ly
+ (
+___�gc
+, *cڡ *
+___�gv
+,
+
+178 cڡ *
+__sh�t�ts
+,
+
+179 cڡ 
+�ti�
+ *
+__l�g�ts
+, *
+__l�g�d
+)
+
+180 
+__THROW
+;
+
+184 #ifdef 
+__�lu�lus
+
+
+189 #unde�
+__�ed_g��t
+
+
+	@/usr/include/libgen.h
+
+18 #i�de�
+_LIBGEN_H
+
+
+19 
+	#_LIBGEN_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+23 
+__BEGIN_DECLS
+
+
+26 
*
+	$d��me
+ (*
+__�th
+�
+__THROW
+;
+
+34 
*
+	$__xpg_ba��me
+ (*
+__�th
+�
+__THROW
+;
+
+35 
+	#ba��me
+ 
+__xpg_ba��me
+
+
+	)
+
+37 
+__END_DECLS
+
+
+	@/usr/include/linux/rtc.h
+
+11 #i�de�
+_LINUX_RTC_H_
+
+
+12 
+	#_LINUX_RTC_H_
+
+
+	)
+
+20 
+	s�c_time
+ {
+
+21 
+	mtm_�c
+;
+
+22 
+	mtm_m�
+;
+
+23 
+	mtm_hour
+;
+
+24 
+	mtm_mday
+;
+
+25 
+	mtm_m�
+;
+
+26 
+	mtm_y�r
+;
+
+27 
+	mtm_wday
+;
+
+28 
+	mtm_yday
+;
+
+29 
+	mtm_isd�
+;
+
+36 
+	s�c_wk�rm
+ {
+
+37 
+	m�ab�d
+;
+
+38 
+	m�nd�g
+;
+
+39 
+�c_time
+ 
+	mtime
+;
+
+55 
+	s�c_�l_�fo
+ {
+
+56 
+	m�l_��
+;
+
+57 
+	m�l_v�ue
+;
+
+58 
+	m�l_max
+;
+
+59 
+	m�l_m�
+;
+
+60 
+	m�l_posmu�
+;
+
+61 
+	m�l_�gmu�
+;
+
+62 
+	m�l_�ock
+;
+
+70 
+	#RTC_AIE_ON
+ 
+	`_IO
+('p', 0x01�
+
+	)
+
+71 
+	#RTC_AIE_OFF
+ 
+	`_IO
+('p', 0x02�
+
+	)
+
+72 
+	#RTC_UIE_ON
+ 
+	`_IO
+('p', 0x03�
+
+	)
+
+73 
+	#RTC_UIE_OFF
+ 
+	`_IO
+('p', 0x04�
+
+	)
+
+74 
+	#RTC_PIE_ON
+ 
+	`_IO
+('p', 0x05�
+
+	)
+
+75 
+	#RTC_PIE_OFF
+ 
+	`_IO
+('p', 0x06�
+
+	)
+
+76 
+	#RTC_WIE_ON
+ 
+	`_IO
+('p', 0x0f�
+
+	)
+
+77 
+	#RTC_WIE_OFF
+ 
+	`_IO
+('p', 0x10�
+
+	)
+
+79 
+	#RTC_ALM_SET
+ 
+	`_IOW
+('p', 0x07, 
+�c_time
+�
+
+	)
+
+80 
+	#RTC_ALM_READ
+ 
+	`_IOR
+('p', 0x08, 
+�c_time
+�
+
+	)
+
+81 
+	#RTC_RD_TIME
+ 
+	`_IOR
+('p', 0x09, 
+�c_time
+�
+
+	)
+
+82 
+	#RTC_SET_TIME
+ 
+	`_IOW
+('p', 0x0a, 
+�c_time
+�
+
+	)
+
+83 
+	#RTC_IRQP_READ
+ 
+	`_IOR
+('p', 0x0b, �
+
+	)
+
+84 
+	#RTC_IRQP_SET
+ 
+	`_IOW
+('p', 0x0c, �
+
+	)
+
+85 
+	#RTC_EPOCH_READ
+ 
+	`_IOR
+('p', 0x0d, �
+
+	)
+
+86 
+	#RTC_EPOCH_SET
+ 
+	`_IOW
+('p', 0x0e, �
+
+	)
+
+88 
+	#RTC_WKALM_SET
+ 
+	`_IOW
+('p', 0x0f, 
+�c_wk�rm
+)
+
+	)
+
+89 
+	#RTC_WKALM_RD
+ 
+	`_IOR
+('p', 0x10, 
+�c_wk�rm
+)
+
+	)
+
+91 
+	#RTC_PLL_GET
+ 
+	`_IOR
+('p', 0x11, 
+�c_�l_�fo
+�
+
+	)
+
+92 
+	#RTC_PLL_SET
+ 
+	`_IOW
+('p', 0x12, 
+�c_�l_�fo
+�
+
+	)
+
+94 
+	#RTC_VL_READ
+ 
+	`_IOR
+('p', 0x13, �
+
+	)
+
+95 
+	#RTC_VL_CLR
+ 
+	`_IO
+('p', 0x14�
+
+	)
+
+98 
+	#RTC_IRQF
+ 0x80
+
+	)
+
+99 
+	#RTC_PF
+ 0x40
+
+	)
+
+100 
+	#RTC_AF
+ 0x20
+
+	)
+
+101 
+	#RTC_UF
+ 0x10
+
+	)
+
+104 
+	#RTC_MAX_FREQ
+ 8192
+
+	)
+
+	@/usr/include/linux/sockios.h
+
+18 #i�de�
+_LINUX_SOCKIOS_H
+
+
+19 
+	#_LINUX_SOCKIOS_H
+
+
+	)
+
+21 
+	~<asm/sockios.h
+>
+
+24 
+	#SIOCINQ
+ 
+FIONREAD
+
+
+	)
+
+25 
+	#SIOCOUTQ
+ 
+TIOCOUTQ
+
+
+	)
+
+28 
+	#SIOCADDRT
+ 0x890B
+
+	)
+
+29 
+	#SIOCDELRT
+ 0x890C
+
+	)
+
+30 
+	#SIOCRTMSG
+ 0x890D
+
+	)
+
+33 
+	#SIOCGIFNAME
+ 0x8910
+
+	)
+
+34 
+	#SIOCSIFLINK
+ 0x8911
+
+	)
+
+35 
+	#SIOCGIFCONF
+ 0x8912
+
+	)
+
+36 
+	#SIOCGIFFLAGS
+ 0x8913
+
+	)
+
+37 
+	#SIOCSIFFLAGS
+ 0x8914
+
+	)
+
+38 
+	#SIOCGIFADDR
+ 0x8915
+
+	)
+
+39 
+	#SIOCSIFADDR
+ 0x8916
+
+	)
+
+40 
+	#SIOCGIFDSTADDR
+ 0x8917
+
+	)
+
+41 
+	#SIOCSIFDSTADDR
+ 0x8918
+
+	)
+
+42 
+	#SIOCGIFBRDADDR
+ 0x8919
+
+	)
+
+43 
+	#SIOCSIFBRDADDR
+ 0x891�
+
+	)
+
+44 
+	#SIOCGIFNETMASK
+ 0x891b
+
+	)
+
+45 
+	#SIOCSIFNETMASK
+ 0x891�
+
+	)
+
+46 
+	#SIOCGIFMETRIC
+ 0x891d
+
+	)
+
+47 
+	#SIOCSIFMETRIC
+ 0x891�
+
+	)
+
+48 
+	#SIOCGIFMEM
+ 0x891�
+
+	)
+
+49 
+	#SIOCSIFMEM
+ 0x8920
+
+	)
+
+50 
+	#SIOCGIFMTU
+ 0x8921
+
+	)
+
+51 
+	#SIOCSIFMTU
+ 0x8922
+
+	)
+
+52 
+	#SIOCSIFNAME
+ 0x8923
+
+	)
+
+53 
+	#SIOCSIFHWADDR
+ 0x8924
+
+	)
+
+54 
+	#SIOCGIFENCAP
+ 0x8925
+
+	)
+
+55 
+	#SIOCSIFENCAP
+ 0x8926
+
+	)
+
+56 
+	#SIOCGIFHWADDR
+ 0x8927
+
+	)
+
+57 
+	#SIOCGIFSLAVE
+ 0x8929
+
+	)
+
+58 
+	#SIOCSIFSLAVE
+ 0x8930
+
+	)
+
+59 
+	#SIOCADDMULTI
+ 0x8931
+
+	)
+
+60 
+	#SIOCDELMULTI
+ 0x8932
+
+	)
+
+61 
+	#SIOCGIFINDEX
+ 0x8933
+
+	)
+
+62 
+	#SIOGIFINDEX
+ 
+SIOCGIFINDEX
+
+
+	)
+
+63 
+	#SIOCSIFPFLAGS
+ 0x8934
+
+	)
+
+64 
+	#SIOCGIFPFLAGS
+ 0x8935
+
+	)
+
+65 
+	#SIOCDIFADDR
+ 0x8936
+
+	)
+
+66 
+	#SIOCSIFHWBROADCAST
+ 0x8937
+
+	)
+
+67 
+	#SIOCGIFCOUNT
+ 0x8938
+
+	)
+
+69 
+	#SIOCGIFBR
+ 0x8940
+
+	)
+
+70 
+	#SIOCSIFBR
+ 0x8941
+
+	)
+
+72 
+	#SIOCGIFTXQLEN
+ 0x8942
+
+	)
+
+73 
+	#SIOCSIFTXQLEN
+ 0x8943
+
+	)
+
+78 
+	#SIOCETHTOOL
+ 0x8946
+
+	)
+
+80 
+	#SIOCGMIIPHY
+ 0x8947
+
+	)
+
+81 
+	#SIOCGMIIREG
+ 0x8948
+
+	)
+
+82 
+	#SIOCSMIIREG
+ 0x8949
+
+	)
+
+84 
+	#SIOCWANDEV
+ 0x894A
+
+	)
+
+86 
+	#SIOCOUTQNSD
+ 0x894B
+
+	)
+
+90 
+	#SIOCDARP
+ 0x8953
+
+	)
+
+91 
+	#SIOCGARP
+ 0x8954
+
+	)
+
+92 
+	#SIOCSARP
+ 0x8955
+
+	)
+
+95 
+	#SIOCDRARP
+ 0x8960
+
+	)
+
+96 
+	#SIOCGRARP
+ 0x8961
+
+	)
+
+97 
+	#SIOCSRARP
+ 0x8962
+
+	)
+
+101 
+	#SIOCGIFMAP
+ 0x8970
+
+	)
+
+102 
+	#SIOCSIFMAP
+ 0x8971
+
+	)
+
+106 
+	#SIOCADDDLCI
+ 0x8980
+
+	)
+
+107 
+	#SIOCDELDLCI
+ 0x8981
+
+	)
+
+109 
+	#SIOCGIFVLAN
+ 0x8982
+
+	)
+
+110 
+	#SIOCSIFVLAN
+ 0x8983
+
+	)
+
+114 
+	#SIOCBONDENSLAVE
+ 0x8990
+
+	)
+
+115 
+	#SIOCBONDRELEASE
+ 0x8991
+
+	)
+
+116 
+	#SIOCBONDSETHWADDR
+ 0x8992
+
+	)
+
+117 
+	#SIOCBONDSLAVEINFOQUERY
+ 0x8993
+
+	)
+
+118 
+	#SIOCBONDINFOQUERY
+ 0x8994
+
+	)
+
+119 
+	#SIOCBONDCHANGEACTIVE
+ 0x8995
+
+	)
+
+122 
+	#SIOCBRADDBR
+ 0x89a0
+
+	)
+
+123 
+	#SIOCBRDELBR
+ 0x89a1
+
+	)
+
+124 
+	#SIOCBRADDIF
+ 0x89a2
+
+	)
+
+125 
+	#SIOCBRDELIF
+ 0x89a3
+
+	)
+
+128 
+	#SIOCSHWTSTAMP
+ 0x89b0
+
+	)
+
+129 
+	#SIOCGHWTSTAMP
+ 0x89b1
+
+	)
+
+142 
+	#SIOCDEVPRIVATE
+ 0x89F0
+
+	)
+
+148 
+	#SIOCPROTOPRIVATE
+ 0x89E0
+
+	)
+
+	@/usr/include/linux/stddef.h
+
+	@/usr/include/net/if.h
+
+19 #i�de�
+_NET_IF_H
+
+
+20 
+	#_NET_IF_H
+ 1
+
+	)
+
+22 
+	~<�u�s.h
+>
+
+24 #ifde�
+__USE_MISC
+
+
+25 
+	~<sys/ty�s.h
+>
+
+26 
+	~<sys/sock�.h
+>
+
+31 
+	#IF_NAMESIZE
+ 16
+
+	)
+
+33 
+	sif_�me�dex
+
+
+35 
+	mif_�dex
+;
+
+36 *
+	mif_�me
+;
+
+40 #ifde�
+__USE_MISC
+
+
+44 
+	mIFF_UP
+ = 0x1,
+
+45 
+	#IFF_UP
+ 
+IFF_UP
+
+
+	)
+
+46 
+	mIFF_BROADCAST
+ = 0x2,
+
+47 
+	#IFF_BROADCAST
+ 
+IFF_BROADCAST
+
+
+	)
+
+48 
+	mIFF_DEBUG
+ = 0x4,
+
+49 
+	#IFF_DEBUG
+ 
+IFF_DEBUG
+
+
+	)
+
+50 
+	mIFF_LOOPBACK
+ = 0x8,
+
+51 
+	#IFF_LOOPBACK
+ 
+IFF_LOOPBACK
+
+
+	)
+
+52 
+	mIFF_POINTOPOINT
+ = 0x10,
+
+53 
+	#IFF_POINTOPOINT
+ 
+IFF_POINTOPOINT
+
+
+	)
+
+54 
+	mIFF_NOTRAILERS
+ = 0x20,
+
+55 
+	#IFF_NOTRAILERS
+ 
+IFF_NOTRAILERS
+
+
+	)
+
+56 
+	mIFF_RUNNING
+ = 0x40,
+
+57 
+	#IFF_RUNNING
+ 
+IFF_RUNNING
+
+
+	)
+
+58 
+	mIFF_NOARP
+ = 0x80,
+
+59 
+	#IFF_NOARP
+ 
+IFF_NOARP
+
+
+	)
+
+60 
+	mIFF_PROMISC
+ = 0x100,
+
+61 
+	#IFF_PROMISC
+ 
+IFF_PROMISC
+
+
+	)
+
+64 
+	mIFF_ALLMULTI
+ = 0x200,
+
+65 
+	#IFF_ALLMULTI
+ 
+IFF_ALLMULTI
+
+
+	)
+
+67 
+	mIFF_MASTER
+ = 0x400,
+
+68 
+	#IFF_MASTER
+ 
+IFF_MASTER
+
+
+	)
+
+69 
+	mIFF_SLAVE
+ = 0x800,
+
+70 
+	#IFF_SLAVE
+ 
+IFF_SLAVE
+
+
+	)
+
+72 
+	mIFF_MULTICAST
+ = 0x1000,
+
+73 
+	#IFF_MULTICAST
+ 
+IFF_MULTICAST
+
+
+	)
+
+75 
+	mIFF_PORTSEL
+ = 0x2000,
+
+76 
+	#IFF_PORTSEL
+ 
+IFF_PORTSEL
+
+
+	)
+
+77 
+	mIFF_AUTOMEDIA
+ = 0x4000,
+
+78 
+	#IFF_AUTOMEDIA
+ 
+IFF_AUTOMEDIA
+
+
+	)
+
+79 
+	mIFF_DYNAMIC
+ = 0x8000
+
+80 
+	#IFF_DYNAMIC
+ 
+IFF_DYNAMIC
+
+
+	)
+
+88 
+	si�ddr
+
+
+90 
+sockaddr
+ 
+	mi�_addr
+;
+
+93 
+sockaddr
+ 
+	mifu_br�daddr
+;
+
+94 
+sockaddr
+ 
+	mifu_d�addr
+;
+
+95 } 
+	mi�_ifu
+;
+
+96 
+i��
+ *
+	mi�_i�
+;
+
+97 
+i�ddr
+ *
+	mi�_�xt
+;
+
+100 
+	#i�_br�daddr
+ 
+i�_ifu
+.
+ifu_br�daddr
+
+
+	)
+
+101 
+	#i�_d�addr
+ 
+i�_ifu
+.
+ifu_d�addr
+
+
+	)
+
+111 
+	sifm�
+
+
+113 
+	mmem_��t
+;
+
+114 
+	mmem_�d
+;
+
+115 
+	mba�_addr
+;
+
+116 
+	m�q
+;
+
+117 
+	mdma
+;
+
+118 
+	mp�t
+;
+
+126 
+	si�eq
+
+
+128 
+	#IFHWADDRLEN
+ 6
+
+	)
+
+129 
+	#IFNAMSIZ
+ 
+IF_NAMESIZE
+
+
+	)
+
+132 
+	mi�n_�me
+[
+IFNAMSIZ
+];
+
+133 } 
+	mi�_i�n
+;
+
+137 
+sockaddr
+ 
+	mi�u_addr
+;
+
+138 
+sockaddr
+ 
+	mi�u_d�addr
+;
+
+139 
+sockaddr
+ 
+	mi�u_br�daddr
+;
+
+140 
+sockaddr
+ 
+	mi�u_�tmask
+;
+
+141 
+sockaddr
+ 
+	mi�u_hwaddr
+;
+
+142 
+	mi�u_�ags
+;
+
+143 
+	mi�u_iv�ue
+;
+
+144 
+	mi�u_mtu
+;
+
+145 
+ifm�
+ 
+	mi�u_m�
+;
+
+146 
+	mi�u_�ave
+[
+IFNAMSIZ
+];
+
+147 
+	mi�u_�w�me
+[
+IFNAMSIZ
+];
+
+148 
+__�ddr_t
+ 
+	mi�u_d�a
+;
+
+149 } 
+	mi�_i�u
+;
+
+151 
+	#i�_�me
+ 
+i�_i�n
+.
+i�n_�me
+
+
+	)
+
+152 
+	#i�_hwaddr
+ 
+i�_i�u
+.
+i�u_hwaddr
+
+
+	)
+
+153 
+	#i�_addr
+ 
+i�_i�u
+.
+i�u_addr
+
+
+	)
+
+154 
+	#i�_d�addr
+ 
+i�_i�u
+.
+i�u_d�addr
+
+
+	)
+
+155 
+	#i�_br�daddr
+ 
+i�_i�u
+.
+i�u_br�daddr
+
+
+	)
+
+156 
+	#i�_�tmask
+ 
+i�_i�u
+.
+i�u_�tmask
+
+
+	)
+
+157 
+	#i�_�ags
+ 
+i�_i�u
+.
+i�u_�ags
+
+
+	)
+
+158 
+	#i�_m�ric
+ 
+i�_i�u
+.
+i�u_iv�ue
+
+
+	)
+
+159 
+	#i�_mtu
+ 
+i�_i�u
+.
+i�u_mtu
+
+
+	)
+
+160 
+	#i�_m�
+ 
+i�_i�u
+.
+i�u_m�
+
+
+	)
+
+161 
+	#i�_�ave
+ 
+i�_i�u
+.
+i�u_�ave
+
+
+	)
+
+162 
+	#i�_d�a
+ 
+i�_i�u
+.
+i�u_d�a
+
+
+	)
+
+163 
+	#i�_if�dex
+ 
+i�_i�u
+.
+i�u_iv�ue
+
+
+	)
+
+164 
+	#i�_b�dwidth
+ 
+i�_i�u
+.
+i�u_iv�ue
+
+
+	)
+
+165 
+	#i�_q�n
+ 
+i�_i�u
+.
+i�u_iv�ue
+
+
+	)
+
+166 
+	#i�_�w�me
+ 
+i�_i�u
+.
+i�u_�w�me
+
+
+	)
+
+167 
+	#_IOT_i�eq
+ 
+	`_IOT
+(
+	`_IOTS
+(),
+IFNAMSIZ
+,_IOTS(),16,0,0)
+
+	)
+
+168 
+	#_IOT_i�eq_sh�t
+ 
+	`_IOT
+(
+	`_IOTS
+(),
+IFNAMSIZ
+,_IOTS(),1,0,0)
+
+	)
+
+169 
+	#_IOT_i�eq_�t
+ 
+	`_IOT
+(
+	`_IOTS
+(),
+IFNAMSIZ
+,_IOTS(),1,0,0)
+
+	)
+
+176 
+	sifc�f
+
+
+178 
+	mifc_�n
+;
+
+181 
+__�ddr_t
+ 
+	mifcu_buf
+;
+
+182 
+i�eq
+ *
+	mifcu_�q
+;
+
+183 } 
+	mifc_ifcu
+;
+
+185 
+	#ifc_buf
+ 
+ifc_ifcu
+.
+ifcu_buf
+
+
+	)
+
+186 
+	#ifc_�q
+ 
+ifc_ifcu
+.
+ifcu_�q
+
+
+	)
+
+187 
+	#_IOT_ifc�f
+ 
+	`_IOT
+(
+	`_IOTS
+(
+ifc�f
+),1,0,0,0,0�
+
+	)
+
+190 
+__BEGIN_DECLS
+
+
+193 

+	$if_�m�o�dex
+ (cڡ *
+__i�ame
+�
+__THROW
+;
+
+194 
*
+	$if_�dext�ame
+ (
+__if�dex
+, *
+__i�ame
+�
+__THROW
+;
+
+197 

+if_�me�dex
+ *
+	$if_�me�dex
+ (�
+__THROW
+;
+
+200 

+	$if_��me�dex
+ (
+if_�me�dex
+ *
+__�r
+�
+__THROW
+;
+
+202 
+__END_DECLS
+
+
+	@/usr/include/net/if_arp.h
+
+22 #i�de�
+_NET_IF_ARP_H
+
+
+24 
+	#_NET_IF_ARP_H
+ 1
+
+	)
+
+25 
+	~<sys/cdefs.h
+>
+
+27 
+	~<sys/ty�s.h
+>
+
+28 
+	~<sys/sock�.h
+>
+
+30 
+	g__BEGIN_DECLS
+
+
+33 
+	#MAX_ADDR_LEN
+ 7
+
+	)
+
+39 
+	#ARPOP_REQUEST
+ 1
+
+	)
+
+40 
+	#ARPOP_REPLY
+ 2
+
+	)
+
+41 
+	#ARPOP_RREQUEST
+ 3
+
+	)
+
+42 
+	#ARPOP_RREPLY
+ 4
+
+	)
+
+43 
+	#ARPOP_InREQUEST
+ 8
+
+	)
+
+44 
+	#ARPOP_InREPLY
+ 9
+
+	)
+
+45 
+	#ARPOP_NAK
+ 10
+
+	)
+
+54 
+	s�phdr
+
+
+56 
+	m�_hrd
+;
+
+57 
+	m�_�o
+;
+
+58 
+	m�_h�
+;
+
+59 
+	m�_�n
+;
+
+60 
+	m�_�
+;
+
+64 
+	m__�_sha
+[
+ETH_ALEN
+];
+
+65 
+	m__�_s�
+[4];
+
+66 
+	m__�_tha
+[
+ETH_ALEN
+];
+
+67 
+	m__�_t�
+[4];
+
+73 
+	#ARPHRD_NETROM
+ 0
+
+	)
+
+74 
+	#ARPHRD_ETHER
+ 1
+
+	)
+
+75 
+	#ARPHRD_EETHER
+ 2
+
+	)
+
+76 
+	#ARPHRD_AX25
+ 3
+
+	)
+
+77 
+	#ARPHRD_PRONET
+ 4
+
+	)
+
+78 
+	#ARPHRD_CHAOS
+ 5
+
+	)
+
+79 
+	#ARPHRD_IEEE802
+ 6
+
+	)
+
+80 
+	#ARPHRD_ARCNET
+ 7
+
+	)
+
+81 
+	#ARPHRD_APPLETLK
+ 8
+
+	)
+
+82 
+	#ARPHRD_DLCI
+ 15
+
+	)
+
+83 
+	#ARPHRD_ATM
+ 19
+
+	)
+
+84 
+	#ARPHRD_METRICOM
+ 23
+
+	)
+
+85 
+	#ARPHRD_IEEE1394
+ 24
+
+	)
+
+86 
+	#ARPHRD_EUI64
+ 27
+
+	)
+
+87 
+	#ARPHRD_INFINIBAND
+ 32
+
+	)
+
+90 
+	#ARPHRD_SLIP
+ 256
+
+	)
+
+91 
+	#ARPHRD_CSLIP
+ 257
+
+	)
+
+92 
+	#ARPHRD_SLIP6
+ 258
+
+	)
+
+93 
+	#ARPHRD_CSLIP6
+ 259
+
+	)
+
+94 
+	#ARPHRD_RSRVD
+ 260
+
+	)
+
+95 
+	#ARPHRD_ADAPT
+ 264
+
+	)
+
+96 
+	#ARPHRD_ROSE
+ 270
+
+	)
+
+97 
+	#ARPHRD_X25
+ 271
+
+	)
+
+98 
+	#ARPHRD_HWX25
+ 272
+
+	)
+
+99 
+	#ARPHRD_PPP
+ 512
+
+	)
+
+100 
+	#ARPHRD_CISCO
+ 513
+
+	)
+
+101 
+	#ARPHRD_HDLC
+ 
+ARPHRD_CISCO
+
+
+	)
+
+102 
+	#ARPHRD_LAPB
+ 516
+
+	)
+
+103 
+	#ARPHRD_DDCMP
+ 517
+
+	)
+
+104 
+	#ARPHRD_RAWHDLC
+ 518
+
+	)
+
+106 
+	#ARPHRD_TUNNEL
+ 768
+
+	)
+
+107 
+	#ARPHRD_TUNNEL6
+ 769
+
+	)
+
+108 
+	#ARPHRD_FRAD
+ 770
+
+	)
+
+109 
+	#ARPHRD_SKIP
+ 771
+
+	)
+
+110 
+	#ARPHRD_LOOPBACK
+ 772
+
+	)
+
+111 
+	#ARPHRD_LOCALTLK
+ 773
+
+	)
+
+112 
+	#ARPHRD_FDDI
+ 774
+
+	)
+
+113 
+	#ARPHRD_BIF
+ 775
+
+	)
+
+114 
+	#ARPHRD_SIT
+ 776
+
+	)
+
+115 
+	#ARPHRD_IPDDP
+ 777
+
+	)
+
+116 
+	#ARPHRD_IPGRE
+ 778
+
+	)
+
+117 
+	#ARPHRD_PIMREG
+ 779
+
+	)
+
+118 
+	#ARPHRD_HIPPI
+ 780
+
+	)
+
+119 
+	#ARPHRD_ASH
+ 781
+
+	)
+
+120 
+	#ARPHRD_ECONET
+ 782
+
+	)
+
+121 
+	#ARPHRD_IRDA
+ 783
+
+	)
+
+122 
+	#ARPHRD_FCPP
+ 784
+
+	)
+
+123 
+	#ARPHRD_FCAL
+ 785
+
+	)
+
+124 
+	#ARPHRD_FCPL
+ 786
+
+	)
+
+125 
+	#ARPHRD_FCFABRIC
+ 787
+
+	)
+
+126 
+	#ARPHRD_IEEE802_TR
+ 800
+
+	)
+
+127 
+	#ARPHRD_IEEE80211
+ 801
+
+	)
+
+128 
+	#ARPHRD_IEEE80211_PRISM
+ 802
+
+	)
+
+129 
+	#ARPHRD_IEEE80211_RADIOTAP
+ 803
+
+	)
+
+130 
+	#ARPHRD_IEEE802154
+ 804
+
+	)
+
+131 
+	#ARPHRD_IEEE802154_PHY
+ 805
+
+	)
+
+133 
+	#ARPHRD_VOID
+ 0xFFFF
+
+	)
+
+134 
+	#ARPHRD_NONE
+ 0xFFFE
+
+	)
+
+138 
+	s��eq
+
+
+140 
+sockaddr
+ 
+	m�p_�
+;
+
+141 
+sockaddr
+ 
+	m�p_ha
+;
+
+142 
+	m�p_�ags
+;
+
+143 
+sockaddr
+ 
+	m�p_�tmask
+;
+
+144 
+	m�p_dev
+[16];
+
+147 
+	s��eq_�d
+
+
+149 
+sockaddr
+ 
+	m�p_�
+;
+
+150 
+sockaddr
+ 
+	m�p_ha
+;
+
+151 
+	m�p_�ags
+;
+
+152 
+sockaddr
+ 
+	m�p_�tmask
+;
+
+156 
+	#ATF_COM
+ 0x02
+
+	)
+
+157 
+	#ATF_PERM
+ 0x04
+
+	)
+
+158 
+	#ATF_PUBL
+ 0x08
+
+	)
+
+159 
+	#ATF_USETRAILERS
+ 0x10
+
+	)
+
+160 
+	#ATF_NETMASK
+ 0x20
+
+	)
+
+162 
+	#ATF_DONTPUB
+ 0x40
+
+	)
+
+163 
+	#ATF_MAGIC
+ 0x80
+
+	)
+
+167 
+	#ARPD_UPDATE
+ 0x01
+
+	)
+
+168 
+	#ARPD_LOOKUP
+ 0x02
+
+	)
+
+169 
+	#ARPD_FLUSH
+ 0x03
+
+	)
+
+171 
+	s�pd_�que�
+
+
+173 
+	m�q
+;
+
+174 
+u_�t32_t
+ 
+	m�
+;
+
+175 
+	mdev
+;
+
+176 
+	m�amp
+;
+
+177 
+	mupd�ed
+;
+
+178 
+	mha
+[
+MAX_ADDR_LEN
+];
+
+181 
+	g__END_DECLS
+
+
+	@/usr/include/netdb.h
+
+22 #i�def 
+_NETDB_H
+
+
+23 
+	#_NETDB_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+27 
+	~<�t��/�.h
+>
+
+28 
+	~<�d�t.h
+>
+
+29 #ifde�
+__USE_MISC
+
+
+32 
+	~<�c/�tdb.h
+>
+
+35 #ifde�
+__USE_GNU
+
+
+36 
+	#__�ed_sigev�t_t
+
+
+	)
+
+37 
+	~<b�s/sig�fo.h
+>
+
+38 
+	#__�ed_time�ec
+
+
+	)
+
+39 
+	~<time.h
+>
+
+42 
+	~<b�s/�tdb.h
+>
+
+45 
+	#_PATH_HEQUIV
+ "/�c/ho�s.equiv"
+
+	)
+
+46 
+	#_PATH_HOSTS
+ "/�c/ho�s"
+
+	)
+
+47 
+	#_PATH_NETWORKS
+ "/�c/�tw�ks"
+
+	)
+
+48 
+	#_PATH_NSSWITCH_CONF
+ "/�c/nssw�ch.c�f"
+
+	)
+
+49 
+	#_PATH_PROTOCOLS
+ "/�c/��oc�s"
+
+	)
+
+50 
+	#_PATH_SERVICES
+ "/�c/�rvi�s"
+
+	)
+
+53 
+	g__BEGIN_DECLS
+
+
+55 #i�
+def�ed
+ 
+__USE_MISC
+ || !def�ed 
+__USE_XOPEN2K8
+
+
+58 
+	#h_��o
+ (*
+	`__h_��o_lo�ti�
+ ())
+
+	)
+
+61 
*
+	$__h_��o_lo�ti�
+ (�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+65 
+	#HOST_NOT_FOUND
+ 1
+
+	)
+
+66 
+	#TRY_AGAIN
+ 2
+
+	)
+
+68 
+	#NO_RECOVERY
+ 3
+
+	)
+
+70 
+	#NO_DATA
+ 4
+
+	)
+
+73 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+74 
+	#NETDB_INTERNAL
+ -1
+
+	)
+
+75 
+	#NETDB_SUCCESS
+ 0
+
+	)
+
+76 
+	#NO_ADDRESS
+ 
+NO_DATA
+
+
+	)
+
+79 #i�
+def�ed
+ 
+__USE_XOPEN2K
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+81 
+	#IPPORT_RESERVED
+ 1024
+
+	)
+
+84 #ifde�
+__USE_GNU
+
+
+86 
+	#SCOPE_DELIMITER
+ '%'
+
+	)
+
+89 #ifde�
+__USE_MISC
+
+
+92 

+	$h�r�
+ (cڡ *
+__�r
+�
+__THROW
+;
+
+95 
cڡ *
+	$h����
+ (
+__�r_num
+�
+__THROW
+;
+
+100 
+	sho��t
+
+
+102 *
+h_�me
+;
+
+103 **
+h_���s
+;
+
+104 
+h_add�y�
+;
+
+105 
+h_�ngth
+;
+
+106 **
+h_addr_li�
+;
+
+107 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+108 
+	#h_addr
+ 
+h_addr_li�
+[0]
+
+	)
+
+117 

+	`�tho��t
+ (
+__�ay_ݒ
+);
+
+123 

+	`�dho��t
+ ();
+
+130 

+ho��t
+ *
+	`g�ho��t
+ ();
+
+137 

+ho��t
+ *
+	`g�ho�byaddr
+ (cڡ *
+__addr
+, 
+__sock�n_t
+ 
+__�n
+,
+
+138 
+__ty�
+);
+
+144 

+ho��t
+ *
+	`g�ho�by�me
+ (cڡ *
+__�me
+);
+
+146 #ifde�
+__USE_MISC
+
+
+155 

+ho��t
+ *
+	`g�ho�by�me2
+ (cڡ *
+__�me
+, 
+__af
+);
+
+167 

+	`g�ho��t_r
+ (
+ho��t
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+168 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+169 
+ho��t
+ **
+__��ri�
+ 
+__�su�
+,
+
+170 *
+__��ri�
+ 
+__h_���
+);
+
+172 

+	`g�ho�byaddr_r
+ (cڡ *
+__��ri�
+ 
+__addr
+, 
+__sock�n_t
+ 
+__�n
+,
+
+173 
+__ty�
+,
+
+174 
+ho��t
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+175 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+176 
+ho��t
+ **
+__��ri�
+ 
+__�su�
+,
+
+177 *
+__��ri�
+ 
+__h_���
+);
+
+179 

+	`g�ho�by�me_r
+ (cڡ *
+__��ri�
+ 
+__�me
+,
+
+180 
+ho��t
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+181 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+182 
+ho��t
+ **
+__��ri�
+ 
+__�su�
+,
+
+183 *
+__��ri�
+ 
+__h_���
+);
+
+185 

+	`g�ho�by�me2_r
+ (cڡ *
+__��ri�
+ 
+__�me
+, 
+__af
+,
+
+186 
+ho��t
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+187 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+188 
+ho��t
+ **
+__��ri�
+ 
+__�su�
+,
+
+189 *
+__��ri�
+ 
+__h_���
+);
+
+198 

+	`����t
+ (
+__�ay_ݒ
+);
+
+204 

+	`�d�
+ ();
+
+211 

+�
+ *
+	`g��
+ ();
+
+218 

+�
+ *
+	`g��tbyaddr
+ (
+u�t32_t
+ 
+__�t
+, 
+__ty�
+);
+
+224 

+�
+ *
+	`g��tby�me
+ (cڡ *
+__�me
+);
+
+226 #ifdef 
+__USE_MISC
+
+
+237 

+	`g��_r
+ (
+�
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+238 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+239 
+�
+ **
+__��ri�
+ 
+__�su�
+,
+
+240 *
+__��ri�
+ 
+__h_���
+);
+
+242 

+	`g��tbyaddr_r
+ (
+u�t32_t
+ 
+__�t
+, 
+__ty�
+,
+
+243 
+�
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+244 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+245 
+�
+ **
+__��ri�
+ 
+__�su�
+,
+
+246 *
+__��ri�
+ 
+__h_���
+);
+
+248 

+	`g��tby�me_r
+ (cڡ *
+__��ri�
+ 
+__�me
+,
+
+249 
+�
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+250 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+251 
+�
+ **
+__��ri�
+ 
+__�su�
+,
+
+252 *
+__��ri�
+ 
+__h_���
+);
+
+257 
+	s�rv�t
+
+
+259 *
+s_�me
+;
+
+260 **
+s_���s
+;
+
+261 
+s_p�t
+;
+
+262 *
+s_��o
+;
+
+270 

+	`�t�rv�t
+ (
+__�ay_ݒ
+);
+
+276 

+	`�d�rv�t
+ ();
+
+283 

+�rv�t
+ *
+	`g��rv�t
+ ();
+
+290 

+�rv�t
+ *
+	`g��rvby�me
+ (cڡ *
+__�me
+, cڡ *
+__��o
+);
+
+297 

+�rv�t
+ *
+	`g��rvbyp�t
+ (
+__p�t
+, cڡ *
+__��o
+);
+
+300 #ifdef 
+__USE_MISC
+
+
+308 

+	`g��rv�t_r
+ (
+�rv�t
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+309 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+310 
+�rv�t
+ **
+__��ri�
+ 
+__�su�
+);
+
+312 

+	`g��rvby�me_r
+ (cڡ *
+__��ri�
+ 
+__�me
+,
+
+313 cڡ *
+__��ri�
+ 
+__��o
+,
+
+314 
+�rv�t
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+315 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+316 
+�rv�t
+ **
+__��ri�
+ 
+__�su�
+);
+
+318 

+	`g��rvbyp�t_r
+ (
+__p�t
+, cڡ *
+__��ri�
+ 
+__��o
+,
+
+319 
+�rv�t
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+320 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+321 
+�rv�t
+ **
+__��ri�
+ 
+__�su�
+);
+
+326 
+	s����
+
+
+328 *
+p_�me
+;
+
+329 **
+p_���s
+;
+
+330 
+p_��o
+;
+
+338 

+	`��r���
+ (
+__�ay_ݒ
+);
+
+344 

+	`�d����
+ ();
+
+351 

+����
+ *
+	`g�����
+ ();
+
+357 

+����
+ *
+	`g���oby�me
+ (cڡ *
+__�me
+);
+
+363 

+����
+ *
+	`g���obynumb�
+ (
+__��o
+);
+
+366 #ifdef 
+__USE_MISC
+
+
+374 

+	`g�����_r
+ (
+����
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+375 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+376 
+����
+ **
+__��ri�
+ 
+__�su�
+);
+
+378 

+	`g���oby�me_r
+ (cڡ *
+__��ri�
+ 
+__�me
+,
+
+379 
+����
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+380 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+381 
+����
+ **
+__��ri�
+ 
+__�su�
+);
+
+383 

+	`g���obynumb�_r
+ (
+__��o
+,
+
+384 
+����
+ *
+__��ri�
+ 
+__�su�_buf
+,
+
+385 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+386 
+����
+ **
+__��ri�
+ 
+__�su�
+);
+
+395 

+	`���g��
+ (cڡ *
+__�tgroup
+);
+
+403 

+	`�d�tg��
+ ();
+
+412 

+	`g��tg��
+ (**
+__��ri�
+ 
+__ho�p
+,
+
+413 **
+__��ri�
+ 
+__u��
+,
+
+414 **
+__��ri�
+ 
+__doma�p
+);
+
+423 

+	`��tgr
+ (cڡ *
+__�tgroup
+, cڡ *
+__ho�
+,
+
+424 cڡ *
+__u�r
+, cڡ *
+__doma�
+);
+
+432 

+	`g��tg��_r
+ (**
+__��ri�
+ 
+__ho�p
+,
+
+433 **
+__��ri�
+ 
+__u��
+,
+
+434 **
+__��ri�
+ 
+__doma�p
+,
+
+435 *
+__��ri�
+ 
+__buf�r
+, 
+size_t
+ 
+__bu�
+);
+
+439 #ifde�
+__USE_BSD
+
+
+451 

+	`rcmd
+ (**
+__��ri�
+ 
+__aho�
+, 
+__��t
+,
+
+452 cڡ *
+__��ri�
+ 
+__locu�r
+,
+
+453 cڡ *
+__��ri�
+ 
+__�mu�r
+,
+
+454 cڡ *
+__��ri�
+ 
+__cmd
+, *__��ri� 
+__fd2p
+);
+
+463 

+	`rcmd_af
+ (**
+__��ri�
+ 
+__aho�
+, 
+__��t
+,
+
+464 cڡ *
+__��ri�
+ 
+__locu�r
+,
+
+465 cڡ *
+__��ri�
+ 
+__�mu�r
+,
+
+466 cڡ *
+__��ri�
+ 
+__cmd
+, *__��ri� 
+__fd2p
+,
+
+467 
+�_�m�y_t
+ 
+__af
+);
+
+479 

+	`�xec
+ (**
+__��ri�
+ 
+__aho�
+, 
+__��t
+,
+
+480 cڡ *
+__��ri�
+ 
+__�me
+,
+
+481 cڡ *
+__��ri�
+ 
+__�ss
+,
+
+482 cڡ *
+__��ri�
+ 
+__cmd
+, *__��ri� 
+__fd2p
+);
+
+491 

+	`�xec_af
+ (**
+__��ri�
+ 
+__aho�
+, 
+__��t
+,
+
+492 cڡ *
+__��ri�
+ 
+__�me
+,
+
+493 cڡ *
+__��ri�
+ 
+__�ss
+,
+
+494 cڡ *
+__��ri�
+ 
+__cmd
+, *__��ri� 
+__fd2p
+,
+
+495 
+�_�m�y_t
+ 
+__af
+);
+
+505 

+	`ru�rok
+ (cڡ *
+__rho�
+, 
+__su�r
+,
+
+506 cڡ *
+__�mu�r
+, cڡ *
+__locu�r
+);
+
+515 

+	`ru�rok_af
+ (cڡ *
+__rho�
+, 
+__su�r
+,
+
+516 cڡ *
+__�mu�r
+, cڡ *
+__locu�r
+,
+
+517 
+�_�m�y_t
+ 
+__af
+);
+
+528 

+	`�u�rok
+ (
+u�t32_t
+ 
+__�ddr
+, 
+__su�r
+,
+
+529 cڡ *
+__�mu�r
+, cڡ *
+__locu�r
+);
+
+539 

+	`�u�rok_af
+ (cڡ *
+__�ddr
+, 
+__su�r
+,
+
+540 cڡ *
+__�mu�r
+, cڡ *
+__locu�r
+,
+
+541 
+�_�m�y_t
+ 
+__af
+);
+
+551 

+	`�esvp�t
+ (*
+__�p�t
+);
+
+560 

+	`�esvp�t_af
+ (*
+__�p�t
+, 
+�_�m�y_t
+ 
+__af
+);
+
+565 #ifdef 
+__USE_POSIX
+
+
+567 
+	saddr�fo
+
+
+569 
+ai_�ags
+;
+
+570 
+ai_�m�y
+;
+
+571 
+ai_sockty�
+;
+
+572 
+ai_��oc�
+;
+
+573 
+sock�n_t
+ 
+ai_add��
+;
+
+574 
+sockaddr
+ *
+ai_addr
+;
+
+575 *
+ai_�n��me
+;
+
+576 
+addr�fo
+ *
+ai_�xt
+;
+
+579 #ifde�
+__USE_GNU
+
+
+581 
+	sgaicb
+
+
+583 cڡ *
+�_�me
+;
+
+584 cڡ *
+�_�rvi�
+;
+
+585 cڡ 
+addr�fo
+ *
+�_�que�
+;
+
+586 
+addr�fo
+ *
+�_�su�
+;
+
+588 
+__�tu�
+;
+
+589 
+__glibc_��rved
+[5];
+
+593 
+	#GAI_WAIT
+ 0
+
+	)
+
+594 
+	#GAI_NOWAIT
+ 1
+
+	)
+
+598 
+	#AI_PASSIVE
+ 0x0001
+
+	)
+
+599 
+	#AI_CANONNAME
+ 0x0002
+
+	)
+
+600 
+	#AI_NUMERICHOST
+ 0x0004
+
+	)
+
+601 
+	#AI_V4MAPPED
+ 0x0008
+
+	)
+
+602 
+	#AI_ALL
+ 0x0010
+
+	)
+
+603 
+	#AI_ADDRCONFIG
+ 0x0020
+
+	)
+
+605 #ifde�
+__USE_GNU
+
+
+606 
+	#AI_IDN
+ 0x0040
+
+	)
+
+609 
+	#AI_CANONIDN
+ 0x0080
+
+	)
+
+610 
+	#AI_IDN_ALLOW_UNASSIGNED
+ 0x0100
+
+	)
+
+612 
+	#AI_IDN_USE_STD3_ASCII_RULES
+ 0x0200
+
+	)
+
+615 
+	#AI_NUMERICSERV
+ 0x0400
+
+	)
+
+618 
+	#EAI_BADFLAGS
+ -1
+
+	)
+
+619 
+	#EAI_NONAME
+ -2
+
+	)
+
+620 
+	#EAI_AGAIN
+ -3
+
+	)
+
+621 
+	#EAI_FAIL
+ -4
+
+	)
+
+622 
+	#EAI_FAMILY
+ -6
+
+	)
+
+623 
+	#EAI_SOCKTYPE
+ -7
+
+	)
+
+624 
+	#EAI_SERVICE
+ -8
+
+	)
+
+625 
+	#EAI_MEMORY
+ -10
+
+	)
+
+626 
+	#EAI_SYSTEM
+ -11
+
+	)
+
+627 
+	#EAI_OVERFLOW
+ -12
+
+	)
+
+628 #ifde�
+__USE_GNU
+
+
+629 
+	#EAI_NODATA
+ -5
+
+	)
+
+630 
+	#EAI_ADDRFAMILY
+ -9
+
+	)
+
+631 
+	#EAI_INPROGRESS
+ -100
+
+	)
+
+632 
+	#EAI_CANCELED
+ -101
+
+	)
+
+633 
+	#EAI_NOTCANCELED
+ -102
+
+	)
+
+634 
+	#EAI_ALLDONE
+ -103
+
+	)
+
+635 
+	#EAI_INTR
+ -104
+
+	)
+
+636 
+	#EAI_IDN_ENCODE
+ -105
+
+	)
+
+639 #ifde�
+__USE_MISC
+
+
+640 
+	#NI_MAXHOST
+ 1025
+
+	)
+
+641 
+	#NI_MAXSERV
+ 32
+
+	)
+
+644 
+	#NI_NUMERICHOST
+ 1
+
+	)
+
+645 
+	#NI_NUMERICSERV
+ 2
+
+	)
+
+646 
+	#NI_NOFQDN
+ 4
+
+	)
+
+647 
+	#NI_NAMEREQD
+ 8
+
+	)
+
+648 
+	#NI_DGRAM
+ 16
+
+	)
+
+649 #ifde�
+__USE_GNU
+
+
+650 
+	#NI_IDN
+ 32
+
+	)
+
+651 
+	#NI_IDN_ALLOW_UNASSIGNED
+ 64
+
+	)
+
+653 
+	#NI_IDN_USE_STD3_ASCII_RULES
+ 128
+
+	)
+
+662 

+	`g�addr�fo
+ (cڡ *
+__��ri�
+ 
+__�me
+,
+
+663 cڡ *
+__��ri�
+ 
+__�rvi�
+,
+
+664 cڡ 
+addr�fo
+ *
+__��ri�
+ 
+__�q
+,
+
+665 
+addr�fo
+ **
+__��ri�
+ 
+__�i
+);
+
+668 

+	$�addr�fo
+ (
+addr�fo
+ *
+__ai
+�
+__THROW
+;
+
+671 
cڡ *
+	$gai_����
+ (
+__ecode
+�
+__THROW
+;
+
+677 

+	`g��me�fo
+ (cڡ 
+sockaddr
+ *
+__��ri�
+ 
+__�
+,
+
+678 
+sock�n_t
+ 
+__��n
+, *
+__��ri�
+ 
+__ho�
+,
+
+679 
+sock�n_t
+ 
+__ho��n
+, *
+__��ri�
+ 
+__�rv
+,
+
+680 
+sock�n_t
+ 
+__�rv�n
+, 
+__�ags
+);
+
+683 #ifde�
+__USE_GNU
+
+
+692 

+	`g�addr�fo_a
+ (
+__mode
+, 
+gaicb
+ *
+__li�
+[
+__��ri�_�r
+],
+
+693 
+__�t
+, 
+sigev�t
+ *
+__��ri�
+ 
+__sig
+);
+
+703 

+	`gai_su��d
+ (cڡ 
+gaicb
+ *cڡ 
+__li�
+[], 
+__�t
+,
+
+704 cڡ 
+time�ec
+ *
+__timeout
+);
+
+707 

+	$gai_�r�
+ (
+gaicb
+ *
+__�q
+�
+__THROW
+;
+
+710 

+	$gai_�n�l
+ (
+gaicb
+ *
+__gaicbp
+�
+__THROW
+;
+
+713 
+__END_DECLS
+
+
+	@/usr/include/netinet/in.h
+
+18 #i�def 
+_NETINET_IN_H
+
+
+19 
+	#_NETINET_IN_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+22 
+	~<�d�t.h
+>
+
+23 
+	~<sys/sock�.h
+>
+
+24 
+	~<b�s/ty�s.h
+>
+
+27 
+__BEGIN_DECLS
+
+
+30 
+u�t32_t
+ 
+	t�_addr_t
+;
+
+31 
+	s�_addr
+
+
+33 
+�_addr_t
+ 
+	ms_addr
+;
+
+37 
+	~<b�s/�.h
+>
+
+42 
+	mIPPROTO_IP
+ = 0,
+
+43 
+	#IPPROTO_IP
+ 
+IPPROTO_IP
+
+
+	)
+
+44 
+	mIPPROTO_ICMP
+ = 1,
+
+45 
+	#IPPROTO_ICMP
+ 
+IPPROTO_ICMP
+
+
+	)
+
+46 
+	mIPPROTO_IGMP
+ = 2,
+
+47 
+	#IPPROTO_IGMP
+ 
+IPPROTO_IGMP
+
+
+	)
+
+48 
+	mIPPROTO_IPIP
+ = 4,
+
+49 
+	#IPPROTO_IPIP
+ 
+IPPROTO_IPIP
+
+
+	)
+
+50 
+	mIPPROTO_TCP
+ = 6,
+
+51 
+	#IPPROTO_TCP
+ 
+IPPROTO_TCP
+
+
+	)
+
+52 
+	mIPPROTO_EGP
+ = 8,
+
+53 
+	#IPPROTO_EGP
+ 
+IPPROTO_EGP
+
+
+	)
+
+54 
+	mIPPROTO_PUP
+ = 12,
+
+55 
+	#IPPROTO_PUP
+ 
+IPPROTO_PUP
+
+
+	)
+
+56 
+	mIPPROTO_UDP
+ = 17,
+
+57 
+	#IPPROTO_UDP
+ 
+IPPROTO_UDP
+
+
+	)
+
+58 
+	mIPPROTO_IDP
+ = 22,
+
+59 
+	#IPPROTO_IDP
+ 
+IPPROTO_IDP
+
+
+	)
+
+60 
+	mIPPROTO_TP
+ = 29,
+
+61 
+	#IPPROTO_TP
+ 
+IPPROTO_TP
+
+
+	)
+
+62 
+	mIPPROTO_DCCP
+ = 33,
+
+63 
+	#IPPROTO_DCCP
+ 
+IPPROTO_DCCP
+
+
+	)
+
+64 
+	mIPPROTO_IPV6
+ = 41,
+
+65 
+	#IPPROTO_IPV6
+ 
+IPPROTO_IPV6
+
+
+	)
+
+66 
+	mIPPROTO_RSVP
+ = 46,
+
+67 
+	#IPPROTO_RSVP
+ 
+IPPROTO_RSVP
+
+
+	)
+
+68 
+	mIPPROTO_GRE
+ = 47,
+
+69 
+	#IPPROTO_GRE
+ 
+IPPROTO_GRE
+
+
+	)
+
+70 
+	mIPPROTO_ESP
+ = 50,
+
+71 
+	#IPPROTO_ESP
+ 
+IPPROTO_ESP
+
+
+	)
+
+72 
+	mIPPROTO_AH
+ = 51,
+
+73 
+	#IPPROTO_AH
+ 
+IPPROTO_AH
+
+
+	)
+
+74 
+	mIPPROTO_MTP
+ = 92,
+
+75 
+	#IPPROTO_MTP
+ 
+IPPROTO_MTP
+
+
+	)
+
+76 
+	mIPPROTO_BEETPH
+ = 94,
+
+77 
+	#IPPROTO_BEETPH
+ 
+IPPROTO_BEETPH
+
+
+	)
+
+78 
+	mIPPROTO_ENCAP
+ = 98,
+
+79 
+	#IPPROTO_ENCAP
+ 
+IPPROTO_ENCAP
+
+
+	)
+
+80 
+	mIPPROTO_PIM
+ = 103,
+
+81 
+	#IPPROTO_PIM
+ 
+IPPROTO_PIM
+
+
+	)
+
+82 
+	mIPPROTO_COMP
+ = 108,
+
+83 
+	#IPPROTO_COMP
+ 
+IPPROTO_COMP
+
+
+	)
+
+84 
+	mIPPROTO_SCTP
+ = 132,
+
+85 
+	#IPPROTO_SCTP
+ 
+IPPROTO_SCTP
+
+
+	)
+
+86 
+	mIPPROTO_UDPLITE
+ = 136,
+
+87 
+	#IPPROTO_UDPLITE
+ 
+IPPROTO_UDPLITE
+
+
+	)
+
+88 
+	mIPPROTO_RAW
+ = 255,
+
+89 
+	#IPPROTO_RAW
+ 
+IPPROTO_RAW
+
+
+	)
+
+90 
+	mIPPROTO_MAX
+
+
+96 #i�de�
+__USE_KERNEL_IPV6_DEFS
+
+
+99 
+	mIPPROTO_HOPOPTS
+ = 0,
+
+100 
+	#IPPROTO_HOPOPTS
+ 
+IPPROTO_HOPOPTS
+
+
+	)
+
+101 
+	mIPPROTO_ROUTING
+ = 43,
+
+102 
+	#IPPROTO_ROUTING
+ 
+IPPROTO_ROUTING
+
+
+	)
+
+103 
+	mIPPROTO_FRAGMENT
+ = 44,
+
+104 
+	#IPPROTO_FRAGMENT
+ 
+IPPROTO_FRAGMENT
+
+
+	)
+
+105 
+	mIPPROTO_ICMPV6
+ = 58,
+
+106 
+	#IPPROTO_ICMPV6
+ 
+IPPROTO_ICMPV6
+
+
+	)
+
+107 
+	mIPPROTO_NONE
+ = 59,
+
+108 
+	#IPPROTO_NONE
+ 
+IPPROTO_NONE
+
+
+	)
+
+109 
+	mIPPROTO_DSTOPTS
+ = 60,
+
+110 
+	#IPPROTO_DSTOPTS
+ 
+IPPROTO_DSTOPTS
+
+
+	)
+
+111 
+	mIPPROTO_MH
+ = 135
+
+112 
+	#IPPROTO_MH
+ 
+IPPROTO_MH
+
+
+	)
+
+117 
+u�t16_t
+ 
+	t�_p�t_t
+;
+
+122 
+	mIPPORT_ECHO
+ = 7,
+
+123 
+	mIPPORT_DISCARD
+ = 9,
+
+124 
+	mIPPORT_SYSTAT
+ = 11,
+
+125 
+	mIPPORT_DAYTIME
+ = 13,
+
+126 
+	mIPPORT_NETSTAT
+ = 15,
+
+127 
+	mIPPORT_FTP
+ = 21,
+
+128 
+	mIPPORT_TELNET
+ = 23,
+
+129 
+	mIPPORT_SMTP
+ = 25,
+
+130 
+	mIPPORT_TIMESERVER
+ = 37,
+
+131 
+	mIPPORT_NAMESERVER
+ = 42,
+
+132 
+	mIPPORT_WHOIS
+ = 43,
+
+133 
+	mIPPORT_MTP
+ = 57,
+
+135 
+	mIPPORT_TFTP
+ = 69,
+
+136 
+	mIPPORT_RJE
+ = 77,
+
+137 
+	mIPPORT_FINGER
+ = 79,
+
+138 
+	mIPPORT_TTYLINK
+ = 87,
+
+139 
+	mIPPORT_SUPDUP
+ = 95,
+
+142 
+	mIPPORT_EXECSERVER
+ = 512,
+
+143 
+	mIPPORT_LOGINSERVER
+ = 513,
+
+144 
+	mIPPORT_CMDSERVER
+ = 514,
+
+145 
+	mIPPORT_EFSSERVER
+ = 520,
+
+148 
+	mIPPORT_BIFFUDP
+ = 512,
+
+149 
+	mIPPORT_WHOSERVER
+ = 513,
+
+150 
+	mIPPORT_ROUTESERVER
+ = 520,
+
+153 
+	mIPPORT_RESERVED
+ = 1024,
+
+156 
+	mIPPORT_USERRESERVED
+ = 5000
+
+164 
+	#IN_CLASSA
+(
+a
+�((((
+�_addr_t
+)�)�& 0x80000000�=�0)
+
+	)
+
+165 
+	#IN_CLASSA_NET
+ 0xff000000
+
+	)
+
+166 
+	#IN_CLASSA_NSHIFT
+ 24
+
+	)
+
+167 
+	#IN_CLASSA_HOST
+ (0xfffffff�& ~
+IN_CLASSA_NET
+)
+
+	)
+
+168 
+	#IN_CLASSA_MAX
+ 128
+
+	)
+
+170 
+	#IN_CLASSB
+(
+a
+�((((
+�_addr_t
+)�)�& 0xc0000000�=�0x80000000)
+
+	)
+
+171 
+	#IN_CLASSB_NET
+ 0xffff0000
+
+	)
+
+172 
+	#IN_CLASSB_NSHIFT
+ 16
+
+	)
+
+173 
+	#IN_CLASSB_HOST
+ (0xfffffff�& ~
+IN_CLASSB_NET
+)
+
+	)
+
+174 
+	#IN_CLASSB_MAX
+ 65536
+
+	)
+
+176 
+	#IN_CLASSC
+(
+a
+�((((
+�_addr_t
+)�)�& 0xe0000000�=�0xc0000000)
+
+	)
+
+177 
+	#IN_CLASSC_NET
+ 0xffffff00
+
+	)
+
+178 
+	#IN_CLASSC_NSHIFT
+ 8
+
+	)
+
+179 
+	#IN_CLASSC_HOST
+ (0xfffffff�& ~
+IN_CLASSC_NET
+)
+
+	)
+
+181 
+	#IN_CLASSD
+(
+a
+�((((
+�_addr_t
+)�)�& 0xf0000000�=�0xe0000000)
+
+	)
+
+182 
+	#IN_MULTICAST
+(
+a
+�
+	`IN_CLASSD
+�)
+
+	)
+
+184 
+	#IN_EXPERIMENTAL
+(
+a
+�((((
+�_addr_t
+)�)�& 0xe0000000�=�0xe0000000)
+
+	)
+
+185 
+	#IN_BADCLASS
+(
+a
+�((((
+�_addr_t
+)�)�& 0xf0000000�=�0xf0000000)
+
+	)
+
+188 
+	#INADDR_ANY
+ ((
+�_addr_t
+�0x00000000)
+
+	)
+
+190 
+	#INADDR_BROADCAST
+ ((
+�_addr_t
+�0xffffffff)
+
+	)
+
+192 
+	#INADDR_NONE
+ ((
+�_addr_t
+�0xffffffff)
+
+	)
+
+195 
+	#IN_LOOPBACKNET
+ 127
+
+	)
+
+197 #i�de�
+INADDR_LOOPBACK
+
+
+198 
+	#INADDR_LOOPBACK
+ ((
+�_addr_t
+�0x7f000001�
+
+	)
+
+202 
+	#INADDR_UNSPEC_GROUP
+ ((
+�_addr_t
+�0xe0000000�
+
+	)
+
+203 
+	#INADDR_ALLHOSTS_GROUP
+ ((
+�_addr_t
+�0xe0000001�
+
+	)
+
+204 
+	#INADDR_ALLRTRS_GROUP
+ ((
+�_addr_t
+�0xe0000002�
+
+	)
+
+205 
+	#INADDR_MAX_LOCAL_GROUP
+ ((
+�_addr_t
+�0xe00000ff�
+
+	)
+
+207 #i�de�
+__USE_KERNEL_IPV6_DEFS
+
+
+209 
+	s�6_addr
+
+
+213 
+u�t8_t
+ 
+	m__u6_addr8
+[16];
+
+214 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+215 
+u�t16_t
+ 
+	m__u6_addr16
+[8];
+
+216 
+u�t32_t
+ 
+	m__u6_addr32
+[4];
+
+218 } 
+	m__�6_u
+;
+
+219 
+	#s6_addr
+ 
+__�6_u
+.
+__u6_addr8
+
+
+	)
+
+220 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+221 
+	#s6_addr16
+ 
+__�6_u
+.
+__u6_addr16
+
+
+	)
+
+222 
+	#s6_addr32
+ 
+__�6_u
+.
+__u6_addr32
+
+
+	)
+
+227 
cڡ 
+�6_addr
+ 
+�6addr_�y
+;
+
+228 
cڡ 
+�6_addr
+ 
+�6addr_lo�back
+;
+
+229 
+	#IN6ADDR_ANY_INIT
+ { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+
+	)
+
+230 
+	#IN6ADDR_LOOPBACK_INIT
+ { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
+	)
+
+232 
+	#INET_ADDRSTRLEN
+ 16
+
+	)
+
+233 
+	#INET6_ADDRSTRLEN
+ 46
+
+	)
+
+237 
+	ssockaddr_�
+
+
+239 
+__SOCKADDR_COMMON
+ (
+s�_
+);
+
+240 
+�_p�t_t
+ 
+	ms�_p�t
+;
+
+241 
+�_addr
+ 
+	ms�_addr
+;
+
+244 
+	ms�_z�o
+[ (
+sockaddr
+) -
+
+245 
+__SOCKADDR_COMMON_SIZE
+ -
+
+246  (
+�_p�t_t
+) -
+
+247  (
+�_addr
+)];
+
+250 #i�de�
+__USE_KERNEL_IPV6_DEFS
+
+
+252 
+	ssockaddr_�6
+
+
+254 
+__SOCKADDR_COMMON
+ (
+s�6_
+);
+
+255 
+�_p�t_t
+ 
+	ms�6_p�t
+;
+
+256 
+u�t32_t
+ 
+	ms�6_�ow�fo
+;
+
+257 
+�6_addr
+ 
+	ms�6_addr
+;
+
+258 
+u�t32_t
+ 
+	ms�6_sc�e_id
+;
+
+262 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+264 
+	s�_m�q
+
+
+267 
+�_addr
+ 
+	mimr_muɟddr
+;
+
+270 
+�_addr
+ 
+	mimr_��r��
+;
+
+273 
+	s�_m�q_sour�
+
+
+276 
+�_addr
+ 
+	mimr_muɟddr
+;
+
+279 
+�_addr
+ 
+	mimr_��r��
+;
+
+282 
+�_addr
+ 
+	mimr_sour�addr
+;
+
+286 #i�de�
+__USE_KERNEL_IPV6_DEFS
+
+
+288 
+	s�v6_m�q
+
+
+291 
+�6_addr
+ 
+	m�v6mr_muɟddr
+;
+
+294 
+	m�v6mr_��r��
+;
+
+298 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+300 
+	sgroup_�q
+
+
+303 
+u�t32_t
+ 
+	mgr_��r��
+;
+
+306 
+sockaddr_��age
+ 
+	mgr_group
+;
+
+309 
+	sgroup_sour�_�q
+
+
+312 
+u�t32_t
+ 
+	mg�_��r��
+;
+
+315 
+sockaddr_��age
+ 
+	mg�_group
+;
+
+318 
+sockaddr_��age
+ 
+	mg�_sour�
+;
+
+323 
+	s�_msf��r
+
+
+326 
+�_addr
+ 
+	mimsf_muɟddr
+;
+
+329 
+�_addr
+ 
+	mimsf_��r��
+;
+
+332 
+u�t32_t
+ 
+	mimsf_fmode
+;
+
+335 
+u�t32_t
+ 
+	mimsf_num�c
+;
+
+337 
+�_addr
+ 
+	mimsf_�i�
+[1];
+
+340 
+	#IP_MSFILTER_SIZE
+(
+num�c
+�( (
+�_msf��r
+) \
+
+341 -  (
+�_addr
+) \
+
+342 + (
+num�c
+�*  (
+�_addr
+))
+
+	)
+
+344 
+	sgroup_f��r
+
+
+347 
+u�t32_t
+ 
+	mgf_��r��
+;
+
+350 
+sockaddr_��age
+ 
+	mgf_group
+;
+
+353 
+u�t32_t
+ 
+	mgf_fmode
+;
+
+356 
+u�t32_t
+ 
+	mgf_num�c
+;
+
+358 
+sockaddr_��age
+ 
+	mgf_�i�
+[1];
+
+361 
+	#GROUP_FILTER_SIZE
+(
+num�c
+�( (
+group_f��r
+) \
+
+362 -  (
+sockaddr_��age
+) \
+
+363 + ((
+num�c
+) \
+
+364 *  (
+sockaddr_��age
+)))
+
+	)
+
+374 
+u�t32_t
+ 
+	$�ohl
+ (
+u�t32_t
+ 
+__�g
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+375 
+u�t16_t
+ 
+	$�ohs
+ (
+u�t16_t
+ 
+__�tsh�t
+)
+
+376 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+377 
+u�t32_t
+ 
+	$ht�l
+ (
+u�t32_t
+ 
+__ho�l�g
+)
+
+378 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+379 
+u�t16_t
+ 
+	$ht�s
+ (
+u�t16_t
+ 
+__ho�sh�t
+)
+
+380 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+382 
+	~<�d�n.h
+>
+
+385 
+	~<b�s/by�sw�.h
+>
+
+387 #ifde�
+__OPTIMIZE__
+
+
+391 #i�
+__BYTE_ORDER
+ =�
+__BIG_ENDIAN
+
+
+394 
+	#�ohl
+(
+x
+�(x)
+
+	)
+
+395 
+	#�ohs
+(
+x
+�(x)
+
+	)
+
+396 
+	#ht�l
+(
+x
+�(x)
+
+	)
+
+397 
+	#ht�s
+(
+x
+�(x)
+
+	)
+
+399 #i�
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+400 
+	#�ohl
+(
+x
+�
+	`__bsw�_32
+ (x)
+
+	)
+
+401 
+	#�ohs
+(
+x
+�
+	`__bsw�_16
+ (x)
+
+	)
+
+402 
+	#ht�l
+(
+x
+�
+	`__bsw�_32
+ (x)
+
+	)
+
+403 
+	#ht�s
+(
+x
+�
+	`__bsw�_16
+ (x)
+
+	)
+
+408 #ifde�
+__GNUC__
+
+
+409 
+	#IN6_IS_ADDR_UNSPECIFIED
+(
+a
+) \
+
+410 (
+__ex�nsi�__
+ \
+
+411 ({ cڡ 
+�6_addr
+ *
+__a
+ = (cڡ �6_add�*�(
+a
+); \
+
+412 
+__a
+->
+s6_addr32
+[0] == 0 \
+
+413 && 
+__a
+->
+s6_addr32
+[1] == 0 \
+
+414 && 
+__a
+->
+s6_addr32
+[2] == 0 \
+
+415 && 
+__a
+->
+s6_addr32
+[3] =�0; 
+	}
+}))
+
+	)
+
+417 
+	#IN6_IS_ADDR_LOOPBACK
+(
+a
+) \
+
+418 (
+__ex�nsi�__
+ \
+
+419 ({ cڡ 
+�6_addr
+ *
+__a
+ = (cڡ �6_add�*�(
+a
+); \
+
+420 
+__a
+->
+s6_addr32
+[0] == 0 \
+
+421 && 
+__a
+->
+s6_addr32
+[1] == 0 \
+
+422 && 
+__a
+->
+s6_addr32
+[2] == 0 \
+
+423 && 
+__a
+->
+s6_addr32
+[3] =�
+	`ht�l
+ (1); }))
+
+	)
+
+425 
+	#IN6_IS_ADDR_LINKLOCAL
+(
+a
+) \
+
+426 (
+__ex�nsi�__
+ \
+
+427 ({ cڡ 
+�6_addr
+ *
+__a
+ = (cڡ �6_add�*�(
+a
+); \
+
+428 (
+__a
+->
+s6_addr32
+[0] & 
+	`ht�l
+ (0xffc00000)�=�ht��(0x�800000); }))
+
+	)
+
+430 
+	#IN6_IS_ADDR_SITELOCAL
+(
+a
+) \
+
+431 (
+__ex�nsi�__
+ \
+
+432 ({ cڡ 
+�6_addr
+ *
+__a
+ = (cڡ �6_add�*�(
+a
+); \
+
+433 (
+__a
+->
+s6_addr32
+[0] & 
+	`ht�l
+ (0xffc00000)�=�ht��(0x�c00000); }))
+
+	)
+
+435 
+	#IN6_IS_ADDR_V4MAPPED
+(
+a
+) \
+
+436 (
+__ex�nsi�__
+ \
+
+437 ({ cڡ 
+�6_addr
+ *
+__a
+ = (cڡ �6_add�*�(
+a
+); \
+
+438 
+__a
+->
+s6_addr32
+[0] == 0 \
+
+439 && 
+__a
+->
+s6_addr32
+[1] == 0 \
+
+440 && 
+__a
+->
+s6_addr32
+[2] =�
+	`ht�l
+ (0xffff); }))
+
+	)
+
+442 
+	#IN6_IS_ADDR_V4COMPAT
+(
+a
+) \
+
+443 (
+__ex�nsi�__
+ \
+
+444 ({ cڡ 
+�6_addr
+ *
+__a
+ = (cڡ �6_add�*�(
+a
+); \
+
+445 
+__a
+->
+s6_addr32
+[0] == 0 \
+
+446 && 
+__a
+->
+s6_addr32
+[1] == 0 \
+
+447 && 
+__a
+->
+s6_addr32
+[2] == 0 \
+
+448 && 
+	`�ohl
+ (
+__a
+->
+s6_addr32
+[3]�> 1; }))
+
+	)
+
+450 
+	#IN6_ARE_ADDR_EQUAL
+(
+a
+,
+b
+) \
+
+451 (
+__ex�nsi�__
+ \
+
+452 ({ cڡ 
+�6_addr
+ *
+__a
+ = (cڡ �6_add�*�(
+a
+); \
+
+453 cڡ 
+�6_addr
+ *
+__b
+ = (cڡ �6_add�*�(
+b
+); \
+
+454 
+__a
+->
+s6_addr32
+[0] =�
+__b
+->s6_addr32[0] \
+
+455 && 
+__a
+->
+s6_addr32
+[1] =�
+__b
+->s6_addr32[1] \
+
+456 && 
+__a
+->
+s6_addr32
+[2] =�
+__b
+->s6_addr32[2] \
+
+457 && 
+__a
+->
+s6_addr32
+[3] =�
+__b
+->s6_addr32[3]; }))
+
+	)
+
+459 
+	#IN6_IS_ADDR_UNSPECIFIED
+(
+a
+) \
+
+460 (((cڡ 
+u�t32_t
+ *�(
+a
+))[0] == 0 \
+
+461 && ((cڡ 
+u�t32_t
+ *�(
+a
+))[1] == 0 \
+
+462 && ((cڡ 
+u�t32_t
+ *�(
+a
+))[2] == 0 \
+
+463 && ((cڡ 
+u�t32_t
+ *�(
+a
+))[3] =�0)
+
+	)
+
+465 
+	#IN6_IS_ADDR_LOOPBACK
+(
+a
+) \
+
+466 (((cڡ 
+u�t32_t
+ *�(
+a
+))[0] == 0 \
+
+467 && ((cڡ 
+u�t32_t
+ *�(
+a
+))[1] == 0 \
+
+468 && ((cڡ 
+u�t32_t
+ *�(
+a
+))[2] == 0 \
+
+469 && ((cڡ 
+u�t32_t
+ *�(
+a
+))[3] =�
+	`ht�l
+ (1))
+
+	)
+
+471 
+	#IN6_IS_ADDR_LINKLOCAL
+(
+a
+) \
+
+472 ((((cڡ 
+u�t32_t
+ *�(
+a
+))[0] & 
+	`ht�l
+ (0xffc00000)) \
+
+473 =�
+	`ht�l
+ (0x�800000))
+
+	)
+
+475 
+	#IN6_IS_ADDR_SITELOCAL
+(
+a
+) \
+
+476 ((((cڡ 
+u�t32_t
+ *�(
+a
+))[0] & 
+	`ht�l
+ (0xffc00000)) \
+
+477 =�
+	`ht�l
+ (0x�c00000))
+
+	)
+
+479 
+	#IN6_IS_ADDR_V4MAPPED
+(
+a
+) \
+
+480 ((((cڡ 
+u�t32_t
+ *�(
+a
+))[0] == 0) \
+
+481 && (((cڡ 
+u�t32_t
+ *�(
+a
+))[1] == 0) \
+
+482 && (((cڡ 
+u�t32_t
+ *�(
+a
+))[2] =�
+	`ht�l
+ (0xffff)))
+
+	)
+
+484 
+	#IN6_IS_ADDR_V4COMPAT
+(
+a
+) \
+
+485 ((((cڡ 
+u�t32_t
+ *�(
+a
+))[0] == 0) \
+
+486 && (((cڡ 
+u�t32_t
+ *�(
+a
+))[1] == 0) \
+
+487 && (((cڡ 
+u�t32_t
+ *�(
+a
+))[2] == 0) \
+
+488 && (
+	`�ohl
+ (((cڡ 
+u�t32_t
+ *�(
+a
+))[3]�> 1))
+
+	)
+
+490 
+	#IN6_ARE_ADDR_EQUAL
+(
+a
+,
+b
+) \
+
+491 ((((cڡ 
+u�t32_t
+ *�(
+a
+))[0] =�((cڡ u�t32_�*�(
+b
+))[0]) \
+
+492 && (((cڡ 
+u�t32_t
+ *�(
+a
+))[1] =�((cڡ u�t32_�*�(
+b
+))[1]) \
+
+493 && (((cڡ 
+u�t32_t
+ *�(
+a
+))[2] =�((cڡ u�t32_�*�(
+b
+))[2]) \
+
+494 && (((cڡ 
+u�t32_t
+ *�(
+a
+))[3] =�((cڡ u�t32_�*�(
+b
+))[3]))
+
+	)
+
+497 
+	#IN6_IS_ADDR_MULTICAST
+(
+a
+�(((cڡ 
+u�t8_t
+ *��))[0] =�0xff)
+
+	)
+
+499 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+501 

+	$b�d�svp�t
+ (
+__sockfd
+, 
+sockaddr_�
+ *
+__sock_�
+�
+__THROW
+;
+
+504 

+	$b�d�svp�t6
+ (
+__sockfd
+, 
+sockaddr_�6
+ *
+__sock_�
+)
+
+505 
+__THROW
+;
+
+509 
+	#IN6_IS_ADDR_MC_NODELOCAL
+(
+a
+) \
+
+510 (
+	`IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+511 && ((((cڡ 
+u�t8_t
+ *�(
+a
+))[1] & 0xf�=�0x1))
+
+	)
+
+513 
+	#IN6_IS_ADDR_MC_LINKLOCAL
+(
+a
+) \
+
+514 (
+	`IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+515 && ((((cڡ 
+u�t8_t
+ *�(
+a
+))[1] & 0xf�=�0x2))
+
+	)
+
+517 
+	#IN6_IS_ADDR_MC_SITELOCAL
+(
+a
+) \
+
+518 (
+	`IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+519 && ((((cڡ 
+u�t8_t
+ *�(
+a
+))[1] & 0xf�=�0x5))
+
+	)
+
+521 
+	#IN6_IS_ADDR_MC_ORGLOCAL
+(
+a
+) \
+
+522 (
+	`IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+523 && ((((cڡ 
+u�t8_t
+ *�(
+a
+))[1] & 0xf�=�0x8))
+
+	)
+
+525 
+	#IN6_IS_ADDR_MC_GLOBAL
+(
+a
+) \
+
+526 (
+	`IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+527 && ((((cڡ 
+u�t8_t
+ *�(
+a
+))[1] & 0xf�=�0xe))
+
+	)
+
+530 #ifde�
+__USE_GNU
+
+
+531 
+cmsghdr
+;
+
+534 
+	s�6_pkt�fo
+
+
+536 
+�6_addr
+ 
+�i6_addr
+;
+
+537 
+�i6_if�dex
+;
+
+541 
+	s�6_mtu�fo
+
+
+543 
+sockaddr_�6
+ 
+�6m_addr
+;
+
+544 
+u�t32_t
+ 
+�6m_mtu
+;
+
+549 

+	$��6_�ti�_�a�
+ (
+__nby�s
+)
+
+550 
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+551 

+	$��6_�ti�_��
+ (*
+__bp
+, 
+cmsghdr
+ **
+__cmsgp
+,
+
+552 
+__ty�
+�
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+553 

+	$��6_�ti�_��nd
+ (
+cmsghdr
+ *
+__cmsg
+,
+
+554 cڡ 
+u�t8_t
+ *
+__ty�p
+, 
+__mu�x
+,
+
+555 
+__�usy
+�
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+556 
+u�t8_t
+ *
+	$��6_�ti�_�loc
+ (
+cmsghdr
+ *
+__cmsg
+, 
+__d���
+,
+
+557 
+__mu�x
+, 
+__�usy
+)
+
+558 
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+559 

+	$��6_�ti�_�xt
+ (cڡ 
+cmsghdr
+ *
+__cmsg
+,
+
+560 
+u�t8_t
+ **
+__��p
+)
+
+561 
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+562 

+	$��6_�ti�_f�d
+ (cڡ 
+cmsghdr
+ *
+__cmsg
+,
+
+563 
+u�t8_t
+ **
+__��p
+, 
+__ty�
+)
+
+564 
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+568 

+	$��6_�t_��
+ (*
+__extbuf
+, 
+sock�n_t
+ 
+__ex��
+�
+__THROW
+;
+
+569 

+	$��6_�t_��nd
+ (*
+__extbuf
+, 
+sock�n_t
+ 
+__ex��
+, 
+__off�t
+,
+
+570 
+u�t8_t
+ 
+__ty�
+, 
+sock�n_t
+ 
+__�n
+, u�t8_�
+__�ign
+,
+
+571 **
+__d�abu�
+�
+__THROW
+;
+
+572 

+	$��6_�t_f�ish
+ (*
+__extbuf
+, 
+sock�n_t
+ 
+__ex��
+, 
+__off�t
+)
+
+573 
+__THROW
+;
+
+574 

+	$��6_�t_�t_v�
+ (*
+__d�abuf
+, 
+__off�t
+, *
+__v�
+,
+
+575 
+sock�n_t
+ 
+__v��n
+�
+__THROW
+;
+
+576 

+	$��6_�t_�xt
+ (*
+__extbuf
+, 
+sock�n_t
+ 
+__ex��
+, 
+__off�t
+,
+
+577 
+u�t8_t
+ *
+__ty�p
+, 
+sock�n_t
+ *
+__��
+,
+
+578 **
+__d�abu�
+�
+__THROW
+;
+
+579 

+	$��6_�t_f�d
+ (*
+__extbuf
+, 
+sock�n_t
+ 
+__ex��
+, 
+__off�t
+,
+
+580 
+u�t8_t
+ 
+__ty�
+, 
+sock�n_t
+ *
+__��
+,
+
+581 **
+__d�abu�
+�
+__THROW
+;
+
+582 

+	$��6_�t_g�_v�
+ (*
+__d�abuf
+, 
+__off�t
+, *
+__v�
+,
+
+583 
+sock�n_t
+ 
+__v��n
+�
+__THROW
+;
+
+587 
+sock�n_t
+ 
+	$��6_�h_�a�
+ (
+__ty�
+, 
+__�gm�ts
+�
+__THROW
+;
+
+588 
*
+	$��6_�h_��
+ (*
+__bp
+, 
+sock�n_t
+ 
+__bp_�n
+, 
+__ty�
+,
+
+589 
+__�gm�ts
+�
+__THROW
+;
+
+590 

+	$��6_�h_add
+ (*
+__bp
+, cڡ 
+�6_addr
+ *
+__addr
+�
+__THROW
+;
+
+591 

+	$��6_�h_�v��
+ (cڡ *
+__�
+, *
+__out
+�
+__THROW
+;
+
+592 

+	$��6_�h_�gm�ts
+ (cڡ *
+__bp
+�
+__THROW
+;
+
+593 

+�6_addr
+ *
+	$��6_�h_g�addr
+ (cڡ *
+__bp
+, 
+__�dex
+)
+
+594 
+__THROW
+;
+
+600 

+	$g��v4sour�f��r
+ (
+__s
+, 
+�_addr
+ 
+__��r��_addr
+,
+
+601 
+�_addr
+ 
+__group
+, 
+u�t32_t
+ *
+__fmode
+,
+
+602 
+u�t32_t
+ *
+__num�c
+, 
+�_addr
+ *
+__�i�
+)
+
+603 
+__THROW
+;
+
+606 

+	$�t�v4sour�f��r
+ (
+__s
+, 
+�_addr
+ 
+__��r��_addr
+,
+
+607 
+�_addr
+ 
+__group
+, 
+u�t32_t
+ 
+__fmode
+,
+
+608 
+u�t32_t
+ 
+__num�c
+,
+
+609 cڡ 
+�_addr
+ *
+__�i�
+)
+
+610 
+__THROW
+;
+
+614 

+	$g�sour�f��r
+ (
+__s
+, 
+u�t32_t
+ 
+__��r��_addr
+,
+
+615 cڡ 
+sockaddr
+ *
+__group
+,
+
+616 
+sock�n_t
+ 
+__grou��
+, 
+u�t32_t
+ *
+__fmode
+,
+
+617 
+u�t32_t
+ *
+__num�c
+,
+
+618 
+sockaddr_��age
+ *
+__�i�
+�
+__THROW
+;
+
+621 

+	$�tsour�f��r
+ (
+__s
+, 
+u�t32_t
+ 
+__��r��_addr
+,
+
+622 cڡ 
+sockaddr
+ *
+__group
+,
+
+623 
+sock�n_t
+ 
+__grou��
+, 
+u�t32_t
+ 
+__fmode
+,
+
+624 
+u�t32_t
+ 
+__num�c
+,
+
+625 cڡ 
+sockaddr_��age
+ *
+__�i�
+�
+__THROW
+;
+
+628 
+__END_DECLS
+
+
+	@/usr/include/netinet/tcp.h
+
+32 #i�de�
+_NETINET_TCP_H
+
+
+33 
+	#_NETINET_TCP_H
+ 1
+
+	)
+
+35 
+	~<�u�s.h
+>
+
+40 
+	#TCP_NODELAY
+ 1
+
+	)
+
+41 
+	#TCP_MAXSEG
+ 2
+
+	)
+
+42 
+	#TCP_CORK
+ 3
+
+	)
+
+43 
+	#TCP_KEEPIDLE
+ 4
+
+	)
+
+44 
+	#TCP_KEEPINTVL
+ 5
+
+	)
+
+45 
+	#TCP_KEEPCNT
+ 6
+
+	)
+
+46 
+	#TCP_SYNCNT
+ 7
+
+	)
+
+47 
+	#TCP_LINGER2
+ 8
+
+	)
+
+48 
+	#TCP_DEFER_ACCEPT
+ 9
+
+	)
+
+49 
+	#TCP_WINDOW_CLAMP
+ 10
+
+	)
+
+50 
+	#TCP_INFO
+ 11
+
+	)
+
+51 
+	#TCP_QUICKACK
+ 12
+
+	)
+
+52 
+	#TCP_CONGESTION
+ 13
+
+	)
+
+53 
+	#TCP_MD5SIG
+ 14
+
+	)
+
+54 
+	#TCP_COOKIE_TRANSACTIONS
+ 15
+
+	)
+
+55 
+	#TCP_THIN_LINEAR_TIMEOUTS
+ 16
+
+	)
+
+56 
+	#TCP_THIN_DUPACK
+ 17
+
+	)
+
+57 
+	#TCP_USER_TIMEOUT
+ 18
+
+	)
+
+58 
+	#TCP_REPAIR
+ 19
+
+	)
+
+59 
+	#TCP_REPAIR_QUEUE
+ 20
+
+	)
+
+60 
+	#TCP_QUEUE_SEQ
+ 21
+
+	)
+
+61 
+	#TCP_REPAIR_OPTIONS
+ 22
+
+	)
+
+62 
+	#TCP_FASTOPEN
+ 23
+
+	)
+
+63 
+	#TCP_TIMESTAMP
+ 24
+
+	)
+
+65 #ifde�
+__USE_MISC
+
+
+66 
+	~<sys/ty�s.h
+>
+
+67 
+	~<sys/sock�.h
+>
+
+69 
+u_�t32_t
+ 
+	tt�_�q
+;
+
+74 
+	st�hdr
+
+
+76 
+__ex�nsi�__
+ union
+
+80 
+u_�t16_t
+ 
+	mth_��t
+;
+
+81 
+u_�t16_t
+ 
+	mth_dp�t
+;
+
+82 
+t�_�q
+ 
+	mth_�q
+;
+
+83 
+t�_�q
+ 
+	mth_ack
+;
+
+84 #i�
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+85 
+u_�t8_t
+ 
+	mth_x2
+:4;
+
+86 
+u_�t8_t
+ 
+	mth_off
+:4;
+
+88 #i�
+__BYTE_ORDER
+ =�
+__BIG_ENDIAN
+
+
+89 
+u_�t8_t
+ 
+	mth_off
+:4;
+
+90 
+u_�t8_t
+ 
+	mth_x2
+:4;
+
+92 
+u_�t8_t
+ 
+	mth_�ags
+;
+
+93 
+	#TH_FIN
+ 0x01
+
+	)
+
+94 
+	#TH_SYN
+ 0x02
+
+	)
+
+95 
+	#TH_RST
+ 0x04
+
+	)
+
+96 
+	#TH_PUSH
+ 0x08
+
+	)
+
+97 
+	#TH_ACK
+ 0x10
+
+	)
+
+98 
+	#TH_URG
+ 0x20
+
+	)
+
+99 
+u_�t16_t
+ 
+	mth_w�
+;
+
+100 
+u_�t16_t
+ 
+	mth_sum
+;
+
+101 
+u_�t16_t
+ 
+	mth_u�
+;
+
+105 
+u_�t16_t
+ 
+	msour�
+;
+
+106 
+u_�t16_t
+ 
+	mde�
+;
+
+107 
+u_�t32_t
+ 
+	m�q
+;
+
+108 
+u_�t32_t
+ 
+	mack_�q
+;
+
+109 #i�
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+110 
+u_�t16_t
+ 
+	m�s1
+:4;
+
+111 
+u_�t16_t
+ 
+	mdoff
+:4;
+
+112 
+u_�t16_t
+ 
+	mf�
+:1;
+
+113 
+u_�t16_t
+ 
+	msyn
+:1;
+
+114 
+u_�t16_t
+ 
+	mr�
+:1;
+
+115 
+u_�t16_t
+ 
+	mpsh
+:1;
+
+116 
+u_�t16_t
+ 
+	mack
+:1;
+
+117 
+u_�t16_t
+ 
+	murg
+:1;
+
+118 
+u_�t16_t
+ 
+	m�s2
+:2;
+
+119 #�i�
+__BYTE_ORDER
+ =�
+__BIG_ENDIAN
+
+
+120 
+u_�t16_t
+ 
+	mdoff
+:4;
+
+121 
+u_�t16_t
+ 
+	m�s1
+:4;
+
+122 
+u_�t16_t
+ 
+	m�s2
+:2;
+
+123 
+u_�t16_t
+ 
+	murg
+:1;
+
+124 
+u_�t16_t
+ 
+	mack
+:1;
+
+125 
+u_�t16_t
+ 
+	mpsh
+:1;
+
+126 
+u_�t16_t
+ 
+	mr�
+:1;
+
+127 
+u_�t16_t
+ 
+	msyn
+:1;
+
+128 
+u_�t16_t
+ 
+	mf�
+:1;
+
+132 
+u_�t16_t
+ 
+	mw�dow
+;
+
+133 
+u_�t16_t
+ 
+	mcheck
+;
+
+134 
+u_�t16_t
+ 
+	murg_�r
+;
+
+141 
+	mTCP_ESTABLISHED
+ = 1,
+
+142 
+	mTCP_SYN_SENT
+,
+
+143 
+	mTCP_SYN_RECV
+,
+
+144 
+	mTCP_FIN_WAIT1
+,
+
+145 
+	mTCP_FIN_WAIT2
+,
+
+146 
+	mTCP_TIME_WAIT
+,
+
+147 
+	mTCP_CLOSE
+,
+
+148 
+	mTCP_CLOSE_WAIT
+,
+
+149 
+	mTCP_LAST_ACK
+,
+
+150 
+	mTCP_LISTEN
+,
+
+151 
+	mTCP_CLOSING
+
+
+154 
+	#TCPOPT_EOL
+ 0
+
+	)
+
+155 
+	#TCPOPT_NOP
+ 1
+
+	)
+
+156 
+	#TCPOPT_MAXSEG
+ 2
+
+	)
+
+157 
+	#TCPOLEN_MAXSEG
+ 4
+
+	)
+
+158 
+	#TCPOPT_WINDOW
+ 3
+
+	)
+
+159 
+	#TCPOLEN_WINDOW
+ 3
+
+	)
+
+160 
+	#TCPOPT_SACK_PERMITTED
+ 4
+
+	)
+
+161 
+	#TCPOLEN_SACK_PERMITTED
+ 2
+
+	)
+
+162 
+	#TCPOPT_SACK
+ 5
+
+	)
+
+163 
+	#TCPOPT_TIMESTAMP
+ 8
+
+	)
+
+164 
+	#TCPOLEN_TIMESTAMP
+ 10
+
+	)
+
+165 
+	#TCPOLEN_TSTAMP_APPA
+ (
+TCPOLEN_TIMESTAMP
++2�
+
+	)
+
+167 
+	#TCPOPT_TSTAMP_HDR
+ \
+
+168 (
+TCPOPT_NOP
+<<24|TCPOPT_NOP<<16|
+TCPOPT_TIMESTAMP
+<<8|
+TCPOLEN_TIMESTAMP
+)
+
+	)
+
+176 
+	#TCP_MSS
+ 512
+
+	)
+
+178 
+	#TCP_MAXWIN
+ 65535
+
+	)
+
+180 
+	#TCP_MAX_WINSHIFT
+ 14
+
+	)
+
+182 
+	#SOL_TCP
+ 6
+
+	)
+
+185 
+	#TCPI_OPT_TIMESTAMPS
+ 1
+
+	)
+
+186 
+	#TCPI_OPT_SACK
+ 2
+
+	)
+
+187 
+	#TCPI_OPT_WSCALE
+ 4
+
+	)
+
+188 
+	#TCPI_OPT_ECN
+ 8
+
+	)
+
+189 
+	#TCPI_OPT_ECN_SEEN
+ 16
+
+	)
+
+190 
+	#TCPI_OPT_SYN_DATA
+ 32
+
+	)
+
+193 
+	et�_�_��e
+
+
+195 
+	mTCP_CA_O�n
+ = 0,
+
+196 
+	mTCP_CA_Dis�d�
+ = 1,
+
+197 
+	mTCP_CA_CWR
+ = 2,
+
+198 
+	mTCP_CA_Recov�y
+ = 3,
+
+199 
+	mTCP_CA_Loss
+ = 4
+
+202 
+	st�_�fo
+
+
+204 
+u_�t8_t
+ 
+	mt�i_��e
+;
+
+205 
+u_�t8_t
+ 
+	mt�i_�_��e
+;
+
+206 
+u_�t8_t
+ 
+	mt�i_���sm�s
+;
+
+207 
+u_�t8_t
+ 
+	mt�i_�obes
+;
+
+208 
+u_�t8_t
+ 
+	mt�i_backoff
+;
+
+209 
+u_�t8_t
+ 
+	mt�i_�ti�s
+;
+
+210 
+u_�t8_t
+ 
+	mt�i_�d_ws��
+ : 4, 
+	mt�i_rcv_ws��
+ : 4;
+
+212 
+u_�t32_t
+ 
+	mt�i_�o
+;
+
+213 
+u_�t32_t
+ 
+	mt�i_�o
+;
+
+214 
+u_�t32_t
+ 
+	mt�i_�d_mss
+;
+
+215 
+u_�t32_t
+ 
+	mt�i_rcv_mss
+;
+
+217 
+u_�t32_t
+ 
+	mt�i_u�cked
+;
+
+218 
+u_�t32_t
+ 
+	mt�i_�cked
+;
+
+219 
+u_�t32_t
+ 
+	mt�i_lo�
+;
+
+220 
+u_�t32_t
+ 
+	mt�i_���s
+;
+
+221 
+u_�t32_t
+ 
+	mt�i_�ck�s
+;
+
+224 
+u_�t32_t
+ 
+	mt�i_ϡ_d�a_��
+;
+
+225 
+u_�t32_t
+ 
+	mt�i_ϡ_ack_��
+;
+
+226 
+u_�t32_t
+ 
+	mt�i_ϡ_d�a_�cv
+;
+
+227 
+u_�t32_t
+ 
+	mt�i_ϡ_ack_�cv
+;
+
+230 
+u_�t32_t
+ 
+	mt�i_pmtu
+;
+
+231 
+u_�t32_t
+ 
+	mt�i_rcv_s�h�sh
+;
+
+232 
+u_�t32_t
+ 
+	mt�i_�t
+;
+
+233 
+u_�t32_t
+ 
+	mt�i_�tv�
+;
+
+234 
+u_�t32_t
+ 
+	mt�i_�d_s�h�sh
+;
+
+235 
+u_�t32_t
+ 
+	mt�i_�d_cwnd
+;
+
+236 
+u_�t32_t
+ 
+	mt�i_advmss
+;
+
+237 
+u_�t32_t
+ 
+	mt�i_��d��g
+;
+
+239 
+u_�t32_t
+ 
+	mt�i_rcv_�t
+;
+
+240 
+u_�t32_t
+ 
+	mt�i_rcv_�a�
+;
+
+242 
+u_�t32_t
+ 
+	mt�i_tٮ_���s
+;
+
+247 
+	#TCP_MD5SIG_MAXKEYLEN
+ 80
+
+	)
+
+249 
+	st�_md5sig
+
+
+251 
+sockaddr_��age
+ 
+	mt�m_addr
+;
+
+252 
+u_�t16_t
+ 
+	m__t�m_�d1
+;
+
+253 
+u_�t16_t
+ 
+	mt�m_key�n
+;
+
+254 
+u_�t32_t
+ 
+	m__t�m_�d2
+;
+
+255 
+u_�t8_t
+ 
+	mt�m_key
+[
+TCP_MD5SIG_MAXKEYLEN
+];
+
+259 
+	st�_���_�t
+
+
+261 
+u_�t32_t
+ 
+	m�t_code
+;
+
+262 
+u_�t32_t
+ 
+	m�t_v�
+;
+
+268 
+	mTCP_NO_QUEUE
+,
+
+269 
+	mTCP_RECV_QUEUE
+,
+
+270 
+	mTCP_SEND_QUEUE
+,
+
+271 
+	mTCP_QUEUES_NR
+,
+
+275 
+	#TCP_COOKIE_MIN
+ 8
+
+	)
+
+276 
+	#TCP_COOKIE_MAX
+ 16
+
+	)
+
+277 
+	#TCP_COOKIE_PAIR_SIZE
+ (2*
+TCP_COOKIE_MAX
+)
+
+	)
+
+280 
+	#TCP_COOKIE_IN_ALWAYS
+ (1 << 0�
+
+	)
+
+281 
+	#TCP_COOKIE_OUT_NEVER
+ (1 << 1�
+
+	)
+
+285 
+	#TCP_S_DATA_IN
+ (1 << 2�
+
+	)
+
+286 
+	#TCP_S_DATA_OUT
+ (1 << 3�
+
+	)
+
+288 
+	#TCP_MSS_DEFAULT
+ 536U
+
+	)
+
+289 
+	#TCP_MSS_DESIRED
+ 1220U
+
+	)
+
+291 
+	st�_cook�_����i�s
+
+
+293 
+u_�t16_t
+ 
+	mt��_�ags
+;
+
+294 
+u_�t8_t
+ 
+	m__t��_�d1
+;
+
+295 
+u_�t8_t
+ 
+	mt��_cook�_des�ed
+;
+
+296 
+u_�t16_t
+ 
+	mt��_s_d�a_des�ed
+;
+
+297 
+u_�t16_t
+ 
+	mt��_u�d
+;
+
+298 
+u_�t8_t
+ 
+	mt��_v�ue
+[
+TCP_MSS_DEFAULT
+];
+
+	@/usr/include/poll.h
+
+1 
+	~<sys/p�l.h
+>
+
+	@/usr/include/pthread.h
+
+18 #i�de�
+_PTHREAD_H
+
+
+19 
+	#_PTHREAD_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+22 
+	~<�d�n.h
+>
+
+23 
+	~<sched.h
+>
+
+24 
+	~<time.h
+>
+
+26 
+	~<b�s/�h�adty�s.h
+>
+
+27 
+	~<b�s/�tjmp.h
+>
+
+28 
+	~<b�s/w�dsize.h
+>
+
+34 
+	mPTHREAD_CREATE_JOINABLE
+,
+
+35 
+	#PTHREAD_CREATE_JOINABLE
+ 
+PTHREAD_CREATE_JOINABLE
+
+
+	)
+
+36 
+	mPTHREAD_CREATE_DETACHED
+
+
+37 
+	#PTHREAD_CREATE_DETACHED
+ 
+PTHREAD_CREATE_DETACHED
+
+
+	)
+
+44 
+	mPTHREAD_MUTEX_TIMED_NP
+,
+
+45 
+	mPTHREAD_MUTEX_RECURSIVE_NP
+,
+
+46 
+	mPTHREAD_MUTEX_ERRORCHECK_NP
+,
+
+47 
+	mPTHREAD_MUTEX_ADAPTIVE_NP
+
+
+48 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K8
+
+
+50 
+	mPTHREAD_MUTEX_NORMAL
+ = 
+PTHREAD_MUTEX_TIMED_NP
+,
+
+51 
+	mPTHREAD_MUTEX_RECURSIVE
+ = 
+PTHREAD_MUTEX_RECURSIVE_NP
+,
+
+52 
+	mPTHREAD_MUTEX_ERRORCHECK
+ = 
+PTHREAD_MUTEX_ERRORCHECK_NP
+,
+
+53 
+	mPTHREAD_MUTEX_DEFAULT
+ = 
+PTHREAD_MUTEX_NORMAL
+
+
+55 #ifde�
+__USE_GNU
+
+
+57 , 
+	mPTHREAD_MUTEX_FAST_NP
+ = 
+PTHREAD_MUTEX_TIMED_NP
+
+
+62 #ifde�
+__USE_XOPEN2K
+
+
+66 
+	mPTHREAD_MUTEX_STALLED
+,
+
+67 
+	mPTHREAD_MUTEX_STALLED_NP
+ = 
+PTHREAD_MUTEX_STALLED
+,
+
+68 
+	mPTHREAD_MUTEX_ROBUST
+,
+
+69 
+	mPTHREAD_MUTEX_ROBUST_NP
+ = 
+PTHREAD_MUTEX_ROBUST
+
+
+74 #i�
+def�ed
+ 
+__USE_POSIX199506
+ || def�ed 
+__USE_UNIX98
+
+
+78 
+	mPTHREAD_PRIO_NONE
+,
+
+79 
+	mPTHREAD_PRIO_INHERIT
+,
+
+80 
+	mPTHREAD_PRIO_PROTECT
+
+
+86 #i�
+__PTHREAD_MUTEX_HAVE_ELISION
+ == 1
+
+87 
+	#__PTHREAD_SPINS
+ 0, 0
+
+	)
+
+88 #�i�
+__PTHREAD_MUTEX_HAVE_ELISION
+ == 2
+
+89 
+	#__PTHREAD_SPINS
+ { 0, 0 }
+
+	)
+
+91 
+	#__PTHREAD_SPINS
+ 0
+
+	)
+
+94 #ifde�
+__PTHREAD_MUTEX_HAVE_PREV
+
+
+95 
+	#PTHREAD_MUTEX_INITIALIZER
+ \
+
+96 { { 0, 0, 0, 0, 0, 
+__PTHREAD_SPINS
+, { 0, 0 } } }
+
+	)
+
+97 #ifde�
+__USE_GNU
+
+
+98 
+	#PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+ \
+
+99 { { 0, 0, 0, 0, 
+PTHREAD_MUTEX_RECURSIVE_NP
+, 
+__PTHREAD_SPINS
+, { 0, 0 } } }
+
+	)
+
+100 
+	#PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
+ \
+
+101 { { 0, 0, 0, 0, 
+PTHREAD_MUTEX_ERRORCHECK_NP
+, 
+__PTHREAD_SPINS
+, { 0, 0 } } }
+
+	)
+
+102 
+	#PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+ \
+
+103 { { 0, 0, 0, 0, 
+PTHREAD_MUTEX_ADAPTIVE_NP
+, 
+__PTHREAD_SPINS
+, { 0, 0 } } }
+
+	)
+
+104 
+	#PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+ \
+
+105 { { 0, 0, 0, 0, 
+PTHREAD_MUTEX_ADAPTIVE_NP
+, 
+__PTHREAD_SPINS
+, { 0, 0 } } }
+
+	)
+
+109 
+	#PTHREAD_MUTEX_INITIALIZER
+ \
+
+110 { { 0, 0, 0, 0, 0, { 
+__PTHREAD_SPINS
+ } } }
+
+	)
+
+111 #ifde�
+__USE_GNU
+
+
+112 
+	#PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+ \
+
+113 { { 0, 0, 0, 
+PTHREAD_MUTEX_RECURSIVE_NP
+, 0, { 
+__PTHREAD_SPINS
+ } } }
+
+	)
+
+114 
+	#PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
+ \
+
+115 { { 0, 0, 0, 
+PTHREAD_MUTEX_ERRORCHECK_NP
+, 0, { 
+__PTHREAD_SPINS
+ } } }
+
+	)
+
+116 
+	#PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+ \
+
+117 { { 0, 0, 0, 
+PTHREAD_MUTEX_ADAPTIVE_NP
+, 0, { 
+__PTHREAD_SPINS
+ } } }
+
+	)
+
+124 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K
+
+
+127 
+	mPTHREAD_RWLOCK_PREFER_READER_NP
+,
+
+128 
+	mPTHREAD_RWLOCK_PREFER_WRITER_NP
+,
+
+129 
+	mPTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
+,
+
+130 
+	mPTHREAD_RWLOCK_DEFAULT_NP
+ = 
+PTHREAD_RWLOCK_PREFER_READER_NP
+
+
+136 #i�de�
+__PTHREAD_RWLOCK_INT_FLAGS_SHARED
+
+
+137 #i�
+__WORDSIZE
+ == 64
+
+138 
+	#__PTHREAD_RWLOCK_INT_FLAGS_SHARED
+ 1
+
+	)
+
+143 
+	#PTHREAD_RWLOCK_INITIALIZER
+ \
+
+144 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+
+	)
+
+145 #ifde�
+__USE_GNU
+
+
+146 #ifde�
+__PTHREAD_RWLOCK_INT_FLAGS_SHARED
+
+
+147 
+	#PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
+ \
+
+149 
+PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
+ } }
+
+	)
+
+151 #i�
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+152 
+	#PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
+ \
+
+153 { { 0, 0, 0, 0, 0, 0, 
+PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
+, \
+
+154 0, 0, 0, 0 } }
+
+	)
+
+156 
+	#PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
+ \
+
+157 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
+,\
+
+158 0 } }
+
+	)
+
+168 
+	mPTHREAD_INHERIT_SCHED
+,
+
+169 
+	#PTHREAD_INHERIT_SCHED
+ 
+PTHREAD_INHERIT_SCHED
+
+
+	)
+
+170 
+	mPTHREAD_EXPLICIT_SCHED
+
+
+171 
+	#PTHREAD_EXPLICIT_SCHED
+ 
+PTHREAD_EXPLICIT_SCHED
+
+
+	)
+
+178 
+	mPTHREAD_SCOPE_SYSTEM
+,
+
+179 
+	#PTHREAD_SCOPE_SYSTEM
+ 
+PTHREAD_SCOPE_SYSTEM
+
+
+	)
+
+180 
+	mPTHREAD_SCOPE_PROCESS
+
+
+181 
+	#PTHREAD_SCOPE_PROCESS
+ 
+PTHREAD_SCOPE_PROCESS
+
+
+	)
+
+188 
+	mPTHREAD_PROCESS_PRIVATE
+,
+
+189 
+	#PTHREAD_PROCESS_PRIVATE
+ 
+PTHREAD_PROCESS_PRIVATE
+
+
+	)
+
+190 
+	mPTHREAD_PROCESS_SHARED
+
+
+191 
+	#PTHREAD_PROCESS_SHARED
+ 
+PTHREAD_PROCESS_SHARED
+
+
+	)
+
+197 
+	#PTHREAD_COND_INITIALIZER
+ { { 0, 0, 0, 0, 0, (*�0, 0, 0 } }
+
+	)
+
+201 
+	s_�h�ad_��nup_buf�r
+
+
+203 (*
+	m__rout�e
+) (*);
+
+204 *
+	m__�g
+;
+
+205 
+	m__�n��y�
+;
+
+206 
+_�h�ad_��nup_buf�r
+ *
+	m__�ev
+;
+
+212 
+	mPTHREAD_CANCEL_ENABLE
+,
+
+213 
+	#PTHREAD_CANCEL_ENABLE
+ 
+PTHREAD_CANCEL_ENABLE
+
+
+	)
+
+214 
+	mPTHREAD_CANCEL_DISABLE
+
+
+215 
+	#PTHREAD_CANCEL_DISABLE
+ 
+PTHREAD_CANCEL_DISABLE
+
+
+	)
+
+219 
+	mPTHREAD_CANCEL_DEFERRED
+,
+
+220 
+	#PTHREAD_CANCEL_DEFERRED
+ 
+PTHREAD_CANCEL_DEFERRED
+
+
+	)
+
+221 
+	mPTHREAD_CANCEL_ASYNCHRONOUS
+
+
+222 
+	#PTHREAD_CANCEL_ASYNCHRONOUS
+ 
+PTHREAD_CANCEL_ASYNCHRONOUS
+
+
+	)
+
+224 
+	#PTHREAD_CANCELED
+ ((*�-1)
+
+	)
+
+228 
+	#PTHREAD_ONCE_INIT
+ 0
+
+	)
+
+231 #ifde�
+__USE_XOPEN2K
+
+
+235 
+	#PTHREAD_BARRIER_SERIAL_THREAD
+ -1
+
+	)
+
+239 
+__BEGIN_DECLS
+
+
+244 

+�h�ad_���
+ (
+�h�ad_t
+ *
+__��ri�
+ 
+__�wth�ad
+,
+
+245 cڡ 
+�h�ad_��_t
+ *
+__��ri�
+ 
+__��
+,
+
+246 *(*
+__��t_rout�e
+) (*),
+
+247 *
+__��ri�
+ 
+__�g
+�
+__THROWNL
+ 
+__n�nu�
+ ((1, 3));
+
+253 

+	$�h�ad_ex�
+ (*
+__�tv�
+�
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+261 

+	`�h�ad_jo�
+ (
+�h�ad_t
+ 
+__th
+, **
+__th�ad_�tu�
+);
+
+263 #ifde�
+__USE_GNU
+
+
+266 

+	$�h�ad_�yjo�_�
+ (
+�h�ad_t
+ 
+__th
+, **
+__th�ad_�tu�
+�
+__THROW
+;
+
+274 

+	`�h�ad_timedjo�_�
+ (
+�h�ad_t
+ 
+__th
+, **
+__th�ad_�tu�
+,
+
+275 cڡ 
+time�ec
+ *
+__ab�ime
+);
+
+282 

+	$�h�ad_d�ach
+ (
+�h�ad_t
+ 
+__th
+�
+__THROW
+;
+
+286 
+�h�ad_t
+ 
+	$�h�ad_�lf
+ (�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+289 

+	$�h�ad_equ�
+ (
+�h�ad_t
+ 
+__th�ad1
+,�th�ad_�
+__th�ad2
+)
+
+290 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+298 

+	$�h�ad_��_��
+ (
+�h�ad_��_t
+ *
+__��
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+301 

+	$�h�ad_��_de�roy
+ (
+�h�ad_��_t
+ *
+__��
+)
+
+302 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+305 

+	$�h�ad_��_g�d�ach��e
+ (cڡ 
+�h�ad_��_t
+ *
+__��
+,
+
+306 *
+__d�ach��e
+)
+
+307 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+310 

+	$�h�ad_��_�td�ach��e
+ (
+�h�ad_��_t
+ *
+__��
+,
+
+311 
+__d�ach��e
+)
+
+312 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+316 

+	$�h�ad_��_g�gu�dsize
+ (cڡ 
+�h�ad_��_t
+ *
+__��
+,
+
+317 
+size_t
+ *
+__gu�dsize
+)
+
+318 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+321 

+	$�h�ad_��_�tgu�dsize
+ (
+�h�ad_��_t
+ *
+__��
+,
+
+322 
+size_t
+ 
+__gu�dsize
+)
+
+323 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+327 

+	$�h�ad_��_g�sched��m
+ (cڡ 
+�h�ad_��_t
+ *
+__��ri�
+ 
+__��
+,
+
+328 
+sched_��m
+ *
+__��ri�
+ 
+__��m
+)
+
+329 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+332 

+	$�h�ad_��_�tsched��m
+ (
+�h�ad_��_t
+ *
+__��ri�
+ 
+__��
+,
+
+333 cڡ 
+sched_��m
+ *
+__��ri�
+
+
+334 
+__��m
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+337 

+	$�h�ad_��_g�schedp�icy
+ (cڡ 
+�h�ad_��_t
+ *
+__��ri�
+
+
+338 
+__��
+, *
+__��ri�
+ 
+__p�icy
+)
+
+339 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+342 

+	$�h�ad_��_�tschedp�icy
+ (
+�h�ad_��_t
+ *
+__��
+, 
+__p�icy
+)
+
+343 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+346 

+	$�h�ad_��_g��h��sched
+ (cڡ 
+�h�ad_��_t
+ *
+__��ri�
+
+
+347 
+__��
+, *
+__��ri�
+ 
+__�h��
+)
+
+348 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+351 

+	$�h�ad_��_�t�h��sched
+ (
+�h�ad_��_t
+ *
+__��
+,
+
+352 
+__�h��
+)
+
+353 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+357 

+	$�h�ad_��_g�sc�e
+ (cڡ 
+�h�ad_��_t
+ *
+__��ri�
+ 
+__��
+,
+
+358 *
+__��ri�
+ 
+__sc�e
+)
+
+359 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+362 

+	$�h�ad_��_�tsc�e
+ (
+�h�ad_��_t
+ *
+__��
+, 
+__sc�e
+)
+
+363 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+366 

+	$�h�ad_��_g��ackaddr
+ (cڡ 
+�h�ad_��_t
+ *
+__��ri�
+
+
+367 
+__��
+, **
+__��ri�
+ 
+__�ackaddr
+)
+
+368 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2)�
+__��ibu�_d����d__
+;
+
+374 

+	$�h�ad_��_�t�ackaddr
+ (
+�h�ad_��_t
+ *
+__��
+,
+
+375 *
+__�ackaddr
+)
+
+376 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__��ibu�_d����d__
+;
+
+379 

+	$�h�ad_��_g��acksize
+ (cڡ 
+�h�ad_��_t
+ *
+__��ri�
+
+
+380 
+__��
+, 
+size_t
+ *
+__��ri�
+ 
+__�acksize
+)
+
+381 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+386 

+	$�h�ad_��_�t�acksize
+ (
+�h�ad_��_t
+ *
+__��
+,
+
+387 
+size_t
+ 
+__�acksize
+)
+
+388 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+390 #ifde�
+__USE_XOPEN2K
+
+
+392 

+	$�h�ad_��_g��ack
+ (cڡ 
+�h�ad_��_t
+ *
+__��ri�
+ 
+__��
+,
+
+393 **
+__��ri�
+ 
+__�ackaddr
+,
+
+394 
+size_t
+ *
+__��ri�
+ 
+__�acksize
+)
+
+395 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2, 3));
+
+400 

+	$�h�ad_��_�t�ack
+ (
+�h�ad_��_t
+ *
+__��
+, *
+__�ackaddr
+,
+
+401 
+size_t
+ 
+__�acksize
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+404 #ifde�
+__USE_GNU
+
+
+407 

+	$�h�ad_��_��ff��y_�
+ (
+�h�ad_��_t
+ *
+__��
+,
+
+408 
+size_t
+ 
+__�u�tsize
+,
+
+409 cڡ 
+�u_�t_t
+ *
+__�u�t
+)
+
+410 
+__THROW
+ 
+	`__n�nu�
+ ((1, 3));
+
+414 

+	$�h�ad_��_g�aff��y_�
+ (cڡ 
+�h�ad_��_t
+ *
+__��
+,
+
+415 
+size_t
+ 
+__�u�tsize
+,
+
+416 
+�u_�t_t
+ *
+__�u�t
+)
+
+417 
+__THROW
+ 
+	`__n�nu�
+ ((1, 3));
+
+420 

+	$�h�ad_g���_de�u�_�
+ (
+�h�ad_��_t
+ *
+__��
+)
+
+421 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+425 

+	$�h�ad_���r_de�u�_�
+ (cڡ 
+�h�ad_��_t
+ *
+__��
+)
+
+426 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+431 

+	$�h�ad_g���_�
+ (
+�h�ad_t
+ 
+__th
+, 
+�h�ad_��_t
+ *
+__��
+)
+
+432 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+440 

+	$�h�ad_�tsched��m
+ (
+�h�ad_t
+ 
+__�rg�_th�ad
+, 
+__p�icy
+,
+
+441 cڡ 
+sched_��m
+ *
+__��m
+)
+
+442 
+__THROW
+ 
+	`__n�nu�
+ ((3));
+
+445 

+	$�h�ad_g�sched��m
+ (
+�h�ad_t
+ 
+__�rg�_th�ad
+,
+
+446 *
+__��ri�
+ 
+__p�icy
+,
+
+447 
+sched_��m
+ *
+__��ri�
+ 
+__��m
+)
+
+448 
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+451 

+	$�h�ad_�tsched�io
+ (
+�h�ad_t
+ 
+__�rg�_th�ad
+, 
+__�io
+)
+
+452 
+__THROW
+;
+
+455 #ifde�
+__USE_GNU
+
+
+457 

+	$�h�ad_g��me_�
+ (
+�h�ad_t
+ 
+__�rg�_th�ad
+, *
+__buf
+,
+
+458 
+size_t
+ 
+__bu�
+)
+
+459 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+462 

+	$�h�ad_��ame_�
+ (
+�h�ad_t
+ 
+__�rg�_th�ad
+, cڡ *
+__�me
+)
+
+463 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+467 #ifde�
+__USE_UNIX98
+
+
+469 

+	$�h�ad_g�c�cu��cy
+ (�
+__THROW
+;
+
+472 

+	$�h�ad_�tc�cu��cy
+ (
+__�v�
+�
+__THROW
+;
+
+475 #ifde�
+__USE_GNU
+
+
+480 

+	$�h�ad_y�ld
+ (�
+__THROW
+;
+
+485 

+	$�h�ad_��ff��y_�
+ (
+�h�ad_t
+ 
+__th
+, 
+size_t
+ 
+__�u�tsize
+,
+
+486 cڡ 
+�u_�t_t
+ *
+__�u�t
+)
+
+487 
+__THROW
+ 
+	`__n�nu�
+ ((3));
+
+490 

+	$�h�ad_g�aff��y_�
+ (
+�h�ad_t
+ 
+__th
+, 
+size_t
+ 
+__�u�tsize
+,
+
+491 
+�u_�t_t
+ *
+__�u�t
+)
+
+492 
+__THROW
+ 
+	`__n�nu�
+ ((3));
+
+505 

+	`�h�ad_��
+ (
+�h�ad_��_t
+ *
+__��_cڌ�
+,
+
+506 (*
+__��_rout�e
+�()�
+	`__n�nu�
+ ((1, 2));
+
+517 

+	`�h�ad_�t�n�l��e
+ (
+__��e
+, *
+__�d��e
+);
+
+521 

+	`�h�ad_�t�n��y�
+ (
+__ty�
+, *
+__�dty�
+);
+
+524 

+	`�h�ad_�n�l
+ (
+�h�ad_t
+ 
+__th
+);
+
+529 

+	`�h�ad_���n�l
+ ();
+
+538 
+__jmp_buf
+ 
+__�n�l_jmp_buf
+;
+
+539 
+__mask_was_�ved
+;
+
+540 } 
+__�n�l_jmp_buf
+[1];
+
+541 *
+__�d
+[4];
+
+542 } 
+	t__�h�ad_unw�d_buf_t
+ 
+	t__��ibu�__
+ ((
+	t__�ig�d__
+));
+
+545 #i�de�
+__��nup_f�_��ibu�
+
+
+546 
+	#__��nup_f�_��ibu�
+
+
+	)
+
+551 
+	s__�h�ad_��nup_�ame
+
+
+553 (*
+__�n�l_rout�e
+) (*);
+
+554 *
+__�n�l_�g
+;
+
+555 
+__do_�
+;
+
+556 
+__�n�l_ty�
+;
+
+559 #i�
+def�ed
+ 
+__GNUC__
+ && def�ed 
+__EXCEPTIONS
+
+
+560 #ifde�
+__�lu�lus
+
+
+562 �as�
+	c__�h�ad_��nup_�ass
+
+
+564 (*
+__�n�l_rout�e
+) (*);
+
+565 *
+__�n�l_�g
+;
+
+566 
+__do_�
+;
+
+567 
+__�n�l_ty�
+;
+
+569 
+public
+:
+
+570 
+	`__�h�ad_��nup_�ass
+ ((*
+__f�
+�(*), *
+__�g
+)
+
+571 : 
+	`__�n�l_rout�e
+ (
+__f�
+), 
+	`__�n�l_�g
+ (
+__�g
+), 
+	$__do_�
+ (1) { }
+
+572 ~
+	$__�h�ad_��nup_�ass
+ (�{ i�(
+__do_�
+�
+	`__�n�l_rout�e
+ (
+__�n�l_�g
+); 
+	}
+}
+
+573 
+	$__�tdo�
+ (
+__�wv�
+�{ 
+__do_�
+ = __�wv�; 
+	}
+}
+
+574 
+	$__de�r
+ (�{ 
+	`�h�ad_�t�n��y�
+ (
+PTHREAD_CANCEL_DEFERRED
+,
+
+575 &
+__�n�l_ty�
+); 
+	}
+}
+
+576 
+	$__���e
+ (�cڡ { 
+	`�h�ad_�t�n��y�
+ (
+__�n�l_ty�
+, 0); 
+	}
+}
+
+586 
+	#�h�ad_��nup_push
+(
+rout�e
+, 
+�g
+) \
+
+588 
+__�h�ad_��nup_�ass
+ 
+	`__��ame
+ (
+rout�e
+, 
+�g
+)
+
+	)
+
+592 
+	#�h�ad_��nup_p�
+(
+execu�
+) \
+
+593 
+__��ame
+.
+	`__�tdo�
+ (
+execu�
+); \
+
+594 } 0)
+
+	)
+
+596 #ifde�
+__USE_GNU
+
+
+600 
+	#�h�ad_��nup_push_de�r_�
+(
+rout�e
+, 
+�g
+) \
+
+602 
+__�h�ad_��nup_�ass
+ 
+	`__��ame
+ (
+rout�e
+, 
+�g
+); \
+
+603 
+__��ame
+.
+	`__de�r
+ ()
+
+	)
+
+608 
+	#�h�ad_��nup_p�_���e_�
+(
+execu�
+) \
+
+609 
+__��ame
+.
+	`__���e
+ (); \
+
+610 
+__��ame
+.
+	`__�tdo�
+ (
+execu�
+); \
+
+611 } 0)
+
+	)
+
+618 
+__ex��_�l�e
+ 
+
+619 
+	$__�h�ad_��nup_rout�e
+ (
+__�h�ad_��nup_�ame
+ *
+__�ame
+)
+
+621 i�(
+__�ame
+->
+__do_�
+)
+
+622 
+__�ame
+->
+	`__�n�l_rout�e
+ (__�ame->
+__�n�l_�g
+);
+
+623 
+	}
+}
+
+632 
+	#�h�ad_��nup_push
+(
+rout�e
+, 
+�g
+) \
+
+634 
+__�h�ad_��nup_�ame
+ 
+__��ame
+ \
+
+635 
+	`__��ibu�__
+ ((
+	`__��nup__
+ (
+__�h�ad_��nup_rout�e
+))) \
+
+636 �{ .
+__�n�l_rout�e
+ = (
+rout�e
+), .
+__�n�l_�g
+ = (
+�g
+), \
+
+637 .
+__do_�
+ = 1 };
+
+	)
+
+641 
+	#�h�ad_��nup_p�
+(
+execu�
+) \
+
+642 
+__��ame
+.
+__do_�
+ = (
+execu�
+); \
+
+643 } 0)
+
+	)
+
+645 #ifde�
+__USE_GNU
+
+
+649 
+	#�h�ad_��nup_push_de�r_�
+(
+rout�e
+, 
+�g
+) \
+
+651 
+__�h�ad_��nup_�ame
+ 
+__��ame
+ \
+
+652 
+	`__��ibu�__
+ ((
+	`__��nup__
+ (
+__�h�ad_��nup_rout�e
+))) \
+
+653 �{ .
+__�n�l_rout�e
+ = (
+rout�e
+), .
+__�n�l_�g
+ = (
+�g
+), \
+
+654 .
+__do_�
+ = 1 }; \
+
+655 (�
+	`�h�ad_�t�n��y�
+ (
+PTHREAD_CANCEL_DEFERRED
+, \
+
+656 &
+__��ame
+.
+__�n�l_ty�
+)
+
+	)
+
+661 
+	#�h�ad_��nup_p�_���e_�
+(
+execu�
+) \
+
+662 (�
+	`�h�ad_�t�n��y�
+ (
+__��ame
+.
+__�n�l_ty�
+, 
+NULL
+); \
+
+663 
+__��ame
+.
+__do_�
+ = (
+execu�
+); \
+
+664 } 0)
+
+	)
+
+675 
+	#�h�ad_��nup_push
+(
+rout�e
+, 
+�g
+) \
+
+677 
+__�h�ad_unw�d_buf_t
+ 
+__�n�l_buf
+; \
+
+678 (*
+__�n�l_rout�e
+�(*��(
+rout�e
+); \
+
+679 *
+__�n�l_�g
+ = (
+�g
+); \
+
+680 
+__n�_f��_��
+ = 
+	`__sig�tjmp
+ ((
+__jmp_buf_�g
+ *) (*) \
+
+681 
+__�n�l_buf
+.
+__�n�l_jmp_buf
+, 0); \
+
+682 i�(
+	`__glibc_u�ik�y
+ (
+__n�_f��_��
+)) \
+
+684 
+	`__�n�l_rout�e
+ (
+__�n�l_�g
+); \
+
+685 
+	`__�h�ad_unw�d_�xt
+ (&
+__�n�l_buf
+); \
+
+689 
+	`__�h�ad_�gi��_�n�l
+ (&
+__�n�l_buf
+); \
+
+690 d�{
+
+	)
+
+691 

+__�h�ad_�gi��_�n�l
+ (
+__�h�ad_unw�d_buf_t
+ *
+__buf
+)
+
+692 
+__��nup_f�_��ibu�
+;
+
+696 
+	#�h�ad_��nup_p�
+(
+execu�
+) \
+
+699 
+	`__�h�ad_u�egi��_�n�l
+ (&
+__�n�l_buf
+); \
+
+700 i�(
+execu�
+) \
+
+701 
+	`__�n�l_rout�e
+ (
+__�n�l_�g
+); \
+
+702 } 0)
+
+	)
+
+703 

+	$__�h�ad_u�egi��_�n�l
+ (
+__�h�ad_unw�d_buf_t
+ *
+__buf
+)
+
+704 
+__��nup_f�_��ibu�
+;
+
+706 #ifde�
+__USE_GNU
+
+
+710 
+	#�h�ad_��nup_push_de�r_�
+(
+rout�e
+, 
+�g
+) \
+
+712 
+__�h�ad_unw�d_buf_t
+ 
+__�n�l_buf
+; \
+
+713 (*
+__�n�l_rout�e
+�(*��(
+rout�e
+); \
+
+714 *
+__�n�l_�g
+ = (
+�g
+); \
+
+715 
+__n�_f��_��
+ = 
+	`__sig�tjmp
+ ((
+__jmp_buf_�g
+ *) (*) \
+
+716 
+__�n�l_buf
+.
+__�n�l_jmp_buf
+, 0); \
+
+717 i�(
+	`__glibc_u�ik�y
+ (
+__n�_f��_��
+)) \
+
+719 
+	`__�n�l_rout�e
+ (
+__�n�l_�g
+); \
+
+720 
+	`__�h�ad_unw�d_�xt
+ (&
+__�n�l_buf
+); \
+
+724 
+	`__�h�ad_�gi��_�n�l_de�r
+ (&
+__�n�l_buf
+); \
+
+725 d�{
+
+	)
+
+726 

+	`__�h�ad_�gi��_�n�l_de�r
+ (
+__�h�ad_unw�d_buf_t
+ *
+__buf
+)
+
+727 
+__��nup_f�_��ibu�
+;
+
+732 
+	#�h�ad_��nup_p�_���e_�
+(
+execu�
+) \
+
+735 
+	`__�h�ad_u�egi��_�n�l_���e
+ (&
+__�n�l_buf
+); \
+
+736 i�(
+execu�
+) \
+
+737 
+	`__�n�l_rout�e
+ (
+__�n�l_�g
+); \
+
+738 
+	}
+} 0)
+
+	)
+
+739 

+	$__�h�ad_u�egi��_�n�l_���e
+ (
+__�h�ad_unw�d_buf_t
+ *
+__buf
+)
+
+740 
+__��nup_f�_��ibu�
+;
+
+744 

+	$__�h�ad_unw�d_�xt
+ (
+__�h�ad_unw�d_buf_t
+ *
+__buf
+)
+
+745 
+__��nup_f�_��ibu�
+ 
+	`__��ibu�__
+ ((
+__nܑu�__
+))
+
+746 #i�de�
+SHARED
+
+
+747 
+	`__��ibu�__
+ ((
+__w�k__
+))
+
+753 
+__jmp_buf_�g
+;
+
+754 

+	$__sig�tjmp
+ (
+__jmp_buf_�g
+ *
+__�v
+, 
+__�vemask
+�
+__THROWNL
+;
+
+760 

+	$�h�ad_mu�x_��
+ (
+�h�ad_mu�x_t
+ *
+__mu�x
+,
+
+761 cڡ 
+�h�ad_mu�x��_t
+ *
+__mu�x��
+)
+
+762 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+765 

+	$�h�ad_mu�x_de�roy
+ (
+�h�ad_mu�x_t
+ *
+__mu�x
+)
+
+766 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+769 

+	$�h�ad_mu�x_�ylock
+ (
+�h�ad_mu�x_t
+ *
+__mu�x
+)
+
+770 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+773 

+	$�h�ad_mu�x_lock
+ (
+�h�ad_mu�x_t
+ *
+__mu�x
+)
+
+774 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+776 #ifde�
+__USE_XOPEN2K
+
+
+778 

+	$�h�ad_mu�x_timedlock
+ (
+�h�ad_mu�x_t
+ *
+__��ri�
+ 
+__mu�x
+,
+
+779 cڡ 
+time�ec
+ *
+__��ri�
+
+
+780 
+__ab�ime
+�
+__THROWNL
+ 
+	`__n�nu�
+ ((1, 2));
+
+784 

+	$�h�ad_mu�x_u�ock
+ (
+�h�ad_mu�x_t
+ *
+__mu�x
+)
+
+785 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+789 

+	$�h�ad_mu�x_g��io���g
+ (cڡ 
+�h�ad_mu�x_t
+ *
+
+790 
+__��ri�
+ 
+__mu�x
+,
+
+791 *
+__��ri�
+ 
+__�io���g
+)
+
+792 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+796 

+	$�h�ad_mu�x_��rio���g
+ (
+�h�ad_mu�x_t
+ *
+__��ri�
+ 
+__mu�x
+,
+
+797 
+__�io���g
+,
+
+798 *
+__��ri�
+ 
+__�d_���g
+)
+
+799 
+__THROW
+ 
+	`__n�nu�
+ ((1, 3));
+
+802 #ifde�
+__USE_XOPEN2K8
+
+
+804 

+	$�h�ad_mu�x_c�si��t
+ (
+�h�ad_mu�x_t
+ *
+__mu�x
+)
+
+805 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+806 #ifde�
+__USE_GNU
+
+
+807 

+	$�h�ad_mu�x_c�si��t_�
+ (
+�h�ad_mu�x_t
+ *
+__mu�x
+)
+
+808 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+817 

+	$�h�ad_mu�x��_��
+ (
+�h�ad_mu�x��_t
+ *
+__��
+)
+
+818 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+821 

+	$�h�ad_mu�x��_de�roy
+ (
+�h�ad_mu�x��_t
+ *
+__��
+)
+
+822 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+825 

+	$�h�ad_mu�x��_g�psh�ed
+ (cڡ 
+�h�ad_mu�x��_t
+ *
+
+826 
+__��ri�
+ 
+__��
+,
+
+827 *
+__��ri�
+ 
+__psh�ed
+)
+
+828 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+831 

+	$�h�ad_mu�x��_��sh�ed
+ (
+�h�ad_mu�x��_t
+ *
+__��
+,
+
+832 
+__psh�ed
+)
+
+833 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+835 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K8
+
+
+837 

+	$�h�ad_mu�x��_g�ty�
+ (cڡ 
+�h�ad_mu�x��_t
+ *
+__��ri�
+
+
+838 
+__��
+, *
+__��ri�
+ 
+__k�d
+)
+
+839 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+844 

+	$�h�ad_mu�x��_��y�
+ (
+�h�ad_mu�x��_t
+ *
+__��
+, 
+__k�d
+)
+
+845 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+849 

+	$�h�ad_mu�x��_g���oc�
+ (cڡ 
+�h�ad_mu�x��_t
+ *
+
+850 
+__��ri�
+ 
+__��
+,
+
+851 *
+__��ri�
+ 
+__��oc�
+)
+
+852 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+856 

+	$�h�ad_mu�x��_��r�oc�
+ (
+�h�ad_mu�x��_t
+ *
+__��
+,
+
+857 
+__��oc�
+)
+
+858 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+861 

+	$�h�ad_mu�x��_g��io���g
+ (cڡ 
+�h�ad_mu�x��_t
+ *
+
+862 
+__��ri�
+ 
+__��
+,
+
+863 *
+__��ri�
+ 
+__�io���g
+)
+
+864 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+867 

+	$�h�ad_mu�x��_��rio���g
+ (
+�h�ad_mu�x��_t
+ *
+__��
+,
+
+868 
+__�io���g
+)
+
+869 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+871 #ifde�
+__USE_XOPEN2K
+
+
+873 

+	$�h�ad_mu�x��_g�robu�
+ (cڡ 
+�h�ad_mu�x��_t
+ *
+__��
+,
+
+874 *
+__robu��ss
+)
+
+875 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+876 #ifde�
+__USE_GNU
+
+
+877 

+	$�h�ad_mu�x��_g�robu�_�
+ (cڡ 
+�h�ad_mu�x��_t
+ *
+__��
+,
+
+878 *
+__robu��ss
+)
+
+879 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+883 

+	$�h�ad_mu�x��_��obu�
+ (
+�h�ad_mu�x��_t
+ *
+__��
+,
+
+884 
+__robu��ss
+)
+
+885 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+886 #ifde�
+__USE_GNU
+
+
+887 

+	$�h�ad_mu�x��_��obu�_�
+ (
+�h�ad_mu�x��_t
+ *
+__��
+,
+
+888 
+__robu��ss
+)
+
+889 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+894 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K
+
+
+899 

+	$�h�ad_rwlock_��
+ (
+�h�ad_rwlock_t
+ *
+__��ri�
+ 
+__rwlock
+,
+
+900 cڡ 
+�h�ad_rwlock��_t
+ *
+__��ri�
+
+
+901 
+__��
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+904 

+	$�h�ad_rwlock_de�roy
+ (
+�h�ad_rwlock_t
+ *
+__rwlock
+)
+
+905 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+908 

+	$�h�ad_rwlock_rdlock
+ (
+�h�ad_rwlock_t
+ *
+__rwlock
+)
+
+909 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+912 

+	$�h�ad_rwlock_�yrdlock
+ (
+�h�ad_rwlock_t
+ *
+__rwlock
+)
+
+913 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+915 #ifde�
+__USE_XOPEN2K
+
+
+917 

+	$�h�ad_rwlock_timedrdlock
+ (
+�h�ad_rwlock_t
+ *
+__��ri�
+ 
+__rwlock
+,
+
+918 cڡ 
+time�ec
+ *
+__��ri�
+
+
+919 
+__ab�ime
+�
+__THROWNL
+ 
+	`__n�nu�
+ ((1, 2));
+
+923 

+	$�h�ad_rwlock_w�ock
+ (
+�h�ad_rwlock_t
+ *
+__rwlock
+)
+
+924 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+927 

+	$�h�ad_rwlock_�yw�ock
+ (
+�h�ad_rwlock_t
+ *
+__rwlock
+)
+
+928 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+930 #ifde�
+__USE_XOPEN2K
+
+
+932 

+	$�h�ad_rwlock_timedw�ock
+ (
+�h�ad_rwlock_t
+ *
+__��ri�
+ 
+__rwlock
+,
+
+933 cڡ 
+time�ec
+ *
+__��ri�
+
+
+934 
+__ab�ime
+�
+__THROWNL
+ 
+	`__n�nu�
+ ((1, 2));
+
+938 

+	$�h�ad_rwlock_u�ock
+ (
+�h�ad_rwlock_t
+ *
+__rwlock
+)
+
+939 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+945 

+	$�h�ad_rwlock��_��
+ (
+�h�ad_rwlock��_t
+ *
+__��
+)
+
+946 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+949 

+	$�h�ad_rwlock��_de�roy
+ (
+�h�ad_rwlock��_t
+ *
+__��
+)
+
+950 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+953 

+	$�h�ad_rwlock��_g�psh�ed
+ (cڡ 
+�h�ad_rwlock��_t
+ *
+
+954 
+__��ri�
+ 
+__��
+,
+
+955 *
+__��ri�
+ 
+__psh�ed
+)
+
+956 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+959 

+	$�h�ad_rwlock��_��sh�ed
+ (
+�h�ad_rwlock��_t
+ *
+__��
+,
+
+960 
+__psh�ed
+)
+
+961 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+964 

+	$�h�ad_rwlock��_g�k�d_�
+ (cڡ 
+�h�ad_rwlock��_t
+ *
+
+965 
+__��ri�
+ 
+__��
+,
+
+966 *
+__��ri�
+ 
+__�ef
+)
+
+967 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+970 

+	$�h�ad_rwlock��_�tk�d_�
+ (
+�h�ad_rwlock��_t
+ *
+__��
+,
+
+971 
+__�ef
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+979 

+	$�h�ad_c�d_��
+ (
+�h�ad_c�d_t
+ *
+__��ri�
+ 
+__c�d
+,
+
+980 cڡ 
+�h�ad_c�d��_t
+ *
+__��ri�
+ 
+__c�d_��
+)
+
+981 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+984 

+	$�h�ad_c�d_de�roy
+ (
+�h�ad_c�d_t
+ *
+__c�d
+)
+
+985 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+988 

+	$�h�ad_c�d_sig�l
+ (
+�h�ad_c�d_t
+ *
+__c�d
+)
+
+989 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+992 

+	$�h�ad_c�d_br�d��
+ (
+�h�ad_c�d_t
+ *
+__c�d
+)
+
+993 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+1000 

+	$�h�ad_c�d_wa�
+ (
+�h�ad_c�d_t
+ *
+__��ri�
+ 
+__c�d
+,
+
+1001 
+�h�ad_mu�x_t
+ *
+__��ri�
+ 
+__mu�x
+)
+
+1002 
+	`__n�nu�
+ ((1, 2));
+
+1011 

+	$�h�ad_c�d_timedwa�
+ (
+�h�ad_c�d_t
+ *
+__��ri�
+ 
+__c�d
+,
+
+1012 
+�h�ad_mu�x_t
+ *
+__��ri�
+ 
+__mu�x
+,
+
+1013 cڡ 
+time�ec
+ *
+__��ri�
+ 
+__ab�ime
+)
+
+1014 
+	`__n�nu�
+ ((1, 2, 3));
+
+1019 

+	$�h�ad_c�d��_��
+ (
+�h�ad_c�d��_t
+ *
+__��
+)
+
+1020 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1023 

+	$�h�ad_c�d��_de�roy
+ (
+�h�ad_c�d��_t
+ *
+__��
+)
+
+1024 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1027 

+	$�h�ad_c�d��_g�psh�ed
+ (cڡ 
+�h�ad_c�d��_t
+ *
+
+1028 
+__��ri�
+ 
+__��
+,
+
+1029 *
+__��ri�
+ 
+__psh�ed
+)
+
+1030 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+1033 

+	$�h�ad_c�d��_��sh�ed
+ (
+�h�ad_c�d��_t
+ *
+__��
+,
+
+1034 
+__psh�ed
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1036 #ifde�
+__USE_XOPEN2K
+
+
+1038 

+	$�h�ad_c�d��_g��ock
+ (cڡ 
+�h�ad_c�d��_t
+ *
+
+1039 
+__��ri�
+ 
+__��
+,
+
+1040 
+__�ockid_t
+ *
+__��ri�
+ 
+__�ock_id
+)
+
+1041 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+1044 

+	$�h�ad_c�d��_�t�ock
+ (
+�h�ad_c�d��_t
+ *
+__��
+,
+
+1045 
+__�ockid_t
+ 
+__�ock_id
+)
+
+1046 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1050 #ifde�
+__USE_XOPEN2K
+
+
+1055 

+	$�h�ad_��_��
+ (
+�h�ad_��lock_t
+ *
+__lock
+, 
+__psh�ed
+)
+
+1056 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1059 

+	$�h�ad_��_de�roy
+ (
+�h�ad_��lock_t
+ *
+__lock
+)
+
+1060 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1063 

+	$�h�ad_��_lock
+ (
+�h�ad_��lock_t
+ *
+__lock
+)
+
+1064 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+1067 

+	$�h�ad_��_�ylock
+ (
+�h�ad_��lock_t
+ *
+__lock
+)
+
+1068 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+1071 

+	$�h�ad_��_u�ock
+ (
+�h�ad_��lock_t
+ *
+__lock
+)
+
+1072 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+1079 

+	$�h�ad_b�r�r_��
+ (
+�h�ad_b�r�r_t
+ *
+__��ri�
+ 
+__b�r�r
+,
+
+1080 cڡ 
+�h�ad_b�r���r_t
+ *
+__��ri�
+
+
+1081 
+__��
+, 
+__cou�
+)
+
+1082 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1085 

+	$�h�ad_b�r�r_de�roy
+ (
+�h�ad_b�r�r_t
+ *
+__b�r�r
+)
+
+1086 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1089 

+	$�h�ad_b�r�r_wa�
+ (
+�h�ad_b�r�r_t
+ *
+__b�r�r
+)
+
+1090 
+__THROWNL
+ 
+	`__n�nu�
+ ((1));
+
+1094 

+	$�h�ad_b�r���r_��
+ (
+�h�ad_b�r���r_t
+ *
+__��
+)
+
+1095 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1098 

+	$�h�ad_b�r���r_de�roy
+ (
+�h�ad_b�r���r_t
+ *
+__��
+)
+
+1099 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1102 

+	$�h�ad_b�r���r_g�psh�ed
+ (cڡ 
+�h�ad_b�r���r_t
+ *
+
+1103 
+__��ri�
+ 
+__��
+,
+
+1104 *
+__��ri�
+ 
+__psh�ed
+)
+
+1105 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+1108 

+	$�h�ad_b�r���r_��sh�ed
+ (
+�h�ad_b�r���r_t
+ *
+__��
+,
+
+1109 
+__psh�ed
+)
+
+1110 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1122 

+	`�h�ad_key_���
+ (
+�h�ad_key_t
+ *
+__key
+,
+
+1123 (*
+__de�r_fun�i�
+) (*))
+
+1124 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1127 

+	$�h�ad_key_d��e
+ (
+�h�ad_key_t
+ 
+__key
+�
+__THROW
+;
+
+1130 
*
+	$�h�ad_g��ecific
+ (
+�h�ad_key_t
+ 
+__key
+�
+__THROW
+;
+
+1133 

+	$�h�ad_�t�ecific
+ (
+�h�ad_key_t
+ 
+__key
+,
+
+1134 cڡ *
+__po��r
+�
+__THROW
+ ;
+
+1137 #ifde�
+__USE_XOPEN2K
+
+
+1139 

+	$�h�ad_g��u�ockid
+ (
+�h�ad_t
+ 
+__th�ad_id
+,
+
+1140 
+__�ockid_t
+ *
+__�ock_id
+)
+
+1141 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+1156 

+	`�h�ad_�f�k
+ ((*
+__���e
+) (),
+
+1157 (*
+__���
+) (),
+
+1158 (*
+__ch�d
+�()�
+__THROW
+;
+
+1161 #ifde�
+__USE_EXTERN_INLINES
+
+
+1163 
+__ex��_�l�e
+ 
+
+1164 
+	`__NTH
+ (
+	$�h�ad_equ�
+ (
+�h�ad_t
+ 
+__th�ad1
+,�th�ad_�
+__th�ad2
+))
+
+1166  
+__th�ad1
+ =�
+__th�ad2
+;
+
+1167 
+	}
+}
+
+1170 
+	g__END_DECLS
+
+
+	@/usr/include/signal.h
+
+22 #i�def 
+_SIGNAL_H
+
+
+24 #i�!
+def�ed
+ 
+__�ed_sig_�omic_t
+ && !def�ed 
+__�ed_sig�t_t
+
+
+25 
+	#_SIGNAL_H
+
+
+	)
+
+28 
+	~<�u�s.h
+>
+
+30 
+	g__BEGIN_DECLS
+
+
+32 
+	~<b�s/sig�t.h
+>
+
+36 #i�
+def�ed
+ 
+__�ed_sig_�omic_t
+ || def�ed 
+_SIGNAL_H
+
+
+37 #i�de�
+__sig_�omic_t_def�ed
+
+
+38 
+	#__sig_�omic_t_def�ed
+
+
+	)
+
+39 
+__BEGIN_NAMESPACE_STD
+
+
+40 
+__sig_�omic_t
+ 
+	tsig_�omic_t
+;
+
+41 
+	g__END_NAMESPACE_STD
+
+
+43 #unde�
+__�ed_sig_�omic_t
+
+
+46 #i�
+def�ed
+ 
+__�ed_sig�t_t
+ || (def�ed 
+_SIGNAL_H
+ && def�ed 
+__USE_POSIX
+)
+
+47 #i�de�
+__sig�t_t_def�ed
+
+
+48 
+	#__sig�t_t_def�ed
+
+
+	)
+
+49 
+__sig�t_t
+ 
+	tsig�t_t
+;
+
+51 #unde�
+__�ed_sig�t_t
+
+
+54 #ifde�
+_SIGNAL_H
+
+
+56 
+	~<b�s/ty�s.h
+>
+
+57 
+	~<b�s/signum.h
+>
+
+59 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K
+
+
+60 #i�de�
+__pid_t_def�ed
+
+
+61 
+__pid_t
+ 
+	tpid_t
+;
+
+62 
+	#__pid_t_def�ed
+
+
+	)
+
+64 #ifde�
+__USE_XOPEN
+
+
+66 #i�de�
+__uid_t_def�ed
+
+
+67 
+__uid_t
+ 
+	tuid_t
+;
+
+68 
+	#__uid_t_def�ed
+
+
+	)
+
+72 #ifde�
+__USE_POSIX199309
+
+
+74 
+	#__�ed_time�ec
+
+
+	)
+
+75 
+	~<time.h
+>
+
+78 #i�
+def�ed
+ 
+__USE_POSIX199309
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+80 
+	~<b�s/sig�fo.h
+>
+
+85 (*
+	t__sigh�d�r_t
+) ();
+
+90 
+__sigh�d�r_t
+ 
+	$__sysv_sig�l
+ (
+__sig
+, 
+__sigh�d�r_t
+ 
+__h�d�r
+)
+
+91 
+__THROW
+;
+
+92 #ifde�
+__USE_GNU
+
+
+93 
+__sigh�d�r_t
+ 
+	$sysv_sig�l
+ (
+__sig
+, 
+__sigh�d�r_t
+ 
+__h�d�r
+)
+
+94 
+__THROW
+;
+
+100 
+__BEGIN_NAMESPACE_STD
+
+
+101 #ifde�
+__USE_BSD
+
+
+102 
+__sigh�d�r_t
+ 
+	$sig�l
+ (
+__sig
+, 
+__sigh�d�r_t
+ 
+__h�d�r
+)
+
+103 
+__THROW
+;
+
+106 #ifde�
+__REDIRECT_NTH
+
+
+107 
+__sigh�d�r_t
+ 
+	`__REDIRECT_NTH
+ (
+sig�l
+,
+
+108 (
+__sig
+, 
+__sigh�d�r_t
+ 
+__h�d�r
+),
+
+109 
+__sysv_sig�l
+);
+
+111 
+	#sig�l
+ 
+__sysv_sig�l
+
+
+	)
+
+114 
+__END_NAMESPACE_STD
+
+
+116 #ifde�
+__USE_XOPEN
+
+
+119 
+__sigh�d�r_t
+ 
+	$bsd_sig�l
+ (
+__sig
+, 
+__sigh�d�r_t
+ 
+__h�d�r
+)
+
+120 
+__THROW
+;
+
+126 #ifde�
+__USE_POSIX
+
+
+127 

+	$k�l
+ (
+__pid_t
+ 
+__pid
+, 
+__sig
+�
+__THROW
+;
+
+130 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+134 

+	$k��g
+ (
+__pid_t
+ 
+__pg�
+, 
+__sig
+�
+__THROW
+;
+
+137 
+__BEGIN_NAMESPACE_STD
+
+
+139 

+	$�i�
+ (
+__sig
+�
+__THROW
+;
+
+140 
+__END_NAMESPACE_STD
+
+
+142 #ifde�
+__USE_SVID
+
+
+144 
+__sigh�d�r_t
+ 
+	$ssig�l
+ (
+__sig
+, 
+__sigh�d�r_t
+ 
+__h�d�r
+)
+
+145 
+__THROW
+;
+
+146 

+	$gsig�l
+ (
+__sig
+�
+__THROW
+;
+
+149 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN2K
+
+
+151 

+	`psig�l
+ (
+__sig
+, cڡ *
+__s
+);
+
+154 #ifde�
+__USE_XOPEN2K
+
+
+156 

+	`psig�fo
+ (cڡ 
+sig�fo_t
+ *
+__p�fo
+, cڡ *
+__s
+);
+
+167 

+	`__sig�u�
+ (
+__sig_�_mask
+, 
+__is_sig
+);
+
+169 #ifde�
+__USE_XOPEN
+
+
+170 #ifde�
+__GNUC__
+
+
+171 

+	$sig�u�
+ (
+__sig
+�
+	`__asm__
+ ("__xpg_sigpause");
+
+174 
+	#sig�u�
+(
+sig
+�
+	`__sig�u�
+ ((sig), 1)
+
+	)
+
+179 #ifde�
+__USE_BSD
+
+
+186 
+	#sigmask
+(
+sig
+�
+	`__sigmask
+(sig)
+
+	)
+
+189 

+	$sigblock
+ (
+__mask
+�
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+192 

+	$sig�tmask
+ (
+__mask
+�
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+195 

+	$sigg�mask
+ (�
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+199 #ifde�
+__USE_MISC
+
+
+200 
+	#NSIG
+ 
+_NSIG
+
+
+	)
+
+203 #ifde�
+__USE_GNU
+
+
+204 
+__sigh�d�r_t
+ 
+	tsigh�d�r_t
+;
+
+208 #ifde�
+__USE_BSD
+
+
+209 
+__sigh�d�r_t
+ 
+	tsig_t
+;
+
+212 #ifde�
+__USE_POSIX
+
+
+215 

+	$sigem�y�t
+ (
+sig�t_t
+ *
+__�t
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+218 

+	$sigf�l�t
+ (
+sig�t_t
+ *
+__�t
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+221 

+	$sigadd�t
+ (
+sig�t_t
+ *
+__�t
+, 
+__signo
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+224 

+	$sigd��t
+ (
+sig�t_t
+ *
+__�t
+, 
+__signo
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+227 

+	$sigismemb�
+ (cڡ 
+sig�t_t
+ *
+__�t
+, 
+__signo
+)
+
+228 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+230 #ifde�
+__USE_GNU
+
+
+232 

+	$sigi�m�y�t
+ (cڡ 
+sig�t_t
+ *
+__�t
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+235 

+	$sig�d�t
+ (
+sig�t_t
+ *
+__�t
+, cڡ sig�t_�*
+__��
+,
+
+236 cڡ 
+sig�t_t
+ *
+__right
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2, 3));
+
+239 

+	$sigܣt
+ (
+sig�t_t
+ *
+__�t
+, cڡ sig�t_�*
+__��
+,
+
+240 cڡ 
+sig�t_t
+ *
+__right
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2, 3));
+
+245 
+	~<b�s/siga�i�.h
+>
+
+248 

+	$sig�ocmask
+ (
+__how
+, cڡ 
+sig�t_t
+ *
+__��ri�
+ 
+__�t
+,
+
+249 
+sig�t_t
+ *
+__��ri�
+ 
+__o�t
+�
+__THROW
+;
+
+256 

+	$sigsu��d
+ (cڡ 
+sig�t_t
+ *
+__�t
+�
+	`__n�nu�
+ ((1));
+
+259 

+	$siga�i�
+ (
+__sig
+, cڡ 
+siga�i�
+ *
+__��ri�
+ 
+__a�
+,
+
+260 
+siga�i�
+ *
+__��ri�
+ 
+__��
+�
+__THROW
+;
+
+263 

+	$sig�nd�g
+ (
+sig�t_t
+ *
+__�t
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+270 

+	$sigwa�
+ (cڡ 
+sig�t_t
+ *
+__��ri�
+ 
+__�t
+, *__��ri� 
+__sig
+)
+
+271 
+	`__n�nu�
+ ((1, 2));
+
+273 #ifde�
+__USE_POSIX199309
+
+
+278 

+	$sigwa��fo
+ (cڡ 
+sig�t_t
+ *
+__��ri�
+ 
+__�t
+,
+
+279 
+sig�fo_t
+ *
+__��ri�
+ 
+__�fo
+�
+	`__n�nu�
+ ((1));
+
+286 

+	$sigtimedwa�
+ (cڡ 
+sig�t_t
+ *
+__��ri�
+ 
+__�t
+,
+
+287 
+sig�fo_t
+ *
+__��ri�
+ 
+__�fo
+,
+
+288 cڡ 
+time�ec
+ *
+__��ri�
+ 
+__timeout
+)
+
+289 
+	`__n�nu�
+ ((1));
+
+293 

+	$sigqueue
+ (
+__pid_t
+ 
+__pid
+, 
+__sig
+, cڡ 
+sigv�
+ 
+__v�
+)
+
+294 
+__THROW
+;
+
+299 #ifde�
+__USE_BSD
+
+
+303 
cڡ *cڡ 
+_sys_sigli�
+[
+_NSIG
+];
+
+304 
cڡ *cڡ 
+sys_sigli�
+[
+_NSIG
+];
+
+307 
+	ssigvec
+
+
+309 
+__sigh�d�r_t
+ 
+sv_h�d�r
+;
+
+310 
+sv_mask
+;
+
+312 
+sv_�ags
+;
+
+313 
+	#sv_ڡack
+ 
+sv_�ags
+
+
+	)
+
+317 
+	#SV_ONSTACK
+ (1 << 0)
+
+	)
+
+318 
+	#SV_INTERRUPT
+ (1 << 1)
+
+	)
+
+319 
+	#SV_RESETHAND
+ (1 << 2)
+
+	)
+
+327 

+	$sigvec
+ (
+__sig
+, cڡ 
+sigvec
+ *
+__vec
+,
+
+328 
+sigvec
+ *
+__ovec
+�
+__THROW
+;
+
+332 
+	~<b�s/sigcڋxt.h
+>
+
+335 

+	$sig�tu�
+ (
+sigcڋxt
+ *
+__s�
+�
+__THROW
+;
+
+340 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K8
+
+
+341 
+	#__�ed_size_t
+
+
+	)
+
+342 
+	~<�ddef.h
+>
+
+347 

+	$sig���u�
+ (
+__sig
+, 
+__���u�
+�
+__THROW
+;
+
+349 
+	~<b�s/sig�ack.h
+>
+
+350 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+
+
+352 
+	~<sys/ucڋxt.h
+>
+
+358 

+	$sig�ack
+ (
+sig�ack
+ *
+__ss
+, sig�ack *
+__oss
+)
+
+359 
+__THROW
+ 
+__��ibu�_d����d__
+;
+
+363 

+	$sig�t�ack
+ (cڡ 
+sig�t�ack
+ *
+__��ri�
+ 
+__ss
+,
+
+364 
+sig�t�ack
+ *
+__��ri�
+ 
+__oss
+�
+__THROW
+;
+
+368 #ifde�
+__USE_XOPEN_EXTENDED
+
+
+372 

+	$sigh�d
+ (
+__sig
+�
+__THROW
+;
+
+375 

+	$sig�l�
+ (
+__sig
+�
+__THROW
+;
+
+378 

+	$sigign�e
+ (
+__sig
+�
+__THROW
+;
+
+381 
+__sigh�d�r_t
+ 
+	$sig�t
+ (
+__sig
+, 
+__sigh�d�r_t
+ 
+__di�
+�
+__THROW
+;
+
+384 #i�
+def�ed
+ 
+__USE_POSIX199506
+ || def�ed 
+__USE_UNIX98
+
+
+387 
+	~<b�s/�h�adty�s.h
+>
+
+388 
+	~<b�s/sigth�ad.h
+>
+
+395 

+	$__libc_cu��t_sig�m�
+ (�
+__THROW
+;
+
+397 

+	$__libc_cu��t_sig�max
+ (�
+__THROW
+;
+
+401 
+__END_DECLS
+
+
+	@/usr/include/stdio.h
+
+23 #i�de�
+_STDIO_H
+
+
+25 #i�!
+def�ed
+ 
+__�ed_FILE
+ && !def�ed 
+__�ed___FILE
+
+
+26 
+	#_STDIO_H
+ 1
+
+	)
+
+27 
+	~<�u�s.h
+>
+
+29 
+	g__BEGIN_DECLS
+
+
+31 
+	#__�ed_size_t
+
+
+	)
+
+32 
+	#__�ed_NULL
+
+
+	)
+
+33 
+	~<�ddef.h
+>
+
+35 
+	~<b�s/ty�s.h
+>
+
+36 
+	#__�ed_FILE
+
+
+	)
+
+37 
+	#__�ed___FILE
+
+
+	)
+
+41 #i�!
+def�ed
+ 
+__FILE_def�ed
+ && def�ed 
+__�ed_FILE
+
+
+44 
+	g_IO_FILE
+;
+
+46 
+__BEGIN_NAMESPACE_STD
+
+
+48 
+_IO_FILE
+ 
+	tFILE
+;
+
+49 
+	g__END_NAMESPACE_STD
+
+
+50 #i�
+def�ed
+ 
+__USE_LARGEFILE64
+ || def�ed 
+__USE_SVID
+ || def�ed 
+__USE_POSIX
+ \
+
+51 || 
+def�ed
+ 
+	g__USE_BSD
+ || def�ed 
+	g__USE_ISOC99
+ || def�ed 
+	g__USE_XOPEN
+ \
+
+52 || 
+def�ed
+ 
+__USE_POSIX2
+
+
+53 
+	$__USING_NAMESPACE_STD
+(
+FILE
+)
+
+56 
+	#__FILE_def�ed
+ 1
+
+	)
+
+58 #unde�
+__�ed_FILE
+
+
+61 #i�!
+def�ed
+ 
+____FILE_def�ed
+ && def�ed 
+__�ed___FILE
+
+
+64 
+_IO_FILE
+ 
+	t__FILE
+;
+
+66 
+	#____FILE_def�ed
+ 1
+
+	)
+
+68 #unde�
+__�ed___FILE
+
+
+71 #ifdef 
+_STDIO_H
+
+
+72 
+	#_STDIO_USES_IOSTREAM
+
+
+	)
+
+74 
+	~<libio.h
+>
+
+76 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+
+
+77 #ifde�
+__GNUC__
+
+
+78 #i�de�
+_VA_LIST_DEFINED
+
+
+79 
+_G_va_li�
+ 
+	tva_li�
+;
+
+80 
+	#_VA_LIST_DEFINED
+
+
+	)
+
+83 
+	~<�d�g.h
+>
+
+87 #ifde�
+__USE_XOPEN2K8
+
+
+88 #i�de�
+__off_t_def�ed
+
+
+89 #i�de�
+__USE_FILE_OFFSET64
+
+
+90 
+__off_t
+ 
+	toff_t
+;
+
+92 
+__off64_t
+ 
+	toff_t
+;
+
+94 
+	#__off_t_def�ed
+
+
+	)
+
+96 #i�
+def�ed
+ 
+__USE_LARGEFILE64
+ && !def�ed 
+__off64_t_def�ed
+
+
+97 
+__off64_t
+ 
+	toff64_t
+;
+
+98 
+	#__off64_t_def�ed
+
+
+	)
+
+101 #i�de�
+__ssize_t_def�ed
+
+
+102 
+__ssize_t
+ 
+	tssize_t
+;
+
+103 
+	#__ssize_t_def�ed
+
+
+	)
+
+108 
+__BEGIN_NAMESPACE_STD
+
+
+109 #i�de�
+__USE_FILE_OFFSET64
+
+
+110 
+_G_�os_t
+ 
+	t�os_t
+;
+
+112 
+_G_�os64_t
+ 
+	t�os_t
+;
+
+114 
+__END_NAMESPACE_STD
+
+
+115 #ifde�
+__USE_LARGEFILE64
+
+
+116 
+_G_�os64_t
+ 
+	t�os64_t
+;
+
+120 
+	#_IOFBF
+ 0
+
+	)
+
+121 
+	#_IOLBF
+ 1
+
+	)
+
+122 
+	#_IONBF
+ 2
+
+	)
+
+126 #i�de�
+BUFSIZ
+
+
+127 
+	#BUFSIZ
+ 
+_IO_BUFSIZ
+
+
+	)
+
+133 #i�de�
+EOF
+
+
+134 
+	#EOF
+ (-1)
+
+	)
+
+140 
+	#SEEK_SET
+ 0
+
+	)
+
+141 
+	#SEEK_CUR
+ 1
+
+	)
+
+142 
+	#SEEK_END
+ 2
+
+	)
+
+143 #ifde�
+__USE_GNU
+
+
+144 
+	#SEEK_DATA
+ 3
+
+	)
+
+145 
+	#SEEK_HOLE
+ 4
+
+	)
+
+149 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+
+
+151 
+	#P_tmpd�
+ "/tmp"
+
+	)
+
+164 
+	~<b�s/�dio_lim.h
+>
+
+168 

+_IO_FILE
+ *
+�d�
+;
+
+169 

+_IO_FILE
+ *
+�dout
+;
+
+170 

+_IO_FILE
+ *
+�d�r
+;
+
+172 
+	#�d�
+ 
+�d�
+
+
+	)
+
+173 
+	#�dout
+ 
+�dout
+
+
+	)
+
+174 
+	#�d�r
+ 
+�d�r
+
+
+	)
+
+176 
+__BEGIN_NAMESPACE_STD
+
+
+178 

+	$�move
+ (cڡ *
+__f��ame
+�
+__THROW
+;
+
+180 

+	$��me
+ (cڡ *
+__�d
+, cڡ *
+__�w
+�
+__THROW
+;
+
+181 
+__END_NAMESPACE_STD
+
+
+183 #ifde�
+__USE_ATFILE
+
+
+185 

+	$��m�t
+ (
+__�dfd
+, cڡ *
+__�d
+, 
+__�wfd
+,
+
+186 cڡ *
+__�w
+�
+__THROW
+;
+
+189 
+__BEGIN_NAMESPACE_STD
+
+
+194 #i�de�
+__USE_FILE_OFFSET64
+
+
+195 
+FILE
+ *
+	$tmpf�e
+ (�
+__wur
+;
+
+197 #ifde�
+__REDIRECT
+
+
+198 
+FILE
+ *
+	`__REDIRECT
+ (
+tmpf�e
+, (), 
+tmpf�e64
+�
+__wur
+;
+
+200 
+	#tmpf�e
+ 
+tmpf�e64
+
+
+	)
+
+204 #ifde�
+__USE_LARGEFILE64
+
+
+205 
+FILE
+ *
+	$tmpf�e64
+ (�
+__wur
+;
+
+209 
*
+	$tm�am
+ (*
+__s
+�
+__THROW
+ 
+__wur
+;
+
+210 
+__END_NAMESPACE_STD
+
+
+212 #ifde�
+__USE_MISC
+
+
+215 
*
+	$tm�am_r
+ (*
+__s
+�
+__THROW
+ 
+__wur
+;
+
+219 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+
+
+227 
*
+	$�m�am
+ (cڡ *
+__d�
+, cڡ *
+__pfx
+)
+
+228 
+__THROW
+ 
+__��ibu�_m�loc__
+ 
+__wur
+;
+
+232 
+__BEGIN_NAMESPACE_STD
+
+
+237 

+	`f�o�
+ (
+FILE
+ *
+__��am
+);
+
+242 

+	`f�ush
+ (
+FILE
+ *
+__��am
+);
+
+243 
+__END_NAMESPACE_STD
+
+
+245 #ifde�
+__USE_MISC
+
+
+252 

+	`f�ush_u�ocked
+ (
+FILE
+ *
+__��am
+);
+
+255 #ifde�
+__USE_GNU
+
+
+262 

+	`f�o��l
+ ();
+
+266 
+__BEGIN_NAMESPACE_STD
+
+
+267 #i�de�
+__USE_FILE_OFFSET64
+
+
+272 
+FILE
+ *
+	$fݒ
+ (cڡ *
+__��ri�
+ 
+__f��ame
+,
+
+273 cڡ *
+__��ri�
+ 
+__modes
+�
+__wur
+;
+
+278 
+FILE
+ *
+	$�eݒ
+ (cڡ *
+__��ri�
+ 
+__f��ame
+,
+
+279 cڡ *
+__��ri�
+ 
+__modes
+,
+
+280 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+282 #ifde�
+__REDIRECT
+
+
+283 
+FILE
+ *
+	`__REDIRECT
+ (
+fݒ
+, (cڡ *
+__��ri�
+ 
+__f��ame
+,
+
+284 cڡ *
+__��ri�
+ 
+__modes
+), 
+fݒ64
+)
+
+285 
+__wur
+;
+
+286 
+FILE
+ *
+	`__REDIRECT
+ (
+�eݒ
+, (cڡ *
+__��ri�
+ 
+__f��ame
+,
+
+287 cڡ *
+__��ri�
+ 
+__modes
+,
+
+288 
+FILE
+ *
+__��ri�
+ 
+__��am
+), 
+�eݒ64
+)
+
+289 
+__wur
+;
+
+291 
+	#fݒ
+ 
+fݒ64
+
+
+	)
+
+292 
+	#�eݒ
+ 
+�eݒ64
+
+
+	)
+
+295 
+__END_NAMESPACE_STD
+
+
+296 #ifde�
+__USE_LARGEFILE64
+
+
+297 
+FILE
+ *
+	$fݒ64
+ (cڡ *
+__��ri�
+ 
+__f��ame
+,
+
+298 cڡ *
+__��ri�
+ 
+__modes
+�
+__wur
+;
+
+299 
+FILE
+ *
+	$�eݒ64
+ (cڡ *
+__��ri�
+ 
+__f��ame
+,
+
+300 cڡ *
+__��ri�
+ 
+__modes
+,
+
+301 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+304 #ifdef 
+__USE_POSIX
+
+
+306 
+FILE
+ *
+	$fdݒ
+ (
+__fd
+, cڡ *
+__modes
+�
+__THROW
+ 
+__wur
+;
+
+309 #ifdef 
+__USE_GNU
+
+
+312 
+FILE
+ *
+	$fݒcook�
+ (*
+__��ri�
+ 
+__magic_cook�
+,
+
+313 cڡ *
+__��ri�
+ 
+__modes
+,
+
+314 
+_IO_cook�_io_fun�i�s_t
+ 
+__io_funcs
+�
+__THROW
+ 
+__wur
+;
+
+317 #ifde�
+__USE_XOPEN2K8
+
+
+319 
+FILE
+ *
+	$fmemݒ
+ (*
+__s
+, 
+size_t
+ 
+__�n
+, cڡ *
+__modes
+)
+
+320 
+__THROW
+ 
+__wur
+;
+
+325 
+FILE
+ *
+	$ݒ_mem��am
+ (**
+__bu�oc
+, 
+size_t
+ *
+__siz�oc
+�
+__THROW
+ 
+__wur
+;
+
+329 
+__BEGIN_NAMESPACE_STD
+
+
+332 

+	$�tbuf
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+, *__��ri� 
+__buf
+�
+__THROW
+;
+
+336 

+	$�tvbuf
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+, *__��ri� 
+__buf
+,
+
+337 
+__modes
+, 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+338 
+__END_NAMESPACE_STD
+
+
+340 #ifdef 
+__USE_BSD
+
+
+343 

+	$�tbuf�r
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+, *__��ri� 
+__buf
+,
+
+344 
+size_t
+ 
+__size
+�
+__THROW
+;
+
+347 

+	$���ebuf
+ (
+FILE
+ *
+__��am
+�
+__THROW
+;
+
+351 
+__BEGIN_NAMESPACE_STD
+
+
+356 

+	`�r�tf
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+357 cڡ *
+__��ri�
+ 
+__f�m�
+, ...);
+
+362 

+	`��tf
+ (cڡ *
+__��ri�
+ 
+__f�m�
+, ...);
+
+364 

+	$�r�tf
+ (*
+__��ri�
+ 
+__s
+,
+
+365 cڡ *
+__��ri�
+ 
+__f�m�
+, ...�
+__THROWNL
+;
+
+371 

+	`v�r�tf
+ (
+FILE
+ *
+__��ri�
+ 
+__s
+, cڡ *__��ri� 
+__f�m�
+,
+
+372 
+_G_va_li�
+ 
+__�g
+);
+
+377 

+	`v��tf
+ (cڡ *
+__��ri�
+ 
+__f�m�
+, 
+_G_va_li�
+ 
+__�g
+);
+
+379 

+	$v�r�tf
+ (*
+__��ri�
+ 
+__s
+, cڡ *__��ri� 
+__f�m�
+,
+
+380 
+_G_va_li�
+ 
+__�g
+�
+__THROWNL
+;
+
+381 
+__END_NAMESPACE_STD
+
+
+383 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_ISOC99
+ || def�ed 
+__USE_UNIX98
+
+
+384 
+__BEGIN_NAMESPACE_C99
+
+
+386 

+	$���tf
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__max�n
+,
+
+387 cڡ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+388 
+__THROWNL
+ 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 3, 4)));
+
+390 

+	$v���tf
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__max�n
+,
+
+391 cڡ *
+__��ri�
+ 
+__f�m�
+, 
+_G_va_li�
+ 
+__�g
+)
+
+392 
+__THROWNL
+ 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 3, 0)));
+
+393 
+__END_NAMESPACE_C99
+
+
+396 #ifde�
+__USE_GNU
+
+
+399 

+	$va�r�tf
+ (**
+__��ri�
+ 
+__�r
+, cڡ *__��ri� 
+__f
+,
+
+400 
+_G_va_li�
+ 
+__�g
+)
+
+401 
+__THROWNL
+ 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__��tf__
+, 2, 0))�
+__wur
+;
+
+402 

+	$__a�r�tf
+ (**
+__��ri�
+ 
+__�r
+,
+
+403 cڡ *
+__��ri�
+ 
+__fmt
+, ...)
+
+404 
+__THROWNL
+ 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__��tf__
+, 2, 3))�
+__wur
+;
+
+405 

+	$a�r�tf
+ (**
+__��ri�
+ 
+__�r
+,
+
+406 cڡ *
+__��ri�
+ 
+__fmt
+, ...)
+
+407 
+__THROWNL
+ 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__��tf__
+, 2, 3))�
+__wur
+;
+
+410 #ifde�
+__USE_XOPEN2K8
+
+
+412 

+	$vd��tf
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__fmt
+,
+
+413 
+_G_va_li�
+ 
+__�g
+)
+
+414 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 2, 0)));
+
+415 

+	$d��tf
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__fmt
+, ...)
+
+416 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 2, 3)));
+
+420 
+__BEGIN_NAMESPACE_STD
+
+
+425 

+	$fs�nf
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+426 cڡ *
+__��ri�
+ 
+__f�m�
+, ...�
+__wur
+;
+
+431 

+	$s�nf
+ (cڡ *
+__��ri�
+ 
+__f�m�
+, ...�
+__wur
+;
+
+433 

+	$ss�nf
+ (cڡ *
+__��ri�
+ 
+__s
+,
+
+434 cڡ *
+__��ri�
+ 
+__f�m�
+, ...�
+__THROW
+;
+
+436 #i�
+def�ed
+ 
+__USE_ISOC99
+ && !def�ed 
+__USE_GNU
+ \
+
+437 && (!
+def�ed
+ 
+__LDBL_COMPAT
+ || !def�ed 
+__REDIRECT
+) \
+
+438 && (
+def�ed
+ 
+__STRICT_ANSI__
+ || def�ed 
+__USE_XOPEN2K
+)
+
+439 #ifde�
+__REDIRECT
+
+
+443 

+	`__REDIRECT
+ (
+fs�nf
+, (
+FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+444 cڡ *
+__��ri�
+ 
+__f�m�
+, ...),
+
+445 
+__isoc99_fs�nf
+�
+__wur
+;
+
+446 

+	`__REDIRECT
+ (
+s�nf
+, (cڡ *
+__��ri�
+ 
+__f�m�
+, ...),
+
+447 
+__isoc99_s�nf
+�
+__wur
+;
+
+448 

+	`__REDIRECT_NTH
+ (
+ss�nf
+, (cڡ *
+__��ri�
+ 
+__s
+,
+
+449 cڡ *
+__��ri�
+ 
+__f�m�
+, ...),
+
+450 
+__isoc99_ss�nf
+);
+
+452 

+	$__isoc99_fs�nf
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+453 cڡ *
+__��ri�
+ 
+__f�m�
+, ...�
+__wur
+;
+
+454 

+	$__isoc99_s�nf
+ (cڡ *
+__��ri�
+ 
+__f�m�
+, ...�
+__wur
+;
+
+455 

+	$__isoc99_ss�nf
+ (cڡ *
+__��ri�
+ 
+__s
+,
+
+456 cڡ *
+__��ri�
+ 
+__f�m�
+, ...�
+__THROW
+;
+
+457 
+	#fs�nf
+ 
+__isoc99_fs�nf
+
+
+	)
+
+458 
+	#s�nf
+ 
+__isoc99_s�nf
+
+
+	)
+
+459 
+	#ss�nf
+ 
+__isoc99_ss�nf
+
+
+	)
+
+463 
+__END_NAMESPACE_STD
+
+
+465 #ifdef 
+__USE_ISOC99
+
+
+466 
+__BEGIN_NAMESPACE_C99
+
+
+471 

+	$vfs�nf
+ (
+FILE
+ *
+__��ri�
+ 
+__s
+, cڡ *__��ri� 
+__f�m�
+,
+
+472 
+_G_va_li�
+ 
+__�g
+)
+
+473 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__s�nf__
+, 2, 0))�
+__wur
+;
+
+479 

+	$vs�nf
+ (cڡ *
+__��ri�
+ 
+__f�m�
+, 
+_G_va_li�
+ 
+__�g
+)
+
+480 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__s�nf__
+, 1, 0))�
+__wur
+;
+
+483 

+	$vss�nf
+ (cڡ *
+__��ri�
+ 
+__s
+,
+
+484 cڡ *
+__��ri�
+ 
+__f�m�
+, 
+_G_va_li�
+ 
+__�g
+)
+
+485 
+__THROW
+ 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__s�nf__
+, 2, 0)));
+
+487 #i�!
+def�ed
+ 
+__USE_GNU
+ \
+
+488 && (!
+def�ed
+ 
+__LDBL_COMPAT
+ || !def�ed 
+__REDIRECT
+) \
+
+489 && (
+def�ed
+ 
+__STRICT_ANSI__
+ || def�ed 
+__USE_XOPEN2K
+)
+
+490 #ifde�
+__REDIRECT
+
+
+494 

+	`__REDIRECT
+ (
+vfs�nf
+,
+
+495 (
+FILE
+ *
+__��ri�
+ 
+__s
+,
+
+496 cڡ *
+__��ri�
+ 
+__f�m�
+, 
+_G_va_li�
+ 
+__�g
+),
+
+497 
+__isoc99_vfs�nf
+)
+
+498 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__s�nf__
+, 2, 0))�
+__wur
+;
+
+499 

+	`__REDIRECT
+ (
+vs�nf
+, (cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+500 
+_G_va_li�
+ 
+__�g
+), 
+__isoc99_vs�nf
+)
+
+501 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__s�nf__
+, 1, 0))�
+__wur
+;
+
+502 

+	`__REDIRECT_NTH
+ (
+vss�nf
+,
+
+503 (cڡ *
+__��ri�
+ 
+__s
+,
+
+504 cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+505 
+_G_va_li�
+ 
+__�g
+), 
+__isoc99_vss�nf
+)
+
+506 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__s�nf__
+, 2, 0)));
+
+508 

+	$__isoc99_vfs�nf
+ (
+FILE
+ *
+__��ri�
+ 
+__s
+,
+
+509 cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+510 
+_G_va_li�
+ 
+__�g
+�
+__wur
+;
+
+511 

+	$__isoc99_vs�nf
+ (cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+512 
+_G_va_li�
+ 
+__�g
+�
+__wur
+;
+
+513 

+	$__isoc99_vss�nf
+ (cڡ *
+__��ri�
+ 
+__s
+,
+
+514 cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+515 
+_G_va_li�
+ 
+__�g
+�
+__THROW
+;
+
+516 
+	#vfs�nf
+ 
+__isoc99_vfs�nf
+
+
+	)
+
+517 
+	#vs�nf
+ 
+__isoc99_vs�nf
+
+
+	)
+
+518 
+	#vss�nf
+ 
+__isoc99_vss�nf
+
+
+	)
+
+522 
+__END_NAMESPACE_C99
+
+
+526 
+__BEGIN_NAMESPACE_STD
+
+
+531 

+	`fg�c
+ (
+FILE
+ *
+__��am
+);
+
+532 

+	`g�c
+ (
+FILE
+ *
+__��am
+);
+
+538 

+	`g�ch�
+ ();
+
+539 
+__END_NAMESPACE_STD
+
+
+543 
+	#g�c
+(
+_�
+�
+	`_IO_g�c
+ (_�)
+
+	)
+
+545 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+550 

+	`g�c_u�ocked
+ (
+FILE
+ *
+__��am
+);
+
+551 

+	`g�ch�_u�ocked
+ ();
+
+554 #ifde�
+__USE_MISC
+
+
+561 

+	`fg�c_u�ocked
+ (
+FILE
+ *
+__��am
+);
+
+565 
+__BEGIN_NAMESPACE_STD
+
+
+573 

+	`�utc
+ (
+__c
+, 
+FILE
+ *
+__��am
+);
+
+574 

+	`putc
+ (
+__c
+, 
+FILE
+ *
+__��am
+);
+
+580 

+	`putch�
+ (
+__c
+);
+
+581 
+__END_NAMESPACE_STD
+
+
+585 
+	#putc
+(
+_ch
+, 
+_�
+�
+	`_IO_putc
+ (_ch, _�)
+
+	)
+
+587 #ifde�
+__USE_MISC
+
+
+594 

+	`�utc_u�ocked
+ (
+__c
+, 
+FILE
+ *
+__��am
+);
+
+597 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+602 

+	`putc_u�ocked
+ (
+__c
+, 
+FILE
+ *
+__��am
+);
+
+603 

+	`putch�_u�ocked
+ (
+__c
+);
+
+607 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_MISC
+ \
+
+608 || (
+def�ed
+ 
+__USE_XOPEN
+ && !def�ed 
+__USE_XOPEN2K
+)
+
+610 

+	`g�w
+ (
+FILE
+ *
+__��am
+);
+
+613 

+	`putw
+ (
+__w
+, 
+FILE
+ *
+__��am
+);
+
+617 
+__BEGIN_NAMESPACE_STD
+
+
+622 
*
+	$fg�s
+ (*
+__��ri�
+ 
+__s
+, 
+__n
+, 
+FILE
+ *__��ri� 
+__��am
+)
+
+623 
+__wur
+;
+
+625 #i�!
+def�ed
+ 
+__USE_ISOC11
+ \
+
+626 || (
+def�ed
+ 
+__�lu�lus
+ && __cplusplus <= 201103L)
+
+638 
*
+	$g�s
+ (*
+__s
+�
+__wur
+ 
+__��ibu�_d����d__
+;
+
+640 
+__END_NAMESPACE_STD
+
+
+642 #ifde�
+__USE_GNU
+
+
+649 
*
+	$fg�s_u�ocked
+ (*
+__��ri�
+ 
+__s
+, 
+__n
+,
+
+650 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+654 #ifdef 
+__USE_XOPEN2K8
+
+
+665 
+_IO_ssize_t
+ 
+	$__g�d�im
+ (**
+__��ri�
+ 
+__l���
+,
+
+666 
+size_t
+ *
+__��ri�
+ 
+__n
+, 
+__d�im��
+,
+
+667 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+668 
+_IO_ssize_t
+ 
+	$g�d�im
+ (**
+__��ri�
+ 
+__l���
+,
+
+669 
+size_t
+ *
+__��ri�
+ 
+__n
+, 
+__d�im��
+,
+
+670 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+678 
+_IO_ssize_t
+ 
+	$g�l�e
+ (**
+__��ri�
+ 
+__l���
+,
+
+679 
+size_t
+ *
+__��ri�
+ 
+__n
+,
+
+680 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+684 
+__BEGIN_NAMESPACE_STD
+
+
+689 

+	`�uts
+ (cڡ *
+__��ri�
+ 
+__s
+, 
+FILE
+ *__��ri� 
+__��am
+);
+
+695 

+	`puts
+ (cڡ *
+__s
+);
+
+702 

+	`ung�c
+ (
+__c
+, 
+FILE
+ *
+__��am
+);
+
+709 
+size_t
+ 
+	$�d
+ (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__size
+,
+
+710 
+size_t
+ 
+__n
+, 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+715 
+size_t
+ 
+	`fwr�e
+ (cڡ *
+__��ri�
+ 
+__�r
+, size_�
+__size
+,
+
+716 
+size_t
+ 
+__n
+, 
+FILE
+ *
+__��ri�
+ 
+__s
+);
+
+717 
+__END_NAMESPACE_STD
+
+
+719 #ifde�
+__USE_GNU
+
+
+726 

+	`�uts_u�ocked
+ (cڡ *
+__��ri�
+ 
+__s
+,
+
+727 
+FILE
+ *
+__��ri�
+ 
+__��am
+);
+
+730 #ifde�
+__USE_MISC
+
+
+737 
+size_t
+ 
+	$�d_u�ocked
+ (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__size
+,
+
+738 
+size_t
+ 
+__n
+, 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+739 
+size_t
+ 
+	`fwr�e_u�ocked
+ (cڡ *
+__��ri�
+ 
+__�r
+, size_�
+__size
+,
+
+740 
+size_t
+ 
+__n
+, 
+FILE
+ *
+__��ri�
+ 
+__��am
+);
+
+744 
+__BEGIN_NAMESPACE_STD
+
+
+749 

+	`f�ek
+ (
+FILE
+ *
+__��am
+, 
+__off
+, 
+__wh��
+);
+
+754 

+	$�l
+ (
+FILE
+ *
+__��am
+�
+__wur
+;
+
+759 

+	`�w�d
+ (
+FILE
+ *
+__��am
+);
+
+760 
+__END_NAMESPACE_STD
+
+
+767 #i�
+def�ed
+ 
+__USE_LARGEFILE
+ || def�ed 
+__USE_XOPEN2K
+
+
+768 #i�de�
+__USE_FILE_OFFSET64
+
+
+773 

+	`f�eko
+ (
+FILE
+ *
+__��am
+, 
+__off_t
+ 
+__off
+, 
+__wh��
+);
+
+778 
+__off_t
+ 
+	$�lo
+ (
+FILE
+ *
+__��am
+�
+__wur
+;
+
+780 #ifde�
+__REDIRECT
+
+
+781 

+	`__REDIRECT
+ (
+f�eko
+,
+
+782 (
+FILE
+ *
+__��am
+, 
+__off64_t
+ 
+__off
+, 
+__wh��
+),
+
+783 
+f�eko64
+);
+
+784 
+__off64_t
+ 
+	`__REDIRECT
+ (
+�lo
+, (
+FILE
+ *
+__��am
+), 
+�lo64
+);
+
+786 
+	#f�eko
+ 
+f�eko64
+
+
+	)
+
+787 
+	#�lo
+ 
+�lo64
+
+
+	)
+
+792 
+__BEGIN_NAMESPACE_STD
+
+
+793 #i�de�
+__USE_FILE_OFFSET64
+
+
+798 

+	`fg�pos
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+, 
+�os_t
+ *__��ri� 
+__pos
+);
+
+803 

+	`f��os
+ (
+FILE
+ *
+__��am
+, cڡ 
+�os_t
+ *
+__pos
+);
+
+805 #ifde�
+__REDIRECT
+
+
+806 

+	`__REDIRECT
+ (
+fg�pos
+, (
+FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+807 
+�os_t
+ *
+__��ri�
+ 
+__pos
+), 
+fg�pos64
+);
+
+808 

+	`__REDIRECT
+ (
+f��os
+,
+
+809 (
+FILE
+ *
+__��am
+, cڡ 
+�os_t
+ *
+__pos
+), 
+f��os64
+);
+
+811 
+	#fg�pos
+ 
+fg�pos64
+
+
+	)
+
+812 
+	#f��os
+ 
+f��os64
+
+
+	)
+
+815 
+__END_NAMESPACE_STD
+
+
+817 #ifde�
+__USE_LARGEFILE64
+
+
+818 

+	`f�eko64
+ (
+FILE
+ *
+__��am
+, 
+__off64_t
+ 
+__off
+, 
+__wh��
+);
+
+819 
+__off64_t
+ 
+	$�lo64
+ (
+FILE
+ *
+__��am
+�
+__wur
+;
+
+820 

+	`fg�pos64
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+, 
+�os64_t
+ *__��ri� 
+__pos
+);
+
+821 

+	`f��os64
+ (
+FILE
+ *
+__��am
+, cڡ 
+�os64_t
+ *
+__pos
+);
+
+824 
+__BEGIN_NAMESPACE_STD
+
+
+826 

+	$����
+ (
+FILE
+ *
+__��am
+�
+__THROW
+;
+
+828 

+	$�of
+ (
+FILE
+ *
+__��am
+�
+__THROW
+ 
+__wur
+;
+
+830 

+	$��
+ (
+FILE
+ *
+__��am
+�
+__THROW
+ 
+__wur
+;
+
+831 
+__END_NAMESPACE_STD
+
+
+833 #ifde�
+__USE_MISC
+
+
+835 

+	$����_u�ocked
+ (
+FILE
+ *
+__��am
+�
+__THROW
+;
+
+836 

+	$�of_u�ocked
+ (
+FILE
+ *
+__��am
+�
+__THROW
+ 
+__wur
+;
+
+837 

+	$��_u�ocked
+ (
+FILE
+ *
+__��am
+�
+__THROW
+ 
+__wur
+;
+
+841 
+__BEGIN_NAMESPACE_STD
+
+
+846 

+	`���
+ (cڡ *
+__s
+);
+
+847 
+__END_NAMESPACE_STD
+
+
+853 
+	~<b�s/sys_��i�.h
+>
+
+856 #ifdef 
+__USE_POSIX
+
+
+858 

+	$f��o
+ (
+FILE
+ *
+__��am
+�
+__THROW
+ 
+__wur
+;
+
+861 #ifde�
+__USE_MISC
+
+
+863 

+	$f��o_u�ocked
+ (
+FILE
+ *
+__��am
+�
+__THROW
+ 
+__wur
+;
+
+867 #i�(
+def�ed
+ 
+__USE_POSIX2
+ || def�ed 
+__USE_SVID
+ || def�ed 
+__USE_BSD
+ || \
+
+868 
+def�ed
+ 
+__USE_MISC
+)
+
+873 
+FILE
+ *
+	$pݒ
+ (cڡ *
+__comm�d
+, cڡ *
+__modes
+�
+__wur
+;
+
+879 

+	`p�o�
+ (
+FILE
+ *
+__��am
+);
+
+883 #ifdef 
+__USE_POSIX
+
+
+885 
*
+	$��mid
+ (*
+__s
+�
+__THROW
+;
+
+889 #ifde�
+__USE_XOPEN
+
+
+891 
*
+	`cu�rid
+ (*
+__s
+);
+
+895 #ifdef 
+__USE_GNU
+
+
+896 
+ob�ack
+;
+
+899 

+	$ob�ack_��tf
+ (
+ob�ack
+ *
+__��ri�
+ 
+__ob�ack
+,
+
+900 cڡ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+901 
+__THROWNL
+ 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 2, 3)));
+
+902 

+	$ob�ack_v��tf
+ (
+ob�ack
+ *
+__��ri�
+ 
+__ob�ack
+,
+
+903 cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+904 
+_G_va_li�
+ 
+__�gs
+)
+
+905 
+__THROWNL
+ 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 2, 0)));
+
+909 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+913 

+	$�ockf�e
+ (
+FILE
+ *
+__��am
+�
+__THROW
+;
+
+917 

+	$�rylockf�e
+ (
+FILE
+ *
+__��am
+�
+__THROW
+ 
+__wur
+;
+
+920 

+	$fu�ockf�e
+ (
+FILE
+ *
+__��am
+�
+__THROW
+;
+
+923 #i�
+def�ed
+ 
+__USE_XOPEN
+ && !def�ed 
+__USE_XOPEN2K
+ && !def�ed 
+__USE_GNU
+
+
+927 
+	#__�ed_g��t
+
+
+	)
+
+928 
+	~<g��t.h
+>
+
+933 #ifde�
+__USE_EXTERN_INLINES
+
+
+934 
+	~<b�s/�dio.h
+>
+
+936 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__ex��_�ways_�l�e
+
+
+937 
+	~<b�s/�dio2.h
+>
+
+939 #ifde�
+__LDBL_COMPAT
+
+
+940 
+	~<b�s/�dio-ldbl.h
+>
+
+943 
+__END_DECLS
+
+
+	@/usr/include/stdlib.h
+
+22 #i�def 
+_STDLIB_H
+
+
+24 
+	~<�u�s.h
+>
+
+27 
+	#__�ed_size_t
+
+
+	)
+
+28 #i�de�
+__�ed_m�loc_�d_��oc
+
+
+29 
+	#__�ed_wch�_t
+
+
+	)
+
+30 
+	#__�ed_NULL
+
+
+	)
+
+32 
+	~<�ddef.h
+>
+
+34 
+	g__BEGIN_DECLS
+
+
+36 #i�de�
+__�ed_m�loc_�d_��oc
+
+
+37 
+	#_STDLIB_H
+ 1
+
+	)
+
+39 #i�(
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+�&& !def�ed 
+_SYS_WAIT_H
+
+
+41 
+	~<b�s/wa��ags.h
+>
+
+42 
+	~<b�s/wa���us.h
+>
+
+44 #ifde�
+__USE_BSD
+
+
+49 #i�
+def�ed
+ 
+__GNUC__
+ && !def�ed 
+__�lu�lus
+
+
+50 
+	#__WAIT_INT
+(
+��us
+) \
+
+51 (
+	`__ex�nsi�__
+ (((uni� { 
+	`__ty�of
+(
+��us
+�
+__�
+; 
+__i
+; }) \
+
+52 { .
+__�
+ = (
+��us
+�}).
+__i
+))
+
+	)
+
+54 
+	#__WAIT_INT
+(
+��us
+�(*(*�&(��us))
+
+	)
+
+62 #i�!
+def�ed
+ 
+__GNUC__
+ || __GNUC__ < 2 || def�ed 
+__�lu�lus
+
+
+63 
+	#__WAIT_STATUS
+ *
+
+	)
+
+64 
+	#__WAIT_STATUS_DEFN
+ *
+
+	)
+
+69 
+wa�
+ *
+	m__u�r
+;
+
+70 *
+	m__��
+;
+
+71 } 
+	t__WAIT_STATUS
+ 
+	t__��ibu�__
+ ((
+	t__�����t_uni�__
+));
+
+72 
+	#__WAIT_STATUS_DEFN
+ *
+
+	)
+
+77 
+	#__WAIT_INT
+(
+��us
+�(��us)
+
+	)
+
+78 
+	#__WAIT_STATUS
+ *
+
+	)
+
+79 
+	#__WAIT_STATUS_DEFN
+ *
+
+	)
+
+84 
+	#WEXITSTATUS
+(
+��us
+�
+	`__WEXITSTATUS
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+85 
+	#WTERMSIG
+(
+��us
+�
+	`__WTERMSIG
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+86 
+	#WSTOPSIG
+(
+��us
+�
+	`__WSTOPSIG
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+87 
+	#WIFEXITED
+(
+��us
+�
+	`__WIFEXITED
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+88 
+	#WIFSIGNALED
+(
+��us
+�
+	`__WIFSIGNALED
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+89 
+	#WIFSTOPPED
+(
+��us
+�
+	`__WIFSTOPPED
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+90 #ifde�
+__WIFCONTINUED
+
+
+91 
+	#WIFCONTINUED
+(
+��us
+�
+	`__WIFCONTINUED
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+95 
+__BEGIN_NAMESPACE_STD
+
+
+99 
+	mqu�
+;
+
+100 
+	m�m
+;
+
+101 } 
+	tdiv_t
+;
+
+104 #i�de�
+__ldiv_t_def�ed
+
+
+107 
+	mqu�
+;
+
+108 
+	m�m
+;
+
+109 } 
+	tldiv_t
+;
+
+110 
+	#__ldiv_t_def�ed
+ 1
+
+	)
+
+112 
+	g__END_NAMESPACE_STD
+
+
+114 #i�
+def�ed
+ 
+__USE_ISOC99
+ && !def�ed 
+__�div_t_def�ed
+
+
+115 
+__BEGIN_NAMESPACE_C99
+
+
+117 
+__ex�nsi�__
+ struct
+
+119 
+	mqu�
+;
+
+120 
+	m�m
+;
+
+121 } 
+	t�div_t
+;
+
+122 
+	#__�div_t_def�ed
+ 1
+
+	)
+
+123 
+	g__END_NAMESPACE_C99
+
+
+128 
+	#RAND_MAX
+ 2147483647
+
+	)
+
+133 
+	#EXIT_FAILURE
+ 1
+
+	)
+
+134 
+	#EXIT_SUCCESS
+ 0
+
+	)
+
+138 
+	#MB_CUR_MAX
+ (
+	`__�y�_g�_mb_cur_max
+ ())
+
+	)
+
+139 
+size_t
+ 
+	$__�y�_g�_mb_cur_max
+ (�
+__THROW
+ 
+__wur
+;
+
+142 
+__BEGIN_NAMESPACE_STD
+
+
+144 

+	$�of
+ (cڡ *
+__Ō
+)
+
+145 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+147 

+	$�oi
+ (cڡ *
+__Ō
+)
+
+148 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+150 

+	$��
+ (cڡ *
+__Ō
+)
+
+151 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+152 
+__END_NAMESPACE_STD
+
+
+154 #i�
+def�ed
+ 
+__USE_ISOC99
+ || def�ed 
+__USE_MISC
+
+
+155 
+__BEGIN_NAMESPACE_C99
+
+
+157 
+__ex�nsi�__
+ 

+	$��l
+ (cڡ *
+__Ō
+)
+
+158 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+159 
+__END_NAMESPACE_C99
+
+
+162 
+__BEGIN_NAMESPACE_STD
+
+
+164 

+	$��od
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+165 **
+__��ri�
+ 
+__�d�r
+)
+
+166 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+167 
+__END_NAMESPACE_STD
+
+
+169 #ifdef 
+__USE_ISOC99
+
+
+170 
+__BEGIN_NAMESPACE_C99
+
+
+172 

+	$��of
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+173 **
+__��ri�
+ 
+__�d�r
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+175 

+	$���d
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+176 **
+__��ri�
+ 
+__�d�r
+)
+
+177 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+178 
+__END_NAMESPACE_C99
+
+
+181 
+__BEGIN_NAMESPACE_STD
+
+
+183 

+	$���
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+184 **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+185 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+187 

+	$��oul
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+188 **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+189 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+190 
+__END_NAMESPACE_STD
+
+
+192 #ifde�
+__USE_BSD
+
+
+194 
+__ex�nsi�__
+
+
+195 

+	$��oq
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+196 **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+197 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+199 
+__ex�nsi�__
+
+
+200 

+	$��ouq
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+201 **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+202 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+205 #i�
+def�ed
+ 
+__USE_ISOC99
+ || def�ed 
+__USE_MISC
+
+
+206 
+__BEGIN_NAMESPACE_C99
+
+
+208 
+__ex�nsi�__
+
+
+209 

+	$���l
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+210 **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+211 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+213 
+__ex�nsi�__
+
+
+214 

+	$��ou�
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+215 **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+216 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+217 
+__END_NAMESPACE_C99
+
+
+221 #ifde�
+__USE_GNU
+
+
+235 
+	~<xlo��.h
+>
+
+239 

+	$���_l
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+240 **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+,
+
+241 
+__lo��_t
+ 
+__loc
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 4));
+
+243 

+	$��oul_l
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+244 **
+__��ri�
+ 
+__�d�r
+,
+
+245 
+__ba�
+, 
+__lo��_t
+ 
+__loc
+)
+
+246 
+__THROW
+ 
+	`__n�nu�
+ ((1, 4));
+
+248 
+__ex�nsi�__
+
+
+249 

+	$���l_l
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+250 **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+,
+
+251 
+__lo��_t
+ 
+__loc
+)
+
+252 
+__THROW
+ 
+	`__n�nu�
+ ((1, 4));
+
+254 
+__ex�nsi�__
+
+
+255 

+	$��ou�_l
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+256 **
+__��ri�
+ 
+__�d�r
+,
+
+257 
+__ba�
+, 
+__lo��_t
+ 
+__loc
+)
+
+258 
+__THROW
+ 
+	`__n�nu�
+ ((1, 4));
+
+260 

+	$��od_l
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+261 **
+__��ri�
+ 
+__�d�r
+, 
+__lo��_t
+ 
+__loc
+)
+
+262 
+__THROW
+ 
+	`__n�nu�
+ ((1, 3));
+
+264 

+	$��of_l
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+265 **
+__��ri�
+ 
+__�d�r
+, 
+__lo��_t
+ 
+__loc
+)
+
+266 
+__THROW
+ 
+	`__n�nu�
+ ((1, 3));
+
+268 

+	$���d_l
+ (cڡ *
+__��ri�
+ 
+__Ō
+,
+
+269 **
+__��ri�
+ 
+__�d�r
+,
+
+270 
+__lo��_t
+ 
+__loc
+)
+
+271 
+__THROW
+ 
+	`__n�nu�
+ ((1, 3));
+
+275 #ifde�
+__USE_EXTERN_INLINES
+
+
+276 
+__BEGIN_NAMESPACE_STD
+
+
+277 
+__ex��_�l�e
+ 
+
+278 
+	`__NTH
+ (
+	$�oi
+ (cڡ *
+__Ō
+))
+
+280  (�
+	`���
+ (
+__Ō
+, (**�
+NULL
+, 10);
+
+281 
+	}
+}
+
+282 
+__ex��_�l�e
+ 
+
+283 
+__NTH
+ (
+	$��
+ (cڡ *
+__Ō
+))
+
+285  
+	`���
+ (
+__Ō
+, (**�
+NULL
+, 10);
+
+286 
+	}
+}
+
+287 
+	g__END_NAMESPACE_STD
+
+
+289 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_ISOC99
+
+
+290 
+__BEGIN_NAMESPACE_C99
+
+
+291 
+__ex�nsi�__
+ 
+__ex��_�l�e
+ 
+
+292 
+__NTH
+ (
+	$��l
+ (cڡ *
+__Ō
+))
+
+294  
+	`���l
+ (
+__Ō
+, (**�
+NULL
+, 10);
+
+295 
+	}
+}
+
+296 
+	g__END_NAMESPACE_C99
+
+
+301 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+305 
*
+	$l64a
+ (
+__n
+�
+__THROW
+ 
+__wur
+;
+
+308 

+	$a64l
+ (cڡ *
+__s
+)
+
+309 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+313 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_BSD
+
+
+314 
+	~<sys/ty�s.h
+>
+
+321 

+	$�ndom
+ (�
+__THROW
+;
+
+324 

+	$��dom
+ (
+__�ed
+�
+__THROW
+;
+
+330 
*
+	$����e
+ (
+__�ed
+, *
+__��ebuf
+,
+
+331 
+size_t
+ 
+__����
+�
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+335 
*
+	$�t��e
+ (*
+__��ebuf
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+338 #ifde�
+__USE_MISC
+
+
+343 
+	s�ndom_d�a
+
+
+345 
+�t32_t
+ *
+�
+;
+
+346 
+�t32_t
+ *
+��
+;
+
+347 
+�t32_t
+ *
+��e
+;
+
+348 
+�nd_ty�
+;
+
+349 
+�nd_deg
+;
+
+350 
+�nd_�p
+;
+
+351 
+�t32_t
+ *
+�d_�r
+;
+
+354 

+	$�ndom_r
+ (
+�ndom_d�a
+ *
+__��ri�
+ 
+__buf
+,
+
+355 
+�t32_t
+ *
+__��ri�
+ 
+__�su�
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+357 

+	$��dom_r
+ (
+__�ed
+, 
+�ndom_d�a
+ *
+__buf
+)
+
+358 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+360 

+	$����e_r
+ (
+__�ed
+, *
+__��ri�
+ 
+__��ebuf
+,
+
+361 
+size_t
+ 
+__����
+,
+
+362 
+�ndom_d�a
+ *
+__��ri�
+ 
+__buf
+)
+
+363 
+__THROW
+ 
+	`__n�nu�
+ ((2, 4));
+
+365 

+	$�t��e_r
+ (*
+__��ri�
+ 
+__��ebuf
+,
+
+366 
+�ndom_d�a
+ *
+__��ri�
+ 
+__buf
+)
+
+367 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+372 
+__BEGIN_NAMESPACE_STD
+
+
+374 

+	$�nd
+ (�
+__THROW
+;
+
+376 

+	$��d
+ (
+__�ed
+�
+__THROW
+;
+
+377 
+__END_NAMESPACE_STD
+
+
+379 #ifde�
+__USE_POSIX
+
+
+381 

+	$�nd_r
+ (*
+__�ed
+�
+__THROW
+;
+
+385 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+
+
+389 

+	$d�nd48
+ (�
+__THROW
+;
+
+390 

+	$��d48
+ (
+__xsubi
+[3]�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+393 

+	$̪d48
+ (�
+__THROW
+;
+
+394 

+	$Īd48
+ (
+__xsubi
+[3])
+
+395 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+398 

+	$m�nd48
+ (�
+__THROW
+;
+
+399 

+	$j�nd48
+ (
+__xsubi
+[3])
+
+400 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+403 

+	$��d48
+ (
+__�edv�
+�
+__THROW
+;
+
+404 
*
+	$�ed48
+ (
+__�ed16v
+[3])
+
+405 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+406 

+	$lc�g48
+ (
+__��m
+[7]�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+408 #ifde�
+__USE_MISC
+
+
+412 
+	sd�nd48_d�a
+
+
+414 
+__x
+[3];
+
+415 
+__�d_x
+[3];
+
+416 
+__c
+;
+
+417 
+__��
+;
+
+418 
+__ex�nsi�__
+ 
+__a
+;
+
+423 

+	$d�nd48_r
+ (
+d�nd48_d�a
+ *
+__��ri�
+ 
+__buf�r
+,
+
+424 *
+__��ri�
+ 
+__�su�
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+425 

+	$��d48_r
+ (
+__xsubi
+[3],
+
+426 
+d�nd48_d�a
+ *
+__��ri�
+ 
+__buf�r
+,
+
+427 *
+__��ri�
+ 
+__�su�
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+430 

+	$̪d48_r
+ (
+d�nd48_d�a
+ *
+__��ri�
+ 
+__buf�r
+,
+
+431 *
+__��ri�
+ 
+__�su�
+)
+
+432 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+433 

+	$Īd48_r
+ (
+__xsubi
+[3],
+
+434 
+d�nd48_d�a
+ *
+__��ri�
+ 
+__buf�r
+,
+
+435 *
+__��ri�
+ 
+__�su�
+)
+
+436 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+439 

+	$m�nd48_r
+ (
+d�nd48_d�a
+ *
+__��ri�
+ 
+__buf�r
+,
+
+440 *
+__��ri�
+ 
+__�su�
+)
+
+441 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+442 

+	$j�nd48_r
+ (
+__xsubi
+[3],
+
+443 
+d�nd48_d�a
+ *
+__��ri�
+ 
+__buf�r
+,
+
+444 *
+__��ri�
+ 
+__�su�
+)
+
+445 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+448 

+	$��d48_r
+ (
+__�edv�
+, 
+d�nd48_d�a
+ *
+__buf�r
+)
+
+449 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+451 

+	$�ed48_r
+ (
+__�ed16v
+[3],
+
+452 
+d�nd48_d�a
+ *
+__buf�r
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+454 

+	$lc�g48_r
+ (
+__��m
+[7],
+
+455 
+d�nd48_d�a
+ *
+__buf�r
+)
+
+456 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+462 #i�de�
+__m�loc_�d_��oc_def�ed
+
+
+463 
+	#__m�loc_�d_��oc_def�ed
+
+
+	)
+
+464 
+__BEGIN_NAMESPACE_STD
+
+
+466 
*
+	$m�loc
+ (
+size_t
+ 
+__size
+�
+__THROW
+ 
+__��ibu�_m�loc__
+ 
+__wur
+;
+
+468 
*
+	$��oc
+ (
+size_t
+ 
+__nmemb
+, size_�
+__size
+)
+
+469 
+__THROW
+ 
+__��ibu�_m�loc__
+ 
+__wur
+;
+
+470 
+__END_NAMESPACE_STD
+
+
+473 #i�de�
+__�ed_m�loc_�d_��oc
+
+
+474 
+__BEGIN_NAMESPACE_STD
+
+
+480 
*
+	$��loc
+ (*
+__�r
+, 
+size_t
+ 
+__size
+)
+
+481 
+__THROW
+ 
+__��ibu�_w�n_unu�d_�su�__
+;
+
+483 

+	$�
+ (*
+__�r
+�
+__THROW
+;
+
+484 
+__END_NAMESPACE_STD
+
+
+486 #ifdef 
+__USE_MISC
+
+
+488 

+	$c�
+ (*
+__�r
+�
+__THROW
+;
+
+491 #i�
+def�ed
+ 
+__USE_GNU
+ || def�ed 
+__USE_BSD
+ || def�ed 
+__USE_MISC
+
+
+492 
+	~<�lo�.h
+>
+
+495 #i�(
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ && !def�ed 
+__USE_XOPEN2K
+) \
+
+496 || 
+def�ed
+ 
+__USE_BSD
+
+
+498 
*
+	$v�loc
+ (
+size_t
+ 
+__size
+�
+__THROW
+ 
+__��ibu�_m�loc__
+ 
+__wur
+;
+
+501 #ifde�
+__USE_XOPEN2K
+
+
+503 

+	$posix_mem�ign
+ (**
+__mem�r
+, 
+size_t
+ 
+__�ignm�t
+, size_�
+__size
+)
+
+504 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+507 #ifde�
+__USE_ISOC11
+
+
+509 
*
+	$�ig�d_�loc
+ (
+size_t
+ 
+__�ignm�t
+, size_�
+__size
+)
+
+510 
+__THROW
+ 
+__��ibu�_m�loc__
+ 
+	`__��ibu�_�loc_size__
+ ((2)�
+__wur
+;
+
+513 
+__BEGIN_NAMESPACE_STD
+
+
+515 

+	$ab�t
+ (�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+519 

+	`�ex�
+ ((*
+__func
+�()�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+521 #i�
+def�ed
+ 
+__USE_ISOC11
+ || def�ed 
+__USE_ISOCXX11
+
+
+523 #ifde�
+__�lu�lus
+
+
+524 
"C++" 
+	`�_quick_ex�
+ ((*
+__func
+) ())
+
+525 
+__THROW
+ 
+	`__asm
+ ("�_quick_ex�"�
+	`__n�nu�
+ ((1));
+
+527 

+	`�_quick_ex�
+ ((*
+__func
+�()�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+530 
+__END_NAMESPACE_STD
+
+
+532 #ifdef 
+__USE_MISC
+
+
+535 

+	`�_ex�
+ ((*
+__func
+�(
+__��us
+, *
+__�g
+), *__arg)
+
+536 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+539 
+__BEGIN_NAMESPACE_STD
+
+
+543 

+	$ex�
+ (
+__��us
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+545 #i�
+def�ed
+ 
+__USE_ISOC11
+ || def�ed 
+__USE_ISOCXX11
+
+
+549 

+	$quick_ex�
+ (
+__��us
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+551 
+__END_NAMESPACE_STD
+
+
+553 #ifde�
+__USE_ISOC99
+
+
+554 
+__BEGIN_NAMESPACE_C99
+
+
+557 

+	$_Ex�
+ (
+__��us
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+558 
+__END_NAMESPACE_C99
+
+
+562 
+__BEGIN_NAMESPACE_STD
+
+
+564 
*
+	$g��v
+ (cڡ *
+__�me
+�
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+565 
+__END_NAMESPACE_STD
+
+
+567 #ifde�
+__USE_GNU
+
+
+570 
*
+	$�cu�_g��v
+ (cڡ *
+__�me
+)
+
+571 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+574 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+
+
+578 

+	$pu�nv
+ (*
+__�r�g
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+581 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN2K
+
+
+584 

+	$��nv
+ (cڡ *
+__�me
+, cڡ *
+__v�ue
+, 
+__��a�
+)
+
+585 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+588 

+	$un��nv
+ (cڡ *
+__�me
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+591 #ifdef 
+__USE_MISC
+
+
+595 

+	$���nv
+ (�
+__THROW
+;
+
+599 #i�
+def�ed
+ 
+__USE_MISC
+ \
+
+600 || (
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ && !def�ed 
+__USE_XOPEN2K8
+)
+
+606 
*
+	$mk�mp
+ (*
+__�m��e
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+609 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ \
+
+610 || 
+def�ed
+ 
+__USE_XOPEN2K8
+
+
+619 #i�de�
+__USE_FILE_OFFSET64
+
+
+620 

+	$mk�emp
+ (*
+__�m��e
+�
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+622 #ifde�
+__REDIRECT
+
+
+623 

+	`__REDIRECT
+ (
+mk�emp
+, (*
+__�m��e
+), 
+mk�emp64
+)
+
+624 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+626 
+	#mk�emp
+ 
+mk�emp64
+
+
+	)
+
+629 #ifde�
+__USE_LARGEFILE64
+
+
+630 

+	$mk�emp64
+ (*
+__�m��e
+�
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+634 #ifde�
+__USE_MISC
+
+
+641 #i�de�
+__USE_FILE_OFFSET64
+
+
+642 

+	$mk�emps
+ (*
+__�m��e
+, 
+__suffix�n
+�
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+644 #ifde�
+__REDIRECT
+
+
+645 

+	`__REDIRECT
+ (
+mk�emps
+, (*
+__�m��e
+, 
+__suffix�n
+),
+
+646 
+mk�emps64
+�
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+648 
+	#mk�emps
+ 
+mk�emps64
+
+
+	)
+
+651 #ifde�
+__USE_LARGEFILE64
+
+
+652 

+	$mk�emps64
+ (*
+__�m��e
+, 
+__suffix�n
+)
+
+653 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+657 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN2K8
+
+
+663 
*
+	$mkd�mp
+ (*
+__�m��e
+�
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+666 #ifde�
+__USE_GNU
+
+
+673 #i�de�
+__USE_FILE_OFFSET64
+
+
+674 

+	$mko�emp
+ (*
+__�m��e
+, 
+__�ags
+�
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+676 #ifde�
+__REDIRECT
+
+
+677 

+	`__REDIRECT
+ (
+mko�emp
+, (*
+__�m��e
+, 
+__�ags
+), 
+mko�emp64
+)
+
+678 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+680 
+	#mko�emp
+ 
+mko�emp64
+
+
+	)
+
+683 #ifde�
+__USE_LARGEFILE64
+
+
+684 

+	$mko�emp64
+ (*
+__�m��e
+, 
+__�ags
+�
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+693 #i�de�
+__USE_FILE_OFFSET64
+
+
+694 

+	$mko�emps
+ (*
+__�m��e
+, 
+__suffix�n
+, 
+__�ags
+)
+
+695 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+697 #ifde�
+__REDIRECT
+
+
+698 

+	`__REDIRECT
+ (
+mko�emps
+, (*
+__�m��e
+, 
+__suffix�n
+,
+
+699 
+__�ags
+), 
+mko�emps64
+)
+
+700 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+702 
+	#mko�emps
+ 
+mko�emps64
+
+
+	)
+
+705 #ifde�
+__USE_LARGEFILE64
+
+
+706 

+	$mko�emps64
+ (*
+__�m��e
+, 
+__suffix�n
+, 
+__�ags
+)
+
+707 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+712 
+__BEGIN_NAMESPACE_STD
+
+
+717 

+	$sy�em
+ (cڡ *
+__comm�d
+�
+__wur
+;
+
+718 
+__END_NAMESPACE_STD
+
+
+721 #ifdef 
+__USE_GNU
+
+
+724 
*
+	$�n�i�lize_f�e_�me
+ (cڡ *
+__�me
+)
+
+725 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+728 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+734 
*
+	$���th
+ (cڡ *
+__��ri�
+ 
+__�me
+,
+
+735 *
+__��ri�
+ 
+__�s�ved
+�
+__THROW
+ 
+__wur
+;
+
+740 #i�de�
+__COMPAR_FN_T
+
+
+741 
+	#__COMPAR_FN_T
+
+
+	)
+
+742 (*
+	t__com�r_�_t
+) (const *, const *);
+
+744 #ifdef 
+__USE_GNU
+
+
+745 
+__com�r_�_t
+ 
+	tcom�ris�_�_t
+;
+
+748 #ifde�
+__USE_GNU
+
+
+749 (*
+	t__com�r_d_�_t
+) (const *, const *, *);
+
+752 
+__BEGIN_NAMESPACE_STD
+
+
+755 
*
+	$b��ch
+ (cڡ *
+__key
+, cڡ *
+__ba�
+,
+
+756 
+size_t
+ 
+__nmemb
+, size_�
+__size
+, 
+__com�r_�_t
+ 
+__com�r
+)
+
+757 
+	`__n�nu�
+ ((1, 2, 5)�
+__wur
+;
+
+759 #ifde�
+__USE_EXTERN_INLINES
+
+
+760 
+	~<b�s/�dlib-b��ch.h
+>
+
+765 

+	$qs�t
+ (*
+__ba�
+, 
+size_t
+ 
+__nmemb
+, size_�
+__size
+,
+
+766 
+__com�r_�_t
+ 
+__com�r
+�
+	`__n�nu�
+ ((1, 4));
+
+767 #ifde�
+__USE_GNU
+
+
+768 

+	$qs�t_r
+ (*
+__ba�
+, 
+size_t
+ 
+__nmemb
+, size_�
+__size
+,
+
+769 
+__com�r_d_�_t
+ 
+__com�r
+, *
+__�g
+)
+
+770 
+	`__n�nu�
+ ((1, 4));
+
+775 

+	$abs
+ (
+__x
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+)�
+__wur
+;
+
+776 

+	$�bs
+ (
+__x
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+)�
+__wur
+;
+
+777 
+__END_NAMESPACE_STD
+
+
+779 #ifde�
+__USE_ISOC99
+
+
+780 
+__ex�nsi�__
+ 

+	$�abs
+ (
+__x
+)
+
+781 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+)�
+__wur
+;
+
+785 
+__BEGIN_NAMESPACE_STD
+
+
+789 
+div_t
+ 
+	$div
+ (
+__num�
+, 
+__d�om
+)
+
+790 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+)�
+__wur
+;
+
+791 
+ldiv_t
+ 
+	$ldiv
+ (
+__num�
+, 
+__d�om
+)
+
+792 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+)�
+__wur
+;
+
+793 
+__END_NAMESPACE_STD
+
+
+795 #ifde�
+__USE_ISOC99
+
+
+796 
+__BEGIN_NAMESPACE_C99
+
+
+797 
+__ex�nsi�__
+ 
+�div_t
+ 
+	$�div
+ (
+__num�
+,
+
+798 
+__d�om
+)
+
+799 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+)�
+__wur
+;
+
+800 
+__END_NAMESPACE_C99
+
+
+804 #i�(
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ && !def�ed 
+__USE_XOPEN2K8
+) \
+
+805 || 
+def�ed
+ 
+__USE_SVID
+
+
+812 
*
+	$ecvt
+ (
+__v�ue
+, 
+__ndig�
+, *
+__��ri�
+ 
+__de�t
+,
+
+813 *
+__��ri�
+ 
+__sign
+�
+__THROW
+ 
+	`__n�nu�
+ ((3, 4)�
+__wur
+;
+
+818 
*
+	$fcvt
+ (
+__v�ue
+, 
+__ndig�
+, *
+__��ri�
+ 
+__de�t
+,
+
+819 *
+__��ri�
+ 
+__sign
+�
+__THROW
+ 
+	`__n�nu�
+ ((3, 4)�
+__wur
+;
+
+824 
*
+	$gcvt
+ (
+__v�ue
+, 
+__ndig�
+, *
+__buf
+)
+
+825 
+__THROW
+ 
+	`__n�nu�
+ ((3)�
+__wur
+;
+
+828 #ifde�
+__USE_MISC
+
+
+830 
*
+	$qecvt
+ (
+__v�ue
+, 
+__ndig�
+,
+
+831 *
+__��ri�
+ 
+__de�t
+, *__��ri� 
+__sign
+)
+
+832 
+__THROW
+ 
+	`__n�nu�
+ ((3, 4)�
+__wur
+;
+
+833 
*
+	$qfcvt
+ (
+__v�ue
+, 
+__ndig�
+,
+
+834 *
+__��ri�
+ 
+__de�t
+, *__��ri� 
+__sign
+)
+
+835 
+__THROW
+ 
+	`__n�nu�
+ ((3, 4)�
+__wur
+;
+
+836 
*
+	$qgcvt
+ (
+__v�ue
+, 
+__ndig�
+, *
+__buf
+)
+
+837 
+__THROW
+ 
+	`__n�nu�
+ ((3)�
+__wur
+;
+
+842 

+	$ecvt_r
+ (
+__v�ue
+, 
+__ndig�
+, *
+__��ri�
+ 
+__de�t
+,
+
+843 *
+__��ri�
+ 
+__sign
+, *__��ri� 
+__buf
+,
+
+844 
+size_t
+ 
+__�n
+�
+__THROW
+ 
+	`__n�nu�
+ ((3, 4, 5));
+
+845 

+	$fcvt_r
+ (
+__v�ue
+, 
+__ndig�
+, *
+__��ri�
+ 
+__de�t
+,
+
+846 *
+__��ri�
+ 
+__sign
+, *__��ri� 
+__buf
+,
+
+847 
+size_t
+ 
+__�n
+�
+__THROW
+ 
+	`__n�nu�
+ ((3, 4, 5));
+
+849 

+	$qecvt_r
+ (
+__v�ue
+, 
+__ndig�
+,
+
+850 *
+__��ri�
+ 
+__de�t
+, *__��ri� 
+__sign
+,
+
+851 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+)
+
+852 
+__THROW
+ 
+	`__n�nu�
+ ((3, 4, 5));
+
+853 

+	$qfcvt_r
+ (
+__v�ue
+, 
+__ndig�
+,
+
+854 *
+__��ri�
+ 
+__de�t
+, *__��ri� 
+__sign
+,
+
+855 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+)
+
+856 
+__THROW
+ 
+	`__n�nu�
+ ((3, 4, 5));
+
+860 
+__BEGIN_NAMESPACE_STD
+
+
+863 

+	$mb�n
+ (cڡ *
+__s
+, 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+866 

+	$mbtowc
+ (
+wch�_t
+ *
+__��ri�
+ 
+__pwc
+,
+
+867 cڡ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+870 

+	$w�omb
+ (*
+__s
+, 
+wch�_t
+ 
+__wch�
+�
+__THROW
+;
+
+874 
+size_t
+ 
+	$mb�owcs
+ (
+wch�_t
+ *
+__��ri�
+ 
+__pwcs
+,
+
+875 cڡ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+877 
+size_t
+ 
+	$wc�ombs
+ (*
+__��ri�
+ 
+__s
+,
+
+878 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__pwcs
+, 
+size_t
+ 
+__n
+)
+
+879 
+__THROW
+;
+
+880 
+__END_NAMESPACE_STD
+
+
+883 #ifde�
+__USE_SVID
+
+
+888 

+	$�m�ch
+ (cڡ *
+__��ڣ
+�
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+892 #i�
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K8
+
+
+899 

+	$g�sub�t
+ (**
+__��ri�
+ 
+__�ti�p
+,
+
+900 *cڡ *
+__��ri�
+ 
+__tok�s
+,
+
+901 **
+__��ri�
+ 
+__v�u�
+)
+
+902 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2, 3)�
+__wur
+;
+
+906 #ifde�
+__USE_XOPEN
+
+
+908 

+	$�tkey
+ (cڡ *
+__key
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+914 #ifde�
+__USE_XOPEN2KXSI
+
+
+916 

+	$posix_ݒ�
+ (
+__o�ag
+�
+__wur
+;
+
+919 #ifde�
+__USE_XOPEN
+
+
+924 

+	$g���
+ (
+__fd
+�
+__THROW
+;
+
+928 

+	$u�ock�
+ (
+__fd
+�
+__THROW
+;
+
+933 
*
+	$��ame
+ (
+__fd
+�
+__THROW
+ 
+__wur
+;
+
+936 #ifde�
+__USE_GNU
+
+
+940 

+	$��ame_r
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+)
+
+941 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+944 

+	`g��
+ ();
+
+947 #ifde�
+__USE_BSD
+
+
+951 

+	$g�l�davg
+ (
+__l�davg
+[], 
+__��m
+)
+
+952 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+955 
+	~<b�s/�dlib-��t.h
+>
+
+958 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+
+
+959 
+	~<b�s/�dlib.h
+>
+
+961 #ifde�
+__LDBL_COMPAT
+
+
+962 
+	~<b�s/�dlib-ldbl.h
+>
+
+966 #unde�
+__�ed_m�loc_�d_��oc
+
+
+968 
+__END_DECLS
+
+
+	@/usr/include/string.h
+
+22 #i�def 
+_STRING_H
+
+
+23 
+	#_STRING_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+27 
+	g__BEGIN_DECLS
+
+
+30 
+	#__�ed_size_t
+
+
+	)
+
+31 
+	#__�ed_NULL
+
+
+	)
+
+32 
+	~<�ddef.h
+>
+
+39 #i�
+def�ed
+ 
+__�lu�lus
+ && (__�lu�lu�>�199711L || 
+__GNUC_PREREQ
+ (4, 4))
+
+40 
+	#__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+	)
+
+44 
+__BEGIN_NAMESPACE_STD
+
+
+46 
*
+	$mem�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+,
+
+47 
+size_t
+ 
+__n
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+50 
*
+	$memmove
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+)
+
+51 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+52 
+__END_NAMESPACE_STD
+
+
+57 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN
+
+
+58 
*
+	$memc�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+,
+
+59 
+__c
+, 
+size_t
+ 
+__n
+)
+
+60 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+64 
+__BEGIN_NAMESPACE_STD
+
+
+66 
*
+	$mem�t
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+69 

+	$memcmp
+ (cڡ *
+__s1
+, cڡ *
+__s2
+, 
+size_t
+ 
+__n
+)
+
+70 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+73 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+76 
*
+	`memchr
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+77 
+__THROW
+ 
+	`__asm
+ ("memchr"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+78 
cڡ *
+	`memchr
+ (cڡ *
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+79 
+__THROW
+ 
+	`__asm
+ ("memchr"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+81 #ifde�
+__OPTIMIZE__
+
+
+82 
+__ex��_�ways_�l�e
+ *
+
+83 
+	`memchr
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+�
+__THROW
+
+
+85  
+	`__bu�t�_memchr
+ (
+__s
+, 
+__c
+, 
+__n
+);
+
+88 
+__ex��_�ways_�l�e
+ const *
+
+89 
+	`memchr
+ (cڡ *
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+�
+__THROW
+
+
+91  
+	`__bu�t�_memchr
+ (
+__s
+, 
+__c
+, 
+__n
+);
+
+94 
+	}
+}
+
+96 
*
+	$memchr
+ (cڡ *
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+97 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+99 
+__END_NAMESPACE_STD
+
+
+101 #ifde�
+__USE_GNU
+
+
+104 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+105 
"C++" *
+	$�wmemchr
+ (*
+__s
+, 
+__c
+)
+
+106 
+__THROW
+ 
+	`__asm
+ ("�wmemchr"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+107 
"C++" cڡ *
+	$�wmemchr
+ (cڡ *
+__s
+, 
+__c
+)
+
+108 
+__THROW
+ 
+	`__asm
+ ("�wmemchr"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+110 
*
+	$�wmemchr
+ (cڡ *
+__s
+, 
+__c
+)
+
+111 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+115 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+116 
"C++" *
+	$memrchr
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+117 
+__THROW
+ 
+	`__asm
+ ("memrchr"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+118 
"C++" cڡ *
+	$memrchr
+ (cڡ *
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+119 
+__THROW
+ 
+	`__asm
+ ("memrchr"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+121 
*
+	$memrchr
+ (cڡ *
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+122 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+127 
+__BEGIN_NAMESPACE_STD
+
+
+129 
*
+	$�r�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+)
+
+130 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+132 
*
+	$���y
+ (*
+__��ri�
+ 
+__de�
+,
+
+133 cڡ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+134 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+137 
*
+	$�r�t
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+)
+
+138 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+140 
*
+	$���t
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+,
+
+141 
+size_t
+ 
+__n
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+144 

+	$�rcmp
+ (cڡ *
+__s1
+, cڡ *
+__s2
+)
+
+145 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+147 

+	$��cmp
+ (cڡ *
+__s1
+, cڡ *
+__s2
+, 
+size_t
+ 
+__n
+)
+
+148 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+151 

+	$�rc�l
+ (cڡ *
+__s1
+, cڡ *
+__s2
+)
+
+152 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+154 
+size_t
+ 
+	$�rx�m
+ (*
+__��ri�
+ 
+__de�
+,
+
+155 cڡ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+156 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+157 
+__END_NAMESPACE_STD
+
+
+159 #ifde�
+__USE_XOPEN2K8
+
+
+163 
+	~<xlo��.h
+>
+
+166 

+	$�rc�l_l
+ (cڡ *
+__s1
+, cڡ *
+__s2
+, 
+__lo��_t
+ 
+__l
+)
+
+167 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2, 3));
+
+169 
+size_t
+ 
+	$�rx�m_l
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+,
+
+170 
+__lo��_t
+ 
+__l
+�
+__THROW
+ 
+	`__n�nu�
+ ((2, 4));
+
+173 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ \
+
+174 || 
+def�ed
+ 
+__USE_XOPEN2K8
+
+
+176 
*
+	$�rdup
+ (cڡ *
+__s
+)
+
+177 
+__THROW
+ 
+__��ibu�_m�loc__
+ 
+	`__n�nu�
+ ((1));
+
+183 #i�
+def�ed
+ 
+__USE_XOPEN2K8
+
+
+184 
*
+	$��dup
+ (cڡ *
+__�r�g
+, 
+size_t
+ 
+__n
+)
+
+185 
+__THROW
+ 
+__��ibu�_m�loc__
+ 
+	`__n�nu�
+ ((1));
+
+188 #i�
+def�ed
+ 
+__USE_GNU
+ && def�ed 
+__GNUC__
+
+
+190 
+	#�rdu�
+(
+s
+) \
+
+191 (
+__ex�nsi�__
+ \
+
+193 cڡ *
+__�d
+ = (
+s
+); \
+
+194 
+size_t
+ 
+__�n
+ = 
+	`���
+ (
+__�d
+) + 1; \
+
+195 *
+__�w
+ = (*�
+	`__bu�t�_�lo�
+ (
+__�n
+); \
+
+196 (*�
+	`mem�y
+ (
+__�w
+, 
+__�d
+, 
+__�n
+); \
+
+197 
+	}
+}))
+
+	)
+
+200 
+	#��du�
+(
+s
+, 
+n
+) \
+
+201 (
+__ex�nsi�__
+ \
+
+203 cڡ *
+__�d
+ = (
+s
+); \
+
+204 
+size_t
+ 
+__�n
+ = 
+	`���n
+ (
+__�d
+, (
+n
+)); \
+
+205 *
+__�w
+ = (*�
+	`__bu�t�_�lo�
+ (
+__�n
+ + 1); \
+
+206 
+__�w
+[
+__�n
+] = '\0'; \
+
+207 (*�
+	`mem�y
+ (
+__�w
+, 
+__�d
+, 
+__�n
+); \
+
+208 }))
+
+	)
+
+211 
+	g__BEGIN_NAMESPACE_STD
+
+
+213 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+216 
*
+�rchr
+ (*
+__s
+, 
+__c
+)
+
+217 
+__THROW
+ 
+__asm
+ ("�rchr"�
+__��ibu�_pu�__
+ 
+__n�nu�
+ ((1));
+
+218 
cڡ *
+�rchr
+ (cڡ *
+__s
+, 
+__c
+)
+
+219 
+__THROW
+ 
+__asm
+ ("�rchr"�
+__��ibu�_pu�__
+ 
+__n�nu�
+ ((1));
+
+221 #ifde�
+__OPTIMIZE__
+
+
+222 
+__ex��_�ways_�l�e
+ *
+
+223 
+�rchr
+ (*
+__s
+, 
+__c
+�
+	g__THROW
+
+
+225  
+__bu�t�_�rchr
+ (
+__s
+, 
+__c
+);
+
+228 
+__ex��_�ways_�l�e
+ const *
+
+229 
+�rchr
+ (cڡ *
+__s
+, 
+__c
+�
+	g__THROW
+
+
+231  
+__bu�t�_�rchr
+ (
+__s
+, 
+__c
+);
+
+236 
*
+	$�rchr
+ (cڡ *
+__s
+, 
+__c
+)
+
+237 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+240 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+243 
*
+	`��chr
+ (*
+__s
+, 
+__c
+)
+
+244 
+__THROW
+ 
+	`__asm
+ ("��chr"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+245 
cڡ *
+	`��chr
+ (cڡ *
+__s
+, 
+__c
+)
+
+246 
+__THROW
+ 
+	`__asm
+ ("��chr"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+248 #ifde�
+__OPTIMIZE__
+
+
+249 
+__ex��_�ways_�l�e
+ *
+
+250 
+	`��chr
+ (*
+__s
+, 
+__c
+�
+__THROW
+
+
+252  
+	`__bu�t�_��chr
+ (
+__s
+, 
+__c
+);
+
+255 
+__ex��_�ways_�l�e
+ const *
+
+256 
+	`��chr
+ (cڡ *
+__s
+, 
+__c
+�
+__THROW
+
+
+258  
+	`__bu�t�_��chr
+ (
+__s
+, 
+__c
+);
+
+261 
+	}
+}
+
+263 
*
+	$��chr
+ (cڡ *
+__s
+, 
+__c
+)
+
+264 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+266 
+__END_NAMESPACE_STD
+
+
+268 #ifde�
+__USE_GNU
+
+
+271 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+272 
"C++" *
+	$�rch�ul
+ (*
+__s
+, 
+__c
+)
+
+273 
+__THROW
+ 
+	`__asm
+ ("�rch�ul"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+274 
"C++" cڡ *
+	$�rch�ul
+ (cڡ *
+__s
+, 
+__c
+)
+
+275 
+__THROW
+ 
+	`__asm
+ ("�rch�ul"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+277 
*
+	$�rch�ul
+ (cڡ *
+__s
+, 
+__c
+)
+
+278 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+282 
+__BEGIN_NAMESPACE_STD
+
+
+285 
+size_t
+ 
+	$�rc�n
+ (cڡ *
+__s
+, cڡ *
+__�je�
+)
+
+286 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+289 
+size_t
+ 
+	$�r�n
+ (cڡ *
+__s
+, cڡ *
+__ac��
+)
+
+290 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+292 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+295 
*
+	`��brk
+ (*
+__s
+, cڡ *
+__ac��
+)
+
+296 
+__THROW
+ 
+	`__asm
+ ("��brk"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+297 
cڡ *
+	`��brk
+ (cڡ *
+__s
+, cڡ *
+__ac��
+)
+
+298 
+__THROW
+ 
+	`__asm
+ ("��brk"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+300 #ifde�
+__OPTIMIZE__
+
+
+301 
+__ex��_�ways_�l�e
+ *
+
+302 
+	`��brk
+ (*
+__s
+, cڡ *
+__ac��
+�
+__THROW
+
+
+304  
+	`__bu�t�_��brk
+ (
+__s
+, 
+__ac��
+);
+
+307 
+__ex��_�ways_�l�e
+ const *
+
+308 
+	`��brk
+ (cڡ *
+__s
+, cڡ *
+__ac��
+�
+__THROW
+
+
+310  
+	`__bu�t�_��brk
+ (
+__s
+, 
+__ac��
+);
+
+313 
+	}
+}
+
+315 
*
+	$��brk
+ (cڡ *
+__s
+, cڡ *
+__ac��
+)
+
+316 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+319 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+322 
*
+	`�r�r
+ (*
+__hay�ack
+, cڡ *
+__�ed�
+)
+
+323 
+__THROW
+ 
+	`__asm
+ ("�r�r"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+324 
cڡ *
+	`�r�r
+ (cڡ *
+__hay�ack
+, cڡ *
+__�ed�
+)
+
+325 
+__THROW
+ 
+	`__asm
+ ("�r�r"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+327 #ifde�
+__OPTIMIZE__
+
+
+328 
+__ex��_�ways_�l�e
+ *
+
+329 
+	`�r�r
+ (*
+__hay�ack
+, cڡ *
+__�ed�
+�
+__THROW
+
+
+331  
+	`__bu�t�_�r�r
+ (
+__hay�ack
+, 
+__�ed�
+);
+
+334 
+__ex��_�ways_�l�e
+ const *
+
+335 
+	`�r�r
+ (cڡ *
+__hay�ack
+, cڡ *
+__�ed�
+�
+__THROW
+
+
+337  
+	`__bu�t�_�r�r
+ (
+__hay�ack
+, 
+__�ed�
+);
+
+340 
+	}
+}
+
+342 
*
+	$�r�r
+ (cڡ *
+__hay�ack
+, cڡ *
+__�ed�
+)
+
+343 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+348 
*
+	$��ok
+ (*
+__��ri�
+ 
+__s
+, cڡ *__��ri� 
+__d�im
+)
+
+349 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+350 
+__END_NAMESPACE_STD
+
+
+354 
*
+	$__��ok_r
+ (*
+__��ri�
+ 
+__s
+,
+
+355 cڡ *
+__��ri�
+ 
+__d�im
+,
+
+356 **
+__��ri�
+ 
+__�ve_�r
+)
+
+357 
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+358 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+359 
*
+	$��ok_r
+ (*
+__��ri�
+ 
+__s
+, cڡ *__��ri� 
+__d�im
+,
+
+360 **
+__��ri�
+ 
+__�ve_�r
+)
+
+361 
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+364 #ifde�
+__USE_GNU
+
+
+366 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+367 
"C++" *
+	$�r���r
+ (*
+__hay�ack
+, cڡ *
+__�ed�
+)
+
+368 
+__THROW
+ 
+	`__asm
+ ("�r���r"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+369 
"C++" cڡ *
+	$�r���r
+ (cڡ *
+__hay�ack
+,
+
+370 cڡ *
+__�ed�
+)
+
+371 
+__THROW
+ 
+	`__asm
+ ("�r���r"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+373 
*
+	$�r���r
+ (cڡ *
+__hay�ack
+, cڡ *
+__�ed�
+)
+
+374 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+378 #ifde�
+__USE_GNU
+
+
+382 
*
+	$memmem
+ (cڡ *
+__hay�ack
+, 
+size_t
+ 
+__hay�ack�n
+,
+
+383 cڡ *
+__�ed�
+, 
+size_t
+ 
+__�ed��n
+)
+
+384 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 3));
+
+388 
*
+	$__memp�y
+ (*
+__��ri�
+ 
+__de�
+,
+
+389 cڡ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+390 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+391 
*
+	$memp�y
+ (*
+__��ri�
+ 
+__de�
+,
+
+392 cڡ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+393 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+397 
+__BEGIN_NAMESPACE_STD
+
+
+399 
+size_t
+ 
+	$���
+ (cڡ *
+__s
+)
+
+400 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+401 
+__END_NAMESPACE_STD
+
+
+403 #ifdef 
+__USE_XOPEN2K8
+
+
+406 
+size_t
+ 
+	$���n
+ (cڡ *
+__�r�g
+, 
+size_t
+ 
+__max�n
+)
+
+407 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+411 
+__BEGIN_NAMESPACE_STD
+
+
+413 
*
+	$����
+ (
+__��um
+�
+__THROW
+;
+
+414 
+__END_NAMESPACE_STD
+
+
+415 #i�
+def�ed
+ 
+__USE_XOPEN2K
+ || def�ed 
+__USE_MISC
+
+
+423 #i�
+def�ed
+ 
+__USE_XOPEN2K
+ && !def�ed 
+__USE_GNU
+
+
+426 #ifde�
+__REDIRECT_NTH
+
+
+427 

+	`__REDIRECT_NTH
+ (
+����_r
+,
+
+428 (
+__��um
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+),
+
+429 
+__xpg_����_r
+�
+	`__n�nu�
+ ((2));
+
+431 

+	$__xpg_����_r
+ (
+__��um
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+)
+
+432 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+433 
+	#����_r
+ 
+__xpg_����_r
+
+
+	)
+
+438 
*
+	$����_r
+ (
+__��um
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+)
+
+439 
+__THROW
+ 
+	`__n�nu�
+ ((2)�
+__wur
+;
+
+443 #ifde�
+__USE_XOPEN2K8
+
+
+445 
*
+	$����_l
+ (
+__��um
+, 
+__lo��_t
+ 
+__l
+�
+__THROW
+;
+
+451 

+	$__bz�o
+ (*
+__s
+, 
+size_t
+ 
+__n
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+453 #ifde�
+__USE_BSD
+
+
+455 

+	$bc�y
+ (cڡ *
+__�c
+, *
+__de�
+, 
+size_t
+ 
+__n
+)
+
+456 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+459 

+	$bz�o
+ (*
+__s
+, 
+size_t
+ 
+__n
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+462 

+	$bcmp
+ (cڡ *
+__s1
+, cڡ *
+__s2
+, 
+size_t
+ 
+__n
+)
+
+463 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+466 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+469 
*
+	`�dex
+ (*
+__s
+, 
+__c
+)
+
+470 
+__THROW
+ 
+	`__asm
+ ("�dex"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+471 
cڡ *
+	`�dex
+ (cڡ *
+__s
+, 
+__c
+)
+
+472 
+__THROW
+ 
+	`__asm
+ ("�dex"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+474 #i�
+def�ed
+ 
+__OPTIMIZE__
+ && !def�ed 
+__CORRECT_ISO_CPP_STRINGS_H_PROTO
+
+
+475 
+__ex��_�ways_�l�e
+ *
+
+476 
+	`�dex
+ (*
+__s
+, 
+__c
+�
+__THROW
+
+
+478  
+	`__bu�t�_�dex
+ (
+__s
+, 
+__c
+);
+
+481 
+__ex��_�ways_�l�e
+ const *
+
+482 
+	`�dex
+ (cڡ *
+__s
+, 
+__c
+�
+__THROW
+
+
+484  
+	`__bu�t�_�dex
+ (
+__s
+, 
+__c
+);
+
+487 
+	}
+}
+
+489 
*
+	$�dex
+ (cڡ *
+__s
+, 
+__c
+)
+
+490 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+494 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+497 
*
+	`r�dex
+ (*
+__s
+, 
+__c
+)
+
+498 
+__THROW
+ 
+	`__asm
+ ("r�dex"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+499 
cڡ *
+	`r�dex
+ (cڡ *
+__s
+, 
+__c
+)
+
+500 
+__THROW
+ 
+	`__asm
+ ("r�dex"�
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+502 #i�
+def�ed
+ 
+__OPTIMIZE__
+ && !def�ed 
+__CORRECT_ISO_CPP_STRINGS_H_PROTO
+
+
+503 
+__ex��_�ways_�l�e
+ *
+
+504 
+	`r�dex
+ (*
+__s
+, 
+__c
+�
+__THROW
+
+
+506  
+	`__bu�t�_r�dex
+ (
+__s
+, 
+__c
+);
+
+509 
+__ex��_�ways_�l�e
+ const *
+
+510 
+	`r�dex
+ (cڡ *
+__s
+, 
+__c
+�
+__THROW
+
+
+512  
+	`__bu�t�_r�dex
+ (
+__s
+, 
+__c
+);
+
+515 
+	}
+}
+
+517 
*
+	$r�dex
+ (cڡ *
+__s
+, 
+__c
+)
+
+518 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1));
+
+523 

+	$ffs
+ (
+__i
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+527 #ifdef 
+__USE_GNU
+
+
+528 

+	$ff�
+ (
+__l
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+529 
+__ex�nsi�__
+ 

+	$ff�l
+ (
+__�
+)
+
+530 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+534 

+	$�r��cmp
+ (cڡ *
+__s1
+, cڡ *
+__s2
+)
+
+535 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+538 

+	$����cmp
+ (cڡ *
+__s1
+, cڡ *
+__s2
+, 
+size_t
+ 
+__n
+)
+
+539 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+542 #ifdef 
+__USE_GNU
+
+
+545 

+	$�r��cmp_l
+ (cڡ *
+__s1
+, cڡ *
+__s2
+,
+
+546 
+__lo��_t
+ 
+__loc
+)
+
+547 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2, 3));
+
+549 

+	$����cmp_l
+ (cڡ *
+__s1
+, cڡ *
+__s2
+,
+
+550 
+size_t
+ 
+__n
+, 
+__lo��_t
+ 
+__loc
+)
+
+551 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2, 4));
+
+554 #ifdef 
+__USE_BSD
+
+
+557 
*
+	$�r�p
+ (**
+__��ri�
+ 
+__�r�gp
+,
+
+558 cڡ *
+__��ri�
+ 
+__d�im
+)
+
+559 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+562 #ifdef 
+__USE_XOPEN2K8
+
+
+564 
*
+	$�rsig�l
+ (
+__sig
+�
+__THROW
+;
+
+567 
*
+	$__�p�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+)
+
+568 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+569 
*
+	$�p�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+)
+
+570 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+574 
*
+	$__���y
+ (*
+__��ri�
+ 
+__de�
+,
+
+575 cڡ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+576 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+577 
*
+	$���y
+ (*
+__��ri�
+ 
+__de�
+,
+
+578 cڡ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+579 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+582 #ifdef 
+__USE_GNU
+
+
+584 

+	$�rv�scmp
+ (cڡ *
+__s1
+, cڡ *
+__s2
+)
+
+585 
+__THROW
+ 
+__��ibu�_pu�__
+ 
+	`__n�nu�
+ ((1, 2));
+
+588 
*
+	$�r�y
+ (*
+__�r�g
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+591 
*
+	$mem�ob
+ (*
+__s
+, 
+size_t
+ 
+__n
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+593 #i�de�
+ba��me
+
+
+598 #ifde�
+__CORRECT_ISO_CPP_STRING_H_PROTO
+
+
+599 
"C++" *
+	$ba��me
+ (*
+__f��ame
+)
+
+600 
+__THROW
+ 
+	`__asm
+ ("ba��me"�
+	`__n�nu�
+ ((1));
+
+601 
"C++" cڡ *
+	$ba��me
+ (cڡ *
+__f��ame
+)
+
+602 
+__THROW
+ 
+	`__asm
+ ("ba��me"�
+	`__n�nu�
+ ((1));
+
+604 
*
+	$ba��me
+ (cڡ *
+__f��ame
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+610 #i�
+def�ed
+ 
+__GNUC__
+ && __GNUC__ >= 2
+
+611 #i�
+def�ed
+ 
+__OPTIMIZE__
+ && !def�ed 
+__OPTIMIZE_SIZE__
+ \
+
+612 && !
+def�ed
+ 
+__NO_INLINE__
+ && !def�ed 
+__�lu�lus
+
+
+632 
+	~<b�s/�r�g.h
+>
+
+635 
+	~<b�s/�r�g2.h
+>
+
+638 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+
+
+640 
+	~<b�s/�r�g3.h
+>
+
+644 
+__END_DECLS
+
+
+	@/usr/include/sys/epoll.h
+
+18 #i�def 
+_SYS_EPOLL_H
+
+
+19 
+	#_SYS_EPOLL_H
+ 1
+
+	)
+
+21 
+	~<�d�t.h
+>
+
+22 
+	~<sys/ty�s.h
+>
+
+25 
+	~<b�s/sig�t.h
+>
+
+27 #i�de�
+__sig�t_t_def�ed
+
+
+28 
+	#__sig�t_t_def�ed
+
+
+	)
+
+29 
+__sig�t_t
+ 
+	tsig�t_t
+;
+
+33 
+	~<b�s/��l.h
+>
+
+35 #i�de�
+__EPOLL_PACKED
+
+
+36 
+	#__EPOLL_PACKED
+
+
+	)
+
+40 
+	eEPOLL_EVENTS
+
+
+42 
+	mEPOLLIN
+ = 0x001,
+
+43 
+	#EPOLLIN
+ 
+EPOLLIN
+
+
+	)
+
+44 
+	mEPOLLPRI
+ = 0x002,
+
+45 
+	#EPOLLPRI
+ 
+EPOLLPRI
+
+
+	)
+
+46 
+	mEPOLLOUT
+ = 0x004,
+
+47 
+	#EPOLLOUT
+ 
+EPOLLOUT
+
+
+	)
+
+48 
+	mEPOLLRDNORM
+ = 0x040,
+
+49 
+	#EPOLLRDNORM
+ 
+EPOLLRDNORM
+
+
+	)
+
+50 
+	mEPOLLRDBAND
+ = 0x080,
+
+51 
+	#EPOLLRDBAND
+ 
+EPOLLRDBAND
+
+
+	)
+
+52 
+	mEPOLLWRNORM
+ = 0x100,
+
+53 
+	#EPOLLWRNORM
+ 
+EPOLLWRNORM
+
+
+	)
+
+54 
+	mEPOLLWRBAND
+ = 0x200,
+
+55 
+	#EPOLLWRBAND
+ 
+EPOLLWRBAND
+
+
+	)
+
+56 
+	mEPOLLMSG
+ = 0x400,
+
+57 
+	#EPOLLMSG
+ 
+EPOLLMSG
+
+
+	)
+
+58 
+	mEPOLLERR
+ = 0x008,
+
+59 
+	#EPOLLERR
+ 
+EPOLLERR
+
+
+	)
+
+60 
+	mEPOLLHUP
+ = 0x010,
+
+61 
+	#EPOLLHUP
+ 
+EPOLLHUP
+
+
+	)
+
+62 
+	mEPOLLRDHUP
+ = 0x2000,
+
+63 
+	#EPOLLRDHUP
+ 
+EPOLLRDHUP
+
+
+	)
+
+64 
+	mEPOLLWAKEUP
+ = 1u << 29,
+
+65 
+	#EPOLLWAKEUP
+ 
+EPOLLWAKEUP
+
+
+	)
+
+66 
+	mEPOLLONESHOT
+ = 1u << 30,
+
+67 
+	#EPOLLONESHOT
+ 
+EPOLLONESHOT
+
+
+	)
+
+68 
+	mEPOLLET
+ = 1u << 31
+
+69 
+	#EPOLLET
+ 
+EPOLLET
+
+
+	)
+
+74 
+	#EPOLL_CTL_ADD
+ 1
+
+	)
+
+75 
+	#EPOLL_CTL_DEL
+ 2
+
+	)
+
+76 
+	#EPOLL_CTL_MOD
+ 3
+
+	)
+
+79 
+	u��l_d�a
+
+
+81 *
+	m�r
+;
+
+82 
+	mfd
+;
+
+83 
+u�t32_t
+ 
+	mu32
+;
+
+84 
+u�t64_t
+ 
+	mu64
+;
+
+85 } 
+	t��l_d�a_t
+;
+
+87 
+	s��l_ev�t
+
+
+89 
+u�t32_t
+ 
+	mev�ts
+;
+
+90 
+��l_d�a_t
+ 
+	md�a
+;
+
+91 } 
+	g__EPOLL_PACKED
+;
+
+94 
+__BEGIN_DECLS
+
+
+100 

+	$��l_���
+ (
+__size
+�
+__THROW
+;
+
+104 

+	$��l_���1
+ (
+__�ags
+�
+__THROW
+;
+
+113 

+	$��l_�l
+ (
+__�fd
+, 
+__�
+, 
+__fd
+,
+
+114 
+��l_ev�t
+ *
+__ev�t
+�
+__THROW
+;
+
+127 

+	`��l_wa�
+ (
+__�fd
+, 
+��l_ev�t
+ *
+__ev�ts
+,
+
+128 
+__maxev�ts
+, 
+__timeout
+);
+
+136 

+	`��l_pwa�
+ (
+__�fd
+, 
+��l_ev�t
+ *
+__ev�ts
+,
+
+137 
+__maxev�ts
+, 
+__timeout
+,
+
+138 cڡ 
+__sig�t_t
+ *
+__ss
+);
+
+140 
+__END_DECLS
+
+
+	@/usr/include/sys/ioctl.h
+
+18 #i�def 
+_SYS_IOCTL_H
+
+
+19 
+	#_SYS_IOCTL_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+23 
+	g__BEGIN_DECLS
+
+
+26 
+	~<b�s/io�ls.h
+>
+
+29 
+	~<b�s/io�l-ty�s.h
+>
+
+36 
+	~<sys/�yde�u�s.h
+>
+
+41 

+	$io�l
+ (
+__fd
+, 
+__�que�
+, ...�
+__THROW
+;
+
+43 
+__END_DECLS
+
+
+	@/usr/include/sys/resource.h
+
+18 #i�def 
+_SYS_RESOURCE_H
+
+
+19 
+	#_SYS_RESOURCE_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+24 
+	~<b�s/�sour�.h
+>
+
+26 #i�de�
+__id_t_def�ed
+
+
+27 
+__id_t
+ 
+	tid_t
+;
+
+28 
+	#__id_t_def�ed
+
+
+	)
+
+31 
+	g__BEGIN_DECLS
+
+
+37 #i�
+def�ed
+ 
+__USE_GNU
+ && !def�ed 
+__�lu�lus
+
+
+38 
+__�im�_�sour�
+ 
+	t__�im�_�sour�_t
+;
+
+39 
+__ru�ge_who
+ 
+	t__ru�ge_who_t
+;
+
+40 
+__�iܙy_which
+ 
+	t__�iܙy_which_t
+;
+
+42 
+	t__�im�_�sour�_t
+;
+
+43 
+	t__ru�ge_who_t
+;
+
+44 
+	t__�iܙy_which_t
+;
+
+49 #i�de�
+__USE_FILE_OFFSET64
+
+
+50 

+	$g��im�
+ (
+__�im�_�sour�_t
+ 
+__�sour�
+,
+
+51 
+�im�
+ *
+__�im�s
+�
+__THROW
+;
+
+53 #ifde�
+__REDIRECT_NTH
+
+
+54 

+	`__REDIRECT_NTH
+ (
+g��im�
+, (
+__�im�_�sour�_t
+ 
+__�sour�
+,
+
+55 
+�im�
+ *
+__�im�s
+), 
+g��im�64
+);
+
+57 
+	#g��im�
+ 
+g��im�64
+
+
+	)
+
+60 #ifde�
+__USE_LARGEFILE64
+
+
+61 

+	$g��im�64
+ (
+__�im�_�sour�_t
+ 
+__�sour�
+,
+
+62 
+�im�64
+ *
+__�im�s
+�
+__THROW
+;
+
+68 #i�de�
+__USE_FILE_OFFSET64
+
+
+69 

+	$��lim�
+ (
+__�im�_�sour�_t
+ 
+__�sour�
+,
+
+70 cڡ 
+�im�
+ *
+__�im�s
+�
+__THROW
+;
+
+72 #ifde�
+__REDIRECT_NTH
+
+
+73 

+	`__REDIRECT_NTH
+ (
+��lim�
+, (
+__�im�_�sour�_t
+ 
+__�sour�
+,
+
+74 cڡ 
+�im�
+ *
+__�im�s
+),
+
+75 
+��lim�64
+);
+
+77 
+	#��lim�
+ 
+��lim�64
+
+
+	)
+
+80 #ifde�
+__USE_LARGEFILE64
+
+
+81 

+	$��lim�64
+ (
+__�im�_�sour�_t
+ 
+__�sour�
+,
+
+82 cڡ 
+�im�64
+ *
+__�im�s
+�
+__THROW
+;
+
+87 

+	$g�ru�ge
+ (
+__ru�ge_who_t
+ 
+__who
+, 
+ru�ge
+ *
+__u�ge
+�
+__THROW
+;
+
+93 

+	$g��iܙy
+ (
+__�iܙy_which_t
+ 
+__which
+, 
+id_t
+ 
+__who
+�
+__THROW
+;
+
+97 

+	$��riܙy
+ (
+__�iܙy_which_t
+ 
+__which
+, 
+id_t
+ 
+__who
+, 
+__�io
+)
+
+98 
+__THROW
+;
+
+100 
+__END_DECLS
+
+
+	@/usr/include/sys/select.h
+
+21 #i�de�
+_SYS_SELECT_H
+
+
+22 
+	#_SYS_SELECT_H
+ 1
+
+	)
+
+24 
+	~<�u�s.h
+>
+
+27 
+	~<b�s/ty�s.h
+>
+
+30 
+	~<b�s/���.h
+>
+
+33 
+	~<b�s/sig�t.h
+>
+
+35 #i�de�
+__sig�t_t_def�ed
+
+
+36 
+	#__sig�t_t_def�ed
+
+
+	)
+
+37 
+__sig�t_t
+ 
+	tsig�t_t
+;
+
+41 
+	#__�ed_time_t
+
+
+	)
+
+42 
+	#__�ed_time�ec
+
+
+	)
+
+43 
+	~<time.h
+>
+
+44 
+	#__�ed_timev�
+
+
+	)
+
+45 
+	~<b�s/time.h
+>
+
+47 #i�de�
+__su�c�ds_t_def�ed
+
+
+48 
+__su�c�ds_t
+ 
+	tsu�c�ds_t
+;
+
+49 
+	#__su�c�ds_t_def�ed
+
+
+	)
+
+54 
+	t__fd_mask
+;
+
+57 #unde�
+__NFDBITS
+
+
+59 
+	#__NFDBITS
+ (8 * (� (
+__fd_mask
+))
+
+	)
+
+60 
+	#__FD_ELT
+(
+d
+�((d�/ 
+__NFDBITS
+)
+
+	)
+
+61 
+	#__FD_MASK
+(
+d
+�((
+__fd_mask
+�1 << ((d�% 
+__NFDBITS
+))
+
+	)
+
+68 #ifde�
+__USE_XOPEN
+
+
+69 
+__fd_mask
+ 
+	mfds_b�s
+[
+__FD_SETSIZE
+ / 
+__NFDBITS
+];
+
+70 
+	#__FDS_BITS
+(
+�t
+�((�t)->
+fds_b�s
+)
+
+	)
+
+72 
+__fd_mask
+ 
+	m__fds_b�s
+[
+__FD_SETSIZE
+ / 
+__NFDBITS
+];
+
+73 
+	#__FDS_BITS
+(
+�t
+�((�t)->
+__fds_b�s
+)
+
+	)
+
+75 } 
+	tfd_�t
+;
+
+78 
+	#FD_SETSIZE
+ 
+__FD_SETSIZE
+
+
+	)
+
+80 #ifde�
+__USE_MISC
+
+
+82 
+__fd_mask
+ 
+	tfd_mask
+;
+
+85 
+	#NFDBITS
+ 
+__NFDBITS
+
+
+	)
+
+90 
+	#FD_SET
+(
+fd
+, 
+fd��
+�
+	`__FD_SET
+ (fd, fd��)
+
+	)
+
+91 
+	#FD_CLR
+(
+fd
+, 
+fd��
+�
+	`__FD_CLR
+ (fd, fd��)
+
+	)
+
+92 
+	#FD_ISSET
+(
+fd
+, 
+fd��
+�
+	`__FD_ISSET
+ (fd, fd��)
+
+	)
+
+93 
+	#FD_ZERO
+(
+fd��
+�
+	`__FD_ZERO
+ (fd��)
+
+	)
+
+96 
+__BEGIN_DECLS
+
+
+106 

+���
+ (
+__nfds
+, 
+fd_�t
+ *
+__��ri�
+ 
+__�adfds
+,
+
+107 
+fd_�t
+ *
+__��ri�
+ 
+__wr�efds
+,
+
+108 
+fd_�t
+ *
+__��ri�
+ 
+__ex��fds
+,
+
+109 
+timev�
+ *
+__��ri�
+ 
+__timeout
+);
+
+111 #ifde�
+__USE_XOPEN2K
+
+
+118 

+p���
+ (
+__nfds
+, 
+fd_�t
+ *
+__��ri�
+ 
+__�adfds
+,
+
+119 
+fd_�t
+ *
+__��ri�
+ 
+__wr�efds
+,
+
+120 
+fd_�t
+ *
+__��ri�
+ 
+__ex��fds
+,
+
+121 cڡ 
+time�ec
+ *
+__��ri�
+ 
+__timeout
+,
+
+122 cڡ 
+__sig�t_t
+ *
+__��ri�
+ 
+__sigmask
+);
+
+127 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__GNUC__
+
+
+128 
+	~<b�s/���2.h
+>
+
+131 
+	g__END_DECLS
+
+
+	@/usr/include/sys/socket.h
+
+19 #i�def 
+_SYS_SOCKET_H
+
+
+20 
+	#_SYS_SOCKET_H
+ 1
+
+	)
+
+22 
+	~<�u�s.h
+>
+
+24 
+	g__BEGIN_DECLS
+
+
+26 
+	~<sys/uio.h
+>
+
+27 
+	#__�ed_size_t
+
+
+	)
+
+28 
+	~<�ddef.h
+>
+
+29 #ifde�
+__USE_GNU
+
+
+31 
+	~<b�s/sig�t.h
+>
+
+38 
+	~<b�s/sock�.h
+>
+
+40 #ifde�
+__USE_BSD
+
+
+43 
+	sosockaddr
+
+
+45 
+	m�_�m�y
+;
+
+46 
+	m�_d�a
+[14];
+
+54 
+	mSHUT_RD
+ = 0,
+
+55 
+	#SHUT_RD
+ 
+SHUT_RD
+
+
+	)
+
+56 
+	mSHUT_WR
+,
+
+57 
+	#SHUT_WR
+ 
+SHUT_WR
+
+
+	)
+
+58 
+	mSHUT_RDWR
+
+
+59 
+	#SHUT_RDWR
+ 
+SHUT_RDWR
+
+
+	)
+
+68 #i�
+def�ed
+ 
+__�lu�lus
+ || !
+__GNUC_PREREQ
+ (2, 7�|| !def�ed 
+__USE_GNU
+
+
+69 
+	#__SOCKADDR_ARG
+ 
+sockaddr
+ *
+__��ri�
+
+
+	)
+
+70 
+	#__CONST_SOCKADDR_ARG
+ cڡ 
+sockaddr
+ *
+
+	)
+
+74 
+	#__SOCKADDR_ALLTYPES
+ \
+
+75 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr
+) \
+
+76 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_�
+) \
+
+77 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_ax25
+) \
+
+78 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_dl
+) \
+
+79 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_e�
+) \
+
+80 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_�
+) \
+
+81 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_�6
+) \
+
+82 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_��p
+) \
+
+83 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_�x
+) \
+
+84 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_iso
+) \
+
+85 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_ns
+) \
+
+86 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_un
+) \
+
+87 
+	`__SOCKADDR_ONETYPE
+ (
+sockaddr_x25
+)
+
+	)
+
+89 
+	#__SOCKADDR_ONETYPE
+(
+ty�
+�ty� *
+__��ri�
+ 
+__
+##ty�##__;
+
+	)
+
+90 uni� { 
+	m__SOCKADDR_ALLTYPES
+
+
+91 } 
+	t__SOCKADDR_ARG
+ 
+	t__��ibu�__
+ ((
+	t__�����t_uni�__
+));
+
+92 #unde�
+__SOCKADDR_ONETYPE
+
+
+93 
+	#__SOCKADDR_ONETYPE
+(
+ty�
+�cڡ ty� *
+__��ri�
+ 
+__
+##ty�##__;
+
+	)
+
+94 uni� { 
+	m__SOCKADDR_ALLTYPES
+
+
+95 } 
+	t__CONST_SOCKADDR_ARG
+ 
+	t__��ibu�__
+ ((
+	t__�����t_uni�__
+));
+
+96 #unde�
+__SOCKADDR_ONETYPE
+
+
+99 #ifde�
+__USE_GNU
+
+
+101 
+	smmsghdr
+
+
+103 
+msghdr
+ 
+	mmsg_hdr
+;
+
+104 
+	mmsg_�n
+;
+
+113 

+	$sock�
+ (
+__doma�
+, 
+__ty�
+, 
+__��oc�
+�
+__THROW
+;
+
+119 

+	$sock���
+ (
+__doma�
+, 
+__ty�
+, 
+__��oc�
+,
+
+120 
+__fds
+[2]�
+__THROW
+;
+
+123 

+	$b�d
+ (
+__fd
+, 
+__CONST_SOCKADDR_ARG
+ 
+__addr
+, 
+sock�n_t
+ 
+__�n
+)
+
+124 
+__THROW
+;
+
+127 

+	$g�sock�me
+ (
+__fd
+, 
+__SOCKADDR_ARG
+ 
+__addr
+,
+
+128 
+sock�n_t
+ *
+__��ri�
+ 
+__�n
+�
+__THROW
+;
+
+137 

+	`c���
+ (
+__fd
+, 
+__CONST_SOCKADDR_ARG
+ 
+__addr
+, 
+sock�n_t
+ 
+__�n
+);
+
+141 

+	$g����me
+ (
+__fd
+, 
+__SOCKADDR_ARG
+ 
+__addr
+,
+
+142 
+sock�n_t
+ *
+__��ri�
+ 
+__�n
+�
+__THROW
+;
+
+149 
+ssize_t
+ 
+	`�nd
+ (
+__fd
+, cڡ *
+__buf
+, 
+size_t
+ 
+__n
+, 
+__�ags
+);
+
+156 
+ssize_t
+ 
+	`�cv
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__n
+, 
+__�ags
+);
+
+163 
+ssize_t
+ 
+	`�ndto
+ (
+__fd
+, cڡ *
+__buf
+, 
+size_t
+ 
+__n
+,
+
+164 
+__�ags
+, 
+__CONST_SOCKADDR_ARG
+ 
+__addr
+,
+
+165 
+sock�n_t
+ 
+__addr_�n
+);
+
+174 
+ssize_t
+ 
+	`�cv�om
+ (
+__fd
+, *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__n
+,
+
+175 
+__�ags
+, 
+__SOCKADDR_ARG
+ 
+__addr
+,
+
+176 
+sock�n_t
+ *
+__��ri�
+ 
+__addr_�n
+);
+
+184 
+ssize_t
+ 
+	`�ndmsg
+ (
+__fd
+, cڡ 
+msghdr
+ *
+__mes�ge
+,
+
+185 
+__�ags
+);
+
+187 #ifde�
+__USE_GNU
+
+
+193 

+	`�ndmmsg
+ (
+__fd
+, 
+mmsghdr
+ *
+__vmes�ges
+,
+
+194 
+__v�n
+, 
+__�ags
+);
+
+202 
+ssize_t
+ 
+	`�cvmsg
+ (
+__fd
+, 
+msghdr
+ *
+__mes�ge
+, 
+__�ags
+);
+
+204 #ifde�
+__USE_GNU
+
+
+210 

+	`�cvmmsg
+ (
+__fd
+, 
+mmsghdr
+ *
+__vmes�ges
+,
+
+211 
+__v�n
+, 
+__�ags
+,
+
+212 cڡ 
+time�ec
+ *
+__tmo
+);
+
+219 

+	$g�sock�t
+ (
+__fd
+, 
+__�v�
+, 
+__݊ame
+,
+
+220 *
+__��ri�
+ 
+__�tv�
+,
+
+221 
+sock�n_t
+ *
+__��ri�
+ 
+__ݎ�
+�
+__THROW
+;
+
+226 

+	$�tsock�t
+ (
+__fd
+, 
+__�v�
+, 
+__݊ame
+,
+
+227 cڡ *
+__�tv�
+, 
+sock�n_t
+ 
+__ݎ�
+�
+__THROW
+;
+
+233 

+	$li��
+ (
+__fd
+, 
+__n
+�
+__THROW
+;
+
+243 

+	`ac��
+ (
+__fd
+, 
+__SOCKADDR_ARG
+ 
+__addr
+,
+
+244 
+sock�n_t
+ *
+__��ri�
+ 
+__addr_�n
+);
+
+246 #ifde�
+__USE_GNU
+
+
+251 

+	`ac��4
+ (
+__fd
+, 
+__SOCKADDR_ARG
+ 
+__addr
+,
+
+252 
+sock�n_t
+ *
+__��ri�
+ 
+__addr_�n
+, 
+__�ags
+);
+
+261 

+	$shutdown
+ (
+__fd
+, 
+__how
+�
+__THROW
+;
+
+264 #ifde�
+__USE_XOPEN2K
+
+
+266 

+	$sock�m�k
+ (
+__fd
+�
+__THROW
+;
+
+270 #ifde�
+__USE_MISC
+
+
+274 

+	$isfdty�
+ (
+__fd
+, 
+__fdty�
+�
+__THROW
+;
+
+279 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+
+
+280 
+	~<b�s/sock�2.h
+>
+
+283 
+__END_DECLS
+
+
+	@/usr/include/sys/stat.h
+
+22 #i�def 
+_SYS_STAT_H
+
+
+23 
+	#_SYS_STAT_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+27 
+	~<b�s/ty�s.h
+>
+
+29 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K
+ || def�ed 
+__USE_MISC
+ \
+
+30 || 
+def�ed
+ 
+	g__USE_ATFILE
+
+
+31 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K
+
+
+32 
+	#__�ed_time_t
+
+
+	)
+
+34 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_ATFILE
+
+
+35 
+	#__�ed_time�ec
+
+
+	)
+
+37 
+	~<time.h
+>
+
+40 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K
+
+
+43 #i�de�
+__dev_t_def�ed
+
+
+44 
+__dev_t
+ 
+	tdev_t
+;
+
+45 
+	#__dev_t_def�ed
+
+
+	)
+
+48 #i�de�
+__gid_t_def�ed
+
+
+49 
+__gid_t
+ 
+	tgid_t
+;
+
+50 
+	#__gid_t_def�ed
+
+
+	)
+
+53 #i�de�
+__�o_t_def�ed
+
+
+54 #i�de�
+__USE_FILE_OFFSET64
+
+
+55 
+__�o_t
+ 
+	t�o_t
+;
+
+57 
+__�o64_t
+ 
+	t�o_t
+;
+
+59 
+	#__�o_t_def�ed
+
+
+	)
+
+62 #i�de�
+__mode_t_def�ed
+
+
+63 
+__mode_t
+ 
+	tmode_t
+;
+
+64 
+	#__mode_t_def�ed
+
+
+	)
+
+67 #i�de�
+__ƚk_t_def�ed
+
+
+68 
+__ƚk_t
+ 
+	tƚk_t
+;
+
+69 
+	#__ƚk_t_def�ed
+
+
+	)
+
+72 #i�de�
+__off_t_def�ed
+
+
+73 #i�de�
+__USE_FILE_OFFSET64
+
+
+74 
+__off_t
+ 
+	toff_t
+;
+
+76 
+__off64_t
+ 
+	toff_t
+;
+
+78 
+	#__off_t_def�ed
+
+
+	)
+
+81 #i�de�
+__uid_t_def�ed
+
+
+82 
+__uid_t
+ 
+	tuid_t
+;
+
+83 
+	#__uid_t_def�ed
+
+
+	)
+
+87 #ifde�
+__USE_UNIX98
+
+
+88 #i�de�
+__blk�t_t_def�ed
+
+
+89 #i�de�
+__USE_FILE_OFFSET64
+
+
+90 
+__blk�t_t
+ 
+	tblk�t_t
+;
+
+92 
+__blk�t64_t
+ 
+	tblk�t_t
+;
+
+94 
+	#__blk�t_t_def�ed
+
+
+	)
+
+97 #i�de�
+__blksize_t_def�ed
+
+
+98 
+__blksize_t
+ 
+	tblksize_t
+;
+
+99 
+	#__blksize_t_def�ed
+
+
+	)
+
+103 
+	g__BEGIN_DECLS
+
+
+105 
+	~<b�s/��.h
+>
+
+107 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN
+
+
+108 
+	#S_IFMT
+ 
+__S_IFMT
+
+
+	)
+
+109 
+	#S_IFDIR
+ 
+__S_IFDIR
+
+
+	)
+
+110 
+	#S_IFCHR
+ 
+__S_IFCHR
+
+
+	)
+
+111 
+	#S_IFBLK
+ 
+__S_IFBLK
+
+
+	)
+
+112 
+	#S_IFREG
+ 
+__S_IFREG
+
+
+	)
+
+113 #ifde�
+__S_IFIFO
+
+
+114 
+	#S_IFIFO
+ 
+__S_IFIFO
+
+
+	)
+
+116 #ifde�
+__S_IFLNK
+
+
+117 
+	#S_IFLNK
+ 
+__S_IFLNK
+
+
+	)
+
+119 #i�(
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_MISC
+ || def�ed 
+__USE_UNIX98
+) \
+
+120 && 
+def�ed
+ 
+	g__S_IFSOCK
+
+
+121 
+	#S_IFSOCK
+ 
+__S_IFSOCK
+
+
+	)
+
+127 
+	#__S_ISTYPE
+(
+mode
+, 
+mask
+�(((mode�& 
+__S_IFMT
+�=�(mask))
+
+	)
+
+129 
+	#S_ISDIR
+(
+mode
+�
+	`__S_ISTYPE
+((mode), 
+__S_IFDIR
+)
+
+	)
+
+130 
+	#S_ISCHR
+(
+mode
+�
+	`__S_ISTYPE
+((mode), 
+__S_IFCHR
+)
+
+	)
+
+131 
+	#S_ISBLK
+(
+mode
+�
+	`__S_ISTYPE
+((mode), 
+__S_IFBLK
+)
+
+	)
+
+132 
+	#S_ISREG
+(
+mode
+�
+	`__S_ISTYPE
+((mode), 
+__S_IFREG
+)
+
+	)
+
+133 #ifde�
+__S_IFIFO
+
+
+134 
+	#S_ISFIFO
+(
+mode
+�
+	`__S_ISTYPE
+((mode), 
+__S_IFIFO
+)
+
+	)
+
+136 #ifde�
+__S_IFLNK
+
+
+137 
+	#S_ISLNK
+(
+mode
+�
+	`__S_ISTYPE
+((mode), 
+__S_IFLNK
+)
+
+	)
+
+140 #i�
+def�ed
+ 
+__USE_BSD
+ && !def�ed 
+__S_IFLNK
+
+
+141 
+	#S_ISLNK
+(
+mode
+�0
+
+	)
+
+144 #i�(
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K
+) \
+
+145 && 
+def�ed
+ 
+	g__S_IFSOCK
+
+
+146 
+	#S_ISSOCK
+(
+mode
+�
+	`__S_ISTYPE
+((mode), 
+__S_IFSOCK
+)
+
+	)
+
+147 #�i�
+def�ed
+ 
+__USE_XOPEN2K
+
+
+148 
+	#S_ISSOCK
+(
+mode
+�0
+
+	)
+
+155 #ifdef 
+__USE_POSIX199309
+
+
+156 
+	#S_TYPEISMQ
+(
+buf
+�
+	`__S_TYPEISMQ
+(buf)
+
+	)
+
+157 
+	#S_TYPEISSEM
+(
+buf
+�
+	`__S_TYPEISSEM
+(buf)
+
+	)
+
+158 
+	#S_TYPEISSHM
+(
+buf
+�
+	`__S_TYPEISSHM
+(buf)
+
+	)
+
+164 
+	#S_ISUID
+ 
+__S_ISUID
+
+
+	)
+
+165 
+	#S_ISGID
+ 
+__S_ISGID
+
+
+	)
+
+167 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN
+
+
+169 
+	#S_ISVTX
+ 
+__S_ISVTX
+
+
+	)
+
+172 
+	#S_IRUSR
+ 
+__S_IREAD
+
+
+	)
+
+173 
+	#S_IWUSR
+ 
+__S_IWRITE
+
+
+	)
+
+174 
+	#S_IXUSR
+ 
+__S_IEXEC
+
+
+	)
+
+176 
+	#S_IRWXU
+ (
+__S_IREAD
+|
+__S_IWRITE
+|
+__S_IEXEC
+)
+
+	)
+
+178 #i�
+def�ed
+ 
+__USE_MISC
+ && def�ed 
+__USE_BSD
+
+
+179 
+	#S_IREAD
+ 
+S_IRUSR
+
+
+	)
+
+180 
+	#S_IWRITE
+ 
+S_IWUSR
+
+
+	)
+
+181 
+	#S_IEXEC
+ 
+S_IXUSR
+
+
+	)
+
+184 
+	#S_IRGRP
+ (
+S_IRUSR
+ >> 3�
+
+	)
+
+185 
+	#S_IWGRP
+ (
+S_IWUSR
+ >> 3�
+
+	)
+
+186 
+	#S_IXGRP
+ (
+S_IXUSR
+ >> 3�
+
+	)
+
+188 
+	#S_IRWXG
+ (
+S_IRWXU
+ >> 3)
+
+	)
+
+190 
+	#S_IROTH
+ (
+S_IRGRP
+ >> 3�
+
+	)
+
+191 
+	#S_IWOTH
+ (
+S_IWGRP
+ >> 3�
+
+	)
+
+192 
+	#S_IXOTH
+ (
+S_IXGRP
+ >> 3�
+
+	)
+
+194 
+	#S_IRWXO
+ (
+S_IRWXG
+ >> 3)
+
+	)
+
+197 #ifdef 
+__USE_BSD
+
+
+199 
+	#ACCESSPERMS
+ (
+S_IRWXU
+|
+S_IRWXG
+|
+S_IRWXO
+�
+
+	)
+
+200 
+	#ALLPERMS
+ (
+S_ISUID
+|
+S_ISGID
+|
+S_ISVTX
+|
+S_IRWXU
+|
+S_IRWXG
+|
+S_IRWXO
+)
+
+	)
+
+201 
+	#DEFFILEMODE
+ (
+S_IRUSR
+|
+S_IWUSR
+|
+S_IRGRP
+|
+S_IWGRP
+|
+S_IROTH
+|
+S_IWOTH
+)
+
+	)
+
+203 
+	#S_BLKSIZE
+ 512
+
+	)
+
+207 #i�de�
+__USE_FILE_OFFSET64
+
+
+209 

+	$��
+ (cڡ *
+__��ri�
+ 
+__f�e
+,
+
+210 
+��
+ *
+__��ri�
+ 
+__buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+214 

+	$f��
+ (
+__fd
+, 
+��
+ *
+__buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+216 #ifde�
+__REDIRECT_NTH
+
+
+217 

+	`__REDIRECT_NTH
+ (
+��
+, (cڡ *
+__��ri�
+ 
+__f�e
+,
+
+218 
+��
+ *
+__��ri�
+ 
+__buf
+), 
+��64
+)
+
+219 
+	`__n�nu�
+ ((1, 2));
+
+220 

+	`__REDIRECT_NTH
+ (
+f��
+, (
+__fd
+, 
+��
+ *
+__buf
+), 
+f��64
+)
+
+221 
+	`__n�nu�
+ ((2));
+
+223 
+	#��
+ 
+��64
+
+
+	)
+
+224 
+	#f��
+ 
+f��64
+
+
+	)
+
+227 #ifde�
+__USE_LARGEFILE64
+
+
+228 

+	$��64
+ (cڡ *
+__��ri�
+ 
+__f�e
+,
+
+229 
+��64
+ *
+__��ri�
+ 
+__buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+230 

+	$f��64
+ (
+__fd
+, 
+��64
+ *
+__buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+233 #ifde�
+__USE_ATFILE
+
+
+237 #i�de�
+__USE_FILE_OFFSET64
+
+
+238 

+	$f���
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__f�e
+,
+
+239 
+��
+ *
+__��ri�
+ 
+__buf
+, 
+__�ag
+)
+
+240 
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+242 #ifde�
+__REDIRECT_NTH
+
+
+243 

+	`__REDIRECT_NTH
+ (
+f���
+, (
+__fd
+, cڡ *
+__��ri�
+ 
+__f�e
+,
+
+244 
+��
+ *
+__��ri�
+ 
+__buf
+,
+
+245 
+__�ag
+),
+
+246 
+f���64
+�
+	`__n�nu�
+ ((2, 3));
+
+248 
+	#f���
+ 
+f���64
+
+
+	)
+
+252 #ifde�
+__USE_LARGEFILE64
+
+
+253 

+	$f���64
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__f�e
+,
+
+254 
+��64
+ *
+__��ri�
+ 
+__buf
+, 
+__�ag
+)
+
+255 
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+259 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K
+
+
+260 #i�de�
+__USE_FILE_OFFSET64
+
+
+263 

+	$l��
+ (cڡ *
+__��ri�
+ 
+__f�e
+,
+
+264 
+��
+ *
+__��ri�
+ 
+__buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+266 #ifde�
+__REDIRECT_NTH
+
+
+267 

+	`__REDIRECT_NTH
+ (
+l��
+,
+
+268 (cڡ *
+__��ri�
+ 
+__f�e
+,
+
+269 
+��
+ *
+__��ri�
+ 
+__buf
+), 
+l��64
+)
+
+270 
+	`__n�nu�
+ ((1, 2));
+
+272 
+	#l��
+ 
+l��64
+
+
+	)
+
+275 #ifde�
+__USE_LARGEFILE64
+
+
+276 

+	$l��64
+ (cڡ *
+__��ri�
+ 
+__f�e
+,
+
+277 
+��64
+ *
+__��ri�
+ 
+__buf
+)
+
+278 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+284 

+	$chmod
+ (cڡ *
+__f�e
+, 
+__mode_t
+ 
+__mode
+)
+
+285 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+287 #ifde�
+__USE_BSD
+
+
+291 

+	$lchmod
+ (cڡ *
+__f�e
+, 
+__mode_t
+ 
+__mode
+)
+
+292 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+296 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_POSIX
+
+
+297 

+	$fchmod
+ (
+__fd
+, 
+__mode_t
+ 
+__mode
+�
+__THROW
+;
+
+300 #ifde�
+__USE_ATFILE
+
+
+303 

+	$fchmod�
+ (
+__fd
+, cڡ *
+__f�e
+, 
+__mode_t
+ 
+__mode
+,
+
+304 
+__�ag
+)
+
+305 
+__THROW
+ 
+	`__n�nu�
+ ((2)�
+__wur
+;
+
+312 
+__mode_t
+ 
+	$umask
+ (
+__mode_t
+ 
+__mask
+�
+__THROW
+;
+
+314 #ifdef 
+__USE_GNU
+
+
+317 
+__mode_t
+ 
+	$g�umask
+ (�
+__THROW
+;
+
+321 

+	$mkd�
+ (cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+)
+
+322 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+324 #ifde�
+__USE_ATFILE
+
+
+328 

+	$mkd��
+ (
+__fd
+, cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+)
+
+329 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+335 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+336 

+	$mknod
+ (cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+, 
+__dev_t
+ 
+__dev
+)
+
+337 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+339 #ifde�
+__USE_ATFILE
+
+
+343 

+	$mknod�
+ (
+__fd
+, cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+,
+
+344 
+__dev_t
+ 
+__dev
+�
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+350 

+	$mkfifo
+ (cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+)
+
+351 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+353 #ifde�
+__USE_ATFILE
+
+
+357 

+	$mkfif�t
+ (
+__fd
+, cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+)
+
+358 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+361 #ifde�
+__USE_ATFILE
+
+
+364 

+	$utim��t
+ (
+__fd
+, cڡ *
+__�th
+,
+
+365 cڡ 
+time�ec
+ 
+__times
+[2],
+
+366 
+__�ags
+)
+
+367 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+370 #ifde�
+__USE_XOPEN2K8
+
+
+372 

+	$futim�s
+ (
+__fd
+, cڡ 
+time�ec
+ 
+__times
+[2]�
+__THROW
+;
+
+390 #i�de�
+_STAT_VER
+
+
+391 
+	#_STAT_VER
+ 0
+
+	)
+
+393 #i�de�
+_MKNOD_VER
+
+
+394 
+	#_MKNOD_VER
+ 0
+
+	)
+
+398 #i�de�
+__USE_FILE_OFFSET64
+
+
+399 

+	$__fx��
+ (
+__v�
+, 
+__f�des
+, 
+��
+ *
+__��_buf
+)
+
+400 
+__THROW
+ 
+	`__n�nu�
+ ((3));
+
+401 

+	$__x��
+ (
+__v�
+, cڡ *
+__f��ame
+,
+
+402 
+��
+ *
+__��_buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+403 

+	$__lx��
+ (
+__v�
+, cڡ *
+__f��ame
+,
+
+404 
+��
+ *
+__��_buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+405 

+	$__fx���
+ (
+__v�
+, 
+__f�des
+, cڡ *
+__f��ame
+,
+
+406 
+��
+ *
+__��_buf
+, 
+__�ag
+)
+
+407 
+__THROW
+ 
+	`__n�nu�
+ ((3, 4));
+
+409 #ifde�
+__REDIRECT_NTH
+
+
+410 

+	`__REDIRECT_NTH
+ (
+__fx��
+, (
+__v�
+, 
+__f�des
+,
+
+411 
+��
+ *
+__��_buf
+), 
+__fx��64
+)
+
+412 
+	`__n�nu�
+ ((3));
+
+413 

+	`__REDIRECT_NTH
+ (
+__x��
+, (
+__v�
+, cڡ *
+__f��ame
+,
+
+414 
+��
+ *
+__��_buf
+), 
+__x��64
+)
+
+415 
+	`__n�nu�
+ ((2, 3));
+
+416 

+	`__REDIRECT_NTH
+ (
+__lx��
+, (
+__v�
+, cڡ *
+__f��ame
+,
+
+417 
+��
+ *
+__��_buf
+), 
+__lx��64
+)
+
+418 
+	`__n�nu�
+ ((2, 3));
+
+419 

+	`__REDIRECT_NTH
+ (
+__fx���
+, (
+__v�
+, 
+__f�des
+,
+
+420 cڡ *
+__f��ame
+,
+
+421 
+��
+ *
+__��_buf
+, 
+__�ag
+),
+
+422 
+__fx���64
+�
+	`__n�nu�
+ ((3, 4));
+
+425 
+	#__fx��
+ 
+__fx��64
+
+
+	)
+
+426 
+	#__x��
+ 
+__x��64
+
+
+	)
+
+427 
+	#__lx��
+ 
+__lx��64
+
+
+	)
+
+431 #ifde�
+__USE_LARGEFILE64
+
+
+432 

+	$__fx��64
+ (
+__v�
+, 
+__f�des
+, 
+��64
+ *
+__��_buf
+)
+
+433 
+__THROW
+ 
+	`__n�nu�
+ ((3));
+
+434 

+	$__x��64
+ (
+__v�
+, cڡ *
+__f��ame
+,
+
+435 
+��64
+ *
+__��_buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+436 

+	$__lx��64
+ (
+__v�
+, cڡ *
+__f��ame
+,
+
+437 
+��64
+ *
+__��_buf
+�
+__THROW
+ 
+	`__n�nu�
+ ((2, 3));
+
+438 

+	$__fx���64
+ (
+__v�
+, 
+__f�des
+, cڡ *
+__f��ame
+,
+
+439 
+��64
+ *
+__��_buf
+, 
+__�ag
+)
+
+440 
+__THROW
+ 
+	`__n�nu�
+ ((3, 4));
+
+442 

+	$__xmknod
+ (
+__v�
+, cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+,
+
+443 
+__dev_t
+ *
+__dev
+�
+__THROW
+ 
+	`__n�nu�
+ ((2, 4));
+
+445 

+	$__xmknod�
+ (
+__v�
+, 
+__fd
+, cڡ *
+__�th
+,
+
+446 
+__mode_t
+ 
+__mode
+, 
+__dev_t
+ *
+__dev
+)
+
+447 
+__THROW
+ 
+	`__n�nu�
+ ((3, 5));
+
+449 #ifde�
+__USE_EXTERN_INLINES
+
+
+452 
+__ex��_�l�e
+ 
+
+453 
+	`__NTH
+ (
+	$��
+ (cڡ *
+__�th
+, 
+��
+ *
+__��buf
+))
+
+455  
+	`__x��
+ (
+_STAT_VER
+, 
+__�th
+, 
+__��buf
+);
+
+456 
+	}
+}
+
+458 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+459 
+__ex��_�l�e
+ 
+
+460 
+__NTH
+ (
+	$l��
+ (cڡ *
+__�th
+, 
+��
+ *
+__��buf
+))
+
+462  
+	`__lx��
+ (
+_STAT_VER
+, 
+__�th
+, 
+__��buf
+);
+
+463 
+	}
+}
+
+466 
+__ex��_�l�e
+ 
+
+467 
+__NTH
+ (
+	$f��
+ (
+__fd
+, 
+��
+ *
+__��buf
+))
+
+469  
+	`__fx��
+ (
+_STAT_VER
+, 
+__fd
+, 
+__��buf
+);
+
+470 
+	}
+}
+
+472 #ifde�
+__USE_ATFILE
+
+
+473 
+__ex��_�l�e
+ 
+
+474 
+__NTH
+ (
+	$f���
+ (
+__fd
+, cڡ *
+__f��ame
+, 
+��
+ *
+__��buf
+,
+
+475 
+__�ag
+))
+
+477  
+	`__fx���
+ (
+_STAT_VER
+, 
+__fd
+, 
+__f��ame
+, 
+__��buf
+, 
+__�ag
+);
+
+478 
+	}
+}
+
+481 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_BSD
+
+
+482 
+__ex��_�l�e
+ 
+
+483 
+__NTH
+ (
+	$mknod
+ (cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+, 
+__dev_t
+ 
+__dev
+))
+
+485  
+	`__xmknod
+ (
+_MKNOD_VER
+, 
+__�th
+, 
+__mode
+, &
+__dev
+);
+
+486 
+	}
+}
+
+489 #ifde�
+__USE_ATFILE
+
+
+490 
+__ex��_�l�e
+ 
+
+491 
+__NTH
+ (
+	$mknod�
+ (
+__fd
+, cڡ *
+__�th
+, 
+__mode_t
+ 
+__mode
+,
+
+492 
+__dev_t
+ 
+__dev
+))
+
+494  
+	`__xmknod�
+ (
+_MKNOD_VER
+, 
+__fd
+, 
+__�th
+, 
+__mode
+, &
+__dev
+);
+
+495 
+	}
+}
+
+498 #i�
+def�ed
+ 
+__USE_LARGEFILE64
+ \
+
+499 && (! 
+def�ed
+ 
+	g__USE_FILE_OFFSET64
+ \
+
+500 || (
+def�ed
+ 
+	g__REDIRECT_NTH
+ && def�ed 
+	g__OPTIMIZE__
+))
+
+501 
+__ex��_�l�e
+ 
+
+502 
+__NTH
+ (
+	$��64
+ (cڡ *
+__�th
+, 
+��64
+ *
+__��buf
+))
+
+504  
+	`__x��64
+ (
+_STAT_VER
+, 
+__�th
+, 
+__��buf
+);
+
+505 
+	}
+}
+
+507 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+508 
+__ex��_�l�e
+ 
+
+509 
+__NTH
+ (
+	$l��64
+ (cڡ *
+__�th
+, 
+��64
+ *
+__��buf
+))
+
+511  
+	`__lx��64
+ (
+_STAT_VER
+, 
+__�th
+, 
+__��buf
+);
+
+512 
+	}
+}
+
+515 
+__ex��_�l�e
+ 
+
+516 
+__NTH
+ (
+	$f��64
+ (
+__fd
+, 
+��64
+ *
+__��buf
+))
+
+518  
+	`__fx��64
+ (
+_STAT_VER
+, 
+__fd
+, 
+__��buf
+);
+
+519 
+	}
+}
+
+521 #ifde�
+__USE_ATFILE
+
+
+522 
+__ex��_�l�e
+ 
+
+523 
+__NTH
+ (
+	$f���64
+ (
+__fd
+, cڡ *
+__f��ame
+, 
+��64
+ *
+__��buf
+,
+
+524 
+__�ag
+))
+
+526  
+	`__fx���64
+ (
+_STAT_VER
+, 
+__fd
+, 
+__f��ame
+, 
+__��buf
+, 
+__�ag
+);
+
+527 
+	}
+}
+
+534 
+	g__END_DECLS
+
+
+	@/usr/include/sys/time.h
+
+18 #i�de�
+_SYS_TIME_H
+
+
+19 
+	#_SYS_TIME_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+23 
+	~<b�s/ty�s.h
+>
+
+24 
+	#__�ed_time_t
+
+
+	)
+
+25 
+	~<time.h
+>
+
+26 
+	#__�ed_timev�
+
+
+	)
+
+27 
+	~<b�s/time.h
+>
+
+29 
+	~<sys/���.h
+>
+
+31 #i�de�
+__su�c�ds_t_def�ed
+
+
+32 
+__su�c�ds_t
+ 
+	tsu�c�ds_t
+;
+
+33 
+	#__su�c�ds_t_def�ed
+
+
+	)
+
+37 
+	g__BEGIN_DECLS
+
+
+39 #ifde�
+__USE_GNU
+
+
+41 
+	#TIMEVAL_TO_TIMESPEC
+(
+tv
+, 
+ts
+) { \
+
+42 (
+ts
+)->
+tv_�c
+ = (
+tv
+)->tv_sec; \
+
+43 (
+ts
+)->
+tv_n�c
+ = (
+tv
+)->
+tv_u�c
+ * 1000; \
+
+44 }
+
+	)
+
+45 
+	#TIMESPEC_TO_TIMEVAL
+(
+tv
+, 
+ts
+) { \
+
+46 (
+tv
+)->
+tv_�c
+ = (
+ts
+)->tv_sec; \
+
+47 (
+tv
+)->
+tv_u�c
+ = (
+ts
+)->
+tv_n�c
+ / 1000; \
+
+48 }
+
+	)
+
+52 #ifde�
+__USE_BSD
+
+
+55 
+	stimez�e
+
+
+57 
+	mtz_m�u�swe�
+;
+
+58 
+	mtz_d�time
+;
+
+61 
+timez�e
+ *
+	t__��ri�
+ 
+	t__timez�e_�r_t
+;
+
+63 *
+	t__��ri�
+ 
+	t__timez�e_�r_t
+;
+
+71 

+	$g�timeofday
+ (
+timev�
+ *
+__��ri�
+ 
+__tv
+,
+
+72 
+__timez�e_�r_t
+ 
+__tz
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+74 #ifde�
+__USE_BSD
+
+
+77 

+	$��imeofday
+ (cڡ 
+timev�
+ *
+__tv
+,
+
+78 cڡ 
+timez�e
+ *
+__tz
+)
+
+79 
+__THROW
+;
+
+85 

+	$adjtime
+ (cڡ 
+timev�
+ *
+__d��
+,
+
+86 
+timev�
+ *
+__�dd��
+�
+__THROW
+;
+
+91 
+	e__�im�_which
+
+
+94 
+ITIMER_REAL
+ = 0,
+
+95 
+	#ITIMER_REAL
+ 
+ITIMER_REAL
+
+
+	)
+
+97 
+ITIMER_VIRTUAL
+ = 1,
+
+98 
+	#ITIMER_VIRTUAL
+ 
+ITIMER_VIRTUAL
+
+
+	)
+
+101 
+ITIMER_PROF
+ = 2
+
+102 
+	#ITIMER_PROF
+ 
+ITIMER_PROF
+
+
+	)
+
+107 
+	s�im�v�
+
+
+110 
+timev�
+ 
+�_��rv�
+;
+
+112 
+timev�
+ 
+�_v�ue
+;
+
+115 #i�
+def�ed
+ 
+__USE_GNU
+ && !def�ed 
+__�lu�lus
+
+
+118 
+__�im�_which
+ 
+	t__�im�_which_t
+;
+
+120 
+	t__�im�_which_t
+;
+
+125 

+	$g��im�
+ (
+__�im�_which_t
+ 
+__which
+,
+
+126 
+�im�v�
+ *
+__v�ue
+�
+__THROW
+;
+
+131 

+	$�t�im�
+ (
+__�im�_which_t
+ 
+__which
+,
+
+132 cڡ 
+�im�v�
+ *
+__��ri�
+ 
+__�w
+,
+
+133 
+�im�v�
+ *
+__��ri�
+ 
+__�d
+�
+__THROW
+;
+
+138 

+	$utimes
+ (cڡ *
+__f�e
+, cڡ 
+timev�
+ 
+__tvp
+[2])
+
+139 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+141 #ifde�
+__USE_BSD
+
+
+143 

+	$lutimes
+ (cڡ *
+__f�e
+, cڡ 
+timev�
+ 
+__tvp
+[2])
+
+144 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+147 

+	$futimes
+ (
+__fd
+, cڡ 
+timev�
+ 
+__tvp
+[2]�
+__THROW
+;
+
+150 #ifde�
+__USE_GNU
+
+
+154 

+	$futime�t
+ (
+__fd
+, cڡ *
+__f�e
+,
+
+155 cڡ 
+timev�
+ 
+__tvp
+[2]�
+__THROW
+;
+
+159 #ifde�
+__USE_BSD
+
+
+162 
+	#tim�is�t
+(
+tvp
+�(�vp)->
+tv_�c
+ || (tvp)->
+tv_u�c
+)
+
+	)
+
+163 
+	#tim���r
+(
+tvp
+�(�vp)->
+tv_�c
+ = (tvp)->
+tv_u�c
+ = 0)
+
+	)
+
+164 
+	#tim�cmp
+(
+a
+, 
+b
+, 
+CMP
+) \
+
+165 (((
+a
+)->
+tv_�c
+ =�(
+b
+)->tv_sec) ? \
+
+166 ((
+a
+)->
+tv_u�c
+ 
+	`CMP
+ (
+b
+)->tv_usec) : \
+
+167 ((
+a
+)->
+tv_�c
+ 
+	`CMP
+ (
+b
+)->tv_�c))
+
+	)
+
+168 
+	#tim�add
+(
+a
+, 
+b
+, 
+�su�
+) \
+
+170 (
+�su�
+)->
+tv_�c
+ = (
+a
+)->tv_��+ (
+b
+)->tv_sec; \
+
+171 (
+�su�
+)->
+tv_u�c
+ = (
+a
+)->tv_u��+ (
+b
+)->tv_usec; \
+
+172 i�((
+�su�
+)->
+tv_u�c
+ >= 1000000) \
+
+174 ++(
+�su�
+)->
+tv_�c
+; \
+
+175 (
+�su�
+)->
+tv_u�c
+ -= 1000000; \
+
+177 
+	}
+} 0)
+
+	)
+
+178 
+	#tim�sub
+(
+a
+, 
+b
+, 
+�su�
+) \
+
+180 (
+�su�
+)->
+tv_�c
+ = (
+a
+)->tv_��- (
+b
+)->tv_sec; \
+
+181 (
+�su�
+)->
+tv_u�c
+ = (
+a
+)->tv_u��- (
+b
+)->tv_usec; \
+
+182 i�((
+�su�
+)->
+tv_u�c
+ < 0) { \
+
+183 --(
+�su�
+)->
+tv_�c
+; \
+
+184 (
+�su�
+)->
+tv_u�c
+ += 1000000; \
+
+186 } 0)
+
+	)
+
+189 
+	g__END_DECLS
+
+
+	@/usr/include/sys/types.h
+
+22 #i�def 
+_SYS_TYPES_H
+
+
+23 
+	#_SYS_TYPES_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+27 
+	g__BEGIN_DECLS
+
+
+29 
+	~<b�s/ty�s.h
+>
+
+31 #ifdef 
+__USE_BSD
+
+
+32 #i�de�
+__u_ch�_def�ed
+
+
+33 
+__u_ch�
+ 
+	tu_ch�
+;
+
+34 
+__u_sh�t
+ 
+	tu_sh�t
+;
+
+35 
+__u_�t
+ 
+	tu_�t
+;
+
+36 
+__u_l�g
+ 
+	tu_l�g
+;
+
+37 
+__quad_t
+ 
+	tquad_t
+;
+
+38 
+__u_quad_t
+ 
+	tu_quad_t
+;
+
+39 
+__fsid_t
+ 
+	tfsid_t
+;
+
+40 
+	#__u_ch�_def�ed
+
+
+	)
+
+44 
+__loff_t
+ 
+	tloff_t
+;
+
+46 #i�de�
+__�o_t_def�ed
+
+
+47 #i�de�
+__USE_FILE_OFFSET64
+
+
+48 
+__�o_t
+ 
+	t�o_t
+;
+
+50 
+__�o64_t
+ 
+	t�o_t
+;
+
+52 
+	#__�o_t_def�ed
+
+
+	)
+
+54 #i�
+def�ed
+ 
+__USE_LARGEFILE64
+ && !def�ed 
+__�o64_t_def�ed
+
+
+55 
+__�o64_t
+ 
+	t�o64_t
+;
+
+56 
+	#__�o64_t_def�ed
+
+
+	)
+
+59 #i�de�
+__dev_t_def�ed
+
+
+60 
+__dev_t
+ 
+	tdev_t
+;
+
+61 
+	#__dev_t_def�ed
+
+
+	)
+
+64 #i�de�
+__gid_t_def�ed
+
+
+65 
+__gid_t
+ 
+	tgid_t
+;
+
+66 
+	#__gid_t_def�ed
+
+
+	)
+
+69 #i�de�
+__mode_t_def�ed
+
+
+70 
+__mode_t
+ 
+	tmode_t
+;
+
+71 
+	#__mode_t_def�ed
+
+
+	)
+
+74 #i�de�
+__ƚk_t_def�ed
+
+
+75 
+__ƚk_t
+ 
+	tƚk_t
+;
+
+76 
+	#__ƚk_t_def�ed
+
+
+	)
+
+79 #i�de�
+__uid_t_def�ed
+
+
+80 
+__uid_t
+ 
+	tuid_t
+;
+
+81 
+	#__uid_t_def�ed
+
+
+	)
+
+84 #i�de�
+__off_t_def�ed
+
+
+85 #i�de�
+__USE_FILE_OFFSET64
+
+
+86 
+__off_t
+ 
+	toff_t
+;
+
+88 
+__off64_t
+ 
+	toff_t
+;
+
+90 
+	#__off_t_def�ed
+
+
+	)
+
+92 #i�
+def�ed
+ 
+__USE_LARGEFILE64
+ && !def�ed 
+__off64_t_def�ed
+
+
+93 
+__off64_t
+ 
+	toff64_t
+;
+
+94 
+	#__off64_t_def�ed
+
+
+	)
+
+97 #i�de�
+__pid_t_def�ed
+
+
+98 
+__pid_t
+ 
+	tpid_t
+;
+
+99 
+	#__pid_t_def�ed
+
+
+	)
+
+102 #i�(
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+) \
+
+103 && !
+def�ed
+ 
+__id_t_def�ed
+
+
+104 
+__id_t
+ 
+	tid_t
+;
+
+105 
+	#__id_t_def�ed
+
+
+	)
+
+108 #i�de�
+__ssize_t_def�ed
+
+
+109 
+__ssize_t
+ 
+	tssize_t
+;
+
+110 
+	#__ssize_t_def�ed
+
+
+	)
+
+113 #ifdef 
+__USE_BSD
+
+
+114 #i�de�
+__daddr_t_def�ed
+
+
+115 
+__daddr_t
+ 
+	tdaddr_t
+;
+
+116 
+__�ddr_t
+ 
+	t�ddr_t
+;
+
+117 
+	#__daddr_t_def�ed
+
+
+	)
+
+121 #i�(
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+�&& !def�ed 
+__key_t_def�ed
+
+
+122 
+__key_t
+ 
+	tkey_t
+;
+
+123 
+	#__key_t_def�ed
+
+
+	)
+
+126 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+
+
+127 
+	#__�ed_�ock_t
+
+
+	)
+
+129 
+	#__�ed_time_t
+
+
+	)
+
+130 
+	#__�ed_tim�_t
+
+
+	)
+
+131 
+	#__�ed_�ockid_t
+
+
+	)
+
+132 
+	~<time.h
+>
+
+134 #ifde�
+__USE_XOPEN
+
+
+135 #i�de�
+__u�c�ds_t_def�ed
+
+
+136 
+__u�c�ds_t
+ 
+	tu�c�ds_t
+;
+
+137 
+	#__u�c�ds_t_def�ed
+
+
+	)
+
+139 #i�de�
+__su�c�ds_t_def�ed
+
+
+140 
+__su�c�ds_t
+ 
+	tsu�c�ds_t
+;
+
+141 
+	#__su�c�ds_t_def�ed
+
+
+	)
+
+145 
+	#__�ed_size_t
+
+
+	)
+
+146 
+	~<�ddef.h
+>
+
+148 #ifde�
+__USE_MISC
+
+
+150 
+	tul�g
+;
+
+151 
+	tush�t
+;
+
+152 
+	tu�t
+;
+
+157 #i�!
+__GNUC_PREREQ
+ (2, 7)
+
+160 #i�de�
+__�t8_t_def�ed
+
+
+161 
+	#__�t8_t_def�ed
+
+
+	)
+
+162 
+	t�t8_t
+;
+
+163 
+	t�t16_t
+;
+
+164 
+	t�t32_t
+;
+
+165 #i�
+__WORDSIZE
+ == 64
+
+166 
+	t�t64_t
+;
+
+168 
+__ex�nsi�__
+ 
+	t�t64_t
+;
+
+173 
+	tu_�t8_t
+;
+
+174 
+	tu_�t16_t
+;
+
+175 
+	tu_�t32_t
+;
+
+176 #i�
+__WORDSIZE
+ == 64
+
+177 
+	tu_�t64_t
+;
+
+179 
+__ex�nsi�__
+ 
+	tu_�t64_t
+;
+
+182 
+	t�gi��_t
+;
+
+187 
+	#__�tN_t
+(
+N
+, 
+MODE
+) \
+
+188 ##
+	tN
+##
+	t_t
+ 
+	t__��ibu�__
+ ((
+	t__mode__
+ (
+	tMODE
+)))
+
+	)
+
+189 
+	t__u_�tN_t
+(
+	tN
+, 
+	tMODE
+) \
+
+190 
+	tu_�t
+##
+	tN
+##
+	t_t
+ 
+	t__��ibu�__
+ ((
+	t__mode__
+ (
+	tMODE
+)))
+
+	)
+
+192 #i�de�
+	t__�t8_t_def�ed
+
+
+193 
+	t__�t8_t_def�ed
+
+
+	)
+
+194 
+	t__�tN_t
+ (8, 
+	t__QI__
+);
+
+195 
+__�tN_t
+ (16, 
+__HI__
+);
+
+196 
+__�tN_t
+ (32, 
+__SI__
+);
+
+197 
+__�tN_t
+ (64, 
+__DI__
+);
+
+200 
+__u_�tN_t
+ (8, 
+__QI__
+);
+
+201 
+__u_�tN_t
+ (16, 
+__HI__
+);
+
+202 
+__u_�tN_t
+ (32, 
+__SI__
+);
+
+203 
+__u_�tN_t
+ (64, 
+__DI__
+);
+
+205 
+	t�gi��_t
+ 
+	t__��ibu�__
+ ((
+	t__mode__
+ (
+	t__w�d__
+)));
+
+211 
+	#__BIT_TYPES_DEFINED__
+ 1
+
+	)
+
+214 #ifdef 
+__USE_BSD
+
+
+216 
+	~<�d�n.h
+>
+
+219 
+	~<sys/���.h
+>
+
+222 
+	~<sys/sysma�os.h
+>
+
+226 #i�(
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K8
+) \
+
+227 && !
+def�ed
+ 
+__blksize_t_def�ed
+
+
+228 
+__blksize_t
+ 
+	tblksize_t
+;
+
+229 
+	#__blksize_t_def�ed
+
+
+	)
+
+233 #i�de�
+__USE_FILE_OFFSET64
+
+
+234 #i�de�
+__blk�t_t_def�ed
+
+
+235 
+__blk�t_t
+ 
+	tblk�t_t
+;
+
+236 
+	#__blk�t_t_def�ed
+
+
+	)
+
+238 #i�de�
+__fsblk�t_t_def�ed
+
+
+239 
+__fsblk�t_t
+ 
+	tfsblk�t_t
+;
+
+240 
+	#__fsblk�t_t_def�ed
+
+
+	)
+
+242 #i�de�
+__fsf��t_t_def�ed
+
+
+243 
+__fsf��t_t
+ 
+	tfsf��t_t
+;
+
+244 
+	#__fsf��t_t_def�ed
+
+
+	)
+
+247 #i�de�
+__blk�t_t_def�ed
+
+
+248 
+__blk�t64_t
+ 
+	tblk�t_t
+;
+
+249 
+	#__blk�t_t_def�ed
+
+
+	)
+
+251 #i�de�
+__fsblk�t_t_def�ed
+
+
+252 
+__fsblk�t64_t
+ 
+	tfsblk�t_t
+;
+
+253 
+	#__fsblk�t_t_def�ed
+
+
+	)
+
+255 #i�de�
+__fsf��t_t_def�ed
+
+
+256 
+__fsf��t64_t
+ 
+	tfsf��t_t
+;
+
+257 
+	#__fsf��t_t_def�ed
+
+
+	)
+
+261 #ifde�
+__USE_LARGEFILE64
+
+
+262 
+__blk�t64_t
+ 
+	tblk�t64_t
+;
+
+263 
+__fsblk�t64_t
+ 
+	tfsblk�t64_t
+;
+
+264 
+__fsf��t64_t
+ 
+	tfsf��t64_t
+;
+
+269 #i�
+def�ed
+ 
+__USE_POSIX199506
+ || def�ed 
+__USE_UNIX98
+
+
+270 
+	~<b�s/�h�adty�s.h
+>
+
+273 
+	g__END_DECLS
+
+
+	@/usr/include/sys/un.h
+
+18 #i�def 
+_SYS_UN_H
+
+
+19 
+	#_SYS_UN_H
+ 1
+
+	)
+
+21 
+	~<sys/cdefs.h
+>
+
+24 
+	~<b�s/sockaddr.h
+>
+
+26 
+__BEGIN_DECLS
+
+
+29 
+	ssockaddr_un
+
+
+31 
+__SOCKADDR_COMMON
+ (
+sun_
+);
+
+32 
+	msun_�th
+[108];
+
+36 #ifde�
+__USE_MISC
+
+
+37 
+	~<�r�g.h
+>
+
+40 
+	#SUN_LEN
+(
+�r
+�((
+size_t
+�(((
+sockaddr_un
+ *�0)->
+sun_�th
+) \
+
+41 + 
+	`���
+ ((
+�r
+)->
+sun_�th
+))
+
+	)
+
+44 
+	g__END_DECLS
+
+
+	@/usr/include/sys/wait.h
+
+22 #i�def 
+_SYS_WAIT_H
+
+
+23 
+	#_SYS_WAIT_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+27 
+	g__BEGIN_DECLS
+
+
+29 
+	~<sig�l.h
+>
+
+32 #i�!
+def�ed
+ 
+_STDLIB_H
+ || (!def�ed 
+__USE_XOPEN
+ && !def�ed 
+__USE_XOPEN2K8
+)
+
+35 
+	~<b�s/wa��ags.h
+>
+
+37 #ifdef 
+__USE_BSD
+
+
+42 #i�
+def�ed
+ 
+__GNUC__
+ && !def�ed 
+__�lu�lus
+
+
+43 
+	#__WAIT_INT
+(
+��us
+) \
+
+44 (
+	`__ex�nsi�__
+ (((uni� { 
+	`__ty�of
+(
+��us
+�
+__�
+; 
+__i
+; }) \
+
+45 { .
+__�
+ = (
+��us
+�}).
+__i
+))
+
+	)
+
+47 
+	#__WAIT_INT
+(
+��us
+�(*(cڡ *�&(��us))
+
+	)
+
+55 #i�!
+def�ed
+ 
+__GNUC__
+ || __GNUC__ < 2 || def�ed 
+__�lu�lus
+
+
+56 
+	#__WAIT_STATUS
+ *
+
+	)
+
+57 
+	#__WAIT_STATUS_DEFN
+ *
+
+	)
+
+62 
+wa�
+ *
+	m__u�r
+;
+
+63 *
+	m__��
+;
+
+64 } 
+	t__WAIT_STATUS
+ 
+	t__��ibu�__
+ ((
+	t__�����t_uni�__
+));
+
+65 
+	#__WAIT_STATUS_DEFN
+ *
+
+	)
+
+70 
+	#__WAIT_INT
+(
+��us
+�(��us)
+
+	)
+
+71 
+	#__WAIT_STATUS
+ *
+
+	)
+
+72 
+	#__WAIT_STATUS_DEFN
+ *
+
+	)
+
+77 
+	~<b�s/wa���us.h
+>
+
+79 
+	#WEXITSTATUS
+(
+��us
+�
+	`__WEXITSTATUS
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+80 
+	#WTERMSIG
+(
+��us
+�
+	`__WTERMSIG
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+81 
+	#WSTOPSIG
+(
+��us
+�
+	`__WSTOPSIG
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+82 
+	#WIFEXITED
+(
+��us
+�
+	`__WIFEXITED
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+83 
+	#WIFSIGNALED
+(
+��us
+�
+	`__WIFSIGNALED
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+84 
+	#WIFSTOPPED
+(
+��us
+�
+	`__WIFSTOPPED
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+85 #ifde�
+__WIFCONTINUED
+
+
+86 
+	#WIFCONTINUED
+(
+��us
+�
+	`__WIFCONTINUED
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+90 #ifdef 
+__USE_BSD
+
+
+91 
+	#WCOREFLAG
+ 
+__WCOREFLAG
+
+
+	)
+
+92 
+	#WCOREDUMP
+(
+��us
+�
+	`__WCOREDUMP
+ (
+	`__WAIT_INT
+ (��us))
+
+	)
+
+93 
+	#W_EXITCODE
+(
+�t
+, 
+sig
+�
+	`__W_EXITCODE
+ (�t, sig)
+
+	)
+
+94 
+	#W_STOPCODE
+(
+sig
+�
+	`__W_STOPCODE
+ (sig)
+
+	)
+
+102 
+__pid_t
+ 
+wa�
+ (
+__WAIT_STATUS
+ 
+__��_loc
+);
+
+104 #ifdef 
+__USE_BSD
+
+
+106 
+	#WAIT_ANY
+ (-1�
+
+	)
+
+107 
+	#WAIT_MYPGRP
+ 0
+
+	)
+
+125 
+__pid_t
+ 
+wa�pid
+ (__pid_�
+__pid
+, *
+__��_loc
+, 
+__�ti�s
+);
+
+127 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+
+
+128 #i�de�
+__id_t_def�ed
+
+
+129 
+	~<b�s/ty�s.h
+>
+
+130 
+__id_t
+ 
+	tid_t
+;
+
+131 
+	#__id_t_def�ed
+
+
+	)
+
+134 
+	#__�ed_sig�fo_t
+
+
+	)
+
+135 
+	~<b�s/sig�fo.h
+>
+
+148 

+wa�id
+ (
+idty�_t
+ 
+__idty�
+, 
+__id_t
+ 
+__id
+, 
+sig�fo_t
+ *
+__�f�
+,
+
+149 
+__�ti�s
+);
+
+152 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+155 
+	gru�ge
+;
+
+162 
+__pid_t
+ 
+	$wa�3
+ (
+__WAIT_STATUS
+ 
+__��_loc
+, 
+__�ti�s
+,
+
+163 
+ru�ge
+ * 
+__u�ge
+�
+__THROWNL
+;
+
+166 #ifde�
+__USE_BSD
+
+
+168 
+__pid_t
+ 
+	$wa�4
+ (
+__pid_t
+ 
+__pid
+, 
+__WAIT_STATUS
+ 
+__��_loc
+, 
+__�ti�s
+,
+
+169 
+ru�ge
+ *
+__u�ge
+�
+__THROWNL
+;
+
+173 
+__END_DECLS
+
+
+	@/usr/include/termios.h
+
+22 #i�def 
+_TERMIOS_H
+
+
+23 
+	#_TERMIOS_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+26 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K8
+
+
+28 
+	~<b�s/ty�s.h
+>
+
+29 #i�de�
+__pid_t_def�ed
+
+
+30 
+__pid_t
+ 
+	tpid_t
+;
+
+31 
+	#__pid_t_def�ed
+
+
+	)
+
+35 
+	g__BEGIN_DECLS
+
+
+39 
+	~<b�s/�rmios.h
+>
+
+41 #ifde�
+__USE_BSD
+
+
+44 
+	#CCEQ
+(
+v�
+, 
+c
+�((c�=�(v��&& (v��!�
+_POSIX_VDISABLE
+)
+
+	)
+
+48 
+��d_t
+ 
+	$cfg�o��d
+ (cڡ 
+�rmios
+ *
+__�rmios_p
+�
+__THROW
+;
+
+51 
+��d_t
+ 
+	$cfg�i��d
+ (cڡ 
+�rmios
+ *
+__�rmios_p
+�
+__THROW
+;
+
+54 

+	$cf�to��d
+ (
+�rmios
+ *
+__�rmios_p
+, 
+��d_t
+ 
+__��d
+�
+__THROW
+;
+
+57 

+	$cf�ti��d
+ (
+�rmios
+ *
+__�rmios_p
+, 
+��d_t
+ 
+__��d
+�
+__THROW
+;
+
+59 #ifdef 
+__USE_BSD
+
+
+61 

+	$cf�t��d
+ (
+�rmios
+ *
+__�rmios_p
+, 
+��d_t
+ 
+__��d
+�
+__THROW
+;
+
+66 

+	$tcg���
+ (
+__fd
+, 
+�rmios
+ *
+__�rmios_p
+�
+__THROW
+;
+
+70 

+	$tc���r
+ (
+__fd
+, 
+__�tiڮ_a�i�s
+,
+
+71 cڡ 
+�rmios
+ *
+__�rmios_p
+�
+__THROW
+;
+
+74 #ifdef 
+__USE_BSD
+
+
+76 

+	$cfmak�aw
+ (
+�rmios
+ *
+__�rmios_p
+�
+__THROW
+;
+
+80 

+	$tc�ndb�ak
+ (
+__fd
+, 
+__du�ti�
+�
+__THROW
+;
+
+86 

+	`tcd��
+ (
+__fd
+);
+
+90 

+	$tc�ush
+ (
+__fd
+, 
+__queue_����
+�
+__THROW
+;
+
+94 

+	$tc�ow
+ (
+__fd
+, 
+__a�i�
+�
+__THROW
+;
+
+97 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K8
+
+
+99 
+__pid_t
+ 
+	$tcg�sid
+ (
+__fd
+�
+__THROW
+;
+
+103 #ifde�
+__USE_BSD
+
+
+104 
+	~<sys/�yde�u�s.h
+>
+
+107 
+__END_DECLS
+
+
+	@/usr/include/time.h
+
+22 #i�def 
+_TIME_H
+
+
+24 #i�(! 
+def�ed
+ 
+__�ed_time_t
+ && !def�ed 
+__�ed_�ock_t
+ && \
+
+25 ! 
+def�ed
+ 
+	g__�ed_time�ec
+)
+
+26 
+	#_TIME_H
+ 1
+
+	)
+
+27 
+	~<�u�s.h
+>
+
+29 
+	g__BEGIN_DECLS
+
+
+33 #ifdef 
+_TIME_H
+
+
+35 
+	#__�ed_size_t
+
+
+	)
+
+36 
+	#__�ed_NULL
+
+
+	)
+
+37 
+	~<�ddef.h
+>
+
+41 
+	~<b�s/time.h
+>
+
+44 #i�!
+def�ed
+ 
+__STRICT_ANSI__
+ && !def�ed 
+__USE_XOPEN2K
+
+
+45 #i�de�
+CLK_TCK
+
+
+46 
+	#CLK_TCK
+ 
+CLOCKS_PER_SEC
+
+
+	)
+
+52 #i�!
+def�ed
+ 
+__�ock_t_def�ed
+ && (def�ed 
+_TIME_H
+ || def�ed 
+__�ed_�ock_t
+)
+
+53 
+	#__�ock_t_def�ed
+ 1
+
+	)
+
+55 
+	~<b�s/ty�s.h
+>
+
+57 
+__BEGIN_NAMESPACE_STD
+
+
+59 
+__�ock_t
+ 
+	t�ock_t
+;
+
+60 
+	g__END_NAMESPACE_STD
+
+
+61 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+62 
+	$__USING_NAMESPACE_STD
+(
+�ock_t
+)
+
+66 #unde�
+__�ed_�ock_t
+
+
+68 #i�!
+def�ed
+ 
+__time_t_def�ed
+ && (def�ed 
+_TIME_H
+ || def�ed 
+__�ed_time_t
+)
+
+69 
+	#__time_t_def�ed
+ 1
+
+	)
+
+71 
+	~<b�s/ty�s.h
+>
+
+73 
+__BEGIN_NAMESPACE_STD
+
+
+75 
+__time_t
+ 
+	ttime_t
+;
+
+76 
+__END_NAMESPACE_STD
+
+
+77 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+ || def�ed 
+__USE_SVID
+
+
+78 
+	$__USING_NAMESPACE_STD
+(
+time_t
+)
+
+82 #unde�
+__�ed_time_t
+
+
+84 #i�!
+def�ed
+ 
+__�ockid_t_def�ed
+ && \
+
+85 ((
+def�ed
+ 
+_TIME_H
+ && def�ed 
+__USE_POSIX199309
+�|| def�ed 
+__�ed_�ockid_t
+)
+
+86 
+	#__�ockid_t_def�ed
+ 1
+
+	)
+
+88 
+	~<b�s/ty�s.h
+>
+
+91 
+__�ockid_t
+ 
+	t�ockid_t
+;
+
+94 #unde�
+__�ockid_time_t
+
+
+96 #i�!
+def�ed
+ 
+__tim�_t_def�ed
+ && \
+
+97 ((
+def�ed
+ 
+_TIME_H
+ && def�ed 
+__USE_POSIX199309
+�|| def�ed 
+__�ed_tim�_t
+)
+
+98 
+	#__tim�_t_def�ed
+ 1
+
+	)
+
+100 
+	~<b�s/ty�s.h
+>
+
+103 
+__tim�_t
+ 
+	ttim�_t
+;
+
+106 #unde�
+__�ed_tim�_t
+
+
+109 #i�(!
+def�ed
+ 
+__time�ec_def�ed
+ \
+
+110 && ((
+def�ed
+ 
+_TIME_H
+ \
+
+111 && (
+def�ed
+ 
+__USE_POSIX199309
+ || def�ed 
+__USE_MISC
+ \
+
+112 || 
+def�ed
+ 
+__USE_ISOC11
+)) \
+
+113 || 
+def�ed
+ 
+__�ed_time�ec
+))
+
+114 
+	#__time�ec_def�ed
+ 1
+
+	)
+
+116 
+	~<b�s/ty�s.h
+>
+
+120 
+	stime�ec
+
+
+122 
+__time_t
+ 
+tv_�c
+;
+
+123 
+__sys��_��g_t
+ 
+tv_n�c
+;
+
+127 #unde�
+__�ed_time�ec
+
+
+130 #ifdef 
+_TIME_H
+
+
+131 
+__BEGIN_NAMESPACE_STD
+
+
+133 
+	stm
+
+
+135 
+tm_�c
+;
+
+136 
+tm_m�
+;
+
+137 
+tm_hour
+;
+
+138 
+tm_mday
+;
+
+139 
+tm_m�
+;
+
+140 
+tm_y�r
+;
+
+141 
+tm_wday
+;
+
+142 
+tm_yday
+;
+
+143 
+tm_isd�
+;
+
+145 #ifdef 
+__USE_BSD
+
+
+146 
+tm_gmtoff
+;
+
+147 cڡ *
+tm_z�e
+;
+
+149 
+__tm_gmtoff
+;
+
+150 cڡ *
+__tm_z�e
+;
+
+153 
+__END_NAMESPACE_STD
+
+
+154 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+155 
+	$__USING_NAMESPACE_STD
+(
+tm
+)
+
+159 #ifde�
+__USE_POSIX199309
+
+
+161 
+	s�im��ec
+
+
+163 
+time�ec
+ 
+�_��rv�
+;
+
+164 
+time�ec
+ 
+�_v�ue
+;
+
+168 
+sigev�t
+;
+
+172 #ifde�
+__USE_XOPEN2K
+
+
+173 #i�de�
+__pid_t_def�ed
+
+
+174 
+__pid_t
+ 
+	tpid_t
+;
+
+175 
+	#__pid_t_def�ed
+
+
+	)
+
+180 #ifde�
+__USE_ISOC11
+
+
+182 
+	#TIME_UTC
+ 1
+
+	)
+
+186 
+__BEGIN_NAMESPACE_STD
+
+
+189 
+�ock_t
+ 
+	$�ock
+ (�
+__THROW
+;
+
+192 
+time_t
+ 
+	$time
+ (
+time_t
+ *
+__tim�
+�
+__THROW
+;
+
+195 

+	$dif�ime
+ (
+time_t
+ 
+__time1
+,�ime_�
+__time0
+)
+
+196 
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+199 
+time_t
+ 
+	$mktime
+ (
+tm
+ *
+__�
+�
+__THROW
+;
+
+205 
+size_t
+ 
+	$�r�ime
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__maxsize
+,
+
+206 cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+207 cڡ 
+tm
+ *
+__��ri�
+ 
+__�
+�
+__THROW
+;
+
+208 
+__END_NAMESPACE_STD
+
+
+210 #ifde�
+__USE_XOPEN
+
+
+213 
*
+	$��time
+ (cڡ *
+__��ri�
+ 
+__s
+,
+
+214 cڡ *
+__��ri�
+ 
+__fmt
+, 
+tm
+ *
+__�
+)
+
+215 
+__THROW
+;
+
+218 #ifde�
+__USE_XOPEN2K8
+
+
+221 
+	~<xlo��.h
+>
+
+223 
+size_t
+ 
+	$�r�ime_l
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__maxsize
+,
+
+224 cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+225 cڡ 
+tm
+ *
+__��ri�
+ 
+__�
+,
+
+226 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+229 #ifde�
+__USE_GNU
+
+
+230 
*
+	$��time_l
+ (cڡ *
+__��ri�
+ 
+__s
+,
+
+231 cڡ *
+__��ri�
+ 
+__fmt
+, 
+tm
+ *
+__�
+,
+
+232 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+236 
+__BEGIN_NAMESPACE_STD
+
+
+239 

+tm
+ *
+	$gmtime
+ (cڡ 
+time_t
+ *
+__tim�
+�
+__THROW
+;
+
+243 

+tm
+ *
+	$lo��ime
+ (cڡ 
+time_t
+ *
+__tim�
+�
+__THROW
+;
+
+244 
+__END_NAMESPACE_STD
+
+
+246 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+249 

+tm
+ *
+	$gmtime_r
+ (cڡ 
+time_t
+ *
+__��ri�
+ 
+__tim�
+,
+
+250 
+tm
+ *
+__��ri�
+ 
+__�
+�
+__THROW
+;
+
+254 

+tm
+ *
+	$lo��ime_r
+ (cڡ 
+time_t
+ *
+__��ri�
+ 
+__tim�
+,
+
+255 
+tm
+ *
+__��ri�
+ 
+__�
+�
+__THROW
+;
+
+258 
+__BEGIN_NAMESPACE_STD
+
+
+261 
*
+	$as�ime
+ (cڡ 
+tm
+ *
+__�
+�
+__THROW
+;
+
+264 
*
+	$�ime
+ (cڡ 
+time_t
+ *
+__tim�
+�
+__THROW
+;
+
+265 
+__END_NAMESPACE_STD
+
+
+267 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+272 
*
+	$as�ime_r
+ (cڡ 
+tm
+ *
+__��ri�
+ 
+__�
+,
+
+273 *
+__��ri�
+ 
+__buf
+�
+__THROW
+;
+
+276 
*
+	$�ime_r
+ (cڡ 
+time_t
+ *
+__��ri�
+ 
+__tim�
+,
+
+277 *
+__��ri�
+ 
+__buf
+�
+__THROW
+;
+
+282 
*
+__tz�me
+[2];
+
+283 

+__daylight
+;
+
+284 

+__timez�e
+;
+
+287 #ifdef 
+__USE_POSIX
+
+
+289 
*
+tz�me
+[2];
+
+293 

+	$tz�t
+ (�
+__THROW
+;
+
+296 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+
+
+297 

+daylight
+;
+
+298 

+timez�e
+;
+
+301 #ifde�
+__USE_SVID
+
+
+304 

+	$�ime
+ (cڡ 
+time_t
+ *
+__wh�
+�
+__THROW
+;
+
+310 
+	#__i��p
+(
+y�r
+) \
+
+311 ((
+y�r
+�% 4 =�0 && ((y�r�% 100 !�0 || (y�r�% 400 =�0))
+
+	)
+
+314 #ifde�
+__USE_MISC
+
+
+319 
+time_t
+ 
+	$timegm
+ (
+tm
+ *
+__�
+�
+__THROW
+;
+
+322 
+time_t
+ 
+	$tim�o�l
+ (
+tm
+ *
+__�
+�
+__THROW
+;
+
+325 

+	$dysize
+ (
+__y�r
+�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+329 #ifde�
+__USE_POSIX199309
+
+
+334 

+	`�no��p
+ (cڡ 
+time�ec
+ *
+__�que�ed_time
+,
+
+335 
+time�ec
+ *
+__�ma��g
+);
+
+339 

+	$�ock_g��s
+ (
+�ockid_t
+ 
+__�ock_id
+, 
+time�ec
+ *
+__�s
+�
+__THROW
+;
+
+342 

+	$�ock_g�time
+ (
+�ockid_t
+ 
+__�ock_id
+, 
+time�ec
+ *
+__�
+�
+__THROW
+;
+
+345 

+	$�ock_��ime
+ (
+�ockid_t
+ 
+__�ock_id
+, cڡ 
+time�ec
+ *
+__�
+)
+
+346 
+__THROW
+;
+
+348 #ifde�
+__USE_XOPEN2K
+
+
+353 

+	`�ock_�no��p
+ (
+�ockid_t
+ 
+__�ock_id
+, 
+__�ags
+,
+
+354 cڡ 
+time�ec
+ *
+__�q
+,
+
+355 
+time�ec
+ *
+__�m
+);
+
+358 

+	$�ock_g��u�ockid
+ (
+pid_t
+ 
+__pid
+, 
+�ockid_t
+ *
+__�ock_id
+�
+__THROW
+;
+
+363 

+	$tim�_���
+ (
+�ockid_t
+ 
+__�ock_id
+,
+
+364 
+sigev�t
+ *
+__��ri�
+ 
+__evp
+,
+
+365 
+tim�_t
+ *
+__��ri�
+ 
+__tim�id
+�
+__THROW
+;
+
+368 

+	$tim�_d��e
+ (
+tim�_t
+ 
+__tim�id
+�
+__THROW
+;
+
+371 

+	$tim�_��ime
+ (
+tim�_t
+ 
+__tim�id
+, 
+__�ags
+,
+
+372 cڡ 
+�im��ec
+ *
+__��ri�
+ 
+__v�ue
+,
+
+373 
+�im��ec
+ *
+__��ri�
+ 
+__ov�ue
+�
+__THROW
+;
+
+376 

+	$tim�_g�time
+ (
+tim�_t
+ 
+__tim�id
+, 
+�im��ec
+ *
+__v�ue
+)
+
+377 
+__THROW
+;
+
+380 

+	$tim�_g�ov�run
+ (
+tim�_t
+ 
+__tim�id
+�
+__THROW
+;
+
+384 #ifde�
+__USE_ISOC11
+
+
+386 

+	$time�ec_g�
+ (
+time�ec
+ *
+__ts
+, 
+__ba�
+)
+
+387 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+391 #ifde�
+__USE_XOPEN_EXTENDED
+
+
+403 

+g�d�e_�r
+;
+
+412 

+tm
+ *
+	`g�d�e
+ (cڡ *
+__�r�g
+);
+
+415 #ifde�
+__USE_GNU
+
+
+426 

+	`g�d�e_r
+ (cڡ *
+__��ri�
+ 
+__�r�g
+,
+
+427 
+tm
+ *
+__��ri�
+ 
+__�sbu�
+);
+
+430 
+__END_DECLS
+
+
+	@/usr/include/unistd.h
+
+22 #i�def 
+_UNISTD_H
+
+
+23 
+	#_UNISTD_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+27 
+	g__BEGIN_DECLS
+
+
+32 #ifde�
+__USE_XOPEN2K8
+
+
+34 
+	#_POSIX_VERSION
+ 200809L
+
+	)
+
+35 #�i�
+def�ed
+ 
+__USE_XOPEN2K
+
+
+37 
+	#_POSIX_VERSION
+ 200112L
+
+	)
+
+38 #�i�
+def�ed
+ 
+__USE_POSIX199506
+
+
+40 
+	#_POSIX_VERSION
+ 199506L
+
+	)
+
+41 #�i�
+def�ed
+ 
+__USE_POSIX199309
+
+
+43 
+	#_POSIX_VERSION
+ 199309L
+
+	)
+
+46 
+	#_POSIX_VERSION
+ 199009L
+
+	)
+
+52 #ifde�
+__USE_XOPEN2K8
+
+
+53 
+	#__POSIX2_THIS_VERSION
+ 200809L
+
+	)
+
+55 #�i�
+def�ed
+ 
+__USE_XOPEN2K
+
+
+57 
+	#__POSIX2_THIS_VERSION
+ 200112L
+
+	)
+
+58 #�i�
+def�ed
+ 
+__USE_POSIX199506
+
+
+60 
+	#__POSIX2_THIS_VERSION
+ 199506L
+
+	)
+
+63 
+	#__POSIX2_THIS_VERSION
+ 199209L
+
+	)
+
+67 
+	#_POSIX2_VERSION
+ 
+__POSIX2_THIS_VERSION
+
+
+	)
+
+71 
+	#_POSIX2_C_BIND
+ 
+__POSIX2_THIS_VERSION
+
+
+	)
+
+75 
+	#_POSIX2_C_DEV
+ 
+__POSIX2_THIS_VERSION
+
+
+	)
+
+79 
+	#_POSIX2_SW_DEV
+ 
+__POSIX2_THIS_VERSION
+
+
+	)
+
+83 
+	#_POSIX2_LOCALEDEF
+ 
+__POSIX2_THIS_VERSION
+
+
+	)
+
+86 #ifde�
+__USE_XOPEN2K8
+
+
+87 
+	#_XOPEN_VERSION
+ 700
+
+	)
+
+88 #�i�
+def�ed
+ 
+__USE_XOPEN2K
+
+
+89 
+	#_XOPEN_VERSION
+ 600
+
+	)
+
+90 #�i�
+def�ed
+ 
+__USE_UNIX98
+
+
+91 
+	#_XOPEN_VERSION
+ 500
+
+	)
+
+93 
+	#_XOPEN_VERSION
+ 4
+
+	)
+
+97 
+	#_XOPEN_XCU_VERSION
+ 4
+
+	)
+
+100 
+	#_XOPEN_XPG2
+ 1
+
+	)
+
+101 
+	#_XOPEN_XPG3
+ 1
+
+	)
+
+102 
+	#_XOPEN_XPG4
+ 1
+
+	)
+
+105 
+	#_XOPEN_UNIX
+ 1
+
+	)
+
+108 
+	#_XOPEN_CRYPT
+ 1
+
+	)
+
+112 
+	#_XOPEN_ENH_I18N
+ 1
+
+	)
+
+115 
+	#_XOPEN_LEGACY
+ 1
+
+	)
+
+202 
+	~<b�s/posix_�t.h
+>
+
+205 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K
+
+
+206 
+	~<b�s/�v��m�ts.h
+>
+
+210 
+	#STDIN_FILENO
+ 0
+
+	)
+
+211 
+	#STDOUT_FILENO
+ 1
+
+	)
+
+212 
+	#STDERR_FILENO
+ 2
+
+	)
+
+217 
+	~<b�s/ty�s.h
+>
+
+219 #i�def 
+__ssize_t_def�ed
+
+
+220 
+__ssize_t
+ 
+	tssize_t
+;
+
+221 
+	#__ssize_t_def�ed
+
+
+	)
+
+224 
+	#__�ed_size_t
+
+
+	)
+
+225 
+	#__�ed_NULL
+
+
+	)
+
+226 
+	~<�ddef.h
+>
+
+228 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K
+
+
+231 #i�de�
+__gid_t_def�ed
+
+
+232 
+__gid_t
+ 
+	tgid_t
+;
+
+233 
+	#__gid_t_def�ed
+
+
+	)
+
+236 #i�de�
+__uid_t_def�ed
+
+
+237 
+__uid_t
+ 
+	tuid_t
+;
+
+238 
+	#__uid_t_def�ed
+
+
+	)
+
+241 #i�de�
+__off_t_def�ed
+
+
+242 #i�de�
+__USE_FILE_OFFSET64
+
+
+243 
+__off_t
+ 
+	toff_t
+;
+
+245 
+__off64_t
+ 
+	toff_t
+;
+
+247 
+	#__off_t_def�ed
+
+
+	)
+
+249 #i�
+def�ed
+ 
+__USE_LARGEFILE64
+ && !def�ed 
+__off64_t_def�ed
+
+
+250 
+__off64_t
+ 
+	toff64_t
+;
+
+251 
+	#__off64_t_def�ed
+
+
+	)
+
+254 #i�de�
+__u�c�ds_t_def�ed
+
+
+255 
+__u�c�ds_t
+ 
+	tu�c�ds_t
+;
+
+256 
+	#__u�c�ds_t_def�ed
+
+
+	)
+
+259 #i�de�
+__pid_t_def�ed
+
+
+260 
+__pid_t
+ 
+	tpid_t
+;
+
+261 
+	#__pid_t_def�ed
+
+
+	)
+
+265 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K
+
+
+266 #i�de�
+__���_t_def�ed
+
+
+267 
+__���_t
+ 
+	t���_t
+;
+
+268 
+	#__���_t_def�ed
+
+
+	)
+
+272 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN
+
+
+273 #i�de�
+__sock�n_t_def�ed
+
+
+274 
+__sock�n_t
+ 
+	tsock�n_t
+;
+
+275 
+	#__sock�n_t_def�ed
+
+
+	)
+
+281 
+	#R_OK
+ 4
+
+	)
+
+282 
+	#W_OK
+ 2
+
+	)
+
+283 
+	#X_OK
+ 1
+
+	)
+
+284 
+	#F_OK
+ 0
+
+	)
+
+287 

+	$ac�ss
+ (cڡ *
+__�me
+, 
+__ty�
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+289 #ifde�
+__USE_GNU
+
+
+292 

+	$euidac�ss
+ (cڡ *
+__�me
+, 
+__ty�
+)
+
+293 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+296 

+	$�c�ss
+ (cڡ *
+__�me
+, 
+__ty�
+)
+
+297 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+300 #ifde�
+__USE_ATFILE
+
+
+304 

+	$�c�s�t
+ (
+__fd
+, cڡ *
+__f�e
+, 
+__ty�
+, 
+__�ag
+)
+
+305 
+__THROW
+ 
+	`__n�nu�
+ ((2)�
+__wur
+;
+
+310 #i�def 
+_STDIO_H
+
+
+311 
+	#SEEK_SET
+ 0
+
+	)
+
+312 
+	#SEEK_CUR
+ 1
+
+	)
+
+313 
+	#SEEK_END
+ 2
+
+	)
+
+314 #ifde�
+__USE_GNU
+
+
+315 
+	#SEEK_DATA
+ 3
+
+	)
+
+316 
+	#SEEK_HOLE
+ 4
+
+	)
+
+320 #i�
+def�ed
+ 
+__USE_BSD
+ && !def�ed 
+L_SET
+
+
+322 
+	#L_SET
+ 
+SEEK_SET
+
+
+	)
+
+323 
+	#L_INCR
+ 
+SEEK_CUR
+
+
+	)
+
+324 
+	#L_XTND
+ 
+SEEK_END
+
+
+	)
+
+333 #i�de�
+__USE_FILE_OFFSET64
+
+
+334 
+__off_t
+ 
+	$l�ek
+ (
+__fd
+, 
+__off_t
+ 
+__off�t
+, 
+__wh��
+�
+__THROW
+;
+
+336 #ifde�
+__REDIRECT_NTH
+
+
+337 
+__off64_t
+ 
+	`__REDIRECT_NTH
+ (
+l�ek
+,
+
+338 (
+__fd
+, 
+__off64_t
+ 
+__off�t
+, 
+__wh��
+),
+
+339 
+l�ek64
+);
+
+341 
+	#l�ek
+ 
+l�ek64
+
+
+	)
+
+344 #ifde�
+__USE_LARGEFILE64
+
+
+345 
+__off64_t
+ 
+	$l�ek64
+ (
+__fd
+, 
+__off64_t
+ 
+__off�t
+, 
+__wh��
+)
+
+346 
+__THROW
+;
+
+353 

+	`�o�
+ (
+__fd
+);
+
+360 
+ssize_t
+ 
+	$�ad
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+�
+__wur
+;
+
+366 
+ssize_t
+ 
+	$wr�e
+ (
+__fd
+, cڡ *
+__buf
+, 
+size_t
+ 
+__n
+�
+__wur
+;
+
+368 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K8
+
+
+369 #i�de�
+__USE_FILE_OFFSET64
+
+
+376 
+ssize_t
+ 
+	$��d
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+377 
+__off_t
+ 
+__off�t
+�
+__wur
+;
+
+384 
+ssize_t
+ 
+	$pwr�e
+ (
+__fd
+, cڡ *
+__buf
+, 
+size_t
+ 
+__n
+,
+
+385 
+__off_t
+ 
+__off�t
+�
+__wur
+;
+
+387 #ifde�
+__REDIRECT
+
+
+388 
+ssize_t
+ 
+	`__REDIRECT
+ (
+��d
+, (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+389 
+__off64_t
+ 
+__off�t
+),
+
+390 
+��d64
+�
+__wur
+;
+
+391 
+ssize_t
+ 
+	`__REDIRECT
+ (
+pwr�e
+, (
+__fd
+, cڡ *
+__buf
+,
+
+392 
+size_t
+ 
+__nby�s
+, 
+__off64_t
+ 
+__off�t
+),
+
+393 
+pwr�e64
+�
+__wur
+;
+
+395 
+	#��d
+ 
+��d64
+
+
+	)
+
+396 
+	#pwr�e
+ 
+pwr�e64
+
+
+	)
+
+400 #ifde�
+__USE_LARGEFILE64
+
+
+404 
+ssize_t
+ 
+	$��d64
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+405 
+__off64_t
+ 
+__off�t
+�
+__wur
+;
+
+408 
+ssize_t
+ 
+	$pwr�e64
+ (
+__fd
+, cڡ *
+__buf
+, 
+size_t
+ 
+__n
+,
+
+409 
+__off64_t
+ 
+__off�t
+�
+__wur
+;
+
+417 

+	$p�e
+ (
+__p�edes
+[2]�
+__THROW
+ 
+__wur
+;
+
+419 #ifde�
+__USE_GNU
+
+
+422 

+	$p�e2
+ (
+__p�edes
+[2], 
+__�ags
+�
+__THROW
+ 
+__wur
+;
+
+432 

+	$��m
+ (
+__�c�ds
+�
+__THROW
+;
+
+444 

+	`��p
+ (
+__�c�ds
+);
+
+446 #i�(
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ && !def�ed 
+__USE_XOPEN2K8
+) \
+
+447 || 
+def�ed
+ 
+__USE_BSD
+
+
+452 
+__u�c�ds_t
+ 
+	$u��m
+ (
+__u�c�ds_t
+ 
+__v�ue
+, __u�c�ds_�
+__��rv�
+)
+
+453 
+__THROW
+;
+
+460 

+	`u��p
+ (
+__u�c�ds_t
+ 
+__u�c�ds
+);
+
+469 

+	`�u�
+ ();
+
+473 

+	$chown
+ (cڡ *
+__f�e
+, 
+__uid_t
+ 
+__ow�r
+, 
+__gid_t
+ 
+__group
+)
+
+474 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+476 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K8
+
+
+478 

+	$fchown
+ (
+__fd
+, 
+__uid_t
+ 
+__ow�r
+, 
+__gid_t
+ 
+__group
+�
+__THROW
+ 
+__wur
+;
+
+483 

+	$lchown
+ (cڡ *
+__f�e
+, 
+__uid_t
+ 
+__ow�r
+, 
+__gid_t
+ 
+__group
+)
+
+484 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+488 #ifde�
+__USE_ATFILE
+
+
+491 

+	$fchow�t
+ (
+__fd
+, cڡ *
+__f�e
+, 
+__uid_t
+ 
+__ow�r
+,
+
+492 
+__gid_t
+ 
+__group
+, 
+__�ag
+)
+
+493 
+__THROW
+ 
+	`__n�nu�
+ ((2)�
+__wur
+;
+
+497 

+	$chd�
+ (cڡ *
+__�th
+�
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+499 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K8
+
+
+501 

+	$fchd�
+ (
+__fd
+�
+__THROW
+ 
+__wur
+;
+
+511 
*
+	$g�cwd
+ (*
+__buf
+, 
+size_t
+ 
+__size
+�
+__THROW
+ 
+__wur
+;
+
+513 #ifdef 
+__USE_GNU
+
+
+517 
*
+	$g�_cu��t_d�_�me
+ (�
+__THROW
+;
+
+520 #i�(
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ && !def�ed 
+__USE_XOPEN2K8
+) \
+
+521 || 
+def�ed
+ 
+__USE_BSD
+
+
+525 
*
+	$g�wd
+ (*
+__buf
+)
+
+526 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__��ibu�_d����d__
+ 
+__wur
+;
+
+531 

+	$dup
+ (
+__fd
+�
+__THROW
+ 
+__wur
+;
+
+534 

+	$dup2
+ (
+__fd
+, 
+__fd2
+�
+__THROW
+;
+
+536 #ifde�
+__USE_GNU
+
+
+539 

+	$dup3
+ (
+__fd
+, 
+__fd2
+, 
+__�ags
+�
+__THROW
+;
+
+543 
**
+__�v��
+;
+
+544 #ifde�
+__USE_GNU
+
+
+545 
**
+�v��
+;
+
+551 

+	$execve
+ (cڡ *
+__�th
+, *cڡ 
+__�gv
+[],
+
+552 *cڡ 
+__�vp
+[]�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+554 #ifde�
+__USE_XOPEN2K8
+
+
+557 

+	$�xecve
+ (
+__fd
+, *cڡ 
+__�gv
+[], *cڡ 
+__�vp
+[])
+
+558 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+563 

+	$execv
+ (cڡ *
+__�th
+, *cڡ 
+__�gv
+[])
+
+564 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+568 

+	$exe�e
+ (cڡ *
+__�th
+, cڡ *
+__�g
+, ...)
+
+569 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+573 

+	$exe�
+ (cڡ *
+__�th
+, cڡ *
+__�g
+, ...)
+
+574 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+578 

+	$execvp
+ (cڡ *
+__f�e
+, *cڡ 
+__�gv
+[])
+
+579 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+584 

+	$exe�p
+ (cڡ *
+__f�e
+, cڡ *
+__�g
+, ...)
+
+585 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+587 #ifde�
+__USE_GNU
+
+
+590 

+	$execv�
+ (cڡ *
+__f�e
+, *cڡ 
+__�gv
+[],
+
+591 *cڡ 
+__�vp
+[])
+
+592 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+596 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN
+
+
+598 

+	$ni�
+ (
+__�c
+�
+__THROW
+ 
+__wur
+;
+
+603 

+	$_ex�
+ (
+__��us
+�
+	`__��ibu�__
+ ((
+__nܑu�__
+));
+
+609 
+	~<b�s/c��ame.h
+>
+
+612 

+	$�thc�f
+ (cڡ *
+__�th
+, 
+__�me
+)
+
+613 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+616 

+	$�hc�f
+ (
+__fd
+, 
+__�me
+�
+__THROW
+;
+
+619 

+	$sysc�f
+ (
+__�me
+�
+__THROW
+;
+
+621 #ifdef 
+__USE_POSIX2
+
+
+623 
+size_t
+ 
+	$c�f�r
+ (
+__�me
+, *
+__buf
+, 
+size_t
+ 
+__�n
+�
+__THROW
+;
+
+628 
+__pid_t
+ 
+	$g�pid
+ (�
+__THROW
+;
+
+631 
+__pid_t
+ 
+	$g��id
+ (�
+__THROW
+;
+
+634 
+__pid_t
+ 
+	$g�pg�
+ (�
+__THROW
+;
+
+637 
+__pid_t
+ 
+	$__g�pgid
+ (
+__pid_t
+ 
+__pid
+�
+__THROW
+;
+
+638 #i�
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K8
+
+
+639 
+__pid_t
+ 
+	$g�pgid
+ (
+__pid_t
+ 
+__pid
+�
+__THROW
+;
+
+646 

+	$��gid
+ (
+__pid_t
+ 
+__pid
+, __pid_�
+__pgid
+�
+__THROW
+;
+
+648 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+660 

+	$��g�
+ (�
+__THROW
+;
+
+667 
+__pid_t
+ 
+	$�tsid
+ (�
+__THROW
+;
+
+669 #i�
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K8
+
+
+671 
+__pid_t
+ 
+	$g�sid
+ (
+__pid_t
+ 
+__pid
+�
+__THROW
+;
+
+675 
+__uid_t
+ 
+	$g�uid
+ (�
+__THROW
+;
+
+678 
+__uid_t
+ 
+	$g�euid
+ (�
+__THROW
+;
+
+681 
+__gid_t
+ 
+	$g�gid
+ (�
+__THROW
+;
+
+684 
+__gid_t
+ 
+	$g�egid
+ (�
+__THROW
+;
+
+689 

+	$g�groups
+ (
+__size
+, 
+__gid_t
+ 
+__li�
+[]�
+__THROW
+ 
+__wur
+;
+
+691 #ifdef 
+__USE_GNU
+
+
+693 

+	$group_memb�
+ (
+__gid_t
+ 
+__gid
+�
+__THROW
+;
+
+700 

+	$�tuid
+ (
+__uid_t
+ 
+__uid
+�
+__THROW
+ 
+__wur
+;
+
+702 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+705 

+	$��euid
+ (
+__uid_t
+ 
+__ruid
+, __uid_�
+__euid
+�
+__THROW
+ 
+__wur
+;
+
+708 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN2K
+
+
+710 

+	$��uid
+ (
+__uid_t
+ 
+__uid
+�
+__THROW
+ 
+__wur
+;
+
+717 

+	$�tgid
+ (
+__gid_t
+ 
+__gid
+�
+__THROW
+ 
+__wur
+;
+
+719 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+722 

+	$��egid
+ (
+__gid_t
+ 
+__rgid
+, __gid_�
+__egid
+�
+__THROW
+ 
+__wur
+;
+
+725 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN2K
+
+
+727 

+	$��gid
+ (
+__gid_t
+ 
+__gid
+�
+__THROW
+ 
+__wur
+;
+
+730 #ifde�
+__USE_GNU
+
+
+733 

+	$g��suid
+ (
+__uid_t
+ *
+__ruid
+, __uid_�*
+__euid
+, __uid_�*
+__suid
+)
+
+734 
+__THROW
+;
+
+738 

+	$g��sgid
+ (
+__gid_t
+ *
+__rgid
+, __gid_�*
+__egid
+, __gid_�*
+__sgid
+)
+
+739 
+__THROW
+;
+
+743 

+	$��esuid
+ (
+__uid_t
+ 
+__ruid
+, __uid_�
+__euid
+, __uid_�
+__suid
+)
+
+744 
+__THROW
+ 
+__wur
+;
+
+748 

+	$��esgid
+ (
+__gid_t
+ 
+__rgid
+, __gid_�
+__egid
+, __gid_�
+__sgid
+)
+
+749 
+__THROW
+ 
+__wur
+;
+
+756 
+__pid_t
+ 
+	$f�k
+ (�
+__THROWNL
+;
+
+758 #i�(
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ && !def�ed 
+__USE_XOPEN2K8
+) \
+
+759 || 
+def�ed
+ 
+__USE_BSD
+
+
+764 
+__pid_t
+ 
+	$vf�k
+ (�
+__THROW
+;
+
+770 
*
+	$�y�me
+ (
+__fd
+�
+__THROW
+;
+
+774 

+	$�y�me_r
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+)
+
+775 
+__THROW
+ 
+	`__n�nu�
+ ((2)�
+__wur
+;
+
+779 

+	$i��y
+ (
+__fd
+�
+__THROW
+;
+
+781 #i�
+def�ed
+ 
+__USE_BSD
+ \
+
+782 || (
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ && !def�ed 
+__USE_UNIX98
+)
+
+785 

+	$�y��
+ (�
+__THROW
+;
+
+790 

+	$l�k
+ (cڡ *
+__�om
+, cڡ *
+__to
+)
+
+791 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2)�
+__wur
+;
+
+793 #ifde�
+__USE_ATFILE
+
+
+796 

+	$l�k�
+ (
+__�omfd
+, cڡ *
+__�om
+, 
+__tofd
+,
+
+797 cڡ *
+__to
+, 
+__�ags
+)
+
+798 
+__THROW
+ 
+	`__n�nu�
+ ((2, 4)�
+__wur
+;
+
+801 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K
+
+
+803 

+	$syml�k
+ (cڡ *
+__�om
+, cڡ *
+__to
+)
+
+804 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2)�
+__wur
+;
+
+809 
+ssize_t
+ 
+	$�adl�k
+ (cڡ *
+__��ri�
+ 
+__�th
+,
+
+810 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+)
+
+811 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2)�
+__wur
+;
+
+814 #ifde�
+__USE_ATFILE
+
+
+816 

+	$syml�k�
+ (cڡ *
+__�om
+, 
+__tofd
+,
+
+817 cڡ *
+__to
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 3)�
+__wur
+;
+
+820 
+ssize_t
+ 
+	$�adl�k�
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__�th
+,
+
+821 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+)
+
+822 
+__THROW
+ 
+	`__n�nu�
+ ((2, 3)�
+__wur
+;
+
+826 

+	$uƚk
+ (cڡ *
+__�me
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+828 #ifde�
+__USE_ATFILE
+
+
+830 

+	$uƚk�
+ (
+__fd
+, cڡ *
+__�me
+, 
+__�ag
+)
+
+831 
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+835 

+	$rmd�
+ (cڡ *
+__�th
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+839 
+__pid_t
+ 
+	$tcg�pg�
+ (
+__fd
+�
+__THROW
+;
+
+842 

+	$tc��g�
+ (
+__fd
+, 
+__pid_t
+ 
+__pg�_id
+�
+__THROW
+;
+
+849 
*
+	`g�log�
+ ();
+
+850 #i�
+def�ed
+ 
+__USE_REENTRANT
+ || def�ed 
+__USE_POSIX199506
+
+
+857 

+	$g�log�_r
+ (*
+__�me
+, 
+size_t
+ 
+__�me_�n
+�
+	`__n�nu�
+ ((1));
+
+860 #ifdef 
+__USE_BSD
+
+
+862 

+	$��og�
+ (cڡ *
+__�me
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+866 #ifdef 
+__USE_POSIX2
+
+
+870 
+	#__�ed_g��t
+
+
+	)
+
+871 
+	~<g��t.h
+>
+
+875 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K
+
+
+879 

+	$g�ho��me
+ (*
+__�me
+, 
+size_t
+ 
+__�n
+�
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+883 #i�
+def�ed
+ 
+__USE_BSD
+ || (def�ed 
+__USE_XOPEN
+ && !def�ed 
+__USE_UNIX98
+)
+
+886 

+	$�tho��me
+ (cڡ *
+__�me
+, 
+size_t
+ 
+__�n
+)
+
+887 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+891 

+	$�tho�id
+ (
+__id
+�
+__THROW
+ 
+__wur
+;
+
+897 

+	$g�doma��me
+ (*
+__�me
+, 
+size_t
+ 
+__�n
+)
+
+898 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+899 

+	$�tdoma��me
+ (cڡ *
+__�me
+, 
+size_t
+ 
+__�n
+)
+
+900 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+906 

+	$vh�gup
+ (�
+__THROW
+;
+
+909 

+	$�voke
+ (cڡ *
+__f�e
+�
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+917 

+	$�of�
+ (*
+__�m�e_buf�r
+, 
+size_t
+ 
+__size
+,
+
+918 
+size_t
+ 
+__off�t
+, 
+__s��
+)
+
+919 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+925 

+	$ac�
+ (cڡ *
+__�me
+�
+__THROW
+;
+
+929 
*
+	$g�u�rsh�l
+ (�
+__THROW
+;
+
+930 

+	$�du�rsh�l
+ (�
+__THROW
+;
+
+931 

+	$�tu�rsh�l
+ (�
+__THROW
+;
+
+937 

+	$d�m�
+ (
+__nochd�
+, 
+__no�o�
+�
+__THROW
+ 
+__wur
+;
+
+941 #i�
+def�ed
+ 
+__USE_BSD
+ || (def�ed 
+__USE_XOPEN
+ && !def�ed 
+__USE_XOPEN2K
+)
+
+944 

+	$chro�
+ (cڡ *
+__�th
+�
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+948 
*
+	$g��ss
+ (cڡ *
+__�om�
+�
+	`__n�nu�
+ ((1));
+
+956 

+	`fsync
+ (
+__fd
+);
+
+959 #ifde�
+__USE_GNU
+
+
+962 

+	$syncfs
+ (
+__fd
+�
+__THROW
+;
+
+966 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+969 

+	`g�ho�id
+ ();
+
+972 

+	$sync
+ (�
+__THROW
+;
+
+975 #i�
+def�ed
+ 
+__USE_BSD
+ || !def�ed 
+__USE_XOPEN2K
+
+
+978 

+	$g��gesize
+ (�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+983 

+	$g�d�b�size
+ (�
+__THROW
+;
+
+989 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K8
+
+
+992 #i�de�
+__USE_FILE_OFFSET64
+
+
+993 

+	$�un��
+ (cڡ *
+__f�e
+, 
+__off_t
+ 
+__�ngth
+)
+
+994 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+996 #ifde�
+__REDIRECT_NTH
+
+
+997 

+	`__REDIRECT_NTH
+ (
+�un��
+,
+
+998 (cڡ *
+__f�e
+, 
+__off64_t
+ 
+__�ngth
+),
+
+999 
+�un��64
+�
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+1001 
+	#�un��
+ 
+�un��64
+
+
+	)
+
+1004 #ifde�
+__USE_LARGEFILE64
+
+
+1005 

+	$�un��64
+ (cڡ *
+__f�e
+, 
+__off64_t
+ 
+__�ngth
+)
+
+1006 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+1011 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_POSIX199309
+ \
+
+1012 || 
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K
+
+
+1015 #i�de�
+__USE_FILE_OFFSET64
+
+
+1016 

+	$�run��
+ (
+__fd
+, 
+__off_t
+ 
+__�ngth
+�
+__THROW
+ 
+__wur
+;
+
+1018 #ifde�
+__REDIRECT_NTH
+
+
+1019 

+	`__REDIRECT_NTH
+ (
+�run��
+, (
+__fd
+, 
+__off64_t
+ 
+__�ngth
+),
+
+1020 
+�run��64
+�
+__wur
+;
+
+1022 
+	#�run��
+ 
+�run��64
+
+
+	)
+
+1025 #ifde�
+__USE_LARGEFILE64
+
+
+1026 

+	$�run��64
+ (
+__fd
+, 
+__off64_t
+ 
+__�ngth
+�
+__THROW
+ 
+__wur
+;
+
+1032 #i�(
+def�ed
+ 
+__USE_XOPEN_EXTENDED
+ && !def�ed 
+__USE_XOPEN2K
+) \
+
+1033 || 
+def�ed
+ 
+__USE_MISC
+
+
+1037 

+	$brk
+ (*
+__addr
+�
+__THROW
+ 
+__wur
+;
+
+1043 
*
+	$sbrk
+ (
+���_t
+ 
+__d��
+�
+__THROW
+;
+
+1047 #ifde�
+__USE_MISC
+
+
+1058 

+	$sys��
+ (
+__sy�o
+, ...�
+__THROW
+;
+
+1063 #i�(
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN_EXTENDED
+�&& !def�ed 
+F_LOCK
+
+
+1075 
+	#F_ULOCK
+ 0
+
+	)
+
+1076 
+	#F_LOCK
+ 1
+
+	)
+
+1077 
+	#F_TLOCK
+ 2
+
+	)
+
+1078 
+	#F_TEST
+ 3
+
+	)
+
+1080 #i�de�
+__USE_FILE_OFFSET64
+
+
+1081 

+	$lockf
+ (
+__fd
+, 
+__cmd
+, 
+__off_t
+ 
+__�n
+�
+__wur
+;
+
+1083 #ifde�
+__REDIRECT
+
+
+1084 

+	`__REDIRECT
+ (
+lockf
+, (
+__fd
+, 
+__cmd
+, 
+__off64_t
+ 
+__�n
+),
+
+1085 
+lockf64
+�
+__wur
+;
+
+1087 
+	#lockf
+ 
+lockf64
+
+
+	)
+
+1090 #ifde�
+__USE_LARGEFILE64
+
+
+1091 

+	$lockf64
+ (
+__fd
+, 
+__cmd
+, 
+__off64_t
+ 
+__�n
+�
+__wur
+;
+
+1096 #ifde�
+__USE_GNU
+
+
+1101 
+	#TEMP_FAILURE_RETRY
+(
+ex�essi�
+) \
+
+1102 (
+__ex�nsi�__
+ \
+
+1103 ({ 
+__�su�
+; \
+
+1104 d�
+__�su�
+ = (�(
+ex�essi�
+); \
+
+1105 
+__�su�
+ =�-1L && 
+��o
+ =�
+EINTR
+); \
+
+1106 
+__�su�
+; 
+	}
+}))
+
+	)
+
+1109 #i�
+def�ed
+ 
+__USE_POSIX199309
+ || def�ed 
+__USE_UNIX98
+
+
+1112 

+fd�async
+ (
+__f�des
+);
+
+1118 #ifdef 
+__USE_XOPEN
+
+
+1120 
*
+	$�y�
+ (cڡ *
+__key
+, cڡ *
+__��
+)
+
+1121 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+1125 

+	$��y�
+ (*
+__glibc_block
+, 
+__ed�ag
+)
+
+1126 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+1133 

+	$swab
+ (cڡ *
+__��ri�
+ 
+__�om
+, *__��ri� 
+__to
+,
+
+1134 
+ssize_t
+ 
+__n
+�
+__THROW
+ 
+	`__n�nu�
+ ((1, 2));
+
+1140 #i�
+def�ed
+ 
+__USE_XOPEN
+ && !def�ed 
+__USE_XOPEN2K
+
+
+1142 
*
+	$��mid
+ (*
+__s
+�
+__THROW
+;
+
+1147 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+
+
+1148 
+	~<b�s/uni�d.h
+>
+
+1151 
+__END_DECLS
+
+
+	@/usr/include/alloca.h
+
+18 #i�def 
+_ALLOCA_H
+
+
+19 
+	#_ALLOCA_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+23 
+	#__�ed_size_t
+
+
+	)
+
+24 
+	~<�ddef.h
+>
+
+26 
+	g__BEGIN_DECLS
+
+
+29 #unde�
+�lo�
+
+
+32 
*
+	$�lo�
+ (
+size_t
+ 
+__size
+�
+__THROW
+;
+
+34 #ifdef 
+__GNUC__
+
+
+35 
+	#�lo�
+(
+size
+�
+	`__bu�t�_�lo�
+ (size)
+
+	)
+
+38 
+__END_DECLS
+
+
+	@/usr/include/asm-generic/ioctl.h
+
+1 #i�de�
+_ASM_GENERIC_IOCTL_H
+
+
+2 
+	#_ASM_GENERIC_IOCTL_H
+
+
+	)
+
+22 
+	#_IOC_NRBITS
+ 8
+
+	)
+
+23 
+	#_IOC_TYPEBITS
+ 8
+
+	)
+
+30 #i�de�
+_IOC_SIZEBITS
+
+
+31 
+	#_IOC_SIZEBITS
+ 14
+
+	)
+
+34 #i�de�
+_IOC_DIRBITS
+
+
+35 
+	#_IOC_DIRBITS
+ 2
+
+	)
+
+38 
+	#_IOC_NRMASK
+ ((1 << 
+_IOC_NRBITS
+)-1)
+
+	)
+
+39 
+	#_IOC_TYPEMASK
+ ((1 << 
+_IOC_TYPEBITS
+)-1)
+
+	)
+
+40 
+	#_IOC_SIZEMASK
+ ((1 << 
+_IOC_SIZEBITS
+)-1)
+
+	)
+
+41 
+	#_IOC_DIRMASK
+ ((1 << 
+_IOC_DIRBITS
+)-1)
+
+	)
+
+43 
+	#_IOC_NRSHIFT
+ 0
+
+	)
+
+44 
+	#_IOC_TYPESHIFT
+ (
+_IOC_NRSHIFT
++
+_IOC_NRBITS
+)
+
+	)
+
+45 
+	#_IOC_SIZESHIFT
+ (
+_IOC_TYPESHIFT
++
+_IOC_TYPEBITS
+)
+
+	)
+
+46 
+	#_IOC_DIRSHIFT
+ (
+_IOC_SIZESHIFT
++
+_IOC_SIZEBITS
+)
+
+	)
+
+53 #i�de�
+_IOC_NONE
+
+
+54 
+	#_IOC_NONE
+ 0U
+
+	)
+
+57 #i�de�
+_IOC_WRITE
+
+
+58 
+	#_IOC_WRITE
+ 1U
+
+	)
+
+61 #i�de�
+_IOC_READ
+
+
+62 
+	#_IOC_READ
+ 2U
+
+	)
+
+65 
+	#_IOC
+(
+d�
+,
+ty�
+,
+�
+,
+size
+) \
+
+66 (((
+d�
+�<< 
+_IOC_DIRSHIFT
+) | \
+
+67 ((
+ty�
+�<< 
+_IOC_TYPESHIFT
+) | \
+
+68 ((
+�
+�<< 
+_IOC_NRSHIFT
+) | \
+
+69 ((
+size
+�<< 
+_IOC_SIZESHIFT
+))
+
+	)
+
+71 
+	#_IOC_TYPECHECK
+(
+t
+�(�))
+
+	)
+
+74 
+	#_IO
+(
+ty�
+,
+�
+�
+	`_IOC
+(
+_IOC_NONE
+,�y�),�r),0)
+
+	)
+
+75 
+	#_IOR
+(
+ty�
+,
+�
+,
+size
+�
+	`_IOC
+(
+_IOC_READ
+,�y�),�r),(
+	`_IOC_TYPECHECK
+(size)))
+
+	)
+
+76 
+	#_IOW
+(
+ty�
+,
+�
+,
+size
+�
+	`_IOC
+(
+_IOC_WRITE
+,�y�),�r),(
+	`_IOC_TYPECHECK
+(size)))
+
+	)
+
+77 
+	#_IOWR
+(
+ty�
+,
+�
+,
+size
+�
+	`_IOC
+(
+_IOC_READ
+|
+_IOC_WRITE
+,�y�),�r),(
+	`_IOC_TYPECHECK
+(size)))
+
+	)
+
+78 
+	#_IOR_BAD
+(
+ty�
+,
+�
+,
+size
+�
+	`_IOC
+(
+_IOC_READ
+,�y�),�r),(size))
+
+	)
+
+79 
+	#_IOW_BAD
+(
+ty�
+,
+�
+,
+size
+�
+	`_IOC
+(
+_IOC_WRITE
+,�y�),�r),(size))
+
+	)
+
+80 
+	#_IOWR_BAD
+(
+ty�
+,
+�
+,
+size
+�
+	`_IOC
+(
+_IOC_READ
+|
+_IOC_WRITE
+,�y�),�r),(size))
+
+	)
+
+83 
+	#_IOC_DIR
+(
+�
+�((�r�>> 
+_IOC_DIRSHIFT
+�& 
+_IOC_DIRMASK
+)
+
+	)
+
+84 
+	#_IOC_TYPE
+(
+�
+�((�r�>> 
+_IOC_TYPESHIFT
+�& 
+_IOC_TYPEMASK
+)
+
+	)
+
+85 
+	#_IOC_NR
+(
+�
+�((�r�>> 
+_IOC_NRSHIFT
+�& 
+_IOC_NRMASK
+)
+
+	)
+
+86 
+	#_IOC_SIZE
+(
+�
+�((�r�>> 
+_IOC_SIZESHIFT
+�& 
+_IOC_SIZEMASK
+)
+
+	)
+
+90 
+	#IOC_IN
+ (
+_IOC_WRITE
+ << 
+_IOC_DIRSHIFT
+)
+
+	)
+
+91 
+	#IOC_OUT
+ (
+_IOC_READ
+ << 
+_IOC_DIRSHIFT
+)
+
+	)
+
+92 
+	#IOC_INOUT
+ ((
+_IOC_WRITE
+|
+_IOC_READ
+�<< 
+_IOC_DIRSHIFT
+)
+
+	)
+
+93 
+	#IOCSIZE_MASK
+ (
+_IOC_SIZEMASK
+ << 
+_IOC_SIZESHIFT
+)
+
+	)
+
+94 
+	#IOCSIZE_SHIFT
+ (
+_IOC_SIZESHIFT
+)
+
+	)
+
+	@/usr/include/asm/sockios.h
+
+1 
+	~<asm-g��ic/sockios.h
+>
+
+	@/usr/include/bits/byteswap.h
+
+19 #i�!
+def�ed
+ 
+_BYTESWAP_H
+ && !def�ed 
+_NETINET_IN_H
+ && !def�ed 
+_ENDIAN_H
+
+
+23 #i�de�
+_BITS_BYTESWAP_H
+
+
+24 
+	#_BITS_BYTESWAP_H
+ 1
+
+	)
+
+26 
+	~<�u�s.h
+>
+
+27 
+	~<b�s/ty�s.h
+>
+
+28 
+	~<b�s/w�dsize.h
+>
+
+31 
+	#__bsw�_cڡ�t_16
+(
+x
+) \
+
+32 ((�((((
+x
+�>> 8�& 0xff�| (((x�& 0xff�<< 8)))
+
+	)
+
+35 
+	~<b�s/by�sw�-16.h
+>
+
+38 
+	#__bsw�_cڡ�t_32
+(
+x
+) \
+
+39 ((((
+x
+) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \
+
+40 (((
+x
+�& 0x0000ff00�<< 8�| (((x�& 0x000000ff�<< 24))
+
+	)
+
+42 #ifde�
+__GNUC__
+
+
+43 #i�
+__GNUC_PREREQ
+ (4, 3)
+
+44 
+__�l�e
+ 
+
+45 
+	$__bsw�_32
+ (
+__bsx
+)
+
+47  
+	`__bu�t�_bsw�32
+ (
+__bsx
+);
+
+48 
+	}
+}
+
+49 #�i�
+__GNUC__
+ >= 2
+
+50 #i�
+__WORDSIZE
+ =�64 || (
+def�ed
+ 
+__i486__
+ || def�ed 
+__��ium__
+ \
+
+51 || 
+def�ed
+ 
+	g__��ium�o__
+ || def�ed 
+	g__��ium4__
+ \
+
+52 || 
+def�ed
+ 
+	g__k8__
+ || def�ed 
+	g__�hl�__
+ \
+
+53 || 
+def�ed
+ 
+	g__k6__
+ || def�ed 
+	g__noc�a__
+ \
+
+54 || 
+def�ed
+ 
+	g__c�e2__
+ || def�ed 
+	g__geode__
+ \
+
+55 || 
+def�ed
+ 
+	g__amd�m10__
+)
+
+58 
+	#__bsw�_32
+(
+x
+) \
+
+59 (
+__ex�nsi�__
+ \
+
+60 ({ 
+__v
+, 
+__x
+ = (
+x
+); \
+
+61 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__x
+)) \
+
+62 
+__v
+ = 
+	`__bsw�_cڡ�t_32
+ (
+__x
+); \
+
+64 
+	`__asm__
+ ("bsw� %0" : "�" (
+__v
+�: "0" (
+__x
+)); \
+
+65 
+__v
+; }))
+
+	)
+
+67 
+	#__bsw�_32
+(
+x
+) \
+
+68 (
+__ex�nsi�__
+ \
+
+69 ({ 
+__v
+, 
+__x
+ = (
+x
+); \
+
+70 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__x
+)) \
+
+71 
+__v
+ = 
+	`__bsw�_cڡ�t_32
+ (
+__x
+); \
+
+73 
+	`__asm__
+ ("rorw $8, %w0;" \
+
+76 : "�" (
+__v
+) \
+
+77 : "0" (
+__x
+) \
+
+79 
+__v
+; }))
+
+	)
+
+82 
+	#__bsw�_32
+(
+x
+) \
+
+83 (
+__ex�nsi�__
+ \
+
+84 ({ 
+__x
+ = (
+x
+); 
+	`__bsw�_cڡ�t_32
+ (__x); }))
+
+	)
+
+87 
+__�l�e
+ 
+
+88 
+	$__bsw�_32
+ (
+__bsx
+)
+
+90  
+	`__bsw�_cڡ�t_32
+ (
+__bsx
+);
+
+91 
+	}
+}
+
+95 #i�
+__GNUC_PREREQ
+ (2, 0)
+
+97 
+	#__bsw�_cڡ�t_64
+(
+x
+) \
+
+98 (
+	`__ex�nsi�__
+ ((((
+x
+) & 0xff00000000000000ull) >> 56) \
+
+99 | (((
+x
+) & 0x00ff000000000000ull) >> 40) \
+
+100 | (((
+x
+) & 0x0000ff0000000000ull) >> 24) \
+
+101 | (((
+x
+) & 0x000000ff00000000ull) >> 8) \
+
+102 | (((
+x
+) & 0x00000000ff000000ull) << 8) \
+
+103 | (((
+x
+) & 0x0000000000ff0000ull) << 24) \
+
+104 | (((
+x
+) & 0x000000000000ff00ull) << 40) \
+
+105 | (((
+x
+�& 0x00000000000000ffu��<< 56)))
+
+	)
+
+107 #i�
+__GNUC_PREREQ
+ (4, 3)
+
+108 
+__�l�e
+ 
+__u�t64_t
+
+
+109 
+	$__bsw�_64
+ (
+__u�t64_t
+ 
+__bsx
+)
+
+111  
+	`__bu�t�_bsw�64
+ (
+__bsx
+);
+
+112 
+	}
+}
+
+113 #�i�
+__WORDSIZE
+ == 64
+
+114 
+	#__bsw�_64
+(
+x
+) \
+
+115 (
+__ex�nsi�__
+ \
+
+116 ({ 
+__u�t64_t
+ 
+__v
+, 
+__x
+ = (
+x
+); \
+
+117 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__x
+)) \
+
+118 
+__v
+ = 
+	`__bsw�_cڡ�t_64
+ (
+__x
+); \
+
+120 
+	`__asm__
+ ("bsw� %q0" : "�" (
+__v
+�: "0" (
+__x
+)); \
+
+121 
+__v
+; }))
+
+	)
+
+123 
+	#__bsw�_64
+(
+x
+) \
+
+124 (
+__ex�nsi�__
+ \
+
+125 ({ uni� { 
+__ex�nsi�__
+ 
+__u�t64_t
+ 
+__�
+; \
+
+126 
+__l
+[2]; } 
+__w
+, 
+__r
+; \
+
+127 i�(
+	`__bu�t�_cڡ�t_p
+ (
+x
+)) \
+
+128 
+__r
+.
+__�
+ = 
+	`__bsw�_cڡ�t_64
+ (
+x
+); \
+
+131 
+__w
+.
+__�
+ = (
+x
+); \
+
+132 
+__r
+.
+__l
+[0] = 
+	`__bsw�_32
+ (
+__w
+.__l[1]); \
+
+133 
+__r
+.
+__l
+[1] = 
+	`__bsw�_32
+ (
+__w
+.__l[0]); \
+
+135 
+__r
+.
+__�
+; }))
+
+	)
+
+138 
+	#__bsw�_cڡ�t_64
+(
+x
+) \
+
+139 ((((
+x
+) & 0xff00000000000000ull) >> 56) \
+
+140 | (((
+x
+) & 0x00ff000000000000ull) >> 40) \
+
+141 | (((
+x
+) & 0x0000ff0000000000ull) >> 24) \
+
+142 | (((
+x
+) & 0x000000ff00000000ull) >> 8) \
+
+143 | (((
+x
+) & 0x00000000ff000000ull) << 8) \
+
+144 | (((
+x
+) & 0x0000000000ff0000ull) << 24) \
+
+145 | (((
+x
+) & 0x000000000000ff00ull) << 40) \
+
+146 | (((
+x
+�& 0x00000000000000ffu��<< 56))
+
+	)
+
+148 
+__�l�e
+ 
+__u�t64_t
+
+
+149 
+	$__bsw�_64
+ (
+__u�t64_t
+ 
+__bsx
+)
+
+151  
+	`__bsw�_cڡ�t_64
+ (
+__bsx
+);
+
+152 
+	}
+}
+
+	@/usr/include/bits/confname.h
+
+19 #i�de�
+_UNISTD_H
+
+
+26 
+	m_PC_LINK_MAX
+,
+
+27 
+	#_PC_LINK_MAX
+ 
+_PC_LINK_MAX
+
+
+	)
+
+28 
+	m_PC_MAX_CANON
+,
+
+29 
+	#_PC_MAX_CANON
+ 
+_PC_MAX_CANON
+
+
+	)
+
+30 
+	m_PC_MAX_INPUT
+,
+
+31 
+	#_PC_MAX_INPUT
+ 
+_PC_MAX_INPUT
+
+
+	)
+
+32 
+	m_PC_NAME_MAX
+,
+
+33 
+	#_PC_NAME_MAX
+ 
+_PC_NAME_MAX
+
+
+	)
+
+34 
+	m_PC_PATH_MAX
+,
+
+35 
+	#_PC_PATH_MAX
+ 
+_PC_PATH_MAX
+
+
+	)
+
+36 
+	m_PC_PIPE_BUF
+,
+
+37 
+	#_PC_PIPE_BUF
+ 
+_PC_PIPE_BUF
+
+
+	)
+
+38 
+	m_PC_CHOWN_RESTRICTED
+,
+
+39 
+	#_PC_CHOWN_RESTRICTED
+ 
+_PC_CHOWN_RESTRICTED
+
+
+	)
+
+40 
+	m_PC_NO_TRUNC
+,
+
+41 
+	#_PC_NO_TRUNC
+ 
+_PC_NO_TRUNC
+
+
+	)
+
+42 
+	m_PC_VDISABLE
+,
+
+43 
+	#_PC_VDISABLE
+ 
+_PC_VDISABLE
+
+
+	)
+
+44 
+	m_PC_SYNC_IO
+,
+
+45 
+	#_PC_SYNC_IO
+ 
+_PC_SYNC_IO
+
+
+	)
+
+46 
+	m_PC_ASYNC_IO
+,
+
+47 
+	#_PC_ASYNC_IO
+ 
+_PC_ASYNC_IO
+
+
+	)
+
+48 
+	m_PC_PRIO_IO
+,
+
+49 
+	#_PC_PRIO_IO
+ 
+_PC_PRIO_IO
+
+
+	)
+
+50 
+	m_PC_SOCK_MAXBUF
+,
+
+51 
+	#_PC_SOCK_MAXBUF
+ 
+_PC_SOCK_MAXBUF
+
+
+	)
+
+52 
+	m_PC_FILESIZEBITS
+,
+
+53 
+	#_PC_FILESIZEBITS
+ 
+_PC_FILESIZEBITS
+
+
+	)
+
+54 
+	m_PC_REC_INCR_XFER_SIZE
+,
+
+55 
+	#_PC_REC_INCR_XFER_SIZE
+ 
+_PC_REC_INCR_XFER_SIZE
+
+
+	)
+
+56 
+	m_PC_REC_MAX_XFER_SIZE
+,
+
+57 
+	#_PC_REC_MAX_XFER_SIZE
+ 
+_PC_REC_MAX_XFER_SIZE
+
+
+	)
+
+58 
+	m_PC_REC_MIN_XFER_SIZE
+,
+
+59 
+	#_PC_REC_MIN_XFER_SIZE
+ 
+_PC_REC_MIN_XFER_SIZE
+
+
+	)
+
+60 
+	m_PC_REC_XFER_ALIGN
+,
+
+61 
+	#_PC_REC_XFER_ALIGN
+ 
+_PC_REC_XFER_ALIGN
+
+
+	)
+
+62 
+	m_PC_ALLOC_SIZE_MIN
+,
+
+63 
+	#_PC_ALLOC_SIZE_MIN
+ 
+_PC_ALLOC_SIZE_MIN
+
+
+	)
+
+64 
+	m_PC_SYMLINK_MAX
+,
+
+65 
+	#_PC_SYMLINK_MAX
+ 
+_PC_SYMLINK_MAX
+
+
+	)
+
+66 
+	m_PC_2_SYMLINKS
+
+
+67 
+	#_PC_2_SYMLINKS
+ 
+_PC_2_SYMLINKS
+
+
+	)
+
+73 
+	m_SC_ARG_MAX
+,
+
+74 
+	#_SC_ARG_MAX
+ 
+_SC_ARG_MAX
+
+
+	)
+
+75 
+	m_SC_CHILD_MAX
+,
+
+76 
+	#_SC_CHILD_MAX
+ 
+_SC_CHILD_MAX
+
+
+	)
+
+77 
+	m_SC_CLK_TCK
+,
+
+78 
+	#_SC_CLK_TCK
+ 
+_SC_CLK_TCK
+
+
+	)
+
+79 
+	m_SC_NGROUPS_MAX
+,
+
+80 
+	#_SC_NGROUPS_MAX
+ 
+_SC_NGROUPS_MAX
+
+
+	)
+
+81 
+	m_SC_OPEN_MAX
+,
+
+82 
+	#_SC_OPEN_MAX
+ 
+_SC_OPEN_MAX
+
+
+	)
+
+83 
+	m_SC_STREAM_MAX
+,
+
+84 
+	#_SC_STREAM_MAX
+ 
+_SC_STREAM_MAX
+
+
+	)
+
+85 
+	m_SC_TZNAME_MAX
+,
+
+86 
+	#_SC_TZNAME_MAX
+ 
+_SC_TZNAME_MAX
+
+
+	)
+
+87 
+	m_SC_JOB_CONTROL
+,
+
+88 
+	#_SC_JOB_CONTROL
+ 
+_SC_JOB_CONTROL
+
+
+	)
+
+89 
+	m_SC_SAVED_IDS
+,
+
+90 
+	#_SC_SAVED_IDS
+ 
+_SC_SAVED_IDS
+
+
+	)
+
+91 
+	m_SC_REALTIME_SIGNALS
+,
+
+92 
+	#_SC_REALTIME_SIGNALS
+ 
+_SC_REALTIME_SIGNALS
+
+
+	)
+
+93 
+	m_SC_PRIORITY_SCHEDULING
+,
+
+94 
+	#_SC_PRIORITY_SCHEDULING
+ 
+_SC_PRIORITY_SCHEDULING
+
+
+	)
+
+95 
+	m_SC_TIMERS
+,
+
+96 
+	#_SC_TIMERS
+ 
+_SC_TIMERS
+
+
+	)
+
+97 
+	m_SC_ASYNCHRONOUS_IO
+,
+
+98 
+	#_SC_ASYNCHRONOUS_IO
+ 
+_SC_ASYNCHRONOUS_IO
+
+
+	)
+
+99 
+	m_SC_PRIORITIZED_IO
+,
+
+100 
+	#_SC_PRIORITIZED_IO
+ 
+_SC_PRIORITIZED_IO
+
+
+	)
+
+101 
+	m_SC_SYNCHRONIZED_IO
+,
+
+102 
+	#_SC_SYNCHRONIZED_IO
+ 
+_SC_SYNCHRONIZED_IO
+
+
+	)
+
+103 
+	m_SC_FSYNC
+,
+
+104 
+	#_SC_FSYNC
+ 
+_SC_FSYNC
+
+
+	)
+
+105 
+	m_SC_MAPPED_FILES
+,
+
+106 
+	#_SC_MAPPED_FILES
+ 
+_SC_MAPPED_FILES
+
+
+	)
+
+107 
+	m_SC_MEMLOCK
+,
+
+108 
+	#_SC_MEMLOCK
+ 
+_SC_MEMLOCK
+
+
+	)
+
+109 
+	m_SC_MEMLOCK_RANGE
+,
+
+110 
+	#_SC_MEMLOCK_RANGE
+ 
+_SC_MEMLOCK_RANGE
+
+
+	)
+
+111 
+	m_SC_MEMORY_PROTECTION
+,
+
+112 
+	#_SC_MEMORY_PROTECTION
+ 
+_SC_MEMORY_PROTECTION
+
+
+	)
+
+113 
+	m_SC_MESSAGE_PASSING
+,
+
+114 
+	#_SC_MESSAGE_PASSING
+ 
+_SC_MESSAGE_PASSING
+
+
+	)
+
+115 
+	m_SC_SEMAPHORES
+,
+
+116 
+	#_SC_SEMAPHORES
+ 
+_SC_SEMAPHORES
+
+
+	)
+
+117 
+	m_SC_SHARED_MEMORY_OBJECTS
+,
+
+118 
+	#_SC_SHARED_MEMORY_OBJECTS
+ 
+_SC_SHARED_MEMORY_OBJECTS
+
+
+	)
+
+119 
+	m_SC_AIO_LISTIO_MAX
+,
+
+120 
+	#_SC_AIO_LISTIO_MAX
+ 
+_SC_AIO_LISTIO_MAX
+
+
+	)
+
+121 
+	m_SC_AIO_MAX
+,
+
+122 
+	#_SC_AIO_MAX
+ 
+_SC_AIO_MAX
+
+
+	)
+
+123 
+	m_SC_AIO_PRIO_DELTA_MAX
+,
+
+124 
+	#_SC_AIO_PRIO_DELTA_MAX
+ 
+_SC_AIO_PRIO_DELTA_MAX
+
+
+	)
+
+125 
+	m_SC_DELAYTIMER_MAX
+,
+
+126 
+	#_SC_DELAYTIMER_MAX
+ 
+_SC_DELAYTIMER_MAX
+
+
+	)
+
+127 
+	m_SC_MQ_OPEN_MAX
+,
+
+128 
+	#_SC_MQ_OPEN_MAX
+ 
+_SC_MQ_OPEN_MAX
+
+
+	)
+
+129 
+	m_SC_MQ_PRIO_MAX
+,
+
+130 
+	#_SC_MQ_PRIO_MAX
+ 
+_SC_MQ_PRIO_MAX
+
+
+	)
+
+131 
+	m_SC_VERSION
+,
+
+132 
+	#_SC_VERSION
+ 
+_SC_VERSION
+
+
+	)
+
+133 
+	m_SC_PAGESIZE
+,
+
+134 
+	#_SC_PAGESIZE
+ 
+_SC_PAGESIZE
+
+
+	)
+
+135 
+	#_SC_PAGE_SIZE
+ 
+_SC_PAGESIZE
+
+
+	)
+
+136 
+	m_SC_RTSIG_MAX
+,
+
+137 
+	#_SC_RTSIG_MAX
+ 
+_SC_RTSIG_MAX
+
+
+	)
+
+138 
+	m_SC_SEM_NSEMS_MAX
+,
+
+139 
+	#_SC_SEM_NSEMS_MAX
+ 
+_SC_SEM_NSEMS_MAX
+
+
+	)
+
+140 
+	m_SC_SEM_VALUE_MAX
+,
+
+141 
+	#_SC_SEM_VALUE_MAX
+ 
+_SC_SEM_VALUE_MAX
+
+
+	)
+
+142 
+	m_SC_SIGQUEUE_MAX
+,
+
+143 
+	#_SC_SIGQUEUE_MAX
+ 
+_SC_SIGQUEUE_MAX
+
+
+	)
+
+144 
+	m_SC_TIMER_MAX
+,
+
+145 
+	#_SC_TIMER_MAX
+ 
+_SC_TIMER_MAX
+
+
+	)
+
+149 
+	m_SC_BC_BASE_MAX
+,
+
+150 
+	#_SC_BC_BASE_MAX
+ 
+_SC_BC_BASE_MAX
+
+
+	)
+
+151 
+	m_SC_BC_DIM_MAX
+,
+
+152 
+	#_SC_BC_DIM_MAX
+ 
+_SC_BC_DIM_MAX
+
+
+	)
+
+153 
+	m_SC_BC_SCALE_MAX
+,
+
+154 
+	#_SC_BC_SCALE_MAX
+ 
+_SC_BC_SCALE_MAX
+
+
+	)
+
+155 
+	m_SC_BC_STRING_MAX
+,
+
+156 
+	#_SC_BC_STRING_MAX
+ 
+_SC_BC_STRING_MAX
+
+
+	)
+
+157 
+	m_SC_COLL_WEIGHTS_MAX
+,
+
+158 
+	#_SC_COLL_WEIGHTS_MAX
+ 
+_SC_COLL_WEIGHTS_MAX
+
+
+	)
+
+159 
+	m_SC_EQUIV_CLASS_MAX
+,
+
+160 
+	#_SC_EQUIV_CLASS_MAX
+ 
+_SC_EQUIV_CLASS_MAX
+
+
+	)
+
+161 
+	m_SC_EXPR_NEST_MAX
+,
+
+162 
+	#_SC_EXPR_NEST_MAX
+ 
+_SC_EXPR_NEST_MAX
+
+
+	)
+
+163 
+	m_SC_LINE_MAX
+,
+
+164 
+	#_SC_LINE_MAX
+ 
+_SC_LINE_MAX
+
+
+	)
+
+165 
+	m_SC_RE_DUP_MAX
+,
+
+166 
+	#_SC_RE_DUP_MAX
+ 
+_SC_RE_DUP_MAX
+
+
+	)
+
+167 
+	m_SC_CHARCLASS_NAME_MAX
+,
+
+168 
+	#_SC_CHARCLASS_NAME_MAX
+ 
+_SC_CHARCLASS_NAME_MAX
+
+
+	)
+
+170 
+	m_SC_2_VERSION
+,
+
+171 
+	#_SC_2_VERSION
+ 
+_SC_2_VERSION
+
+
+	)
+
+172 
+	m_SC_2_C_BIND
+,
+
+173 
+	#_SC_2_C_BIND
+ 
+_SC_2_C_BIND
+
+
+	)
+
+174 
+	m_SC_2_C_DEV
+,
+
+175 
+	#_SC_2_C_DEV
+ 
+_SC_2_C_DEV
+
+
+	)
+
+176 
+	m_SC_2_FORT_DEV
+,
+
+177 
+	#_SC_2_FORT_DEV
+ 
+_SC_2_FORT_DEV
+
+
+	)
+
+178 
+	m_SC_2_FORT_RUN
+,
+
+179 
+	#_SC_2_FORT_RUN
+ 
+_SC_2_FORT_RUN
+
+
+	)
+
+180 
+	m_SC_2_SW_DEV
+,
+
+181 
+	#_SC_2_SW_DEV
+ 
+_SC_2_SW_DEV
+
+
+	)
+
+182 
+	m_SC_2_LOCALEDEF
+,
+
+183 
+	#_SC_2_LOCALEDEF
+ 
+_SC_2_LOCALEDEF
+
+
+	)
+
+185 
+	m_SC_PII
+,
+
+186 
+	#_SC_PII
+ 
+_SC_PII
+
+
+	)
+
+187 
+	m_SC_PII_XTI
+,
+
+188 
+	#_SC_PII_XTI
+ 
+_SC_PII_XTI
+
+
+	)
+
+189 
+	m_SC_PII_SOCKET
+,
+
+190 
+	#_SC_PII_SOCKET
+ 
+_SC_PII_SOCKET
+
+
+	)
+
+191 
+	m_SC_PII_INTERNET
+,
+
+192 
+	#_SC_PII_INTERNET
+ 
+_SC_PII_INTERNET
+
+
+	)
+
+193 
+	m_SC_PII_OSI
+,
+
+194 
+	#_SC_PII_OSI
+ 
+_SC_PII_OSI
+
+
+	)
+
+195 
+	m_SC_POLL
+,
+
+196 
+	#_SC_POLL
+ 
+_SC_POLL
+
+
+	)
+
+197 
+	m_SC_SELECT
+,
+
+198 
+	#_SC_SELECT
+ 
+_SC_SELECT
+
+
+	)
+
+199 
+	m_SC_UIO_MAXIOV
+,
+
+200 
+	#_SC_UIO_MAXIOV
+ 
+_SC_UIO_MAXIOV
+
+
+	)
+
+201 
+	m_SC_IOV_MAX
+ = 
+_SC_UIO_MAXIOV
+,
+
+202 
+	#_SC_IOV_MAX
+ 
+_SC_IOV_MAX
+
+
+	)
+
+203 
+	m_SC_PII_INTERNET_STREAM
+,
+
+204 
+	#_SC_PII_INTERNET_STREAM
+ 
+_SC_PII_INTERNET_STREAM
+
+
+	)
+
+205 
+	m_SC_PII_INTERNET_DGRAM
+,
+
+206 
+	#_SC_PII_INTERNET_DGRAM
+ 
+_SC_PII_INTERNET_DGRAM
+
+
+	)
+
+207 
+	m_SC_PII_OSI_COTS
+,
+
+208 
+	#_SC_PII_OSI_COTS
+ 
+_SC_PII_OSI_COTS
+
+
+	)
+
+209 
+	m_SC_PII_OSI_CLTS
+,
+
+210 
+	#_SC_PII_OSI_CLTS
+ 
+_SC_PII_OSI_CLTS
+
+
+	)
+
+211 
+	m_SC_PII_OSI_M
+,
+
+212 
+	#_SC_PII_OSI_M
+ 
+_SC_PII_OSI_M
+
+
+	)
+
+213 
+	m_SC_T_IOV_MAX
+,
+
+214 
+	#_SC_T_IOV_MAX
+ 
+_SC_T_IOV_MAX
+
+
+	)
+
+217 
+	m_SC_THREADS
+,
+
+218 
+	#_SC_THREADS
+ 
+_SC_THREADS
+
+
+	)
+
+219 
+	m_SC_THREAD_SAFE_FUNCTIONS
+,
+
+220 
+	#_SC_THREAD_SAFE_FUNCTIONS
+ 
+_SC_THREAD_SAFE_FUNCTIONS
+
+
+	)
+
+221 
+	m_SC_GETGR_R_SIZE_MAX
+,
+
+222 
+	#_SC_GETGR_R_SIZE_MAX
+ 
+_SC_GETGR_R_SIZE_MAX
+
+
+	)
+
+223 
+	m_SC_GETPW_R_SIZE_MAX
+,
+
+224 
+	#_SC_GETPW_R_SIZE_MAX
+ 
+_SC_GETPW_R_SIZE_MAX
+
+
+	)
+
+225 
+	m_SC_LOGIN_NAME_MAX
+,
+
+226 
+	#_SC_LOGIN_NAME_MAX
+ 
+_SC_LOGIN_NAME_MAX
+
+
+	)
+
+227 
+	m_SC_TTY_NAME_MAX
+,
+
+228 
+	#_SC_TTY_NAME_MAX
+ 
+_SC_TTY_NAME_MAX
+
+
+	)
+
+229 
+	m_SC_THREAD_DESTRUCTOR_ITERATIONS
+,
+
+230 
+	#_SC_THREAD_DESTRUCTOR_ITERATIONS
+ 
+_SC_THREAD_DESTRUCTOR_ITERATIONS
+
+
+	)
+
+231 
+	m_SC_THREAD_KEYS_MAX
+,
+
+232 
+	#_SC_THREAD_KEYS_MAX
+ 
+_SC_THREAD_KEYS_MAX
+
+
+	)
+
+233 
+	m_SC_THREAD_STACK_MIN
+,
+
+234 
+	#_SC_THREAD_STACK_MIN
+ 
+_SC_THREAD_STACK_MIN
+
+
+	)
+
+235 
+	m_SC_THREAD_THREADS_MAX
+,
+
+236 
+	#_SC_THREAD_THREADS_MAX
+ 
+_SC_THREAD_THREADS_MAX
+
+
+	)
+
+237 
+	m_SC_THREAD_ATTR_STACKADDR
+,
+
+238 
+	#_SC_THREAD_ATTR_STACKADDR
+ 
+_SC_THREAD_ATTR_STACKADDR
+
+
+	)
+
+239 
+	m_SC_THREAD_ATTR_STACKSIZE
+,
+
+240 
+	#_SC_THREAD_ATTR_STACKSIZE
+ 
+_SC_THREAD_ATTR_STACKSIZE
+
+
+	)
+
+241 
+	m_SC_THREAD_PRIORITY_SCHEDULING
+,
+
+242 
+	#_SC_THREAD_PRIORITY_SCHEDULING
+ 
+_SC_THREAD_PRIORITY_SCHEDULING
+
+
+	)
+
+243 
+	m_SC_THREAD_PRIO_INHERIT
+,
+
+244 
+	#_SC_THREAD_PRIO_INHERIT
+ 
+_SC_THREAD_PRIO_INHERIT
+
+
+	)
+
+245 
+	m_SC_THREAD_PRIO_PROTECT
+,
+
+246 
+	#_SC_THREAD_PRIO_PROTECT
+ 
+_SC_THREAD_PRIO_PROTECT
+
+
+	)
+
+247 
+	m_SC_THREAD_PROCESS_SHARED
+,
+
+248 
+	#_SC_THREAD_PROCESS_SHARED
+ 
+_SC_THREAD_PROCESS_SHARED
+
+
+	)
+
+250 
+	m_SC_NPROCESSORS_CONF
+,
+
+251 
+	#_SC_NPROCESSORS_CONF
+ 
+_SC_NPROCESSORS_CONF
+
+
+	)
+
+252 
+	m_SC_NPROCESSORS_ONLN
+,
+
+253 
+	#_SC_NPROCESSORS_ONLN
+ 
+_SC_NPROCESSORS_ONLN
+
+
+	)
+
+254 
+	m_SC_PHYS_PAGES
+,
+
+255 
+	#_SC_PHYS_PAGES
+ 
+_SC_PHYS_PAGES
+
+
+	)
+
+256 
+	m_SC_AVPHYS_PAGES
+,
+
+257 
+	#_SC_AVPHYS_PAGES
+ 
+_SC_AVPHYS_PAGES
+
+
+	)
+
+258 
+	m_SC_ATEXIT_MAX
+,
+
+259 
+	#_SC_ATEXIT_MAX
+ 
+_SC_ATEXIT_MAX
+
+
+	)
+
+260 
+	m_SC_PASS_MAX
+,
+
+261 
+	#_SC_PASS_MAX
+ 
+_SC_PASS_MAX
+
+
+	)
+
+263 
+	m_SC_XOPEN_VERSION
+,
+
+264 
+	#_SC_XOPEN_VERSION
+ 
+_SC_XOPEN_VERSION
+
+
+	)
+
+265 
+	m_SC_XOPEN_XCU_VERSION
+,
+
+266 
+	#_SC_XOPEN_XCU_VERSION
+ 
+_SC_XOPEN_XCU_VERSION
+
+
+	)
+
+267 
+	m_SC_XOPEN_UNIX
+,
+
+268 
+	#_SC_XOPEN_UNIX
+ 
+_SC_XOPEN_UNIX
+
+
+	)
+
+269 
+	m_SC_XOPEN_CRYPT
+,
+
+270 
+	#_SC_XOPEN_CRYPT
+ 
+_SC_XOPEN_CRYPT
+
+
+	)
+
+271 
+	m_SC_XOPEN_ENH_I18N
+,
+
+272 
+	#_SC_XOPEN_ENH_I18N
+ 
+_SC_XOPEN_ENH_I18N
+
+
+	)
+
+273 
+	m_SC_XOPEN_SHM
+,
+
+274 
+	#_SC_XOPEN_SHM
+ 
+_SC_XOPEN_SHM
+
+
+	)
+
+276 
+	m_SC_2_CHAR_TERM
+,
+
+277 
+	#_SC_2_CHAR_TERM
+ 
+_SC_2_CHAR_TERM
+
+
+	)
+
+278 
+	m_SC_2_C_VERSION
+,
+
+279 
+	#_SC_2_C_VERSION
+ 
+_SC_2_C_VERSION
+
+
+	)
+
+280 
+	m_SC_2_UPE
+,
+
+281 
+	#_SC_2_UPE
+ 
+_SC_2_UPE
+
+
+	)
+
+283 
+	m_SC_XOPEN_XPG2
+,
+
+284 
+	#_SC_XOPEN_XPG2
+ 
+_SC_XOPEN_XPG2
+
+
+	)
+
+285 
+	m_SC_XOPEN_XPG3
+,
+
+286 
+	#_SC_XOPEN_XPG3
+ 
+_SC_XOPEN_XPG3
+
+
+	)
+
+287 
+	m_SC_XOPEN_XPG4
+,
+
+288 
+	#_SC_XOPEN_XPG4
+ 
+_SC_XOPEN_XPG4
+
+
+	)
+
+290 
+	m_SC_CHAR_BIT
+,
+
+291 
+	#_SC_CHAR_BIT
+ 
+_SC_CHAR_BIT
+
+
+	)
+
+292 
+	m_SC_CHAR_MAX
+,
+
+293 
+	#_SC_CHAR_MAX
+ 
+_SC_CHAR_MAX
+
+
+	)
+
+294 
+	m_SC_CHAR_MIN
+,
+
+295 
+	#_SC_CHAR_MIN
+ 
+_SC_CHAR_MIN
+
+
+	)
+
+296 
+	m_SC_INT_MAX
+,
+
+297 
+	#_SC_INT_MAX
+ 
+_SC_INT_MAX
+
+
+	)
+
+298 
+	m_SC_INT_MIN
+,
+
+299 
+	#_SC_INT_MIN
+ 
+_SC_INT_MIN
+
+
+	)
+
+300 
+	m_SC_LONG_BIT
+,
+
+301 
+	#_SC_LONG_BIT
+ 
+_SC_LONG_BIT
+
+
+	)
+
+302 
+	m_SC_WORD_BIT
+,
+
+303 
+	#_SC_WORD_BIT
+ 
+_SC_WORD_BIT
+
+
+	)
+
+304 
+	m_SC_MB_LEN_MAX
+,
+
+305 
+	#_SC_MB_LEN_MAX
+ 
+_SC_MB_LEN_MAX
+
+
+	)
+
+306 
+	m_SC_NZERO
+,
+
+307 
+	#_SC_NZERO
+ 
+_SC_NZERO
+
+
+	)
+
+308 
+	m_SC_SSIZE_MAX
+,
+
+309 
+	#_SC_SSIZE_MAX
+ 
+_SC_SSIZE_MAX
+
+
+	)
+
+310 
+	m_SC_SCHAR_MAX
+,
+
+311 
+	#_SC_SCHAR_MAX
+ 
+_SC_SCHAR_MAX
+
+
+	)
+
+312 
+	m_SC_SCHAR_MIN
+,
+
+313 
+	#_SC_SCHAR_MIN
+ 
+_SC_SCHAR_MIN
+
+
+	)
+
+314 
+	m_SC_SHRT_MAX
+,
+
+315 
+	#_SC_SHRT_MAX
+ 
+_SC_SHRT_MAX
+
+
+	)
+
+316 
+	m_SC_SHRT_MIN
+,
+
+317 
+	#_SC_SHRT_MIN
+ 
+_SC_SHRT_MIN
+
+
+	)
+
+318 
+	m_SC_UCHAR_MAX
+,
+
+319 
+	#_SC_UCHAR_MAX
+ 
+_SC_UCHAR_MAX
+
+
+	)
+
+320 
+	m_SC_UINT_MAX
+,
+
+321 
+	#_SC_UINT_MAX
+ 
+_SC_UINT_MAX
+
+
+	)
+
+322 
+	m_SC_ULONG_MAX
+,
+
+323 
+	#_SC_ULONG_MAX
+ 
+_SC_ULONG_MAX
+
+
+	)
+
+324 
+	m_SC_USHRT_MAX
+,
+
+325 
+	#_SC_USHRT_MAX
+ 
+_SC_USHRT_MAX
+
+
+	)
+
+327 
+	m_SC_NL_ARGMAX
+,
+
+328 
+	#_SC_NL_ARGMAX
+ 
+_SC_NL_ARGMAX
+
+
+	)
+
+329 
+	m_SC_NL_LANGMAX
+,
+
+330 
+	#_SC_NL_LANGMAX
+ 
+_SC_NL_LANGMAX
+
+
+	)
+
+331 
+	m_SC_NL_MSGMAX
+,
+
+332 
+	#_SC_NL_MSGMAX
+ 
+_SC_NL_MSGMAX
+
+
+	)
+
+333 
+	m_SC_NL_NMAX
+,
+
+334 
+	#_SC_NL_NMAX
+ 
+_SC_NL_NMAX
+
+
+	)
+
+335 
+	m_SC_NL_SETMAX
+,
+
+336 
+	#_SC_NL_SETMAX
+ 
+_SC_NL_SETMAX
+
+
+	)
+
+337 
+	m_SC_NL_TEXTMAX
+,
+
+338 
+	#_SC_NL_TEXTMAX
+ 
+_SC_NL_TEXTMAX
+
+
+	)
+
+340 
+	m_SC_XBS5_ILP32_OFF32
+,
+
+341 
+	#_SC_XBS5_ILP32_OFF32
+ 
+_SC_XBS5_ILP32_OFF32
+
+
+	)
+
+342 
+	m_SC_XBS5_ILP32_OFFBIG
+,
+
+343 
+	#_SC_XBS5_ILP32_OFFBIG
+ 
+_SC_XBS5_ILP32_OFFBIG
+
+
+	)
+
+344 
+	m_SC_XBS5_LP64_OFF64
+,
+
+345 
+	#_SC_XBS5_LP64_OFF64
+ 
+_SC_XBS5_LP64_OFF64
+
+
+	)
+
+346 
+	m_SC_XBS5_LPBIG_OFFBIG
+,
+
+347 
+	#_SC_XBS5_LPBIG_OFFBIG
+ 
+_SC_XBS5_LPBIG_OFFBIG
+
+
+	)
+
+349 
+	m_SC_XOPEN_LEGACY
+,
+
+350 
+	#_SC_XOPEN_LEGACY
+ 
+_SC_XOPEN_LEGACY
+
+
+	)
+
+351 
+	m_SC_XOPEN_REALTIME
+,
+
+352 
+	#_SC_XOPEN_REALTIME
+ 
+_SC_XOPEN_REALTIME
+
+
+	)
+
+353 
+	m_SC_XOPEN_REALTIME_THREADS
+,
+
+354 
+	#_SC_XOPEN_REALTIME_THREADS
+ 
+_SC_XOPEN_REALTIME_THREADS
+
+
+	)
+
+356 
+	m_SC_ADVISORY_INFO
+,
+
+357 
+	#_SC_ADVISORY_INFO
+ 
+_SC_ADVISORY_INFO
+
+
+	)
+
+358 
+	m_SC_BARRIERS
+,
+
+359 
+	#_SC_BARRIERS
+ 
+_SC_BARRIERS
+
+
+	)
+
+360 
+	m_SC_BASE
+,
+
+361 
+	#_SC_BASE
+ 
+_SC_BASE
+
+
+	)
+
+362 
+	m_SC_C_LANG_SUPPORT
+,
+
+363 
+	#_SC_C_LANG_SUPPORT
+ 
+_SC_C_LANG_SUPPORT
+
+
+	)
+
+364 
+	m_SC_C_LANG_SUPPORT_R
+,
+
+365 
+	#_SC_C_LANG_SUPPORT_R
+ 
+_SC_C_LANG_SUPPORT_R
+
+
+	)
+
+366 
+	m_SC_CLOCK_SELECTION
+,
+
+367 
+	#_SC_CLOCK_SELECTION
+ 
+_SC_CLOCK_SELECTION
+
+
+	)
+
+368 
+	m_SC_CPUTIME
+,
+
+369 
+	#_SC_CPUTIME
+ 
+_SC_CPUTIME
+
+
+	)
+
+370 
+	m_SC_THREAD_CPUTIME
+,
+
+371 
+	#_SC_THREAD_CPUTIME
+ 
+_SC_THREAD_CPUTIME
+
+
+	)
+
+372 
+	m_SC_DEVICE_IO
+,
+
+373 
+	#_SC_DEVICE_IO
+ 
+_SC_DEVICE_IO
+
+
+	)
+
+374 
+	m_SC_DEVICE_SPECIFIC
+,
+
+375 
+	#_SC_DEVICE_SPECIFIC
+ 
+_SC_DEVICE_SPECIFIC
+
+
+	)
+
+376 
+	m_SC_DEVICE_SPECIFIC_R
+,
+
+377 
+	#_SC_DEVICE_SPECIFIC_R
+ 
+_SC_DEVICE_SPECIFIC_R
+
+
+	)
+
+378 
+	m_SC_FD_MGMT
+,
+
+379 
+	#_SC_FD_MGMT
+ 
+_SC_FD_MGMT
+
+
+	)
+
+380 
+	m_SC_FIFO
+,
+
+381 
+	#_SC_FIFO
+ 
+_SC_FIFO
+
+
+	)
+
+382 
+	m_SC_PIPE
+,
+
+383 
+	#_SC_PIPE
+ 
+_SC_PIPE
+
+
+	)
+
+384 
+	m_SC_FILE_ATTRIBUTES
+,
+
+385 
+	#_SC_FILE_ATTRIBUTES
+ 
+_SC_FILE_ATTRIBUTES
+
+
+	)
+
+386 
+	m_SC_FILE_LOCKING
+,
+
+387 
+	#_SC_FILE_LOCKING
+ 
+_SC_FILE_LOCKING
+
+
+	)
+
+388 
+	m_SC_FILE_SYSTEM
+,
+
+389 
+	#_SC_FILE_SYSTEM
+ 
+_SC_FILE_SYSTEM
+
+
+	)
+
+390 
+	m_SC_MONOTONIC_CLOCK
+,
+
+391 
+	#_SC_MONOTONIC_CLOCK
+ 
+_SC_MONOTONIC_CLOCK
+
+
+	)
+
+392 
+	m_SC_MULTI_PROCESS
+,
+
+393 
+	#_SC_MULTI_PROCESS
+ 
+_SC_MULTI_PROCESS
+
+
+	)
+
+394 
+	m_SC_SINGLE_PROCESS
+,
+
+395 
+	#_SC_SINGLE_PROCESS
+ 
+_SC_SINGLE_PROCESS
+
+
+	)
+
+396 
+	m_SC_NETWORKING
+,
+
+397 
+	#_SC_NETWORKING
+ 
+_SC_NETWORKING
+
+
+	)
+
+398 
+	m_SC_READER_WRITER_LOCKS
+,
+
+399 
+	#_SC_READER_WRITER_LOCKS
+ 
+_SC_READER_WRITER_LOCKS
+
+
+	)
+
+400 
+	m_SC_SPIN_LOCKS
+,
+
+401 
+	#_SC_SPIN_LOCKS
+ 
+_SC_SPIN_LOCKS
+
+
+	)
+
+402 
+	m_SC_REGEXP
+,
+
+403 
+	#_SC_REGEXP
+ 
+_SC_REGEXP
+
+
+	)
+
+404 
+	m_SC_REGEX_VERSION
+,
+
+405 
+	#_SC_REGEX_VERSION
+ 
+_SC_REGEX_VERSION
+
+
+	)
+
+406 
+	m_SC_SHELL
+,
+
+407 
+	#_SC_SHELL
+ 
+_SC_SHELL
+
+
+	)
+
+408 
+	m_SC_SIGNALS
+,
+
+409 
+	#_SC_SIGNALS
+ 
+_SC_SIGNALS
+
+
+	)
+
+410 
+	m_SC_SPAWN
+,
+
+411 
+	#_SC_SPAWN
+ 
+_SC_SPAWN
+
+
+	)
+
+412 
+	m_SC_SPORADIC_SERVER
+,
+
+413 
+	#_SC_SPORADIC_SERVER
+ 
+_SC_SPORADIC_SERVER
+
+
+	)
+
+414 
+	m_SC_THREAD_SPORADIC_SERVER
+,
+
+415 
+	#_SC_THREAD_SPORADIC_SERVER
+ 
+_SC_THREAD_SPORADIC_SERVER
+
+
+	)
+
+416 
+	m_SC_SYSTEM_DATABASE
+,
+
+417 
+	#_SC_SYSTEM_DATABASE
+ 
+_SC_SYSTEM_DATABASE
+
+
+	)
+
+418 
+	m_SC_SYSTEM_DATABASE_R
+,
+
+419 
+	#_SC_SYSTEM_DATABASE_R
+ 
+_SC_SYSTEM_DATABASE_R
+
+
+	)
+
+420 
+	m_SC_TIMEOUTS
+,
+
+421 
+	#_SC_TIMEOUTS
+ 
+_SC_TIMEOUTS
+
+
+	)
+
+422 
+	m_SC_TYPED_MEMORY_OBJECTS
+,
+
+423 
+	#_SC_TYPED_MEMORY_OBJECTS
+ 
+_SC_TYPED_MEMORY_OBJECTS
+
+
+	)
+
+424 
+	m_SC_USER_GROUPS
+,
+
+425 
+	#_SC_USER_GROUPS
+ 
+_SC_USER_GROUPS
+
+
+	)
+
+426 
+	m_SC_USER_GROUPS_R
+,
+
+427 
+	#_SC_USER_GROUPS_R
+ 
+_SC_USER_GROUPS_R
+
+
+	)
+
+428 
+	m_SC_2_PBS
+,
+
+429 
+	#_SC_2_PBS
+ 
+_SC_2_PBS
+
+
+	)
+
+430 
+	m_SC_2_PBS_ACCOUNTING
+,
+
+431 
+	#_SC_2_PBS_ACCOUNTING
+ 
+_SC_2_PBS_ACCOUNTING
+
+
+	)
+
+432 
+	m_SC_2_PBS_LOCATE
+,
+
+433 
+	#_SC_2_PBS_LOCATE
+ 
+_SC_2_PBS_LOCATE
+
+
+	)
+
+434 
+	m_SC_2_PBS_MESSAGE
+,
+
+435 
+	#_SC_2_PBS_MESSAGE
+ 
+_SC_2_PBS_MESSAGE
+
+
+	)
+
+436 
+	m_SC_2_PBS_TRACK
+,
+
+437 
+	#_SC_2_PBS_TRACK
+ 
+_SC_2_PBS_TRACK
+
+
+	)
+
+438 
+	m_SC_SYMLOOP_MAX
+,
+
+439 
+	#_SC_SYMLOOP_MAX
+ 
+_SC_SYMLOOP_MAX
+
+
+	)
+
+440 
+	m_SC_STREAMS
+,
+
+441 
+	#_SC_STREAMS
+ 
+_SC_STREAMS
+
+
+	)
+
+442 
+	m_SC_2_PBS_CHECKPOINT
+,
+
+443 
+	#_SC_2_PBS_CHECKPOINT
+ 
+_SC_2_PBS_CHECKPOINT
+
+
+	)
+
+445 
+	m_SC_V6_ILP32_OFF32
+,
+
+446 
+	#_SC_V6_ILP32_OFF32
+ 
+_SC_V6_ILP32_OFF32
+
+
+	)
+
+447 
+	m_SC_V6_ILP32_OFFBIG
+,
+
+448 
+	#_SC_V6_ILP32_OFFBIG
+ 
+_SC_V6_ILP32_OFFBIG
+
+
+	)
+
+449 
+	m_SC_V6_LP64_OFF64
+,
+
+450 
+	#_SC_V6_LP64_OFF64
+ 
+_SC_V6_LP64_OFF64
+
+
+	)
+
+451 
+	m_SC_V6_LPBIG_OFFBIG
+,
+
+452 
+	#_SC_V6_LPBIG_OFFBIG
+ 
+_SC_V6_LPBIG_OFFBIG
+
+
+	)
+
+454 
+	m_SC_HOST_NAME_MAX
+,
+
+455 
+	#_SC_HOST_NAME_MAX
+ 
+_SC_HOST_NAME_MAX
+
+
+	)
+
+456 
+	m_SC_TRACE
+,
+
+457 
+	#_SC_TRACE
+ 
+_SC_TRACE
+
+
+	)
+
+458 
+	m_SC_TRACE_EVENT_FILTER
+,
+
+459 
+	#_SC_TRACE_EVENT_FILTER
+ 
+_SC_TRACE_EVENT_FILTER
+
+
+	)
+
+460 
+	m_SC_TRACE_INHERIT
+,
+
+461 
+	#_SC_TRACE_INHERIT
+ 
+_SC_TRACE_INHERIT
+
+
+	)
+
+462 
+	m_SC_TRACE_LOG
+,
+
+463 
+	#_SC_TRACE_LOG
+ 
+_SC_TRACE_LOG
+
+
+	)
+
+465 
+	m_SC_LEVEL1_ICACHE_SIZE
+,
+
+466 
+	#_SC_LEVEL1_ICACHE_SIZE
+ 
+_SC_LEVEL1_ICACHE_SIZE
+
+
+	)
+
+467 
+	m_SC_LEVEL1_ICACHE_ASSOC
+,
+
+468 
+	#_SC_LEVEL1_ICACHE_ASSOC
+ 
+_SC_LEVEL1_ICACHE_ASSOC
+
+
+	)
+
+469 
+	m_SC_LEVEL1_ICACHE_LINESIZE
+,
+
+470 
+	#_SC_LEVEL1_ICACHE_LINESIZE
+ 
+_SC_LEVEL1_ICACHE_LINESIZE
+
+
+	)
+
+471 
+	m_SC_LEVEL1_DCACHE_SIZE
+,
+
+472 
+	#_SC_LEVEL1_DCACHE_SIZE
+ 
+_SC_LEVEL1_DCACHE_SIZE
+
+
+	)
+
+473 
+	m_SC_LEVEL1_DCACHE_ASSOC
+,
+
+474 
+	#_SC_LEVEL1_DCACHE_ASSOC
+ 
+_SC_LEVEL1_DCACHE_ASSOC
+
+
+	)
+
+475 
+	m_SC_LEVEL1_DCACHE_LINESIZE
+,
+
+476 
+	#_SC_LEVEL1_DCACHE_LINESIZE
+ 
+_SC_LEVEL1_DCACHE_LINESIZE
+
+
+	)
+
+477 
+	m_SC_LEVEL2_CACHE_SIZE
+,
+
+478 
+	#_SC_LEVEL2_CACHE_SIZE
+ 
+_SC_LEVEL2_CACHE_SIZE
+
+
+	)
+
+479 
+	m_SC_LEVEL2_CACHE_ASSOC
+,
+
+480 
+	#_SC_LEVEL2_CACHE_ASSOC
+ 
+_SC_LEVEL2_CACHE_ASSOC
+
+
+	)
+
+481 
+	m_SC_LEVEL2_CACHE_LINESIZE
+,
+
+482 
+	#_SC_LEVEL2_CACHE_LINESIZE
+ 
+_SC_LEVEL2_CACHE_LINESIZE
+
+
+	)
+
+483 
+	m_SC_LEVEL3_CACHE_SIZE
+,
+
+484 
+	#_SC_LEVEL3_CACHE_SIZE
+ 
+_SC_LEVEL3_CACHE_SIZE
+
+
+	)
+
+485 
+	m_SC_LEVEL3_CACHE_ASSOC
+,
+
+486 
+	#_SC_LEVEL3_CACHE_ASSOC
+ 
+_SC_LEVEL3_CACHE_ASSOC
+
+
+	)
+
+487 
+	m_SC_LEVEL3_CACHE_LINESIZE
+,
+
+488 
+	#_SC_LEVEL3_CACHE_LINESIZE
+ 
+_SC_LEVEL3_CACHE_LINESIZE
+
+
+	)
+
+489 
+	m_SC_LEVEL4_CACHE_SIZE
+,
+
+490 
+	#_SC_LEVEL4_CACHE_SIZE
+ 
+_SC_LEVEL4_CACHE_SIZE
+
+
+	)
+
+491 
+	m_SC_LEVEL4_CACHE_ASSOC
+,
+
+492 
+	#_SC_LEVEL4_CACHE_ASSOC
+ 
+_SC_LEVEL4_CACHE_ASSOC
+
+
+	)
+
+493 
+	m_SC_LEVEL4_CACHE_LINESIZE
+,
+
+494 
+	#_SC_LEVEL4_CACHE_LINESIZE
+ 
+_SC_LEVEL4_CACHE_LINESIZE
+
+
+	)
+
+497 
+	m_SC_IPV6
+ = 
+_SC_LEVEL1_ICACHE_SIZE
+ + 50,
+
+498 
+	#_SC_IPV6
+ 
+_SC_IPV6
+
+
+	)
+
+499 
+	m_SC_RAW_SOCKETS
+,
+
+500 
+	#_SC_RAW_SOCKETS
+ 
+_SC_RAW_SOCKETS
+
+
+	)
+
+502 
+	m_SC_V7_ILP32_OFF32
+,
+
+503 
+	#_SC_V7_ILP32_OFF32
+ 
+_SC_V7_ILP32_OFF32
+
+
+	)
+
+504 
+	m_SC_V7_ILP32_OFFBIG
+,
+
+505 
+	#_SC_V7_ILP32_OFFBIG
+ 
+_SC_V7_ILP32_OFFBIG
+
+
+	)
+
+506 
+	m_SC_V7_LP64_OFF64
+,
+
+507 
+	#_SC_V7_LP64_OFF64
+ 
+_SC_V7_LP64_OFF64
+
+
+	)
+
+508 
+	m_SC_V7_LPBIG_OFFBIG
+,
+
+509 
+	#_SC_V7_LPBIG_OFFBIG
+ 
+_SC_V7_LPBIG_OFFBIG
+
+
+	)
+
+511 
+	m_SC_SS_REPL_MAX
+,
+
+512 
+	#_SC_SS_REPL_MAX
+ 
+_SC_SS_REPL_MAX
+
+
+	)
+
+514 
+	m_SC_TRACE_EVENT_NAME_MAX
+,
+
+515 
+	#_SC_TRACE_EVENT_NAME_MAX
+ 
+_SC_TRACE_EVENT_NAME_MAX
+
+
+	)
+
+516 
+	m_SC_TRACE_NAME_MAX
+,
+
+517 
+	#_SC_TRACE_NAME_MAX
+ 
+_SC_TRACE_NAME_MAX
+
+
+	)
+
+518 
+	m_SC_TRACE_SYS_MAX
+,
+
+519 
+	#_SC_TRACE_SYS_MAX
+ 
+_SC_TRACE_SYS_MAX
+
+
+	)
+
+520 
+	m_SC_TRACE_USER_EVENT_MAX
+,
+
+521 
+	#_SC_TRACE_USER_EVENT_MAX
+ 
+_SC_TRACE_USER_EVENT_MAX
+
+
+	)
+
+523 
+	m_SC_XOPEN_STREAMS
+,
+
+524 
+	#_SC_XOPEN_STREAMS
+ 
+_SC_XOPEN_STREAMS
+
+
+	)
+
+526 
+	m_SC_THREAD_ROBUST_PRIO_INHERIT
+,
+
+527 
+	#_SC_THREAD_ROBUST_PRIO_INHERIT
+ 
+_SC_THREAD_ROBUST_PRIO_INHERIT
+
+
+	)
+
+528 
+	m_SC_THREAD_ROBUST_PRIO_PROTECT
+
+
+529 
+	#_SC_THREAD_ROBUST_PRIO_PROTECT
+ 
+_SC_THREAD_ROBUST_PRIO_PROTECT
+
+
+	)
+
+535 
+	m_CS_PATH
+,
+
+536 
+	#_CS_PATH
+ 
+_CS_PATH
+
+
+	)
+
+538 
+	m_CS_V6_WIDTH_RESTRICTED_ENVS
+,
+
+539 
+	#_CS_V6_WIDTH_RESTRICTED_ENVS
+ 
+_CS_V6_WIDTH_RESTRICTED_ENVS
+
+
+	)
+
+540 
+	#_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS
+ 
+_CS_V6_WIDTH_RESTRICTED_ENVS
+
+
+	)
+
+542 
+	m_CS_GNU_LIBC_VERSION
+,
+
+543 
+	#_CS_GNU_LIBC_VERSION
+ 
+_CS_GNU_LIBC_VERSION
+
+
+	)
+
+544 
+	m_CS_GNU_LIBPTHREAD_VERSION
+,
+
+545 
+	#_CS_GNU_LIBPTHREAD_VERSION
+ 
+_CS_GNU_LIBPTHREAD_VERSION
+
+
+	)
+
+547 
+	m_CS_V5_WIDTH_RESTRICTED_ENVS
+,
+
+548 
+	#_CS_V5_WIDTH_RESTRICTED_ENVS
+ 
+_CS_V5_WIDTH_RESTRICTED_ENVS
+
+
+	)
+
+549 
+	#_CS_POSIX_V5_WIDTH_RESTRICTED_ENVS
+ 
+_CS_V5_WIDTH_RESTRICTED_ENVS
+
+
+	)
+
+551 
+	m_CS_V7_WIDTH_RESTRICTED_ENVS
+,
+
+552 
+	#_CS_V7_WIDTH_RESTRICTED_ENVS
+ 
+_CS_V7_WIDTH_RESTRICTED_ENVS
+
+
+	)
+
+553 
+	#_CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
+ 
+_CS_V7_WIDTH_RESTRICTED_ENVS
+
+
+	)
+
+555 
+	m_CS_LFS_CFLAGS
+ = 1000,
+
+556 
+	#_CS_LFS_CFLAGS
+ 
+_CS_LFS_CFLAGS
+
+
+	)
+
+557 
+	m_CS_LFS_LDFLAGS
+,
+
+558 
+	#_CS_LFS_LDFLAGS
+ 
+_CS_LFS_LDFLAGS
+
+
+	)
+
+559 
+	m_CS_LFS_LIBS
+,
+
+560 
+	#_CS_LFS_LIBS
+ 
+_CS_LFS_LIBS
+
+
+	)
+
+561 
+	m_CS_LFS_LINTFLAGS
+,
+
+562 
+	#_CS_LFS_LINTFLAGS
+ 
+_CS_LFS_LINTFLAGS
+
+
+	)
+
+563 
+	m_CS_LFS64_CFLAGS
+,
+
+564 
+	#_CS_LFS64_CFLAGS
+ 
+_CS_LFS64_CFLAGS
+
+
+	)
+
+565 
+	m_CS_LFS64_LDFLAGS
+,
+
+566 
+	#_CS_LFS64_LDFLAGS
+ 
+_CS_LFS64_LDFLAGS
+
+
+	)
+
+567 
+	m_CS_LFS64_LIBS
+,
+
+568 
+	#_CS_LFS64_LIBS
+ 
+_CS_LFS64_LIBS
+
+
+	)
+
+569 
+	m_CS_LFS64_LINTFLAGS
+,
+
+570 
+	#_CS_LFS64_LINTFLAGS
+ 
+_CS_LFS64_LINTFLAGS
+
+
+	)
+
+572 
+	m_CS_XBS5_ILP32_OFF32_CFLAGS
+ = 1100,
+
+573 
+	#_CS_XBS5_ILP32_OFF32_CFLAGS
+ 
+_CS_XBS5_ILP32_OFF32_CFLAGS
+
+
+	)
+
+574 
+	m_CS_XBS5_ILP32_OFF32_LDFLAGS
+,
+
+575 
+	#_CS_XBS5_ILP32_OFF32_LDFLAGS
+ 
+_CS_XBS5_ILP32_OFF32_LDFLAGS
+
+
+	)
+
+576 
+	m_CS_XBS5_ILP32_OFF32_LIBS
+,
+
+577 
+	#_CS_XBS5_ILP32_OFF32_LIBS
+ 
+_CS_XBS5_ILP32_OFF32_LIBS
+
+
+	)
+
+578 
+	m_CS_XBS5_ILP32_OFF32_LINTFLAGS
+,
+
+579 
+	#_CS_XBS5_ILP32_OFF32_LINTFLAGS
+ 
+_CS_XBS5_ILP32_OFF32_LINTFLAGS
+
+
+	)
+
+580 
+	m_CS_XBS5_ILP32_OFFBIG_CFLAGS
+,
+
+581 
+	#_CS_XBS5_ILP32_OFFBIG_CFLAGS
+ 
+_CS_XBS5_ILP32_OFFBIG_CFLAGS
+
+
+	)
+
+582 
+	m_CS_XBS5_ILP32_OFFBIG_LDFLAGS
+,
+
+583 
+	#_CS_XBS5_ILP32_OFFBIG_LDFLAGS
+ 
+_CS_XBS5_ILP32_OFFBIG_LDFLAGS
+
+
+	)
+
+584 
+	m_CS_XBS5_ILP32_OFFBIG_LIBS
+,
+
+585 
+	#_CS_XBS5_ILP32_OFFBIG_LIBS
+ 
+_CS_XBS5_ILP32_OFFBIG_LIBS
+
+
+	)
+
+586 
+	m_CS_XBS5_ILP32_OFFBIG_LINTFLAGS
+,
+
+587 
+	#_CS_XBS5_ILP32_OFFBIG_LINTFLAGS
+ 
+_CS_XBS5_ILP32_OFFBIG_LINTFLAGS
+
+
+	)
+
+588 
+	m_CS_XBS5_LP64_OFF64_CFLAGS
+,
+
+589 
+	#_CS_XBS5_LP64_OFF64_CFLAGS
+ 
+_CS_XBS5_LP64_OFF64_CFLAGS
+
+
+	)
+
+590 
+	m_CS_XBS5_LP64_OFF64_LDFLAGS
+,
+
+591 
+	#_CS_XBS5_LP64_OFF64_LDFLAGS
+ 
+_CS_XBS5_LP64_OFF64_LDFLAGS
+
+
+	)
+
+592 
+	m_CS_XBS5_LP64_OFF64_LIBS
+,
+
+593 
+	#_CS_XBS5_LP64_OFF64_LIBS
+ 
+_CS_XBS5_LP64_OFF64_LIBS
+
+
+	)
+
+594 
+	m_CS_XBS5_LP64_OFF64_LINTFLAGS
+,
+
+595 
+	#_CS_XBS5_LP64_OFF64_LINTFLAGS
+ 
+_CS_XBS5_LP64_OFF64_LINTFLAGS
+
+
+	)
+
+596 
+	m_CS_XBS5_LPBIG_OFFBIG_CFLAGS
+,
+
+597 
+	#_CS_XBS5_LPBIG_OFFBIG_CFLAGS
+ 
+_CS_XBS5_LPBIG_OFFBIG_CFLAGS
+
+
+	)
+
+598 
+	m_CS_XBS5_LPBIG_OFFBIG_LDFLAGS
+,
+
+599 
+	#_CS_XBS5_LPBIG_OFFBIG_LDFLAGS
+ 
+_CS_XBS5_LPBIG_OFFBIG_LDFLAGS
+
+
+	)
+
+600 
+	m_CS_XBS5_LPBIG_OFFBIG_LIBS
+,
+
+601 
+	#_CS_XBS5_LPBIG_OFFBIG_LIBS
+ 
+_CS_XBS5_LPBIG_OFFBIG_LIBS
+
+
+	)
+
+602 
+	m_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
+,
+
+603 
+	#_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
+ 
+_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
+
+
+	)
+
+605 
+	m_CS_POSIX_V6_ILP32_OFF32_CFLAGS
+,
+
+606 
+	#_CS_POSIX_V6_ILP32_OFF32_CFLAGS
+ 
+_CS_POSIX_V6_ILP32_OFF32_CFLAGS
+
+
+	)
+
+607 
+	m_CS_POSIX_V6_ILP32_OFF32_LDFLAGS
+,
+
+608 
+	#_CS_POSIX_V6_ILP32_OFF32_LDFLAGS
+ 
+_CS_POSIX_V6_ILP32_OFF32_LDFLAGS
+
+
+	)
+
+609 
+	m_CS_POSIX_V6_ILP32_OFF32_LIBS
+,
+
+610 
+	#_CS_POSIX_V6_ILP32_OFF32_LIBS
+ 
+_CS_POSIX_V6_ILP32_OFF32_LIBS
+
+
+	)
+
+611 
+	m_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
+,
+
+612 
+	#_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
+ 
+_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
+
+
+	)
+
+613 
+	m_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
+,
+
+614 
+	#_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
+ 
+_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
+
+
+	)
+
+615 
+	m_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
+,
+
+616 
+	#_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
+ 
+_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
+
+
+	)
+
+617 
+	m_CS_POSIX_V6_ILP32_OFFBIG_LIBS
+,
+
+618 
+	#_CS_POSIX_V6_ILP32_OFFBIG_LIBS
+ 
+_CS_POSIX_V6_ILP32_OFFBIG_LIBS
+
+
+	)
+
+619 
+	m_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
+,
+
+620 
+	#_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
+ 
+_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
+
+
+	)
+
+621 
+	m_CS_POSIX_V6_LP64_OFF64_CFLAGS
+,
+
+622 
+	#_CS_POSIX_V6_LP64_OFF64_CFLAGS
+ 
+_CS_POSIX_V6_LP64_OFF64_CFLAGS
+
+
+	)
+
+623 
+	m_CS_POSIX_V6_LP64_OFF64_LDFLAGS
+,
+
+624 
+	#_CS_POSIX_V6_LP64_OFF64_LDFLAGS
+ 
+_CS_POSIX_V6_LP64_OFF64_LDFLAGS
+
+
+	)
+
+625 
+	m_CS_POSIX_V6_LP64_OFF64_LIBS
+,
+
+626 
+	#_CS_POSIX_V6_LP64_OFF64_LIBS
+ 
+_CS_POSIX_V6_LP64_OFF64_LIBS
+
+
+	)
+
+627 
+	m_CS_POSIX_V6_LP64_OFF64_LINTFLAGS
+,
+
+628 
+	#_CS_POSIX_V6_LP64_OFF64_LINTFLAGS
+ 
+_CS_POSIX_V6_LP64_OFF64_LINTFLAGS
+
+
+	)
+
+629 
+	m_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
+,
+
+630 
+	#_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
+ 
+_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
+
+
+	)
+
+631 
+	m_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
+,
+
+632 
+	#_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
+ 
+_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
+
+
+	)
+
+633 
+	m_CS_POSIX_V6_LPBIG_OFFBIG_LIBS
+,
+
+634 
+	#_CS_POSIX_V6_LPBIG_OFFBIG_LIBS
+ 
+_CS_POSIX_V6_LPBIG_OFFBIG_LIBS
+
+
+	)
+
+635 
+	m_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
+,
+
+636 
+	#_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
+ 
+_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
+
+
+	)
+
+638 
+	m_CS_POSIX_V7_ILP32_OFF32_CFLAGS
+,
+
+639 
+	#_CS_POSIX_V7_ILP32_OFF32_CFLAGS
+ 
+_CS_POSIX_V7_ILP32_OFF32_CFLAGS
+
+
+	)
+
+640 
+	m_CS_POSIX_V7_ILP32_OFF32_LDFLAGS
+,
+
+641 
+	#_CS_POSIX_V7_ILP32_OFF32_LDFLAGS
+ 
+_CS_POSIX_V7_ILP32_OFF32_LDFLAGS
+
+
+	)
+
+642 
+	m_CS_POSIX_V7_ILP32_OFF32_LIBS
+,
+
+643 
+	#_CS_POSIX_V7_ILP32_OFF32_LIBS
+ 
+_CS_POSIX_V7_ILP32_OFF32_LIBS
+
+
+	)
+
+644 
+	m_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
+,
+
+645 
+	#_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
+ 
+_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
+
+
+	)
+
+646 
+	m_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
+,
+
+647 
+	#_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
+ 
+_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
+
+
+	)
+
+648 
+	m_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
+,
+
+649 
+	#_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
+ 
+_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
+
+
+	)
+
+650 
+	m_CS_POSIX_V7_ILP32_OFFBIG_LIBS
+,
+
+651 
+	#_CS_POSIX_V7_ILP32_OFFBIG_LIBS
+ 
+_CS_POSIX_V7_ILP32_OFFBIG_LIBS
+
+
+	)
+
+652 
+	m_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
+,
+
+653 
+	#_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
+ 
+_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
+
+
+	)
+
+654 
+	m_CS_POSIX_V7_LP64_OFF64_CFLAGS
+,
+
+655 
+	#_CS_POSIX_V7_LP64_OFF64_CFLAGS
+ 
+_CS_POSIX_V7_LP64_OFF64_CFLAGS
+
+
+	)
+
+656 
+	m_CS_POSIX_V7_LP64_OFF64_LDFLAGS
+,
+
+657 
+	#_CS_POSIX_V7_LP64_OFF64_LDFLAGS
+ 
+_CS_POSIX_V7_LP64_OFF64_LDFLAGS
+
+
+	)
+
+658 
+	m_CS_POSIX_V7_LP64_OFF64_LIBS
+,
+
+659 
+	#_CS_POSIX_V7_LP64_OFF64_LIBS
+ 
+_CS_POSIX_V7_LP64_OFF64_LIBS
+
+
+	)
+
+660 
+	m_CS_POSIX_V7_LP64_OFF64_LINTFLAGS
+,
+
+661 
+	#_CS_POSIX_V7_LP64_OFF64_LINTFLAGS
+ 
+_CS_POSIX_V7_LP64_OFF64_LINTFLAGS
+
+
+	)
+
+662 
+	m_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
+,
+
+663 
+	#_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
+ 
+_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
+
+
+	)
+
+664 
+	m_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
+,
+
+665 
+	#_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
+ 
+_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
+
+
+	)
+
+666 
+	m_CS_POSIX_V7_LPBIG_OFFBIG_LIBS
+,
+
+667 
+	#_CS_POSIX_V7_LPBIG_OFFBIG_LIBS
+ 
+_CS_POSIX_V7_LPBIG_OFFBIG_LIBS
+
+
+	)
+
+668 
+	m_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+,
+
+669 
+	#_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+ 
+_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+
+
+	)
+
+671 
+	m_CS_V6_ENV
+,
+
+672 
+	#_CS_V6_ENV
+ 
+_CS_V6_ENV
+
+
+	)
+
+673 
+	m_CS_V7_ENV
+
+
+674 
+	#_CS_V7_ENV
+ 
+_CS_V7_ENV
+
+
+	)
+
+	@/usr/include/bits/environments.h
+
+18 #i�de�
+_UNISTD_H
+
+
+22 
+	~<b�s/w�dsize.h
+>
+
+42 #i�
+__WORDSIZE
+ == 64
+
+56 
+	#_POSIX_V7_LPBIG_OFFBIG
+ -1
+
+	)
+
+57 
+	#_POSIX_V6_LPBIG_OFFBIG
+ -1
+
+	)
+
+58 
+	#_XBS5_LPBIG_OFFBIG
+ -1
+
+	)
+
+61 
+	#_POSIX_V7_LP64_OFF64
+ 1
+
+	)
+
+62 
+	#_POSIX_V6_LP64_OFF64
+ 1
+
+	)
+
+63 
+	#_XBS5_LP64_OFF64
+ 1
+
+	)
+
+69 
+	#_POSIX_V7_ILP32_OFFBIG
+ 1
+
+	)
+
+70 
+	#_POSIX_V6_ILP32_OFFBIG
+ 1
+
+	)
+
+71 
+	#_XBS5_ILP32_OFFBIG
+ 1
+
+	)
+
+73 #i�de�
+__x86_64__
+
+
+75 
+	#_POSIX_V7_ILP32_OFF32
+ 1
+
+	)
+
+76 
+	#_POSIX_V6_ILP32_OFF32
+ 1
+
+	)
+
+77 
+	#_XBS5_ILP32_OFF32
+ 1
+
+	)
+
+95 
+	#__ILP32_OFF32_CFLAGS
+ "-m32"
+
+	)
+
+96 
+	#__ILP32_OFF32_LDFLAGS
+ "-m32"
+
+	)
+
+97 #i�
+def�ed
+ 
+__x86_64__
+ && def�ed 
+__ILP32__
+
+
+98 
+	#__ILP32_OFFBIG_CFLAGS
+ "-mx32"
+
+	)
+
+99 
+	#__ILP32_OFFBIG_LDFLAGS
+ "-mx32"
+
+	)
+
+101 
+	#__ILP32_OFFBIG_CFLAGS
+ "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+
+	)
+
+102 
+	#__ILP32_OFFBIG_LDFLAGS
+ "-m32"
+
+	)
+
+104 
+	#__LP64_OFF64_CFLAGS
+ "-m64"
+
+	)
+
+105 
+	#__LP64_OFF64_LDFLAGS
+ "-m64"
+
+	)
+
+	@/usr/include/bits/epoll.h
+
+18 #i�def 
+_SYS_EPOLL_H
+
+
+25 
+	mEPOLL_CLOEXEC
+ = 02000000
+
+26 
+	#EPOLL_CLOEXEC
+ 
+EPOLL_CLOEXEC
+
+
+	)
+
+29 
+	#__EPOLL_PACKED
+ 
+	`__��ibu�__
+ ((
+__�cked__
+))
+
+	)
+
+	@/usr/include/bits/errno.h
+
+19 #ifde�
+_ERRNO_H
+
+
+21 #unde�
+EDOM
+
+
+22 #unde�
+EILSEQ
+
+
+23 #unde�
+ERANGE
+
+
+24 
+	~<l�ux/��o.h
+>
+
+27 
+	#ENOTSUP
+ 
+EOPNOTSUPP
+
+
+	)
+
+30 #i�de�
+ECANCELED
+
+
+31 
+	#ECANCELED
+ 125
+
+	)
+
+35 #i�de�
+EOWNERDEAD
+
+
+36 
+	#EOWNERDEAD
+ 130
+
+	)
+
+37 
+	#ENOTRECOVERABLE
+ 131
+
+	)
+
+40 #i�de�
+ERFKILL
+
+
+41 
+	#ERFKILL
+ 132
+
+	)
+
+44 #i�de�
+EHWPOISON
+
+
+45 
+	#EHWPOISON
+ 133
+
+	)
+
+48 #i�de�
+__ASSEMBLER__
+
+
+50 
*
+	$__��o_lo�ti�
+ (�
+__THROW
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+));
+
+52 #i�!
+def�ed
+ 
+_LIBC
+ || def�ed 
+_LIBC_REENTRANT
+
+
+54 
+	#��o
+ (*
+	`__��o_lo�ti�
+ ())
+
+	)
+
+59 #i�!
+def�ed
+ 
+_ERRNO_H
+ && def�ed 
+__�ed_Em�h
+
+
+63 
+	#EDOM
+ 33
+
+	)
+
+64 
+	#EILSEQ
+ 84
+
+	)
+
+65 
+	#ERANGE
+ 34
+
+	)
+
+	@/usr/include/bits/fcntl.h
+
+19 #i�de�
+_FCNTL_H
+
+
+23 #ifde�
+__x86_64__
+
+
+24 
+	#__O_LARGEFILE
+ 0
+
+	)
+
+27 #ifde�
+__x86_64__
+
+
+29 
+	#F_GETLK64
+ 5
+
+	)
+
+30 
+	#F_SETLK64
+ 6
+
+	)
+
+31 
+	#F_SETLKW64
+ 7
+
+	)
+
+35 
+	s�ock
+
+
+37 
+	ml_ty�
+;
+
+38 
+	ml_wh��
+;
+
+39 #i�de�
+__USE_FILE_OFFSET64
+
+
+40 
+__off_t
+ 
+	ml_��t
+;
+
+41 
+__off_t
+ 
+	ml_�n
+;
+
+43 
+__off64_t
+ 
+	ml_��t
+;
+
+44 
+__off64_t
+ 
+	ml_�n
+;
+
+46 
+__pid_t
+ 
+	ml_pid
+;
+
+49 #ifde�
+__USE_LARGEFILE64
+
+
+50 
+	s�ock64
+
+
+52 
+	ml_ty�
+;
+
+53 
+	ml_wh��
+;
+
+54 
+__off64_t
+ 
+	ml_��t
+;
+
+55 
+__off64_t
+ 
+	ml_�n
+;
+
+56 
+__pid_t
+ 
+	ml_pid
+;
+
+61 
+	~<b�s/f��-l�ux.h
+>
+
+	@/usr/include/bits/fcntl2.h
+
+19 #i�def 
+_FCNTL_H
+
+
+25 #i�de�
+__USE_FILE_OFFSET64
+
+
+26 

+	$__ݒ_2
+ (cڡ *
+__�th
+, 
+__o�ag
+�
+	`__n�nu�
+ ((1));
+
+27 

+	`__REDIRECT
+ (
+__ݒ_��s
+, (cڡ *
+__�th
+, 
+__o�ag
+, ...),
+
+28 
+ݒ
+�
+	`__n�nu�
+ ((1));
+
+30 

+	`__REDIRECT
+ (
+__ݒ_2
+, (cڡ *
+__�th
+, 
+__o�ag
+),
+
+31 
+__ݒ64_2
+�
+	`__n�nu�
+ ((1));
+
+32 

+	`__REDIRECT
+ (
+__ݒ_��s
+, (cڡ *
+__�th
+, 
+__o�ag
+, ...),
+
+33 
+ݒ64
+�
+	`__n�nu�
+ ((1));
+
+35 
+	`__�r�de�
+ (
+__ݒ_too_m�y_�gs
+,
+
+37 
+	`__�r�de�
+ (
+__ݒ_miss�g_mode
+,
+
+40 
+__f�tify_fun�i�
+ 
+
+41 
+	$ݒ
+ (cڡ *
+__�th
+, 
+__o�ag
+, ...)
+
+43 i�(
+	`__va_�g_�ck_�n
+ () > 1)
+
+44 
+	`__ݒ_too_m�y_�gs
+ ();
+
+46 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__o�ag
+))
+
+48 i�((
+__o�ag
+ & 
+O_CREAT
+�!�0 && 
+	`__va_�g_�ck_�n
+ () < 1)
+
+50 
+	`__ݒ_miss�g_mode
+ ();
+
+51  
+	`__ݒ_2
+ (
+__�th
+, 
+__o�ag
+);
+
+53  
+	`__ݒ_��s
+ (
+__�th
+, 
+__o�ag
+, 
+	`__va_�g_�ck
+ ());
+
+56 i�(
+	`__va_�g_�ck_�n
+ () < 1)
+
+57  
+	`__ݒ_2
+ (
+__�th
+, 
+__o�ag
+);
+
+59  
+	`__ݒ_��s
+ (
+__�th
+, 
+__o�ag
+, 
+	`__va_�g_�ck
+ ());
+
+60 
+	}
+}
+
+63 #ifde�
+__USE_LARGEFILE64
+
+
+64 

+	$__ݒ64_2
+ (cڡ *
+__�th
+, 
+__o�ag
+�
+	`__n�nu�
+ ((1));
+
+65 

+	`__REDIRECT
+ (
+__ݒ64_��s
+, (cڡ *
+__�th
+, 
+__o�ag
+,
+
+66 ...), 
+ݒ64
+�
+	`__n�nu�
+ ((1));
+
+67 
+	`__�r�de�
+ (
+__ݒ64_too_m�y_�gs
+,
+
+69 
+	`__�r�de�
+ (
+__ݒ64_miss�g_mode
+,
+
+72 
+__f�tify_fun�i�
+ 
+
+73 
+	$ݒ64
+ (cڡ *
+__�th
+, 
+__o�ag
+, ...)
+
+75 i�(
+	`__va_�g_�ck_�n
+ () > 1)
+
+76 
+	`__ݒ64_too_m�y_�gs
+ ();
+
+78 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__o�ag
+))
+
+80 i�((
+__o�ag
+ & 
+O_CREAT
+�!�0 && 
+	`__va_�g_�ck_�n
+ () < 1)
+
+82 
+	`__ݒ64_miss�g_mode
+ ();
+
+83  
+	`__ݒ64_2
+ (
+__�th
+, 
+__o�ag
+);
+
+85  
+	`__ݒ64_��s
+ (
+__�th
+, 
+__o�ag
+, 
+	`__va_�g_�ck
+ ());
+
+88 i�(
+	`__va_�g_�ck_�n
+ () < 1)
+
+89  
+	`__ݒ64_2
+ (
+__�th
+, 
+__o�ag
+);
+
+91  
+	`__ݒ64_��s
+ (
+__�th
+, 
+__o�ag
+, 
+	`__va_�g_�ck
+ ());
+
+92 
+	}
+}
+
+96 #ifde�
+__USE_ATFILE
+
+
+97 #i�de�
+__USE_FILE_OFFSET64
+
+
+98 

+	$__ݒ�_2
+ (
+__fd
+, cڡ *
+__�th
+, 
+__o�ag
+)
+
+99 
+	`__n�nu�
+ ((2));
+
+100 

+	`__REDIRECT
+ (
+__ݒ�_��s
+, (
+__fd
+, cڡ *
+__�th
+,
+
+101 
+__o�ag
+, ...), 
+ݒ�
+)
+
+102 
+	`__n�nu�
+ ((2));
+
+104 

+	`__REDIRECT
+ (
+__ݒ�_2
+, (
+__fd
+, cڡ *
+__�th
+,
+
+105 
+__o�ag
+), 
+__ݒ�64_2
+)
+
+106 
+	`__n�nu�
+ ((2));
+
+107 

+	`__REDIRECT
+ (
+__ݒ�_��s
+, (
+__fd
+, cڡ *
+__�th
+,
+
+108 
+__o�ag
+, ...), 
+ݒ�64
+)
+
+109 
+	`__n�nu�
+ ((2));
+
+111 
+	`__�r�de�
+ (
+__ݒ�_too_m�y_�gs
+,
+
+113 
+	`__�r�de�
+ (
+__ݒ�_miss�g_mode
+,
+
+116 
+__f�tify_fun�i�
+ 
+
+117 
+	$ݒ�
+ (
+__fd
+, cڡ *
+__�th
+, 
+__o�ag
+, ...)
+
+119 i�(
+	`__va_�g_�ck_�n
+ () > 1)
+
+120 
+	`__ݒ�_too_m�y_�gs
+ ();
+
+122 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__o�ag
+))
+
+124 i�((
+__o�ag
+ & 
+O_CREAT
+�!�0 && 
+	`__va_�g_�ck_�n
+ () < 1)
+
+126 
+	`__ݒ�_miss�g_mode
+ ();
+
+127  
+	`__ݒ�_2
+ (
+__fd
+, 
+__�th
+, 
+__o�ag
+);
+
+129  
+	`__ݒ�_��s
+ (
+__fd
+, 
+__�th
+, 
+__o�ag
+, 
+	`__va_�g_�ck
+ ());
+
+132 i�(
+	`__va_�g_�ck_�n
+ () < 1)
+
+133  
+	`__ݒ�_2
+ (
+__fd
+, 
+__�th
+, 
+__o�ag
+);
+
+135  
+	`__ݒ�_��s
+ (
+__fd
+, 
+__�th
+, 
+__o�ag
+, 
+	`__va_�g_�ck
+ ());
+
+136 
+	}
+}
+
+139 #ifde�
+__USE_LARGEFILE64
+
+
+140 

+	$__ݒ�64_2
+ (
+__fd
+, cڡ *
+__�th
+, 
+__o�ag
+)
+
+141 
+	`__n�nu�
+ ((2));
+
+142 

+	`__REDIRECT
+ (
+__ݒ�64_��s
+, (
+__fd
+, cڡ *
+__�th
+,
+
+143 
+__o�ag
+, ...), 
+ݒ�64
+)
+
+144 
+	`__n�nu�
+ ((2));
+
+145 
+	`__�r�de�
+ (
+__ݒ�64_too_m�y_�gs
+,
+
+147 
+	`__�r�de�
+ (
+__ݒ�64_miss�g_mode
+,
+
+150 
+__f�tify_fun�i�
+ 
+
+151 
+	$ݒ�64
+ (
+__fd
+, cڡ *
+__�th
+, 
+__o�ag
+, ...)
+
+153 i�(
+	`__va_�g_�ck_�n
+ () > 1)
+
+154 
+	`__ݒ�64_too_m�y_�gs
+ ();
+
+156 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__o�ag
+))
+
+158 i�((
+__o�ag
+ & 
+O_CREAT
+�!�0 && 
+	`__va_�g_�ck_�n
+ () < 1)
+
+160 
+	`__ݒ�64_miss�g_mode
+ ();
+
+161  
+	`__ݒ�64_2
+ (
+__fd
+, 
+__�th
+, 
+__o�ag
+);
+
+163  
+	`__ݒ�64_��s
+ (
+__fd
+, 
+__�th
+, 
+__o�ag
+, 
+	`__va_�g_�ck
+ ());
+
+166 i�(
+	`__va_�g_�ck_�n
+ () < 1)
+
+167  
+	`__ݒ�64_2
+ (
+__fd
+, 
+__�th
+, 
+__o�ag
+);
+
+169  
+	`__ݒ�64_��s
+ (
+__fd
+, 
+__�th
+, 
+__o�ag
+, 
+	`__va_�g_�ck
+ ());
+
+170 
+	}
+}
+
+	@/usr/include/bits/in.h
+
+20 #i�de�
+_NETINET_IN_H
+
+
+29 #ifde�
+_UAPI_LINUX_IN6_H
+
+
+33 
+	#__USE_KERNEL_IPV6_DEFS
+
+
+	)
+
+39 
+	#IP_OPTIONS
+ 4
+
+	)
+
+40 
+	#IP_HDRINCL
+ 3
+
+	)
+
+41 
+	#IP_TOS
+ 1
+
+	)
+
+42 
+	#IP_TTL
+ 2
+
+	)
+
+43 
+	#IP_RECVOPTS
+ 6
+
+	)
+
+45 
+	#IP_RECVRETOPTS
+ 
+IP_RETOPTS
+
+
+	)
+
+46 
+	#IP_RETOPTS
+ 7
+
+	)
+
+47 
+	#IP_MULTICAST_IF
+ 32
+
+	)
+
+48 
+	#IP_MULTICAST_TTL
+ 33
+
+	)
+
+49 
+	#IP_MULTICAST_LOOP
+ 34
+
+	)
+
+50 
+	#IP_ADD_MEMBERSHIP
+ 35
+
+	)
+
+51 
+	#IP_DROP_MEMBERSHIP
+ 36
+
+	)
+
+52 
+	#IP_UNBLOCK_SOURCE
+ 37
+
+	)
+
+53 
+	#IP_BLOCK_SOURCE
+ 38
+
+	)
+
+54 
+	#IP_ADD_SOURCE_MEMBERSHIP
+ 39
+
+	)
+
+55 
+	#IP_DROP_SOURCE_MEMBERSHIP
+ 40
+
+	)
+
+56 
+	#IP_MSFILTER
+ 41
+
+	)
+
+57 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+58 
+	#MCAST_JOIN_GROUP
+ 42
+
+	)
+
+59 
+	#MCAST_BLOCK_SOURCE
+ 43
+
+	)
+
+60 
+	#MCAST_UNBLOCK_SOURCE
+ 44
+
+	)
+
+61 
+	#MCAST_LEAVE_GROUP
+ 45
+
+	)
+
+62 
+	#MCAST_JOIN_SOURCE_GROUP
+ 46
+
+	)
+
+63 
+	#MCAST_LEAVE_SOURCE_GROUP
+ 47
+
+	)
+
+64 
+	#MCAST_MSFILTER
+ 48
+
+	)
+
+65 
+	#IP_MULTICAST_ALL
+ 49
+
+	)
+
+66 
+	#IP_UNICAST_IF
+ 50
+
+	)
+
+68 
+	#MCAST_EXCLUDE
+ 0
+
+	)
+
+69 
+	#MCAST_INCLUDE
+ 1
+
+	)
+
+72 
+	#IP_ROUTER_ALERT
+ 5
+
+	)
+
+73 
+	#IP_PKTINFO
+ 8
+
+	)
+
+74 
+	#IP_PKTOPTIONS
+ 9
+
+	)
+
+75 
+	#IP_PMTUDISC
+ 10
+
+	)
+
+76 
+	#IP_MTU_DISCOVER
+ 10
+
+	)
+
+77 
+	#IP_RECVERR
+ 11
+
+	)
+
+78 
+	#IP_RECVTTL
+ 12
+
+	)
+
+79 
+	#IP_RECVTOS
+ 13
+
+	)
+
+80 
+	#IP_MTU
+ 14
+
+	)
+
+81 
+	#IP_FREEBIND
+ 15
+
+	)
+
+82 
+	#IP_IPSEC_POLICY
+ 16
+
+	)
+
+83 
+	#IP_XFRM_POLICY
+ 17
+
+	)
+
+84 
+	#IP_PASSSEC
+ 18
+
+	)
+
+85 
+	#IP_TRANSPARENT
+ 19
+
+	)
+
+86 
+	#IP_MULTICAST_ALL
+ 49
+
+	)
+
+89 
+	#IP_ORIGDSTADDR
+ 20
+
+	)
+
+90 
+	#IP_RECVORIGDSTADDR
+ 
+IP_ORIGDSTADDR
+
+
+	)
+
+92 
+	#IP_MINTTL
+ 21
+
+	)
+
+96 
+	#IP_PMTUDISC_DONT
+ 0
+
+	)
+
+97 
+	#IP_PMTUDISC_WANT
+ 1
+
+	)
+
+98 
+	#IP_PMTUDISC_DO
+ 2
+
+	)
+
+99 
+	#IP_PMTUDISC_PROBE
+ 3
+
+	)
+
+102 
+	#SOL_IP
+ 0
+
+	)
+
+104 
+	#IP_DEFAULT_MULTICAST_TTL
+ 1
+
+	)
+
+105 
+	#IP_DEFAULT_MULTICAST_LOOP
+ 1
+
+	)
+
+106 
+	#IP_MAX_MEMBERSHIPS
+ 20
+
+	)
+
+108 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_GNU
+
+
+112 
+	s�_�ts
+
+
+114 
+�_addr
+ 
+	m�_d�
+;
+
+115 
+	m�_�ts
+[40];
+
+119 
+	s�_m�qn
+
+
+121 
+�_addr
+ 
+	mimr_muɟddr
+;
+
+122 
+�_addr
+ 
+	mimr_add�ss
+;
+
+123 
+	mimr_if�dex
+;
+
+127 
+	s�_pkt�fo
+
+
+129 
+	m�i_if�dex
+;
+
+130 
+�_addr
+ 
+	m�i_�ec_d�
+;
+
+131 
+�_addr
+ 
+	m�i_addr
+;
+
+138 
+	#IPV6_ADDRFORM
+ 1
+
+	)
+
+139 
+	#IPV6_2292PKTINFO
+ 2
+
+	)
+
+140 
+	#IPV6_2292HOPOPTS
+ 3
+
+	)
+
+141 
+	#IPV6_2292DSTOPTS
+ 4
+
+	)
+
+142 
+	#IPV6_2292RTHDR
+ 5
+
+	)
+
+143 
+	#IPV6_2292PKTOPTIONS
+ 6
+
+	)
+
+144 
+	#IPV6_CHECKSUM
+ 7
+
+	)
+
+145 
+	#IPV6_2292HOPLIMIT
+ 8
+
+	)
+
+147 
+	#SCM_SRCRT
+ 
+IPV6_RXSRCRT
+
+
+	)
+
+149 
+	#IPV6_NEXTHOP
+ 9
+
+	)
+
+150 
+	#IPV6_AUTHHDR
+ 10
+
+	)
+
+151 
+	#IPV6_UNICAST_HOPS
+ 16
+
+	)
+
+152 
+	#IPV6_MULTICAST_IF
+ 17
+
+	)
+
+153 
+	#IPV6_MULTICAST_HOPS
+ 18
+
+	)
+
+154 
+	#IPV6_MULTICAST_LOOP
+ 19
+
+	)
+
+155 
+	#IPV6_JOIN_GROUP
+ 20
+
+	)
+
+156 
+	#IPV6_LEAVE_GROUP
+ 21
+
+	)
+
+157 
+	#IPV6_ROUTER_ALERT
+ 22
+
+	)
+
+158 
+	#IPV6_MTU_DISCOVER
+ 23
+
+	)
+
+159 
+	#IPV6_MTU
+ 24
+
+	)
+
+160 
+	#IPV6_RECVERR
+ 25
+
+	)
+
+161 
+	#IPV6_V6ONLY
+ 26
+
+	)
+
+162 
+	#IPV6_JOIN_ANYCAST
+ 27
+
+	)
+
+163 
+	#IPV6_LEAVE_ANYCAST
+ 28
+
+	)
+
+164 
+	#IPV6_IPSEC_POLICY
+ 34
+
+	)
+
+165 
+	#IPV6_XFRM_POLICY
+ 35
+
+	)
+
+167 
+	#IPV6_RECVPKTINFO
+ 49
+
+	)
+
+168 
+	#IPV6_PKTINFO
+ 50
+
+	)
+
+169 
+	#IPV6_RECVHOPLIMIT
+ 51
+
+	)
+
+170 
+	#IPV6_HOPLIMIT
+ 52
+
+	)
+
+171 
+	#IPV6_RECVHOPOPTS
+ 53
+
+	)
+
+172 
+	#IPV6_HOPOPTS
+ 54
+
+	)
+
+173 
+	#IPV6_RTHDRDSTOPTS
+ 55
+
+	)
+
+174 
+	#IPV6_RECVRTHDR
+ 56
+
+	)
+
+175 
+	#IPV6_RTHDR
+ 57
+
+	)
+
+176 
+	#IPV6_RECVDSTOPTS
+ 58
+
+	)
+
+177 
+	#IPV6_DSTOPTS
+ 59
+
+	)
+
+179 
+	#IPV6_RECVTCLASS
+ 66
+
+	)
+
+180 
+	#IPV6_TCLASS
+ 67
+
+	)
+
+183 
+	#IPV6_ADD_MEMBERSHIP
+ 
+IPV6_JOIN_GROUP
+
+
+	)
+
+184 
+	#IPV6_DROP_MEMBERSHIP
+ 
+IPV6_LEAVE_GROUP
+
+
+	)
+
+185 
+	#IPV6_RXHOPOPTS
+ 
+IPV6_HOPOPTS
+
+
+	)
+
+186 
+	#IPV6_RXDSTOPTS
+ 
+IPV6_DSTOPTS
+
+
+	)
+
+189 
+	#IPV6_PMTUDISC_DONT
+ 0
+
+	)
+
+190 
+	#IPV6_PMTUDISC_WANT
+ 1
+
+	)
+
+191 
+	#IPV6_PMTUDISC_DO
+ 2
+
+	)
+
+192 
+	#IPV6_PMTUDISC_PROBE
+ 3
+
+	)
+
+195 
+	#SOL_IPV6
+ 41
+
+	)
+
+196 
+	#SOL_ICMPV6
+ 58
+
+	)
+
+199 
+	#IPV6_RTHDR_LOOSE
+ 0
+
+	)
+
+200 
+	#IPV6_RTHDR_STRICT
+ 1
+
+	)
+
+202 
+	#IPV6_RTHDR_TYPE_0
+ 0
+
+	)
+
+	@/usr/include/bits/ioctl-types.h
+
+19 #i�de�
+_SYS_IOCTL_H
+
+
+24 
+	~<asm/io�ls.h
+>
+
+27 
+	sw�size
+
+
+29 
+	mws_row
+;
+
+30 
+	mws_c�
+;
+
+31 
+	mws_xpix�
+;
+
+32 
+	mws_ypix�
+;
+
+35 
+	#NCC
+ 8
+
+	)
+
+36 
+	s�rmio
+
+
+38 
+	mc_i�ag
+;
+
+39 
+	mc_o�ag
+;
+
+40 
+	mc_c�ag
+;
+
+41 
+	mc_l�ag
+;
+
+42 
+	mc_l�e
+;
+
+43 
+	mc_cc
+[
+NCC
+];
+
+47 
+	#TIOCM_LE
+ 0x001
+
+	)
+
+48 
+	#TIOCM_DTR
+ 0x002
+
+	)
+
+49 
+	#TIOCM_RTS
+ 0x004
+
+	)
+
+50 
+	#TIOCM_ST
+ 0x008
+
+	)
+
+51 
+	#TIOCM_SR
+ 0x010
+
+	)
+
+52 
+	#TIOCM_CTS
+ 0x020
+
+	)
+
+53 
+	#TIOCM_CAR
+ 0x040
+
+	)
+
+54 
+	#TIOCM_RNG
+ 0x080
+
+	)
+
+55 
+	#TIOCM_DSR
+ 0x100
+
+	)
+
+56 
+	#TIOCM_CD
+ 
+TIOCM_CAR
+
+
+	)
+
+57 
+	#TIOCM_RI
+ 
+TIOCM_RNG
+
+
+	)
+
+62 
+	#N_TTY
+ 0
+
+	)
+
+63 
+	#N_SLIP
+ 1
+
+	)
+
+64 
+	#N_MOUSE
+ 2
+
+	)
+
+65 
+	#N_PPP
+ 3
+
+	)
+
+66 
+	#N_STRIP
+ 4
+
+	)
+
+67 
+	#N_AX25
+ 5
+
+	)
+
+68 
+	#N_X25
+ 6
+
+	)
+
+69 
+	#N_6PACK
+ 7
+
+	)
+
+70 
+	#N_MASC
+ 8
+
+	)
+
+71 
+	#N_R3964
+ 9
+
+	)
+
+72 
+	#N_PROFIBUS_FDL
+ 10
+
+	)
+
+73 
+	#N_IRDA
+ 11
+
+	)
+
+74 
+	#N_SMSBLOCK
+ 12
+
+	)
+
+75 
+	#N_HDLC
+ 13
+
+	)
+
+76 
+	#N_SYNC_PPP
+ 14
+
+	)
+
+77 
+	#N_HCI
+ 15
+
+	)
+
+	@/usr/include/bits/ioctls.h
+
+18 #i�de�
+_SYS_IOCTL_H
+
+
+23 
+	~<asm/io�ls.h
+>
+
+26 
+	#SIOCADDRT
+ 0x890B
+
+	)
+
+27 
+	#SIOCDELRT
+ 0x890C
+
+	)
+
+28 
+	#SIOCRTMSG
+ 0x890D
+
+	)
+
+31 
+	#SIOCGIFNAME
+ 0x8910
+
+	)
+
+32 
+	#SIOCSIFLINK
+ 0x8911
+
+	)
+
+33 
+	#SIOCGIFCONF
+ 0x8912
+
+	)
+
+34 
+	#SIOCGIFFLAGS
+ 0x8913
+
+	)
+
+35 
+	#SIOCSIFFLAGS
+ 0x8914
+
+	)
+
+36 
+	#SIOCGIFADDR
+ 0x8915
+
+	)
+
+37 
+	#SIOCSIFADDR
+ 0x8916
+
+	)
+
+38 
+	#SIOCGIFDSTADDR
+ 0x8917
+
+	)
+
+39 
+	#SIOCSIFDSTADDR
+ 0x8918
+
+	)
+
+40 
+	#SIOCGIFBRDADDR
+ 0x8919
+
+	)
+
+41 
+	#SIOCSIFBRDADDR
+ 0x891�
+
+	)
+
+42 
+	#SIOCGIFNETMASK
+ 0x891b
+
+	)
+
+43 
+	#SIOCSIFNETMASK
+ 0x891�
+
+	)
+
+44 
+	#SIOCGIFMETRIC
+ 0x891d
+
+	)
+
+45 
+	#SIOCSIFMETRIC
+ 0x891�
+
+	)
+
+46 
+	#SIOCGIFMEM
+ 0x891�
+
+	)
+
+47 
+	#SIOCSIFMEM
+ 0x8920
+
+	)
+
+48 
+	#SIOCGIFMTU
+ 0x8921
+
+	)
+
+49 
+	#SIOCSIFMTU
+ 0x8922
+
+	)
+
+50 
+	#SIOCSIFNAME
+ 0x8923
+
+	)
+
+51 
+	#SIOCSIFHWADDR
+ 0x8924
+
+	)
+
+52 
+	#SIOCGIFENCAP
+ 0x8925
+
+	)
+
+53 
+	#SIOCSIFENCAP
+ 0x8926
+
+	)
+
+54 
+	#SIOCGIFHWADDR
+ 0x8927
+
+	)
+
+55 
+	#SIOCGIFSLAVE
+ 0x8929
+
+	)
+
+56 
+	#SIOCSIFSLAVE
+ 0x8930
+
+	)
+
+57 
+	#SIOCADDMULTI
+ 0x8931
+
+	)
+
+58 
+	#SIOCDELMULTI
+ 0x8932
+
+	)
+
+59 
+	#SIOCGIFINDEX
+ 0x8933
+
+	)
+
+60 
+	#SIOGIFINDEX
+ 
+SIOCGIFINDEX
+
+
+	)
+
+61 
+	#SIOCSIFPFLAGS
+ 0x8934
+
+	)
+
+62 
+	#SIOCGIFPFLAGS
+ 0x8935
+
+	)
+
+63 
+	#SIOCDIFADDR
+ 0x8936
+
+	)
+
+64 
+	#SIOCSIFHWBROADCAST
+ 0x8937
+
+	)
+
+65 
+	#SIOCGIFCOUNT
+ 0x8938
+
+	)
+
+67 
+	#SIOCGIFBR
+ 0x8940
+
+	)
+
+68 
+	#SIOCSIFBR
+ 0x8941
+
+	)
+
+70 
+	#SIOCGIFTXQLEN
+ 0x8942
+
+	)
+
+71 
+	#SIOCSIFTXQLEN
+ 0x8943
+
+	)
+
+76 
+	#SIOCDARP
+ 0x8953
+
+	)
+
+77 
+	#SIOCGARP
+ 0x8954
+
+	)
+
+78 
+	#SIOCSARP
+ 0x8955
+
+	)
+
+81 
+	#SIOCDRARP
+ 0x8960
+
+	)
+
+82 
+	#SIOCGRARP
+ 0x8961
+
+	)
+
+83 
+	#SIOCSRARP
+ 0x8962
+
+	)
+
+87 
+	#SIOCGIFMAP
+ 0x8970
+
+	)
+
+88 
+	#SIOCSIFMAP
+ 0x8971
+
+	)
+
+92 
+	#SIOCADDDLCI
+ 0x8980
+
+	)
+
+93 
+	#SIOCDELDLCI
+ 0x8981
+
+	)
+
+102 
+	#SIOCDEVPRIVATE
+ 0x89F0
+
+	)
+
+108 
+	#SIOCPROTOPRIVATE
+ 0x89E0
+
+	)
+
+	@/usr/include/bits/netdb.h
+
+18 #i�de�
+_NETDB_H
+
+
+26 
+	s�
+
+
+28 *
+	mn_�me
+;
+
+29 **
+	mn_���s
+;
+
+30 
+	mn_add�y�
+;
+
+31 
+u�t32_t
+ 
+	mn_�t
+;
+
+	@/usr/include/bits/posix_opt.h
+
+19 #i�def 
+_BITS_POSIX_OPT_H
+
+
+20 
+	#_BITS_POSIX_OPT_H
+ 1
+
+	)
+
+23 
+	#_POSIX_JOB_CONTROL
+ 1
+
+	)
+
+26 
+	#_POSIX_SAVED_IDS
+ 1
+
+	)
+
+29 
+	#_POSIX_PRIORITY_SCHEDULING
+ 200809L
+
+	)
+
+32 
+	#_POSIX_SYNCHRONIZED_IO
+ 200809L
+
+	)
+
+35 
+	#_POSIX_FSYNC
+ 200809L
+
+	)
+
+38 
+	#_POSIX_MAPPED_FILES
+ 200809L
+
+	)
+
+41 
+	#_POSIX_MEMLOCK
+ 200809L
+
+	)
+
+44 
+	#_POSIX_MEMLOCK_RANGE
+ 200809L
+
+	)
+
+47 
+	#_POSIX_MEMORY_PROTECTION
+ 200809L
+
+	)
+
+50 
+	#_POSIX_CHOWN_RESTRICTED
+ 0
+
+	)
+
+54 
+	#_POSIX_VDISABLE
+ '\0'
+
+	)
+
+57 
+	#_POSIX_NO_TRUNC
+ 1
+
+	)
+
+60 
+	#_XOPEN_REALTIME
+ 1
+
+	)
+
+63 
+	#_XOPEN_REALTIME_THREADS
+ 1
+
+	)
+
+66 
+	#_XOPEN_SHM
+ 1
+
+	)
+
+69 
+	#_POSIX_THREADS
+ 200809L
+
+	)
+
+72 
+	#_POSIX_REENTRANT_FUNCTIONS
+ 1
+
+	)
+
+73 
+	#_POSIX_THREAD_SAFE_FUNCTIONS
+ 200809L
+
+	)
+
+76 
+	#_POSIX_THREAD_PRIORITY_SCHEDULING
+ 200809L
+
+	)
+
+79 
+	#_POSIX_THREAD_ATTR_STACKSIZE
+ 200809L
+
+	)
+
+82 
+	#_POSIX_THREAD_ATTR_STACKADDR
+ 200809L
+
+	)
+
+85 
+	#_POSIX_THREAD_PRIO_INHERIT
+ 200809L
+
+	)
+
+89 
+	#_POSIX_THREAD_PRIO_PROTECT
+ 200809L
+
+	)
+
+91 #ifde�
+__USE_XOPEN2K8
+
+
+93 
+	#_POSIX_THREAD_ROBUST_PRIO_INHERIT
+ 200809L
+
+	)
+
+96 
+	#_POSIX_THREAD_ROBUST_PRIO_PROTECT
+ -1
+
+	)
+
+100 
+	#_POSIX_SEMAPHORES
+ 200809L
+
+	)
+
+103 
+	#_POSIX_REALTIME_SIGNALS
+ 200809L
+
+	)
+
+106 
+	#_POSIX_ASYNCHRONOUS_IO
+ 200809L
+
+	)
+
+107 
+	#_POSIX_ASYNC_IO
+ 1
+
+	)
+
+109 
+	#_LFS_ASYNCHRONOUS_IO
+ 1
+
+	)
+
+111 
+	#_POSIX_PRIORITIZED_IO
+ 200809L
+
+	)
+
+114 
+	#_LFS64_ASYNCHRONOUS_IO
+ 1
+
+	)
+
+117 
+	#_LFS_LARGEFILE
+ 1
+
+	)
+
+118 
+	#_LFS64_LARGEFILE
+ 1
+
+	)
+
+119 
+	#_LFS64_STDIO
+ 1
+
+	)
+
+122 
+	#_POSIX_SHARED_MEMORY_OBJECTS
+ 200809L
+
+	)
+
+125 
+	#_POSIX_CPUTIME
+ 0
+
+	)
+
+128 
+	#_POSIX_THREAD_CPUTIME
+ 0
+
+	)
+
+131 
+	#_POSIX_REGEXP
+ 1
+
+	)
+
+134 
+	#_POSIX_READER_WRITER_LOCKS
+ 200809L
+
+	)
+
+137 
+	#_POSIX_SHELL
+ 1
+
+	)
+
+140 
+	#_POSIX_TIMEOUTS
+ 200809L
+
+	)
+
+143 
+	#_POSIX_SPIN_LOCKS
+ 200809L
+
+	)
+
+146 
+	#_POSIX_SPAWN
+ 200809L
+
+	)
+
+149 
+	#_POSIX_TIMERS
+ 200809L
+
+	)
+
+152 
+	#_POSIX_BARRIERS
+ 200809L
+
+	)
+
+155 
+	#_POSIX_MESSAGE_PASSING
+ 200809L
+
+	)
+
+158 
+	#_POSIX_THREAD_PROCESS_SHARED
+ 200809L
+
+	)
+
+161 
+	#_POSIX_MONOTONIC_CLOCK
+ 0
+
+	)
+
+164 
+	#_POSIX_CLOCK_SELECTION
+ 200809L
+
+	)
+
+167 
+	#_POSIX_ADVISORY_INFO
+ 200809L
+
+	)
+
+170 
+	#_POSIX_IPV6
+ 200809L
+
+	)
+
+173 
+	#_POSIX_RAW_SOCKETS
+ 200809L
+
+	)
+
+176 
+	#_POSIX2_CHAR_TERM
+ 200809L
+
+	)
+
+179 
+	#_POSIX_SPORADIC_SERVER
+ -1
+
+	)
+
+180 
+	#_POSIX_THREAD_SPORADIC_SERVER
+ -1
+
+	)
+
+183 
+	#_POSIX_TRACE
+ -1
+
+	)
+
+184 
+	#_POSIX_TRACE_EVENT_FILTER
+ -1
+
+	)
+
+185 
+	#_POSIX_TRACE_INHERIT
+ -1
+
+	)
+
+186 
+	#_POSIX_TRACE_LOG
+ -1
+
+	)
+
+189 
+	#_POSIX_TYPED_MEMORY_OBJECTS
+ -1
+
+	)
+
+	@/usr/include/bits/pthreadtypes.h
+
+18 #i�de�
+_BITS_PTHREADTYPES_H
+
+
+19 
+	#_BITS_PTHREADTYPES_H
+ 1
+
+	)
+
+21 
+	~<b�s/w�dsize.h
+>
+
+23 #ifde�
+__x86_64__
+
+
+24 #i�
+__WORDSIZE
+ == 64
+
+25 
+	#__SIZEOF_PTHREAD_ATTR_T
+ 56
+
+	)
+
+26 
+	#__SIZEOF_PTHREAD_MUTEX_T
+ 40
+
+	)
+
+27 
+	#__SIZEOF_PTHREAD_MUTEXATTR_T
+ 4
+
+	)
+
+28 
+	#__SIZEOF_PTHREAD_COND_T
+ 48
+
+	)
+
+29 
+	#__SIZEOF_PTHREAD_CONDATTR_T
+ 4
+
+	)
+
+30 
+	#__SIZEOF_PTHREAD_RWLOCK_T
+ 56
+
+	)
+
+31 
+	#__SIZEOF_PTHREAD_RWLOCKATTR_T
+ 8
+
+	)
+
+32 
+	#__SIZEOF_PTHREAD_BARRIER_T
+ 32
+
+	)
+
+33 
+	#__SIZEOF_PTHREAD_BARRIERATTR_T
+ 4
+
+	)
+
+35 
+	#__SIZEOF_PTHREAD_ATTR_T
+ 32
+
+	)
+
+36 
+	#__SIZEOF_PTHREAD_MUTEX_T
+ 32
+
+	)
+
+37 
+	#__SIZEOF_PTHREAD_MUTEXATTR_T
+ 4
+
+	)
+
+38 
+	#__SIZEOF_PTHREAD_COND_T
+ 48
+
+	)
+
+39 
+	#__SIZEOF_PTHREAD_CONDATTR_T
+ 4
+
+	)
+
+40 
+	#__SIZEOF_PTHREAD_RWLOCK_T
+ 44
+
+	)
+
+41 
+	#__SIZEOF_PTHREAD_RWLOCKATTR_T
+ 8
+
+	)
+
+42 
+	#__SIZEOF_PTHREAD_BARRIER_T
+ 20
+
+	)
+
+43 
+	#__SIZEOF_PTHREAD_BARRIERATTR_T
+ 4
+
+	)
+
+46 
+	#__SIZEOF_PTHREAD_ATTR_T
+ 36
+
+	)
+
+47 
+	#__SIZEOF_PTHREAD_MUTEX_T
+ 24
+
+	)
+
+48 
+	#__SIZEOF_PTHREAD_MUTEXATTR_T
+ 4
+
+	)
+
+49 
+	#__SIZEOF_PTHREAD_COND_T
+ 48
+
+	)
+
+50 
+	#__SIZEOF_PTHREAD_CONDATTR_T
+ 4
+
+	)
+
+51 
+	#__SIZEOF_PTHREAD_RWLOCK_T
+ 32
+
+	)
+
+52 
+	#__SIZEOF_PTHREAD_RWLOCKATTR_T
+ 8
+
+	)
+
+53 
+	#__SIZEOF_PTHREAD_BARRIER_T
+ 20
+
+	)
+
+54 
+	#__SIZEOF_PTHREAD_BARRIERATTR_T
+ 4
+
+	)
+
+60 
+	t�h�ad_t
+;
+
+63 
+	u�h�ad_��_t
+
+
+65 
+	m__size
+[
+__SIZEOF_PTHREAD_ATTR_T
+];
+
+66 
+	m__�ign
+;
+
+68 #i�de�
+__have_�h�ad_��_t
+
+
+69 
+�h�ad_��_t
+ 
+	t�h�ad_��_t
+;
+
+70 
+	#__have_�h�ad_��_t
+ 1
+
+	)
+
+74 #ifde�
+__x86_64__
+
+
+75 
+	s__�h�ad_����_li�
+
+
+77 
+__�h�ad_����_li�
+ *
+	m__�ev
+;
+
+78 
+__�h�ad_����_li�
+ *
+	m__�xt
+;
+
+79 } 
+	t__�h�ad_li�_t
+;
+
+81 
+	s__�h�ad_����_�i�
+
+
+83 
+__�h�ad_����_�i�
+ *
+	m__�xt
+;
+
+84 } 
+	t__�h�ad_�i�_t
+;
+
+92 
+	s__�h�ad_mu�x_s
+
+
+94 
+	m__lock
+;
+
+95 
+	m__cou�
+;
+
+96 
+	m__ow�r
+;
+
+97 #ifde�
+__x86_64__
+
+
+98 
+	m__nu�rs
+;
+
+102 
+	m__k�d
+;
+
+103 #ifde�
+__x86_64__
+
+
+104 
+	m__��s
+;
+
+105 
+	m__�isi�
+;
+
+106 
+__�h�ad_li�_t
+ 
+	m__li�
+;
+
+107 
+	#__PTHREAD_MUTEX_HAVE_PREV
+ 1
+
+	)
+
+108 
+	#__PTHREAD_MUTEX_HAVE_ELISION
+ 1
+
+	)
+
+110 
+	m__nu�rs
+;
+
+111 
+__ex�nsi�__
+ union
+
+115 
+	m__e��s
+;
+
+116 
+	m__�isi�
+;
+
+117 
+	#__��s
+ 
+d
+.
+__e��s
+
+
+	)
+
+118 
+	#__�isi�
+ 
+d
+.
+__�isi�
+
+
+	)
+
+119 
+	#__PTHREAD_MUTEX_HAVE_ELISION
+ 2
+
+	)
+
+120 } 
+	md
+;
+
+121 
+__�h�ad_�i�_t
+ 
+	m__li�
+;
+
+124 } 
+	m__d�a
+;
+
+125 
+	m__size
+[
+__SIZEOF_PTHREAD_MUTEX_T
+];
+
+126 
+	m__�ign
+;
+
+127 } 
+	t�h�ad_mu�x_t
+;
+
+131 
+	m__size
+[
+__SIZEOF_PTHREAD_MUTEXATTR_T
+];
+
+132 
+	m__�ign
+;
+
+133 } 
+	t�h�ad_mu�x��_t
+;
+
+142 
+	m__lock
+;
+
+143 
+	m__fu�x
+;
+
+144 
+__ex�nsi�__
+ 
+	m__tٮ_�q
+;
+
+145 
+__ex�nsi�__
+ 
+	m__wakeup_�q
+;
+
+146 
+__ex�nsi�__
+ 
+	m__wok�_�q
+;
+
+147 *
+	m__mu�x
+;
+
+148 
+	m__nwa��s
+;
+
+149 
+	m__br�d��_�q
+;
+
+150 } 
+	m__d�a
+;
+
+151 
+	m__size
+[
+__SIZEOF_PTHREAD_COND_T
+];
+
+152 
+__ex�nsi�__
+ 
+	m__�ign
+;
+
+153 } 
+	t�h�ad_c�d_t
+;
+
+157 
+	m__size
+[
+__SIZEOF_PTHREAD_CONDATTR_T
+];
+
+158 
+	m__�ign
+;
+
+159 } 
+	t�h�ad_c�d��_t
+;
+
+163 
+	t�h�ad_key_t
+;
+
+167 
+	t�h�ad_��_t
+;
+
+170 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K
+
+
+175 #ifde�
+__x86_64__
+
+
+178 
+	m__lock
+;
+
+179 
+	m__�_�ad�s
+;
+
+180 
+	m__�ad�s_wakeup
+;
+
+181 
+	m__wr��_wakeup
+;
+
+182 
+	m__�_�ad�s_queued
+;
+
+183 
+	m__�_wr��s_queued
+;
+
+184 
+	m__wr��
+;
+
+185 
+	m__sh�ed
+;
+
+186 
+	m__�d1
+;
+
+187 
+	m__�d2
+;
+
+190 
+	m__�ags
+;
+
+191 
+	#__PTHREAD_RWLOCK_INT_FLAGS_SHARED
+ 1
+
+	)
+
+192 } 
+	m__d�a
+;
+
+196 
+	m__lock
+;
+
+197 
+	m__�_�ad�s
+;
+
+198 
+	m__�ad�s_wakeup
+;
+
+199 
+	m__wr��_wakeup
+;
+
+200 
+	m__�_�ad�s_queued
+;
+
+201 
+	m__�_wr��s_queued
+;
+
+204 
+	m__�ags
+;
+
+205 
+	m__sh�ed
+;
+
+206 
+	m__�d1
+;
+
+207 
+	m__�d2
+;
+
+208 
+	m__wr��
+;
+
+209 } 
+	m__d�a
+;
+
+211 
+	m__size
+[
+__SIZEOF_PTHREAD_RWLOCK_T
+];
+
+212 
+	m__�ign
+;
+
+213 } 
+	t�h�ad_rwlock_t
+;
+
+217 
+	m__size
+[
+__SIZEOF_PTHREAD_RWLOCKATTR_T
+];
+
+218 
+	m__�ign
+;
+
+219 } 
+	t�h�ad_rwlock��_t
+;
+
+223 #ifde�
+__USE_XOPEN2K
+
+
+225 vީ��
+	t�h�ad_��lock_t
+;
+
+232 
+	m__size
+[
+__SIZEOF_PTHREAD_BARRIER_T
+];
+
+233 
+	m__�ign
+;
+
+234 } 
+	t�h�ad_b�r�r_t
+;
+
+238 
+	m__size
+[
+__SIZEOF_PTHREAD_BARRIERATTR_T
+];
+
+239 
+	m__�ign
+;
+
+240 } 
+	t�h�ad_b�r���r_t
+;
+
+244 #i�de�
+__x86_64__
+
+
+246 
+	#__��nup_f�_��ibu�
+ 
+	`__��ibu�__
+ ((
+	`__�g�rm__
+ (1)))
+
+	)
+
+	@/usr/include/bits/resource.h
+
+19 #i�de�
+_SYS_RESOURCE_H
+
+
+23 
+	~<b�s/ty�s.h
+>
+
+31 
+	e__�im�_�sour�
+
+
+34 
+	mRLIMIT_CPU
+ = 0,
+
+35 
+	#RLIMIT_CPU
+ 
+RLIMIT_CPU
+
+
+	)
+
+38 
+	mRLIMIT_FSIZE
+ = 1,
+
+39 
+	#RLIMIT_FSIZE
+ 
+RLIMIT_FSIZE
+
+
+	)
+
+42 
+	mRLIMIT_DATA
+ = 2,
+
+43 
+	#RLIMIT_DATA
+ 
+RLIMIT_DATA
+
+
+	)
+
+46 
+	mRLIMIT_STACK
+ = 3,
+
+47 
+	#RLIMIT_STACK
+ 
+RLIMIT_STACK
+
+
+	)
+
+50 
+	mRLIMIT_CORE
+ = 4,
+
+51 
+	#RLIMIT_CORE
+ 
+RLIMIT_CORE
+
+
+	)
+
+57 
+	m__RLIMIT_RSS
+ = 5,
+
+58 
+	#RLIMIT_RSS
+ 
+__RLIMIT_RSS
+
+
+	)
+
+61 
+	mRLIMIT_NOFILE
+ = 7,
+
+62 
+	m__RLIMIT_OFILE
+ = 
+RLIMIT_NOFILE
+,
+
+63 
+	#RLIMIT_NOFILE
+ 
+RLIMIT_NOFILE
+
+
+	)
+
+64 
+	#RLIMIT_OFILE
+ 
+__RLIMIT_OFILE
+
+
+	)
+
+67 
+	mRLIMIT_AS
+ = 9,
+
+68 
+	#RLIMIT_AS
+ 
+RLIMIT_AS
+
+
+	)
+
+71 
+	m__RLIMIT_NPROC
+ = 6,
+
+72 
+	#RLIMIT_NPROC
+ 
+__RLIMIT_NPROC
+
+
+	)
+
+75 
+	m__RLIMIT_MEMLOCK
+ = 8,
+
+76 
+	#RLIMIT_MEMLOCK
+ 
+__RLIMIT_MEMLOCK
+
+
+	)
+
+79 
+	m__RLIMIT_LOCKS
+ = 10,
+
+80 
+	#RLIMIT_LOCKS
+ 
+__RLIMIT_LOCKS
+
+
+	)
+
+83 
+	m__RLIMIT_SIGPENDING
+ = 11,
+
+84 
+	#RLIMIT_SIGPENDING
+ 
+__RLIMIT_SIGPENDING
+
+
+	)
+
+87 
+	m__RLIMIT_MSGQUEUE
+ = 12,
+
+88 
+	#RLIMIT_MSGQUEUE
+ 
+__RLIMIT_MSGQUEUE
+
+
+	)
+
+93 
+	m__RLIMIT_NICE
+ = 13,
+
+94 
+	#RLIMIT_NICE
+ 
+__RLIMIT_NICE
+
+
+	)
+
+98 
+	m__RLIMIT_RTPRIO
+ = 14,
+
+99 
+	#RLIMIT_RTPRIO
+ 
+__RLIMIT_RTPRIO
+
+
+	)
+
+104 
+	m__RLIMIT_RTTIME
+ = 15,
+
+105 
+	#RLIMIT_RTTIME
+ 
+__RLIMIT_RTTIME
+
+
+	)
+
+107 
+	m__RLIMIT_NLIMITS
+ = 16,
+
+108 
+	m__RLIM_NLIMITS
+ = 
+__RLIMIT_NLIMITS
+
+
+109 
+	#RLIMIT_NLIMITS
+ 
+__RLIMIT_NLIMITS
+
+
+	)
+
+110 
+	#RLIM_NLIMITS
+ 
+__RLIM_NLIMITS
+
+
+	)
+
+114 #i�de�
+__USE_FILE_OFFSET64
+
+
+115 
+	#RLIM_INFINITY
+ ((
+__�im_t
+�-1)
+
+	)
+
+117 
+	#RLIM_INFINITY
+ 0xffffffffffffffffuLL
+
+	)
+
+120 #ifde�
+__USE_LARGEFILE64
+
+
+121 
+	#RLIM64_INFINITY
+ 0xffffffffffffffffuLL
+
+	)
+
+125 
+	#RLIM_SAVED_MAX
+ 
+RLIM_INFINITY
+
+
+	)
+
+126 
+	#RLIM_SAVED_CUR
+ 
+RLIM_INFINITY
+
+
+	)
+
+130 #i�de�
+__USE_FILE_OFFSET64
+
+
+131 
+__�im_t
+ 
+	t�im_t
+;
+
+133 
+__�im64_t
+ 
+	t�im_t
+;
+
+135 #ifde�
+__USE_LARGEFILE64
+
+
+136 
+__�im64_t
+ 
+	t�im64_t
+;
+
+139 
+	s�im�
+
+
+142 
+�im_t
+ 
+	m�im_cur
+;
+
+144 
+�im_t
+ 
+	m�im_max
+;
+
+147 #ifde�
+__USE_LARGEFILE64
+
+
+148 
+	s�im�64
+
+
+151 
+�im64_t
+ 
+	m�im_cur
+;
+
+153 
+�im64_t
+ 
+	m�im_max
+;
+
+158 
+	e__ru�ge_who
+
+
+161 
+	mRUSAGE_SELF
+ = 0,
+
+162 
+	#RUSAGE_SELF
+ 
+RUSAGE_SELF
+
+
+	)
+
+165 
+	mRUSAGE_CHILDREN
+ = -1
+
+166 
+	#RUSAGE_CHILDREN
+ 
+RUSAGE_CHILDREN
+
+
+	)
+
+168 #ifde�
+__USE_GNU
+
+
+171 
+	mRUSAGE_THREAD
+ = 1
+
+172 
+	#RUSAGE_THREAD
+ 
+RUSAGE_THREAD
+
+
+	)
+
+174 
+	#RUSAGE_LWP
+ 
+RUSAGE_THREAD
+
+
+	)
+
+178 
+	#__�ed_timev�
+
+
+	)
+
+179 
+	~<b�s/time.h
+>
+
+187 
+	sru�ge
+
+
+190 
+timev�
+ 
+	mru_utime
+;
+
+192 
+timev�
+ 
+	mru_�ime
+;
+
+194 
+__ex�nsi�__
+ union
+
+196 
+	mru_maxrss
+;
+
+197 
+__sys��_��g_t
+ 
+	m__ru_maxrss_w�d
+;
+
+202 
+__ex�nsi�__
+ union
+
+204 
+	mru_ixrss
+;
+
+205 
+__sys��_��g_t
+ 
+	m__ru_ixrss_w�d
+;
+
+208 
+__ex�nsi�__
+ union
+
+210 
+	mru_idrss
+;
+
+211 
+__sys��_��g_t
+ 
+	m__ru_idrss_w�d
+;
+
+214 
+__ex�nsi�__
+ union
+
+216 
+	mru_i�ss
+;
+
+217 
+__sys��_��g_t
+ 
+	m__ru_i�ss_w�d
+;
+
+221 
+__ex�nsi�__
+ union
+
+223 
+	mru_m��t
+;
+
+224 
+__sys��_��g_t
+ 
+	m__ru_m��t_w�d
+;
+
+227 
+__ex�nsi�__
+ union
+
+229 
+	mru_maj�t
+;
+
+230 
+__sys��_��g_t
+ 
+	m__ru_maj�t_w�d
+;
+
+233 
+__ex�nsi�__
+ union
+
+235 
+	mru_nsw�
+;
+
+236 
+__sys��_��g_t
+ 
+	m__ru_nsw�_w�d
+;
+
+240 
+__ex�nsi�__
+ union
+
+242 
+	mru_�block
+;
+
+243 
+__sys��_��g_t
+ 
+	m__ru_�block_w�d
+;
+
+246 
+__ex�nsi�__
+ union
+
+248 
+	mru_oublock
+;
+
+249 
+__sys��_��g_t
+ 
+	m__ru_oublock_w�d
+;
+
+252 
+__ex�nsi�__
+ union
+
+254 
+	mru_msg�d
+;
+
+255 
+__sys��_��g_t
+ 
+	m__ru_msg�d_w�d
+;
+
+258 
+__ex�nsi�__
+ union
+
+260 
+	mru_msgrcv
+;
+
+261 
+__sys��_��g_t
+ 
+	m__ru_msgrcv_w�d
+;
+
+264 
+__ex�nsi�__
+ union
+
+266 
+	mru_nsig�ls
+;
+
+267 
+__sys��_��g_t
+ 
+	m__ru_nsig�ls_w�d
+;
+
+272 
+__ex�nsi�__
+ union
+
+274 
+	mru_nvcsw
+;
+
+275 
+__sys��_��g_t
+ 
+	m__ru_nvcsw_w�d
+;
+
+279 
+__ex�nsi�__
+ union
+
+281 
+	mru_nivcsw
+;
+
+282 
+__sys��_��g_t
+ 
+	m__ru_nivcsw_w�d
+;
+
+287 
+	#PRIO_MIN
+ -20
+
+	)
+
+288 
+	#PRIO_MAX
+ 20
+
+	)
+
+292 
+	e__�iܙy_which
+
+
+294 
+	mPRIO_PROCESS
+ = 0,
+
+295 
+	#PRIO_PROCESS
+ 
+PRIO_PROCESS
+
+
+	)
+
+296 
+	mPRIO_PGRP
+ = 1,
+
+297 
+	#PRIO_PGRP
+ 
+PRIO_PGRP
+
+
+	)
+
+298 
+	mPRIO_USER
+ = 2
+
+299 
+	#PRIO_USER
+ 
+PRIO_USER
+
+
+	)
+
+303 
+	g__BEGIN_DECLS
+
+
+305 #ifde�
+__USE_GNU
+
+
+307 #i�de�
+__USE_FILE_OFFSET64
+
+
+308 

+	$�lim�
+ (
+__pid_t
+ 
+__pid
+, 
+__�im�_�sour�
+ 
+__�sour�
+,
+
+309 cڡ 
+�im�
+ *
+__�w_lim�
+,
+
+310 
+�im�
+ *
+__�d_lim�
+�
+__THROW
+;
+
+312 #ifde�
+__REDIRECT_NTH
+
+
+313 

+	`__REDIRECT_NTH
+ (
+�lim�
+, (
+__pid_t
+ 
+__pid
+,
+
+314 
+__�im�_�sour�
+ 
+__�sour�
+,
+
+315 cڡ 
+�im�
+ *
+__�w_lim�
+,
+
+316 
+�im�
+ *
+__�d_lim�
+), 
+�lim�64
+);
+
+318 
+	#�lim�
+ 
+�lim�64
+
+
+	)
+
+321 #ifde�
+__USE_LARGEFILE64
+
+
+322 

+	$�lim�64
+ (
+__pid_t
+ 
+__pid
+, 
+__�im�_�sour�
+ 
+__�sour�
+,
+
+323 cڡ 
+�im�64
+ *
+__�w_lim�
+,
+
+324 
+�im�64
+ *
+__�d_lim�
+�
+__THROW
+;
+
+328 
+__END_DECLS
+
+
+	@/usr/include/bits/select.h
+
+18 #i�de�
+_SYS_SELECT_H
+
+
+22 
+	~<b�s/w�dsize.h
+>
+
+25 #i�
+def�ed
+ 
+__GNUC__
+ && __GNUC__ >= 2
+
+27 #i�
+__WORDSIZE
+ == 64
+
+28 
+	#__FD_ZERO_STOS
+ "�osq"
+
+	)
+
+30 
+	#__FD_ZERO_STOS
+ "�o�"
+
+	)
+
+33 
+	#__FD_ZERO
+(
+fd�
+) \
+
+35 
+__d0
+, 
+__d1
+; \
+
+36 
+__asm__
+ 
+	`__vީ�e__
+ ("�d;��; " 
+__FD_ZERO_STOS
+ \
+
+37 : "=c" (
+__d0
+), "=D" (
+__d1
+) \
+
+38 : "a" (0), "0" ( (
+fd_�t
+) \
+
+39 /  (
+__fd_mask
+)), \
+
+40 "1" (&
+	`__FDS_BITS
+ (
+fd�
+)[0]) \
+
+42 } 0)
+
+	)
+
+48 
+	#__FD_ZERO
+(
+�t
+) \
+
+50 
+__i
+; \
+
+51 
+fd_�t
+ *
+__�r
+ = (
+�t
+); \
+
+52 
+__i
+ = 0; __�<  (
+fd_�t
+�/  (
+__fd_mask
+); ++__i) \
+
+53 
+	`__FDS_BITS
+ (
+__�r
+)[
+__i
+] = 0; \
+
+54 } 0)
+
+	)
+
+58 
+	#__FD_SET
+(
+d
+, 
+�t
+) \
+
+59 ((�(
+	`__FDS_BITS
+ (
+�t
+)[
+	`__FD_ELT
+ (
+d
+)] |�
+	`__FD_MASK
+ (d)))
+
+	)
+
+60 
+	#__FD_CLR
+(
+d
+, 
+�t
+) \
+
+61 ((�(
+	`__FDS_BITS
+ (
+�t
+)[
+	`__FD_ELT
+ (
+d
+)] &�~
+	`__FD_MASK
+ (d)))
+
+	)
+
+62 
+	#__FD_ISSET
+(
+d
+, 
+�t
+) \
+
+63 ((
+	`__FDS_BITS
+ (
+�t
+)[
+	`__FD_ELT
+ (
+d
+)] & 
+	`__FD_MASK
+ (d)�!�0)
+
+	)
+
+	@/usr/include/bits/select2.h
+
+19 #i�de�
+_SYS_SELECT_H
+
+
+24 

+__fd�t_chk
+ (
+__d
+);
+
+25 

+	$__fd�t_w�n
+ (
+__d
+)
+
+26 
+	`__w�ljr
+ ("bit outside of fd_set selected");
+
+27 #unde�
+__FD_ELT
+
+
+28 
+	#__FD_ELT
+(
+d
+) \
+
+29 
+__ex�nsi�__
+ \
+
+30 ({ 
+__d
+ = (
+d
+); \
+
+31 (
+	`__bu�t�_cڡ�t_p
+ (
+__d
+) \
+
+32 ? (0 <�
+__d
+ && __d < 
+__FD_SETSIZE
+ \
+
+33 ? (
+__d
+ / 
+__NFDBITS
+) \
+
+34 : 
+	`__fd�t_w�n
+ (
+__d
+)) \
+
+35 : 
+	`__fd�t_chk
+ (
+__d
+)); 
+	}
+})
+
+	)
+
+	@/usr/include/bits/setjmp.h
+
+19 #i�de�
+_BITS_SETJMP_H
+
+
+20 
+	#_BITS_SETJMP_H
+ 1
+
+	)
+
+22 #i�!
+def�ed
+ 
+_SETJMP_H
+ && !def�ed 
+_PTHREAD_H
+
+
+26 
+	~<b�s/w�dsize.h
+>
+
+28 #i�de�
+_ASM
+
+
+30 #i�
+__WORDSIZE
+ == 64
+
+31 
+	t__jmp_buf
+[8];
+
+32 #�i�
+def�ed
+ 
+__x86_64__
+
+
+33 
+__ex�nsi�__
+ 
+	t__jmp_buf
+[8];
+
+35 
+	t__jmp_buf
+[6];
+
+	@/usr/include/bits/sigaction.h
+
+19 #i�de�
+_SIGNAL_H
+
+
+24 
+	ssiga�i�
+
+
+27 #ifde�
+__USE_POSIX199309
+
+
+31 
+__sigh�d�r_t
+ 
+	m�_h�d�r
+;
+
+33 (*
+	m�_siga�i�
+�(, 
+	msig�fo_t
+ *, *);
+
+35 
+	m__siga�i�_h�d�r
+;
+
+36 
+	#�_h�d�r
+ 
+__siga�i�_h�d�r
+.
+�_h�d�r
+
+
+	)
+
+37 
+	#�_siga�i�
+ 
+__siga�i�_h�d�r
+.
+�_siga�i�
+
+
+	)
+
+39 
+__sigh�d�r_t
+ 
+	m�_h�d�r
+;
+
+43 
+__sig�t_t
+ 
+	m�_mask
+;
+
+46 
+	m�_�ags
+;
+
+49 (*
+	m�_��ܔ
+) ();
+
+53 
+	#SA_NOCLDSTOP
+ 1
+
+	)
+
+54 
+	#SA_NOCLDWAIT
+ 2
+
+	)
+
+55 
+	#SA_SIGINFO
+ 4
+
+	)
+
+57 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_MISC
+
+
+58 
+	#SA_ONSTACK
+ 0x08000000
+
+	)
+
+60 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN2K8
+
+
+61 
+	#SA_RESTART
+ 0x10000000
+
+	)
+
+62 
+	#SA_NODEFER
+ 0x40000000
+
+	)
+
+64 
+	#SA_RESETHAND
+ 0x80000000
+
+	)
+
+66 #ifde�
+__USE_MISC
+
+
+67 
+	#SA_INTERRUPT
+ 0x20000000
+
+	)
+
+70 
+	#SA_NOMASK
+ 
+SA_NODEFER
+
+
+	)
+
+71 
+	#SA_ONESHOT
+ 
+SA_RESETHAND
+
+
+	)
+
+72 
+	#SA_STACK
+ 
+SA_ONSTACK
+
+
+	)
+
+76 
+	#SIG_BLOCK
+ 0
+
+	)
+
+77 
+	#SIG_UNBLOCK
+ 1
+
+	)
+
+78 
+	#SIG_SETMASK
+ 2
+
+	)
+
+	@/usr/include/bits/sigcontext.h
+
+18 #i�de�
+_BITS_SIGCONTEXT_H
+
+
+19 
+	#_BITS_SIGCONTEXT_H
+ 1
+
+	)
+
+21 #i�!
+def�ed
+ 
+_SIGNAL_H
+ && !def�ed 
+_SYS_UCONTEXT_H
+
+
+25 
+	#FP_XSTATE_MAGIC1
+ 0x46505853U
+
+	)
+
+26 
+	#FP_XSTATE_MAGIC2
+ 0x46505845U
+
+	)
+
+27 
+	#FP_XSTATE_MAGIC2_SIZE
+ (
+FP_XSTATE_MAGIC2
+)
+
+	)
+
+29 
+	s_�x_sw_by�s
+
+
+31 
+__u�t32_t
+ 
+	mmagic1
+;
+
+32 
+__u�t32_t
+ 
+	mex�nded_size
+;
+
+33 
+__u�t64_t
+ 
+	mx��e_bv
+;
+
+34 
+__u�t32_t
+ 
+	mx��e_size
+;
+
+35 
+__u�t32_t
+ 
+	m�dd�g
+[7];
+
+38 
+	s_�g
+
+
+40 
+	msignifi�nd
+[4];
+
+41 
+	mexpڒt
+;
+
+44 
+	s_�x�g
+
+
+46 
+	msignifi�nd
+[4];
+
+47 
+	mexpڒt
+;
+
+48 
+	m�dd�g
+[3];
+
+51 
+	s_xmm�g
+
+
+53 
+__u�t32_t
+ 
+	m�em�t
+[4];
+
+58 #i�de�
+__x86_64__
+
+
+60 
+	s_塩e
+
+
+63 
+__u�t32_t
+ 
+	mcw
+;
+
+64 
+__u�t32_t
+ 
+	msw
+;
+
+65 
+__u�t32_t
+ 
+	m�g
+;
+
+66 
+__u�t32_t
+ 
+	m�off
+;
+
+67 
+__u�t32_t
+ 
+	mcs�l
+;
+
+68 
+__u�t32_t
+ 
+	md�aoff
+;
+
+69 
+__u�t32_t
+ 
+	md�a�l
+;
+
+70 
+_�g
+ 
+	m_�
+[8];
+
+71 
+	m��us
+;
+
+72 
+	mmagic
+;
+
+75 
+__u�t32_t
+ 
+	m_fx�_�v
+[6];
+
+76 
+__u�t32_t
+ 
+	mmxc�
+;
+
+77 
+__u�t32_t
+ 
+	m��rved
+;
+
+78 
+_�x�g
+ 
+	m_fx�_�
+[8];
+
+79 
+_xmm�g
+ 
+	m_xmm
+[8];
+
+80 
+__u�t32_t
+ 
+	m�dd�g
+[56];
+
+83 #i�de�
+sigcڋxt_�ru�
+
+
+88 
+	#sigcڋxt_�ru�
+ 
+sigcڋxt
+
+
+	)
+
+91 
+	#X86_FXSR_MAGIC
+ 0x0000
+
+	)
+
+93 
+	ssigcڋxt
+
+
+95 
+	mgs
+, 
+	m__gsh
+;
+
+96 
+	mfs
+, 
+	m__fsh
+;
+
+97 
+	mes
+, 
+	m__esh
+;
+
+98 
+	mds
+, 
+	m__dsh
+;
+
+99 
+	medi
+;
+
+100 
+	mesi
+;
+
+101 
+	mebp
+;
+
+102 
+	me�
+;
+
+103 
+	mebx
+;
+
+104 
+	medx
+;
+
+105 
+	mecx
+;
+
+106 
+	m�x
+;
+
+107 
+	m��no
+;
+
+108 
+	m�r
+;
+
+109 
+	me�
+;
+
+110 
+	mcs
+, 
+	m__csh
+;
+
+111 
+	me�ags
+;
+
+112 
+	me�_�_sig�l
+;
+
+113 
+	mss
+, 
+	m__ssh
+;
+
+114 
+_塩e
+ * 
+	m塩e
+;
+
+115 
+	m�dmask
+;
+
+116 
+	m�2
+;
+
+121 
+	s_塩e
+
+
+124 
+__u�t16_t
+ 
+	mcwd
+;
+
+125 
+__u�t16_t
+ 
+	mswd
+;
+
+126 
+__u�t16_t
+ 
+	m�w
+;
+
+127 
+__u�t16_t
+ 
+	mf�
+;
+
+128 
+__u�t64_t
+ 
+	mr�
+;
+
+129 
+__u�t64_t
+ 
+	mrdp
+;
+
+130 
+__u�t32_t
+ 
+	mmxc�
+;
+
+131 
+__u�t32_t
+ 
+	mmx�_mask
+;
+
+132 
+_�x�g
+ 
+	m_�
+[8];
+
+133 
+_xmm�g
+ 
+	m_xmm
+[16];
+
+134 
+__u�t32_t
+ 
+	m�dd�g
+[24];
+
+137 
+	ssigcڋxt
+
+
+139 
+__u�t64_t
+ 
+	mr8
+;
+
+140 
+__u�t64_t
+ 
+	mr9
+;
+
+141 
+__u�t64_t
+ 
+	mr10
+;
+
+142 
+__u�t64_t
+ 
+	mr11
+;
+
+143 
+__u�t64_t
+ 
+	mr12
+;
+
+144 
+__u�t64_t
+ 
+	mr13
+;
+
+145 
+__u�t64_t
+ 
+	mr14
+;
+
+146 
+__u�t64_t
+ 
+	mr15
+;
+
+147 
+__u�t64_t
+ 
+	mrdi
+;
+
+148 
+__u�t64_t
+ 
+	mrsi
+;
+
+149 
+__u�t64_t
+ 
+	mrbp
+;
+
+150 
+__u�t64_t
+ 
+	mrbx
+;
+
+151 
+__u�t64_t
+ 
+	mrdx
+;
+
+152 
+__u�t64_t
+ 
+	m�x
+;
+
+153 
+__u�t64_t
+ 
+	mrcx
+;
+
+154 
+__u�t64_t
+ 
+	mr�
+;
+
+155 
+__u�t64_t
+ 
+	mr�
+;
+
+156 
+__u�t64_t
+ 
+	me�ags
+;
+
+157 
+	mcs
+;
+
+158 
+	mgs
+;
+
+159 
+	mfs
+;
+
+160 
+	m__�d0
+;
+
+161 
+__u�t64_t
+ 
+	m�r
+;
+
+162 
+__u�t64_t
+ 
+	m��no
+;
+
+163 
+__u�t64_t
+ 
+	m�dmask
+;
+
+164 
+__u�t64_t
+ 
+	m�2
+;
+
+165 
+__ex�nsi�__
+ union
+
+167 
+_塩e
+ * 
+	m塩e
+;
+
+168 
+__u�t64_t
+ 
+	m__塩e_w�d
+;
+
+170 
+__u�t64_t
+ 
+	m__��rved1
+ [8];
+
+175 
+	s_x�ve_hdr
+
+
+177 
+__u�t64_t
+ 
+	mx��e_bv
+;
+
+178 
+__u�t64_t
+ 
+	m��rved1
+[2];
+
+179 
+__u�t64_t
+ 
+	m��rved2
+[5];
+
+182 
+	s_ymmh_��e
+
+
+184 
+__u�t32_t
+ 
+	mymmh_�a�
+[64];
+
+187 
+	s_x��e
+
+
+189 
+_塩e
+ 
+	m塩e
+;
+
+190 
+_x�ve_hdr
+ 
+	mx��e_hdr
+;
+
+191 
+_ymmh_��e
+ 
+	mymmh
+;
+
+	@/usr/include/bits/siginfo.h
+
+19 #i�!
+def�ed
+ 
+_SIGNAL_H
+ && !def�ed 
+__�ed_sig�fo_t
+ \
+
+20 && !
+def�ed
+ 
+	g__�ed_sigev�t_t
+
+
+24 
+	~<b�s/w�dsize.h
+>
+
+26 #i�(!
+def�ed
+ 
+__have_sigv�_t
+ \
+
+27 && (
+def�ed
+ 
+	g_SIGNAL_H
+ || def�ed 
+	g__�ed_sig�fo_t
+ \
+
+28 || 
+def�ed
+ 
+	g__�ed_sigev�t_t
+))
+
+29 
+	#__have_sigv�_t
+ 1
+
+	)
+
+32 
+	usigv�
+
+
+34 
+	msiv�_�t
+;
+
+35 *
+	msiv�_�r
+;
+
+36 } 
+	tsigv�_t
+;
+
+39 #i�(!
+def�ed
+ 
+__have_sig�fo_t
+ \
+
+40 && (
+def�ed
+ 
+	g_SIGNAL_H
+ || def�ed 
+	g__�ed_sig�fo_t
+))
+
+41 
+	#__have_sig�fo_t
+ 1
+
+	)
+
+43 
+	#__SI_MAX_SIZE
+ 128
+
+	)
+
+44 #i�
+__WORDSIZE
+ == 64
+
+45 
+	#__SI_PAD_SIZE
+ ((
+__SI_MAX_SIZE
+ /  ()�- 4)
+
+	)
+
+47 
+	#__SI_PAD_SIZE
+ ((
+__SI_MAX_SIZE
+ /  ()�- 3)
+
+	)
+
+50 #i�
+def�ed
+ 
+__x86_64__
+ && 
+__WORDSIZE
+ == 32
+
+55 
+__�ock_t
+ 
+	t__��ibu�__
+ ((
+	t__�ig�d__
+ (4))�
+	t__sigchld_�ock_t
+;
+
+56 
+	#__SI_ALIGNMENT
+ 
+	`__��ibu�__
+ ((
+	`__�ig�d__
+ (8)))
+
+	)
+
+58 
+__�ock_t
+ 
+	t__sigchld_�ock_t
+;
+
+59 
+	#__SI_ALIGNMENT
+
+
+	)
+
+64 
+si_signo
+;
+
+65 
+si_��o
+;
+
+67 
+si_code
+;
+
+71 
+_�d
+[
+__SI_PAD_SIZE
+];
+
+76 
+__pid_t
+ 
+si_pid
+;
+
+77 
+__uid_t
+ 
+si_uid
+;
+
+78 } 
+_k�l
+;
+
+83 
+si_tid
+;
+
+84 
+si_ov�run
+;
+
+85 
+sigv�_t
+ 
+si_sigv�
+;
+
+86 } 
+_tim�
+;
+
+91 
+__pid_t
+ 
+si_pid
+;
+
+92 
+__uid_t
+ 
+si_uid
+;
+
+93 
+sigv�_t
+ 
+si_sigv�
+;
+
+94 } 
+_�
+;
+
+99 
+__pid_t
+ 
+si_pid
+;
+
+100 
+__uid_t
+ 
+si_uid
+;
+
+101 
+si_��us
+;
+
+102 
+__sigchld_�ock_t
+ 
+si_utime
+;
+
+103 
+__sigchld_�ock_t
+ 
+si_�ime
+;
+
+104 } 
+_sigchld
+;
+
+109 *
+si_addr
+;
+
+110 
+si_addr_lsb
+;
+
+111 } 
+_sig�u�
+;
+
+116 
+si_b�d
+;
+
+117 
+si_fd
+;
+
+118 } 
+_sigp�l
+;
+
+123 *
+_��_addr
+;
+
+124 
+_sys��
+;
+
+125 
+_�ch
+;
+
+126 } 
+_sigsys
+;
+
+127 } 
+_sif�lds
+;
+
+128 } 
+	tsig�fo_t
+ 
+	t__SI_ALIGNMENT
+;
+
+132 
+	#si_pid
+ 
+_sif�lds
+.
+_k�l
+.
+si_pid
+
+
+	)
+
+133 
+	#si_uid
+ 
+_sif�lds
+.
+_k�l
+.
+si_uid
+
+
+	)
+
+134 
+	#si_tim�id
+ 
+_sif�lds
+.
+_tim�
+.
+si_tid
+
+
+	)
+
+135 
+	#si_ov�run
+ 
+_sif�lds
+.
+_tim�
+.
+si_ov�run
+
+
+	)
+
+136 
+	#si_��us
+ 
+_sif�lds
+.
+_sigchld
+.
+si_��us
+
+
+	)
+
+137 
+	#si_utime
+ 
+_sif�lds
+.
+_sigchld
+.
+si_utime
+
+
+	)
+
+138 
+	#si_�ime
+ 
+_sif�lds
+.
+_sigchld
+.
+si_�ime
+
+
+	)
+
+139 
+	#si_v�ue
+ 
+_sif�lds
+.
+_�
+.
+si_sigv�
+
+
+	)
+
+140 
+	#si_�t
+ 
+_sif�lds
+.
+_�
+.
+si_sigv�
+.
+siv�_�t
+
+
+	)
+
+141 
+	#si_�r
+ 
+_sif�lds
+.
+_�
+.
+si_sigv�
+.
+siv�_�r
+
+
+	)
+
+142 
+	#si_addr
+ 
+_sif�lds
+.
+_sig�u�
+.
+si_addr
+
+
+	)
+
+143 
+	#si_addr_lsb
+ 
+_sif�lds
+.
+_sig�u�
+.
+si_addr_lsb
+
+
+	)
+
+144 
+	#si_b�d
+ 
+_sif�lds
+.
+_sigp�l
+.
+si_b�d
+
+
+	)
+
+145 
+	#si_fd
+ 
+_sif�lds
+.
+_sigp�l
+.
+si_fd
+
+
+	)
+
+146 
+	#si_��_addr
+ 
+_sif�lds
+.
+_sigsys
+.
+_��_addr
+
+
+	)
+
+147 
+	#si_sys��
+ 
+_sif�lds
+.
+_sigsys
+.
+_sys��
+
+
+	)
+
+148 
+	#si_�ch
+ 
+_sif�lds
+.
+_sigsys
+.
+_�ch
+
+
+	)
+
+155 
+SI_ASYNCNL
+ = -60,
+
+156 
+	#SI_ASYNCNL
+ 
+SI_ASYNCNL
+
+
+	)
+
+157 
+SI_TKILL
+ = -6,
+
+158 
+	#SI_TKILL
+ 
+SI_TKILL
+
+
+	)
+
+159 
+SI_SIGIO
+,
+
+160 
+	#SI_SIGIO
+ 
+SI_SIGIO
+
+
+	)
+
+161 
+SI_ASYNCIO
+,
+
+162 
+	#SI_ASYNCIO
+ 
+SI_ASYNCIO
+
+
+	)
+
+163 
+SI_MESGQ
+,
+
+164 
+	#SI_MESGQ
+ 
+SI_MESGQ
+
+
+	)
+
+165 
+SI_TIMER
+,
+
+166 
+	#SI_TIMER
+ 
+SI_TIMER
+
+
+	)
+
+167 
+SI_QUEUE
+,
+
+168 
+	#SI_QUEUE
+ 
+SI_QUEUE
+
+
+	)
+
+169 
+SI_USER
+,
+
+170 
+	#SI_USER
+ 
+SI_USER
+
+
+	)
+
+171 
+SI_KERNEL
+ = 0x80
+
+172 
+	#SI_KERNEL
+ 
+SI_KERNEL
+
+
+	)
+
+179 
+ILL_ILLOPC
+ = 1,
+
+180 
+	#ILL_ILLOPC
+ 
+ILL_ILLOPC
+
+
+	)
+
+181 
+ILL_ILLOPN
+,
+
+182 
+	#ILL_ILLOPN
+ 
+ILL_ILLOPN
+
+
+	)
+
+183 
+ILL_ILLADR
+,
+
+184 
+	#ILL_ILLADR
+ 
+ILL_ILLADR
+
+
+	)
+
+185 
+ILL_ILLTRP
+,
+
+186 
+	#ILL_ILLTRP
+ 
+ILL_ILLTRP
+
+
+	)
+
+187 
+ILL_PRVOPC
+,
+
+188 
+	#ILL_PRVOPC
+ 
+ILL_PRVOPC
+
+
+	)
+
+189 
+ILL_PRVREG
+,
+
+190 
+	#ILL_PRVREG
+ 
+ILL_PRVREG
+
+
+	)
+
+191 
+ILL_COPROC
+,
+
+192 
+	#ILL_COPROC
+ 
+ILL_COPROC
+
+
+	)
+
+193 
+ILL_BADSTK
+
+
+194 
+	#ILL_BADSTK
+ 
+ILL_BADSTK
+
+
+	)
+
+200 
+FPE_INTDIV
+ = 1,
+
+201 
+	#FPE_INTDIV
+ 
+FPE_INTDIV
+
+
+	)
+
+202 
+FPE_INTOVF
+,
+
+203 
+	#FPE_INTOVF
+ 
+FPE_INTOVF
+
+
+	)
+
+204 
+FPE_FLTDIV
+,
+
+205 
+	#FPE_FLTDIV
+ 
+FPE_FLTDIV
+
+
+	)
+
+206 
+FPE_FLTOVF
+,
+
+207 
+	#FPE_FLTOVF
+ 
+FPE_FLTOVF
+
+
+	)
+
+208 
+FPE_FLTUND
+,
+
+209 
+	#FPE_FLTUND
+ 
+FPE_FLTUND
+
+
+	)
+
+210 
+FPE_FLTRES
+,
+
+211 
+	#FPE_FLTRES
+ 
+FPE_FLTRES
+
+
+	)
+
+212 
+FPE_FLTINV
+,
+
+213 
+	#FPE_FLTINV
+ 
+FPE_FLTINV
+
+
+	)
+
+214 
+FPE_FLTSUB
+
+
+215 
+	#FPE_FLTSUB
+ 
+FPE_FLTSUB
+
+
+	)
+
+221 
+SEGV_MAPERR
+ = 1,
+
+222 
+	#SEGV_MAPERR
+ 
+SEGV_MAPERR
+
+
+	)
+
+223 
+SEGV_ACCERR
+
+
+224 
+	#SEGV_ACCERR
+ 
+SEGV_ACCERR
+
+
+	)
+
+230 
+BUS_ADRALN
+ = 1,
+
+231 
+	#BUS_ADRALN
+ 
+BUS_ADRALN
+
+
+	)
+
+232 
+BUS_ADRERR
+,
+
+233 
+	#BUS_ADRERR
+ 
+BUS_ADRERR
+
+
+	)
+
+234 
+BUS_OBJERR
+,
+
+235 
+	#BUS_OBJERR
+ 
+BUS_OBJERR
+
+
+	)
+
+236 
+BUS_MCEERR_AR
+,
+
+237 
+	#BUS_MCEERR_AR
+ 
+BUS_MCEERR_AR
+
+
+	)
+
+238 
+BUS_MCEERR_AO
+
+
+239 
+	#BUS_MCEERR_AO
+ 
+BUS_MCEERR_AO
+
+
+	)
+
+245 
+TRAP_BRKPT
+ = 1,
+
+246 
+	#TRAP_BRKPT
+ 
+TRAP_BRKPT
+
+
+	)
+
+247 
+TRAP_TRACE
+
+
+248 
+	#TRAP_TRACE
+ 
+TRAP_TRACE
+
+
+	)
+
+254 
+CLD_EXITED
+ = 1,
+
+255 
+	#CLD_EXITED
+ 
+CLD_EXITED
+
+
+	)
+
+256 
+CLD_KILLED
+,
+
+257 
+	#CLD_KILLED
+ 
+CLD_KILLED
+
+
+	)
+
+258 
+CLD_DUMPED
+,
+
+259 
+	#CLD_DUMPED
+ 
+CLD_DUMPED
+
+
+	)
+
+260 
+CLD_TRAPPED
+,
+
+261 
+	#CLD_TRAPPED
+ 
+CLD_TRAPPED
+
+
+	)
+
+262 
+CLD_STOPPED
+,
+
+263 
+	#CLD_STOPPED
+ 
+CLD_STOPPED
+
+
+	)
+
+264 
+CLD_CONTINUED
+
+
+265 
+	#CLD_CONTINUED
+ 
+CLD_CONTINUED
+
+
+	)
+
+271 
+POLL_IN
+ = 1,
+
+272 
+	#POLL_IN
+ 
+POLL_IN
+
+
+	)
+
+273 
+POLL_OUT
+,
+
+274 
+	#POLL_OUT
+ 
+POLL_OUT
+
+
+	)
+
+275 
+POLL_MSG
+,
+
+276 
+	#POLL_MSG
+ 
+POLL_MSG
+
+
+	)
+
+277 
+POLL_ERR
+,
+
+278 
+	#POLL_ERR
+ 
+POLL_ERR
+
+
+	)
+
+279 
+POLL_PRI
+,
+
+280 
+	#POLL_PRI
+ 
+POLL_PRI
+
+
+	)
+
+281 
+POLL_HUP
+
+
+282 
+	#POLL_HUP
+ 
+POLL_HUP
+
+
+	)
+
+285 #unde�
+__�ed_sig�fo_t
+
+
+289 #i�(
+def�ed
+ 
+_SIGNAL_H
+ || def�ed 
+__�ed_sigev�t_t
+) \
+
+290 && !
+def�ed
+ 
+__have_sigev�t_t
+
+
+291 
+	#__have_sigev�t_t
+ 1
+
+	)
+
+294 
+	#__SIGEV_MAX_SIZE
+ 64
+
+	)
+
+295 #i�
+__WORDSIZE
+ == 64
+
+296 
+	#__SIGEV_PAD_SIZE
+ ((
+__SIGEV_MAX_SIZE
+ /  ()�- 4)
+
+	)
+
+298 
+	#__SIGEV_PAD_SIZE
+ ((
+__SIGEV_MAX_SIZE
+ /  ()�- 3)
+
+	)
+
+302 #i�de�
+__have_�h�ad_��_t
+
+
+303 
+�h�ad_��_t
+ 
+	t�h�ad_��_t
+;
+
+304 
+	#__have_�h�ad_��_t
+ 1
+
+	)
+
+307 
+	ssigev�t
+
+
+309 
+sigv�_t
+ 
+sigev_v�ue
+;
+
+310 
+sigev_signo
+;
+
+311 
+sigev_n�ify
+;
+
+315 
+_�d
+[
+__SIGEV_PAD_SIZE
+];
+
+319 
+__pid_t
+ 
+_tid
+;
+
+323 (*
+_fun�i�
+�(
+sigv�_t
+);
+
+324 
+�h�ad_��_t
+ *
+_��ibu�
+;
+
+325 } 
+_sigev_th�ad
+;
+
+326 } 
+_sigev_un
+;
+
+327 } 
+	tsigev�t_t
+;
+
+330 
+	#sigev_n�ify_fun�i�
+ 
+_sigev_un
+.
+_sigev_th�ad
+.
+_fun�i�
+
+
+	)
+
+331 
+	#sigev_n�ify_��ibu�s
+ 
+_sigev_un
+.
+_sigev_th�ad
+.
+_��ibu�
+
+
+	)
+
+336 
+SIGEV_SIGNAL
+ = 0,
+
+337 
+	#SIGEV_SIGNAL
+ 
+SIGEV_SIGNAL
+
+
+	)
+
+338 
+SIGEV_NONE
+,
+
+339 
+	#SIGEV_NONE
+ 
+SIGEV_NONE
+
+
+	)
+
+340 
+SIGEV_THREAD
+,
+
+341 
+	#SIGEV_THREAD
+ 
+SIGEV_THREAD
+
+
+	)
+
+343 
+SIGEV_THREAD_ID
+ = 4
+
+344 
+	#SIGEV_THREAD_ID
+ 
+SIGEV_THREAD_ID
+
+
+	)
+
+	@/usr/include/bits/signum.h
+
+19 #ifdef 
+_SIGNAL_H
+
+
+22 
+	#SIG_ERR
+ ((
+__sigh�d�r_t
+�-1�
+
+	)
+
+23 
+	#SIG_DFL
+ ((
+__sigh�d�r_t
+�0�
+
+	)
+
+24 
+	#SIG_IGN
+ ((
+__sigh�d�r_t
+�1�
+
+	)
+
+26 #ifde�
+__USE_UNIX98
+
+
+27 
+	#SIG_HOLD
+ ((
+__sigh�d�r_t
+�2�
+
+	)
+
+32 
+	#SIGHUP
+ 1
+
+	)
+
+33 
+	#SIGINT
+ 2
+
+	)
+
+34 
+	#SIGQUIT
+ 3
+
+	)
+
+35 
+	#SIGILL
+ 4
+
+	)
+
+36 
+	#SIGTRAP
+ 5
+
+	)
+
+37 
+	#SIGABRT
+ 6
+
+	)
+
+38 
+	#SIGIOT
+ 6
+
+	)
+
+39 
+	#SIGBUS
+ 7
+
+	)
+
+40 
+	#SIGFPE
+ 8
+
+	)
+
+41 
+	#SIGKILL
+ 9
+
+	)
+
+42 
+	#SIGUSR1
+ 10
+
+	)
+
+43 
+	#SIGSEGV
+ 11
+
+	)
+
+44 
+	#SIGUSR2
+ 12
+
+	)
+
+45 
+	#SIGPIPE
+ 13
+
+	)
+
+46 
+	#SIGALRM
+ 14
+
+	)
+
+47 
+	#SIGTERM
+ 15
+
+	)
+
+48 
+	#SIGSTKFLT
+ 16
+
+	)
+
+49 
+	#SIGCLD
+ 
+SIGCHLD
+
+
+	)
+
+50 
+	#SIGCHLD
+ 17
+
+	)
+
+51 
+	#SIGCONT
+ 18
+
+	)
+
+52 
+	#SIGSTOP
+ 19
+
+	)
+
+53 
+	#SIGTSTP
+ 20
+
+	)
+
+54 
+	#SIGTTIN
+ 21
+
+	)
+
+55 
+	#SIGTTOU
+ 22
+
+	)
+
+56 
+	#SIGURG
+ 23
+
+	)
+
+57 
+	#SIGXCPU
+ 24
+
+	)
+
+58 
+	#SIGXFSZ
+ 25
+
+	)
+
+59 
+	#SIGVTALRM
+ 26
+
+	)
+
+60 
+	#SIGPROF
+ 27
+
+	)
+
+61 
+	#SIGWINCH
+ 28
+
+	)
+
+62 
+	#SIGPOLL
+ 
+SIGIO
+
+
+	)
+
+63 
+	#SIGIO
+ 29
+
+	)
+
+64 
+	#SIGPWR
+ 30
+
+	)
+
+65 
+	#SIGSYS
+ 31
+
+	)
+
+66 
+	#SIGUNUSED
+ 31
+
+	)
+
+68 
+	#_NSIG
+ 65
+
+	)
+
+71 
+	#SIGRTMIN
+ (
+	`__libc_cu��t_sig�m�
+ ())
+
+	)
+
+72 
+	#SIGRTMAX
+ (
+	`__libc_cu��t_sig�max
+ ())
+
+	)
+
+76 
+	#__SIGRTMIN
+ 32
+
+	)
+
+77 
+	#__SIGRTMAX
+ (
+_NSIG
+ - 1)
+
+	)
+
+	@/usr/include/bits/sigset.h
+
+19 #i�def 
+_SIGSET_H_ty�s
+
+
+20 
+	#_SIGSET_H_ty�s
+ 1
+
+	)
+
+22 
+	t__sig_�omic_t
+;
+
+26 
+	#_SIGSET_NWORDS
+ (1024 / (8 *  ()))
+
+	)
+
+29 
+	m__v�
+[
+_SIGSET_NWORDS
+];
+
+30 } 
+	t__sig�t_t
+;
+
+41 #i�!
+def�ed
+ 
+_SIGSET_H_�s
+ && def�ed 
+_SIGNAL_H
+
+
+42 
+	#_SIGSET_H_�s
+ 1
+
+	)
+
+44 #i�de�
+_EXTERN_INLINE
+
+
+45 
+	#_EXTERN_INLINE
+ 
+__ex��_�l�e
+
+
+	)
+
+49 
+	#__sigmask
+(
+sig
+) \
+
+50 (((�1�<< (((
+sig
+�- 1�% (8 *  ())))
+
+	)
+
+53 
+	#__sigw�d
+(
+sig
+�(((sig�- 1�/ (8 *  ()))
+
+	)
+
+55 #i�
+def�ed
+ 
+__GNUC__
+ && __GNUC__ >= 2
+
+56 
+	#__sigem�y�t
+(
+�t
+) \
+
+57 (
+	`__ex�nsi�__
+ ({ 
+__�t
+ = 
+_SIGSET_NWORDS
+; \
+
+58 
+sig�t_t
+ *
+__�t
+ = (
+�t
+); \
+
+59 --
+__�t
+ >�0�
+__�t
+->
+__v�
+[__cnt] = 0; \
+
+60 0; }))
+
+	)
+
+61 
+	#__sigf�l�t
+(
+�t
+) \
+
+62 (
+	`__ex�nsi�__
+ ({ 
+__�t
+ = 
+_SIGSET_NWORDS
+; \
+
+63 
+sig�t_t
+ *
+__�t
+ = (
+�t
+); \
+
+64 --
+__�t
+ >�0�
+__�t
+->
+__v�
+[__cnt] = ~0UL; \
+
+65 0; }))
+
+	)
+
+67 #ifde�
+__USE_GNU
+
+
+71 
+	#__sigi�m�y�t
+(
+�t
+) \
+
+72 (
+	`__ex�nsi�__
+ ({ 
+__�t
+ = 
+_SIGSET_NWORDS
+; \
+
+73 cڡ 
+sig�t_t
+ *
+__�t
+ = (
+�t
+); \
+
+74 
+__�t
+ = 
+__�t
+->
+__v�
+[--
+__�t
+]; \
+
+75 !
+__�t
+ && --
+__�t
+ >= 0) \
+
+76 
+__�t
+ = 
+__�t
+->
+__v�
+[
+__�t
+]; \
+
+77 
+__�t
+ =�0; }))
+
+	)
+
+78 
+	#__sig�d�t
+(
+de�
+, 
+��
+, 
+right
+) \
+
+79 (
+	`__ex�nsi�__
+ ({ 
+__�t
+ = 
+_SIGSET_NWORDS
+; \
+
+80 
+sig�t_t
+ *
+__de�
+ = (
+de�
+); \
+
+81 cڡ 
+sig�t_t
+ *
+__��
+ = (
+��
+); \
+
+82 cڡ 
+sig�t_t
+ *
+__right
+ = (
+right
+); \
+
+83 --
+__�t
+ >= 0) \
+
+84 
+__de�
+->
+__v�
+[
+__�t
+] = (
+__��
+->__val[__cnt] \
+
+85 & 
+__right
+->
+__v�
+[
+__�t
+]); \
+
+86 0; }))
+
+	)
+
+87 
+	#__sigܣt
+(
+de�
+, 
+��
+, 
+right
+) \
+
+88 (
+	`__ex�nsi�__
+ ({ 
+__�t
+ = 
+_SIGSET_NWORDS
+; \
+
+89 
+sig�t_t
+ *
+__de�
+ = (
+de�
+); \
+
+90 cڡ 
+sig�t_t
+ *
+__��
+ = (
+��
+); \
+
+91 cڡ 
+sig�t_t
+ *
+__right
+ = (
+right
+); \
+
+92 --
+__�t
+ >= 0) \
+
+93 
+__de�
+->
+__v�
+[
+__�t
+] = (
+__��
+->__val[__cnt] \
+
+94 | 
+__right
+->
+__v�
+[
+__�t
+]); \
+
+95 0; }))
+
+	)
+
+102 

+__sigismemb�
+ (cڡ 
+__sig�t_t
+ *, );
+
+103 

+__sigadd�t
+ (
+__sig�t_t
+ *, );
+
+104 

+__sigd��t
+ (
+__sig�t_t
+ *, );
+
+106 #ifde�
+__USE_EXTERN_INLINES
+
+
+107 
+	#__SIGSETFN
+(
+NAME
+, 
+BODY
+, 
+CONST
+) \
+
+108 
+_EXTERN_INLINE
+ \
+
+109 
+	`NAME
+ (
+CONST
+ 
+__sig�t_t
+ *
+__�t
+, 
+__sig
+) \
+
+111 
+__mask
+ = 
+	`__sigmask
+ (
+__sig
+); \
+
+112 
+__w�d
+ = 
+	`__sigw�d
+ (
+__sig
+); \
+
+113  
+BODY
+; \
+
+114 }
+
+	)
+
+116 
+__SIGSETFN
+ (
+__sigismemb�
+, (
+__�t
+->
+__v�
+[
+__w�d
+] & 
+__mask
+) ? 1 : 0, const)
+
+117 
+__SIGSETFN
+ (
+__sigadd�t
+, ((
+__�t
+->
+__v�
+[
+__w�d
+] |�
+__mask
+), 0), )
+
+118 
+__SIGSETFN
+ (
+__sigd��t
+, ((
+__�t
+->
+__v�
+[
+__w�d
+] &�~
+__mask
+), 0), )
+
+120 #unde�
+__SIGSETFN
+
+
+	@/usr/include/bits/sigstack.h
+
+19 #i�de�
+_SIGNAL_H
+
+
+25 
+	ssig�ack
+
+
+27 *
+	mss_�
+;
+
+28 
+	mss_ڡack
+;
+
+35 
+	mSS_ONSTACK
+ = 1,
+
+36 
+	#SS_ONSTACK
+ 
+SS_ONSTACK
+
+
+	)
+
+37 
+	mSS_DISABLE
+
+
+38 
+	#SS_DISABLE
+ 
+SS_DISABLE
+
+
+	)
+
+42 
+	#MINSIGSTKSZ
+ 2048
+
+	)
+
+45 
+	#SIGSTKSZ
+ 8192
+
+	)
+
+49 
+	ssig�t�ack
+
+
+51 *
+	mss_�
+;
+
+52 
+	mss_�ags
+;
+
+53 
+size_t
+ 
+	mss_size
+;
+
+54 } 
+	t�ack_t
+;
+
+	@/usr/include/bits/sigthread.h
+
+19 #i�de�
+_BITS_SIGTHREAD_H
+
+
+20 
+	#_BITS_SIGTHREAD_H
+ 1
+
+	)
+
+22 #i�!
+def�ed
+ 
+_SIGNAL_H
+ && !def�ed 
+_PTHREAD_H
+
+
+30 

+	$�h�ad_sigmask
+ (
+__how
+,
+
+31 cڡ 
+__sig�t_t
+ *
+__��ri�
+ 
+__�wmask
+,
+
+32 
+__sig�t_t
+ *
+__��ri�
+ 
+__�dmask
+)
+__THROW
+;
+
+35 

+	$�h�ad_k�l
+ (
+�h�ad_t
+ 
+__th�adid
+, 
+__signo
+�
+__THROW
+;
+
+37 #ifde�
+__USE_GNU
+
+
+39 

+	$�h�ad_sigqueue
+ (
+�h�ad_t
+ 
+__th�adid
+, 
+__signo
+,
+
+40 cڡ 
+sigv�
+ 
+__v�ue
+�
+__THROW
+;
+
+	@/usr/include/bits/sockaddr.h
+
+23 #i�de�
+_BITS_SOCKADDR_H
+
+
+24 
+	#_BITS_SOCKADDR_H
+ 1
+
+	)
+
+28 
+	t�_�m�y_t
+;
+
+34 
+	#__SOCKADDR_COMMON
+(
+�_�efix
+) \
+
+35 
+�_�m�y_t
+ 
+�_�efix
+##
+�m�y
+
+
+	)
+
+37 
+	#__SOCKADDR_COMMON_SIZE
+ ( ())
+
+	)
+
+	@/usr/include/bits/socket.h
+
+19 #i�de�
+__BITS_SOCKET_H
+
+
+20 
+	#__BITS_SOCKET_H
+
+
+	)
+
+22 #i�de�
+_SYS_SOCKET_H
+
+
+26 
+	#__�ed_size_t
+
+
+	)
+
+27 
+	~<�ddef.h
+>
+
+29 
+	~<sys/ty�s.h
+>
+
+32 #i�de�
+__sock�n_t_def�ed
+
+
+33 
+__sock�n_t
+ 
+	tsock�n_t
+;
+
+34 
+	#__sock�n_t_def�ed
+
+
+	)
+
+38 
+	~<b�s/sock�_ty�.h
+>
+
+41 
+	#PF_UNSPEC
+ 0
+
+	)
+
+42 
+	#PF_LOCAL
+ 1
+
+	)
+
+43 
+	#PF_UNIX
+ 
+PF_LOCAL
+
+
+	)
+
+44 
+	#PF_FILE
+ 
+PF_LOCAL
+
+
+	)
+
+45 
+	#PF_INET
+ 2
+
+	)
+
+46 
+	#PF_AX25
+ 3
+
+	)
+
+47 
+	#PF_IPX
+ 4
+
+	)
+
+48 
+	#PF_APPLETALK
+ 5
+
+	)
+
+49 
+	#PF_NETROM
+ 6
+
+	)
+
+50 
+	#PF_BRIDGE
+ 7
+
+	)
+
+51 
+	#PF_ATMPVC
+ 8
+
+	)
+
+52 
+	#PF_X25
+ 9
+
+	)
+
+53 
+	#PF_INET6
+ 10
+
+	)
+
+54 
+	#PF_ROSE
+ 11
+
+	)
+
+55 
+	#PF_DEC�t
+ 12
+
+	)
+
+56 
+	#PF_NETBEUI
+ 13
+
+	)
+
+57 
+	#PF_SECURITY
+ 14
+
+	)
+
+58 
+	#PF_KEY
+ 15
+
+	)
+
+59 
+	#PF_NETLINK
+ 16
+
+	)
+
+60 
+	#PF_ROUTE
+ 
+PF_NETLINK
+
+
+	)
+
+61 
+	#PF_PACKET
+ 17
+
+	)
+
+62 
+	#PF_ASH
+ 18
+
+	)
+
+63 
+	#PF_ECONET
+ 19
+
+	)
+
+64 
+	#PF_ATMSVC
+ 20
+
+	)
+
+65 
+	#PF_RDS
+ 21
+
+	)
+
+66 
+	#PF_SNA
+ 22
+
+	)
+
+67 
+	#PF_IRDA
+ 23
+
+	)
+
+68 
+	#PF_PPPOX
+ 24
+
+	)
+
+69 
+	#PF_WANPIPE
+ 25
+
+	)
+
+70 
+	#PF_LLC
+ 26
+
+	)
+
+71 
+	#PF_CAN
+ 29
+
+	)
+
+72 
+	#PF_TIPC
+ 30
+
+	)
+
+73 
+	#PF_BLUETOOTH
+ 31
+
+	)
+
+74 
+	#PF_IUCV
+ 32
+
+	)
+
+75 
+	#PF_RXRPC
+ 33
+
+	)
+
+76 
+	#PF_ISDN
+ 34
+
+	)
+
+77 
+	#PF_PHONET
+ 35
+
+	)
+
+78 
+	#PF_IEEE802154
+ 36
+
+	)
+
+79 
+	#PF_CAIF
+ 37
+
+	)
+
+80 
+	#PF_ALG
+ 38
+
+	)
+
+81 
+	#PF_NFC
+ 39
+
+	)
+
+82 
+	#PF_VSOCK
+ 40
+
+	)
+
+83 
+	#PF_MAX
+ 41
+
+	)
+
+86 
+	#AF_UNSPEC
+ 
+PF_UNSPEC
+
+
+	)
+
+87 
+	#AF_LOCAL
+ 
+PF_LOCAL
+
+
+	)
+
+88 
+	#AF_UNIX
+ 
+PF_UNIX
+
+
+	)
+
+89 
+	#AF_FILE
+ 
+PF_FILE
+
+
+	)
+
+90 
+	#AF_INET
+ 
+PF_INET
+
+
+	)
+
+91 
+	#AF_AX25
+ 
+PF_AX25
+
+
+	)
+
+92 
+	#AF_IPX
+ 
+PF_IPX
+
+
+	)
+
+93 
+	#AF_APPLETALK
+ 
+PF_APPLETALK
+
+
+	)
+
+94 
+	#AF_NETROM
+ 
+PF_NETROM
+
+
+	)
+
+95 
+	#AF_BRIDGE
+ 
+PF_BRIDGE
+
+
+	)
+
+96 
+	#AF_ATMPVC
+ 
+PF_ATMPVC
+
+
+	)
+
+97 
+	#AF_X25
+ 
+PF_X25
+
+
+	)
+
+98 
+	#AF_INET6
+ 
+PF_INET6
+
+
+	)
+
+99 
+	#AF_ROSE
+ 
+PF_ROSE
+
+
+	)
+
+100 
+	#AF_DEC�t
+ 
+PF_DEC�t
+
+
+	)
+
+101 
+	#AF_NETBEUI
+ 
+PF_NETBEUI
+
+
+	)
+
+102 
+	#AF_SECURITY
+ 
+PF_SECURITY
+
+
+	)
+
+103 
+	#AF_KEY
+ 
+PF_KEY
+
+
+	)
+
+104 
+	#AF_NETLINK
+ 
+PF_NETLINK
+
+
+	)
+
+105 
+	#AF_ROUTE
+ 
+PF_ROUTE
+
+
+	)
+
+106 
+	#AF_PACKET
+ 
+PF_PACKET
+
+
+	)
+
+107 
+	#AF_ASH
+ 
+PF_ASH
+
+
+	)
+
+108 
+	#AF_ECONET
+ 
+PF_ECONET
+
+
+	)
+
+109 
+	#AF_ATMSVC
+ 
+PF_ATMSVC
+
+
+	)
+
+110 
+	#AF_RDS
+ 
+PF_RDS
+
+
+	)
+
+111 
+	#AF_SNA
+ 
+PF_SNA
+
+
+	)
+
+112 
+	#AF_IRDA
+ 
+PF_IRDA
+
+
+	)
+
+113 
+	#AF_PPPOX
+ 
+PF_PPPOX
+
+
+	)
+
+114 
+	#AF_WANPIPE
+ 
+PF_WANPIPE
+
+
+	)
+
+115 
+	#AF_LLC
+ 
+PF_LLC
+
+
+	)
+
+116 
+	#AF_CAN
+ 
+PF_CAN
+
+
+	)
+
+117 
+	#AF_TIPC
+ 
+PF_TIPC
+
+
+	)
+
+118 
+	#AF_BLUETOOTH
+ 
+PF_BLUETOOTH
+
+
+	)
+
+119 
+	#AF_IUCV
+ 
+PF_IUCV
+
+
+	)
+
+120 
+	#AF_RXRPC
+ 
+PF_RXRPC
+
+
+	)
+
+121 
+	#AF_ISDN
+ 
+PF_ISDN
+
+
+	)
+
+122 
+	#AF_PHONET
+ 
+PF_PHONET
+
+
+	)
+
+123 
+	#AF_IEEE802154
+ 
+PF_IEEE802154
+
+
+	)
+
+124 
+	#AF_CAIF
+ 
+PF_CAIF
+
+
+	)
+
+125 
+	#AF_ALG
+ 
+PF_ALG
+
+
+	)
+
+126 
+	#AF_NFC
+ 
+PF_NFC
+
+
+	)
+
+127 
+	#AF_VSOCK
+ 
+PF_VSOCK
+
+
+	)
+
+128 
+	#AF_MAX
+ 
+PF_MAX
+
+
+	)
+
+134 
+	#SOL_RAW
+ 255
+
+	)
+
+135 
+	#SOL_DECNET
+ 261
+
+	)
+
+136 
+	#SOL_X25
+ 262
+
+	)
+
+137 
+	#SOL_PACKET
+ 263
+
+	)
+
+138 
+	#SOL_ATM
+ 264
+
+	)
+
+139 
+	#SOL_AAL
+ 265
+
+	)
+
+140 
+	#SOL_IRDA
+ 266
+
+	)
+
+143 
+	#SOMAXCONN
+ 128
+
+	)
+
+146 
+	~<b�s/sockaddr.h
+>
+
+149 
+	ssockaddr
+
+
+151 
+__SOCKADDR_COMMON
+ (
+�_
+);
+
+152 
+	m�_d�a
+[14];
+
+158 
+	#__ss_�ig�y�
+ 
+
+	)
+
+159 
+	#_SS_SIZE
+ 128
+
+	)
+
+160 
+	#_SS_PADSIZE
+ (
+_SS_SIZE
+ - (2 *  (
+__ss_�ig�y�
+)))
+
+	)
+
+162 
+	ssockaddr_��age
+
+
+164 
+__SOCKADDR_COMMON
+ (
+ss_
+);
+
+165 
+__ss_�ig�y�
+ 
+	m__ss_�ign
+;
+
+166 
+	m__ss_�dd�g
+[
+_SS_PADSIZE
+];
+
+173 
+	mMSG_OOB
+ = 0x01,
+
+174 
+	#MSG_OOB
+ 
+MSG_OOB
+
+
+	)
+
+175 
+	mMSG_PEEK
+ = 0x02,
+
+176 
+	#MSG_PEEK
+ 
+MSG_PEEK
+
+
+	)
+
+177 
+	mMSG_DONTROUTE
+ = 0x04,
+
+178 
+	#MSG_DONTROUTE
+ 
+MSG_DONTROUTE
+
+
+	)
+
+179 #ifde�
+__USE_GNU
+
+
+181 
+	mMSG_TRYHARD
+ = 
+MSG_DONTROUTE
+,
+
+182 
+	#MSG_TRYHARD
+ 
+MSG_DONTROUTE
+
+
+	)
+
+184 
+	mMSG_CTRUNC
+ = 0x08,
+
+185 
+	#MSG_CTRUNC
+ 
+MSG_CTRUNC
+
+
+	)
+
+186 
+	mMSG_PROXY
+ = 0x10,
+
+187 
+	#MSG_PROXY
+ 
+MSG_PROXY
+
+
+	)
+
+188 
+	mMSG_TRUNC
+ = 0x20,
+
+189 
+	#MSG_TRUNC
+ 
+MSG_TRUNC
+
+
+	)
+
+190 
+	mMSG_DONTWAIT
+ = 0x40,
+
+191 
+	#MSG_DONTWAIT
+ 
+MSG_DONTWAIT
+
+
+	)
+
+192 
+	mMSG_EOR
+ = 0x80,
+
+193 
+	#MSG_EOR
+ 
+MSG_EOR
+
+
+	)
+
+194 
+	mMSG_WAITALL
+ = 0x100,
+
+195 
+	#MSG_WAITALL
+ 
+MSG_WAITALL
+
+
+	)
+
+196 
+	mMSG_FIN
+ = 0x200,
+
+197 
+	#MSG_FIN
+ 
+MSG_FIN
+
+
+	)
+
+198 
+	mMSG_SYN
+ = 0x400,
+
+199 
+	#MSG_SYN
+ 
+MSG_SYN
+
+
+	)
+
+200 
+	mMSG_CONFIRM
+ = 0x800,
+
+201 
+	#MSG_CONFIRM
+ 
+MSG_CONFIRM
+
+
+	)
+
+202 
+	mMSG_RST
+ = 0x1000,
+
+203 
+	#MSG_RST
+ 
+MSG_RST
+
+
+	)
+
+204 
+	mMSG_ERRQUEUE
+ = 0x2000,
+
+205 
+	#MSG_ERRQUEUE
+ 
+MSG_ERRQUEUE
+
+
+	)
+
+206 
+	mMSG_NOSIGNAL
+ = 0x4000,
+
+207 
+	#MSG_NOSIGNAL
+ 
+MSG_NOSIGNAL
+
+
+	)
+
+208 
+	mMSG_MORE
+ = 0x8000,
+
+209 
+	#MSG_MORE
+ 
+MSG_MORE
+
+
+	)
+
+210 
+	mMSG_WAITFORONE
+ = 0x10000,
+
+211 
+	#MSG_WAITFORONE
+ 
+MSG_WAITFORONE
+
+
+	)
+
+212 
+	mMSG_FASTOPEN
+ = 0x20000000,
+
+213 
+	#MSG_FASTOPEN
+ 
+MSG_FASTOPEN
+
+
+	)
+
+215 
+	mMSG_CMSG_CLOEXEC
+ = 0x40000000
+
+218 
+	#MSG_CMSG_CLOEXEC
+ 
+MSG_CMSG_CLOEXEC
+
+
+	)
+
+224 
+	smsghdr
+
+
+226 *
+	mmsg_�me
+;
+
+227 
+sock�n_t
+ 
+	mmsg_�m��
+;
+
+229 
+iovec
+ *
+	mmsg_iov
+;
+
+230 
+size_t
+ 
+	mmsg_iov�n
+;
+
+232 *
+	mmsg_cڌ�
+;
+
+233 
+size_t
+ 
+	mmsg_cڌ��n
+;
+
+238 
+	mmsg_�ags
+;
+
+242 
+	scmsghdr
+
+
+244 
+size_t
+ 
+	mcmsg_�n
+;
+
+249 
+	mcmsg_�v�
+;
+
+250 
+	mcmsg_ty�
+;
+
+251 #i�(!
+def�ed
+ 
+__STRICT_ANSI__
+ && 
+__GNUC__
+ >�2�|| 
+__STDC_VERSION__
+ >= 199901L
+
+252 
+__ex�nsi�__
+ 
+__cmsg_d�a
+ 
+	m__�ex�r
+;
+
+257 #i�(!
+def�ed
+ 
+__STRICT_ANSI__
+ && 
+__GNUC__
+ >�2�|| 
+__STDC_VERSION__
+ >= 199901L
+
+258 
+	#CMSG_DATA
+(
+cmsg
+�((cmsg)->
+__cmsg_d�a
+)
+
+	)
+
+260 
+	#CMSG_DATA
+(
+cmsg
+�((*�((
+cmsghdr
+ *�(cmsg�+ 1))
+
+	)
+
+262 
+	#CMSG_NXTHDR
+(
+mhdr
+, 
+cmsg
+�
+	`__cmsg_nxthdr
+ (mhdr, cmsg)
+
+	)
+
+263 
+	#CMSG_FIRSTHDR
+(
+mhdr
+) \
+
+264 ((
+size_t
+�(
+mhdr
+)->
+msg_cڌ��n
+ >� (
+cmsghdr
+) \
+
+265 ? (
+cmsghdr
+ *�(
+mhdr
+)->
+msg_cڌ�
+ : (cmsghd�*�0)
+
+	)
+
+266 
+	#CMSG_ALIGN
+(
+�n
+�((֒�+  (
+size_t
+) - 1) \
+
+267 & (
+size_t
+�~( (size_t�- 1))
+
+	)
+
+268 
+	#CMSG_SPACE
+(
+�n
+�(
+	`CMSG_ALIGN
+ (len) \
+
+269 + 
+	`CMSG_ALIGN
+ ( (
+cmsghdr
+)))
+
+	)
+
+270 
+	#CMSG_LEN
+(
+�n
+�(
+	`CMSG_ALIGN
+ ( (
+cmsghdr
+)�+ (�n))
+
+	)
+
+272 

+cmsghdr
+ *
+	$__cmsg_nxthdr
+ (
+msghdr
+ *
+__mhdr
+,
+
+273 
+cmsghdr
+ *
+__cmsg
+�
+__THROW
+;
+
+274 #ifde�
+__USE_EXTERN_INLINES
+
+
+275 #i�de�
+_EXTERN_INLINE
+
+
+276 
+	#_EXTERN_INLINE
+ 
+__ex��_�l�e
+
+
+	)
+
+278 
+_EXTERN_INLINE
+ 
+cmsghdr
+ *
+
+279 
+	`__NTH
+ (
+	$__cmsg_nxthdr
+ (
+msghdr
+ *
+__mhdr
+, 
+cmsghdr
+ *
+__cmsg
+))
+
+281 i�((
+size_t
+�
+__cmsg
+->
+cmsg_�n
+ <  (
+cmsghdr
+))
+
+283  (
+cmsghdr
+ *) 0;
+
+285 
+__cmsg
+ = (
+cmsghdr
+ *) ((*) __cmsg
+
+286 + 
+	`CMSG_ALIGN
+ (
+__cmsg
+->
+cmsg_�n
+));
+
+287 i�((*�(
+__cmsg
+ + 1�> ((*�
+__mhdr
+->
+msg_cڌ�
+
+
+288 + 
+__mhdr
+->
+msg_cڌ��n
+)
+
+289 || ((*�
+__cmsg
+ + 
+	`CMSG_ALIGN
+ (__cmsg->
+cmsg_�n
+)
+
+290 > ((*�
+__mhdr
+->
+msg_cڌ�
+ + __mhdr->
+msg_cڌ��n
+)))
+
+292  (
+cmsghdr
+ *) 0;
+
+293  
+__cmsg
+;
+
+294 
+	}
+}
+
+301 
+	mSCM_RIGHTS
+ = 0x01
+
+302 
+	#SCM_RIGHTS
+ 
+SCM_RIGHTS
+
+
+	)
+
+303 #ifde�
+__USE_GNU
+
+
+304 , 
+	mSCM_CREDENTIALS
+ = 0x02
+
+305 
+	#SCM_CREDENTIALS
+ 
+SCM_CREDENTIALS
+
+
+	)
+
+309 #ifde�
+__USE_GNU
+
+
+311 
+	su�ed
+
+
+313 
+pid_t
+ 
+	mpid
+;
+
+314 
+uid_t
+ 
+	muid
+;
+
+315 
+gid_t
+ 
+	mgid
+;
+
+320 #i�!
+def�ed
+ 
+__USE_MISC
+ && !def�ed 
+__USE_GNU
+
+
+321 #i�de�
+FIOGETOWN
+
+
+322 
+	#__SYS_SOCKET_H_undef_FIOGETOWN
+
+
+	)
+
+324 #i�de�
+FIOSETOWN
+
+
+325 
+	#__SYS_SOCKET_H_undef_FIOSETOWN
+
+
+	)
+
+327 #i�de�
+SIOCATMARK
+
+
+328 
+	#__SYS_SOCKET_H_undef_SIOCATMARK
+
+
+	)
+
+330 #i�de�
+SIOCGPGRP
+
+
+331 
+	#__SYS_SOCKET_H_undef_SIOCGPGRP
+
+
+	)
+
+333 #i�de�
+SIOCGSTAMP
+
+
+334 
+	#__SYS_SOCKET_H_undef_SIOCGSTAMP
+
+
+	)
+
+336 #i�de�
+SIOCGSTAMPNS
+
+
+337 
+	#__SYS_SOCKET_H_undef_SIOCGSTAMPNS
+
+
+	)
+
+339 #i�de�
+SIOCSPGRP
+
+
+340 
+	#__SYS_SOCKET_H_undef_SIOCSPGRP
+
+
+	)
+
+345 
+	~<asm/sock�.h
+>
+
+347 #i�!
+def�ed
+ 
+__USE_MISC
+ && !def�ed 
+__USE_GNU
+
+
+348 #ifde�
+__SYS_SOCKET_H_undef_FIOGETOWN
+
+
+349 #unde�
+__SYS_SOCKET_H_undef_FIOGETOWN
+
+
+350 #unde�
+FIOGETOWN
+
+
+352 #ifde�
+__SYS_SOCKET_H_undef_FIOSETOWN
+
+
+353 #unde�
+__SYS_SOCKET_H_undef_FIOSETOWN
+
+
+354 #unde�
+FIOSETOWN
+
+
+356 #ifde�
+__SYS_SOCKET_H_undef_SIOCATMARK
+
+
+357 #unde�
+__SYS_SOCKET_H_undef_SIOCATMARK
+
+
+358 #unde�
+SIOCATMARK
+
+
+360 #ifde�
+__SYS_SOCKET_H_undef_SIOCGPGRP
+
+
+361 #unde�
+__SYS_SOCKET_H_undef_SIOCGPGRP
+
+
+362 #unde�
+SIOCGPGRP
+
+
+364 #ifde�
+__SYS_SOCKET_H_undef_SIOCGSTAMP
+
+
+365 #unde�
+__SYS_SOCKET_H_undef_SIOCGSTAMP
+
+
+366 #unde�
+SIOCGSTAMP
+
+
+368 #ifde�
+__SYS_SOCKET_H_undef_SIOCGSTAMPNS
+
+
+369 #unde�
+__SYS_SOCKET_H_undef_SIOCGSTAMPNS
+
+
+370 #unde�
+SIOCGSTAMPNS
+
+
+372 #ifde�
+__SYS_SOCKET_H_undef_SIOCSPGRP
+
+
+373 #unde�
+__SYS_SOCKET_H_undef_SIOCSPGRP
+
+
+374 #unde�
+SIOCSPGRP
+
+
+379 
+	sl�g�
+
+
+381 
+	ml_�off
+;
+
+382 
+	ml_l�g�
+;
+
+	@/usr/include/bits/socket2.h
+
+19 #i�de�
+_SYS_SOCKET_H
+
+
+23 
+ssize_t
+ 
+__�cv_chk
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__n
+, size_�
+__bu�
+,
+
+24 
+__�ags
+);
+
+25 
+ssize_t
+ 
+__REDIRECT
+ (
+__�cv_��s
+, (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__n
+,
+
+26 
+__�ags
+), 
+�cv
+);
+
+27 
+ssize_t
+ 
+__REDIRECT
+ (
+__�cv_chk_w�n
+,
+
+28 (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__n
+, size_�
+__bu�
+,
+
+29 
+__�ags
+), 
+__�cv_chk
+)
+
+30 
+__w�ljr
+ ("recv called with bigger�ength�han size of destination "
+
+33 
+__f�tify_fun�i�
+ 
+ssize_t
+
+
+34 
+	$�cv
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__n
+, 
+__�ags
+)
+
+36 i�(
+	`__bos0
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+38 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+))
+
+39  
+	`__�cv_chk
+ (
+__fd
+, 
+__buf
+, 
+__n
+, 
+	`__bos0
+ (__buf), 
+__�ags
+);
+
+41 i�(
+__n
+ > 
+	`__bos0
+ (
+__buf
+))
+
+42  
+	`__�cv_chk_w�n
+ (
+__fd
+, 
+__buf
+, 
+__n
+, 
+	`__bos0
+ (__buf), 
+__�ags
+);
+
+44  
+	`__�cv_��s
+ (
+__fd
+, 
+__buf
+, 
+__n
+, 
+__�ags
+);
+
+45 
+	}
+}
+
+47 
+ssize_t
+ 
+__�cv�om_chk
+ (
+__fd
+, *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__n
+,
+
+48 
+size_t
+ 
+__bu�
+, 
+__�ags
+,
+
+49 
+__SOCKADDR_ARG
+ 
+__addr
+,
+
+50 
+sock�n_t
+ *
+__��ri�
+ 
+__addr_�n
+);
+
+51 
+ssize_t
+ 
+__REDIRECT
+ (
+__�cv�om_��s
+,
+
+52 (
+__fd
+, *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__n
+,
+
+53 
+__�ags
+, 
+__SOCKADDR_ARG
+ 
+__addr
+,
+
+54 
+sock�n_t
+ *
+__��ri�
+ 
+__addr_�n
+), 
+�cv�om
+);
+
+55 
+ssize_t
+ 
+__REDIRECT
+ (
+__�cv�om_chk_w�n
+,
+
+56 (
+__fd
+, *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__n
+,
+
+57 
+size_t
+ 
+__bu�
+, 
+__�ags
+,
+
+58 
+__SOCKADDR_ARG
+ 
+__addr
+,
+
+59 
+sock�n_t
+ *
+__��ri�
+ 
+__addr_�n
+), 
+__�cv�om_chk
+)
+
+60 
+__w�ljr
+ ("recvfrom called with bigger�ength�han size of "
+
+63 
+__f�tify_fun�i�
+ 
+ssize_t
+
+
+64 
+	$�cv�om
+ (
+__fd
+, *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__n
+, 
+__�ags
+,
+
+65 
+__SOCKADDR_ARG
+ 
+__addr
+, 
+sock�n_t
+ *
+__��ri�
+ 
+__addr_�n
+)
+
+67 i�(
+	`__bos0
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+69 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+))
+
+70  
+	`__�cv�om_chk
+ (
+__fd
+, 
+__buf
+, 
+__n
+, 
+	`__bos0
+ (__buf), 
+__�ags
+,
+
+71 
+__addr
+, 
+__addr_�n
+);
+
+72 i�(
+__n
+ > 
+	`__bos0
+ (
+__buf
+))
+
+73  
+	`__�cv�om_chk_w�n
+ (
+__fd
+, 
+__buf
+, 
+__n
+, 
+	`__bos0
+ (__buf), 
+__�ags
+,
+
+74 
+__addr
+, 
+__addr_�n
+);
+
+76  
+	`__�cv�om_��s
+ (
+__fd
+, 
+__buf
+, 
+__n
+, 
+__�ags
+, 
+__addr
+, 
+__addr_�n
+);
+
+77 
+	}
+}
+
+	@/usr/include/bits/stat.h
+
+18 #i�!
+def�ed
+ 
+_SYS_STAT_H
+ && !def�ed 
+_FCNTL_H
+
+
+22 #i�de�
+_BITS_STAT_H
+
+
+23 
+	#_BITS_STAT_H
+ 1
+
+	)
+
+26 #i�de�
+__x86_64__
+
+
+27 
+	#_STAT_VER_LINUX_OLD
+ 1
+
+	)
+
+28 
+	#_STAT_VER_KERNEL
+ 1
+
+	)
+
+29 
+	#_STAT_VER_SVR4
+ 2
+
+	)
+
+30 
+	#_STAT_VER_LINUX
+ 3
+
+	)
+
+33 
+	#_MKNOD_VER_LINUX
+ 1
+
+	)
+
+34 
+	#_MKNOD_VER_SVR4
+ 2
+
+	)
+
+35 
+	#_MKNOD_VER
+ 
+_MKNOD_VER_LINUX
+
+
+	)
+
+37 
+	#_STAT_VER_KERNEL
+ 0
+
+	)
+
+38 
+	#_STAT_VER_LINUX
+ 1
+
+	)
+
+41 
+	#_MKNOD_VER_LINUX
+ 0
+
+	)
+
+44 
+	#_STAT_VER
+ 
+_STAT_VER_LINUX
+
+
+	)
+
+46 
+	s��
+
+
+48 
+__dev_t
+ 
+	m�_dev
+;
+
+49 #i�de�
+__x86_64__
+
+
+50 
+	m__�d1
+;
+
+52 #i�
+def�ed
+ 
+__x86_64__
+ || !def�ed 
+__USE_FILE_OFFSET64
+
+
+53 
+__�o_t
+ 
+	m�_�o
+;
+
+55 
+__�o_t
+ 
+	m__�_�o
+;
+
+57 #i�de�
+__x86_64__
+
+
+58 
+__mode_t
+ 
+	m�_mode
+;
+
+59 
+__ƚk_t
+ 
+	m�_ƚk
+;
+
+61 
+__ƚk_t
+ 
+	m�_ƚk
+;
+
+62 
+__mode_t
+ 
+	m�_mode
+;
+
+64 
+__uid_t
+ 
+	m�_uid
+;
+
+65 
+__gid_t
+ 
+	m�_gid
+;
+
+66 #ifde�
+__x86_64__
+
+
+67 
+	m__�d0
+;
+
+69 
+__dev_t
+ 
+	m�_rdev
+;
+
+70 #i�de�
+__x86_64__
+
+
+71 
+	m__�d2
+;
+
+73 #i�
+def�ed
+ 
+__x86_64__
+ || !def�ed 
+__USE_FILE_OFFSET64
+
+
+74 
+__off_t
+ 
+	m�_size
+;
+
+76 
+__off64_t
+ 
+	m�_size
+;
+
+78 
+__blksize_t
+ 
+	m�_blksize
+;
+
+79 #i�
+def�ed
+ 
+__x86_64__
+ || !def�ed 
+__USE_FILE_OFFSET64
+
+
+80 
+__blk�t_t
+ 
+	m�_blocks
+;
+
+82 
+__blk�t64_t
+ 
+	m�_blocks
+;
+
+84 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN2K8
+
+
+91 
+time�ec
+ 
+	m�_�im
+;
+
+92 
+time�ec
+ 
+	m�_mtim
+;
+
+93 
+time�ec
+ 
+	m�_�im
+;
+
+94 
+	#�_�ime
+ 
+�_�im
+.
+tv_�c
+
+
+	)
+
+95 
+	#�_mtime
+ 
+�_mtim
+.
+tv_�c
+
+
+	)
+
+96 
+	#�_�ime
+ 
+�_�im
+.
+tv_�c
+
+
+	)
+
+98 
+__time_t
+ 
+	m�_�ime
+;
+
+99 
+__sys��_ul�g_t
+ 
+	m�_�im��c
+;
+
+100 
+__time_t
+ 
+	m�_mtime
+;
+
+101 
+__sys��_ul�g_t
+ 
+	m�_mtim��c
+;
+
+102 
+__time_t
+ 
+	m�_�ime
+;
+
+103 
+__sys��_ul�g_t
+ 
+	m�_�im��c
+;
+
+105 #ifde�
+__x86_64__
+
+
+106 
+__sys��_��g_t
+ 
+	m__glibc_��rved
+[3];
+
+108 #i�de�
+__USE_FILE_OFFSET64
+
+
+109 
+	m__glibc_��rved4
+;
+
+110 
+	m__glibc_��rved5
+;
+
+112 
+__�o64_t
+ 
+	m�_�o
+;
+
+117 #ifde�
+__USE_LARGEFILE64
+
+
+119 
+	s��64
+
+
+121 
+__dev_t
+ 
+	m�_dev
+;
+
+122 #ifde�
+__x86_64__
+
+
+123 
+__�o64_t
+ 
+	m�_�o
+;
+
+124 
+__ƚk_t
+ 
+	m�_ƚk
+;
+
+125 
+__mode_t
+ 
+	m�_mode
+;
+
+127 
+	m__�d1
+;
+
+128 
+__�o_t
+ 
+	m__�_�o
+;
+
+129 
+__mode_t
+ 
+	m�_mode
+;
+
+130 
+__ƚk_t
+ 
+	m�_ƚk
+;
+
+132 
+__uid_t
+ 
+	m�_uid
+;
+
+133 
+__gid_t
+ 
+	m�_gid
+;
+
+134 #ifde�
+__x86_64__
+
+
+135 
+	m__�d0
+;
+
+136 
+__dev_t
+ 
+	m�_rdev
+;
+
+137 
+__off_t
+ 
+	m�_size
+;
+
+139 
+__dev_t
+ 
+	m�_rdev
+;
+
+140 
+	m__�d2
+;
+
+141 
+__off64_t
+ 
+	m�_size
+;
+
+143 
+__blksize_t
+ 
+	m�_blksize
+;
+
+144 
+__blk�t64_t
+ 
+	m�_blocks
+;
+
+145 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN2K8
+
+
+152 
+time�ec
+ 
+	m�_�im
+;
+
+153 
+time�ec
+ 
+	m�_mtim
+;
+
+154 
+time�ec
+ 
+	m�_�im
+;
+
+156 
+__time_t
+ 
+	m�_�ime
+;
+
+157 
+__sys��_ul�g_t
+ 
+	m�_�im��c
+;
+
+158 
+__time_t
+ 
+	m�_mtime
+;
+
+159 
+__sys��_ul�g_t
+ 
+	m�_mtim��c
+;
+
+160 
+__time_t
+ 
+	m�_�ime
+;
+
+161 
+__sys��_ul�g_t
+ 
+	m�_�im��c
+;
+
+163 #ifde�
+__x86_64__
+
+
+164 
+__sys��_��g_t
+ 
+	m__glibc_��rved
+[3];
+
+166 
+__�o64_t
+ 
+	m�_�o
+;
+
+172 
+	#_STATBUF_ST_BLKSIZE
+
+
+	)
+
+173 
+	#_STATBUF_ST_RDEV
+
+
+	)
+
+175 
+	#_STATBUF_ST_NSEC
+
+
+	)
+
+179 
+	#__S_IFMT
+ 0170000
+
+	)
+
+182 
+	#__S_IFDIR
+ 0040000
+
+	)
+
+183 
+	#__S_IFCHR
+ 0020000
+
+	)
+
+184 
+	#__S_IFBLK
+ 0060000
+
+	)
+
+185 
+	#__S_IFREG
+ 0100000
+
+	)
+
+186 
+	#__S_IFIFO
+ 0010000
+
+	)
+
+187 
+	#__S_IFLNK
+ 0120000
+
+	)
+
+188 
+	#__S_IFSOCK
+ 0140000
+
+	)
+
+192 
+	#__S_TYPEISMQ
+(
+buf
+�((buf)->
+�_mode
+ - (buf)->�_mode)
+
+	)
+
+193 
+	#__S_TYPEISSEM
+(
+buf
+�((buf)->
+�_mode
+ - (buf)->�_mode)
+
+	)
+
+194 
+	#__S_TYPEISSHM
+(
+buf
+�((buf)->
+�_mode
+ - (buf)->�_mode)
+
+	)
+
+198 
+	#__S_ISUID
+ 04000
+
+	)
+
+199 
+	#__S_ISGID
+ 02000
+
+	)
+
+200 
+	#__S_ISVTX
+ 01000
+
+	)
+
+201 
+	#__S_IREAD
+ 0400
+
+	)
+
+202 
+	#__S_IWRITE
+ 0200
+
+	)
+
+203 
+	#__S_IEXEC
+ 0100
+
+	)
+
+205 #ifde�
+__USE_ATFILE
+
+
+206 
+	#UTIME_NOW
+ ((1�<< 30�- 1l)
+
+	)
+
+207 
+	#UTIME_OMIT
+ ((1�<< 30�- 2l)
+
+	)
+
+	@/usr/include/bits/stdio-ldbl.h
+
+19 #i�de�
+_STDIO_H
+
+
+23 
+__BEGIN_NAMESPACE_STD
+
+
+24 
+	$__LDBL_REDIR_DECL
+ (
+�r�tf
+)
+
+25 
+	$__LDBL_REDIR_DECL
+ (
+��tf
+)
+
+26 
+	$__LDBL_REDIR_DECL
+ (
+�r�tf
+)
+
+27 
+	$__LDBL_REDIR_DECL
+ (
+v�r�tf
+)
+
+28 
+	$__LDBL_REDIR_DECL
+ (
+v��tf
+)
+
+29 
+	$__LDBL_REDIR_DECL
+ (
+v�r�tf
+)
+
+30 #i�
+def�ed
+ 
+__USE_ISOC99
+ && !def�ed 
+__USE_GNU
+ \
+
+31 && !
+def�ed
+ 
+__REDIRECT
+ \
+
+32 && (
+def�ed
+ 
+__STRICT_ANSI__
+ || def�ed 
+__USE_XOPEN2K
+)
+
+33 
+	$__LDBL_REDIR1_DECL
+ (
+fs�nf
+, 
+__�dbl___isoc99_fs�nf
+)
+
+34 
+	$__LDBL_REDIR1_DECL
+ (
+s�nf
+, 
+__�dbl___isoc99_s�nf
+)
+
+35 
+	$__LDBL_REDIR1_DECL
+ (
+ss�nf
+, 
+__�dbl___isoc99_ss�nf
+)
+
+37 
+	$__LDBL_REDIR_DECL
+ (
+fs�nf
+)
+
+38 
+	$__LDBL_REDIR_DECL
+ (
+s�nf
+)
+
+39 
+	$__LDBL_REDIR_DECL
+ (
+ss�nf
+)
+
+41 
+__END_NAMESPACE_STD
+
+
+43 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_ISOC99
+ || def�ed 
+__USE_UNIX98
+
+
+44 
+__BEGIN_NAMESPACE_C99
+
+
+45 
+	$__LDBL_REDIR_DECL
+ (
+���tf
+)
+
+46 
+	$__LDBL_REDIR_DECL
+ (
+v���tf
+)
+
+47 
+__END_NAMESPACE_C99
+
+
+50 #ifdef 
+__USE_ISOC99
+
+
+51 
+__BEGIN_NAMESPACE_C99
+
+
+52 #i�!
+def�ed
+ 
+__USE_GNU
+ && !def�ed 
+__REDIRECT
+ \
+
+53 && (
+def�ed
+ 
+__STRICT_ANSI__
+ || def�ed 
+__USE_XOPEN2K
+)
+
+54 
+	$__LDBL_REDIR1_DECL
+ (
+vfs�nf
+, 
+__�dbl___isoc99_vfs�nf
+)
+
+55 
+	$__LDBL_REDIR1_DECL
+ (
+vs�nf
+, 
+__�dbl___isoc99_vs�nf
+)
+
+56 
+	$__LDBL_REDIR1_DECL
+ (
+vss�nf
+, 
+__�dbl___isoc99_vss�nf
+)
+
+58 
+	$__LDBL_REDIR_DECL
+ (
+vfs�nf
+)
+
+59 
+	$__LDBL_REDIR_DECL
+ (
+vss�nf
+)
+
+60 
+	$__LDBL_REDIR_DECL
+ (
+vs�nf
+)
+
+62 
+__END_NAMESPACE_C99
+
+
+65 #ifde�
+__USE_XOPEN2K8
+
+
+66 
+	$__LDBL_REDIR_DECL
+ (
+vd��tf
+)
+
+67 
+	$__LDBL_REDIR_DECL
+ (
+d��tf
+)
+
+70 #ifde�
+__USE_GNU
+
+
+71 
+	$__LDBL_REDIR_DECL
+ (
+va�r�tf
+)
+
+72 
+	$__LDBL_REDIR_DECL
+ (
+__a�r�tf
+)
+
+73 
+	$__LDBL_REDIR_DECL
+ (
+a�r�tf
+)
+
+74 
+	$__LDBL_REDIR_DECL
+ (
+ob�ack_��tf
+)
+
+75 
+	$__LDBL_REDIR_DECL
+ (
+ob�ack_v��tf
+)
+
+78 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+
+
+79 
+	$__LDBL_REDIR_DECL
+ (
+__�r�tf_chk
+)
+
+80 
+	$__LDBL_REDIR_DECL
+ (
+__v�r�tf_chk
+)
+
+81 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_ISOC99
+ || def�ed 
+__USE_UNIX98
+
+
+82 
+	$__LDBL_REDIR_DECL
+ (
+__���tf_chk
+)
+
+83 
+	$__LDBL_REDIR_DECL
+ (
+__v���tf_chk
+)
+
+85 #i�
+__USE_FORTIFY_LEVEL
+ > 1
+
+86 
+	$__LDBL_REDIR_DECL
+ (
+__�r�tf_chk
+)
+
+87 
+	$__LDBL_REDIR_DECL
+ (
+__��tf_chk
+)
+
+88 
+	$__LDBL_REDIR_DECL
+ (
+__v�r�tf_chk
+)
+
+89 
+	$__LDBL_REDIR_DECL
+ (
+__v��tf_chk
+)
+
+90 #ifde�
+__USE_XOPEN2K8
+
+
+91 
+	$__LDBL_REDIR_DECL
+ (
+__d��tf_chk
+)
+
+92 
+	$__LDBL_REDIR_DECL
+ (
+__vd��tf_chk
+)
+
+94 #ifde�
+__USE_GNU
+
+
+95 
+	$__LDBL_REDIR_DECL
+ (
+__a�r�tf_chk
+)
+
+96 
+	$__LDBL_REDIR_DECL
+ (
+__va�r�tf_chk
+)
+
+97 
+	$__LDBL_REDIR_DECL
+ (
+__ob�ack_��tf_chk
+)
+
+98 
+	$__LDBL_REDIR_DECL
+ (
+__ob�ack_v��tf_chk
+)
+
+	@/usr/include/bits/stdio.h
+
+19 #i�de�
+_STDIO_H
+
+
+23 #i�de�
+__ex��_�l�e
+
+
+24 
+	#__STDIO_INLINE
+ 
+�l�e
+
+
+	)
+
+26 
+	#__STDIO_INLINE
+ 
+__ex��_�l�e
+
+
+	)
+
+30 #ifde�
+__USE_EXTERN_INLINES
+
+
+33 #i�!(
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+)
+
+35 
+__STDIO_INLINE
+ 
+
+36 
+	$v��tf
+ (cڡ *
+__��ri�
+ 
+__fmt
+, 
+_G_va_li�
+ 
+__�g
+)
+
+38  
+	`v�r�tf
+ (
+�dout
+, 
+__fmt
+, 
+__�g
+);
+
+39 
+	}
+}
+
+43 
+__STDIO_INLINE
+ 
+
+44 
+	$g�ch�
+ ()
+
+46  
+	`_IO_g�c
+ (
+�d�
+);
+
+47 
+	}
+}
+
+50 #ifde�
+__USE_MISC
+
+
+52 
+__STDIO_INLINE
+ 
+
+53 
+	$fg�c_u�ocked
+ (
+FILE
+ *
+__�
+)
+
+55  
+	`_IO_g�c_u�ocked
+ (
+__�
+);
+
+56 
+	}
+}
+
+60 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+62 
+__STDIO_INLINE
+ 
+
+63 
+	$g�c_u�ocked
+ (
+FILE
+ *
+__�
+)
+
+65  
+	`_IO_g�c_u�ocked
+ (
+__�
+);
+
+66 
+	}
+}
+
+69 
+__STDIO_INLINE
+ 
+
+70 
+	$g�ch�_u�ocked
+ ()
+
+72  
+	`_IO_g�c_u�ocked
+ (
+�d�
+);
+
+73 
+	}
+}
+
+78 
+__STDIO_INLINE
+ 
+
+79 
+	$putch�
+ (
+__c
+)
+
+81  
+	`_IO_putc
+ (
+__c
+, 
+�dout
+);
+
+82 
+	}
+}
+
+85 #ifde�
+__USE_MISC
+
+
+87 
+__STDIO_INLINE
+ 
+
+88 
+	$�utc_u�ocked
+ (
+__c
+, 
+FILE
+ *
+__��am
+)
+
+90  
+	`_IO_putc_u�ocked
+ (
+__c
+, 
+__��am
+);
+
+91 
+	}
+}
+
+95 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+97 
+__STDIO_INLINE
+ 
+
+98 
+	$putc_u�ocked
+ (
+__c
+, 
+FILE
+ *
+__��am
+)
+
+100  
+	`_IO_putc_u�ocked
+ (
+__c
+, 
+__��am
+);
+
+101 
+	}
+}
+
+104 
+__STDIO_INLINE
+ 
+
+105 
+	$putch�_u�ocked
+ (
+__c
+)
+
+107  
+	`_IO_putc_u�ocked
+ (
+__c
+, 
+�dout
+);
+
+108 
+	}
+}
+
+112 #ifdef 
+__USE_GNU
+
+
+114 
+__STDIO_INLINE
+ 
+_IO_ssize_t
+
+
+115 
+	$g�l�e
+ (**
+__l���
+, 
+size_t
+ *
+__n
+, 
+FILE
+ *
+__��am
+)
+
+117  
+	`__g�d�im
+ (
+__l���
+, 
+__n
+, '\n', 
+__��am
+);
+
+118 
+	}
+}
+
+122 #ifde�
+__USE_MISC
+
+
+124 
+__STDIO_INLINE
+ 
+
+125 
+__NTH
+ (
+	$�of_u�ocked
+ (
+FILE
+ *
+__��am
+))
+
+127  
+	`_IO_�of_u�ocked
+ (
+__��am
+);
+
+128 
+	}
+}
+
+131 
+__STDIO_INLINE
+ 
+
+132 
+__NTH
+ (
+	$��_u�ocked
+ (
+FILE
+ *
+__��am
+))
+
+134  
+	`_IO_��_u�ocked
+ (
+__��am
+);
+
+135 
+	}
+}
+
+141 #i�
+def�ed
+ 
+__USE_MISC
+ && def�ed 
+__GNUC__
+ && def�ed 
+__OPTIMIZE__
+ \
+
+142 && !
+def�ed
+ 
+	g__�lu�lus
+
+
+144 
+	#�d_u�ocked
+(
+�r
+, 
+size
+, 
+n
+, 
+��am
+) \
+
+145 (
+	`__ex�nsi�__
+ ((
+	`__bu�t�_cڡ�t_p
+ (
+size
+�&& __bu�t�_cڡ�t_�(
+n
+) \
+
+146 && (
+size_t
+�(
+size
+�* (size_t�(
+n
+) <= 8 \
+
+147 && (
+size_t
+�(
+size
+) != 0) \
+
+148 ? ({ *
+__�r
+ = (*�(
+�r
+); \
+
+149 
+FILE
+ *
+__��am
+ = (
+��am
+); \
+
+150 
+size_t
+ 
+__�t
+; \
+
+151 
+__�t
+ = (
+size_t
+�(
+size
+�* (size_t�(
+n
+); \
+
+152 
+__�t
+ > 0; --__cnt) \
+
+154 
+__c
+ = 
+	`_IO_g�c_u�ocked
+ (
+__��am
+); \
+
+155 i�(
+__c
+ =�
+EOF
+) \
+
+157 *
+__�r
+++ = 
+__c
+; \
+
+159 ((
+size_t
+�(
+size
+�* (size_t�(
+n
+�- 
+__�t
+) \
+
+160 / (
+size_t
+�(
+size
+); }) \
+
+161 : (((
+	`__bu�t�_cڡ�t_p
+ (
+size
+�&& (
+size_t
+) (size) == 0) \
+
+162 || (
+	`__bu�t�_cڡ�t_p
+ (
+n
+�&& (
+size_t
+) (n) == 0)) \
+
+164 ? ((�(
+�r
+), (�(
+��am
+), (�(
+size
+), \
+
+165 (�(
+n
+), (
+size_t
+) 0) \
+
+166 : 
+	`�d_u�ocked
+ (
+�r
+, 
+size
+, 
+n
+, 
+��am
+))))
+
+	)
+
+168 
+	#fwr�e_u�ocked
+(
+�r
+, 
+size
+, 
+n
+, 
+��am
+) \
+
+169 (
+	`__ex�nsi�__
+ ((
+	`__bu�t�_cڡ�t_p
+ (
+size
+�&& __bu�t�_cڡ�t_�(
+n
+) \
+
+170 && (
+size_t
+�(
+size
+�* (size_t�(
+n
+) <= 8 \
+
+171 && (
+size_t
+�(
+size
+) != 0) \
+
+172 ? ({ cڡ *
+__�r
+ = (cڡ *�(
+�r
+); \
+
+173 
+FILE
+ *
+__��am
+ = (
+��am
+); \
+
+174 
+size_t
+ 
+__�t
+; \
+
+175 
+__�t
+ = (
+size_t
+�(
+size
+�* (size_t�(
+n
+); \
+
+176 
+__�t
+ > 0; --__cnt) \
+
+177 i�(
+	`_IO_putc_u�ocked
+ (*
+__�r
+++, 
+__��am
+�=�
+EOF
+) \
+
+179 ((
+size_t
+�(
+size
+�* (size_t�(
+n
+�- 
+__�t
+) \
+
+180 / (
+size_t
+�(
+size
+); }) \
+
+181 : (((
+	`__bu�t�_cڡ�t_p
+ (
+size
+�&& (
+size_t
+) (size) == 0) \
+
+182 || (
+	`__bu�t�_cڡ�t_p
+ (
+n
+�&& (
+size_t
+) (n) == 0)) \
+
+184 ? ((�(
+�r
+), (�(
+��am
+), (�(
+size
+), \
+
+185 (�(
+n
+), (
+size_t
+) 0) \
+
+186 : 
+	`fwr�e_u�ocked
+ (
+�r
+, 
+size
+, 
+n
+, 
+��am
+))))
+
+	)
+
+190 #unde�
+__STDIO_INLINE
+
+
+	@/usr/include/bits/stdio2.h
+
+19 #i�de�
+_STDIO_H
+
+
+23 

+	$__�r�tf_chk
+ (*
+__��ri�
+ 
+__s
+, 
+__�ag
+, 
+size_t
+ 
+__��
+,
+
+24 cڡ *
+__��ri�
+ 
+__f�m�
+, ...�
+__THROW
+;
+
+25 

+	$__v�r�tf_chk
+ (*
+__��ri�
+ 
+__s
+, 
+__�ag
+, 
+size_t
+ 
+__��
+,
+
+26 cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+27 
+_G_va_li�
+ 
+__�
+�
+__THROW
+;
+
+29 #ifde�
+__va_�g_�ck
+
+
+30 
+__f�tify_fun�i�
+ 
+
+31 
+	`__NTH
+ (
+	$�r�tf
+ (*
+__��ri�
+ 
+__s
+, cڡ *__��ri� 
+__fmt
+, ...))
+
+33  
+	`__bu�t�___�r�tf_chk
+ (
+__s
+, 
+__USE_FORTIFY_LEVEL
+ - 1,
+
+34 
+	`__bos
+ (
+__s
+), 
+__fmt
+, 
+	`__va_�g_�ck
+ ());
+
+35 
+	}
+}
+
+36 #�i�!
+def�ed
+ 
+__�lu�lus
+
+
+37 
+	#�r�tf
+(
+�r
+, ...) \
+
+38 
+	`__bu�t�___�r�tf_chk
+ (
+�r
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+	`__bos
+ (str), \
+
+39 
+__VA_ARGS__
+)
+
+	)
+
+42 
+__f�tify_fun�i�
+ 
+
+43 
+__NTH
+ (
+	$v�r�tf
+ (*
+__��ri�
+ 
+__s
+, cڡ *__��ri� 
+__fmt
+,
+
+44 
+_G_va_li�
+ 
+__�
+))
+
+46  
+	`__bu�t�___v�r�tf_chk
+ (
+__s
+, 
+__USE_FORTIFY_LEVEL
+ - 1,
+
+47 
+	`__bos
+ (
+__s
+), 
+__fmt
+, 
+__�
+);
+
+48 
+	}
+}
+
+50 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_ISOC99
+ || def�ed 
+__USE_UNIX98
+
+
+52 

+	$__���tf_chk
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+, 
+__�ag
+,
+
+53 
+size_t
+ 
+__��
+, cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+54 ...�
+__THROW
+;
+
+55 

+	$__v���tf_chk
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+, 
+__�ag
+,
+
+56 
+size_t
+ 
+__��
+, cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+57 
+_G_va_li�
+ 
+__�
+�
+__THROW
+;
+
+59 #ifde�
+__va_�g_�ck
+
+
+60 
+__f�tify_fun�i�
+ 
+
+61 
+	`__NTH
+ (
+	$���tf
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+62 cڡ *
+__��ri�
+ 
+__fmt
+, ...))
+
+64  
+	`__bu�t�___���tf_chk
+ (
+__s
+, 
+__n
+, 
+__USE_FORTIFY_LEVEL
+ - 1,
+
+65 
+	`__bos
+ (
+__s
+), 
+__fmt
+, 
+	`__va_�g_�ck
+ ());
+
+66 
+	}
+}
+
+67 #�i�!
+def�ed
+ 
+__�lu�lus
+
+
+68 
+	#���tf
+(
+�r
+, 
+�n
+, ...) \
+
+69 
+	`__bu�t�___���tf_chk
+ (
+�r
+, 
+�n
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+	`__bos
+ (str), \
+
+70 
+__VA_ARGS__
+)
+
+	)
+
+73 
+__f�tify_fun�i�
+ 
+
+74 
+__NTH
+ (
+	$v���tf
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+75 cڡ *
+__��ri�
+ 
+__fmt
+, 
+_G_va_li�
+ 
+__�
+))
+
+77  
+	`__bu�t�___v���tf_chk
+ (
+__s
+, 
+__n
+, 
+__USE_FORTIFY_LEVEL
+ - 1,
+
+78 
+	`__bos
+ (
+__s
+), 
+__fmt
+, 
+__�
+);
+
+79 
+	}
+}
+
+83 #i�
+__USE_FORTIFY_LEVEL
+ > 1
+
+85 

+__�r�tf_chk
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+, 
+__�ag
+,
+
+86 cڡ *
+__��ri�
+ 
+__f�m�
+, ...);
+
+87 

+__��tf_chk
+ (
+__�ag
+, cڡ *
+__��ri�
+ 
+__f�m�
+, ...);
+
+88 

+__v�r�tf_chk
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+, 
+__�ag
+,
+
+89 cڡ *
+__��ri�
+ 
+__f�m�
+, 
+_G_va_li�
+ 
+__�
+);
+
+90 

+__v��tf_chk
+ (
+__�ag
+, cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+91 
+_G_va_li�
+ 
+__�
+);
+
+93 #ifde�
+__va_�g_�ck
+
+
+94 
+__f�tify_fun�i�
+ 
+
+95 
+	$�r�tf
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+, cڡ *__��ri� 
+__fmt
+, ...)
+
+97  
+	`__�r�tf_chk
+ (
+__��am
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+,
+
+98 
+	`__va_�g_�ck
+ ());
+
+99 
+	}
+}
+
+101 
+__f�tify_fun�i�
+ 
+
+102 
+	$��tf
+ (cڡ *
+__��ri�
+ 
+__fmt
+, ...)
+
+104  
+	`__��tf_chk
+ (
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+	`__va_�g_�ck
+ ());
+
+105 
+	}
+}
+
+106 #�i�!
+def�ed
+ 
+__�lu�lus
+
+
+107 
+	#��tf
+(...) \
+
+108 
+	`__��tf_chk
+ (
+__USE_FORTIFY_LEVEL
+ - 1, 
+__VA_ARGS__
+)
+
+	)
+
+109 
+	#�r�tf
+(
+��am
+, ...) \
+
+110 
+	`__�r�tf_chk
+ (
+��am
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__VA_ARGS__
+)
+
+	)
+
+113 
+__f�tify_fun�i�
+ 
+
+114 
+	$v��tf
+ (cڡ *
+__��ri�
+ 
+__fmt
+, 
+_G_va_li�
+ 
+__�
+)
+
+116 #ifde�
+__USE_EXTERN_INLINES
+
+
+117  
+	`__v�r�tf_chk
+ (
+�dout
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+__�
+);
+
+119  
+	`__v��tf_chk
+ (
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+__�
+);
+
+121 
+	}
+}
+
+123 
+__f�tify_fun�i�
+ 
+
+124 
+	$v�r�tf
+ (
+FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+125 cڡ *
+__��ri�
+ 
+__fmt
+, 
+_G_va_li�
+ 
+__�
+)
+
+127  
+	`__v�r�tf_chk
+ (
+__��am
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+__�
+);
+
+128 
+	}
+}
+
+130 #ifde�
+__USE_XOPEN2K8
+
+
+131 

+	$__d��tf_chk
+ (
+__fd
+, 
+__�ag
+, cڡ *
+__��ri�
+ 
+__fmt
+,
+
+132 ...�
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 3, 4)));
+
+133 

+	$__vd��tf_chk
+ (
+__fd
+, 
+__�ag
+,
+
+134 cڡ *
+__��ri�
+ 
+__fmt
+, 
+_G_va_li�
+ 
+__�g
+)
+
+135 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 3, 0)));
+
+137 #ifde�
+__va_�g_�ck
+
+
+138 
+__f�tify_fun�i�
+ 
+
+139 
+	$d��tf
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__fmt
+, ...)
+
+141  
+	`__d��tf_chk
+ (
+__fd
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+,
+
+142 
+	`__va_�g_�ck
+ ());
+
+143 
+	}
+}
+
+144 #�i�!
+def�ed
+ 
+__�lu�lus
+
+
+145 
+	#d��tf
+(
+fd
+, ...) \
+
+146 
+	`__d��tf_chk
+ (
+fd
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__VA_ARGS__
+)
+
+	)
+
+149 
+__f�tify_fun�i�
+ 
+
+150 
+	$vd��tf
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__fmt
+, 
+_G_va_li�
+ 
+__�
+)
+
+152  
+	`__vd��tf_chk
+ (
+__fd
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+__�
+);
+
+153 
+	}
+}
+
+156 #ifde�
+__USE_GNU
+
+
+158 

+	$__a�r�tf_chk
+ (**
+__��ri�
+ 
+__�r
+, 
+__�ag
+,
+
+159 cڡ *
+__��ri�
+ 
+__fmt
+, ...)
+
+160 
+__THROW
+ 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__��tf__
+, 3, 4))�
+__wur
+;
+
+161 

+	$__va�r�tf_chk
+ (**
+__��ri�
+ 
+__�r
+, 
+__�ag
+,
+
+162 cڡ *
+__��ri�
+ 
+__fmt
+, 
+_G_va_li�
+ 
+__�g
+)
+
+163 
+__THROW
+ 
+	`__��ibu�__
+ ((
+	$__f�m�__
+ (
+__��tf__
+, 3, 0))�
+__wur
+;
+
+164 

+	$__ob�ack_��tf_chk
+ (
+ob�ack
+ *
+__��ri�
+ 
+__ob�ack
+,
+
+165 
+__�ag
+, cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+167 
+__THROW
+ 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 3, 4)));
+
+168 

+	$__ob�ack_v��tf_chk
+ (
+ob�ack
+ *
+__��ri�
+ 
+__ob�ack
+,
+
+169 
+__�ag
+,
+
+170 cڡ *
+__��ri�
+ 
+__f�m�
+,
+
+171 
+_G_va_li�
+ 
+__�gs
+)
+
+172 
+__THROW
+ 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__��tf__
+, 3, 0)));
+
+174 #ifde�
+__va_�g_�ck
+
+
+175 
+__f�tify_fun�i�
+ 
+
+176 
+	`__NTH
+ (
+	$a�r�tf
+ (**
+__��ri�
+ 
+__�r
+, cڡ *__��ri� 
+__fmt
+, ...))
+
+178  
+	`__a�r�tf_chk
+ (
+__�r
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+,
+
+179 
+	`__va_�g_�ck
+ ());
+
+180 
+	}
+}
+
+182 
+__f�tify_fun�i�
+ 
+
+183 
+__NTH
+ (
+	$__a�r�tf
+ (**
+__��ri�
+ 
+__�r
+, cڡ *__��ri� 
+__fmt
+,
+
+186  
+	`__a�r�tf_chk
+ (
+__�r
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+,
+
+187 
+	`__va_�g_�ck
+ ());
+
+188 
+	}
+}
+
+190 
+__f�tify_fun�i�
+ 
+
+191 
+__NTH
+ (
+	$ob�ack_��tf
+ (
+ob�ack
+ *
+__��ri�
+ 
+__ob�ack
+,
+
+192 cڡ *
+__��ri�
+ 
+__fmt
+, ...))
+
+194  
+	`__ob�ack_��tf_chk
+ (
+__ob�ack
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+,
+
+195 
+	`__va_�g_�ck
+ ());
+
+196 
+	}
+}
+
+197 #�i�!
+def�ed
+ 
+__�lu�lus
+
+
+198 
+	#a�r�tf
+(
+�r
+, ...) \
+
+199 
+	`__a�r�tf_chk
+ (
+�r
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__VA_ARGS__
+)
+
+	)
+
+200 
+	#__a�r�tf
+(
+�r
+, ...) \
+
+201 
+	`__a�r�tf_chk
+ (
+�r
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__VA_ARGS__
+)
+
+	)
+
+202 
+	#ob�ack_��tf
+(
+ob�ack
+, ...) \
+
+203 
+	`__ob�ack_��tf_chk
+ (
+ob�ack
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__VA_ARGS__
+)
+
+	)
+
+206 
+__f�tify_fun�i�
+ 
+
+207 
+__NTH
+ (
+	$va�r�tf
+ (**
+__��ri�
+ 
+__�r
+, cڡ *__��ri� 
+__fmt
+,
+
+208 
+_G_va_li�
+ 
+__�
+))
+
+210  
+	`__va�r�tf_chk
+ (
+__�r
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+__�
+);
+
+211 
+	}
+}
+
+213 
+__f�tify_fun�i�
+ 
+
+214 
+__NTH
+ (
+	$ob�ack_v��tf
+ (
+ob�ack
+ *
+__��ri�
+ 
+__ob�ack
+,
+
+215 cڡ *
+__��ri�
+ 
+__fmt
+, 
+_G_va_li�
+ 
+__�
+))
+
+217  
+	`__ob�ack_v��tf_chk
+ (
+__ob�ack
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+,
+
+218 
+__�
+);
+
+219 
+	}
+}
+
+225 #i�!
+def�ed
+ 
+__USE_ISOC11
+ \
+
+226 || (
+def�ed
+ 
+	g__�lu�lus
+ && __�lu�lu�<�201103L && !def�ed 
+__USE_GNU
+)
+
+227 
*
+	$__g�s_chk
+ (*
+__�r
+, 
+size_t
+�
+__wur
+;
+
+228 
*
+	`__REDIRECT
+ (
+__g�s_w�n
+, (*
+__�r
+), 
+g�s
+)
+
+229 
+__wur
+ 
+	`__w�ljr
+ ("please use fgets or getline instead, gets can't "
+
+232 
+__f�tify_fun�i�
+ 
+__wur
+ *
+
+233 
+	$g�s
+ (*
+__�r
+)
+
+235 i�(
+	`__bos
+ (
+__�r
+�!�(
+size_t
+) -1)
+
+236  
+	`__g�s_chk
+ (
+__�r
+, 
+	`__bos
+ (__str));
+
+237  
+	`__g�s_w�n
+ (
+__�r
+);
+
+238 
+	}
+}
+
+241 
*
+	$__fg�s_chk
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__size
+, 
+__n
+,
+
+242 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+243 
*
+	`__REDIRECT
+ (
+__fg�s_��s
+,
+
+244 (*
+__��ri�
+ 
+__s
+, 
+__n
+,
+
+245 
+FILE
+ *
+__��ri�
+ 
+__��am
+), 
+fg�s
+�
+__wur
+;
+
+246 
*
+	`__REDIRECT
+ (
+__fg�s_chk_w�n
+,
+
+247 (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__size
+, 
+__n
+,
+
+248 
+FILE
+ *
+__��ri�
+ 
+__��am
+), 
+__fg�s_chk
+)
+
+249 
+__wur
+ 
+	`__w�ljr
+ ("fgets called with bigger size�han�ength "
+
+252 
+__f�tify_fun�i�
+ 
+__wur
+ *
+
+253 
+	$fg�s
+ (*
+__��ri�
+ 
+__s
+, 
+__n
+, 
+FILE
+ *__��ri� 
+__��am
+)
+
+255 i�(
+	`__bos
+ (
+__s
+�!�(
+size_t
+) -1)
+
+257 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+) || __n <= 0)
+
+258  
+	`__fg�s_chk
+ (
+__s
+, 
+	`__bos
+ (__s), 
+__n
+, 
+__��am
+);
+
+260 i�((
+size_t
+�
+__n
+ > 
+	`__bos
+ (
+__s
+))
+
+261  
+	`__fg�s_chk_w�n
+ (
+__s
+, 
+	`__bos
+ (__s), 
+__n
+, 
+__��am
+);
+
+263  
+	`__fg�s_��s
+ (
+__s
+, 
+__n
+, 
+__��am
+);
+
+264 
+	}
+}
+
+266 
+size_t
+ 
+	$__�d_chk
+ (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__���
+,
+
+267 
+size_t
+ 
+__size
+, size_�
+__n
+,
+
+268 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+269 
+size_t
+ 
+	`__REDIRECT
+ (
+__�d_��s
+,
+
+270 (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__size
+,
+
+271 
+size_t
+ 
+__n
+, 
+FILE
+ *
+__��ri�
+ 
+__��am
+),
+
+272 
+�d
+�
+__wur
+;
+
+273 
+size_t
+ 
+	`__REDIRECT
+ (
+__�d_chk_w�n
+,
+
+274 (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__���
+,
+
+275 
+size_t
+ 
+__size
+, size_�
+__n
+,
+
+276 
+FILE
+ *
+__��ri�
+ 
+__��am
+),
+
+277 
+__�d_chk
+)
+
+278 
+__wur
+ 
+	`__w�ljr
+ ("fread called with bigger size *�memb�han�ength "
+
+281 
+__f�tify_fun�i�
+ 
+__wur
+ 
+size_t
+
+
+282 
+	$�d
+ (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__size
+, size_�
+__n
+,
+
+283 
+FILE
+ *
+__��ri�
+ 
+__��am
+)
+
+285 i�(
+	`__bos0
+ (
+__�r
+�!�(
+size_t
+) -1)
+
+287 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__size
+)
+
+288 || !
+	`__bu�t�_cڡ�t_p
+ (
+__n
+)
+
+289 || (
+__size
+ | 
+__n
+�>�(((
+size_t
+) 1) << (8 *  (size_t) / 2)))
+
+290  
+	`__�d_chk
+ (
+__�r
+, 
+	`__bos0
+ (__�r), 
+__size
+, 
+__n
+, 
+__��am
+);
+
+292 i�(
+__size
+ * 
+__n
+ > 
+	`__bos0
+ (
+__�r
+))
+
+293  
+	`__�d_chk_w�n
+ (
+__�r
+, 
+	`__bos0
+ (__�r), 
+__size
+, 
+__n
+, 
+__��am
+);
+
+295  
+	`__�d_��s
+ (
+__�r
+, 
+__size
+, 
+__n
+, 
+__��am
+);
+
+296 
+	}
+}
+
+298 #ifde�
+__USE_GNU
+
+
+299 
*
+	$__fg�s_u�ocked_chk
+ (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__size
+,
+
+300 
+__n
+, 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+301 
*
+	`__REDIRECT
+ (
+__fg�s_u�ocked_��s
+,
+
+302 (*
+__��ri�
+ 
+__s
+, 
+__n
+,
+
+303 
+FILE
+ *
+__��ri�
+ 
+__��am
+), 
+fg�s_u�ocked
+�
+__wur
+;
+
+304 
*
+	`__REDIRECT
+ (
+__fg�s_u�ocked_chk_w�n
+,
+
+305 (*
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__size
+, 
+__n
+,
+
+306 
+FILE
+ *
+__��ri�
+ 
+__��am
+), 
+__fg�s_u�ocked_chk
+)
+
+307 
+__wur
+ 
+	`__w�ljr
+ ("fgets_unlocked called with bigger size�han�ength "
+
+310 
+__f�tify_fun�i�
+ 
+__wur
+ *
+
+311 
+	$fg�s_u�ocked
+ (*
+__��ri�
+ 
+__s
+, 
+__n
+, 
+FILE
+ *__��ri� 
+__��am
+)
+
+313 i�(
+	`__bos
+ (
+__s
+�!�(
+size_t
+) -1)
+
+315 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+) || __n <= 0)
+
+316  
+	`__fg�s_u�ocked_chk
+ (
+__s
+, 
+	`__bos
+ (__s), 
+__n
+, 
+__��am
+);
+
+318 i�((
+size_t
+�
+__n
+ > 
+	`__bos
+ (
+__s
+))
+
+319  
+	`__fg�s_u�ocked_chk_w�n
+ (
+__s
+, 
+	`__bos
+ (__s), 
+__n
+, 
+__��am
+);
+
+321  
+	`__fg�s_u�ocked_��s
+ (
+__s
+, 
+__n
+, 
+__��am
+);
+
+322 
+	}
+}
+
+325 #ifde�
+__USE_MISC
+
+
+326 #unde�
+�d_u�ocked
+
+
+327 
+size_t
+ 
+	$__�d_u�ocked_chk
+ (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__���
+,
+
+328 
+size_t
+ 
+__size
+, size_�
+__n
+,
+
+329 
+FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+330 
+size_t
+ 
+	`__REDIRECT
+ (
+__�d_u�ocked_��s
+,
+
+331 (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__size
+,
+
+332 
+size_t
+ 
+__n
+, 
+FILE
+ *
+__��ri�
+ 
+__��am
+),
+
+333 
+�d_u�ocked
+�
+__wur
+;
+
+334 
+size_t
+ 
+	`__REDIRECT
+ (
+__�d_u�ocked_chk_w�n
+,
+
+335 (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__���
+,
+
+336 
+size_t
+ 
+__size
+, size_�
+__n
+,
+
+337 
+FILE
+ *
+__��ri�
+ 
+__��am
+),
+
+338 
+__�d_u�ocked_chk
+)
+
+339 
+__wur
+ 
+	`__w�ljr
+ ("fread_unlocked called with bigger size *�memb�han "
+
+342 
+__f�tify_fun�i�
+ 
+__wur
+ 
+size_t
+
+
+343 
+	$�d_u�ocked
+ (*
+__��ri�
+ 
+__�r
+, 
+size_t
+ 
+__size
+, size_�
+__n
+,
+
+344 
+FILE
+ *
+__��ri�
+ 
+__��am
+)
+
+346 i�(
+	`__bos0
+ (
+__�r
+�!�(
+size_t
+) -1)
+
+348 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__size
+)
+
+349 || !
+	`__bu�t�_cڡ�t_p
+ (
+__n
+)
+
+350 || (
+__size
+ | 
+__n
+�>�(((
+size_t
+) 1) << (8 *  (size_t) / 2)))
+
+351  
+	`__�d_u�ocked_chk
+ (
+__�r
+, 
+	`__bos0
+ (__�r), 
+__size
+, 
+__n
+,
+
+352 
+__��am
+);
+
+354 i�(
+__size
+ * 
+__n
+ > 
+	`__bos0
+ (
+__�r
+))
+
+355  
+	`__�d_u�ocked_chk_w�n
+ (
+__�r
+, 
+	`__bos0
+ (__�r), 
+__size
+, 
+__n
+,
+
+356 
+__��am
+);
+
+359 #ifde�
+__USE_EXTERN_INLINES
+
+
+360 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__size
+)
+
+361 && 
+	`__bu�t�_cڡ�t_p
+ (
+__n
+)
+
+362 && (
+__size
+ | 
+__n
+�< (((
+size_t
+) 1) << (8 *  (size_t) / 2))
+
+363 && 
+__size
+ * 
+__n
+ <= 8)
+
+365 
+size_t
+ 
+__�t
+ = 
+__size
+ * 
+__n
+;
+
+366 *
+__��
+ = (*�
+__�r
+;
+
+367 i�(
+__�t
+ == 0)
+
+370 ; 
+__�t
+ > 0; --__cnt)
+
+372 
+__c
+ = 
+	`_IO_g�c_u�ocked
+ (
+__��am
+);
+
+373 i�(
+__c
+ =�
+EOF
+)
+
+375 *
+__��
+++ = 
+__c
+;
+
+377  (
+__��
+ - (*�
+__�r
+�/ 
+__size
+;
+
+380  
+	`__�d_u�ocked_��s
+ (
+__�r
+, 
+__size
+, 
+__n
+, 
+__��am
+);
+
+381 
+	}
+}
+
+	@/usr/include/bits/stdio_lim.h
+
+18 #i�!
+def�ed
+ 
+_STDIO_H
+ && !def�ed 
+__�ed_FOPEN_MAX
+ && !def�ed 
+__�ed_IOV_MAX
+
+
+22 #ifde�
+_STDIO_H
+
+
+23 
+	#L_tm�am
+ 20
+
+	)
+
+24 
+	#TMP_MAX
+ 238328
+
+	)
+
+25 
+	#FILENAME_MAX
+ 4096
+
+	)
+
+27 #ifde�
+__USE_POSIX
+
+
+28 
+	#L_��mid
+ 9
+
+	)
+
+29 #i�!
+def�ed
+ 
+__USE_XOPEN2K
+ || def�ed 
+__USE_GNU
+
+
+30 
+	#L_cu�rid
+ 9
+
+	)
+
+35 #i�
+def�ed
+ 
+__�ed_FOPEN_MAX
+ || def�ed 
+_STDIO_H
+
+
+36 #unde�
+FOPEN_MAX
+
+
+37 
+	#FOPEN_MAX
+ 16
+
+	)
+
+40 #i�
+def�ed
+ 
+__�ed_IOV_MAX
+ && !def�ed 
+IOV_MAX
+
+
+41 
+	#IOV_MAX
+ 1024
+
+	)
+
+	@/usr/include/bits/stdlib-bsearch.h
+
+19 
+__ex��_�l�e
+ *
+
+20 
+	$b��ch
+ (cڡ *
+__key
+, cڡ *
+__ba�
+, 
+size_t
+ 
+__nmemb
+, size_�
+__size
+,
+
+21 
+__com�r_�_t
+ 
+__com�r
+)
+
+23 
+size_t
+ 
+__l
+, 
+__u
+, 
+__idx
+;
+
+24 cڡ *
+__p
+;
+
+25 
+__com�ris�
+;
+
+27 
+__l
+ = 0;
+
+28 
+__u
+ = 
+__nmemb
+;
+
+29 
+__l
+ < 
+__u
+)
+
+31 
+__idx
+ = (
+__l
+ + 
+__u
+) / 2;
+
+32 
+__p
+ = (*�(((cڡ *�
+__ba�
+�+ (
+__idx
+ * 
+__size
+));
+
+33 
+__com�ris�
+ = (*
+__com�r
+�(
+__key
+, 
+__p
+);
+
+34 i�(
+__com�ris�
+ < 0)
+
+35 
+__u
+ = 
+__idx
+;
+
+36 i�(
+__com�ris�
+ > 0)
+
+37 
+__l
+ = 
+__idx
+ + 1;
+
+39  (*�
+__p
+;
+
+42  
+NULL
+;
+
+43 
+	}
+}
+
+	@/usr/include/bits/stdlib-float.h
+
+19 #i�de�
+_STDLIB_H
+
+
+23 #ifde�
+__USE_EXTERN_INLINES
+
+
+24 
+__BEGIN_NAMESPACE_STD
+
+
+25 
+__ex��_�l�e
+ 
+
+26 
+__NTH
+ (
+	$�of
+ (cڡ *
+__Ō
+))
+
+28  
+	`��od
+ (
+__Ō
+, (**�
+NULL
+);
+
+29 
+	}
+}
+
+30 
+	g__END_NAMESPACE_STD
+
+
+	@/usr/include/bits/stdlib-ldbl.h
+
+19 #i�de�
+_STDLIB_H
+
+
+23 #ifdef 
+__USE_ISOC99
+
+
+24 
+__BEGIN_NAMESPACE_C99
+
+
+25 
+	$__LDBL_REDIR1_DECL
+ (
+���d
+, 
+��od
+)
+
+26 
+__END_NAMESPACE_C99
+
+
+29 #ifde�
+__USE_GNU
+
+
+30 
+	$__LDBL_REDIR1_DECL
+ (
+���d_l
+, 
+��od_l
+)
+
+33 #ifde�
+__USE_MISC
+
+
+34 
+	$__LDBL_REDIR1_DECL
+ (
+qecvt
+, 
+ecvt
+)
+
+35 
+	$__LDBL_REDIR1_DECL
+ (
+qfcvt
+, 
+fcvt
+)
+
+36 
+	$__LDBL_REDIR1_DECL
+ (
+qgcvt
+, 
+gcvt
+)
+
+37 
+	$__LDBL_REDIR1_DECL
+ (
+qecvt_r
+, 
+ecvt_r
+)
+
+38 
+	$__LDBL_REDIR1_DECL
+ (
+qfcvt_r
+, 
+fcvt_r
+)
+
+	@/usr/include/bits/stdlib.h
+
+19 #i�de�
+_STDLIB_H
+
+
+23 
*
+	$__���th_chk
+ (cڡ *
+__��ri�
+ 
+__�me
+,
+
+24 *
+__��ri�
+ 
+__�s�ved
+,
+
+25 
+size_t
+ 
+__�s�ved�n
+�
+__THROW
+ 
+__wur
+;
+
+26 
*
+	`__REDIRECT_NTH
+ (
+__���th_��s
+,
+
+27 (cڡ *
+__��ri�
+ 
+__�me
+,
+
+28 *
+__��ri�
+ 
+__�s�ved
+), 
+���th
+�
+__wur
+;
+
+29 
*
+	`__REDIRECT_NTH
+ (
+__���th_chk_w�n
+,
+
+30 (cڡ *
+__��ri�
+ 
+__�me
+,
+
+31 *
+__��ri�
+ 
+__�s�ved
+,
+
+32 
+size_t
+ 
+__�s�ved�n
+), 
+__���th_chk
+�
+__wur
+
+
+33 
+	`__w�ljr
+ ("second�rgument of�ealpath must be�ither NULL or�t "
+
+36 
+__f�tify_fun�i�
+ 
+__wur
+ *
+
+37 
+	`__NTH
+ (
+	$���th
+ (cڡ *
+__��ri�
+ 
+__�me
+, *__��ri� 
+__�s�ved
+))
+
+39 i�(
+	`__bos
+ (
+__�s�ved
+�!�(
+size_t
+) -1)
+
+41 #i�
+def�ed
+ 
+_LIBC_LIMITS_H_
+ && def�ed 
+PATH_MAX
+
+
+42 i�(
+	`__bos
+ (
+__�s�ved
+�< 
+PATH_MAX
+)
+
+43  
+	`__���th_chk_w�n
+ (
+__�me
+, 
+__�s�ved
+, 
+	`__bos
+ (__resolved));
+
+45  
+	`__���th_chk
+ (
+__�me
+, 
+__�s�ved
+, 
+	`__bos
+ (__resolved));
+
+48  
+	`__���th_��s
+ (
+__�me
+, 
+__�s�ved
+);
+
+49 
+	}
+}
+
+52 

+	$__��ame_r_chk
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+53 
+size_t
+ 
+__ėl
+�
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+54 

+	`__REDIRECT_NTH
+ (
+__��ame_r_��s
+, (
+__fd
+, *
+__buf
+,
+
+55 
+size_t
+ 
+__bu�
+), 
+��ame_r
+)
+
+56 
+	`__n�nu�
+ ((2));
+
+57 

+	`__REDIRECT_NTH
+ (
+__��ame_r_chk_w�n
+,
+
+58 (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+59 
+size_t
+ 
+__ėl
+), 
+__��ame_r_chk
+)
+
+60 
+	`__n�nu�
+ ((2)�
+	`__w�ljr
+ ("ptsname_r called with buflen bigger�han "
+
+63 
+__f�tify_fun�i�
+ 
+
+64 
+	`__NTH
+ (
+	$��ame_r
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+))
+
+66 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+68 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__bu�
+))
+
+69  
+	`__��ame_r_chk
+ (
+__fd
+, 
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+70 i�(
+__bu�
+ > 
+	`__bos
+ (
+__buf
+))
+
+71  
+	`__��ame_r_chk_w�n
+ (
+__fd
+, 
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+73  
+	`__��ame_r_��s
+ (
+__fd
+, 
+__buf
+, 
+__bu�
+);
+
+74 
+	}
+}
+
+77 

+	$__w�omb_chk
+ (*
+__s
+, 
+wch�_t
+ 
+__wch�
+, 
+size_t
+ 
+__bu�
+)
+
+78 
+__THROW
+ 
+__wur
+;
+
+79 

+	`__REDIRECT_NTH
+ (
+__w�omb_��s
+, (*
+__s
+, 
+wch�_t
+ 
+__wch�
+),
+
+80 
+w�omb
+�
+__wur
+;
+
+82 
+__f�tify_fun�i�
+ 
+__wur
+ 
+
+83 
+	`__NTH
+ (
+	$w�omb
+ (*
+__s
+, 
+wch�_t
+ 
+__wch�
+))
+
+88 
+	#__STDLIB_MB_LEN_MAX
+ 16
+
+	)
+
+89 #i�
+def�ed
+ 
+MB_LEN_MAX
+ && MB_LEN_MAX !�
+__STDLIB_MB_LEN_MAX
+
+
+92 i�(
+	`__bos
+ (
+__s
+�!�(
+size_t
+�-1 && 
+__STDLIB_MB_LEN_MAX
+ > __bos (__s))
+
+93  
+	`__w�omb_chk
+ (
+__s
+, 
+__wch�
+, 
+	`__bos
+ (__s));
+
+94  
+	`__w�omb_��s
+ (
+__s
+, 
+__wch�
+);
+
+95 
+	}
+}
+
+98 
+size_t
+ 
+	$__mb�owcs_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+99 cڡ *
+__��ri�
+ 
+__�c
+,
+
+100 
+size_t
+ 
+__�n
+, size_�
+__d��n
+�
+__THROW
+;
+
+101 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__mb�owcs_��s
+,
+
+102 (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+103 cڡ *
+__��ri�
+ 
+__�c
+,
+
+104 
+size_t
+ 
+__�n
+), 
+mb�owcs
+);
+
+105 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__mb�owcs_chk_w�n
+,
+
+106 (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+107 cڡ *
+__��ri�
+ 
+__�c
+,
+
+108 
+size_t
+ 
+__�n
+, size_�
+__d��n
+), 
+__mb�owcs_chk
+)
+
+109 
+	`__w�ljr
+ ("mbstowcs called with dst buffer smaller�han�en "
+
+112 
+__f�tify_fun�i�
+ 
+size_t
+
+
+113 
+	`__NTH
+ (
+	$mb�owcs
+ (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+, cڡ *__��ri� 
+__�c
+,
+
+114 
+size_t
+ 
+__�n
+))
+
+116 i�(
+	`__bos
+ (
+__d�
+�!�(
+size_t
+) -1)
+
+118 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+119  
+	`__mb�owcs_chk
+ (
+__d�
+, 
+__�c
+, 
+__�n
+,
+
+120 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+));
+
+122 i�(
+__�n
+ > 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+))
+
+123  
+	`__mb�owcs_chk_w�n
+ (
+__d�
+, 
+__�c
+, 
+__�n
+,
+
+124 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+));
+
+126  
+	`__mb�owcs_��s
+ (
+__d�
+, 
+__�c
+, 
+__�n
+);
+
+127 
+	}
+}
+
+130 
+size_t
+ 
+	$__wc�ombs_chk
+ (*
+__��ri�
+ 
+__d�
+,
+
+131 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+132 
+size_t
+ 
+__�n
+, size_�
+__d��n
+�
+__THROW
+;
+
+133 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__wc�ombs_��s
+,
+
+134 (*
+__��ri�
+ 
+__d�
+,
+
+135 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+136 
+size_t
+ 
+__�n
+), 
+wc�ombs
+);
+
+137 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__wc�ombs_chk_w�n
+,
+
+138 (*
+__��ri�
+ 
+__d�
+,
+
+139 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+140 
+size_t
+ 
+__�n
+, size_�
+__d��n
+), 
+__wc�ombs_chk
+)
+
+141 
+	`__w�ljr
+ ("wcstombs called with dst buffer smaller�han�en");
+
+143 
+__f�tify_fun�i�
+ 
+size_t
+
+
+144 
+	`__NTH
+ (
+	$wc�ombs
+ (*
+__��ri�
+ 
+__d�
+, cڡ 
+wch�_t
+ *__��ri� 
+__�c
+,
+
+145 
+size_t
+ 
+__�n
+))
+
+147 i�(
+	`__bos
+ (
+__d�
+�!�(
+size_t
+) -1)
+
+149 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+150  
+	`__wc�ombs_chk
+ (
+__d�
+, 
+__�c
+, 
+__�n
+, 
+	`__bos
+ (__dst));
+
+151 i�(
+__�n
+ > 
+	`__bos
+ (
+__d�
+))
+
+152  
+	`__wc�ombs_chk_w�n
+ (
+__d�
+, 
+__�c
+, 
+__�n
+, 
+	`__bos
+ (__dst));
+
+154  
+	`__wc�ombs_��s
+ (
+__d�
+, 
+__�c
+, 
+__�n
+);
+
+155 
+	}
+}
+
+	@/usr/include/bits/string.h
+
+19 #i�de�
+_STRING_H
+
+
+24 
+	#_STRING_ARCH_u�lig�d
+ 1
+
+	)
+
+28 #i�!
+def�ed
+ 
+__x86_64__
+ && (def�ed 
+__i486__
+ || def�ed 
+__��ium__
+ \
+
+29 || 
+def�ed
+ 
+	g__��ium�o__
+ || def�ed 
+	g__��ium4__
+ \
+
+30 || 
+def�ed
+ 
+	g__noc�a__
+ || def�ed 
+	g__�om__
+ \
+
+31 || 
+def�ed
+ 
+	g__c�e2__
+ || def�ed 
+	g__c�ei7__
+ \
+
+32 || 
+def�ed
+ 
+	g__k6__
+ || def�ed 
+	g__geode__
+ \
+
+33 || 
+def�ed
+ 
+	g__k8__
+ || def�ed 
+	g__�hl�__
+ \
+
+34 || 
+def�ed
+ 
+	g__amd�m10__
+)
+
+38 #i�!
+def�ed
+ 
+__NO_STRING_INLINES
+ && def�ed 
+__USE_STRING_INLINES
+ \
+
+39 && 
+def�ed
+ 
+	g__GNUC__
+ && __GNUC__ >= 2
+
+41 #i�de�
+__STRING_INLINE
+
+
+42 #i�de�
+__ex��_�l�e
+
+
+43 
+	#__STRING_INLINE
+ 
+�l�e
+
+
+	)
+
+45 
+	#__STRING_INLINE
+ 
+__ex��_�l�e
+
+
+	)
+
+50 
+	#__STRING_SMALL_GET16
+(
+�c
+, 
+idx
+) \
+
+51 ((((cڡ *�(
+�c
+))[
+idx
+ + 1] << 8) \
+
+52 | ((cڡ *�(
+�c
+))[
+idx
+])
+
+	)
+
+53 
+	#__STRING_SMALL_GET32
+(
+�c
+, 
+idx
+) \
+
+54 (((((cڡ *�(
+�c
+))[
+idx
+ + 3] << 8 \
+
+55 | ((cڡ *�(
+�c
+))[
+idx
+ + 2]) << 8 \
+
+56 | ((cڡ *�(
+�c
+))[
+idx
+ + 1]) << 8 \
+
+57 | ((cڡ *�(
+�c
+))[
+idx
+])
+
+	)
+
+61 
+	#_HAVE_STRING_ARCH_mem�y
+ 1
+
+	)
+
+62 
+	#mem�y
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+63 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+n
+) \
+
+64 ? 
+	`__mem�y_c
+ ((
+de�
+), (
+�c
+), (
+n
+)) \
+
+65 : 
+	`__mem�y_g
+ ((
+de�
+), (
+�c
+), (
+n
+))))
+
+	)
+
+66 
+	#__mem�y_c
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+67 ((
+n
+) == 0 \
+
+68 ? (
+de�
+) \
+
+69 : (((
+n
+) % 4 == 0) \
+
+70 ? 
+	`__mem�y_by4
+ (
+de�
+, 
+�c
+, 
+n
+) \
+
+71 : (((
+n
+) % 2 == 0) \
+
+72 ? 
+	`__mem�y_by2
+ (
+de�
+, 
+�c
+, 
+n
+) \
+
+73 : 
+	`__mem�y_g
+ (
+de�
+, 
+�c
+, 
+n
+))))
+
+	)
+
+75 
+__STRING_INLINE
+ *
+__mem�y_by4
+ (*
+__de�
+, cڡ *
+__�c
+,
+
+76 
+size_t
+ 
+__n
+);
+
+78 
+__STRING_INLINE
+ *
+
+79 
+	$__mem�y_by4
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+)
+
+81 
+__d0
+, 
+__d1
+;
+
+82 *
+__tmp
+ = 
+__de�
+;
+
+83 
+__asm__
+ 
+__vީ�e__
+
+
+91 : "=&r" (
+__d0
+), "=&r" (
+__tmp
+), "=&r" (
+__�c
+), "=&r" (
+__d1
+)
+
+92 : "1" (
+__tmp
+), "2" (
+__�c
+), "3" (
+__n
+ / 4)
+
+94  
+__de�
+;
+
+95 
+	}
+}
+
+97 
+__STRING_INLINE
+ *
+__mem�y_by2
+ (*
+__de�
+, cڡ *
+__�c
+,
+
+98 
+size_t
+ 
+__n
+);
+
+100 
+__STRING_INLINE
+ *
+
+101 
+	$__mem�y_by2
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+)
+
+103 
+__d0
+, 
+__d1
+;
+
+104 *
+__tmp
+ = 
+__de�
+;
+
+105 
+__asm__
+ 
+__vީ�e__
+
+
+118 : "=&q" (
+__d0
+), "=&r" (
+__tmp
+), "=&r" (
+__�c
+), "=&r" (
+__d1
+)
+
+119 : "1" (
+__tmp
+), "2" (
+__�c
+), "3" (
+__n
+ / 2)
+
+121  
+__de�
+;
+
+122 
+	}
+}
+
+124 
+__STRING_INLINE
+ *
+__mem�y_g
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+);
+
+126 
+__STRING_INLINE
+ *
+
+127 
+	$__mem�y_g
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+)
+
+129 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+130 *
+__tmp
+ = 
+__de�
+;
+
+131 
+__asm__
+ 
+__vީ�e__
+
+
+142 : "=&c" (
+__d0
+), "=&D" (
+__d1
+), "=&S" (
+__d2
+),
+
+143 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__de�
+)
+
+144 : "0" (
+__n
+), "1" (
+__tmp
+), "2" (
+__�c
+),
+
+145 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__�c
+)
+
+147  
+__de�
+;
+
+148 
+	}
+}
+
+150 
+	#_HAVE_STRING_ARCH_memmove
+ 1
+
+	)
+
+151 #i�de�
+_FORCE_INLINES
+
+
+154 
+	#memmove
+(
+de�
+, 
+�c
+, 
+n
+�
+	`__memmove_g
+ (de�, src,�)
+
+	)
+
+156 
+__STRING_INLINE
+ *
+	$__memmove_g
+ (*, cڡ *, 
+size_t
+)
+
+157 
+	`__asm__
+ ("memmove");
+
+159 
+__STRING_INLINE
+ *
+
+160 
+	$__memmove_g
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+)
+
+162 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+163 *
+__tmp
+ = 
+__de�
+;
+
+164 i�(
+__de�
+ < 
+__�c
+)
+
+165 
+__asm__
+ 
+__vީ�e__
+
+
+168 : "=&c" (
+__d0
+), "=&S" (
+__d1
+), "=&D" (
+__d2
+),
+
+169 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__de�
+)
+
+170 : "0" (
+__n
+), "1" (
+__�c
+), "2" (
+__tmp
+),
+
+171 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__�c
+));
+
+173 
+__asm__
+ 
+__vީ�e__
+
+
+177 : "=&c" (
+__d0
+), "=&S" (
+__d1
+), "=&D" (
+__d2
+),
+
+178 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__de�
+)
+
+179 : "0" (
+__n
+), "1" (__�- 1 + (cڡ *�
+__�c
+),
+
+180 "2" (
+__n
+ - 1 + (*�
+__tmp
+),
+
+181 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__�c
+));
+
+182  
+__de�
+;
+
+183 
+	}
+}
+
+187 
+	#_HAVE_STRING_ARCH_memcmp
+ 1
+
+	)
+
+188 #i�de�
+_FORCE_INLINES
+
+
+189 #i�de�
+__PIC__
+
+
+191 
+__STRING_INLINE
+ 
+
+192 
+	$memcmp
+ (cڡ *
+__s1
+, cڡ *
+__s2
+, 
+size_t
+ 
+__n
+)
+
+194 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+195 
+__�s
+;
+
+196 
+__asm__
+ 
+__vީ�e__
+
+
+204 : "=&a" (
+__�s
+), "=&S" (
+__d0
+), "=&D" (
+__d1
+), "=&c" (
+__d2
+)
+
+205 : "0" (0), "1" (
+__s1
+), "2" (
+__s2
+), "3" (
+__n
+),
+
+206 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s1
+),
+
+207 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s2
+)
+
+209  
+__�s
+;
+
+210 
+	}
+}
+
+215 
+	#_HAVE_STRING_ARCH_mem�t
+ 1
+
+	)
+
+216 
+	#_USE_STRING_ARCH_mem�t
+ 1
+
+	)
+
+217 
+	#mem�t
+(
+s
+, 
+c
+, 
+n
+) \
+
+218 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+n
+) && (n) <= 16 \
+
+219 ? ((
+n
+) == 1 \
+
+220 ? 
+	`__mem�t_c1
+ ((
+s
+), (
+c
+)) \
+
+221 : 
+	`__mem�t_gc
+ ((
+s
+), (
+c
+), (
+n
+))) \
+
+222 : (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) \
+
+223 ? (
+	`__bu�t�_cڡ�t_p
+ (
+n
+) \
+
+224 ? 
+	`__mem�t_c�
+ ((
+s
+), (
+c
+), (
+n
+)) \
+
+225 : 
+	`mem�t
+ ((
+s
+), (
+c
+), (
+n
+))) \
+
+226 : (
+	`__bu�t�_cڡ�t_p
+ (
+n
+) \
+
+227 ? 
+	`__mem�t_g�
+ ((
+s
+), (
+c
+), (
+n
+)) \
+
+228 : 
+	`mem�t
+ ((
+s
+), (
+c
+), (
+n
+))))))
+
+	)
+
+230 
+	#__mem�t_c1
+(
+s
+, 
+c
+�({ *
+__s
+ = (s); \
+
+231 *((*�
+__s
+��(�(
+c
+); \
+
+232 
+__s
+; })
+
+	)
+
+234 
+	#__mem�t_gc
+(
+s
+, 
+c
+, 
+n
+) \
+
+235 ({ *
+__s
+ = (
+s
+); \
+
+237 
+__ui
+; \
+
+238 
+__usi
+; \
+
+239 
+__uc
+; \
+
+240 } *
+__u
+ = 
+__s
+; \
+
+241 
+__c
+ = ((�((�(
+c
+))) * 0x01010101; \
+
+247 i�((
+n
+) == 3 || (n) >= 5) \
+
+248 
+__asm__
+ 
+	`__vީ�e__
+ ("" : "�" (
+__c
+) : "0" (__c)); \
+
+251 
+n
+) \
+
+254 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+255 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+257 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+258 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+260 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+261 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+263 
+__u
+->
+__usi
+ = (�
+__c
+; \
+
+264 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2); \
+
+265 
+__u
+->
+__uc
+ = (�
+__c
+; \
+
+269 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+270 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+272 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+273 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+275 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+276 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+278 
+__u
+->
+__usi
+ = (�
+__c
+; \
+
+282 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+283 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+285 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+286 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+288 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+289 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+291 
+__u
+->
+__uc
+ = (�
+__c
+; \
+
+295 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+296 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+298 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+299 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+301 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+302 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+304 
+__u
+->
+__ui
+ = 
+__c
+; \
+
+309 
+__s
+; })
+
+	)
+
+311 
+	#__mem�t_c�
+(
+s
+, 
+c
+, 
+n
+) \
+
+312 (((
+n
+) % 4 == 0) \
+
+313 ? 
+	`__mem�t_c�_by4
+ (
+s
+, ((�((�(
+c
+))) * 0x01010101,\
+
+314 
+n
+) \
+
+315 : (((
+n
+) % 2 == 0) \
+
+316 ? 
+	`__mem�t_c�_by2
+ (
+s
+, \
+
+317 ((�((�(
+c
+))) * 0x01010101,\
+
+318 
+n
+) \
+
+319 : 
+	`mem�t
+ (
+s
+, 
+c
+, 
+n
+)))
+
+	)
+
+321 
+__STRING_INLINE
+ *
+__mem�t_c�_by4
+ (*
+__s
+, 
+__c
+,
+
+322 
+size_t
+ 
+__n
+);
+
+324 
+__STRING_INLINE
+ *
+
+325 
+	$__mem�t_c�_by4
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+327 *
+__tmp
+ = 
+__s
+;
+
+328 
+__d0
+;
+
+329 #ifde�
+__i686__
+
+
+330 
+__asm__
+ 
+__vީ�e__
+
+
+333 : "=&a" (
+__c
+), "=&D" (
+__tmp
+), "=&c" (
+__d0
+),
+
+334 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+335 : "0" ((�
+__c
+), "1" (
+__tmp
+), "2" (
+__n
+ / 4)
+
+338 
+__asm__
+ 
+__vީ�e__
+
+
+344 : "=&r" (
+__c
+), "=&r" (
+__tmp
+), "=&r" (
+__d0
+),
+
+345 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+346 : "0" ((�
+__c
+), "1" (
+__tmp
+), "2" (
+__n
+ / 4)
+
+349  
+__s
+;
+
+350 
+	}
+}
+
+352 
+__STRING_INLINE
+ *
+__mem�t_c�_by2
+ (*
+__s
+, 
+__c
+,
+
+353 
+size_t
+ 
+__n
+);
+
+355 
+__STRING_INLINE
+ *
+
+356 
+	$__mem�t_c�_by2
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+358 
+__d0
+, 
+__d1
+;
+
+359 *
+__tmp
+ = 
+__s
+;
+
+360 #ifde�
+__i686__
+
+
+361 
+__asm__
+ 
+__vީ�e__
+
+
+365 : "=&a" (
+__d0
+), "=&D" (
+__tmp
+), "=&c" (
+__d1
+),
+
+366 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+367 : "0" ((�
+__c
+), "1" (
+__tmp
+), "2" (
+__n
+ / 4)
+
+370 
+__asm__
+ 
+__vީ�e__
+
+
+376 : "=&q" (
+__d0
+), "=&r" (
+__tmp
+), "=&r" (
+__d1
+),
+
+377 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+378 : "0" ((�
+__c
+), "1" (
+__tmp
+), "2" (
+__n
+ / 4)
+
+381  
+__s
+;
+
+382 
+	}
+}
+
+384 
+	#__mem�t_g�
+(
+s
+, 
+c
+, 
+n
+) \
+
+385 (((
+n
+) % 4 == 0) \
+
+386 ? 
+	`__mem�t_g�_by4
+ (
+s
+, 
+c
+, 
+n
+) \
+
+387 : (((
+n
+) % 2 == 0) \
+
+388 ? 
+	`__mem�t_g�_by2
+ (
+s
+, 
+c
+, 
+n
+) \
+
+389 : 
+	`mem�t
+ (
+s
+, 
+c
+, 
+n
+)))
+
+	)
+
+391 
+__STRING_INLINE
+ *
+__mem�t_g�_by4
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+);
+
+393 
+__STRING_INLINE
+ *
+
+394 
+	$__mem�t_g�_by4
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+396 *
+__tmp
+ = 
+__s
+;
+
+397 
+__d0
+;
+
+398 
+__asm__
+ 
+__vީ�e__
+
+
+408 : "=&q" (
+__c
+), "=&r" (
+__tmp
+), "=&r" (
+__d0
+),
+
+409 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+410 : "0" ((�
+__c
+), "1" (
+__tmp
+), "2" (
+__n
+ / 4)
+
+412  
+__s
+;
+
+413 
+	}
+}
+
+415 
+__STRING_INLINE
+ *
+__mem�t_g�_by2
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+);
+
+417 
+__STRING_INLINE
+ *
+
+418 
+	$__mem�t_g�_by2
+ (*
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+420 
+__d0
+, 
+__d1
+;
+
+421 *
+__tmp
+ = 
+__s
+;
+
+422 
+__asm__
+ 
+__vީ�e__
+
+
+433 : "=&q" (
+__d0
+), "=&r" (
+__tmp
+), "=&r" (
+__d1
+),
+
+434 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+435 : "0" ((�
+__c
+), "1" (
+__tmp
+), "2" (
+__n
+ / 4)
+
+437  
+__s
+;
+
+438 
+	}
+}
+
+442 
+	#_HAVE_STRING_ARCH_memchr
+ 1
+
+	)
+
+443 #i�de�
+_FORCE_INLINES
+
+
+444 
+__STRING_INLINE
+ *
+
+445 
+	$memchr
+ (cڡ *
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+447 
+__d0
+;
+
+448 #ifde�
+__i686__
+
+
+449 
+__d1
+;
+
+451 *
+__�s
+;
+
+452 i�(
+__n
+ == 0)
+
+453  
+NULL
+;
+
+454 #ifde�
+__i686__
+
+
+455 
+__asm__
+ 
+__vީ�e__
+
+
+459 : "=D" (
+__�s
+), "=&c" (
+__d0
+), "=&r" (
+__d1
+)
+
+460 : "a" (
+__c
+), "0" (
+__s
+), "1" (
+__n
+), "2" (1),
+
+461 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+464 
+__asm__
+ 
+__vީ�e__
+
+
+470 : "=D" (
+__�s
+), "=&c" (
+__d0
+)
+
+471 : "a" (
+__c
+), "0" (
+__s
+), "1" (
+__n
+),
+
+472 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+475  
+__�s
+ - 1;
+
+476 
+	}
+}
+
+479 
+	#_HAVE_STRING_ARCH_memrchr
+ 1
+
+	)
+
+480 #i�de�
+_FORCE_INLINES
+
+
+481 
+__STRING_INLINE
+ *
+__memrchr
+ (cڡ *
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+);
+
+483 
+__STRING_INLINE
+ *
+
+484 
+	$__memrchr
+ (cڡ *
+__s
+, 
+__c
+, 
+size_t
+ 
+__n
+)
+
+486 
+__d0
+;
+
+487 #ifde�
+__i686__
+
+
+488 
+__d1
+;
+
+490 *
+__�s
+;
+
+491 i�(
+__n
+ == 0)
+
+492  
+NULL
+;
+
+493 #ifde�
+__i686__
+
+
+494 
+__asm__
+ 
+__vީ�e__
+
+
+500 : "=D" (
+__�s
+), "=&c" (
+__d0
+), "=&r" (
+__d1
+)
+
+501 : "a" (
+__c
+), "0" (
+__s
+ + 
+__n
+ - 1), "1" (__n), "2" (-1),
+
+502 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+505 
+__asm__
+ 
+__vީ�e__
+
+
+512 : "=D" (
+__�s
+), "=&c" (
+__d0
+)
+
+513 : "a" (
+__c
+), "0" (
+__s
+ + 
+__n
+ - 1), "1" (__n),
+
+514 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s
+)
+
+517  
+__�s
+;
+
+518 
+	}
+}
+
+519 #ifde�
+__USE_GNU
+
+
+520 
+	#memrchr
+(
+s
+, 
+c
+, 
+n
+�
+	`__memrchr
+ ((s), (c), (n))
+
+	)
+
+525 
+	#_HAVE_STRING_ARCH_�wmemchr
+ 1
+
+	)
+
+526 
+__STRING_INLINE
+ *
+__�wmemchr
+ (cڡ *
+__s
+, 
+__c
+);
+
+528 #i�de�
+_FORCE_INLINES
+
+
+529 
+__STRING_INLINE
+ *
+
+530 
+	$__�wmemchr
+ (cڡ *
+__s
+, 
+__c
+)
+
+532 
+__d0
+;
+
+533 *
+__�s
+;
+
+534 
+__asm__
+ 
+__vީ�e__
+
+
+537 : "=D" (
+__�s
+), "=&c" (
+__d0
+)
+
+538 : "a" (
+__c
+), "0" (
+__s
+), "1" (0xffffffff),
+
+539 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+541  
+__�s
+ - 1;
+
+542 
+	}
+}
+
+543 #ifde�
+__USE_GNU
+
+
+544 
+__STRING_INLINE
+ *
+
+545 
+	$�wmemchr
+ (cڡ *
+__s
+, 
+__c
+)
+
+547  
+	`__�wmemchr
+ (
+__s
+, 
+__c
+);
+
+548 
+	}
+}
+
+554 
+	#_HAVE_STRING_ARCH_���
+ 1
+
+	)
+
+555 
+	#���
+(
+�r
+) \
+
+556 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�r
+) \
+
+557 ? 
+	`__bu�t�_���
+ (
+�r
+) \
+
+558 : 
+	`__���_g
+ (
+�r
+)))
+
+	)
+
+559 
+__STRING_INLINE
+ 
+size_t
+ 
+__���_g
+ (cڡ *
+__�r
+);
+
+561 
+__STRING_INLINE
+ 
+size_t
+
+
+562 
+	$__���_g
+ (cڡ *
+__�r
+)
+
+564 
+__dummy
+;
+
+565 cڡ *
+__tmp
+ = 
+__�r
+;
+
+566 
+__asm__
+ 
+__vީ�e__
+
+
+572 : "�" (
+__tmp
+), "=&q" (
+__dummy
+)
+
+573 : "0" (
+__�r
+),
+
+574 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__�r
+)
+
+576  
+__tmp
+ - 
+__�r
+ - 1;
+
+577 
+	}
+}
+
+581 
+	#_HAVE_STRING_ARCH_�r�y
+ 1
+
+	)
+
+582 
+	#�r�y
+(
+de�
+, 
+�c
+) \
+
+583 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+) \
+
+584 ? ( ((
+�c
+)[0]�=�1 && 
+	`���
+ (src) + 1 <= 8 \
+
+585 ? 
+	`__�r�y_a_sm�l
+ ((
+de�
+), (
+�c
+), 
+	`���
+ (src) + 1) \
+
+586 : (*�
+	`mem�y
+ ((*�(
+de�
+), \
+
+587 (cڡ *�(
+�c
+), \
+
+588 
+	`���
+ (
+�c
+) + 1)) \
+
+589 : 
+	`__�r�y_g
+ ((
+de�
+), (
+�c
+))))
+
+	)
+
+591 
+	#__�r�y_a_sm�l
+(
+de�
+, 
+�c
+, 
+���
+) \
+
+592 (
+	`__ex�nsi�__
+ ({ *
+__de�
+ = (
+de�
+); \
+
+594 
+__ui
+; \
+
+595 
+__usi
+; \
+
+596 
+__uc
+; \
+
+597 
+__c
+; \
+
+598 } *
+__u
+ = (*�
+__de�
+; \
+
+599 
+���
+) \
+
+602 
+__u
+->
+__uc
+ = '\0'; \
+
+605 
+__u
+->
+__usi
+ = 
+	`__STRING_SMALL_GET16
+ (
+�c
+, 0); \
+
+608 
+__u
+->
+__usi
+ = 
+	`__STRING_SMALL_GET16
+ (
+�c
+, 0); \
+
+609 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2); \
+
+610 
+__u
+->
+__uc
+ = '\0'; \
+
+613 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+616 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+617 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+618 
+__u
+->
+__uc
+ = '\0'; \
+
+621 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+622 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+623 
+__u
+->
+__usi
+ = 
+	`__STRING_SMALL_GET16
+ (
+�c
+, 4); \
+
+626 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+627 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+628 
+__u
+->
+__usi
+ = 
+	`__STRING_SMALL_GET16
+ (
+�c
+, 4); \
+
+629 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2); \
+
+630 
+__u
+->
+__uc
+ = '\0'; \
+
+633 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+634 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+635 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 4); \
+
+638 (*�
+__de�
+; }))
+
+	)
+
+640 
+__STRING_INLINE
+ *
+__�r�y_g
+ (*
+__de�
+, cڡ *
+__�c
+);
+
+642 
+__STRING_INLINE
+ *
+
+643 
+	$__�r�y_g
+ (*
+__de�
+, cڡ *
+__�c
+)
+
+645 *
+__tmp
+ = 
+__de�
+;
+
+646 
+__dummy
+;
+
+647 
+__asm__
+ 
+__vީ�e__
+
+
+656 : "=&r" (
+__�c
+), "=&r" (
+__tmp
+), "=&q" (
+__dummy
+),
+
+657 "=m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__de�
+)
+
+658 : "0" (
+__�c
+), "1" (
+__tmp
+),
+
+659 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__�c
+)
+
+661  
+__de�
+;
+
+662 
+	}
+}
+
+665 #ifde�
+__USE_GNU
+
+
+666 
+	#_HAVE_STRING_ARCH_�p�y
+ 1
+
+	)
+
+668 
+	#__�p�y
+(
+de�
+, 
+�c
+) \
+
+669 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+) \
+
+670 ? (
+	`���
+ (
+�c
+) + 1 <= 8 \
+
+671 ? 
+	`__�p�y_a_sm�l
+ ((
+de�
+), (
+�c
+), 
+	`���
+ (src) + 1) \
+
+672 : 
+	`__�p�y_c
+ ((
+de�
+), (
+�c
+), 
+	`���
+ (src) + 1)) \
+
+673 : 
+	`__�p�y_g
+ ((
+de�
+), (
+�c
+))))
+
+	)
+
+674 
+	#__�p�y_c
+(
+de�
+, 
+�c
+, 
+���
+) \
+
+675 ((
+���
+) % 4 == 0 \
+
+676 ? 
+	`__memp�y_by4
+ (
+de�
+, 
+�c
+, 
+���
+) - 1 \
+
+677 : ((
+���
+) % 2 == 0 \
+
+678 ? 
+	`__memp�y_by2
+ (
+de�
+, 
+�c
+, 
+���
+) - 1 \
+
+679 : 
+	`__memp�y_byn
+ (
+de�
+, 
+�c
+, 
+���
+�- 1))
+
+	)
+
+682 
+	#�p�y
+(
+de�
+, 
+�c
+�
+	`__�p�y
+ ((de�), (�c))
+
+	)
+
+684 
+	#__�p�y_a_sm�l
+(
+de�
+, 
+�c
+, 
+���
+) \
+
+685 (
+	`__ex�nsi�__
+ ({ union { \
+
+686 
+__ui
+; \
+
+687 
+__usi
+; \
+
+688 
+__uc
+; \
+
+689 
+__c
+; \
+
+690 } *
+__u
+ = (*�(
+de�
+); \
+
+691 
+���
+) \
+
+694 
+__u
+->
+__uc
+ = '\0'; \
+
+697 
+__u
+->
+__usi
+ = 
+	`__STRING_SMALL_GET16
+ (
+�c
+, 0); \
+
+698 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 1); \
+
+701 
+__u
+->
+__usi
+ = 
+	`__STRING_SMALL_GET16
+ (
+�c
+, 0); \
+
+702 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2); \
+
+703 
+__u
+->
+__uc
+ = '\0'; \
+
+706 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+707 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 3); \
+
+710 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+711 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+712 
+__u
+->
+__uc
+ = '\0'; \
+
+715 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+716 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+717 
+__u
+->
+__usi
+ = 
+	`__STRING_SMALL_GET16
+ (
+�c
+, 4); \
+
+718 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 1); \
+
+721 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+722 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+723 
+__u
+->
+__usi
+ = 
+	`__STRING_SMALL_GET16
+ (
+�c
+, 4); \
+
+724 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2); \
+
+725 
+__u
+->
+__uc
+ = '\0'; \
+
+728 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 0); \
+
+729 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+730 
+__u
+->
+__ui
+ = 
+	`__STRING_SMALL_GET32
+ (
+�c
+, 4); \
+
+731 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 3); \
+
+734 (*�
+__u
+; }))
+
+	)
+
+736 
+__STRING_INLINE
+ *
+__memp�y_by4
+ (*
+__de�
+, cڡ *
+__�c
+,
+
+737 
+size_t
+ 
+__���
+);
+
+739 
+__STRING_INLINE
+ *
+
+740 
+	$__memp�y_by4
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__���
+)
+
+742 *
+__tmp
+ = 
+__de�
+;
+
+743 
+__d0
+, 
+__d1
+;
+
+744 
+__asm__
+ 
+__vީ�e__
+
+
+752 : "=&r" (
+__d0
+), "�" (
+__tmp
+), "=&r" (
+__�c
+), "=&r" (
+__d1
+)
+
+753 : "1" (
+__tmp
+), "2" (
+__�c
+), "3" (
+__���
+ / 4)
+
+755  
+__tmp
+;
+
+756 
+	}
+}
+
+758 
+__STRING_INLINE
+ *
+__memp�y_by2
+ (*
+__de�
+, cڡ *
+__�c
+,
+
+759 
+size_t
+ 
+__���
+);
+
+761 
+__STRING_INLINE
+ *
+
+762 
+	$__memp�y_by2
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__���
+)
+
+764 *
+__tmp
+ = 
+__de�
+;
+
+765 
+__d0
+, 
+__d1
+;
+
+766 
+__asm__
+ 
+__vީ�e__
+
+
+779 : "=&q" (
+__d0
+), "�" (
+__tmp
+), "=&r" (
+__�c
+), "=&r" (
+__d1
+),
+
+780 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__de�
+)
+
+781 : "1" (
+__tmp
+), "2" (
+__�c
+), "3" (
+__���
+ / 2),
+
+782 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__�c
+)
+
+784  
+__tmp
+ + 2;
+
+785 
+	}
+}
+
+787 
+__STRING_INLINE
+ *
+__memp�y_byn
+ (*
+__de�
+, cڡ *
+__�c
+,
+
+788 
+size_t
+ 
+__���
+);
+
+790 
+__STRING_INLINE
+ *
+
+791 
+	$__memp�y_byn
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__���
+)
+
+793 
+__d0
+, 
+__d1
+;
+
+794 *
+__tmp
+ = 
+__de�
+;
+
+795 
+__asm__
+ 
+__vީ�e__
+
+
+806 : "=D" (
+__tmp
+), "=&c" (
+__d0
+), "=&S" (
+__d1
+),
+
+807 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__de�
+)
+
+808 : "0" (
+__tmp
+), "1" (
+__���
+), "2" (
+__�c
+),
+
+809 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__�c
+)
+
+811  
+__tmp
+;
+
+812 
+	}
+}
+
+814 
+__STRING_INLINE
+ *
+__�p�y_g
+ (*
+__de�
+, cڡ *
+__�c
+);
+
+816 
+__STRING_INLINE
+ *
+
+817 
+	$__�p�y_g
+ (*
+__de�
+, cڡ *
+__�c
+)
+
+819 *
+__tmp
+ = 
+__de�
+;
+
+820 
+__dummy
+;
+
+821 
+__asm__
+ 
+__vީ�e__
+
+
+830 : "=&r" (
+__�c
+), "�" (
+__tmp
+), "=&q" (
+__dummy
+),
+
+831 "=m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__de�
+)
+
+832 : "0" (
+__�c
+), "1" (
+__tmp
+),
+
+833 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__�c
+)
+
+835  
+__tmp
+ - 1;
+
+836 
+	}
+}
+
+841 
+	#_HAVE_STRING_ARCH_���y
+ 1
+
+	)
+
+842 
+	#���y
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+843 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+) \
+
+844 ? ((
+	`���
+ (
+�c
+�+ 1 >�((
+size_t
+�(
+n
+)) \
+
+845 ? (*�
+	`mem�y
+ ((*�(
+de�
+), \
+
+846 (cڡ *�(
+�c
+), 
+n
+) \
+
+847 : 
+	`__���y_cg
+ ((
+de�
+), (
+�c
+), 
+	`���
+ (�c�+ 1, 
+n
+))) \
+
+848 : 
+	`__���y_gg
+ ((
+de�
+), (
+�c
+), 
+n
+)))
+
+	)
+
+849 
+	#__���y_cg
+(
+de�
+, 
+�c
+, 
+���
+, 
+n
+) \
+
+850 (((
+���
+) % 4 == 0) \
+
+851 ? 
+	`__���y_by4
+ (
+de�
+, 
+�c
+, 
+���
+, 
+n
+) \
+
+852 : (((
+���
+) % 2 == 0) \
+
+853 ? 
+	`__���y_by2
+ (
+de�
+, 
+�c
+, 
+���
+, 
+n
+) \
+
+854 : 
+	`__���y_byn
+ (
+de�
+, 
+�c
+, 
+���
+, 
+n
+)))
+
+	)
+
+856 
+__STRING_INLINE
+ *
+__���y_by4
+ (*
+__de�
+, cڡ 
+__�c
+[],
+
+857 
+size_t
+ 
+__���
+, size_�
+__n
+);
+
+859 
+__STRING_INLINE
+ *
+
+860 
+	$__���y_by4
+ (*
+__de�
+, cڡ 
+__�c
+[], 
+size_t
+ 
+__���
+, size_�
+__n
+)
+
+862 *
+__tmp
+ = 
+__de�
+;
+
+863 
+__dummy1
+, 
+__dummy2
+;
+
+864 
+__asm__
+ 
+__vީ�e__
+
+
+872 : "=&r" (
+__dummy1
+), "�" (
+__tmp
+), "=&r" (
+__�c
+), "=&r" (
+__dummy2
+),
+
+873 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__de�
+)
+
+874 : "1" (
+__tmp
+), "2" (
+__�c
+), "3" (
+__���
+ / 4),
+
+875 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__�c
+)
+
+877 (�
+	`mem�t
+ (
+__tmp
+, '\0', 
+__n
+ - 
+__���
+);
+
+878  
+__de�
+;
+
+879 
+	}
+}
+
+881 
+__STRING_INLINE
+ *
+__���y_by2
+ (*
+__de�
+, cڡ 
+__�c
+[],
+
+882 
+size_t
+ 
+__���
+, size_�
+__n
+);
+
+884 
+__STRING_INLINE
+ *
+
+885 
+	$__���y_by2
+ (*
+__de�
+, cڡ 
+__�c
+[], 
+size_t
+ 
+__���
+, size_�
+__n
+)
+
+887 *
+__tmp
+ = 
+__de�
+;
+
+888 
+__dummy1
+, 
+__dummy2
+;
+
+889 
+__asm__
+ 
+__vީ�e__
+
+
+902 : "=&q" (
+__dummy1
+), "�" (
+__tmp
+), "=&r" (
+__�c
+), "=&r" (
+__dummy2
+),
+
+903 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__de�
+)
+
+904 : "1" (
+__tmp
+), "2" (
+__�c
+), "3" (
+__���
+ / 2),
+
+905 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__�c
+)
+
+907 (�
+	`mem�t
+ (
+__tmp
+ + 2, '\0', 
+__n
+ - 
+__���
+);
+
+908  
+__de�
+;
+
+909 
+	}
+}
+
+911 
+__STRING_INLINE
+ *
+__���y_byn
+ (*
+__de�
+, cڡ 
+__�c
+[],
+
+912 
+size_t
+ 
+__���
+, size_�
+__n
+);
+
+914 
+__STRING_INLINE
+ *
+
+915 
+	$__���y_byn
+ (*
+__de�
+, cڡ 
+__�c
+[], 
+size_t
+ 
+__���
+, size_�
+__n
+)
+
+917 
+__d0
+, 
+__d1
+;
+
+918 *
+__tmp
+ = 
+__de�
+;
+
+919 
+__asm__
+ 
+__vީ�e__
+
+
+930 : "=D" (
+__tmp
+), "=&c" (
+__d0
+), "=&S" (
+__d1
+),
+
+931 "=m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__de�
+)
+
+932 : "1" (
+__���
+), "0" (
+__tmp
+),"2" (
+__�c
+),
+
+933 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__�c
+)
+
+935 (�
+	`mem�t
+ (
+__tmp
+, '\0', 
+__n
+ - 
+__���
+);
+
+936  
+__de�
+;
+
+937 
+	}
+}
+
+939 
+__STRING_INLINE
+ *
+__���y_gg
+ (*
+__de�
+, cڡ *
+__�c
+,
+
+940 
+size_t
+ 
+__n
+);
+
+942 
+__STRING_INLINE
+ *
+
+943 
+	$__���y_gg
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+)
+
+945 *
+__tmp
+ = 
+__de�
+;
+
+946 
+__dummy
+;
+
+947 i�(
+__n
+ > 0)
+
+948 
+__asm__
+ 
+__vީ�e__
+
+
+964 : "=&r" (
+__�c
+), "=&r" (
+__tmp
+), "=&q" (
+__dummy
+), "=&r" (
+__n
+)
+
+965 : "0" (
+__�c
+), "1" (
+__tmp
+), "3" (
+__n
+)
+
+968  
+__de�
+;
+
+969 
+	}
+}
+
+973 
+	#_HAVE_STRING_ARCH_�r�t
+ 1
+
+	)
+
+974 
+	#�r�t
+(
+de�
+, 
+�c
+) \
+
+975 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+) \
+
+976 ? 
+	`__�r�t_c
+ ((
+de�
+), (
+�c
+), 
+	`���
+ (src) + 1) \
+
+977 : 
+	`__�r�t_g
+ ((
+de�
+), (
+�c
+))))
+
+	)
+
+979 
+__STRING_INLINE
+ *
+__�r�t_c
+ (*
+__de�
+, cڡ 
+__�c
+[],
+
+980 
+size_t
+ 
+__���
+);
+
+982 
+__STRING_INLINE
+ *
+
+983 
+	$__�r�t_c
+ (*
+__de�
+, cڡ 
+__�c
+[], 
+size_t
+ 
+__���
+)
+
+985 #ifde�
+__i686__
+
+
+986 
+__d0
+;
+
+987 *
+__tmp
+;
+
+988 
+__asm__
+ 
+__vީ�e__
+
+
+990 : "=D" (
+__tmp
+), "=&c" (
+__d0
+),
+
+991 "=m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__de�
+)
+
+992 : "0" (
+__de�
+), "1" (0xffffffff), "a" (0),
+
+993 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__�c
+)
+
+995 --
+__tmp
+;
+
+997 *
+__tmp
+ = 
+__de�
+ - 1;
+
+998 
+__asm__
+ 
+__vީ�e__
+
+
+1003 : "�" (
+__tmp
+),
+
+1004 "=m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__de�
+)
+
+1005 : "0" (
+__tmp
+),
+
+1006 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__���
+]; } *)
+__�c
+)
+
+1009 (�
+	`mem�y
+ (
+__tmp
+, 
+__�c
+, 
+__���
+);
+
+1010  
+__de�
+;
+
+1011 
+	}
+}
+
+1013 
+__STRING_INLINE
+ *
+__�r�t_g
+ (*
+__de�
+, cڡ *
+__�c
+);
+
+1015 
+__STRING_INLINE
+ *
+
+1016 
+	$__�r�t_g
+ (*
+__de�
+, cڡ *
+__�c
+)
+
+1018 *
+__tmp
+ = 
+__de�
+ - 1;
+
+1019 
+__dummy
+;
+
+1020 
+__asm__
+ 
+__vީ�e__
+
+
+1032 : "=&q" (
+__dummy
+), "=&r" (
+__tmp
+), "=&r" (
+__�c
+),
+
+1033 "=m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__de�
+)
+
+1034 : "1" (
+__tmp
+), "2" (
+__�c
+),
+
+1035 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__�c
+)
+
+1037  
+__de�
+;
+
+1038 
+	}
+}
+
+1042 
+	#_HAVE_STRING_ARCH_���t
+ 1
+
+	)
+
+1043 
+	#���t
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+1044 (
+	`__ex�nsi�__
+ ({ *
+__de�
+ = (
+de�
+); \
+
+1045 
+	`__bu�t�_cڡ�t_p
+ (
+�c
+�&& __bu�t�_cڡ�t_�(
+n
+) \
+
+1046 ? (
+	`���
+ (
+�c
+�< ((
+size_t
+�(
+n
+)) \
+
+1047 ? 
+	`�r�t
+ (
+__de�
+, (
+�c
+)) \
+
+1048 : (*(*)
+	`__memp�y
+ (
+	`�rchr
+ (
+__de�
+, '\0'), \
+
+1049 (cڡ *�(
+�c
+), \
+
+1050 (
+n
+)��0, 
+__de�
+)) \
+
+1051 : 
+	`__���t_g
+ (
+__de�
+, (
+�c
+), (
+n
+)); }))
+
+	)
+
+1053 
+__STRING_INLINE
+ *
+__���t_g
+ (*
+__de�
+, cڡ 
+__�c
+[],
+
+1054 
+size_t
+ 
+__n
+);
+
+1056 
+__STRING_INLINE
+ *
+
+1057 
+	$__���t_g
+ (*
+__de�
+, cڡ 
+__�c
+[], 
+size_t
+ 
+__n
+)
+
+1059 *
+__tmp
+ = 
+__de�
+;
+
+1060 
+__dummy
+;
+
+1061 #ifde�
+__i686__
+
+
+1062 
+__asm__
+ 
+__vީ�e__
+
+
+1076 : "=&a" (
+__dummy
+), "=&D" (
+__tmp
+), "=&S" (
+__�c
+), "=&c" (
+__n
+)
+
+1077 : "g" (
+__n
+), "0" (0), "1" (
+__tmp
+), "2" (
+__�c
+), "3" (0xffffffff)
+
+1080 --
+__tmp
+;
+
+1081 
+__asm__
+ 
+__vީ�e__
+
+
+1098 : "=&q" (
+__dummy
+), "=&r" (
+__tmp
+), "=&r" (
+__�c
+), "=&r" (
+__n
+)
+
+1099 : "1" (
+__tmp
+), "2" (
+__�c
+), "3" (
+__n
+)
+
+1102  
+__de�
+;
+
+1103 
+	}
+}
+
+1107 
+	#_HAVE_STRING_ARCH_�rcmp
+ 1
+
+	)
+
+1108 
+	#�rcmp
+(
+s1
+, 
+s2
+) \
+
+1109 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+�&& __bu�t�_cڡ�t_�(
+s2
+) \
+
+1110 && ( ((
+s1
+)[0]�!�1 || 
+	`���
+ (s1) >= 4) \
+
+1111 && ( ((
+s2
+)[0]�!�1 || 
+	`���
+ (s2) >= 4) \
+
+1112 ? 
+	`memcmp
+ ((cڡ *�(
+s1
+), (cڡ *�(
+s2
+), \
+
+1113 (
+	`���
+ (
+s1
+�< s���(
+s2
+) \
+
+1114 ? 
+	`���
+ (
+s1
+�: s���(
+s2
+)) + 1) \
+
+1115 : (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+) &&  ((s1)[0]) == 1 \
+
+1116 &&  ((
+s2
+)[0]�=�1 && 
+	`���
+ (
+s1
+) < 4 \
+
+1117 ? (
+	`__bu�t�_cڡ�t_p
+ (
+s2
+) &&  ((s2)[0]) == 1 \
+
+1118 ? 
+	`__�rcmp_cc
+ ((cڡ *�(
+s1
+), \
+
+1119 (cڡ *�(
+s2
+), \
+
+1120 
+	`���
+ (
+s1
+)) \
+
+1121 : 
+	`__�rcmp_cg
+ ((cڡ *�(
+s1
+), \
+
+1122 (cڡ *�(
+s2
+), \
+
+1123 
+	`���
+ (
+s1
+))) \
+
+1124 : (
+	`__bu�t�_cڡ�t_p
+ (
+s2
+�&&  ((
+s1
+)[0]) == 1 \
+
+1125 &&  ((
+s2
+)[0]�=�1 && 
+	`���
+ (s2) < 4 \
+
+1126 ? (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+) \
+
+1127 ? 
+	`__�rcmp_cc
+ ((cڡ *�(
+s1
+), \
+
+1128 (cڡ *�(
+s2
+), \
+
+1129 
+	`���
+ (
+s2
+)) \
+
+1130 : 
+	`__�rcmp_gc
+ ((cڡ *�(
+s1
+), \
+
+1131 (cڡ *�(
+s2
+), \
+
+1132 
+	`���
+ (
+s2
+))) \
+
+1133 : 
+	`__�rcmp_gg
+ ((
+s1
+), (
+s2
+))))))
+
+	)
+
+1135 
+	#__�rcmp_cc
+(
+s1
+, 
+s2
+, 
+l
+) \
+
+1136 (
+	`__ex�nsi�__
+ ({ 
+__�su�
+ = (
+s1
+)[0] - (
+s2
+)[0]; \
+
+1137 i�(
+l
+ > 0 && 
+__�su�
+ == 0) \
+
+1139 
+__�su�
+ = (
+s1
+)[1] - (
+s2
+)[1]; \
+
+1140 i�(
+l
+ > 1 && 
+__�su�
+ == 0) \
+
+1142 
+__�su�
+ = (
+s1
+)[2] - (
+s2
+)[2]; \
+
+1143 i�(
+l
+ > 2 && 
+__�su�
+ == 0) \
+
+1144 
+__�su�
+ = (
+s1
+)[3] - (
+s2
+)[3]; \
+
+1147 
+__�su�
+; }))
+
+	)
+
+1149 
+	#__�rcmp_cg
+(
+s1
+, 
+s2
+, 
+l1
+) \
+
+1150 (
+	`__ex�nsi�__
+ ({ cڡ *
+__s2
+ = (
+s2
+); \
+
+1151 
+__�su�
+ = (
+s1
+)[0] - 
+__s2
+[0]; \
+
+1152 i�(
+l1
+ > 0 && 
+__�su�
+ == 0) \
+
+1154 
+__�su�
+ = (
+s1
+)[1] - 
+__s2
+[1]; \
+
+1155 i�(
+l1
+ > 1 && 
+__�su�
+ == 0) \
+
+1157 
+__�su�
+ = (
+s1
+)[2] - 
+__s2
+[2]; \
+
+1158 i�(
+l1
+ > 2 && 
+__�su�
+ == 0) \
+
+1159 
+__�su�
+ = (
+s1
+)[3] - 
+__s2
+[3]; \
+
+1162 
+__�su�
+; }))
+
+	)
+
+1164 
+	#__�rcmp_gc
+(
+s1
+, 
+s2
+, 
+l2
+) \
+
+1165 (
+	`__ex�nsi�__
+ ({ cڡ *
+__s1
+ = (
+s1
+); \
+
+1166 
+__�su�
+ = 
+__s1
+[0] - (
+s2
+)[0]; \
+
+1167 i�(
+l2
+ > 0 && 
+__�su�
+ == 0) \
+
+1169 
+__�su�
+ = 
+__s1
+[1] - (
+s2
+)[1]; \
+
+1170 i�(
+l2
+ > 1 && 
+__�su�
+ == 0) \
+
+1172 
+__�su�
+ = 
+__s1
+[2] - (
+s2
+)[2]; \
+
+1173 i�(
+l2
+ > 2 && 
+__�su�
+ == 0) \
+
+1174 
+__�su�
+ = 
+__s1
+[3] - (
+s2
+)[3]; \
+
+1177 
+__�su�
+; }))
+
+	)
+
+1179 
+__STRING_INLINE
+ 
+__�rcmp_gg
+ (cڡ *
+__s1
+, cڡ *
+__s2
+);
+
+1181 
+__STRING_INLINE
+ 
+
+1182 
+	$__�rcmp_gg
+ (cڡ *
+__s1
+, cڡ *
+__s2
+)
+
+1184 
+__�s
+;
+
+1185 
+__asm__
+ 
+__vީ�e__
+
+
+1201 : "=q" (
+__�s
+), "=&r" (
+__s1
+), "=&r" (
+__s2
+)
+
+1202 : "1" (
+__s1
+), "2" (
+__s2
+),
+
+1203 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s1
+),
+
+1204 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s2
+)
+
+1206  
+__�s
+;
+
+1207 
+	}
+}
+
+1211 
+	#_HAVE_STRING_ARCH_��cmp
+ 1
+
+	)
+
+1212 
+	#��cmp
+(
+s1
+, 
+s2
+, 
+n
+) \
+
+1213 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+�&& 
+	`���
+ (s1�< ((
+size_t
+�(
+n
+)) \
+
+1214 ? 
+	`�rcmp
+ ((
+s1
+), (
+s2
+)) \
+
+1215 : (
+	`__bu�t�_cڡ�t_p
+ (
+s2
+�&& 
+	`���
+ (s2�< ((
+size_t
+�(
+n
+))\
+
+1216 ? 
+	`�rcmp
+ ((
+s1
+), (
+s2
+)) \
+
+1217 : 
+	`__��cmp_g
+ ((
+s1
+), (
+s2
+), (
+n
+)))))
+
+	)
+
+1219 
+__STRING_INLINE
+ 
+__��cmp_g
+ (cڡ *
+__s1
+, cڡ *
+__s2
+,
+
+1220 
+size_t
+ 
+__n
+);
+
+1222 
+__STRING_INLINE
+ 
+
+1223 
+	$__��cmp_g
+ (cڡ *
+__s1
+, cڡ *
+__s2
+, 
+size_t
+ 
+__n
+)
+
+1225 
+__�s
+;
+
+1226 
+__asm__
+ 
+__vީ�e__
+
+
+1245 : "=q" (
+__�s
+), "=&r" (
+__s1
+), "=&r" (
+__s2
+), "=&r" (
+__n
+)
+
+1246 : "1" (
+__s1
+), "2" (
+__s2
+), "3" (
+__n
+),
+
+1247 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s1
+),
+
+1248 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__n
+]; } *)
+__s2
+)
+
+1250  
+__�s
+;
+
+1251 
+	}
+}
+
+1255 
+	#_HAVE_STRING_ARCH_�rchr
+ 1
+
+	)
+
+1256 
+	#_USE_STRING_ARCH_�rchr
+ 1
+
+	)
+
+1257 
+	#�rchr
+(
+s
+, 
+c
+) \
+
+1258 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) \
+
+1259 ? ((
+c
+) == '\0' \
+
+1260 ? (*�
+	`__�wmemchr
+ ((
+s
+), (
+c
+)) \
+
+1261 : 
+	`__�rchr_c
+ ((
+s
+), ((
+c
+) & 0xff) << 8)) \
+
+1262 : 
+	`__�rchr_g
+ ((
+s
+), (
+c
+))))
+
+	)
+
+1264 
+__STRING_INLINE
+ *
+__�rchr_c
+ (cڡ *
+__s
+, 
+__c
+);
+
+1266 
+__STRING_INLINE
+ *
+
+1267 
+	$__�rchr_c
+ (cڡ *
+__s
+, 
+__c
+)
+
+1269 
+__d0
+;
+
+1270 *
+__�s
+;
+
+1271 
+__asm__
+ 
+__vީ�e__
+
+
+1281 : "�" (
+__�s
+), "=&a" (
+__d0
+)
+
+1282 : "0" (
+__s
+), "1" (
+__c
+),
+
+1283 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1285  
+__�s
+;
+
+1286 
+	}
+}
+
+1288 
+__STRING_INLINE
+ *
+__�rchr_g
+ (cڡ *
+__s
+, 
+__c
+);
+
+1290 
+__STRING_INLINE
+ *
+
+1291 
+	$__�rchr_g
+ (cڡ *
+__s
+, 
+__c
+)
+
+1293 
+__d0
+;
+
+1294 *
+__�s
+;
+
+1295 
+__asm__
+ 
+__vީ�e__
+
+
+1306 : "�" (
+__�s
+), "=&a" (
+__d0
+)
+
+1307 : "0" (
+__s
+), "1" (
+__c
+),
+
+1308 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1310  
+__�s
+;
+
+1311 
+	}
+}
+
+1315 
+	#_HAVE_STRING_ARCH_�rch�ul
+ 1
+
+	)
+
+1316 
+	#__�rch�ul
+(
+s
+, 
+c
+) \
+
+1317 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) \
+
+1318 ? ((
+c
+) == '\0' \
+
+1319 ? (*�
+	`__�wmemchr
+ ((
+s
+), 
+c
+) \
+
+1320 : 
+	`__�rch�ul_c
+ ((
+s
+), ((
+c
+) & 0xff) << 8)) \
+
+1321 : 
+	`__�rch�ul_g
+ ((
+s
+), 
+c
+)))
+
+	)
+
+1323 
+__STRING_INLINE
+ *
+__�rch�ul_c
+ (cڡ *
+__s
+, 
+__c
+);
+
+1325 
+__STRING_INLINE
+ *
+
+1326 
+	$__�rch�ul_c
+ (cڡ *
+__s
+, 
+__c
+)
+
+1328 
+__d0
+;
+
+1329 *
+__�s
+;
+
+1330 
+__asm__
+ 
+__vީ�e__
+
+
+1340 : "�" (
+__�s
+), "=&a" (
+__d0
+)
+
+1341 : "0" (
+__s
+), "1" (
+__c
+),
+
+1342 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1344  
+__�s
+;
+
+1345 
+	}
+}
+
+1347 
+__STRING_INLINE
+ *
+__�rch�ul_g
+ (cڡ *
+__s
+, 
+__c
+);
+
+1349 
+__STRING_INLINE
+ *
+
+1350 
+	$__�rch�ul_g
+ (cڡ *
+__s
+, 
+__c
+)
+
+1352 
+__d0
+;
+
+1353 *
+__�s
+;
+
+1354 
+__asm__
+ 
+__vީ�e__
+
+
+1365 : "�" (
+__�s
+), "=&a" (
+__d0
+)
+
+1366 : "0" (
+__s
+), "1" (
+__c
+),
+
+1367 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1369  
+__�s
+;
+
+1370 
+	}
+}
+
+1371 #ifde�
+__USE_GNU
+
+
+1372 
+	#�rch�ul
+(
+s
+, 
+c
+�
+	`__�rch�ul
+ ((s), (c))
+
+	)
+
+1376 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+1378 
+	#_HAVE_STRING_ARCH_�dex
+ 1
+
+	)
+
+1379 
+	#�dex
+(
+s
+, 
+c
+) \
+
+1380 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) \
+
+1381 ? 
+	`__�rchr_c
+ ((
+s
+), ((
+c
+) & 0xff) << 8) \
+
+1382 : 
+	`__�rchr_g
+ ((
+s
+), (
+c
+))))
+
+	)
+
+1387 
+	#_HAVE_STRING_ARCH_��chr
+ 1
+
+	)
+
+1388 
+	#��chr
+(
+s
+, 
+c
+) \
+
+1389 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) \
+
+1390 ? 
+	`__��chr_c
+ ((
+s
+), ((
+c
+) & 0xff) << 8) \
+
+1391 : 
+	`__��chr_g
+ ((
+s
+), (
+c
+))))
+
+	)
+
+1393 #ifde�
+__i686__
+
+
+1394 
+__STRING_INLINE
+ *
+__��chr_c
+ (cڡ *
+__s
+, 
+__c
+);
+
+1396 
+__STRING_INLINE
+ *
+
+1397 
+	$__��chr_c
+ (cڡ *
+__s
+, 
+__c
+)
+
+1399 
+__d0
+, 
+__d1
+;
+
+1400 *
+__�s
+;
+
+1401 
+__asm__
+ 
+__vީ�e__
+
+
+1409 : "=d" (
+__�s
+), "=&S" (
+__d0
+), "=&a" (
+__d1
+)
+
+1410 : "0" (1), "1" (
+__s
+), "2" (
+__c
+),
+
+1411 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1413  
+__�s
+ - 1;
+
+1414 
+	}
+}
+
+1416 
+__STRING_INLINE
+ *
+__��chr_g
+ (cڡ *
+__s
+, 
+__c
+);
+
+1418 
+__STRING_INLINE
+ *
+
+1419 
+	$__��chr_g
+ (cڡ *
+__s
+, 
+__c
+)
+
+1421 
+__d0
+, 
+__d1
+;
+
+1422 *
+__�s
+;
+
+1423 
+__asm__
+ 
+__vީ�e__
+
+
+1432 : "=d" (
+__�s
+), "=&S" (
+__d0
+), "=&a" (
+__d1
+)
+
+1433 : "0" (1), "1" (
+__s
+), "2" (
+__c
+),
+
+1434 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1436  
+__�s
+ - 1;
+
+1437 
+	}
+}
+
+1439 
+__STRING_INLINE
+ *
+__��chr_c
+ (cڡ *
+__s
+, 
+__c
+);
+
+1441 
+__STRING_INLINE
+ *
+
+1442 
+	$__��chr_c
+ (cڡ *
+__s
+, 
+__c
+)
+
+1444 
+__d0
+, 
+__d1
+;
+
+1445 *
+__�s
+;
+
+1446 
+__asm__
+ 
+__vީ�e__
+
+
+1456 : "=d" (
+__�s
+), "=&S" (
+__d0
+), "=&a" (
+__d1
+)
+
+1457 : "0" (0), "1" (
+__s
+), "2" (
+__c
+),
+
+1458 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1460  
+__�s
+;
+
+1461 
+	}
+}
+
+1463 
+__STRING_INLINE
+ *
+__��chr_g
+ (cڡ *
+__s
+, 
+__c
+);
+
+1465 
+__STRING_INLINE
+ *
+
+1466 
+	$__��chr_g
+ (cڡ *
+__s
+, 
+__c
+)
+
+1468 
+__d0
+, 
+__d1
+;
+
+1469 *
+__�s
+;
+
+1470 
+__asm__
+ 
+__vީ�e__
+
+
+1481 : "�" (
+__�s
+), "=&S" (
+__d0
+), "=&a" (
+__d1
+)
+
+1482 : "0" (0), "1" (
+__s
+), "2" (
+__c
+),
+
+1483 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1485  
+__�s
+;
+
+1486 
+	}
+}
+
+1490 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+1492 
+	#_HAVE_STRING_ARCH_r�dex
+ 1
+
+	)
+
+1493 
+	#r�dex
+(
+s
+, 
+c
+) \
+
+1494 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) \
+
+1495 ? 
+	`__��chr_c
+ ((
+s
+), ((
+c
+) & 0xff) << 8) \
+
+1496 : 
+	`__��chr_g
+ ((
+s
+), (
+c
+))))
+
+	)
+
+1502 
+	#_HAVE_STRING_ARCH_�rc�n
+ 1
+
+	)
+
+1503 
+	#�rc�n
+(
+s
+, 
+�je�
+) \
+
+1504 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�je�
+) &&  ((reject)[0]) == 1 \
+
+1505 ? ((
+�je�
+)[0] == '\0' \
+
+1506 ? 
+	`���
+ (
+s
+) \
+
+1507 : ((
+�je�
+)[1] == '\0' \
+
+1508 ? 
+	`__�rc�n_c1
+ ((
+s
+), (((
+�je�
+)[0] << 8) & 0xff00)) \
+
+1509 : 
+	`__�rc�n_cg
+ ((
+s
+), (
+�je�
+), 
+	`���
+ (reject)))) \
+
+1510 : 
+	`__�rc�n_g
+ ((
+s
+), (
+�je�
+))))
+
+	)
+
+1512 
+__STRING_INLINE
+ 
+size_t
+ 
+__�rc�n_c1
+ (cڡ *
+__s
+, 
+__�je�
+);
+
+1514 #i�de�
+_FORCE_INLINES
+
+
+1515 
+__STRING_INLINE
+ 
+size_t
+
+
+1516 
+	$__�rc�n_c1
+ (cڡ *
+__s
+, 
+__�je�
+)
+
+1518 
+__d0
+;
+
+1519 *
+__�s
+;
+
+1520 
+__asm__
+ 
+__vީ�e__
+
+
+1529 : "�" (
+__�s
+), "=&a" (
+__d0
+)
+
+1530 : "0" (
+__s
+), "1" (
+__�je�
+),
+
+1531 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1533  (
+__�s
+ - 1�- 
+__s
+;
+
+1534 
+	}
+}
+
+1537 
+__STRING_INLINE
+ 
+size_t
+ 
+__�rc�n_cg
+ (cڡ *
+__s
+, cڡ 
+__�je�
+[],
+
+1538 
+size_t
+ 
+__�je�_�n
+);
+
+1540 
+__STRING_INLINE
+ 
+size_t
+
+
+1541 
+	$__�rc�n_cg
+ (cڡ *
+__s
+, cڡ 
+__�je�
+[], 
+size_t
+ 
+__�je�_�n
+)
+
+1543 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+1544 cڡ *
+__�s
+;
+
+1545 
+__asm__
+ 
+__vީ�e__
+
+
+1556 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+1557 : "0" (
+__s
+), "d" (
+__�je�
+), "g" (
+__�je�_�n
+)
+
+1559  (
+__�s
+ - 1�- 
+__s
+;
+
+1560 
+	}
+}
+
+1562 
+__STRING_INLINE
+ 
+size_t
+ 
+__�rc�n_g
+ (cڡ *
+__s
+, cڡ *
+__�je�
+);
+
+1563 #ifde�
+__PIC__
+
+
+1565 
+__STRING_INLINE
+ 
+size_t
+
+
+1566 
+	$__�rc�n_g
+ (cڡ *
+__s
+, cڡ *
+__�je�
+)
+
+1568 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+1569 cڡ *
+__�s
+;
+
+1570 
+__asm__
+ 
+__vީ�e__
+
+
+1587 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+1588 : "r" (
+__�je�
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff)
+
+1590  (
+__�s
+ - 1�- 
+__s
+;
+
+1591 
+	}
+}
+
+1593 
+__STRING_INLINE
+ 
+size_t
+
+
+1594 
+	$__�rc�n_g
+ (cڡ *
+__s
+, cڡ *
+__�je�
+)
+
+1596 
+__d0
+, 
+__d1
+, 
+__d2
+, 
+__d3
+;
+
+1597 cڡ *
+__�s
+;
+
+1598 
+__asm__
+ 
+__vީ�e__
+
+
+1612 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+), "=&d" (
+__d3
+)
+
+1613 : "0" (
+__s
+), "1" (0), "2" (0xffffffff), "3" (
+__�je�
+), "b" (__reject)
+
+1616  (
+__�s
+ - 1�- 
+__s
+;
+
+1617 
+	}
+}
+
+1623 
+	#_HAVE_STRING_ARCH_�r�n
+ 1
+
+	)
+
+1624 
+	#�r�n
+(
+s
+, 
+ac��
+) \
+
+1625 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+ac��
+) &&  ((accept)[0]) == 1 \
+
+1626 ? ((
+ac��
+)[0] == '\0' \
+
+1627 ? ((�(
+s
+), 0) \
+
+1628 : ((
+ac��
+)[1] == '\0' \
+
+1629 ? 
+	`__�r�n_c1
+ ((
+s
+), (((
+ac��
+)[0] << 8 ) & 0xff00)) \
+
+1630 : 
+	`__�r�n_cg
+ ((
+s
+), (
+ac��
+), 
+	`���
+ (accept)))) \
+
+1631 : 
+	`__�r�n_g
+ ((
+s
+), (
+ac��
+))))
+
+	)
+
+1633 #i�de�
+_FORCE_INLINES
+
+
+1634 
+__STRING_INLINE
+ 
+size_t
+ 
+__�r�n_c1
+ (cڡ *
+__s
+, 
+__ac��
+);
+
+1636 
+__STRING_INLINE
+ 
+size_t
+
+
+1637 
+	$__�r�n_c1
+ (cڡ *
+__s
+, 
+__ac��
+)
+
+1639 
+__d0
+;
+
+1640 *
+__�s
+;
+
+1642 
+__asm__
+ 
+__vީ�e__
+
+
+1648 : "�" (
+__�s
+), "=&q" (
+__d0
+)
+
+1649 : "0" (
+__s
+), "1" (
+__ac��
+),
+
+1650 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+)
+
+1652  (
+__�s
+ - 1�- 
+__s
+;
+
+1653 
+	}
+}
+
+1656 
+__STRING_INLINE
+ 
+size_t
+ 
+__�r�n_cg
+ (cڡ *
+__s
+, cڡ 
+__ac��
+[],
+
+1657 
+size_t
+ 
+__ac��_�n
+);
+
+1659 
+__STRING_INLINE
+ 
+size_t
+
+
+1660 
+	$__�r�n_cg
+ (cڡ *
+__s
+, cڡ 
+__ac��
+[], 
+size_t
+ 
+__ac��_�n
+)
+
+1662 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+1663 cڡ *
+__�s
+;
+
+1664 
+__asm__
+ 
+__vީ�e__
+
+
+1675 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+1676 : "0" (
+__s
+), "g" (
+__ac��
+), "g" (
+__ac��_�n
+),
+
+1679 "m" ( *(�ru� { 
+__x
+[0xfffffff]; } *)
+__s
+),
+
+1680 "m" ( *(�ru� { 
+__ex�nsi�__
+ 
+__x
+[
+__ac��_�n
+]; } *)
+__ac��
+)
+
+1682  (
+__�s
+ - 1�- 
+__s
+;
+
+1683 
+	}
+}
+
+1685 
+__STRING_INLINE
+ 
+size_t
+ 
+__�r�n_g
+ (cڡ *
+__s
+, cڡ *
+__ac��
+);
+
+1686 #ifde�
+__PIC__
+
+
+1688 
+__STRING_INLINE
+ 
+size_t
+
+
+1689 
+	$__�r�n_g
+ (cڡ *
+__s
+, cڡ *
+__ac��
+)
+
+1691 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+1692 cڡ *
+__�s
+;
+
+1693 
+__asm__
+ 
+__vީ�e__
+
+
+1709 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+1710 : "d" (
+__ac��
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff), "3" (__accept)
+
+1712  (
+__�s
+ - 1�- 
+__s
+;
+
+1713 
+	}
+}
+
+1715 
+__STRING_INLINE
+ 
+size_t
+
+
+1716 
+	$__�r�n_g
+ (cڡ *
+__s
+, cڡ *
+__ac��
+)
+
+1718 
+__d0
+, 
+__d1
+, 
+__d2
+, 
+__d3
+;
+
+1719 cڡ *
+__�s
+;
+
+1720 
+__asm__
+ 
+__vީ�e__
+
+
+1734 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+), "=&d" (
+__d3
+)
+
+1735 : "0" (
+__s
+), "1" (0), "2" (0xffffffff), "3" (
+__ac��
+), "b" (__accept)
+
+1737  (
+__�s
+ - 1�- 
+__s
+;
+
+1738 
+	}
+}
+
+1743 
+	#_HAVE_STRING_ARCH_��brk
+ 1
+
+	)
+
+1744 
+	#��brk
+(
+s
+, 
+ac��
+) \
+
+1745 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+ac��
+) &&  ((accept)[0]) == 1 \
+
+1746 ? ((
+ac��
+)[0] == '\0' \
+
+1747 ? ((�(
+s
+), (*) 0) \
+
+1748 : ((
+ac��
+)[1] == '\0' \
+
+1749 ? 
+	`�rchr
+ ((
+s
+), (
+ac��
+)[0]) \
+
+1750 : 
+	`__��brk_cg
+ ((
+s
+), (
+ac��
+), 
+	`���
+ (accept)))) \
+
+1751 : 
+	`__��brk_g
+ ((
+s
+), (
+ac��
+))))
+
+	)
+
+1753 
+__STRING_INLINE
+ *
+__��brk_cg
+ (cڡ *
+__s
+, cڡ 
+__ac��
+[],
+
+1754 
+size_t
+ 
+__ac��_�n
+);
+
+1756 
+__STRING_INLINE
+ *
+
+1757 
+	$__��brk_cg
+ (cڡ *
+__s
+, cڡ 
+__ac��
+[], 
+size_t
+ 
+__ac��_�n
+)
+
+1759 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+1760 *
+__�s
+;
+
+1761 
+__asm__
+ 
+__vީ�e__
+
+
+1776 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+1777 : "0" (
+__s
+), "d" (
+__ac��
+), "g" (
+__ac��_�n
+)
+
+1779  
+__�s
+;
+
+1780 
+	}
+}
+
+1782 
+__STRING_INLINE
+ *
+__��brk_g
+ (cڡ *
+__s
+, cڡ *
+__ac��
+);
+
+1783 #ifde�
+__PIC__
+
+
+1785 
+__STRING_INLINE
+ *
+
+1786 
+	$__��brk_g
+ (cڡ *
+__s
+, cڡ *
+__ac��
+)
+
+1788 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+1789 *
+__�s
+;
+
+1790 
+__asm__
+ 
+__vީ�e__
+
+
+1811 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+1812 : "d" (
+__ac��
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff)
+
+1814  
+__�s
+;
+
+1815 
+	}
+}
+
+1817 
+__STRING_INLINE
+ *
+
+1818 
+	$__��brk_g
+ (cڡ *
+__s
+, cڡ *
+__ac��
+)
+
+1820 
+__d0
+, 
+__d1
+, 
+__d2
+, 
+__d3
+;
+
+1821 *
+__�s
+;
+
+1822 
+__asm__
+ 
+__vީ�e__
+
+
+1841 : "=S" (
+__�s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&d" (
+__d2
+), "=&D" (
+__d3
+)
+
+1842 : "0" (
+__s
+), "1" (0), "2" (0xffffffff), "b" (
+__ac��
+)
+
+1844  
+__�s
+;
+
+1845 
+	}
+}
+
+1850 
+	#_HAVE_STRING_ARCH_�r�r
+ 1
+
+	)
+
+1851 
+	#�r�r
+(
+hay�ack
+, 
+�ed�
+) \
+
+1852 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�ed�
+) &&  ((needle)[0]) == 1 \
+
+1853 ? ((
+�ed�
+)[0] == '\0' \
+
+1854 ? (
+hay�ack
+) \
+
+1855 : ((
+�ed�
+)[1] == '\0' \
+
+1856 ? 
+	`�rchr
+ ((
+hay�ack
+), (
+�ed�
+)[0]) \
+
+1857 : 
+	`__�r�r_cg
+ ((
+hay�ack
+), (
+�ed�
+), \
+
+1858 
+	`���
+ (
+�ed�
+)))) \
+
+1859 : 
+	`__�r�r_g
+ ((
+hay�ack
+), (
+�ed�
+))))
+
+	)
+
+1863 
+__STRING_INLINE
+ *
+__�r�r_cg
+ (cڡ *
+__hay�ack
+,
+
+1864 cڡ 
+__�ed�
+[],
+
+1865 
+size_t
+ 
+__�ed�_�n
+);
+
+1867 
+__STRING_INLINE
+ *
+
+1868 
+	$__�r�r_cg
+ (cڡ *
+__hay�ack
+, cڡ 
+__�ed�
+[],
+
+1869 
+size_t
+ 
+__�ed�_�n
+)
+
+1871 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+1872 *
+__�s
+;
+
+1873 
+__asm__
+ 
+__vީ�e__
+
+
+1886 : "=&a" (
+__�s
+), "=&S" (
+__d0
+), "=&D" (
+__d1
+), "=&c" (
+__d2
+)
+
+1887 : "g" (
+__�ed�_�n
+), "1" (
+__hay�ack
+), "d" (
+__�ed�
+)
+
+1889  
+__�s
+;
+
+1890 
+	}
+}
+
+1892 
+__STRING_INLINE
+ *
+__�r�r_g
+ (cڡ *
+__hay�ack
+,
+
+1893 cڡ *
+__�ed�
+);
+
+1894 #ifde�
+__PIC__
+
+
+1896 
+__STRING_INLINE
+ *
+
+1897 
+	$__�r�r_g
+ (cڡ *
+__hay�ack
+, cڡ *
+__�ed�
+)
+
+1899 
+__d0
+, 
+__d1
+, 
+__d2
+;
+
+1900 *
+__�s
+;
+
+1901 
+__asm__
+ 
+__vީ�e__
+
+
+1920 : "=&a" (
+__�s
+), "=&c" (
+__d0
+), "=&S" (
+__d1
+), "=&D" (
+__d2
+)
+
+1921 : "0" (0), "1" (0xffffffff), "2" (
+__hay�ack
+), "3" (
+__�ed�
+),
+
+1922 "d" (
+__�ed�
+)
+
+1924  
+__�s
+;
+
+1925 
+	}
+}
+
+1927 
+__STRING_INLINE
+ *
+
+1928 
+	$__�r�r_g
+ (cڡ *
+__hay�ack
+, cڡ *
+__�ed�
+)
+
+1930 
+__d0
+, 
+__d1
+, 
+__d2
+, 
+__d3
+;
+
+1931 *
+__�s
+;
+
+1932 
+__asm__
+ 
+__vީ�e__
+
+
+1949 : "=&a" (
+__�s
+), "=&c" (
+__d0
+), "=&S" (
+__d1
+), "=&D" (
+__d2
+), "=&d" (
+__d3
+)
+
+1950 : "0" (0), "1" (0xffffffff), "2" (
+__hay�ack
+), "3" (
+__�ed�
+),
+
+1951 "b" (
+__�ed�
+)
+
+1953  
+__�s
+;
+
+1954 
+	}
+}
+
+1960 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+1961 #ifde�
+__i686__
+
+
+1962 
+	#_HAVE_STRING_ARCH_ffs
+ 1
+
+	)
+
+1963 
+	#ffs
+(
+w�d
+�(
+	`__bu�t�_cڡ�t_p
+ (word) \
+
+1964 ? 
+	`__bu�t�_ffs
+ (
+w�d
+) \
+
+1965 : ({ 
+__�t
+, 
+__tmp
+; \
+
+1966 
+__asm__
+ 
+__vީ�e__
+ \
+
+1969 : "=&r" (
+__�t
+), "�" (
+__tmp
+) \
+
+1970 : "rm" (
+w�d
+), "1" (-1)); \
+
+1971 
+__�t
+ + 1; }))
+
+	)
+
+1973 #i�de�
+ff�
+
+
+1974 
+	#ff�
+(
+w�d
+�
+	`ffs
+(w�d)
+
+	)
+
+1979 #i�de�
+_FORCE_INLINES
+
+
+1980 #unde�
+__STRING_INLINE
+
+
+	@/usr/include/bits/string2.h
+
+20 #i�de�
+_STRING_H
+
+
+24 #i�de�
+__NO_STRING_INLINES
+
+
+41 #i�de�
+__STRING_INLINE
+
+
+42 #ifde�
+__�lu�lus
+
+
+43 
+	#__STRING_INLINE
+ 
+�l�e
+
+
+	)
+
+45 
+	#__STRING_INLINE
+ 
+__ex��_�l�e
+
+
+	)
+
+49 #i�
+_STRING_ARCH_u�lig�d
+
+
+51 
+	~<�d�n.h
+>
+
+52 
+	~<b�s/ty�s.h
+>
+
+54 #i�
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+55 
+	#__STRING2_SMALL_GET16
+(
+�c
+, 
+idx
+) \
+
+56 (((cڡ *�(cڡ *�(
+�c
+))[
+idx
+ + 1] << 8 \
+
+57 | ((cڡ *�(cڡ *�(
+�c
+))[
+idx
+])
+
+	)
+
+58 
+	#__STRING2_SMALL_GET32
+(
+�c
+, 
+idx
+) \
+
+59 (((((cڡ *�(cڡ *�(
+�c
+))[
+idx
+ + 3] << 8 \
+
+60 | ((cڡ *�(cڡ *�(
+�c
+))[
+idx
+ + 2]) << 8 \
+
+61 | ((cڡ *�(cڡ *�(
+�c
+))[
+idx
+ + 1]) << 8 \
+
+62 | ((cڡ *�(cڡ *�(
+�c
+))[
+idx
+])
+
+	)
+
+64 
+	#__STRING2_SMALL_GET16
+(
+�c
+, 
+idx
+) \
+
+65 (((cڡ *�(cڡ *�(
+�c
+))[
+idx
+] << 8 \
+
+66 | ((cڡ *�(cڡ *�(
+�c
+))[
+idx
+ + 1])
+
+	)
+
+67 
+	#__STRING2_SMALL_GET32
+(
+�c
+, 
+idx
+) \
+
+68 (((((cڡ *�(cڡ *�(
+�c
+))[
+idx
+] << 8 \
+
+69 | ((cڡ *�(cڡ *�(
+�c
+))[
+idx
+ + 1]) << 8 \
+
+70 | ((cڡ *�(cڡ *�(
+�c
+))[
+idx
+ + 2]) << 8 \
+
+71 | ((cڡ *�(cڡ *�(
+�c
+))[
+idx
+ + 3])
+
+	)
+
+76 
+	#__STRING2_COPY_TYPE
+(
+N
+) \
+
+77 �ru� { 
+__�r
+[
+N
+]; } \
+
+78 
+	t__��ibu�__
+ ((
+	t__�cked__
+)�
+	t__STRING2_COPY_ARR
+##
+	tN
+
+
+	)
+
+79 
+	t__STRING2_COPY_TYPE
+ (2);
+
+80 
+__STRING2_COPY_TYPE
+ (3);
+
+81 
+__STRING2_COPY_TYPE
+ (4);
+
+82 
+__STRING2_COPY_TYPE
+ (5);
+
+83 
+__STRING2_COPY_TYPE
+ (6);
+
+84 
+__STRING2_COPY_TYPE
+ (7);
+
+85 
+__STRING2_COPY_TYPE
+ (8);
+
+86 #unde�
+__STRING2_COPY_TYPE
+
+
+92 
+	#__�r�g2_1b�r_p
+(
+__x
+) \
+
+93 ((
+size_t
+)(cڡ *)((
+__x
+�+ 1�- (size_t)(cڡ *)(__x�=�1)
+
+	)
+
+96 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_mem�t
+
+
+97 #i�!
+__GNUC_PREREQ
+ (3, 0)
+
+98 #i�
+_STRING_ARCH_u�lig�d
+
+
+99 
+	#mem�t
+(
+s
+, 
+c
+, 
+n
+) \
+
+100 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+n
+) && (n) <= 16 \
+
+101 ? ((
+n
+) == 1 \
+
+102 ? 
+	`__mem�t_1
+ (
+s
+, 
+c
+) \
+
+103 : 
+	`__mem�t_gc
+ (
+s
+, 
+c
+, 
+n
+)) \
+
+104 : (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) && (c) == '\0' \
+
+105 ? ({ *
+__s
+ = (
+s
+); 
+	`__bz�o
+ (__s, 
+n
+); __s; }) \
+
+106 : 
+	`mem�t
+ (
+s
+, 
+c
+, 
+n
+))))
+
+	)
+
+108 
+	#__mem�t_1
+(
+s
+, 
+c
+�({ *
+__s
+ = (s); \
+
+109 *((
+__u�t8_t
+ *�
+__s
+��(__u�t8_t�
+c
+; __s; })
+
+	)
+
+111 
+	#__mem�t_gc
+(
+s
+, 
+c
+, 
+n
+) \
+
+112 ({ *
+__s
+ = (
+s
+); \
+
+114 
+__ui
+; \
+
+115 
+__usi
+; \
+
+116 
+__uc
+; \
+
+117 } *
+__u
+ = 
+__s
+; \
+
+118 
+__u�t8_t
+ 
+__c
+ = (__u�t8_t�(
+c
+); \
+
+121 (�(
+n
+)) \
+
+124 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+125 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+127 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+128 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+130 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+131 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+133 
+__u
+->
+__usi
+ = (�
+__c
+ * 0x0101; \
+
+134 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2); \
+
+135 
+__u
+->
+__uc
+ = (�
+__c
+; \
+
+139 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+140 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+142 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+143 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+145 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+146 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+148 
+__u
+->
+__usi
+ = (�
+__c
+ * 0x0101; \
+
+152 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+153 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+155 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+156 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+158 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+159 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+161 
+__u
+->
+__uc
+ = (�
+__c
+; \
+
+165 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+166 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+168 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+169 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+171 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+172 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4); \
+
+174 
+__u
+->
+__ui
+ = 
+__c
+ * 0x01010101; \
+
+179 
+__s
+; })
+
+	)
+
+181 
+	#mem�t
+(
+s
+, 
+c
+, 
+n
+) \
+
+182 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) && (c) == '\0' \
+
+183 ? ({ *
+__s
+ = (
+s
+); 
+	`__bz�o
+ (__s, 
+n
+); __s; }) \
+
+184 : 
+	`mem�t
+ (
+s
+, 
+c
+, 
+n
+)))
+
+	)
+
+193 #i�
+__GNUC_PREREQ
+ (2, 91)
+
+194 
+	#__bz�o
+(
+s
+, 
+n
+�
+	`__bu�t�_mem�t
+ (s, '\0',�)
+
+	)
+
+202 #ifde�
+__USE_GNU
+
+
+203 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_memp�y
+ || def�ed 
+_FORCE_INLINES
+
+
+204 #i�de�
+_HAVE_STRING_ARCH_memp�y
+
+
+205 #i�
+__GNUC_PREREQ
+ (3, 4)
+
+206 
+	#__memp�y
+(
+de�
+, 
+�c
+, 
+n
+�
+	`__bu�t�_memp�y
+ (de�, src,�)
+
+	)
+
+207 #�i�
+__GNUC_PREREQ
+ (3, 0)
+
+208 
+	#__memp�y
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+209 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+�&& __bu�t�_cڡ�t_�(
+n
+) \
+
+210 && 
+	`__�r�g2_1b�r_p
+ (
+�c
+�&& 
+n
+ <= 8 \
+
+211 ? 
+	`__bu�t�_mem�y
+ (
+de�
+, 
+�c
+, 
+n
+) + (n) \
+
+212 : 
+	`__memp�y
+ (
+de�
+, 
+�c
+, 
+n
+)))
+
+	)
+
+214 
+	#__memp�y
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+215 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+�&& __bu�t�_cڡ�t_�(
+n
+) \
+
+216 && 
+	`__�r�g2_1b�r_p
+ (
+�c
+�&& 
+n
+ <= 8 \
+
+217 ? 
+	`__memp�y_sm�l
+ (
+de�
+, 
+	`__memp�y_�gs
+ (
+�c
+), 
+n
+) \
+
+218 : 
+	`__memp�y
+ (
+de�
+, 
+�c
+, 
+n
+)))
+
+	)
+
+222 
+	#memp�y
+(
+de�
+, 
+�c
+, 
+n
+�
+	`__memp�y
+ (de�, src,�)
+
+	)
+
+225 #i�!
+__GNUC_PREREQ
+ (3, 0�|| 
+def�ed
+ 
+_FORCE_INLINES
+
+
+226 #i�
+_STRING_ARCH_u�lig�d
+
+
+227 #i�de�
+_FORCE_INLINES
+
+
+228 
+	#__memp�y_�gs
+(
+�c
+) \
+
+229 ((cڡ *�(
+�c
+))[0], ((const *) (src))[2], \
+
+230 ((cڡ *�(
+�c
+))[4], ((const *) (src))[6], \
+
+231 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET16
+ (
+�c
+, 0), \
+
+232 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET16
+ (
+�c
+, 4), \
+
+233 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET32
+ (
+�c
+, 0), \
+
+234 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET32
+ (
+�c
+, 4)
+
+	)
+
+236 
+__STRING_INLINE
+ *
+__memp�y_sm�l
+ (*, , , , ,
+
+237 
+__u�t16_t
+, __u�t16_t, 
+__u�t32_t
+,
+
+238 
+__u�t32_t
+, 
+size_t
+);
+
+239 
+__STRING_INLINE
+ *
+
+240 
+	$__memp�y_sm�l
+ (*
+__de�1
+,
+
+241 
+__�c0_1
+, 
+__�c2_1
+, 
+__�c4_1
+, 
+__�c6_1
+,
+
+242 
+__u�t16_t
+ 
+__�c0_2
+, __u�t16_�
+__�c4_2
+,
+
+243 
+__u�t32_t
+ 
+__�c0_4
+, __u�t32_�
+__�c4_4
+,
+
+244 
+size_t
+ 
+__���
+)
+
+247 
+__u�t32_t
+ 
+__ui
+;
+
+248 
+__u�t16_t
+ 
+__usi
+;
+
+249 
+__uc
+;
+
+250 
+__c
+;
+
+251 } *
+__u
+ = 
+__de�1
+;
+
+252 (�
+__���
+)
+
+255 
+__u
+->
+__c
+ = 
+__�c0_1
+;
+
+256 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 1);
+
+259 
+__u
+->
+__usi
+ = 
+__�c0_2
+;
+
+260 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2);
+
+263 
+__u
+->
+__usi
+ = 
+__�c0_2
+;
+
+264 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2);
+
+265 
+__u
+->
+__c
+ = 
+__�c2_1
+;
+
+266 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 1);
+
+269 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+270 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+273 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+274 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+275 
+__u
+->
+__c
+ = 
+__�c4_1
+;
+
+276 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 1);
+
+279 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+280 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+281 
+__u
+->
+__usi
+ = 
+__�c4_2
+;
+
+282 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2);
+
+285 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+286 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+287 
+__u
+->
+__usi
+ = 
+__�c4_2
+;
+
+288 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2);
+
+289 
+__u
+->
+__c
+ = 
+__�c6_1
+;
+
+290 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 1);
+
+293 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+294 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+295 
+__u
+->
+__ui
+ = 
+__�c4_4
+;
+
+296 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+299  (*�
+__u
+;
+
+300 
+	}
+}
+
+302 #i�de�
+_FORCE_INLINES
+
+
+303 
+	#__memp�y_�gs
+(
+�c
+) \
+
+304 ((cڡ *�(
+�c
+))[0], \
+
+305 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR2
+) \
+
+306 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1] } }), \
+
+307 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR3
+) \
+
+308 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+309 ((cڡ *�(
+�c
+))[2] } }), \
+
+310 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR4
+) \
+
+311 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+312 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3] } }), \
+
+313 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR5
+) \
+
+314 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+315 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+316 ((cڡ *�(
+�c
+))[4] } }), \
+
+317 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR6
+) \
+
+318 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+319 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+320 ((cڡ *�(
+�c
+))[4], ((const *) (src))[5] } }), \
+
+321 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR7
+) \
+
+322 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+323 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+324 ((cڡ *�(
+�c
+))[4], ((const *) (src))[5], \
+
+325 ((cڡ *�(
+�c
+))[6] } }), \
+
+326 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR8
+) \
+
+327 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+328 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+329 ((cڡ *�(
+�c
+))[4], ((const *) (src))[5], \
+
+330 ((cڡ *�(
+�c
+))[6], ((cڡ *�(�c))[7] } })
+
+	)
+
+332 
+__STRING_INLINE
+ *
+__memp�y_sm�l
+ (*, , 
+__STRING2_COPY_ARR2
+,
+
+333 
+__STRING2_COPY_ARR3
+,
+
+334 
+__STRING2_COPY_ARR4
+,
+
+335 
+__STRING2_COPY_ARR5
+,
+
+336 
+__STRING2_COPY_ARR6
+,
+
+337 
+__STRING2_COPY_ARR7
+,
+
+338 
+__STRING2_COPY_ARR8
+, 
+size_t
+);
+
+339 
+__STRING_INLINE
+ *
+
+340 
+	$__memp�y_sm�l
+ (*
+__de�
+, 
+__�c1
+,
+
+341 
+__STRING2_COPY_ARR2
+ 
+__�c2
+, 
+__STRING2_COPY_ARR3
+ 
+__�c3
+,
+
+342 
+__STRING2_COPY_ARR4
+ 
+__�c4
+, 
+__STRING2_COPY_ARR5
+ 
+__�c5
+,
+
+343 
+__STRING2_COPY_ARR6
+ 
+__�c6
+, 
+__STRING2_COPY_ARR7
+ 
+__�c7
+,
+
+344 
+__STRING2_COPY_ARR8
+ 
+__�c8
+, 
+size_t
+ 
+__���
+)
+
+347 
+__c
+;
+
+348 
+__STRING2_COPY_ARR2
+ 
+__s�2
+;
+
+349 
+__STRING2_COPY_ARR3
+ 
+__s�3
+;
+
+350 
+__STRING2_COPY_ARR4
+ 
+__s�4
+;
+
+351 
+__STRING2_COPY_ARR5
+ 
+__s�5
+;
+
+352 
+__STRING2_COPY_ARR6
+ 
+__s�6
+;
+
+353 
+__STRING2_COPY_ARR7
+ 
+__s�7
+;
+
+354 
+__STRING2_COPY_ARR8
+ 
+__s�8
+;
+
+355 } *
+__u
+ = 
+__de�
+;
+
+356 (�
+__���
+)
+
+359 
+__u
+->
+__c
+ = 
+__�c1
+;
+
+362 
+__ex�nsi�__
+ 
+__u
+->
+__s�2
+ = 
+__�c2
+;
+
+365 
+__ex�nsi�__
+ 
+__u
+->
+__s�3
+ = 
+__�c3
+;
+
+368 
+__ex�nsi�__
+ 
+__u
+->
+__s�4
+ = 
+__�c4
+;
+
+371 
+__ex�nsi�__
+ 
+__u
+->
+__s�5
+ = 
+__�c5
+;
+
+374 
+__ex�nsi�__
+ 
+__u
+->
+__s�6
+ = 
+__�c6
+;
+
+377 
+__ex�nsi�__
+ 
+__u
+->
+__s�7
+ = 
+__�c7
+;
+
+380 
+__ex�nsi�__
+ 
+__u
+->
+__s�8
+ = 
+__�c8
+;
+
+383  
+	`__ex�nsi�__
+ ((*�
+__u
+ + 
+__���
+);
+
+384 
+	}
+}
+
+392 #i�de�
+_HAVE_STRING_ARCH_�rchr
+
+
+393 
*
+__�wmemchr
+ (cڡ *
+__s
+, 
+__c
+);
+
+394 #i�
+__GNUC_PREREQ
+ (3, 2)
+
+395 
+	#�rchr
+(
+s
+, 
+c
+) \
+
+396 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+c
+�&& !__bu�t�_cڡ�t_�(
+s
+) \
+
+397 && (
+c
+) == '\0' \
+
+398 ? (*�
+	`__�wmemchr
+ (
+s
+, 
+c
+) \
+
+399 : 
+	`__bu�t�_�rchr
+ (
+s
+, 
+c
+)))
+
+	)
+
+401 
+	#�rchr
+(
+s
+, 
+c
+) \
+
+402 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+c
+) && (c) == '\0' \
+
+403 ? (*�
+	`__�wmemchr
+ (
+s
+, 
+c
+) \
+
+404 : 
+	`�rchr
+ (
+s
+, 
+c
+)))
+
+	)
+
+410 #i�(!
+def�ed
+ 
+_HAVE_STRING_ARCH_�r�y
+ && !
+__GNUC_PREREQ
+ (3, 0)) \
+
+411 || 
+def�ed
+ 
+	g_FORCE_INLINES
+
+
+412 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_�r�y
+ && !
+__GNUC_PREREQ
+ (3, 0)
+
+413 
+	#�r�y
+(
+de�
+, 
+�c
+) \
+
+414 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+) \
+
+415 ? (
+	`__�r�g2_1b�r_p
+ (
+�c
+�&& 
+	`���
+ (src) + 1 <= 8 \
+
+416 ? 
+	`__�r�y_sm�l
+ (
+de�
+, 
+	`__�r�y_�gs
+ (
+�c
+), \
+
+417 
+	`���
+ (
+�c
+) + 1) \
+
+418 : (*�
+	`mem�y
+ (
+de�
+, 
+�c
+, 
+	`���
+ (src) + 1)) \
+
+419 : 
+	`�r�y
+ (
+de�
+, 
+�c
+)))
+
+	)
+
+422 #i�
+_STRING_ARCH_u�lig�d
+
+
+423 #i�de�
+_FORCE_INLINES
+
+
+424 
+	#__�r�y_�gs
+(
+�c
+) \
+
+425 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET16
+ (
+�c
+, 0), \
+
+426 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET16
+ (
+�c
+, 4), \
+
+427 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET32
+ (
+�c
+, 0), \
+
+428 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET32
+ (
+�c
+, 4)
+
+	)
+
+430 
+__STRING_INLINE
+ *
+__�r�y_sm�l
+ (*, 
+__u�t16_t
+, __uint16_t,
+
+431 
+__u�t32_t
+, __u�t32_t, 
+size_t
+);
+
+432 
+__STRING_INLINE
+ *
+
+433 
+	$__�r�y_sm�l
+ (*
+__de�
+,
+
+434 
+__u�t16_t
+ 
+__�c0_2
+, __u�t16_�
+__�c4_2
+,
+
+435 
+__u�t32_t
+ 
+__�c0_4
+, __u�t32_�
+__�c4_4
+,
+
+436 
+size_t
+ 
+__���
+)
+
+439 
+__u�t32_t
+ 
+__ui
+;
+
+440 
+__u�t16_t
+ 
+__usi
+;
+
+441 
+__uc
+;
+
+442 } *
+__u
+ = (*�
+__de�
+;
+
+443 (�
+__���
+)
+
+446 
+__u
+->
+__uc
+ = '\0';
+
+449 
+__u
+->
+__usi
+ = 
+__�c0_2
+;
+
+452 
+__u
+->
+__usi
+ = 
+__�c0_2
+;
+
+453 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2);
+
+454 
+__u
+->
+__uc
+ = '\0';
+
+457 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+460 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+461 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+462 
+__u
+->
+__uc
+ = '\0';
+
+465 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+466 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+467 
+__u
+->
+__usi
+ = 
+__�c4_2
+;
+
+470 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+471 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+472 
+__u
+->
+__usi
+ = 
+__�c4_2
+;
+
+473 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2);
+
+474 
+__u
+->
+__uc
+ = '\0';
+
+477 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+478 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+479 
+__u
+->
+__ui
+ = 
+__�c4_4
+;
+
+482  
+__de�
+;
+
+483 
+	}
+}
+
+485 #i�de�
+_FORCE_INLINES
+
+
+486 
+	#__�r�y_�gs
+(
+�c
+) \
+
+487 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR2
+) \
+
+488 { { ((cڡ *�(
+�c
+))[0], '\0' } }), \
+
+489 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR3
+) \
+
+490 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+492 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR4
+) \
+
+493 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+494 ((cڡ *�(
+�c
+))[2], '\0' } }), \
+
+495 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR5
+) \
+
+496 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+497 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+499 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR6
+) \
+
+500 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+501 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+502 ((cڡ *�(
+�c
+))[4], '\0' } }), \
+
+503 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR7
+) \
+
+504 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+505 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+506 ((cڡ *�(
+�c
+))[4], ((const *) (src))[5], \
+
+508 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR8
+) \
+
+509 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+510 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+511 ((cڡ *�(
+�c
+))[4], ((const *) (src))[5], \
+
+512 ((cڡ *�(
+�c
+))[6], '\0' } })
+
+	)
+
+514 
+__STRING_INLINE
+ *
+__�r�y_sm�l
+ (*, 
+__STRING2_COPY_ARR2
+,
+
+515 
+__STRING2_COPY_ARR3
+,
+
+516 
+__STRING2_COPY_ARR4
+,
+
+517 
+__STRING2_COPY_ARR5
+,
+
+518 
+__STRING2_COPY_ARR6
+,
+
+519 
+__STRING2_COPY_ARR7
+,
+
+520 
+__STRING2_COPY_ARR8
+, 
+size_t
+);
+
+521 
+__STRING_INLINE
+ *
+
+522 
+	$__�r�y_sm�l
+ (*
+__de�
+,
+
+523 
+__STRING2_COPY_ARR2
+ 
+__�c2
+, 
+__STRING2_COPY_ARR3
+ 
+__�c3
+,
+
+524 
+__STRING2_COPY_ARR4
+ 
+__�c4
+, 
+__STRING2_COPY_ARR5
+ 
+__�c5
+,
+
+525 
+__STRING2_COPY_ARR6
+ 
+__�c6
+, 
+__STRING2_COPY_ARR7
+ 
+__�c7
+,
+
+526 
+__STRING2_COPY_ARR8
+ 
+__�c8
+, 
+size_t
+ 
+__���
+)
+
+529 
+__c
+;
+
+530 
+__STRING2_COPY_ARR2
+ 
+__s�2
+;
+
+531 
+__STRING2_COPY_ARR3
+ 
+__s�3
+;
+
+532 
+__STRING2_COPY_ARR4
+ 
+__s�4
+;
+
+533 
+__STRING2_COPY_ARR5
+ 
+__s�5
+;
+
+534 
+__STRING2_COPY_ARR6
+ 
+__s�6
+;
+
+535 
+__STRING2_COPY_ARR7
+ 
+__s�7
+;
+
+536 
+__STRING2_COPY_ARR8
+ 
+__s�8
+;
+
+537 } *
+__u
+ = (*�
+__de�
+;
+
+538 (�
+__���
+)
+
+541 
+__u
+->
+__c
+ = '\0';
+
+544 
+__ex�nsi�__
+ 
+__u
+->
+__s�2
+ = 
+__�c2
+;
+
+547 
+__ex�nsi�__
+ 
+__u
+->
+__s�3
+ = 
+__�c3
+;
+
+550 
+__ex�nsi�__
+ 
+__u
+->
+__s�4
+ = 
+__�c4
+;
+
+553 
+__ex�nsi�__
+ 
+__u
+->
+__s�5
+ = 
+__�c5
+;
+
+556 
+__ex�nsi�__
+ 
+__u
+->
+__s�6
+ = 
+__�c6
+;
+
+559 
+__ex�nsi�__
+ 
+__u
+->
+__s�7
+ = 
+__�c7
+;
+
+562 
+__ex�nsi�__
+ 
+__u
+->
+__s�8
+ = 
+__�c8
+;
+
+565  
+__de�
+;
+
+566 
+	}
+}
+
+572 #ifde�
+__USE_GNU
+
+
+573 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_�p�y
+ || def�ed 
+_FORCE_INLINES
+
+
+574 #i�de�
+_HAVE_STRING_ARCH_�p�y
+
+
+575 #i�
+__GNUC_PREREQ
+ (3, 4)
+
+576 
+	#__�p�y
+(
+de�
+, 
+�c
+�
+	`__bu�t�_�p�y
+ (de�, src)
+
+	)
+
+577 #�i�
+__GNUC_PREREQ
+ (3, 0)
+
+578 
+	#__�p�y
+(
+de�
+, 
+�c
+) \
+
+579 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+) \
+
+580 ? (
+	`__�r�g2_1b�r_p
+ (
+�c
+�&& 
+	`���
+ (src) + 1 <= 8 \
+
+581 ? 
+	`__bu�t�_�r�y
+ (
+de�
+, 
+�c
+�+ 
+	`���
+ (src) \
+
+582 : ((*�(
+__memp�y
+�(
+de�
+, 
+�c
+, 
+	`���
+ (src) + 1) \
+
+584 : 
+	`__�p�y
+ (
+de�
+, 
+�c
+)))
+
+	)
+
+586 
+	#__�p�y
+(
+de�
+, 
+�c
+) \
+
+587 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+) \
+
+588 ? (
+	`__�r�g2_1b�r_p
+ (
+�c
+�&& 
+	`���
+ (src) + 1 <= 8 \
+
+589 ? 
+	`__�p�y_sm�l
+ (
+de�
+, 
+	`__�p�y_�gs
+ (
+�c
+), \
+
+590 
+	`���
+ (
+�c
+) + 1) \
+
+591 : ((*�(
+__memp�y
+�(
+de�
+, 
+�c
+, 
+	`���
+ (src) + 1) \
+
+593 : 
+	`__�p�y
+ (
+de�
+, 
+�c
+)))
+
+	)
+
+597 
+	#�p�y
+(
+de�
+, 
+�c
+�
+	`__�p�y
+ (de�, src)
+
+	)
+
+600 #i�!
+__GNUC_PREREQ
+ (3, 0�|| 
+def�ed
+ 
+_FORCE_INLINES
+
+
+601 #i�
+_STRING_ARCH_u�lig�d
+
+
+602 #i�de�
+_FORCE_INLINES
+
+
+603 
+	#__�p�y_�gs
+(
+�c
+) \
+
+604 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET16
+ (
+�c
+, 0), \
+
+605 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET16
+ (
+�c
+, 4), \
+
+606 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET32
+ (
+�c
+, 0), \
+
+607 
+__ex�nsi�__
+ 
+	`__STRING2_SMALL_GET32
+ (
+�c
+, 4)
+
+	)
+
+609 
+__STRING_INLINE
+ *
+__�p�y_sm�l
+ (*, 
+__u�t16_t
+, __uint16_t,
+
+610 
+__u�t32_t
+, __u�t32_t, 
+size_t
+);
+
+611 
+__STRING_INLINE
+ *
+
+612 
+	$__�p�y_sm�l
+ (*
+__de�
+,
+
+613 
+__u�t16_t
+ 
+__�c0_2
+, __u�t16_�
+__�c4_2
+,
+
+614 
+__u�t32_t
+ 
+__�c0_4
+, __u�t32_�
+__�c4_4
+,
+
+615 
+size_t
+ 
+__���
+)
+
+618 
+__ui
+;
+
+619 
+__usi
+;
+
+620 
+__uc
+;
+
+621 
+__c
+;
+
+622 } *
+__u
+ = (*�
+__de�
+;
+
+623 (�
+__���
+)
+
+626 
+__u
+->
+__uc
+ = '\0';
+
+629 
+__u
+->
+__usi
+ = 
+__�c0_2
+;
+
+630 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 1);
+
+633 
+__u
+->
+__usi
+ = 
+__�c0_2
+;
+
+634 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2);
+
+635 
+__u
+->
+__uc
+ = '\0';
+
+638 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+639 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 3);
+
+642 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+643 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+644 
+__u
+->
+__uc
+ = '\0';
+
+647 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+648 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+649 
+__u
+->
+__usi
+ = 
+__�c4_2
+;
+
+650 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 1);
+
+653 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+654 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+655 
+__u
+->
+__usi
+ = 
+__�c4_2
+;
+
+656 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 2);
+
+657 
+__u
+->
+__uc
+ = '\0';
+
+660 
+__u
+->
+__ui
+ = 
+__�c0_4
+;
+
+661 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 4);
+
+662 
+__u
+->
+__ui
+ = 
+__�c4_4
+;
+
+663 
+__u
+ = 
+	`__ex�nsi�__
+ ((*) __u + 3);
+
+666  &
+__u
+->
+__c
+;
+
+667 
+	}
+}
+
+669 #i�de�
+_FORCE_INLINES
+
+
+670 
+	#__�p�y_�gs
+(
+�c
+) \
+
+671 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR2
+) \
+
+672 { { ((cڡ *�(
+�c
+))[0], '\0' } }), \
+
+673 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR3
+) \
+
+674 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+676 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR4
+) \
+
+677 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+678 ((cڡ *�(
+�c
+))[2], '\0' } }), \
+
+679 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR5
+) \
+
+680 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+681 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+683 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR6
+) \
+
+684 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+685 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+686 ((cڡ *�(
+�c
+))[4], '\0' } }), \
+
+687 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR7
+) \
+
+688 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+689 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+690 ((cڡ *�(
+�c
+))[4], ((const *) (src))[5], \
+
+692 
+	`__ex�nsi�__
+ ((
+__STRING2_COPY_ARR8
+) \
+
+693 { { ((cڡ *�(
+�c
+))[0], ((const *) (src))[1], \
+
+694 ((cڡ *�(
+�c
+))[2], ((const *) (src))[3], \
+
+695 ((cڡ *�(
+�c
+))[4], ((const *) (src))[5], \
+
+696 ((cڡ *�(
+�c
+))[6], '\0' } })
+
+	)
+
+698 
+__STRING_INLINE
+ *
+__�p�y_sm�l
+ (*, 
+__STRING2_COPY_ARR2
+,
+
+699 
+__STRING2_COPY_ARR3
+,
+
+700 
+__STRING2_COPY_ARR4
+,
+
+701 
+__STRING2_COPY_ARR5
+,
+
+702 
+__STRING2_COPY_ARR6
+,
+
+703 
+__STRING2_COPY_ARR7
+,
+
+704 
+__STRING2_COPY_ARR8
+, 
+size_t
+);
+
+705 
+__STRING_INLINE
+ *
+
+706 
+	$__�p�y_sm�l
+ (*
+__de�
+,
+
+707 
+__STRING2_COPY_ARR2
+ 
+__�c2
+, 
+__STRING2_COPY_ARR3
+ 
+__�c3
+,
+
+708 
+__STRING2_COPY_ARR4
+ 
+__�c4
+, 
+__STRING2_COPY_ARR5
+ 
+__�c5
+,
+
+709 
+__STRING2_COPY_ARR6
+ 
+__�c6
+, 
+__STRING2_COPY_ARR7
+ 
+__�c7
+,
+
+710 
+__STRING2_COPY_ARR8
+ 
+__�c8
+, 
+size_t
+ 
+__���
+)
+
+713 
+__c
+;
+
+714 
+__STRING2_COPY_ARR2
+ 
+__s�2
+;
+
+715 
+__STRING2_COPY_ARR3
+ 
+__s�3
+;
+
+716 
+__STRING2_COPY_ARR4
+ 
+__s�4
+;
+
+717 
+__STRING2_COPY_ARR5
+ 
+__s�5
+;
+
+718 
+__STRING2_COPY_ARR6
+ 
+__s�6
+;
+
+719 
+__STRING2_COPY_ARR7
+ 
+__s�7
+;
+
+720 
+__STRING2_COPY_ARR8
+ 
+__s�8
+;
+
+721 } *
+__u
+ = (*�
+__de�
+;
+
+722 (�
+__���
+)
+
+725 
+__u
+->
+__c
+ = '\0';
+
+728 
+__ex�nsi�__
+ 
+__u
+->
+__s�2
+ = 
+__�c2
+;
+
+731 
+__ex�nsi�__
+ 
+__u
+->
+__s�3
+ = 
+__�c3
+;
+
+734 
+__ex�nsi�__
+ 
+__u
+->
+__s�4
+ = 
+__�c4
+;
+
+737 
+__ex�nsi�__
+ 
+__u
+->
+__s�5
+ = 
+__�c5
+;
+
+740 
+__ex�nsi�__
+ 
+__u
+->
+__s�6
+ = 
+__�c6
+;
+
+743 
+__ex�nsi�__
+ 
+__u
+->
+__s�7
+ = 
+__�c7
+;
+
+746 
+__ex�nsi�__
+ 
+__u
+->
+__s�8
+ = 
+__�c8
+;
+
+749  
+__de�
+ + 
+__���
+ - 1;
+
+750 
+	}
+}
+
+758 #i�de�
+_HAVE_STRING_ARCH_���y
+
+
+759 #i�
+__GNUC_PREREQ
+ (3, 2)
+
+760 
+	#���y
+(
+de�
+, 
+�c
+, 
+n
+�
+	`__bu�t�_���y
+ (de�, src,�)
+
+	)
+
+762 
+	#���y
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+763 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+�&& __bu�t�_cڡ�t_�(
+n
+) \
+
+764 ? (
+	`���
+ (
+�c
+�+ 1 >�((
+size_t
+�(
+n
+)) \
+
+765 ? (*�
+	`mem�y
+ (
+de�
+, 
+�c
+, 
+n
+) \
+
+766 : 
+	`���y
+ (
+de�
+, 
+�c
+, 
+n
+)) \
+
+767 : 
+	`���y
+ (
+de�
+, 
+�c
+, 
+n
+)))
+
+	)
+
+773 #i�de�
+_HAVE_STRING_ARCH_���t
+
+
+774 #ifde�
+_USE_STRING_ARCH_�rchr
+
+
+775 
+	#���t
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+776 (
+	`__ex�nsi�__
+ ({ *
+__de�
+ = (
+de�
+); \
+
+777 
+	`__bu�t�_cڡ�t_p
+ (
+�c
+�&& __bu�t�_cڡ�t_�(
+n
+) \
+
+778 ? (
+	`���
+ (
+�c
+�< ((
+size_t
+�(
+n
+)) \
+
+779 ? 
+	`�r�t
+ (
+__de�
+, 
+�c
+) \
+
+780 : (*((*�
+	`__memp�y
+ (
+	`�rchr
+ (
+__de�
+, '\0'), \
+
+781 
+�c
+, 
+n
+)��'\0', 
+__de�
+)) \
+
+782 : 
+	`���t
+ (
+de�
+, 
+�c
+, 
+n
+); }))
+
+	)
+
+783 #�i�
+__GNUC_PREREQ
+ (3, 2)
+
+784 
+	#���t
+(
+de�
+, 
+�c
+, 
+n
+�
+	`__bu�t�_���t
+ (de�, src,�)
+
+	)
+
+786 
+	#���t
+(
+de�
+, 
+�c
+, 
+n
+) \
+
+787 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�c
+�&& __bu�t�_cڡ�t_�(
+n
+) \
+
+788 ? (
+	`���
+ (
+�c
+�< ((
+size_t
+�(
+n
+)) \
+
+789 ? 
+	`�r�t
+ (
+de�
+, 
+�c
+) \
+
+790 : 
+	`���t
+ (
+de�
+, 
+�c
+, 
+n
+)) \
+
+791 : 
+	`���t
+ (
+de�
+, 
+�c
+, 
+n
+)))
+
+	)
+
+797 #i�de�
+_HAVE_STRING_ARCH_�rcmp
+
+
+798 #i�
+__GNUC_PREREQ
+ (3, 2)
+
+799 
+	#�rcmp
+(
+s1
+, 
+s2
+) \
+
+800 
+__ex�nsi�__
+ \
+
+801 ({ 
+size_t
+ 
+__s1_�n
+, 
+__s2_�n
+; \
+
+802 (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+�&& __bu�t�_cڡ�t_�(
+s2
+) \
+
+803 && (
+__s1_�n
+ = 
+	`__bu�t�_���
+ (
+s1
+), 
+__s2_�n
+ = __bu�t�_��� (
+s2
+), \
+
+804 (!
+	`__�r�g2_1b�r_p
+ (
+s1
+�|| 
+__s1_�n
+ >= 4) \
+
+805 && (!
+	`__�r�g2_1b�r_p
+ (
+s2
+�|| 
+__s2_�n
+ >= 4)) \
+
+806 ? 
+	`__bu�t�_�rcmp
+ (
+s1
+, 
+s2
+) \
+
+807 : (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+�&& 
+	`__�r�g2_1b�r_p
+ (s1) \
+
+808 && (
+__s1_�n
+ = 
+	`__bu�t�_���
+ (
+s1
+), __s1_len < 4) \
+
+809 ? (
+	`__bu�t�_cڡ�t_p
+ (
+s2
+�&& 
+	`__�r�g2_1b�r_p
+ (s2) \
+
+810 ? 
+	`__bu�t�_�rcmp
+ (
+s1
+, 
+s2
+) \
+
+811 : 
+	`__�rcmp_cg
+ (
+s1
+, 
+s2
+, 
+__s1_�n
+)) \
+
+812 : (
+	`__bu�t�_cڡ�t_p
+ (
+s2
+�&& 
+	`__�r�g2_1b�r_p
+ (s2) \
+
+813 && (
+__s2_�n
+ = 
+	`__bu�t�_���
+ (
+s2
+), __s2_len < 4) \
+
+814 ? (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+�&& 
+	`__�r�g2_1b�r_p
+ (s1) \
+
+815 ? 
+	`__bu�t�_�rcmp
+ (
+s1
+, 
+s2
+) \
+
+816 : 
+	`__�rcmp_gc
+ (
+s1
+, 
+s2
+, 
+__s2_�n
+)) \
+
+817 : 
+	`__bu�t�_�rcmp
+ (
+s1
+, 
+s2
+)))); })
+
+	)
+
+819 
+	#�rcmp
+(
+s1
+, 
+s2
+) \
+
+820 
+__ex�nsi�__
+ \
+
+821 ({ 
+size_t
+ 
+__s1_�n
+, 
+__s2_�n
+; \
+
+822 (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+�&& __bu�t�_cڡ�t_�(
+s2
+) \
+
+823 && (
+__s1_�n
+ = 
+	`���
+ (
+s1
+), 
+__s2_�n
+ = s���(
+s2
+), \
+
+824 (!
+	`__�r�g2_1b�r_p
+ (
+s1
+�|| 
+__s1_�n
+ >= 4) \
+
+825 && (!
+	`__�r�g2_1b�r_p
+ (
+s2
+�|| 
+__s2_�n
+ >= 4)) \
+
+826 ? 
+	`memcmp
+ ((cڡ *�(
+s1
+), (cڡ *�(
+s2
+), \
+
+827 (
+__s1_�n
+ < 
+__s2_�n
+ ? __s1_len : __s2_len) + 1) \
+
+828 : (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+�&& 
+	`__�r�g2_1b�r_p
+ (s1) \
+
+829 && (
+__s1_�n
+ = 
+	`���
+ (
+s1
+), __s1_len < 4) \
+
+830 ? (
+	`__bu�t�_cڡ�t_p
+ (
+s2
+�&& 
+	`__�r�g2_1b�r_p
+ (s2) \
+
+831 ? 
+	`__�rcmp_cc
+ (
+s1
+, 
+s2
+, 
+__s1_�n
+) \
+
+832 : 
+	`__�rcmp_cg
+ (
+s1
+, 
+s2
+, 
+__s1_�n
+)) \
+
+833 : (
+	`__bu�t�_cڡ�t_p
+ (
+s2
+�&& 
+	`__�r�g2_1b�r_p
+ (s2) \
+
+834 && (
+__s2_�n
+ = 
+	`���
+ (
+s2
+), __s2_len < 4) \
+
+835 ? (
+	`__bu�t�_cڡ�t_p
+ (
+s1
+�&& 
+	`__�r�g2_1b�r_p
+ (s1) \
+
+836 ? 
+	`__�rcmp_cc
+ (
+s1
+, 
+s2
+, 
+__s2_�n
+) \
+
+837 : 
+	`__�rcmp_gc
+ (
+s1
+, 
+s2
+, 
+__s2_�n
+)) \
+
+838 : 
+	`�rcmp
+ (
+s1
+, 
+s2
+)))); })
+
+	)
+
+841 
+	#__�rcmp_cc
+(
+s1
+, 
+s2
+, 
+l
+) \
+
+842 (
+	`__ex�nsi�__
+ ({ 
+__�su�
+ = \
+
+843 (((cڡ *�(cڡ *�(
+s1
+))[0] \
+
+844 - ((cڡ *�(cڡ *)(
+s2
+))[0]); \
+
+845 i�(
+l
+ > 0 && 
+__�su�
+ == 0) \
+
+847 
+__�su�
+ = (((const *) \
+
+848 (cڡ *�(
+s1
+))[1] \
+
+850 (cڡ *�(
+s2
+))[1]); \
+
+851 i�(
+l
+ > 1 && 
+__�su�
+ == 0) \
+
+853 
+__�su�
+ = \
+
+855 (cڡ *�(
+s1
+))[2] \
+
+857 (cڡ *�(
+s2
+))[2]); \
+
+858 i�(
+l
+ > 2 && 
+__�su�
+ == 0) \
+
+859 
+__�su�
+ = \
+
+861 (cڡ *�(
+s1
+))[3] \
+
+863 (cڡ *�(
+s2
+))[3]); \
+
+866 
+__�su�
+; }))
+
+	)
+
+868 
+	#__�rcmp_cg
+(
+s1
+, 
+s2
+, 
+l1
+) \
+
+869 (
+	`__ex�nsi�__
+ ({ cڡ *
+__s2
+ = \
+
+870 (cڡ *�(cڡ *�(
+s2
+); \
+
+871 
+__�su�
+ = \
+
+872 (((cڡ *�(cڡ *�(
+s1
+))[0] \
+
+873 - 
+__s2
+[0]); \
+
+874 i�(
+l1
+ > 0 && 
+__�su�
+ == 0) \
+
+876 
+__�su�
+ = (((const *) \
+
+877 (cڡ *�(
+s1
+))[1] - 
+__s2
+[1]); \
+
+878 i�(
+l1
+ > 1 && 
+__�su�
+ == 0) \
+
+880 
+__�su�
+ = (((const *) \
+
+881 (cڡ *�(
+s1
+))[2] - 
+__s2
+[2]); \
+
+882 i�(
+l1
+ > 2 && 
+__�su�
+ == 0) \
+
+883 
+__�su�
+ = (((const *) \
+
+884 (cڡ *�(
+s1
+))[3] \
+
+885 - 
+__s2
+[3]); \
+
+888 
+__�su�
+; }))
+
+	)
+
+890 
+	#__�rcmp_gc
+(
+s1
+, 
+s2
+, 
+l2
+�(- 
+	`__�rcmp_cg
+ (s2, s1,�2))
+
+	)
+
+895 #i�de�
+_HAVE_STRING_ARCH_��cmp
+
+
+896 
+	#��cmp
+(
+s1
+, 
+s2
+, 
+n
+) \
+
+897 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+n
+) \
+
+898 && ((
+	`__bu�t�_cڡ�t_p
+ (
+s1
+) \
+
+899 && 
+	`���
+ (
+s1
+�< ((
+size_t
+�(
+n
+))) \
+
+900 || (
+	`__bu�t�_cڡ�t_p
+ (
+s2
+) \
+
+901 && 
+	`���
+ (
+s2
+�< ((
+size_t
+�(
+n
+)))) \
+
+902 ? 
+	`�rcmp
+ (
+s1
+, 
+s2
+�: 
+	`��cmp
+ (s1, s2, 
+n
+)))
+
+	)
+
+908 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_�rc�n
+ || def�ed 
+_FORCE_INLINES
+
+
+909 #i�de�
+_HAVE_STRING_ARCH_�rc�n
+
+
+910 #i�
+__GNUC_PREREQ
+ (3, 2)
+
+911 
+	#�rc�n
+(
+s
+, 
+�je�
+) \
+
+912 
+__ex�nsi�__
+ \
+
+913 ({ 
+__r0
+, 
+__r1
+, 
+__r2
+; \
+
+914 (
+	`__bu�t�_cڡ�t_p
+ (
+�je�
+�&& 
+	`__�r�g2_1b�r_p
+ (reject) \
+
+915 ? ((
+	`__bu�t�_cڡ�t_p
+ (
+s
+�&& 
+	`__�r�g2_1b�r_p
+ (s)) \
+
+916 ? 
+	`__bu�t�_�rc�n
+ (
+s
+, 
+�je�
+) \
+
+917 : ((
+__r0
+ = ((cڡ *�(
+�je�
+))[0], __r0 == '\0') \
+
+918 ? 
+	`���
+ (
+s
+) \
+
+919 : ((
+__r1
+ = ((cڡ *�(
+�je�
+))[1], __r1 == '\0') \
+
+920 ? 
+	`__�rc�n_c1
+ (
+s
+, 
+__r0
+) \
+
+921 : ((
+__r2
+ = ((cڡ *�(
+�je�
+))[2], __r2 == '\0') \
+
+922 ? 
+	`__�rc�n_c2
+ (
+s
+, 
+__r0
+, 
+__r1
+) \
+
+923 : (((cڡ *�(
+�je�
+))[3] == '\0' \
+
+924 ? 
+	`__�rc�n_c3
+ (
+s
+, 
+__r0
+, 
+__r1
+, 
+__r2
+) \
+
+925 : 
+	`__bu�t�_�rc�n
+ (
+s
+, 
+�je�
+)))))) \
+
+926 : 
+	`__bu�t�_�rc�n
+ (
+s
+, 
+�je�
+)); })
+
+	)
+
+928 
+	#�rc�n
+(
+s
+, 
+�je�
+) \
+
+929 
+__ex�nsi�__
+ \
+
+930 ({ 
+__r0
+, 
+__r1
+, 
+__r2
+; \
+
+931 (
+	`__bu�t�_cڡ�t_p
+ (
+�je�
+�&& 
+	`__�r�g2_1b�r_p
+ (reject) \
+
+932 ? ((
+__r0
+ = ((cڡ *�(
+�je�
+))[0], __r0 == '\0') \
+
+933 ? 
+	`���
+ (
+s
+) \
+
+934 : ((
+__r1
+ = ((cڡ *�(
+�je�
+))[1], __r1 == '\0') \
+
+935 ? 
+	`__�rc�n_c1
+ (
+s
+, 
+__r0
+) \
+
+936 : ((
+__r2
+ = ((cڡ *�(
+�je�
+))[2], __r2 == '\0') \
+
+937 ? 
+	`__�rc�n_c2
+ (
+s
+, 
+__r0
+, 
+__r1
+) \
+
+938 : (((cڡ *�(
+�je�
+))[3] == '\0' \
+
+939 ? 
+	`__�rc�n_c3
+ (
+s
+, 
+__r0
+, 
+__r1
+, 
+__r2
+) \
+
+940 : 
+	`�rc�n
+ (
+s
+, 
+�je�
+))))) \
+
+941 : 
+	`�rc�n
+ (
+s
+, 
+�je�
+)); })
+
+	)
+
+945 
+__STRING_INLINE
+ 
+size_t
+ 
+__�rc�n_c1
+ (cڡ *
+__s
+, 
+__�je�
+);
+
+946 
+__STRING_INLINE
+ 
+size_t
+
+
+947 
+	$__�rc�n_c1
+ (cڡ *
+__s
+, 
+__�je�
+)
+
+949 
+size_t
+ 
+__�su�
+ = 0;
+
+950 
+__s
+[
+__�su�
+] !�'\0' && __s[__�su�] !�
+__�je�
+)
+
+951 ++
+__�su�
+;
+
+952  
+__�su�
+;
+
+953 
+	}
+}
+
+955 
+__STRING_INLINE
+ 
+size_t
+ 
+__�rc�n_c2
+ (cڡ *
+__s
+, 
+__�je�1
+,
+
+956 
+__�je�2
+);
+
+957 
+__STRING_INLINE
+ 
+size_t
+
+
+958 
+	$__�rc�n_c2
+ (cڡ *
+__s
+, 
+__�je�1
+, 
+__�je�2
+)
+
+960 
+size_t
+ 
+__�su�
+ = 0;
+
+961 
+__s
+[
+__�su�
+] !�'\0' && __s[__�su�] !�
+__�je�1
+
+
+962 && 
+__s
+[
+__�su�
+] !�
+__�je�2
+)
+
+963 ++
+__�su�
+;
+
+964  
+__�su�
+;
+
+965 
+	}
+}
+
+967 
+__STRING_INLINE
+ 
+size_t
+ 
+__�rc�n_c3
+ (cڡ *
+__s
+, 
+__�je�1
+,
+
+968 
+__�je�2
+, 
+__�je�3
+);
+
+969 
+__STRING_INLINE
+ 
+size_t
+
+
+970 
+	$__�rc�n_c3
+ (cڡ *
+__s
+, 
+__�je�1
+, 
+__�je�2
+,
+
+971 
+__�je�3
+)
+
+973 
+size_t
+ 
+__�su�
+ = 0;
+
+974 
+__s
+[
+__�su�
+] !�'\0' && __s[__�su�] !�
+__�je�1
+
+
+975 && 
+__s
+[
+__�su�
+] !�
+__�je�2
+ && __s[__�su�] !�
+__�je�3
+)
+
+976 ++
+__�su�
+;
+
+977  
+__�su�
+;
+
+978 
+	}
+}
+
+984 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_�r�n
+ || def�ed 
+_FORCE_INLINES
+
+
+985 #i�de�
+_HAVE_STRING_ARCH_�r�n
+
+
+986 #i�
+__GNUC_PREREQ
+ (3, 2)
+
+987 
+	#�r�n
+(
+s
+, 
+ac��
+) \
+
+988 
+__ex�nsi�__
+ \
+
+989 ({ 
+__a0
+, 
+__a1
+, 
+__a2
+; \
+
+990 (
+	`__bu�t�_cڡ�t_p
+ (
+ac��
+�&& 
+	`__�r�g2_1b�r_p
+ (accept) \
+
+991 ? ((
+	`__bu�t�_cڡ�t_p
+ (
+s
+�&& 
+	`__�r�g2_1b�r_p
+ (s)) \
+
+992 ? 
+	`__bu�t�_�r�n
+ (
+s
+, 
+ac��
+) \
+
+993 : ((
+__a0
+ = ((cڡ *�(
+ac��
+))[0], __a0 == '\0') \
+
+994 ? ((�(
+s
+), (
+size_t
+) 0) \
+
+995 : ((
+__a1
+ = ((cڡ *�(
+ac��
+))[1], __a1 == '\0') \
+
+996 ? 
+	`__�r�n_c1
+ (
+s
+, 
+__a0
+) \
+
+997 : ((
+__a2
+ = ((cڡ *�(
+ac��
+))[2], __a2 == '\0') \
+
+998 ? 
+	`__�r�n_c2
+ (
+s
+, 
+__a0
+, 
+__a1
+) \
+
+999 : (((cڡ *�(
+ac��
+))[3] == '\0' \
+
+1000 ? 
+	`__�r�n_c3
+ (
+s
+, 
+__a0
+, 
+__a1
+, 
+__a2
+) \
+
+1001 : 
+	`__bu�t�_�r�n
+ (
+s
+, 
+ac��
+)))))) \
+
+1002 : 
+	`__bu�t�_�r�n
+ (
+s
+, 
+ac��
+)); })
+
+	)
+
+1004 
+	#�r�n
+(
+s
+, 
+ac��
+) \
+
+1005 
+__ex�nsi�__
+ \
+
+1006 ({ 
+__a0
+, 
+__a1
+, 
+__a2
+; \
+
+1007 (
+	`__bu�t�_cڡ�t_p
+ (
+ac��
+�&& 
+	`__�r�g2_1b�r_p
+ (accept) \
+
+1008 ? ((
+__a0
+ = ((cڡ *�(
+ac��
+))[0], __a0 == '\0') \
+
+1009 ? ((�(
+s
+), (
+size_t
+) 0) \
+
+1010 : ((
+__a1
+ = ((cڡ *�(
+ac��
+))[1], __a1 == '\0') \
+
+1011 ? 
+	`__�r�n_c1
+ (
+s
+, 
+__a0
+) \
+
+1012 : ((
+__a2
+ = ((cڡ *�(
+ac��
+))[2], __a2 == '\0') \
+
+1013 ? 
+	`__�r�n_c2
+ (
+s
+, 
+__a0
+, 
+__a1
+) \
+
+1014 : (((cڡ *�(
+ac��
+))[3] == '\0' \
+
+1015 ? 
+	`__�r�n_c3
+ (
+s
+, 
+__a0
+, 
+__a1
+, 
+__a2
+) \
+
+1016 : 
+	`�r�n
+ (
+s
+, 
+ac��
+))))) \
+
+1017 : 
+	`�r�n
+ (
+s
+, 
+ac��
+)); })
+
+	)
+
+1021 
+__STRING_INLINE
+ 
+size_t
+ 
+__�r�n_c1
+ (cڡ *
+__s
+, 
+__ac��
+);
+
+1022 
+__STRING_INLINE
+ 
+size_t
+
+
+1023 
+	$__�r�n_c1
+ (cڡ *
+__s
+, 
+__ac��
+)
+
+1025 
+size_t
+ 
+__�su�
+ = 0;
+
+1027 
+__s
+[
+__�su�
+] =�
+__ac��
+)
+
+1028 ++
+__�su�
+;
+
+1029  
+__�su�
+;
+
+1030 
+	}
+}
+
+1032 
+__STRING_INLINE
+ 
+size_t
+ 
+__�r�n_c2
+ (cڡ *
+__s
+, 
+__ac��1
+,
+
+1033 
+__ac��2
+);
+
+1034 
+__STRING_INLINE
+ 
+size_t
+
+
+1035 
+	$__�r�n_c2
+ (cڡ *
+__s
+, 
+__ac��1
+, 
+__ac��2
+)
+
+1037 
+size_t
+ 
+__�su�
+ = 0;
+
+1039 
+__s
+[
+__�su�
+] =�
+__ac��1
+ || __s[__�su�] =�
+__ac��2
+)
+
+1040 ++
+__�su�
+;
+
+1041  
+__�su�
+;
+
+1042 
+	}
+}
+
+1044 
+__STRING_INLINE
+ 
+size_t
+ 
+__�r�n_c3
+ (cڡ *
+__s
+, 
+__ac��1
+,
+
+1045 
+__ac��2
+, 
+__ac��3
+);
+
+1046 
+__STRING_INLINE
+ 
+size_t
+
+
+1047 
+	$__�r�n_c3
+ (cڡ *
+__s
+, 
+__ac��1
+, 
+__ac��2
+, 
+__ac��3
+)
+
+1049 
+size_t
+ 
+__�su�
+ = 0;
+
+1051 
+__s
+[
+__�su�
+] =�
+__ac��1
+ || __s[__�su�] =�
+__ac��2
+
+
+1052 || 
+__s
+[
+__�su�
+] =�
+__ac��3
+)
+
+1053 ++
+__�su�
+;
+
+1054  
+__�su�
+;
+
+1055 
+	}
+}
+
+1060 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_��brk
+ || def�ed 
+_FORCE_INLINES
+
+
+1061 #i�de�
+_HAVE_STRING_ARCH_��brk
+
+
+1062 #i�
+__GNUC_PREREQ
+ (3, 2)
+
+1063 
+	#��brk
+(
+s
+, 
+ac��
+) \
+
+1064 
+__ex�nsi�__
+ \
+
+1065 ({ 
+__a0
+, 
+__a1
+, 
+__a2
+; \
+
+1066 (
+	`__bu�t�_cڡ�t_p
+ (
+ac��
+�&& 
+	`__�r�g2_1b�r_p
+ (accept) \
+
+1067 ? ((
+	`__bu�t�_cڡ�t_p
+ (
+s
+�&& 
+	`__�r�g2_1b�r_p
+ (s)) \
+
+1068 ? 
+	`__bu�t�_��brk
+ (
+s
+, 
+ac��
+) \
+
+1069 : ((
+__a0
+ = ((cڡ *�(
+ac��
+))[0], __a0 == '\0') \
+
+1070 ? ((�(
+s
+), (*�
+NULL
+) \
+
+1071 : ((
+__a1
+ = ((cڡ *�(
+ac��
+))[1], __a1 == '\0') \
+
+1072 ? 
+	`__bu�t�_�rchr
+ (
+s
+, 
+__a0
+) \
+
+1073 : ((
+__a2
+ = ((cڡ *�(
+ac��
+))[2], __a2 == '\0') \
+
+1074 ? 
+	`__��brk_c2
+ (
+s
+, 
+__a0
+, 
+__a1
+) \
+
+1075 : (((cڡ *�(
+ac��
+))[3] == '\0' \
+
+1076 ? 
+	`__��brk_c3
+ (
+s
+, 
+__a0
+, 
+__a1
+, 
+__a2
+) \
+
+1077 : 
+	`__bu�t�_��brk
+ (
+s
+, 
+ac��
+)))))) \
+
+1078 : 
+	`__bu�t�_��brk
+ (
+s
+, 
+ac��
+)); })
+
+	)
+
+1080 
+	#��brk
+(
+s
+, 
+ac��
+) \
+
+1081 
+__ex�nsi�__
+ \
+
+1082 ({ 
+__a0
+, 
+__a1
+, 
+__a2
+; \
+
+1083 (
+	`__bu�t�_cڡ�t_p
+ (
+ac��
+�&& 
+	`__�r�g2_1b�r_p
+ (accept) \
+
+1084 ? ((
+__a0
+ = ((cڡ *�(
+ac��
+))[0], __a0 == '\0') \
+
+1085 ? ((�(
+s
+), (*�
+NULL
+) \
+
+1086 : ((
+__a1
+ = ((cڡ *�(
+ac��
+))[1], __a1 == '\0') \
+
+1087 ? 
+	`�rchr
+ (
+s
+, 
+__a0
+) \
+
+1088 : ((
+__a2
+ = ((cڡ *�(
+ac��
+))[2], __a2 == '\0') \
+
+1089 ? 
+	`__��brk_c2
+ (
+s
+, 
+__a0
+, 
+__a1
+) \
+
+1090 : (((cڡ *�(
+ac��
+))[3] == '\0' \
+
+1091 ? 
+	`__��brk_c3
+ (
+s
+, 
+__a0
+, 
+__a1
+, 
+__a2
+) \
+
+1092 : 
+	`��brk
+ (
+s
+, 
+ac��
+))))) \
+
+1093 : 
+	`��brk
+ (
+s
+, 
+ac��
+)); })
+
+	)
+
+1097 
+__STRING_INLINE
+ *
+__��brk_c2
+ (cڡ *
+__s
+, 
+__ac��1
+,
+
+1098 
+__ac��2
+);
+
+1099 
+__STRING_INLINE
+ *
+
+1100 
+	$__��brk_c2
+ (cڡ *
+__s
+, 
+__ac��1
+, 
+__ac��2
+)
+
+1103 *
+__s
+ !�'\0' && *__�!�
+__ac��1
+ && *__�!�
+__ac��2
+)
+
+1104 ++
+__s
+;
+
+1105  *
+__s
+ =�'\0' ? 
+NULL
+ : (*�(
+size_t
+) __s;
+
+1106 
+	}
+}
+
+1108 
+__STRING_INLINE
+ *
+__��brk_c3
+ (cڡ *
+__s
+, 
+__ac��1
+,
+
+1109 
+__ac��2
+, 
+__ac��3
+);
+
+1110 
+__STRING_INLINE
+ *
+
+1111 
+	$__��brk_c3
+ (cڡ *
+__s
+, 
+__ac��1
+, 
+__ac��2
+, 
+__ac��3
+)
+
+1114 *
+__s
+ !�'\0' && *__�!�
+__ac��1
+ && *__�!�
+__ac��2
+
+
+1115 && *
+__s
+ !�
+__ac��3
+)
+
+1116 ++
+__s
+;
+
+1117  *
+__s
+ =�'\0' ? 
+NULL
+ : (*�(
+size_t
+) __s;
+
+1118 
+	}
+}
+
+1124 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_�r�r
+ && !
+__GNUC_PREREQ
+ (2, 97)
+
+1125 
+	#�r�r
+(
+hay�ack
+, 
+�ed�
+) \
+
+1126 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�ed�
+�&& 
+	`__�r�g2_1b�r_p
+ (needle) \
+
+1127 ? (((cڡ *�(
+�ed�
+))[0] == '\0' \
+
+1128 ? (*�(
+size_t
+�(
+hay�ack
+) \
+
+1129 : (((cڡ *�(
+�ed�
+))[1] == '\0' \
+
+1130 ? 
+	`�rchr
+ (
+hay�ack
+, \
+
+1131 ((cڡ *�(
+�ed�
+))[0]) \
+
+1132 : 
+	`�r�r
+ (
+hay�ack
+, 
+�ed�
+))) \
+
+1133 : 
+	`�r�r
+ (
+hay�ack
+, 
+�ed�
+)))
+
+	)
+
+1137 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_��ok_r
+ || def�ed 
+_FORCE_INLINES
+
+
+1138 #i�de�
+_HAVE_STRING_ARCH_��ok_r
+
+
+1139 
+	#__��ok_r
+(
+s
+, 
+�p
+, 
+�x�
+) \
+
+1140 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+�p
+�&& 
+	`__�r�g2_1b�r_p
+ (sep) \
+
+1141 && ((cڡ *�(
+�p
+))[0] != '\0' \
+
+1142 && ((cڡ *�(
+�p
+))[1] == '\0' \
+
+1143 ? 
+	`__��ok_r_1c
+ (
+s
+, ((cڡ *�(
+�p
+))[0], 
+�x�
+) \
+
+1144 : 
+	`__��ok_r
+ (
+s
+, 
+�p
+, 
+�x�
+)))
+
+	)
+
+1147 
+__STRING_INLINE
+ *
+__��ok_r_1c
+ (*
+__s
+, 
+__�p
+, **
+__�x�
+);
+
+1148 
+__STRING_INLINE
+ *
+
+1149 
+	$__��ok_r_1c
+ (*
+__s
+, 
+__�p
+, **
+__�x�
+)
+
+1151 *
+__�su�
+;
+
+1152 i�(
+__s
+ =�
+NULL
+)
+
+1153 
+__s
+ = *
+__�x�
+;
+
+1154 *
+__s
+ =�
+__�p
+)
+
+1155 ++
+__s
+;
+
+1156 
+__�su�
+ = 
+NULL
+;
+
+1157 i�(*
+__s
+ != '\0')
+
+1159 
+__�su�
+ = 
+__s
+++;
+
+1160 *
+__s
+ != '\0')
+
+1161 i�(*
+__s
+++ =�
+__�p
+)
+
+1163 
+__s
+[-1] = '\0';
+
+1167 *
+__�x�
+ = 
+__s
+;
+
+1168  
+__�su�
+;
+
+1169 
+	}
+}
+
+1170 #i�
+def�ed
+ 
+__USE_POSIX
+ || def�ed 
+__USE_MISC
+
+
+1171 
+	#��ok_r
+(
+s
+, 
+�p
+, 
+�x�
+�
+	`__��ok_r
+ (s, s�,�ex�)
+
+	)
+
+1176 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_�r�p
+ || def�ed 
+_FORCE_INLINES
+
+
+1177 #i�de�
+_HAVE_STRING_ARCH_�r�p
+
+
+1179 
*
+__�r�p_g
+ (**
+__�r�gp
+, cڡ *
+__d�im
+);
+
+1180 
+	#__�r�p
+(
+s
+, 
+�je�
+) \
+
+1181 
+__ex�nsi�__
+ \
+
+1182 ({ 
+__r0
+, 
+__r1
+, 
+__r2
+; \
+
+1183 (
+	`__bu�t�_cڡ�t_p
+ (
+�je�
+�&& 
+	`__�r�g2_1b�r_p
+ (reject) \
+
+1184 && (
+__r0
+ = ((cڡ *�(
+�je�
+))[0], \
+
+1185 ((cڡ *�(
+�je�
+))[0] != '\0') \
+
+1186 ? ((
+__r1
+ = ((cڡ *�(
+�je�
+))[1], \
+
+1187 ((cڡ *�(
+�je�
+))[1] == '\0') \
+
+1188 ? 
+	`__�r�p_1c
+ (
+s
+, 
+__r0
+) \
+
+1189 : ((
+__r2
+ = ((cڡ *�(
+�je�
+))[2], __r2 == '\0') \
+
+1190 ? 
+	`__�r�p_2c
+ (
+s
+, 
+__r0
+, 
+__r1
+) \
+
+1191 : (((cڡ *�(
+�je�
+))[3] == '\0' \
+
+1192 ? 
+	`__�r�p_3c
+ (
+s
+, 
+__r0
+, 
+__r1
+, 
+__r2
+) \
+
+1193 : 
+	`__�r�p_g
+ (
+s
+, 
+�je�
+)))) \
+
+1194 : 
+	`__�r�p_g
+ (
+s
+, 
+�je�
+)); })
+
+	)
+
+1197 
+__STRING_INLINE
+ *
+__�r�p_1c
+ (**
+__s
+, 
+__�je�
+);
+
+1198 
+__STRING_INLINE
+ *
+
+1199 
+	$__�r�p_1c
+ (**
+__s
+, 
+__�je�
+)
+
+1201 *
+__�tv�
+ = *
+__s
+;
+
+1202 i�(
+__�tv�
+ !�
+NULL
+ && (*
+__s
+ = 
+	`�rchr
+ (__�tv�, 
+__�je�
+)) != NULL)
+
+1203 *(*
+__s
+)++ = '\0';
+
+1204  
+__�tv�
+;
+
+1205 
+	}
+}
+
+1207 
+__STRING_INLINE
+ *
+__�r�p_2c
+ (**
+__s
+, 
+__�je�1
+, 
+__�je�2
+);
+
+1208 
+__STRING_INLINE
+ *
+
+1209 
+	$__�r�p_2c
+ (**
+__s
+, 
+__�je�1
+, 
+__�je�2
+)
+
+1211 *
+__�tv�
+ = *
+__s
+;
+
+1212 i�(
+__�tv�
+ !�
+NULL
+)
+
+1214 *
+__�
+ = 
+__�tv�
+;
+
+1217 i�(*
+__�
+ == '\0')
+
+1219 
+__�
+ = 
+NULL
+;
+
+1222 i�(*
+__�
+ =�
+__�je�1
+ || *__� =�
+__�je�2
+)
+
+1224 *
+__�
+++ = '\0';
+
+1227 ++
+__�
+;
+
+1229 *
+__s
+ = 
+__�
+;
+
+1231  
+__�tv�
+;
+
+1232 
+	}
+}
+
+1234 
+__STRING_INLINE
+ *
+__�r�p_3c
+ (**
+__s
+, 
+__�je�1
+, 
+__�je�2
+,
+
+1235 
+__�je�3
+);
+
+1236 
+__STRING_INLINE
+ *
+
+1237 
+	$__�r�p_3c
+ (**
+__s
+, 
+__�je�1
+, 
+__�je�2
+, 
+__�je�3
+)
+
+1239 *
+__�tv�
+ = *
+__s
+;
+
+1240 i�(
+__�tv�
+ !�
+NULL
+)
+
+1242 *
+__�
+ = 
+__�tv�
+;
+
+1245 i�(*
+__�
+ == '\0')
+
+1247 
+__�
+ = 
+NULL
+;
+
+1250 i�(*
+__�
+ =�
+__�je�1
+ || *__� =�
+__�je�2
+ || *__� =�
+__�je�3
+)
+
+1252 *
+__�
+++ = '\0';
+
+1255 ++
+__�
+;
+
+1257 *
+__s
+ = 
+__�
+;
+
+1259  
+__�tv�
+;
+
+1260 
+	}
+}
+
+1261 #ifde�
+__USE_BSD
+
+
+1262 
+	#�r�p
+(
+s
+, 
+�je�
+�
+	`__�r�p
+ (s,�eje�)
+
+	)
+
+1269 #ifde�
+__USE_MISC
+
+
+1271 #i�!
+def�ed
+ 
+_HAVE_STRING_ARCH_�rdup
+ || !def�ed 
+_HAVE_STRING_ARCH_��dup
+
+
+1272 
+	#__�ed_m�loc_�d_��oc
+
+
+	)
+
+1273 
+	~<�dlib.h
+>
+
+1276 #i�de�
+_HAVE_STRING_ARCH_�rdup
+
+
+1278 
*
+	$__�rdup
+ (cڡ *
+__�r�g
+�
+__THROW
+ 
+__��ibu�_m�loc__
+;
+
+1279 
+	#__�rdup
+(
+s
+) \
+
+1280 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+s
+�&& 
+	`__�r�g2_1b�r_p
+ (s) \
+
+1281 ? (((cڡ *�(
+s
+))[0] == '\0' \
+
+1282 ? (*�
+	`��oc
+ ((
+size_t
+) 1, (size_t) 1) \
+
+1283 : ({ 
+size_t
+ 
+__�n
+ = 
+	`���
+ (
+s
+) + 1; \
+
+1284 *
+__�tv�
+ = (*�
+	`m�loc
+ (
+__�n
+); \
+
+1285 i�(
+__�tv�
+ !�
+NULL
+) \
+
+1286 
+__�tv�
+ = (*�
+	`mem�y
+ (__�tv�, 
+s
+, 
+__�n
+); \
+
+1287 
+__�tv�
+; 
+	}
+})) \
+
+1288 : 
+	`__�rdup
+ (
+s
+)))
+
+	)
+
+1290 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+1291 
+	#�rdup
+(
+s
+�
+	`__�rdup
+ (s)
+
+	)
+
+1295 #i�de�
+_HAVE_STRING_ARCH_��dup
+
+
+1297 
*
+	$__��dup
+ (cڡ *
+__�r�g
+, 
+size_t
+ 
+__n
+)
+
+1298 
+__THROW
+ 
+__��ibu�_m�loc__
+;
+
+1299 
+	#__��dup
+(
+s
+, 
+n
+) \
+
+1300 (
+	`__ex�nsi�__
+ (
+	`__bu�t�_cڡ�t_p
+ (
+s
+�&& 
+	`__�r�g2_1b�r_p
+ (s) \
+
+1301 ? (((cڡ *�(
+s
+))[0] == '\0' \
+
+1302 ? (*�
+	`��oc
+ ((
+size_t
+) 1, (size_t) 1) \
+
+1303 : ({ 
+size_t
+ 
+__�n
+ = 
+	`���
+ (
+s
+) + 1; \
+
+1304 
+size_t
+ 
+__n
+ = (
+n
+); \
+
+1305 *
+__�tv�
+; \
+
+1306 i�(
+__n
+ < 
+__�n
+) \
+
+1307 
+__�n
+ = 
+__n
+ + 1; \
+
+1308 
+__�tv�
+ = (*�
+	`m�loc
+ (
+__�n
+); \
+
+1309 i�(
+__�tv�
+ !�
+NULL
+) \
+
+1311 
+__�tv�
+[
+__�n
+ - 1] = '\0'; \
+
+1312 
+__�tv�
+ = (*�
+	`mem�y
+ (__�tv�, 
+s
+, \
+
+1313 
+__�n
+ - 1); \
+
+1315 
+__�tv�
+; 
+	}
+})) \
+
+1316 : 
+	`__��dup
+ (
+s
+, 
+n
+)))
+
+	)
+
+1318 #ifde�
+__USE_GNU
+
+
+1319 
+	#��dup
+(
+s
+, 
+n
+�
+	`__��dup
+ (s,�)
+
+	)
+
+1325 #i�de�
+_FORCE_INLINES
+
+
+1326 #unde�
+__STRING_INLINE
+
+
+	@/usr/include/bits/string3.h
+
+18 #i�de�
+_STRING_H
+
+
+22 
+__w�nde�
+ (
+__w�n_mem�t_z�o_�n
+,
+
+25 #i�de�
+__�lu�lus
+
+
+29 #unde�
+mem�y
+
+
+30 #unde�
+memmove
+
+
+31 #unde�
+mem�t
+
+
+32 #unde�
+�r�t
+
+
+33 #unde�
+�r�y
+
+
+34 #unde�
+���t
+
+
+35 #unde�
+���y
+
+
+36 #ifde�
+__USE_GNU
+
+
+37 #unde�
+memp�y
+
+
+38 #unde�
+�p�y
+
+
+40 #ifde�
+__USE_BSD
+
+
+41 #unde�
+bc�y
+
+
+42 #unde�
+bz�o
+
+
+47 
+__f�tify_fun�i�
+ *
+
+48 
+__NTH
+ (
+	$mem�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+,
+
+49 
+size_t
+ 
+__�n
+))
+
+51  
+	`__bu�t�___mem�y_chk
+ (
+__de�
+, 
+__�c
+, 
+__�n
+, 
+	`__bos0
+ (__dest));
+
+52 
+	}
+}
+
+54 
+__f�tify_fun�i�
+ *
+
+55 
+__NTH
+ (
+	$memmove
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__�n
+))
+
+57  
+	`__bu�t�___memmove_chk
+ (
+__de�
+, 
+__�c
+, 
+__�n
+, 
+	`__bos0
+ (__dest));
+
+58 
+	}
+}
+
+60 #ifde�
+__USE_GNU
+
+
+61 
+__f�tify_fun�i�
+ *
+
+62 
+__NTH
+ (
+	$memp�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+,
+
+63 
+size_t
+ 
+__�n
+))
+
+65  
+	`__bu�t�___memp�y_chk
+ (
+__de�
+, 
+__�c
+, 
+__�n
+, 
+	`__bos0
+ (__dest));
+
+66 
+	}
+}
+
+75 
+__f�tify_fun�i�
+ *
+
+76 
+__NTH
+ (
+	$mem�t
+ (*
+__de�
+, 
+__ch
+, 
+size_t
+ 
+__�n
+))
+
+78 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+) && __len == 0
+
+79 && (!
+	`__bu�t�_cڡ�t_p
+ (
+__ch
+) || __ch != 0))
+
+81 
+	`__w�n_mem�t_z�o_�n
+ ();
+
+82  
+__de�
+;
+
+84  
+	`__bu�t�___mem�t_chk
+ (
+__de�
+, 
+__ch
+, 
+__�n
+, 
+	`__bos0
+ (__dest));
+
+85 
+	}
+}
+
+87 #ifde�
+__USE_BSD
+
+
+88 
+__f�tify_fun�i�
+ 
+
+89 
+__NTH
+ (
+	$bc�y
+ (cڡ *
+__�c
+, *
+__de�
+, 
+size_t
+ 
+__�n
+))
+
+91 (�
+	`__bu�t�___memmove_chk
+ (
+__de�
+, 
+__�c
+, 
+__�n
+, 
+	`__bos0
+ (__dest));
+
+92 
+	}
+}
+
+94 
+__f�tify_fun�i�
+ 
+
+95 
+__NTH
+ (
+	$bz�o
+ (*
+__de�
+, 
+size_t
+ 
+__�n
+))
+
+97 (�
+	`__bu�t�___mem�t_chk
+ (
+__de�
+, '\0', 
+__�n
+, 
+	`__bos0
+ (__dest));
+
+98 
+	}
+}
+
+101 
+__f�tify_fun�i�
+ *
+
+102 
+__NTH
+ (
+	$�r�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+))
+
+104  
+	`__bu�t�___�r�y_chk
+ (
+__de�
+, 
+__�c
+, 
+	`__bos
+ (__dest));
+
+105 
+	}
+}
+
+107 #ifde�
+__USE_GNU
+
+
+108 
+__f�tify_fun�i�
+ *
+
+109 
+__NTH
+ (
+	$�p�y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+))
+
+111  
+	`__bu�t�___�p�y_chk
+ (
+__de�
+, 
+__�c
+, 
+	`__bos
+ (__dest));
+
+112 
+	}
+}
+
+116 
+__f�tify_fun�i�
+ *
+
+117 
+__NTH
+ (
+	$���y
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+,
+
+118 
+size_t
+ 
+__�n
+))
+
+120  
+	`__bu�t�___���y_chk
+ (
+__de�
+, 
+__�c
+, 
+__�n
+, 
+	`__bos
+ (__dest));
+
+121 
+	}
+}
+
+124 
*
+	$__���y_chk
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+,
+
+125 
+size_t
+ 
+__de��n
+�
+__THROW
+;
+
+126 
*
+	`__REDIRECT_NTH
+ (
+__���y_��s
+, (*
+__de�
+, cڡ *
+__�c
+,
+
+127 
+size_t
+ 
+__n
+), 
+���y
+);
+
+129 
+__f�tify_fun�i�
+ *
+
+130 
+	`__NTH
+ (
+	$���y
+ (*
+__de�
+, cڡ *
+__�c
+, 
+size_t
+ 
+__n
+))
+
+132 i�(
+	`__bos
+ (
+__de�
+�!�(
+size_t
+) -1
+
+133 && (!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+�|| __�<�
+	`__bos
+ (
+__de�
+)))
+
+134  
+	`__���y_chk
+ (
+__de�
+, 
+__�c
+, 
+__n
+, 
+	`__bos
+ (__dest));
+
+135  
+	`__���y_��s
+ (
+__de�
+, 
+__�c
+, 
+__n
+);
+
+136 
+	}
+}
+
+139 
+__f�tify_fun�i�
+ *
+
+140 
+__NTH
+ (
+	$�r�t
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+))
+
+142  
+	`__bu�t�___�r�t_chk
+ (
+__de�
+, 
+__�c
+, 
+	`__bos
+ (__dest));
+
+143 
+	}
+}
+
+146 
+__f�tify_fun�i�
+ *
+
+147 
+__NTH
+ (
+	$���t
+ (*
+__��ri�
+ 
+__de�
+, cڡ *__��ri� 
+__�c
+,
+
+148 
+size_t
+ 
+__�n
+))
+
+150  
+	`__bu�t�___���t_chk
+ (
+__de�
+, 
+__�c
+, 
+__�n
+, 
+	`__bos
+ (__dest));
+
+151 
+	}
+}
+
+	@/usr/include/bits/sys_errlist.h
+
+19 #i�de�
+_STDIO_H
+
+
+25 #ifde� 
+__USE_BSD
+
+
+26 

+sys_ü
+;
+
+27 
cڡ *cڡ 
+sys_��i�
+[];
+
+29 #ifde� 
+__USE_GNU
+
+
+30 

+_sys_ü
+;
+
+31 
cڡ *cڡ 
+_sys_��i�
+[];
+
+	@/usr/include/bits/termios.h
+
+19 #i�de�
+_TERMIOS_H
+
+
+23 
+	tcc_t
+;
+
+24 
+	t��d_t
+;
+
+25 
+	ttc�ag_t
+;
+
+27 
+	#NCCS
+ 32
+
+	)
+
+28 
+	s�rmios
+
+
+30 
+tc�ag_t
+ 
+	mc_i�ag
+;
+
+31 
+tc�ag_t
+ 
+	mc_o�ag
+;
+
+32 
+tc�ag_t
+ 
+	mc_c�ag
+;
+
+33 
+tc�ag_t
+ 
+	mc_l�ag
+;
+
+34 
+cc_t
+ 
+	mc_l�e
+;
+
+35 
+cc_t
+ 
+	mc_cc
+[
+NCCS
+];
+
+36 
+��d_t
+ 
+	mc_i��d
+;
+
+37 
+��d_t
+ 
+	mc_o��d
+;
+
+38 
+	#_HAVE_STRUCT_TERMIOS_C_ISPEED
+ 1
+
+	)
+
+39 
+	#_HAVE_STRUCT_TERMIOS_C_OSPEED
+ 1
+
+	)
+
+43 
+	#VINTR
+ 0
+
+	)
+
+44 
+	#VQUIT
+ 1
+
+	)
+
+45 
+	#VERASE
+ 2
+
+	)
+
+46 
+	#VKILL
+ 3
+
+	)
+
+47 
+	#VEOF
+ 4
+
+	)
+
+48 
+	#VTIME
+ 5
+
+	)
+
+49 
+	#VMIN
+ 6
+
+	)
+
+50 
+	#VSWTC
+ 7
+
+	)
+
+51 
+	#VSTART
+ 8
+
+	)
+
+52 
+	#VSTOP
+ 9
+
+	)
+
+53 
+	#VSUSP
+ 10
+
+	)
+
+54 
+	#VEOL
+ 11
+
+	)
+
+55 
+	#VREPRINT
+ 12
+
+	)
+
+56 
+	#VDISCARD
+ 13
+
+	)
+
+57 
+	#VWERASE
+ 14
+
+	)
+
+58 
+	#VLNEXT
+ 15
+
+	)
+
+59 
+	#VEOL2
+ 16
+
+	)
+
+62 
+	#IGNBRK
+ 0000001
+
+	)
+
+63 
+	#BRKINT
+ 0000002
+
+	)
+
+64 
+	#IGNPAR
+ 0000004
+
+	)
+
+65 
+	#PARMRK
+ 0000010
+
+	)
+
+66 
+	#INPCK
+ 0000020
+
+	)
+
+67 
+	#ISTRIP
+ 0000040
+
+	)
+
+68 
+	#INLCR
+ 0000100
+
+	)
+
+69 
+	#IGNCR
+ 0000200
+
+	)
+
+70 
+	#ICRNL
+ 0000400
+
+	)
+
+71 
+	#IUCLC
+ 0001000
+
+	)
+
+72 
+	#IXON
+ 0002000
+
+	)
+
+73 
+	#IXANY
+ 0004000
+
+	)
+
+74 
+	#IXOFF
+ 0010000
+
+	)
+
+75 
+	#IMAXBEL
+ 0020000
+
+	)
+
+76 
+	#IUTF8
+ 0040000
+
+	)
+
+79 
+	#OPOST
+ 0000001
+
+	)
+
+80 
+	#OLCUC
+ 0000002
+
+	)
+
+81 
+	#ONLCR
+ 0000004
+
+	)
+
+82 
+	#OCRNL
+ 0000010
+
+	)
+
+83 
+	#ONOCR
+ 0000020
+
+	)
+
+84 
+	#ONLRET
+ 0000040
+
+	)
+
+85 
+	#OFILL
+ 0000100
+
+	)
+
+86 
+	#OFDEL
+ 0000200
+
+	)
+
+87 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN
+
+
+88 
+	#NLDLY
+ 0000400
+
+	)
+
+89 
+	#NL0
+ 0000000
+
+	)
+
+90 
+	#NL1
+ 0000400
+
+	)
+
+91 
+	#CRDLY
+ 0003000
+
+	)
+
+92 
+	#CR0
+ 0000000
+
+	)
+
+93 
+	#CR1
+ 0001000
+
+	)
+
+94 
+	#CR2
+ 0002000
+
+	)
+
+95 
+	#CR3
+ 0003000
+
+	)
+
+96 
+	#TABDLY
+ 0014000
+
+	)
+
+97 
+	#TAB0
+ 0000000
+
+	)
+
+98 
+	#TAB1
+ 0004000
+
+	)
+
+99 
+	#TAB2
+ 0010000
+
+	)
+
+100 
+	#TAB3
+ 0014000
+
+	)
+
+101 
+	#BSDLY
+ 0020000
+
+	)
+
+102 
+	#BS0
+ 0000000
+
+	)
+
+103 
+	#BS1
+ 0020000
+
+	)
+
+104 
+	#FFDLY
+ 0100000
+
+	)
+
+105 
+	#FF0
+ 0000000
+
+	)
+
+106 
+	#FF1
+ 0100000
+
+	)
+
+109 
+	#VTDLY
+ 0040000
+
+	)
+
+110 
+	#VT0
+ 0000000
+
+	)
+
+111 
+	#VT1
+ 0040000
+
+	)
+
+113 #ifde�
+__USE_MISC
+
+
+114 
+	#XTABS
+ 0014000
+
+	)
+
+118 #ifde�
+__USE_MISC
+
+
+119 
+	#CBAUD
+ 0010017
+
+	)
+
+121 
+	#B0
+ 0000000
+
+	)
+
+122 
+	#B50
+ 0000001
+
+	)
+
+123 
+	#B75
+ 0000002
+
+	)
+
+124 
+	#B110
+ 0000003
+
+	)
+
+125 
+	#B134
+ 0000004
+
+	)
+
+126 
+	#B150
+ 0000005
+
+	)
+
+127 
+	#B200
+ 0000006
+
+	)
+
+128 
+	#B300
+ 0000007
+
+	)
+
+129 
+	#B600
+ 0000010
+
+	)
+
+130 
+	#B1200
+ 0000011
+
+	)
+
+131 
+	#B1800
+ 0000012
+
+	)
+
+132 
+	#B2400
+ 0000013
+
+	)
+
+133 
+	#B4800
+ 0000014
+
+	)
+
+134 
+	#B9600
+ 0000015
+
+	)
+
+135 
+	#B19200
+ 0000016
+
+	)
+
+136 
+	#B38400
+ 0000017
+
+	)
+
+137 #ifde�
+__USE_MISC
+
+
+138 
+	#EXTA
+ 
+B19200
+
+
+	)
+
+139 
+	#EXTB
+ 
+B38400
+
+
+	)
+
+141 
+	#CSIZE
+ 0000060
+
+	)
+
+142 
+	#CS5
+ 0000000
+
+	)
+
+143 
+	#CS6
+ 0000020
+
+	)
+
+144 
+	#CS7
+ 0000040
+
+	)
+
+145 
+	#CS8
+ 0000060
+
+	)
+
+146 
+	#CSTOPB
+ 0000100
+
+	)
+
+147 
+	#CREAD
+ 0000200
+
+	)
+
+148 
+	#PARENB
+ 0000400
+
+	)
+
+149 
+	#PARODD
+ 0001000
+
+	)
+
+150 
+	#HUPCL
+ 0002000
+
+	)
+
+151 
+	#CLOCAL
+ 0004000
+
+	)
+
+152 #ifde�
+__USE_MISC
+
+
+153 
+	#CBAUDEX
+ 0010000
+
+	)
+
+155 
+	#B57600
+ 0010001
+
+	)
+
+156 
+	#B115200
+ 0010002
+
+	)
+
+157 
+	#B230400
+ 0010003
+
+	)
+
+158 
+	#B460800
+ 0010004
+
+	)
+
+159 
+	#B500000
+ 0010005
+
+	)
+
+160 
+	#B576000
+ 0010006
+
+	)
+
+161 
+	#B921600
+ 0010007
+
+	)
+
+162 
+	#B1000000
+ 0010010
+
+	)
+
+163 
+	#B1152000
+ 0010011
+
+	)
+
+164 
+	#B1500000
+ 0010012
+
+	)
+
+165 
+	#B2000000
+ 0010013
+
+	)
+
+166 
+	#B2500000
+ 0010014
+
+	)
+
+167 
+	#B3000000
+ 0010015
+
+	)
+
+168 
+	#B3500000
+ 0010016
+
+	)
+
+169 
+	#B4000000
+ 0010017
+
+	)
+
+170 
+	#__MAX_BAUD
+ 
+B4000000
+
+
+	)
+
+171 #ifde�
+__USE_MISC
+
+
+172 
+	#CIBAUD
+ 002003600000
+
+	)
+
+173 
+	#CMSPAR
+ 010000000000
+
+	)
+
+174 
+	#CRTSCTS
+ 020000000000
+
+	)
+
+178 
+	#ISIG
+ 0000001
+
+	)
+
+179 
+	#ICANON
+ 0000002
+
+	)
+
+180 #i�
+def�ed
+ 
+__USE_MISC
+ || def�ed 
+__USE_XOPEN
+
+
+181 
+	#XCASE
+ 0000004
+
+	)
+
+183 
+	#ECHO
+ 0000010
+
+	)
+
+184 
+	#ECHOE
+ 0000020
+
+	)
+
+185 
+	#ECHOK
+ 0000040
+
+	)
+
+186 
+	#ECHONL
+ 0000100
+
+	)
+
+187 
+	#NOFLSH
+ 0000200
+
+	)
+
+188 
+	#TOSTOP
+ 0000400
+
+	)
+
+189 #ifde�
+__USE_MISC
+
+
+190 
+	#ECHOCTL
+ 0001000
+
+	)
+
+191 
+	#ECHOPRT
+ 0002000
+
+	)
+
+192 
+	#ECHOKE
+ 0004000
+
+	)
+
+193 
+	#FLUSHO
+ 0010000
+
+	)
+
+194 
+	#PENDIN
+ 0040000
+
+	)
+
+196 
+	#IEXTEN
+ 0100000
+
+	)
+
+197 #ifde�
+__USE_BSD
+
+
+198 
+	#EXTPROC
+ 0200000
+
+	)
+
+202 
+	#TCOOFF
+ 0
+
+	)
+
+203 
+	#TCOON
+ 1
+
+	)
+
+204 
+	#TCIOFF
+ 2
+
+	)
+
+205 
+	#TCION
+ 3
+
+	)
+
+208 
+	#TCIFLUSH
+ 0
+
+	)
+
+209 
+	#TCOFLUSH
+ 1
+
+	)
+
+210 
+	#TCIOFLUSH
+ 2
+
+	)
+
+213 
+	#TCSANOW
+ 0
+
+	)
+
+214 
+	#TCSADRAIN
+ 1
+
+	)
+
+215 
+	#TCSAFLUSH
+ 2
+
+	)
+
+218 
+	#_IOT_�rmios
+ \
+
+219 
+	`_IOT
+ (
+	`_IOTS
+ (
+c�ag_t
+), 4, _IOTS (
+cc_t
+), 
+NCCS
+, _IOTS (
+��d_t
+), 2)
+
+	)
+
+	@/usr/include/bits/time.h
+
+23 #i�
+def�ed
+ 
+__�ed_timev�
+ || def�ed 
+__USE_GNU
+
+
+24 #i�de�
+_STRUCT_TIMEVAL
+
+
+25 
+	#_STRUCT_TIMEVAL
+ 1
+
+	)
+
+26 
+	~<b�s/ty�s.h
+>
+
+30 
+	stimev�
+
+
+32 
+__time_t
+ 
+	mtv_�c
+;
+
+33 
+__su�c�ds_t
+ 
+	mtv_u�c
+;
+
+38 #i�de�
+__�ed_timev�
+
+
+39 #i�de�
+_BITS_TIME_H
+
+
+40 
+	#_BITS_TIME_H
+ 1
+
+	)
+
+48 
+	#CLOCKS_PER_SEC
+ 1000000l
+
+	)
+
+50 #i�(!
+def�ed
+ 
+__STRICT_ANSI__
+ || def�ed 
+__USE_POSIX
+) \
+
+51 && !
+def�ed
+ 
+	g__USE_XOPEN2K
+
+
+54 
+	~<b�s/ty�s.h
+>
+
+55 

+__sysc�f
+ ();
+
+56 
+	#CLK_TCK
+ ((
+__�ock_t
+�
+	`__sysc�f
+ (2)�
+
+	)
+
+59 #ifde�
+__USE_POSIX199309
+
+
+61 
+	#CLOCK_REALTIME
+ 0
+
+	)
+
+63 
+	#CLOCK_MONOTONIC
+ 1
+
+	)
+
+65 
+	#CLOCK_PROCESS_CPUTIME_ID
+ 2
+
+	)
+
+67 
+	#CLOCK_THREAD_CPUTIME_ID
+ 3
+
+	)
+
+69 
+	#CLOCK_MONOTONIC_RAW
+ 4
+
+	)
+
+71 
+	#CLOCK_REALTIME_COARSE
+ 5
+
+	)
+
+73 
+	#CLOCK_MONOTONIC_COARSE
+ 6
+
+	)
+
+75 
+	#CLOCK_BOOTTIME
+ 7
+
+	)
+
+77 
+	#CLOCK_REALTIME_ALARM
+ 8
+
+	)
+
+79 
+	#CLOCK_BOOTTIME_ALARM
+ 9
+
+	)
+
+82 
+	#TIMER_ABSTIME
+ 1
+
+	)
+
+85 #ifde�
+__USE_GNU
+
+
+86 
+	~<b�s/timex.h
+>
+
+88 
+__BEGIN_DECLS
+
+
+91 

+	$�ock_adjtime
+ (
+__�ockid_t
+ 
+__�ock_id
+, 
+timex
+ *
+__utx
+�
+__THROW
+;
+
+93 
+__END_DECLS
+
+
+99 #unde�
+__�ed_timev�
+
+
+	@/usr/include/bits/types.h
+
+23 #i�def 
+_BITS_TYPES_H
+
+
+24 
+	#_BITS_TYPES_H
+ 1
+
+	)
+
+26 
+	~<�u�s.h
+>
+
+27 
+	~<b�s/w�dsize.h
+>
+
+30 
+	t__u_ch�
+;
+
+31 
+	t__u_sh�t
+;
+
+32 
+	t__u_�t
+;
+
+33 
+	t__u_l�g
+;
+
+36 sig�d 
+	t__�t8_t
+;
+
+37 
+	t__u�t8_t
+;
+
+38 sig�d 
+	t__�t16_t
+;
+
+39 
+	t__u�t16_t
+;
+
+40 sig�d 
+	t__�t32_t
+;
+
+41 
+	t__u�t32_t
+;
+
+42 #i�
+__WORDSIZE
+ == 64
+
+43 sig�d 
+	t__�t64_t
+;
+
+44 
+	t__u�t64_t
+;
+
+46 
+__ex�nsi�__
+ sig�d 
+	t__�t64_t
+;
+
+47 
+__ex�nsi�__
+ 
+	t__u�t64_t
+;
+
+51 #i�
+__WORDSIZE
+ == 64
+
+52 
+	t__quad_t
+;
+
+53 
+	t__u_quad_t
+;
+
+55 
+__ex�nsi�__
+ 
+	t__quad_t
+;
+
+56 
+__ex�nsi�__
+ 
+	t__u_quad_t
+;
+
+89 
+	#__S16_TYPE
+ 
+
+	)
+
+90 
+	#__U16_TYPE
+ 
+
+	)
+
+91 
+	#__S32_TYPE
+ 
+
+	)
+
+92 
+	#__U32_TYPE
+ 
+
+	)
+
+93 
+	#__SLONGWORD_TYPE
+ 
+
+	)
+
+94 
+	#__ULONGWORD_TYPE
+ 
+
+	)
+
+95 #i�
+__WORDSIZE
+ == 32
+
+96 
+	#__SQUAD_TYPE
+ 
+__quad_t
+
+
+	)
+
+97 
+	#__UQUAD_TYPE
+ 
+__u_quad_t
+
+
+	)
+
+98 
+	#__SWORD_TYPE
+ 
+
+	)
+
+99 
+	#__UWORD_TYPE
+ 
+
+	)
+
+100 
+	#__SLONG32_TYPE
+ 
+
+	)
+
+101 
+	#__ULONG32_TYPE
+ 
+
+	)
+
+102 
+	#__S64_TYPE
+ 
+__quad_t
+
+
+	)
+
+103 
+	#__U64_TYPE
+ 
+__u_quad_t
+
+
+	)
+
+106 
+	#__STD_TYPE
+ 
+__ex�nsi�__
+ 
+
+	)
+
+107 #�i�
+__WORDSIZE
+ == 64
+
+108 
+	t__SQUAD_TYPE
+ 
+
+	)
+
+109 
+	t__UQUAD_TYPE
+ 
+
+	)
+
+110 
+	t__SWORD_TYPE
+ 
+
+	)
+
+111 
+	t__UWORD_TYPE
+ 
+
+	)
+
+112 
+	t__SLONG32_TYPE
+ 
+
+	)
+
+113 
+	t__ULONG32_TYPE
+ 
+
+	)
+
+114 
+	t__S64_TYPE
+ 
+
+	)
+
+115 
+	t__U64_TYPE
+ 
+
+	)
+
+117 
+	t__STD_TYPE
+ 
+
+	)
+
+121 
+	~<b�s/ty�sizes.h
+>
+
+124 
+__STD_TYPE
+ 
+	t__DEV_T_TYPE
+ 
+	t__dev_t
+;
+
+125 
+__STD_TYPE
+ 
+__UID_T_TYPE
+ 
+	g__uid_t
+;
+
+126 
+__STD_TYPE
+ 
+__GID_T_TYPE
+ 
+	g__gid_t
+;
+
+127 
+__STD_TYPE
+ 
+__INO_T_TYPE
+ 
+	g__�o_t
+;
+
+128 
+__STD_TYPE
+ 
+__INO64_T_TYPE
+ 
+	g__�o64_t
+;
+
+129 
+__STD_TYPE
+ 
+__MODE_T_TYPE
+ 
+	g__mode_t
+;
+
+130 
+__STD_TYPE
+ 
+__NLINK_T_TYPE
+ 
+	g__ƚk_t
+;
+
+131 
+__STD_TYPE
+ 
+__OFF_T_TYPE
+ 
+	g__off_t
+;
+
+132 
+__STD_TYPE
+ 
+__OFF64_T_TYPE
+ 
+	g__off64_t
+;
+
+133 
+__STD_TYPE
+ 
+__PID_T_TYPE
+ 
+	g__pid_t
+;
+
+134 
+__STD_TYPE
+ 
+__FSID_T_TYPE
+ 
+	g__fsid_t
+;
+
+135 
+__STD_TYPE
+ 
+__CLOCK_T_TYPE
+ 
+	g__�ock_t
+;
+
+136 
+__STD_TYPE
+ 
+__RLIM_T_TYPE
+ 
+	g__�im_t
+;
+
+137 
+__STD_TYPE
+ 
+__RLIM64_T_TYPE
+ 
+	g__�im64_t
+;
+
+138 
+__STD_TYPE
+ 
+__ID_T_TYPE
+ 
+	g__id_t
+;
+
+139 
+__STD_TYPE
+ 
+__TIME_T_TYPE
+ 
+	g__time_t
+;
+
+140 
+__STD_TYPE
+ 
+__USECONDS_T_TYPE
+ 
+	g__u�c�ds_t
+;
+
+141 
+__STD_TYPE
+ 
+__SUSECONDS_T_TYPE
+ 
+	g__su�c�ds_t
+;
+
+143 
+__STD_TYPE
+ 
+__DADDR_T_TYPE
+ 
+	g__daddr_t
+;
+
+144 
+__STD_TYPE
+ 
+__KEY_T_TYPE
+ 
+	g__key_t
+;
+
+147 
+__STD_TYPE
+ 
+__CLOCKID_T_TYPE
+ 
+	g__�ockid_t
+;
+
+150 
+__STD_TYPE
+ 
+__TIMER_T_TYPE
+ 
+	g__tim�_t
+;
+
+153 
+__STD_TYPE
+ 
+__BLKSIZE_T_TYPE
+ 
+	g__blksize_t
+;
+
+158 
+__STD_TYPE
+ 
+__BLKCNT_T_TYPE
+ 
+	g__blk�t_t
+;
+
+159 
+__STD_TYPE
+ 
+__BLKCNT64_T_TYPE
+ 
+	g__blk�t64_t
+;
+
+162 
+__STD_TYPE
+ 
+__FSBLKCNT_T_TYPE
+ 
+	g__fsblk�t_t
+;
+
+163 
+__STD_TYPE
+ 
+__FSBLKCNT64_T_TYPE
+ 
+	g__fsblk�t64_t
+;
+
+166 
+__STD_TYPE
+ 
+__FSFILCNT_T_TYPE
+ 
+	g__fsf��t_t
+;
+
+167 
+__STD_TYPE
+ 
+__FSFILCNT64_T_TYPE
+ 
+	g__fsf��t64_t
+;
+
+170 
+__STD_TYPE
+ 
+__FSWORD_T_TYPE
+ 
+	g__fsw�d_t
+;
+
+172 
+__STD_TYPE
+ 
+__SSIZE_T_TYPE
+ 
+	g__ssize_t
+;
+
+175 
+__STD_TYPE
+ 
+__SYSCALL_SLONG_TYPE
+ 
+	g__sys��_��g_t
+;
+
+177 
+__STD_TYPE
+ 
+__SYSCALL_ULONG_TYPE
+ 
+	g__sys��_ul�g_t
+;
+
+181 
+__off64_t
+ 
+	t__loff_t
+;
+
+182 
+__quad_t
+ *
+	t__qaddr_t
+;
+
+183 *
+	t__�ddr_t
+;
+
+186 
+__STD_TYPE
+ 
+__SWORD_TYPE
+ 
+	g__���_t
+;
+
+189 
+__STD_TYPE
+ 
+__U32_TYPE
+ 
+	g__sock�n_t
+;
+
+192 #unde�
+__STD_TYPE
+
+
+	@/usr/include/bits/unistd.h
+
+19 #i�de�
+_UNISTD_H
+
+
+23 
+ssize_t
+ 
+	$__�ad_chk
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+24 
+size_t
+ 
+__bu�
+�
+__wur
+;
+
+25 
+ssize_t
+ 
+	`__REDIRECT
+ (
+__�ad_��s
+, (
+__fd
+, *
+__buf
+,
+
+26 
+size_t
+ 
+__nby�s
+), 
+�ad
+�
+__wur
+;
+
+27 
+ssize_t
+ 
+	`__REDIRECT
+ (
+__�ad_chk_w�n
+,
+
+28 (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+29 
+size_t
+ 
+__bu�
+), 
+__�ad_chk
+)
+
+30 
+__wur
+ 
+	`__w�ljr
+ ("read called with bigger�ength�han size of "
+
+33 
+__f�tify_fun�i�
+ 
+__wur
+ 
+ssize_t
+
+
+34 
+	$�ad
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+)
+
+36 i�(
+	`__bos0
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+38 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__nby�s
+))
+
+39  
+	`__�ad_chk
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+	`__bos0
+ (__buf));
+
+41 i�(
+__nby�s
+ > 
+	`__bos0
+ (
+__buf
+))
+
+42  
+	`__�ad_chk_w�n
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+	`__bos0
+ (__buf));
+
+44  
+	`__�ad_��s
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+);
+
+45 
+	}
+}
+
+47 #ifde�
+__USE_UNIX98
+
+
+48 
+ssize_t
+ 
+	$__��d_chk
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+49 
+__off_t
+ 
+__off�t
+, 
+size_t
+ 
+__bufsize
+�
+__wur
+;
+
+50 
+ssize_t
+ 
+	$__��d64_chk
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+51 
+__off64_t
+ 
+__off�t
+, 
+size_t
+ 
+__bufsize
+�
+__wur
+;
+
+52 
+ssize_t
+ 
+	`__REDIRECT
+ (
+__��d_��s
+,
+
+53 (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+54 
+__off_t
+ 
+__off�t
+), 
+��d
+�
+__wur
+;
+
+55 
+ssize_t
+ 
+	`__REDIRECT
+ (
+__��d64_��s
+,
+
+56 (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+57 
+__off64_t
+ 
+__off�t
+), 
+��d64
+�
+__wur
+;
+
+58 
+ssize_t
+ 
+	`__REDIRECT
+ (
+__��d_chk_w�n
+,
+
+59 (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+60 
+__off_t
+ 
+__off�t
+, 
+size_t
+ 
+__bufsize
+), 
+__��d_chk
+)
+
+61 
+__wur
+ 
+	`__w�ljr
+ ("pread called with bigger�ength�han size of "
+
+63 
+ssize_t
+ 
+	`__REDIRECT
+ (
+__��d64_chk_w�n
+,
+
+64 (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+,
+
+65 
+__off64_t
+ 
+__off�t
+, 
+size_t
+ 
+__bufsize
+),
+
+66 
+__��d64_chk
+)
+
+67 
+__wur
+ 
+	`__w�ljr
+ ("pread64 called with bigger�ength�han size of "
+
+70 #i�de�
+__USE_FILE_OFFSET64
+
+
+71 
+__f�tify_fun�i�
+ 
+__wur
+ 
+ssize_t
+
+
+72 
+	$��d
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+, 
+__off_t
+ 
+__off�t
+)
+
+74 i�(
+	`__bos0
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+76 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__nby�s
+))
+
+77  
+	`__��d_chk
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+, 
+	`__bos0
+ (__buf));
+
+79 i��
+__nby�s
+ > 
+	`__bos0
+ (
+__buf
+))
+
+80  
+	`__��d_chk_w�n
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+,
+
+81 
+	`__bos0
+ (
+__buf
+));
+
+83  
+	`__��d_��s
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+);
+
+84 
+	}
+}
+
+86 
+__f�tify_fun�i�
+ 
+__wur
+ 
+ssize_t
+
+
+87 
+	$��d
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+, 
+__off64_t
+ 
+__off�t
+)
+
+89 i�(
+	`__bos0
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+91 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__nby�s
+))
+
+92  
+	`__��d64_chk
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+, 
+	`__bos0
+ (__buf));
+
+94 i��
+__nby�s
+ > 
+	`__bos0
+ (
+__buf
+))
+
+95  
+	`__��d64_chk_w�n
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+,
+
+96 
+	`__bos0
+ (
+__buf
+));
+
+99  
+	`__��d64_��s
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+);
+
+100 
+	}
+}
+
+103 #ifde�
+__USE_LARGEFILE64
+
+
+104 
+__f�tify_fun�i�
+ 
+__wur
+ 
+ssize_t
+
+
+105 
+	$��d64
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__nby�s
+, 
+__off64_t
+ 
+__off�t
+)
+
+107 i�(
+	`__bos0
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+109 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__nby�s
+))
+
+110  
+	`__��d64_chk
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+, 
+	`__bos0
+ (__buf));
+
+112 i��
+__nby�s
+ > 
+	`__bos0
+ (
+__buf
+))
+
+113  
+	`__��d64_chk_w�n
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+,
+
+114 
+	`__bos0
+ (
+__buf
+));
+
+117  
+	`__��d64_��s
+ (
+__fd
+, 
+__buf
+, 
+__nby�s
+, 
+__off�t
+);
+
+118 
+	}
+}
+
+122 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+ || def�ed 
+__USE_XOPEN2K
+
+
+123 
+ssize_t
+ 
+	$__�adl�k_chk
+ (cڡ *
+__��ri�
+ 
+__�th
+,
+
+124 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+,
+
+125 
+size_t
+ 
+__bu�
+)
+
+126 
+__THROW
+ 
+	`__n�nu�
+ ((1, 2)�
+__wur
+;
+
+127 
+ssize_t
+ 
+	`__REDIRECT_NTH
+ (
+__�adl�k_��s
+,
+
+128 (cڡ *
+__��ri�
+ 
+__�th
+,
+
+129 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+), 
+�adl�k
+)
+
+130 
+	`__n�nu�
+ ((1, 2)�
+__wur
+;
+
+131 
+ssize_t
+ 
+	`__REDIRECT_NTH
+ (
+__�adl�k_chk_w�n
+,
+
+132 (cڡ *
+__��ri�
+ 
+__�th
+,
+
+133 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+,
+
+134 
+size_t
+ 
+__bu�
+), 
+__�adl�k_chk
+)
+
+135 
+	`__n�nu�
+ ((1, 2)�
+__wur
+ 
+	`__w�ljr
+ ("readlink called with bigger�ength "
+
+138 
+__f�tify_fun�i�
+ 
+	`__n�nu�
+ ((1, 2)�
+__wur
+ 
+ssize_t
+
+
+139 
+	`__NTH
+ (
+	$�adl�k
+ (cڡ *
+__��ri�
+ 
+__�th
+, *__��ri� 
+__buf
+,
+
+140 
+size_t
+ 
+__�n
+))
+
+142 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+144 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+145  
+	`__�adl�k_chk
+ (
+__�th
+, 
+__buf
+, 
+__�n
+, 
+	`__bos
+ (__buf));
+
+147 i��
+__�n
+ > 
+	`__bos
+ (
+__buf
+))
+
+148  
+	`__�adl�k_chk_w�n
+ (
+__�th
+, 
+__buf
+, 
+__�n
+, 
+	`__bos
+ (__buf));
+
+150  
+	`__�adl�k_��s
+ (
+__�th
+, 
+__buf
+, 
+__�n
+);
+
+151 
+	}
+}
+
+154 #ifde�
+__USE_ATFILE
+
+
+155 
+ssize_t
+ 
+	$__�adl�k�_chk
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__�th
+,
+
+156 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+,
+
+157 
+size_t
+ 
+__bu�
+)
+
+158 
+__THROW
+ 
+	`__n�nu�
+ ((2, 3)�
+__wur
+;
+
+159 
+ssize_t
+ 
+	`__REDIRECT_NTH
+ (
+__�adl�k�_��s
+,
+
+160 (
+__fd
+, cڡ *
+__��ri�
+ 
+__�th
+,
+
+161 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+),
+
+162 
+�adl�k�
+)
+
+163 
+	`__n�nu�
+ ((2, 3)�
+__wur
+;
+
+164 
+ssize_t
+ 
+	`__REDIRECT_NTH
+ (
+__�adl�k�_chk_w�n
+,
+
+165 (
+__fd
+, cڡ *
+__��ri�
+ 
+__�th
+,
+
+166 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+,
+
+167 
+size_t
+ 
+__bu�
+), 
+__�adl�k�_chk
+)
+
+168 
+	`__n�nu�
+ ((2, 3)�
+__wur
+ 
+	`__w�ljr
+ ("readlinkat called with bigger "
+
+172 
+__f�tify_fun�i�
+ 
+	`__n�nu�
+ ((2, 3)�
+__wur
+ 
+ssize_t
+
+
+173 
+	`__NTH
+ (
+	$�adl�k�
+ (
+__fd
+, cڡ *
+__��ri�
+ 
+__�th
+,
+
+174 *
+__��ri�
+ 
+__buf
+, 
+size_t
+ 
+__�n
+))
+
+176 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+178 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+179  
+	`__�adl�k�_chk
+ (
+__fd
+, 
+__�th
+, 
+__buf
+, 
+__�n
+, 
+	`__bos
+ (__buf));
+
+181 i�(
+__�n
+ > 
+	`__bos
+ (
+__buf
+))
+
+182  
+	`__�adl�k�_chk_w�n
+ (
+__fd
+, 
+__�th
+, 
+__buf
+, 
+__�n
+,
+
+183 
+	`__bos
+ (
+__buf
+));
+
+185  
+	`__�adl�k�_��s
+ (
+__fd
+, 
+__�th
+, 
+__buf
+, 
+__�n
+);
+
+186 
+	}
+}
+
+189 
*
+	$__g�cwd_chk
+ (*
+__buf
+, 
+size_t
+ 
+__size
+, size_�
+__bu�
+)
+
+190 
+__THROW
+ 
+__wur
+;
+
+191 
*
+	`__REDIRECT_NTH
+ (
+__g�cwd_��s
+,
+
+192 (*
+__buf
+, 
+size_t
+ 
+__size
+), 
+g�cwd
+�
+__wur
+;
+
+193 
*
+	`__REDIRECT_NTH
+ (
+__g�cwd_chk_w�n
+,
+
+194 (*
+__buf
+, 
+size_t
+ 
+__size
+, size_�
+__bu�
+),
+
+195 
+__g�cwd_chk
+)
+
+196 
+__wur
+ 
+	`__w�ljr
+ ("getcwd caller with bigger�ength�han size of "
+
+199 
+__f�tify_fun�i�
+ 
+__wur
+ *
+
+200 
+	`__NTH
+ (
+	$g�cwd
+ (*
+__buf
+, 
+size_t
+ 
+__size
+))
+
+202 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+204 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__size
+))
+
+205  
+	`__g�cwd_chk
+ (
+__buf
+, 
+__size
+, 
+	`__bos
+ (__buf));
+
+207 i�(
+__size
+ > 
+	`__bos
+ (
+__buf
+))
+
+208  
+	`__g�cwd_chk_w�n
+ (
+__buf
+, 
+__size
+, 
+	`__bos
+ (__buf));
+
+210  
+	`__g�cwd_��s
+ (
+__buf
+, 
+__size
+);
+
+211 
+	}
+}
+
+213 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_XOPEN_EXTENDED
+
+
+214 
*
+	$__g�wd_chk
+ (*
+__buf
+, 
+size_t
+ 
+bu�
+)
+
+215 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+216 
*
+	`__REDIRECT_NTH
+ (
+__g�wd_w�n
+, (*
+__buf
+), 
+g�wd
+)
+
+217 
+	`__n�nu�
+ ((1)�
+__wur
+ 
+	`__w�ljr
+ ("please use getcwd instead,�s getwd "
+
+220 
+__f�tify_fun�i�
+ 
+	`__n�nu�
+ ((1)�
+__��ibu�_d����d__
+ 
+__wur
+ *
+
+221 
+	`__NTH
+ (
+	$g�wd
+ (*
+__buf
+))
+
+223 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+224  
+	`__g�wd_chk
+ (
+__buf
+, 
+	`__bos
+ (__buf));
+
+225  
+	`__g�wd_w�n
+ (
+__buf
+);
+
+226 
+	}
+}
+
+229 
+size_t
+ 
+	$__c�f�r_chk
+ (
+__�me
+, *
+__buf
+, 
+size_t
+ 
+__�n
+,
+
+230 
+size_t
+ 
+__bu�
+�
+__THROW
+;
+
+231 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__c�f�r_��s
+, (
+__�me
+, *
+__buf
+,
+
+232 
+size_t
+ 
+__�n
+), 
+c�f�r
+);
+
+233 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__c�f�r_chk_w�n
+,
+
+234 (
+__�me
+, *
+__buf
+, 
+size_t
+ 
+__�n
+,
+
+235 
+size_t
+ 
+__bu�
+), 
+__c�f�r_chk
+)
+
+236 
+	`__w�ljr
+ ("confstr called with bigger�ength�han size of destination "
+
+239 
+__f�tify_fun�i�
+ 
+size_t
+
+
+240 
+	`__NTH
+ (
+	$c�f�r
+ (
+__�me
+, *
+__buf
+, 
+size_t
+ 
+__�n
+))
+
+242 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+244 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+245  
+	`__c�f�r_chk
+ (
+__�me
+, 
+__buf
+, 
+__�n
+, 
+	`__bos
+ (__buf));
+
+247 i�(
+	`__bos
+ (
+__buf
+�< 
+__�n
+)
+
+248  
+	`__c�f�r_chk_w�n
+ (
+__�me
+, 
+__buf
+, 
+__�n
+, 
+	`__bos
+ (__buf));
+
+250  
+	`__c�f�r_��s
+ (
+__�me
+, 
+__buf
+, 
+__�n
+);
+
+251 
+	}
+}
+
+254 

+	$__g�groups_chk
+ (
+__size
+, 
+__gid_t
+ 
+__li�
+[], 
+size_t
+ 
+__li��n
+)
+
+255 
+__THROW
+ 
+__wur
+;
+
+256 

+	`__REDIRECT_NTH
+ (
+__g�groups_��s
+, (
+__size
+, 
+__gid_t
+ 
+__li�
+[]),
+
+257 
+g�groups
+�
+__wur
+;
+
+258 

+	`__REDIRECT_NTH
+ (
+__g�groups_chk_w�n
+,
+
+259 (
+__size
+, 
+__gid_t
+ 
+__li�
+[], 
+size_t
+ 
+__li��n
+),
+
+260 
+__g�groups_chk
+)
+
+261 
+__wur
+ 
+	`__w�ljr
+ ("getgroups called with bigger group count�han what "
+
+264 
+__f�tify_fun�i�
+ 
+
+265 
+	`__NTH
+ (
+	$g�groups
+ (
+__size
+, 
+__gid_t
+ 
+__li�
+[]))
+
+267 i�(
+	`__bos
+ (
+__li�
+�!�(
+size_t
+) -1)
+
+269 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__size
+) || __size < 0)
+
+270  
+	`__g�groups_chk
+ (
+__size
+, 
+__li�
+, 
+	`__bos
+ (__list));
+
+272 i�(
+__size
+ *  (
+__gid_t
+�> 
+	`__bos
+ (
+__li�
+))
+
+273  
+	`__g�groups_chk_w�n
+ (
+__size
+, 
+__li�
+, 
+	`__bos
+ (__list));
+
+275  
+	`__g�groups_��s
+ (
+__size
+, 
+__li�
+);
+
+276 
+	}
+}
+
+279 

+	$__�y�me_r_chk
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+280 
+size_t
+ 
+__ėl
+�
+__THROW
+ 
+	`__n�nu�
+ ((2));
+
+281 

+	`__REDIRECT_NTH
+ (
+__�y�me_r_��s
+, (
+__fd
+, *
+__buf
+,
+
+282 
+size_t
+ 
+__bu�
+), 
+�y�me_r
+)
+
+283 
+	`__n�nu�
+ ((2));
+
+284 

+	`__REDIRECT_NTH
+ (
+__�y�me_r_chk_w�n
+,
+
+285 (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+,
+
+286 
+size_t
+ 
+__ėl
+), 
+__�y�me_r_chk
+)
+
+287 
+	`__n�nu�
+ ((2)�
+	`__w�ljr
+ ("ttyname_r called with bigger buflen�han "
+
+290 
+__f�tify_fun�i�
+ 
+
+291 
+	`__NTH
+ (
+	$�y�me_r
+ (
+__fd
+, *
+__buf
+, 
+size_t
+ 
+__bu�
+))
+
+293 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+295 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__bu�
+))
+
+296  
+	`__�y�me_r_chk
+ (
+__fd
+, 
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+298 i�(
+__bu�
+ > 
+	`__bos
+ (
+__buf
+))
+
+299  
+	`__�y�me_r_chk_w�n
+ (
+__fd
+, 
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+301  
+	`__�y�me_r_��s
+ (
+__fd
+, 
+__buf
+, 
+__bu�
+);
+
+302 
+	}
+}
+
+305 #i�
+def�ed
+ 
+__USE_REENTRANT
+ || def�ed 
+__USE_POSIX199506
+
+
+306 

+	$__g�log�_r_chk
+ (*
+__buf
+, 
+size_t
+ 
+__bu�
+, size_�
+__ėl
+)
+
+307 
+	`__n�nu�
+ ((1));
+
+308 

+	`__REDIRECT
+ (
+__g�log�_r_��s
+, (*
+__buf
+, 
+size_t
+ 
+__bu�
+),
+
+309 
+g�log�_r
+�
+	`__n�nu�
+ ((1));
+
+310 

+	`__REDIRECT
+ (
+__g�log�_r_chk_w�n
+,
+
+311 (*
+__buf
+, 
+size_t
+ 
+__bu�
+, size_�
+__ėl
+),
+
+312 
+__g�log�_r_chk
+)
+
+313 
+	`__n�nu�
+ ((1)�
+	`__w�ljr
+ ("getlogin_r called with bigger buflen�han "
+
+316 
+__f�tify_fun�i�
+ 
+
+317 
+	$g�log�_r
+ (*
+__buf
+, 
+size_t
+ 
+__bu�
+)
+
+319 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+321 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__bu�
+))
+
+322  
+	`__g�log�_r_chk
+ (
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+324 i�(
+__bu�
+ > 
+	`__bos
+ (
+__buf
+))
+
+325  
+	`__g�log�_r_chk_w�n
+ (
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+327  
+	`__g�log�_r_��s
+ (
+__buf
+, 
+__bu�
+);
+
+328 
+	}
+}
+
+332 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_UNIX98
+
+
+333 

+	$__g�ho��me_chk
+ (*
+__buf
+, 
+size_t
+ 
+__bu�
+, size_�
+__ėl
+)
+
+334 
+__THROW
+ 
+	`__n�nu�
+ ((1));
+
+335 

+	`__REDIRECT_NTH
+ (
+__g�ho��me_��s
+, (*
+__buf
+, 
+size_t
+ 
+__bu�
+),
+
+336 
+g�ho��me
+�
+	`__n�nu�
+ ((1));
+
+337 

+	`__REDIRECT_NTH
+ (
+__g�ho��me_chk_w�n
+,
+
+338 (*
+__buf
+, 
+size_t
+ 
+__bu�
+, size_�
+__ėl
+),
+
+339 
+__g�ho��me_chk
+)
+
+340 
+	`__n�nu�
+ ((1)�
+	`__w�ljr
+ ("gethostname called with bigger buflen�han "
+
+343 
+__f�tify_fun�i�
+ 
+
+344 
+	`__NTH
+ (
+	$g�ho��me
+ (*
+__buf
+, 
+size_t
+ 
+__bu�
+))
+
+346 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+348 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__bu�
+))
+
+349  
+	`__g�ho��me_chk
+ (
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+351 i�(
+__bu�
+ > 
+	`__bos
+ (
+__buf
+))
+
+352  
+	`__g�ho��me_chk_w�n
+ (
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+354  
+	`__g�ho��me_��s
+ (
+__buf
+, 
+__bu�
+);
+
+355 
+	}
+}
+
+359 #i�
+def�ed
+ 
+__USE_BSD
+ || (def�ed 
+__USE_XOPEN
+ && !def�ed 
+__USE_UNIX98
+)
+
+360 

+	$__g�doma��me_chk
+ (*
+__buf
+, 
+size_t
+ 
+__bu�
+, size_�
+__ėl
+)
+
+361 
+__THROW
+ 
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+362 

+	`__REDIRECT_NTH
+ (
+__g�doma��me_��s
+, (*
+__buf
+,
+
+363 
+size_t
+ 
+__bu�
+),
+
+364 
+g�doma��me
+�
+	`__n�nu�
+ ((1)�
+__wur
+;
+
+365 

+	`__REDIRECT_NTH
+ (
+__g�doma��me_chk_w�n
+,
+
+366 (*
+__buf
+, 
+size_t
+ 
+__bu�
+, size_�
+__ėl
+),
+
+367 
+__g�doma��me_chk
+)
+
+368 
+	`__n�nu�
+ ((1)�
+__wur
+ 
+	`__w�ljr
+ ("getdomainname called with bigger "
+
+372 
+__f�tify_fun�i�
+ 
+
+373 
+	`__NTH
+ (
+	$g�doma��me
+ (*
+__buf
+, 
+size_t
+ 
+__bu�
+))
+
+375 i�(
+	`__bos
+ (
+__buf
+�!�(
+size_t
+) -1)
+
+377 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__bu�
+))
+
+378  
+	`__g�doma��me_chk
+ (
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+380 i�(
+__bu�
+ > 
+	`__bos
+ (
+__buf
+))
+
+381  
+	`__g�doma��me_chk_w�n
+ (
+__buf
+, 
+__bu�
+, 
+	`__bos
+ (__buf));
+
+383  
+	`__g�doma��me_��s
+ (
+__buf
+, 
+__bu�
+);
+
+384 
+	}
+}
+
+	@/usr/include/bits/waitflags.h
+
+19 #i�!
+def�ed
+ 
+_SYS_WAIT_H
+ && !def�ed 
+_STDLIB_H
+
+
+25 
+	#WNOHANG
+ 1
+
+	)
+
+26 
+	#WUNTRACED
+ 2
+
+	)
+
+29 
+	#WSTOPPED
+ 2
+
+	)
+
+30 
+	#WEXITED
+ 4
+
+	)
+
+31 
+	#WCONTINUED
+ 8
+
+	)
+
+32 
+	#WNOWAIT
+ 0x01000000
+
+	)
+
+34 
+	#__WNOTHREAD
+ 0x20000000
+
+	)
+
+36 
+	#__WALL
+ 0x40000000
+
+	)
+
+37 
+	#__WCLONE
+ 0x80000000
+
+	)
+
+40 #i�
+def�ed
+ 
+__USE_SVID
+ || def�ed 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+
+
+41 #i�de�
+__ENUM_IDTYPE_T
+
+
+42 
+	#__ENUM_IDTYPE_T
+ 1
+
+	)
+
+46 #unde�
+P_ALL
+
+
+47 #unde�
+P_PID
+
+
+48 #unde�
+P_PGID
+
+
+52 
+	mP_ALL
+,
+
+53 
+	mP_PID
+,
+
+54 
+	mP_PGID
+
+
+55 } 
+	tidty�_t
+;
+
+	@/usr/include/bits/waitstatus.h
+
+19 #i�!
+def�ed
+ 
+_SYS_WAIT_H
+ && !def�ed 
+_STDLIB_H
+
+
+28 
+	#__WEXITSTATUS
+(
+��us
+�(((��us�& 0xff00�>> 8)
+
+	)
+
+31 
+	#__WTERMSIG
+(
+��us
+�((��us�& 0x7f)
+
+	)
+
+34 
+	#__WSTOPSIG
+(
+��us
+�
+	`__WEXITSTATUS
+(��us)
+
+	)
+
+37 
+	#__WIFEXITED
+(
+��us
+�(
+	`__WTERMSIG
+(��us�=�0)
+
+	)
+
+40 
+	#__WIFSIGNALED
+(
+��us
+) \
+
+41 (((sig�d �(((
+��us
+�& 0x7f�+ 1�>> 1�> 0)
+
+	)
+
+44 
+	#__WIFSTOPPED
+(
+��us
+�(((��us�& 0xff�=�0x7f)
+
+	)
+
+48 #ifde�
+WCONTINUED
+
+
+49 
+	#__WIFCONTINUED
+(
+��us
+�((��us�=�
+__W_CONTINUED
+)
+
+	)
+
+53 
+	#__WCOREDUMP
+(
+��us
+�((��us�& 
+__WCOREFLAG
+)
+
+	)
+
+56 
+	#__W_EXITCODE
+(
+�t
+, 
+sig
+�(ԑ�<< 8 | (sig))
+
+	)
+
+57 
+	#__W_STOPCODE
+(
+sig
+�((sig�<< 8 | 0x7f)
+
+	)
+
+58 
+	#__W_CONTINUED
+ 0xffff
+
+	)
+
+59 
+	#__WCOREFLAG
+ 0x80
+
+	)
+
+62 #ifdef 
+__USE_BSD
+
+
+64 
+	~<�d�n.h
+>
+
+66 
+	uwa�
+
+
+68 
+	mw_��us
+;
+
+71 #if 
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+72 
+	m__w_�rmsig
+:7;
+
+73 
+	m__w_c�edump
+:1;
+
+74 
+	m__w_�tcode
+:8;
+
+77 #if 
+__BYTE_ORDER
+ =�
+__BIG_ENDIAN
+
+
+79 
+	m__w_�tcode
+:8;
+
+80 
+	m__w_c�edump
+:1;
+
+81 
+	m__w_�rmsig
+:7;
+
+83 } 
+	m__wa�_�rm��ed
+;
+
+86 #if 
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+87 
+	m__w_��v�
+:8;
+
+88 
+	m__w_��sig
+:8;
+
+91 #if 
+__BYTE_ORDER
+ =�
+__BIG_ENDIAN
+
+
+93 
+	m__w_��sig
+:8;
+
+94 
+	m__w_��v�
+:8;
+
+96 } 
+	m__wa�_�ݳd
+;
+
+99 
+	#w_�rmsig
+ 
+__wa�_�rm��ed
+.
+__w_�rmsig
+
+
+	)
+
+100 
+	#w_c�edump
+ 
+__wa�_�rm��ed
+.
+__w_c�edump
+
+
+	)
+
+101 
+	#w_�tcode
+ 
+__wa�_�rm��ed
+.
+__w_�tcode
+
+
+	)
+
+102 
+	#w_��sig
+ 
+__wa�_�ݳd
+.
+__w_��sig
+
+
+	)
+
+103 
+	#w_��v�
+ 
+__wa�_�ݳd
+.
+__w_��v�
+
+
+	)
+
+	@/usr/include/bits/wordsize.h
+
+3 #i�
+def�ed
+ 
+__x86_64__
+ && !def�ed 
+__ILP32__
+
+
+4 
+	#__WORDSIZE
+ 64
+
+	)
+
+6 
+	#__WORDSIZE
+ 32
+
+	)
+
+9 #ifde�
+__x86_64__
+
+
+10 
+	#__WORDSIZE_TIME64_COMPAT32
+ 1
+
+	)
+
+12 
+	#__SYSCALL_WORDSIZE
+ 64
+
+	)
+
+	@/usr/include/endian.h
+
+18 #i�def 
+_ENDIAN_H
+
+
+19 
+	#_ENDIAN_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+31 
+	#__LITTLE_ENDIAN
+ 1234
+
+	)
+
+32 
+	#__BIG_ENDIAN
+ 4321
+
+	)
+
+33 
+	#__PDP_ENDIAN
+ 3412
+
+	)
+
+36 
+	~<b�s/�d�n.h
+>
+
+40 #i�de�
+__FLOAT_WORD_ORDER
+
+
+41 
+	#__FLOAT_WORD_ORDER
+ 
+__BYTE_ORDER
+
+
+	)
+
+44 #ifdef 
+__USE_BSD
+
+
+45 
+	#LITTLE_ENDIAN
+ 
+__LITTLE_ENDIAN
+
+
+	)
+
+46 
+	#BIG_ENDIAN
+ 
+__BIG_ENDIAN
+
+
+	)
+
+47 
+	#PDP_ENDIAN
+ 
+__PDP_ENDIAN
+
+
+	)
+
+48 
+	#BYTE_ORDER
+ 
+__BYTE_ORDER
+
+
+	)
+
+51 #i�
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+52 
+	#__LONG_LONG_PAIR
+(
+HI
+, 
+LO
+�LO, 
+	)
+HI
+
+53 #�i�
+__BYTE_ORDER
+ =�
+__BIG_ENDIAN
+
+
+54 
+	#__LONG_LONG_PAIR
+(
+HI
+, 
+LO
+�HI, 
+	)
+LO
+
+58 #i�
+def�ed
+ 
+__USE_BSD
+ && !def�ed 
+__ASSEMBLER__
+
+
+60 
+	~<b�s/by�sw�.h
+>
+
+62 #i�
+__BYTE_ORDER
+ =�
+__LITTLE_ENDIAN
+
+
+63 
+	#htobe16
+(
+x
+�
+	`__bsw�_16
+ (x)
+
+	)
+
+64 
+	#ht�e16
+(
+x
+�(x)
+
+	)
+
+65 
+	#be16toh
+(
+x
+�
+	`__bsw�_16
+ (x)
+
+	)
+
+66 
+	#�16toh
+(
+x
+�(x)
+
+	)
+
+68 
+	#htobe32
+(
+x
+�
+	`__bsw�_32
+ (x)
+
+	)
+
+69 
+	#ht�e32
+(
+x
+�(x)
+
+	)
+
+70 
+	#be32toh
+(
+x
+�
+	`__bsw�_32
+ (x)
+
+	)
+
+71 
+	#�32toh
+(
+x
+�(x)
+
+	)
+
+73 
+	#htobe64
+(
+x
+�
+	`__bsw�_64
+ (x)
+
+	)
+
+74 
+	#ht�e64
+(
+x
+�(x)
+
+	)
+
+75 
+	#be64toh
+(
+x
+�
+	`__bsw�_64
+ (x)
+
+	)
+
+76 
+	#�64toh
+(
+x
+�(x)
+
+	)
+
+79 
+	#htobe16
+(
+x
+�(x)
+
+	)
+
+80 
+	#ht�e16
+(
+x
+�
+	`__bsw�_16
+ (x)
+
+	)
+
+81 
+	#be16toh
+(
+x
+�(x)
+
+	)
+
+82 
+	#�16toh
+(
+x
+�
+	`__bsw�_16
+ (x)
+
+	)
+
+84 
+	#htobe32
+(
+x
+�(x)
+
+	)
+
+85 
+	#ht�e32
+(
+x
+�
+	`__bsw�_32
+ (x)
+
+	)
+
+86 
+	#be32toh
+(
+x
+�(x)
+
+	)
+
+87 
+	#�32toh
+(
+x
+�
+	`__bsw�_32
+ (x)
+
+	)
+
+89 
+	#htobe64
+(
+x
+�(x)
+
+	)
+
+90 
+	#ht�e64
+(
+x
+�
+	`__bsw�_64
+ (x)
+
+	)
+
+91 
+	#be64toh
+(
+x
+�(x)
+
+	)
+
+92 
+	#�64toh
+(
+x
+�
+	`__bsw�_64
+ (x)
+
+	)
+
+	@/usr/include/features.h
+
+18 #i�def 
+_FEATURES_H
+
+
+19 
+	#_FEATURES_H
+ 1
+
+	)
+
+101 #unde�
+__USE_ISOC11
+
+
+102 #unde�
+__USE_ISOC99
+
+
+103 #unde�
+__USE_ISOC95
+
+
+104 #unde�
+__USE_ISOCXX11
+
+
+105 #unde�
+__USE_POSIX
+
+
+106 #unde�
+__USE_POSIX2
+
+
+107 #unde�
+__USE_POSIX199309
+
+
+108 #unde�
+__USE_POSIX199506
+
+
+109 #unde�
+__USE_XOPEN
+
+
+110 #unde�
+__USE_XOPEN_EXTENDED
+
+
+111 #unde�
+__USE_UNIX98
+
+
+112 #unde�
+__USE_XOPEN2K
+
+
+113 #unde�
+__USE_XOPEN2KXSI
+
+
+114 #unde�
+__USE_XOPEN2K8
+
+
+115 #unde�
+__USE_XOPEN2K8XSI
+
+
+116 #unde�
+__USE_LARGEFILE
+
+
+117 #unde�
+__USE_LARGEFILE64
+
+
+118 #unde�
+__USE_FILE_OFFSET64
+
+
+119 #unde�
+__USE_BSD
+
+
+120 #unde�
+__USE_SVID
+
+
+121 #unde�
+__USE_MISC
+
+
+122 #unde�
+__USE_ATFILE
+
+
+123 #unde�
+__USE_GNU
+
+
+124 #unde�
+__USE_REENTRANT
+
+
+125 #unde�
+__USE_FORTIFY_LEVEL
+
+
+126 #unde�
+__KERNEL_STRICT_NAMES
+
+
+130 #i�de�
+_LOOSE_KERNEL_NAMES
+
+
+131 
+	#__KERNEL_STRICT_NAMES
+
+
+	)
+
+141 #i�
+def�ed
+ 
+__GNUC__
+ && def�ed 
+__GNUC_MINOR__
+
+
+142 
+	#__GNUC_PREREQ
+(
+maj
+, 
+m�
+) \
+
+143 ((
+__GNUC__
+ << 16�+ 
+__GNUC_MINOR__
+ >�((
+maj
+�<< 16�+ (
+m�
+))
+
+	)
+
+145 
+	#__GNUC_PREREQ
+(
+maj
+, 
+m�
+�0
+
+	)
+
+150 #ifde�
+_GNU_SOURCE
+
+
+151 #unde�
+_ISOC95_SOURCE
+
+
+152 
+	#_ISOC95_SOURCE
+ 1
+
+	)
+
+153 #unde�
+_ISOC99_SOURCE
+
+
+154 
+	#_ISOC99_SOURCE
+ 1
+
+	)
+
+155 #unde�
+_ISOC11_SOURCE
+
+
+156 
+	#_ISOC11_SOURCE
+ 1
+
+	)
+
+157 #unde�
+_POSIX_SOURCE
+
+
+158 
+	#_POSIX_SOURCE
+ 1
+
+	)
+
+159 #unde�
+_POSIX_C_SOURCE
+
+
+160 
+	#_POSIX_C_SOURCE
+ 200809L
+
+	)
+
+161 #unde�
+_XOPEN_SOURCE
+
+
+162 
+	#_XOPEN_SOURCE
+ 700
+
+	)
+
+163 #unde�
+_XOPEN_SOURCE_EXTENDED
+
+
+164 
+	#_XOPEN_SOURCE_EXTENDED
+ 1
+
+	)
+
+165 #unde�
+_LARGEFILE64_SOURCE
+
+
+166 
+	#_LARGEFILE64_SOURCE
+ 1
+
+	)
+
+167 #unde�
+_DEFAULT_SOURCE
+
+
+168 
+	#_DEFAULT_SOURCE
+ 1
+
+	)
+
+169 #unde�
+_BSD_SOURCE
+
+
+170 
+	#_BSD_SOURCE
+ 1
+
+	)
+
+171 #unde�
+_SVID_SOURCE
+
+
+172 
+	#_SVID_SOURCE
+ 1
+
+	)
+
+173 #unde�
+_ATFILE_SOURCE
+
+
+174 
+	#_ATFILE_SOURCE
+ 1
+
+	)
+
+179 #i�(
+def�ed
+ 
+_DEFAULT_SOURCE
+ \
+
+180 || (!
+def�ed
+ 
+	g__STRICT_ANSI__
+ \
+
+181 && !
+def�ed
+ 
+	g_ISOC99_SOURCE
+ \
+
+182 && !
+def�ed
+ 
+	g_POSIX_SOURCE
+ && !def�ed 
+	g_POSIX_C_SOURCE
+ \
+
+183 && !
+def�ed
+ 
+	g_XOPEN_SOURCE
+ \
+
+184 && !
+def�ed
+ 
+	g_BSD_SOURCE
+ && !def�ed 
+	g_SVID_SOURCE
+))
+
+185 #unde�
+_DEFAULT_SOURCE
+
+
+186 
+	#_DEFAULT_SOURCE
+ 1
+
+	)
+
+187 #unde�
+_BSD_SOURCE
+
+
+188 
+	#_BSD_SOURCE
+ 1
+
+	)
+
+189 #unde�
+_SVID_SOURCE
+
+
+190 
+	#_SVID_SOURCE
+ 1
+
+	)
+
+194 #i�(
+def�ed
+ 
+_ISOC11_SOURCE
+ \
+
+195 || (
+def�ed
+ 
+	g__STDC_VERSION__
+ && __STDC_VERSION__ >= 201112L))
+
+196 
+	#__USE_ISOC11
+ 1
+
+	)
+
+200 #i�(
+def�ed
+ 
+_ISOC99_SOURCE
+ || def�ed 
+_ISOC11_SOURCE
+ \
+
+201 || (
+def�ed
+ 
+__STDC_VERSION__
+ && __STDC_VERSION__ >= 199901L))
+
+202 
+	#__USE_ISOC99
+ 1
+
+	)
+
+206 #i�(
+def�ed
+ 
+_ISOC99_SOURCE
+ || def�ed 
+_ISOC11_SOURCE
+ \
+
+207 || (
+def�ed
+ 
+__STDC_VERSION__
+ && __STDC_VERSION__ >= 199409L))
+
+208 
+	#__USE_ISOC95
+ 1
+
+	)
+
+215 #i�((
+def�ed
+ 
+__�lu�lus
+ && __cplusplus >= 201103L) \
+
+216 || 
+def�ed
+ 
+__GXX_EXPERIMENTAL_CXX0X__
+)
+
+217 
+	#__USE_ISOCXX11
+ 1
+
+	)
+
+223 #ifde�
+_DEFAULT_SOURCE
+
+
+224 #i�!
+def�ed
+ 
+_POSIX_SOURCE
+ && !def�ed 
+_POSIX_C_SOURCE
+
+
+225 
+	#__USE_POSIX_IMPLICITLY
+ 1
+
+	)
+
+227 #unde�
+_POSIX_SOURCE
+
+
+228 
+	#_POSIX_SOURCE
+ 1
+
+	)
+
+229 #unde�
+_POSIX_C_SOURCE
+
+
+230 
+	#_POSIX_C_SOURCE
+ 200809L
+
+	)
+
+232 #i�((!
+def�ed
+ 
+__STRICT_ANSI__
+ || (
+_XOPEN_SOURCE
+ - 0) >= 500) && \
+
+233 !
+def�ed
+ 
+_POSIX_SOURCE
+ && !def�ed 
+_POSIX_C_SOURCE
+)
+
+234 
+	#_POSIX_SOURCE
+ 1
+
+	)
+
+235 #i�
+def�ed
+ 
+_XOPEN_SOURCE
+ && (_XOPEN_SOURCE - 0) < 500
+
+236 
+	#_POSIX_C_SOURCE
+ 2
+
+	)
+
+237 #�i�
+def�ed
+ 
+_XOPEN_SOURCE
+ && (_XOPEN_SOURCE - 0) < 600
+
+238 
+	#_POSIX_C_SOURCE
+ 199506L
+
+	)
+
+239 #�i�
+def�ed
+ 
+_XOPEN_SOURCE
+ && (_XOPEN_SOURCE - 0) < 700
+
+240 
+	#_POSIX_C_SOURCE
+ 200112L
+
+	)
+
+242 
+	#_POSIX_C_SOURCE
+ 200809L
+
+	)
+
+244 
+	#__USE_POSIX_IMPLICITLY
+ 1
+
+	)
+
+247 #i�
+def�ed
+ 
+_POSIX_SOURCE
+ || 
+_POSIX_C_SOURCE
+ >�1 || def�ed 
+_XOPEN_SOURCE
+
+
+248 
+	#__USE_POSIX
+ 1
+
+	)
+
+251 #i�
+def�ed
+ 
+_POSIX_C_SOURCE
+ && _POSIX_C_SOURCE >�2 || def�ed 
+_XOPEN_SOURCE
+
+
+252 
+	#__USE_POSIX2
+ 1
+
+	)
+
+255 #i�(
+_POSIX_C_SOURCE
+ - 0) >= 199309L
+
+256 
+	#__USE_POSIX199309
+ 1
+
+	)
+
+259 #i�(
+_POSIX_C_SOURCE
+ - 0) >= 199506L
+
+260 
+	#__USE_POSIX199506
+ 1
+
+	)
+
+263 #i�(
+_POSIX_C_SOURCE
+ - 0) >= 200112L
+
+264 
+	#__USE_XOPEN2K
+ 1
+
+	)
+
+265 #unde�
+__USE_ISOC95
+
+
+266 
+	#__USE_ISOC95
+ 1
+
+	)
+
+267 #unde�
+__USE_ISOC99
+
+
+268 
+	#__USE_ISOC99
+ 1
+
+	)
+
+271 #i�(
+_POSIX_C_SOURCE
+ - 0) >= 200809L
+
+272 
+	#__USE_XOPEN2K8
+ 1
+
+	)
+
+273 #unde�
+_ATFILE_SOURCE
+
+
+274 
+	#_ATFILE_SOURCE
+ 1
+
+	)
+
+277 #ifdef 
+_XOPEN_SOURCE
+
+
+278 
+	#__USE_XOPEN
+ 1
+
+	)
+
+279 #i�(
+_XOPEN_SOURCE
+ - 0) >= 500
+
+280 
+	#__USE_XOPEN_EXTENDED
+ 1
+
+	)
+
+281 
+	#__USE_UNIX98
+ 1
+
+	)
+
+282 #unde�
+_LARGEFILE_SOURCE
+
+
+283 
+	#_LARGEFILE_SOURCE
+ 1
+
+	)
+
+284 #i�(
+_XOPEN_SOURCE
+ - 0) >= 600
+
+285 #i�(
+_XOPEN_SOURCE
+ - 0) >= 700
+
+286 
+	#__USE_XOPEN2K8
+ 1
+
+	)
+
+287 
+	#__USE_XOPEN2K8XSI
+ 1
+
+	)
+
+289 
+	#__USE_XOPEN2K
+ 1
+
+	)
+
+290 
+	#__USE_XOPEN2KXSI
+ 1
+
+	)
+
+291 #unde�
+__USE_ISOC95
+
+
+292 
+	#__USE_ISOC95
+ 1
+
+	)
+
+293 #unde�
+__USE_ISOC99
+
+
+294 
+	#__USE_ISOC99
+ 1
+
+	)
+
+297 #ifde�
+_XOPEN_SOURCE_EXTENDED
+
+
+298 
+	#__USE_XOPEN_EXTENDED
+ 1
+
+	)
+
+303 #ifde�
+_LARGEFILE_SOURCE
+
+
+304 
+	#__USE_LARGEFILE
+ 1
+
+	)
+
+307 #ifde�
+_LARGEFILE64_SOURCE
+
+
+308 
+	#__USE_LARGEFILE64
+ 1
+
+	)
+
+311 #i�
+def�ed
+ 
+_FILE_OFFSET_BITS
+ && _FILE_OFFSET_BITS == 64
+
+312 
+	#__USE_FILE_OFFSET64
+ 1
+
+	)
+
+315 #i�
+def�ed
+ 
+_BSD_SOURCE
+ || def�ed 
+_SVID_SOURCE
+
+
+316 
+	#__USE_MISC
+ 1
+
+	)
+
+319 #ifdef 
+_BSD_SOURCE
+
+
+320 
+	#__USE_BSD
+ 1
+
+	)
+
+323 #ifdef 
+_SVID_SOURCE
+
+
+324 
+	#__USE_SVID
+ 1
+
+	)
+
+327 #ifdef 
+_ATFILE_SOURCE
+
+
+328 
+	#__USE_ATFILE
+ 1
+
+	)
+
+331 #ifdef 
+_GNU_SOURCE
+
+
+332 
+	#__USE_GNU
+ 1
+
+	)
+
+335 #i�
+def�ed
+ 
+_REENTRANT
+ || def�ed 
+_THREAD_SAFE
+
+
+336 
+	#__USE_REENTRANT
+ 1
+
+	)
+
+339 #i�
+def�ed
+ 
+_FORTIFY_SOURCE
+ && _FORTIFY_SOURCE > 0 \
+
+340 && 
+__GNUC_PREREQ
+ (4, 1�&& 
+def�ed
+ 
+	g__OPTIMIZE__
+ && __OPTIMIZE__ > 0
+
+341 #i�
+_FORTIFY_SOURCE
+ > 1
+
+342 
+	#__USE_FORTIFY_LEVEL
+ 2
+
+	)
+
+344 
+	#__USE_FORTIFY_LEVEL
+ 1
+
+	)
+
+347 
+	#__USE_FORTIFY_LEVEL
+ 0
+
+	)
+
+352 
+	~<�dc-�edef.h
+>
+
+360 #unde�
+__GNU_LIBRARY__
+
+
+361 
+	#__GNU_LIBRARY__
+ 6
+
+	)
+
+365 
+	#__GLIBC__
+ 2
+
+	)
+
+366 
+	#__GLIBC_MINOR__
+ 19
+
+	)
+
+368 
+	#__GLIBC_PREREQ
+(
+maj
+, 
+m�
+) \
+
+369 ((
+__GLIBC__
+ << 16�+ 
+__GLIBC_MINOR__
+ >�((
+maj
+�<< 16�+ (
+m�
+))
+
+	)
+
+372 #i�de�
+__ASSEMBLER__
+
+
+373 #i�de�
+_SYS_CDEFS_H
+
+
+374 
+	~<sys/cdefs.h
+>
+
+379 #i�
+def�ed
+ 
+__USE_FILE_OFFSET64
+ && !def�ed 
+__REDIRECT
+
+
+380 
+	#__USE_LARGEFILE
+ 1
+
+	)
+
+381 
+	#__USE_LARGEFILE64
+ 1
+
+	)
+
+387 #i�
+__GNUC_PREREQ
+ (2, 7�&& 
+def�ed
+ 
+__OPTIMIZE__
+ \
+
+388 && !
+def�ed
+ 
+	g__OPTIMIZE_SIZE__
+ && !def�ed 
+	g__NO_INLINE__
+ \
+
+389 && 
+def�ed
+ 
+	g__ex��_�l�e
+
+
+390 
+	#__USE_EXTERN_INLINES
+ 1
+
+	)
+
+398 
+	~<gnu/�ubs.h
+>
+
+	@/usr/include/libio.h
+
+28 #i�de�
+_IO_STDIO_H
+
+
+29 
+	#_IO_STDIO_H
+
+
+	)
+
+31 
+	~<_G_c�fig.h
+>
+
+33 
+	#_IO_�os_t
+ 
+_G_�os_t
+
+
+	)
+
+34 
+	#_IO_�os64_t
+ 
+_G_�os64_t
+
+
+	)
+
+35 
+	#_IO_size_t
+ 
+size_t
+
+
+	)
+
+36 
+	#_IO_ssize_t
+ 
+__ssize_t
+
+
+	)
+
+37 
+	#_IO_off_t
+ 
+__off_t
+
+
+	)
+
+38 
+	#_IO_off64_t
+ 
+__off64_t
+
+
+	)
+
+39 
+	#_IO_pid_t
+ 
+__pid_t
+
+
+	)
+
+40 
+	#_IO_uid_t
+ 
+__uid_t
+
+
+	)
+
+41 
+	#_IO_ic�v_t
+ 
+_G_ic�v_t
+
+
+	)
+
+42 
+	#_IO_HAVE_ST_BLKSIZE
+ 
+_G_HAVE_ST_BLKSIZE
+
+
+	)
+
+43 
+	#_IO_BUFSIZ
+ 
+_G_BUFSIZ
+
+
+	)
+
+44 
+	#_IO_va_li�
+ 
+_G_va_li�
+
+
+	)
+
+45 
+	#_IO_w�t_t
+ 
+w�t_t
+
+
+	)
+
+48 
+	#__�ed___va_li�
+
+
+	)
+
+49 
+	~<�d�g.h
+>
+
+50 #ifde�
+__GNUC_VA_LIST
+
+
+51 #unde�
+_IO_va_li�
+
+
+52 
+	#_IO_va_li�
+ 
+__gnuc_va_li�
+
+
+	)
+
+55 #i�de�
+__P
+
+
+56 
+	~<sys/cdefs.h
+>
+
+59 
+	#_IO_UNIFIED_JUMPTABLES
+ 1
+
+	)
+
+61 #i�de�
+EOF
+
+
+62 
+	#EOF
+ (-1)
+
+	)
+
+64 #i�de�
+NULL
+
+
+65 #i�
+def�ed
+ 
+__GNUG__
+ && \
+
+66 (
+	g__GNUC__
+ > 2 || (__GNUC__ =�2 && 
+__GNUC_MINOR__
+ >= 8))
+
+67 
+	#NULL
+ (
+__nu�
+)
+
+	)
+
+69 #i�!
+def�ed
+(
+__�lu�lus
+)
+
+70 
+	#NULL
+ ((*)0)
+
+	)
+
+72 
+	#NULL
+ (0)
+
+	)
+
+77 
+	#_IOS_INPUT
+ 1
+
+	)
+
+78 
+	#_IOS_OUTPUT
+ 2
+
+	)
+
+79 
+	#_IOS_ATEND
+ 4
+
+	)
+
+80 
+	#_IOS_APPEND
+ 8
+
+	)
+
+81 
+	#_IOS_TRUNC
+ 16
+
+	)
+
+82 
+	#_IOS_NOCREATE
+ 32
+
+	)
+
+83 
+	#_IOS_NOREPLACE
+ 64
+
+	)
+
+84 
+	#_IOS_BIN
+ 128
+
+	)
+
+92 
+	#_IO_MAGIC
+ 0xFBAD0000
+
+	)
+
+93 
+	#_OLD_STDIO_MAGIC
+ 0xFABC0000
+
+	)
+
+94 
+	#_IO_MAGIC_MASK
+ 0xFFFF0000
+
+	)
+
+95 
+	#_IO_USER_BUF
+ 1
+
+	)
+
+96 
+	#_IO_UNBUFFERED
+ 2
+
+	)
+
+97 
+	#_IO_NO_READS
+ 4
+
+	)
+
+98 
+	#_IO_NO_WRITES
+ 8
+
+	)
+
+99 
+	#_IO_EOF_SEEN
+ 0x10
+
+	)
+
+100 
+	#_IO_ERR_SEEN
+ 0x20
+
+	)
+
+101 
+	#_IO_DELETE_DONT_CLOSE
+ 0x40
+
+	)
+
+102 
+	#_IO_LINKED
+ 0x80
+
+	)
+
+103 
+	#_IO_IN_BACKUP
+ 0x100
+
+	)
+
+104 
+	#_IO_LINE_BUF
+ 0x200
+
+	)
+
+105 
+	#_IO_TIED_PUT_GET
+ 0x400
+
+	)
+
+106 
+	#_IO_CURRENTLY_PUTTING
+ 0x800
+
+	)
+
+107 
+	#_IO_IS_APPENDING
+ 0x1000
+
+	)
+
+108 
+	#_IO_IS_FILEBUF
+ 0x2000
+
+	)
+
+109 
+	#_IO_BAD_SEEN
+ 0x4000
+
+	)
+
+110 
+	#_IO_USER_LOCK
+ 0x8000
+
+	)
+
+112 
+	#_IO_FLAGS2_MMAP
+ 1
+
+	)
+
+113 
+	#_IO_FLAGS2_NOTCANCEL
+ 2
+
+	)
+
+114 #ifde�
+_LIBC
+
+
+115 
+	#_IO_FLAGS2_FORTIFY
+ 4
+
+	)
+
+117 
+	#_IO_FLAGS2_USER_WBUF
+ 8
+
+	)
+
+118 #ifde�
+_LIBC
+
+
+119 
+	#_IO_FLAGS2_SCANF_STD
+ 16
+
+	)
+
+120 
+	#_IO_FLAGS2_NOCLOSE
+ 32
+
+	)
+
+121 
+	#_IO_FLAGS2_CLOEXEC
+ 64
+
+	)
+
+125 
+	#_IO_SKIPWS
+ 01
+
+	)
+
+126 
+	#_IO_LEFT
+ 02
+
+	)
+
+127 
+	#_IO_RIGHT
+ 04
+
+	)
+
+128 
+	#_IO_INTERNAL
+ 010
+
+	)
+
+129 
+	#_IO_DEC
+ 020
+
+	)
+
+130 
+	#_IO_OCT
+ 040
+
+	)
+
+131 
+	#_IO_HEX
+ 0100
+
+	)
+
+132 
+	#_IO_SHOWBASE
+ 0200
+
+	)
+
+133 
+	#_IO_SHOWPOINT
+ 0400
+
+	)
+
+134 
+	#_IO_UPPERCASE
+ 01000
+
+	)
+
+135 
+	#_IO_SHOWPOS
+ 02000
+
+	)
+
+136 
+	#_IO_SCIENTIFIC
+ 04000
+
+	)
+
+137 
+	#_IO_FIXED
+ 010000
+
+	)
+
+138 
+	#_IO_UNITBUF
+ 020000
+
+	)
+
+139 
+	#_IO_STDIO
+ 040000
+
+	)
+
+140 
+	#_IO_DONT_CLOSE
+ 0100000
+
+	)
+
+141 
+	#_IO_BOOLALPHA
+ 0200000
+
+	)
+
+144 
+_IO_jump_t
+; 
+	g_IO_FILE
+;
+
+147 #ifde�
+_IO_MTSAFE_IO
+
+
+148 #i�
+def�ed
+ 
+__GLIBC__
+ && __GLIBC__ >= 2
+
+149 
+	~<b�s/�dio-lock.h
+>
+
+154 
+	t_IO_lock_t
+;
+
+160 
+	s_IO_m�k�
+ {
+
+161 
+_IO_m�k�
+ *
+	m_�xt
+;
+
+162 
+_IO_FILE
+ *
+	m_sbuf
+;
+
+166 
+	m_pos
+;
+
+168 
+�t_��ampos
+(
+��ampos
+ 
+�
+�{ 
+	m_�os
+ = sp; }
+
+169 
+�t_off�t
+(
+off�t
+�{ 
+	m_pos
+ = off�t; 
+	m_�os
+ = (
+��ampos
+)(-2); }
+
+170 
+	mpublic
+:
+
+171 
+��amm�k�
+(
+��ambuf
+ *
+sb
+);
+
+172 ~
+��amm�k�
+();
+
+173 
+�v�g
+(�{  
+	m_�os
+ == -2; }
+
+174 
+d��
+(
+��amm�k�
+&);
+
+175 
+d��
+();
+
+180 
+	e__codecvt_�su�
+
+
+182 
+	m__codecvt_ok
+,
+
+183 
+	m__codecvt_���l
+,
+
+184 
+	m__codecvt_�r�
+,
+
+185 
+	m__codecvt_noc�v
+
+
+188 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_GLIBCPP_USE_WCHAR_T
+
+
+191 
+	s_IO_codecvt
+
+
+193 (*
+	m__codecvt_de�r
+�(
+	m_IO_codecvt
+ *);
+
+194 
+__codecvt_�su�
+ (*
+__codecvt_do_out
+�(
+	m_IO_codecvt
+ *,
+
+195 
+	m__mb��e_t
+ *,
+
+196 cڡ 
+	mwch�_t
+ *,
+
+197 cڡ 
+	mwch�_t
+ *,
+
+198 cڡ 
+	mwch�_t
+ **, *,
+
+200 
+__codecvt_�su�
+ (*
+__codecvt_do_unshi�
+�(
+	m_IO_codecvt
+ *,
+
+201 
+	m__mb��e_t
+ *, *,
+
+203 
+__codecvt_�su�
+ (*
+__codecvt_do_�
+�(
+	m_IO_codecvt
+ *,
+
+204 
+	m__mb��e_t
+ *,
+
+206 cڡ **, 
+	mwch�_t
+ *,
+
+207 
+	mwch�_t
+ *, wchar_t **);
+
+208 (*
+	m__codecvt_do_�cod�g
+�(
+	m_IO_codecvt
+ *);
+
+209 (*
+	m__codecvt_do_�ways_noc�v
+�(
+	m_IO_codecvt
+ *);
+
+210 (*
+	m__codecvt_do_�ngth
+�(
+	m_IO_codecvt
+ *, 
+	m__mb��e_t
+ *,
+
+211 cڡ *, cڡ *, 
+	m_IO_size_t
+);
+
+212 (*
+	m__codecvt_do_max_�ngth
+�(
+	m_IO_codecvt
+ *);
+
+214 
+_IO_ic�v_t
+ 
+	m__cd_�
+;
+
+215 
+_IO_ic�v_t
+ 
+	m__cd_out
+;
+
+219 
+	s_IO_wide_d�a
+
+
+221 
+wch�_t
+ *
+	m_IO_�ad_�r
+;
+
+222 
+wch�_t
+ *
+	m_IO_�ad_�d
+;
+
+223 
+wch�_t
+ *
+	m_IO_�ad_ba�
+;
+
+224 
+wch�_t
+ *
+	m_IO_wr�e_ba�
+;
+
+225 
+wch�_t
+ *
+	m_IO_wr�e_�r
+;
+
+226 
+wch�_t
+ *
+	m_IO_wr�e_�d
+;
+
+227 
+wch�_t
+ *
+	m_IO_buf_ba�
+;
+
+228 
+wch�_t
+ *
+	m_IO_buf_�d
+;
+
+230 
+wch�_t
+ *
+	m_IO_�ve_ba�
+;
+
+231 
+wch�_t
+ *
+	m_IO_backup_ba�
+;
+
+233 
+wch�_t
+ *
+	m_IO_�ve_�d
+;
+
+235 
+__mb��e_t
+ 
+	m_IO_��e
+;
+
+236 
+__mb��e_t
+ 
+	m_IO_ϡ_��e
+;
+
+237 
+_IO_codecvt
+ 
+	m_codecvt
+;
+
+239 
+wch�_t
+ 
+	m_sh�tbuf
+[1];
+
+241 cڡ 
+_IO_jump_t
+ *
+	m_wide_v�b�
+;
+
+245 
+	s_IO_FILE
+ {
+
+246 
+	m_�ags
+;
+
+247 
+	#_IO_f�e_�ags
+ 
+_�ags
+
+
+	)
+
+251 * 
+	m_IO_�ad_�r
+;
+
+252 * 
+	m_IO_�ad_�d
+;
+
+253 * 
+	m_IO_�ad_ba�
+;
+
+254 * 
+	m_IO_wr�e_ba�
+;
+
+255 * 
+	m_IO_wr�e_�r
+;
+
+256 * 
+	m_IO_wr�e_�d
+;
+
+257 * 
+	m_IO_buf_ba�
+;
+
+258 * 
+	m_IO_buf_�d
+;
+
+260 *
+	m_IO_�ve_ba�
+;
+
+261 *
+	m_IO_backup_ba�
+;
+
+262 *
+	m_IO_�ve_�d
+;
+
+264 
+_IO_m�k�
+ *
+	m_m�k�s
+;
+
+266 
+_IO_FILE
+ *
+	m_cha�
+;
+
+268 
+	m_f��o
+;
+
+270 
+	m_blksize
+;
+
+272 
+	m_�ags2
+;
+
+274 
+_IO_off_t
+ 
+	m_�d_off�t
+;
+
+276 
+	#__HAVE_COLUMN
+
+
+	)
+
+278 
+	m_cur_c�umn
+;
+
+279 sig�d 
+	m_v�b�_off�t
+;
+
+280 
+	m_sh�tbuf
+[1];
+
+284 
+_IO_lock_t
+ *
+	m_lock
+;
+
+285 #ifde�
+_IO_USE_OLD_IO_FILE
+
+
+288 
+	s_IO_FILE_com��e
+
+
+290 
+_IO_FILE
+ 
+	m_f�e
+;
+
+292 #i�
+def�ed
+ 
+_G_IO_IO_FILE_VERSION
+ && _G_IO_IO_FILE_VERSION == 0x20001
+
+293 
+_IO_off64_t
+ 
+	m_off�t
+;
+
+294 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_GLIBCPP_USE_WCHAR_T
+
+
+296 
+_IO_codecvt
+ *
+	m_codecvt
+;
+
+297 
+_IO_wide_d�a
+ *
+	m_wide_d�a
+;
+
+298 
+_IO_FILE
+ *
+	m_䓻s_li�
+;
+
+299 *
+	m_䓻s_buf
+;
+
+300 
+size_t
+ 
+	m_䓻s_size
+;
+
+302 *
+	m__�d1
+;
+
+303 *
+	m__�d2
+;
+
+304 *
+	m__�d3
+;
+
+305 *
+	m__�d4
+;
+
+306 
+size_t
+ 
+	m__�d5
+;
+
+308 
+	m_mode
+;
+
+310 
+	m_unu�d2
+[15 *  (�- 4 *  (*�-  (
+size_t
+)];
+
+314 #i�de�
+__�lu�lus
+
+
+315 
+_IO_FILE
+ 
+	t_IO_FILE
+;
+
+318 
+	g_IO_FILE_�us
+;
+
+320 

+_IO_FILE_�us
+ 
+_IO_2_1_�d�_
+;
+
+321 

+_IO_FILE_�us
+ 
+_IO_2_1_�dout_
+;
+
+322 

+_IO_FILE_�us
+ 
+_IO_2_1_�d�r_
+;
+
+323 #i�de�
+_LIBC
+
+
+324 
+	#_IO_�d�
+ ((
+_IO_FILE
+*)(&
+_IO_2_1_�d�_
+))
+
+	)
+
+325 
+	#_IO_�dout
+ ((
+_IO_FILE
+*)(&
+_IO_2_1_�dout_
+))
+
+	)
+
+326 
+	#_IO_�d�r
+ ((
+_IO_FILE
+*)(&
+_IO_2_1_�d�r_
+))
+
+	)
+
+328 
+_IO_FILE
+ *
+_IO_�d�
+ 
+��ibu�_hidd�
+;
+
+329 
+_IO_FILE
+ *
+_IO_�dout
+ 
+��ibu�_hidd�
+;
+
+330 
+_IO_FILE
+ *
+_IO_�d�r
+ 
+��ibu�_hidd�
+;
+
+338 
+__ssize_t
+ 
+	t__io_�ad_�
+ (*
+	t__cook�
+, *
+	t__buf
+, 
+	tsize_t
+ 
+	t__nby�s
+);
+
+346 
+__ssize_t
+ 
+	t__io_wr�e_�
+ (*
+	t__cook�
+, cڡ *
+	t__buf
+,
+
+347 
+	tsize_t
+ 
+	t__n
+);
+
+355 
+	t__io_�ek_�
+ (*
+	t__cook�
+, 
+	t_IO_off64_t
+ *
+	t__pos
+, 
+	t__w
+);
+
+358 
+	t__io_�o�_�
+ (*
+	t__cook�
+);
+
+361 #ifde�
+_GNU_SOURCE
+
+
+363 
+__io_�ad_�
+ 
+	tcook�_�ad_fun�i�_t
+;
+
+364 
+__io_wr�e_�
+ 
+	tcook�_wr�e_fun�i�_t
+;
+
+365 
+__io_�ek_�
+ 
+	tcook�_�ek_fun�i�_t
+;
+
+366 
+__io_�o�_�
+ 
+	tcook�_�o�_fun�i�_t
+;
+
+371 
+__io_�ad_�
+ *
+	m�ad
+;
+
+372 
+__io_wr�e_�
+ *
+	mwr�e
+;
+
+373 
+__io_�ek_�
+ *
+	m�ek
+;
+
+374 
+__io_�o�_�
+ *
+	m�o�
+;
+
+375 } 
+	t_IO_cook�_io_fun�i�s_t
+;
+
+376 
+_IO_cook�_io_fun�i�s_t
+ 
+	tcook�_io_fun�i�s_t
+;
+
+378 
+	g_IO_cook�_f�e
+;
+
+381 

+_IO_cook�_��
+ (
+_IO_cook�_f�e
+ *
+__cf�e
+, 
+__�ad_wr�e
+,
+
+382 *
+__cook�
+, 
+_IO_cook�_io_fun�i�s_t
+ 
+__�s
+);
+
+386 #ifde�
+__�lu�lus
+
+
+390 

+__und��ow
+ (
+_IO_FILE
+ *);
+
+391 

+__u�ow
+ (
+_IO_FILE
+ *);
+
+392 

+__ov��ow
+ (
+_IO_FILE
+ *, );
+
+393 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_GLIBCPP_USE_WCHAR_T
+
+
+394 
+_IO_w�t_t
+ 
+__wund��ow
+ (
+_IO_FILE
+ *);
+
+395 
+_IO_w�t_t
+ 
+__wu�ow
+ (
+_IO_FILE
+ *);
+
+396 
+_IO_w�t_t
+ 
+__wov��ow
+ (
+_IO_FILE
+ *, _IO_wint_t);
+
+399 #i� 
+__GNUC__
+ >= 3
+
+400 
+	#_IO_BE
+(
+ex�
+, 
+�s
+�
+	`__bu�t�_ex��
+ (�x�),�es)
+
+	)
+
+402 
+	#_IO_BE
+(
+ex�
+, 
+�s
+��x�)
+
+	)
+
+405 
+	#_IO_g�c_u�ocked
+(
+_�
+) \
+
+406 (
+	`_IO_BE
+ ((
+_�
+)->
+_IO_�ad_�r
+ >�(_�)->
+_IO_�ad_�d
+, 0) \
+
+407 ? 
+	`__u�ow
+ (
+_�
+�: *(*�(_�)->
+_IO_�ad_�r
+++)
+
+	)
+
+408 
+	#_IO_�ekc_u�ocked
+(
+_�
+) \
+
+409 (
+	`_IO_BE
+ ((
+_�
+)->
+_IO_�ad_�r
+ >�(_�)->
+_IO_�ad_�d
+, 0) \
+
+410 && 
+	`__und��ow
+ (
+_�
+�=�
+EOF
+ ? EOF \
+
+411 : *(*�(
+_�
+)->
+_IO_�ad_�r
+)
+
+	)
+
+412 
+	#_IO_putc_u�ocked
+(
+_ch
+, 
+_�
+) \
+
+413 (
+	`_IO_BE
+ ((
+_�
+)->
+_IO_wr�e_�r
+ >�(_�)->
+_IO_wr�e_�d
+, 0) \
+
+414 ? 
+	`__ov��ow
+ (
+_�
+, (�(
+_ch
+)) \
+
+415 : (�(*(
+_�
+)->
+_IO_wr�e_�r
+++ = (
+_ch
+)))
+
+	)
+
+417 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_GLIBCPP_USE_WCHAR_T
+
+
+418 
+	#_IO_g�wc_u�ocked
+(
+_�
+) \
+
+419 (
+	`_IO_BE
+ ((
+_�
+)->
+_wide_d�a
+ =�
+NULL
+ \
+
+420 || ((
+_�
+)->
+_wide_d�a
+->
+_IO_�ad_�r
+ \
+
+421 >�(
+_�
+)->
+_wide_d�a
+->
+_IO_�ad_�d
+), 0) \
+
+422 ? 
+	`__wu�ow
+ (
+_�
+�: (
+_IO_w�t_t
+�*(_�)->
+_wide_d�a
+->
+_IO_�ad_�r
+++)
+
+	)
+
+423 
+	#_IO_putwc_u�ocked
+(
+_wch
+, 
+_�
+) \
+
+424 (
+	`_IO_BE
+ ((
+_�
+)->
+_wide_d�a
+ =�
+NULL
+ \
+
+425 || ((
+_�
+)->
+_wide_d�a
+->
+_IO_wr�e_�r
+ \
+
+426 >�(
+_�
+)->
+_wide_d�a
+->
+_IO_wr�e_�d
+), 0) \
+
+427 ? 
+	`__wov��ow
+ (
+_�
+, 
+_wch
+) \
+
+428 : (
+_IO_w�t_t
+�(*(
+_�
+)->
+_wide_d�a
+->
+_IO_wr�e_�r
+++ = (
+_wch
+)))
+
+	)
+
+431 
+	#_IO_�of_u�ocked
+(
+__�
+�(((__�)->
+_�ags
+ & 
+_IO_EOF_SEEN
+�!�0)
+
+	)
+
+432 
+	#_IO_��_u�ocked
+(
+__�
+�(((__�)->
+_�ags
+ & 
+_IO_ERR_SEEN
+�!�0)
+
+	)
+
+434 

+_IO_g�c
+ (
+_IO_FILE
+ *
+__�
+);
+
+435 

+_IO_putc
+ (
+__c
+, 
+_IO_FILE
+ *
+__�
+);
+
+436 

+_IO_�of
+ (
+_IO_FILE
+ *
+__�
+�
+__THROW
+;
+
+437 

+_IO_��
+ (
+_IO_FILE
+ *
+__�
+�
+__THROW
+;
+
+439 

+_IO_�ekc_locked
+ (
+_IO_FILE
+ *
+__�
+);
+
+442 
+	#_IO_PENDING_OUTPUT_COUNT
+(
+_�
+) \
+
+443 ((
+_�
+)->
+_IO_wr�e_�r
+ - (_�)->
+_IO_wr�e_ba�
+)
+
+	)
+
+445 

+_IO_�ockf�e
+ (
+_IO_FILE
+ *�
+__THROW
+;
+
+446 

+_IO_fu�ockf�e
+ (
+_IO_FILE
+ *�
+__THROW
+;
+
+447 

+_IO_�rylockf�e
+ (
+_IO_FILE
+ *�
+__THROW
+;
+
+449 #ifde�
+_IO_MTSAFE_IO
+
+
+450 
+	#_IO_�ekc
+(
+_�
+�
+	`_IO_�ekc_locked
+ (_�)
+
+	)
+
+451 
+	#_IO_�ockf�e
+(
+_�
+) \
+
+452 i�(((
+_�
+)->
+_�ags
+ & 
+_IO_USER_LOCK
+�=�0�
+	`_IO_�ockf�e
+ (_�)
+
+	)
+
+453 
+	#_IO_fu�ockf�e
+(
+_�
+) \
+
+454 i�(((
+_�
+)->
+_�ags
+ & 
+_IO_USER_LOCK
+�=�0�
+	`_IO_fu�ockf�e
+ (_�)
+
+	)
+
+456 
+	#_IO_�ekc
+(
+_�
+�
+	`_IO_�ekc_u�ocked
+ (_�)
+
+	)
+
+457 
+	#_IO_�ockf�e
+(
+_�
+�
+
+	)
+
+458 
+	#_IO_fu�ockf�e
+(
+_�
+�
+
+	)
+
+459 
+	#_IO_�rylockf�e
+(
+_�
+�
+
+	)
+
+460 
+	#_IO_��nup_�gi�_��t
+(
+_f�
+, 
+_�
+�
+
+	)
+
+461 
+	#_IO_��nup_�gi�_�d
+(
+_Do�
+�
+
+	)
+
+464 

+_IO_vfs�nf
+ (
+_IO_FILE
+ * 
+__��ri�
+, const * __restrict,
+
+465 
+_IO_va_li�
+, *
+__��ri�
+);
+
+466 

+_IO_v�r�tf
+ (
+_IO_FILE
+ *
+__��ri�
+, const *__restrict,
+
+467 
+_IO_va_li�
+);
+
+468 
+_IO_ssize_t
+ 
+_IO_�dn
+ (
+_IO_FILE
+ *, , _IO_ssize_t);
+
+469 
+_IO_size_t
+ 
+_IO_sg�n
+ (
+_IO_FILE
+ *, *, _IO_size_t);
+
+471 
+_IO_off64_t
+ 
+_IO_�ekoff
+ (
+_IO_FILE
+ *, _IO_off64_t, , );
+
+472 
+_IO_off64_t
+ 
+_IO_�ekpos
+ (
+_IO_FILE
+ *, _IO_off64_t, );
+
+474 

+_IO_�_backup_��
+ (
+_IO_FILE
+ *�
+__THROW
+;
+
+476 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_GLIBCPP_USE_WCHAR_T
+
+
+477 
+_IO_w�t_t
+ 
+_IO_g�wc
+ (
+_IO_FILE
+ *
+__�
+);
+
+478 
+_IO_w�t_t
+ 
+_IO_putwc
+ (
+wch�_t
+ 
+__wc
+, 
+_IO_FILE
+ *
+__�
+);
+
+479 

+_IO_fwide
+ (
+_IO_FILE
+ *
+__�
+, 
+__mode
+�
+__THROW
+;
+
+480 #i�
+__GNUC__
+ >= 2
+
+483 #i�
+def�ed
+ 
+_LIBC
+ && def�ed 
+SHARED
+
+
+484 
+	~<shlib-com�t.h
+>
+
+485 #i�
+SHLIB_COMPAT
+ (
+libc
+, 
+GLIBC_2_0
+, 
+GLIBC_2_1
+)
+
+486 
+	#_IO_fwide_maybe_�com�tib�
+ \
+
+487 (
+	`__bu�t�_ex��
+ (&
+_IO_�d�_u�d
+ =�
+NULL
+, 0))
+
+	)
+
+488 
cڡ 
+_IO_�d�_u�d
+;
+
+489 
+w�k_ex��
+ (
+_IO_�d�_u�d
+);
+
+492 #i�de�
+_IO_fwide_maybe_�com�tib�
+
+
+493 
+	#_IO_fwide_maybe_�com�tib�
+ (0)
+
+	)
+
+497 
+	#_IO_fwide
+(
+__�
+, 
+__mode
+) \
+
+498 ({ 
+__�su�
+ = (
+__mode
+); \
+
+499 i�(
+__�su�
+ < 0 && ! 
+_IO_fwide_maybe_�com�tib�
+) \
+
+501 i�((
+__�
+)->
+_mode
+ == 0) \
+
+503 (
+__�
+)->
+_mode
+ = -1; \
+
+504 
+__�su�
+ = (
+__�
+)->
+_mode
+; \
+
+506 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__mode
+) && (__mode) == 0) \
+
+507 
+__�su�
+ = 
+_IO_fwide_maybe_�com�tib�
+ ? -1 : (
+__�
+)->
+_mode
+; \
+
+509 
+__�su�
+ = 
+	`_IO_fwide
+ (
+__�
+, __result); \
+
+510 
+__�su�
+; })
+
+	)
+
+513 

+_IO_vfws�nf
+ (
+_IO_FILE
+ * 
+__��ri�
+, cڡ 
+wch�_t
+ * __restrict,
+
+514 
+_IO_va_li�
+, *
+__��ri�
+);
+
+515 

+_IO_vfw��tf
+ (
+_IO_FILE
+ *
+__��ri�
+, cڡ 
+wch�_t
+ *__restrict,
+
+516 
+_IO_va_li�
+);
+
+517 
+_IO_ssize_t
+ 
+_IO_w�dn
+ (
+_IO_FILE
+ *, 
+w�t_t
+, _IO_ssize_t);
+
+518 

+_IO_�_wbackup_��
+ (
+_IO_FILE
+ *�
+__THROW
+;
+
+521 #ifde�
+__LDBL_COMPAT
+
+
+522 
+	~<b�s/libio-ldbl.h
+>
+
+525 #ifde�
+__�lu�lus
+
+
+	@/usr/include/rpc/netdb.h
+
+36 #i�de�
+_RPC_NETDB_H
+
+
+37 
+	#_RPC_NETDB_H
+ 1
+
+	)
+
+39 
+	~<�u�s.h
+>
+
+41 
+	#__�ed_size_t
+
+
+	)
+
+42 
+	~<�ddef.h
+>
+
+44 
+__BEGIN_DECLS
+
+
+46 
+	s���
+
+
+48 *
+	mr_�me
+;
+
+49 **
+	mr_���s
+;
+
+50 
+	mr_numb�
+;
+
+53 

+	$��p��
+ (
+__�ayݒ
+�
+__THROW
+;
+
+54 

+	$�d���
+ (�
+__THROW
+;
+
+55 

+���
+ *
+	$g��cby�me
+ (cڡ *
+__�me
+�
+__THROW
+;
+
+56 

+���
+ *
+	$g��cbynumb�
+ (
+__numb�
+�
+__THROW
+;
+
+57 

+���
+ *
+	$g����
+ (�
+__THROW
+;
+
+59 #ifde�
+__USE_MISC
+
+
+60 

+	$g��cby�me_r
+ (cڡ *
+__�me
+, 
+���
+ *
+__�su�_buf
+,
+
+61 *
+__buf�r
+, 
+size_t
+ 
+__bu�
+,
+
+62 
+���
+ **
+__�su�
+�
+__THROW
+;
+
+64 

+	$g��cbynumb�_r
+ (
+__numb�
+, 
+���
+ *
+__�su�_buf
+,
+
+65 *
+__buf�r
+, 
+size_t
+ 
+__bu�
+,
+
+66 
+���
+ **
+__�su�
+�
+__THROW
+;
+
+68 

+	$g����_r
+ (
+���
+ *
+__�su�_buf
+, *
+__buf�r
+,
+
+69 
+size_t
+ 
+__bu�
+, 
+���
+ **
+__�su�
+�
+__THROW
+;
+
+72 
+__END_DECLS
+
+
+	@/usr/include/sched.h
+
+19 #i�def 
+_SCHED_H
+
+
+20 
+	#_SCHED_H
+ 1
+
+	)
+
+22 
+	~<�u�s.h
+>
+
+25 
+	~<b�s/ty�s.h
+>
+
+27 
+	#__�ed_size_t
+
+
+	)
+
+28 
+	~<�ddef.h
+>
+
+30 
+	#__�ed_time_t
+
+
+	)
+
+31 
+	#__�ed_time�ec
+
+
+	)
+
+32 
+	~<time.h
+>
+
+34 #i�de�
+__pid_t_def�ed
+
+
+35 
+__pid_t
+ 
+	tpid_t
+;
+
+36 
+	#__pid_t_def�ed
+
+
+	)
+
+41 
+	~<b�s/sched.h
+>
+
+43 
+	#sched_�iܙy
+ 
+__sched_�iܙy
+
+
+	)
+
+46 
+__BEGIN_DECLS
+
+
+49 

+	$sched_���am
+ (
+__pid_t
+ 
+__pid
+, cڡ 
+sched_��m
+ *
+__��m
+)
+
+50 
+__THROW
+;
+
+53 

+	$sched_g���m
+ (
+__pid_t
+ 
+__pid
+, 
+sched_��m
+ *
+__��m
+�
+__THROW
+;
+
+56 

+	$sched_�tschedu�r
+ (
+__pid_t
+ 
+__pid
+, 
+__p�icy
+,
+
+57 cڡ 
+sched_��m
+ *
+__��m
+�
+__THROW
+;
+
+60 

+	$sched_g�schedu�r
+ (
+__pid_t
+ 
+__pid
+�
+__THROW
+;
+
+63 

+	$sched_y�ld
+ (�
+__THROW
+;
+
+66 

+	$sched_g�_�iܙy_max
+ (
+__�gܙhm
+�
+__THROW
+;
+
+69 

+	$sched_g�_�iܙy_m�
+ (
+__�gܙhm
+�
+__THROW
+;
+
+72 

+	$sched_�_g�_��rv�
+ (
+__pid_t
+ 
+__pid
+, 
+time�ec
+ *
+__t
+�
+__THROW
+;
+
+75 #ifde�
+__USE_GNU
+
+
+77 
+	#CPU_SETSIZE
+ 
+__CPU_SETSIZE
+
+
+	)
+
+78 
+	#CPU_SET
+(
+�u
+, 
+�u��
+�
+	`__CPU_SET_S
+ (�u,  (
+�u_�t_t
+), cpu��)
+
+	)
+
+79 
+	#CPU_CLR
+(
+�u
+, 
+�u��
+�
+	`__CPU_CLR_S
+ (�u,  (
+�u_�t_t
+), cpu��)
+
+	)
+
+80 
+	#CPU_ISSET
+(
+�u
+, 
+�u��
+�
+	`__CPU_ISSET_S
+ (�u,  (
+�u_�t_t
+), \
+
+81 
+�u��
+)
+
+	)
+
+82 
+	#CPU_ZERO
+(
+�u��
+�
+	`__CPU_ZERO_S
+ ( (
+�u_�t_t
+), cpu��)
+
+	)
+
+83 
+	#CPU_COUNT
+(
+�u��
+�
+	`__CPU_COUNT_S
+ ( (
+�u_�t_t
+), cpu��)
+
+	)
+
+85 
+	#CPU_SET_S
+(
+�u
+, 
+�tsize
+, 
+�u��
+�
+	`__CPU_SET_S
+ (�u, s�size, cpu��)
+
+	)
+
+86 
+	#CPU_CLR_S
+(
+�u
+, 
+�tsize
+, 
+�u��
+�
+	`__CPU_CLR_S
+ (�u, s�size, cpu��)
+
+	)
+
+87 
+	#CPU_ISSET_S
+(
+�u
+, 
+�tsize
+, 
+�u��
+�
+	`__CPU_ISSET_S
+ (cpu, setsize, \
+
+88 
+�u��
+)
+
+	)
+
+89 
+	#CPU_ZERO_S
+(
+�tsize
+, 
+�u��
+�
+	`__CPU_ZERO_S
+ (�tsize, cpu��)
+
+	)
+
+90 
+	#CPU_COUNT_S
+(
+�tsize
+, 
+�u��
+�
+	`__CPU_COUNT_S
+ (�tsize, cpu��)
+
+	)
+
+92 
+	#CPU_EQUAL
+(
+�u��1
+, 
+�u��2
+) \
+
+93 
+	`__CPU_EQUAL_S
+ ( (
+�u_�t_t
+), 
+�u��1
+, 
+�u��2
+)
+
+	)
+
+94 
+	#CPU_EQUAL_S
+(
+�tsize
+, 
+�u��1
+, 
+�u��2
+) \
+
+95 
+	`__CPU_EQUAL_S
+ (
+�tsize
+, 
+�u��1
+, 
+�u��2
+)
+
+	)
+
+97 
+	#CPU_AND
+(
+de��t
+, 
+�c�t1
+, 
+�c�t2
+) \
+
+98 
+	`__CPU_OP_S
+ ( (
+�u_�t_t
+), 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+, &)
+
+	)
+
+99 
+	#CPU_OR
+(
+de��t
+, 
+�c�t1
+, 
+�c�t2
+) \
+
+100 
+	`__CPU_OP_S
+ ( (
+�u_�t_t
+), 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+, |)
+
+	)
+
+101 
+	#CPU_XOR
+(
+de��t
+, 
+�c�t1
+, 
+�c�t2
+) \
+
+102 
+	`__CPU_OP_S
+ ( (
+�u_�t_t
+), 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+, ^)
+
+	)
+
+103 
+	#CPU_AND_S
+(
+�tsize
+, 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+) \
+
+104 
+	`__CPU_OP_S
+ (
+�tsize
+, 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+, &)
+
+	)
+
+105 
+	#CPU_OR_S
+(
+�tsize
+, 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+) \
+
+106 
+	`__CPU_OP_S
+ (
+�tsize
+, 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+, |)
+
+	)
+
+107 
+	#CPU_XOR_S
+(
+�tsize
+, 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+) \
+
+108 
+	`__CPU_OP_S
+ (
+�tsize
+, 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+, ^)
+
+	)
+
+110 
+	#CPU_ALLOC_SIZE
+(
+cou�
+�
+	`__CPU_ALLOC_SIZE
+ (cou�)
+
+	)
+
+111 
+	#CPU_ALLOC
+(
+cou�
+�
+	`__CPU_ALLOC
+ (cou�)
+
+	)
+
+112 
+	#CPU_FREE
+(
+�u�t
+�
+	`__CPU_FREE
+ (�u�t)
+
+	)
+
+116 

+	$sched_��ff��y
+ (
+__pid_t
+ 
+__pid
+, 
+size_t
+ 
+__�u�tsize
+,
+
+117 cڡ 
+�u_�t_t
+ *
+__�u�t
+�
+__THROW
+;
+
+120 

+	$sched_g�aff��y
+ (
+__pid_t
+ 
+__pid
+, 
+size_t
+ 
+__�u�tsize
+,
+
+121 
+�u_�t_t
+ *
+__�u�t
+�
+__THROW
+;
+
+124 
+__END_DECLS
+
+
+	@/usr/include/stdint.h
+
+22 #i�de�
+_STDINT_H
+
+
+23 
+	#_STDINT_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+26 
+	~<b�s/wch�.h
+>
+
+27 
+	~<b�s/w�dsize.h
+>
+
+34 #i�de�
+__�t8_t_def�ed
+
+
+35 
+	#__�t8_t_def�ed
+
+
+	)
+
+36 sig�d 
+	t�t8_t
+;
+
+37 
+	t�t16_t
+;
+
+38 
+	t�t32_t
+;
+
+39 #i�
+__WORDSIZE
+ == 64
+
+40 
+	t�t64_t
+;
+
+42 
+__ex�nsi�__
+
+
+43 
+	t�t64_t
+;
+
+48 
+	tu�t8_t
+;
+
+49 
+	tu�t16_t
+;
+
+50 #i�de�
+__u�t32_t_def�ed
+
+
+51 
+	tu�t32_t
+;
+
+52 
+	#__u�t32_t_def�ed
+
+
+	)
+
+54 #i�
+__WORDSIZE
+ == 64
+
+55 
+	tu�t64_t
+;
+
+57 
+__ex�nsi�__
+
+
+58 
+	tu�t64_t
+;
+
+65 sig�d 
+	t�t_�a�8_t
+;
+
+66 
+	t�t_�a�16_t
+;
+
+67 
+	t�t_�a�32_t
+;
+
+68 #i�
+__WORDSIZE
+ == 64
+
+69 
+	t�t_�a�64_t
+;
+
+71 
+__ex�nsi�__
+
+
+72 
+	t�t_�a�64_t
+;
+
+76 
+	tu�t_�a�8_t
+;
+
+77 
+	tu�t_�a�16_t
+;
+
+78 
+	tu�t_�a�32_t
+;
+
+79 #i�
+__WORDSIZE
+ == 64
+
+80 
+	tu�t_�a�64_t
+;
+
+82 
+__ex�nsi�__
+
+
+83 
+	tu�t_�a�64_t
+;
+
+90 sig�d 
+	t�t_�8_t
+;
+
+91 #i�
+__WORDSIZE
+ == 64
+
+92 
+	t�t_�16_t
+;
+
+93 
+	t�t_�32_t
+;
+
+94 
+	t�t_�64_t
+;
+
+96 
+	t�t_�16_t
+;
+
+97 
+	t�t_�32_t
+;
+
+98 
+__ex�nsi�__
+
+
+99 
+	t�t_�64_t
+;
+
+103 
+	tu�t_�8_t
+;
+
+104 #i�
+__WORDSIZE
+ == 64
+
+105 
+	tu�t_�16_t
+;
+
+106 
+	tu�t_�32_t
+;
+
+107 
+	tu�t_�64_t
+;
+
+109 
+	tu�t_�16_t
+;
+
+110 
+	tu�t_�32_t
+;
+
+111 
+__ex�nsi�__
+
+
+112 
+	tu�t_�64_t
+;
+
+117 #i�
+__WORDSIZE
+ == 64
+
+118 #i�de�
+__���_t_def�ed
+
+
+119 
+	t���_t
+;
+
+120 
+	#__���_t_def�ed
+
+
+	)
+
+122 
+	tu���_t
+;
+
+124 #i�de�
+__���_t_def�ed
+
+
+125 
+	t���_t
+;
+
+126 
+	#__���_t_def�ed
+
+
+	)
+
+128 
+	tu���_t
+;
+
+133 #i�
+__WORDSIZE
+ == 64
+
+134 
+	t�tmax_t
+;
+
+135 
+	tu�tmax_t
+;
+
+137 
+__ex�nsi�__
+
+
+138 
+	t�tmax_t
+;
+
+139 
+__ex�nsi�__
+
+
+140 
+	tu�tmax_t
+;
+
+144 #i�
+__WORDSIZE
+ == 64
+
+145 
+	#__INT64_C
+(
+c
+��## 
+L
+
+
+	)
+
+146 
+	#__UINT64_C
+(
+c
+��## 
+UL
+
+
+	)
+
+148 
+	#__INT64_C
+(
+c
+��## 
+LL
+
+
+	)
+
+149 
+	#__UINT64_C
+(
+c
+��## 
+ULL
+
+
+	)
+
+155 
+	#INT8_MIN
+ (-128)
+
+	)
+
+156 
+	#INT16_MIN
+ (-32767-1)
+
+	)
+
+157 
+	#INT32_MIN
+ (-2147483647-1)
+
+	)
+
+158 
+	#INT64_MIN
+ (-
+	`__INT64_C
+(9223372036854775807)-1)
+
+	)
+
+160 
+	#INT8_MAX
+ (127)
+
+	)
+
+161 
+	#INT16_MAX
+ (32767)
+
+	)
+
+162 
+	#INT32_MAX
+ (2147483647)
+
+	)
+
+163 
+	#INT64_MAX
+ (
+	`__INT64_C
+(9223372036854775807))
+
+	)
+
+166 
+	#UINT8_MAX
+ (255)
+
+	)
+
+167 
+	#UINT16_MAX
+ (65535)
+
+	)
+
+168 
+	#UINT32_MAX
+ (4294967295U)
+
+	)
+
+169 
+	#UINT64_MAX
+ (
+	`__UINT64_C
+(18446744073709551615))
+
+	)
+
+173 
+	#INT_LEAST8_MIN
+ (-128)
+
+	)
+
+174 
+	#INT_LEAST16_MIN
+ (-32767-1)
+
+	)
+
+175 
+	#INT_LEAST32_MIN
+ (-2147483647-1)
+
+	)
+
+176 
+	#INT_LEAST64_MIN
+ (-
+	`__INT64_C
+(9223372036854775807)-1)
+
+	)
+
+178 
+	#INT_LEAST8_MAX
+ (127)
+
+	)
+
+179 
+	#INT_LEAST16_MAX
+ (32767)
+
+	)
+
+180 
+	#INT_LEAST32_MAX
+ (2147483647)
+
+	)
+
+181 
+	#INT_LEAST64_MAX
+ (
+	`__INT64_C
+(9223372036854775807))
+
+	)
+
+184 
+	#UINT_LEAST8_MAX
+ (255)
+
+	)
+
+185 
+	#UINT_LEAST16_MAX
+ (65535)
+
+	)
+
+186 
+	#UINT_LEAST32_MAX
+ (4294967295U)
+
+	)
+
+187 
+	#UINT_LEAST64_MAX
+ (
+	`__UINT64_C
+(18446744073709551615))
+
+	)
+
+191 
+	#INT_FAST8_MIN
+ (-128)
+
+	)
+
+192 #i�
+__WORDSIZE
+ == 64
+
+193 
+	#INT_FAST16_MIN
+ (-9223372036854775807L-1)
+
+	)
+
+194 
+	#INT_FAST32_MIN
+ (-9223372036854775807L-1)
+
+	)
+
+196 
+	#INT_FAST16_MIN
+ (-2147483647-1)
+
+	)
+
+197 
+	#INT_FAST32_MIN
+ (-2147483647-1)
+
+	)
+
+199 
+	#INT_FAST64_MIN
+ (-
+	`__INT64_C
+(9223372036854775807)-1)
+
+	)
+
+201 
+	#INT_FAST8_MAX
+ (127)
+
+	)
+
+202 #i�
+__WORDSIZE
+ == 64
+
+203 
+	#INT_FAST16_MAX
+ (9223372036854775807L)
+
+	)
+
+204 
+	#INT_FAST32_MAX
+ (9223372036854775807L)
+
+	)
+
+206 
+	#INT_FAST16_MAX
+ (2147483647)
+
+	)
+
+207 
+	#INT_FAST32_MAX
+ (2147483647)
+
+	)
+
+209 
+	#INT_FAST64_MAX
+ (
+	`__INT64_C
+(9223372036854775807))
+
+	)
+
+212 
+	#UINT_FAST8_MAX
+ (255)
+
+	)
+
+213 #i�
+__WORDSIZE
+ == 64
+
+214 
+	#UINT_FAST16_MAX
+ (18446744073709551615UL)
+
+	)
+
+215 
+	#UINT_FAST32_MAX
+ (18446744073709551615UL)
+
+	)
+
+217 
+	#UINT_FAST16_MAX
+ (4294967295U)
+
+	)
+
+218 
+	#UINT_FAST32_MAX
+ (4294967295U)
+
+	)
+
+220 
+	#UINT_FAST64_MAX
+ (
+	`__UINT64_C
+(18446744073709551615))
+
+	)
+
+224 #i�
+__WORDSIZE
+ == 64
+
+225 
+	#INTPTR_MIN
+ (-9223372036854775807L-1)
+
+	)
+
+226 
+	#INTPTR_MAX
+ (9223372036854775807L)
+
+	)
+
+227 
+	#UINTPTR_MAX
+ (18446744073709551615UL)
+
+	)
+
+229 
+	#INTPTR_MIN
+ (-2147483647-1)
+
+	)
+
+230 
+	#INTPTR_MAX
+ (2147483647)
+
+	)
+
+231 
+	#UINTPTR_MAX
+ (4294967295U)
+
+	)
+
+236 
+	#INTMAX_MIN
+ (-
+	`__INT64_C
+(9223372036854775807)-1)
+
+	)
+
+238 
+	#INTMAX_MAX
+ (
+	`__INT64_C
+(9223372036854775807))
+
+	)
+
+241 
+	#UINTMAX_MAX
+ (
+	`__UINT64_C
+(18446744073709551615))
+
+	)
+
+247 #i�
+__WORDSIZE
+ == 64
+
+248 
+	#PTRDIFF_MIN
+ (-9223372036854775807L-1)
+
+	)
+
+249 
+	#PTRDIFF_MAX
+ (9223372036854775807L)
+
+	)
+
+251 
+	#PTRDIFF_MIN
+ (-2147483647-1)
+
+	)
+
+252 
+	#PTRDIFF_MAX
+ (2147483647)
+
+	)
+
+256 
+	#SIG_ATOMIC_MIN
+ (-2147483647-1)
+
+	)
+
+257 
+	#SIG_ATOMIC_MAX
+ (2147483647)
+
+	)
+
+260 #i�
+__WORDSIZE
+ == 64
+
+261 
+	#SIZE_MAX
+ (18446744073709551615UL)
+
+	)
+
+263 
+	#SIZE_MAX
+ (4294967295U)
+
+	)
+
+267 #i�de�
+WCHAR_MIN
+
+
+269 
+	#WCHAR_MIN
+ 
+__WCHAR_MIN
+
+
+	)
+
+270 
+	#WCHAR_MAX
+ 
+__WCHAR_MAX
+
+
+	)
+
+274 
+	#WINT_MIN
+ (0u)
+
+	)
+
+275 
+	#WINT_MAX
+ (4294967295u)
+
+	)
+
+278 
+	#INT8_C
+(
+c
+�
+	)
+c
+
+279 
+	#INT16_C
+(
+c
+�
+	)
+c
+
+280 
+	#INT32_C
+(
+c
+�
+	)
+c
+
+281 #i�
+__WORDSIZE
+ == 64
+
+282 
+	#INT64_C
+(
+c
+��## 
+L
+
+
+	)
+
+284 
+	#INT64_C
+(
+c
+��## 
+LL
+
+
+	)
+
+288 
+	#UINT8_C
+(
+c
+�
+	)
+c
+
+289 
+	#UINT16_C
+(
+c
+�
+	)
+c
+
+290 
+	#UINT32_C
+(
+c
+��## 
+U
+
+
+	)
+
+291 #i�
+__WORDSIZE
+ == 64
+
+292 
+	#UINT64_C
+(
+c
+��## 
+UL
+
+
+	)
+
+294 
+	#UINT64_C
+(
+c
+��## 
+ULL
+
+
+	)
+
+298 #i�
+__WORDSIZE
+ == 64
+
+299 
+	#INTMAX_C
+(
+c
+��## 
+L
+
+
+	)
+
+300 
+	#UINTMAX_C
+(
+c
+��## 
+UL
+
+
+	)
+
+302 
+	#INTMAX_C
+(
+c
+��## 
+LL
+
+
+	)
+
+303 
+	#UINTMAX_C
+(
+c
+��## 
+ULL
+
+
+	)
+
+	@/usr/include/sys/cdefs.h
+
+18 #i�def 
+_SYS_CDEFS_H
+
+
+19 
+	#_SYS_CDEFS_H
+ 1
+
+	)
+
+22 #i�de�
+_FEATURES_H
+
+
+23 
+	~<�u�s.h
+>
+
+29 #i�
+def�ed
+ 
+__GNUC__
+ && !def�ed 
+__STDC__
+
+
+34 #unde�
+__P
+
+
+35 #unde�
+__PMT
+
+
+37 #ifde�
+__GNUC__
+
+
+41 #i�
+__GNUC_PREREQ
+ (4, 6�&& !
+def�ed
+ 
+_LIBC
+
+
+42 
+	#__LEAF
+ , 
+__�af__
+
+
+	)
+
+43 
+	#__LEAF_ATTR
+ 
+	`__��ibu�__
+ ((
+__�af__
+))
+
+	)
+
+45 
+	#__LEAF
+
+
+	)
+
+46 
+	#__LEAF_ATTR
+
+
+	)
+
+54 #i�!
+def�ed
+ 
+__�lu�lus
+ && 
+__GNUC_PREREQ
+ (3, 3)
+
+55 
+	#__THROW
+ 
+	`__��ibu�__
+ ((
+__n�hrow__
+ 
+__LEAF
+))
+
+	)
+
+56 
+	#__THROWNL
+ 
+	`__��ibu�__
+ ((
+__n�hrow__
+))
+
+	)
+
+57 
+	#__NTH
+(
+f�
+�
+	`__��ibu�__
+ ((
+__n�hrow__
+ 
+__LEAF
+)�
+	)
+fct
+
+59 #i�
+def�ed
+ 
+__�lu�lus
+ && 
+__GNUC_PREREQ
+ (2,8)
+
+60 
+	#__THROW
+ 
+	`throw
+ ()
+
+	)
+
+61 
+	#__THROWNL
+ 
+	`throw
+ ()
+
+	)
+
+62 
+	#__NTH
+(
+f�
+�
+__LEAF_ATTR
+ f� 
+	`throw
+ ()
+
+	)
+
+64 
+	#__THROW
+
+
+	)
+
+65 
+	#__THROWNL
+
+
+	)
+
+66 
+	#__NTH
+(
+f�
+�
+	)
+fct
+
+72 
+	#__�l�e
+
+
+	)
+
+74 
+	#__THROW
+
+
+	)
+
+75 
+	#__THROWNL
+
+
+	)
+
+76 
+	#__NTH
+(
+f�
+�
+	)
+fct
+
+82 
+	#__P
+(
+�gs
+�
+	)
+args
+
+83 
+	#__PMT
+(
+�gs
+�
+	)
+args
+
+88 
+	#__CONCAT
+(
+x
+,
+y
+�x ## 
+	)
+y
+
+89 
+	#__STRING
+(
+x
+�#x
+
+	)
+
+92 
+	#__�r_t
+ *
+
+	)
+
+93 
+	#__l�g_doub�_t
+ 
+
+	)
+
+97 #ifdef 
+__�lu�lus
+
+
+98 
+	#__BEGIN_DECLS
+ 
"C" {
+
+	)
+
+99 
+	#__END_DECLS
+ }
+
+	)
+
+101 
+	#__BEGIN_DECLS
+
+
+	)
+
+102 
+	#__END_DECLS
+
+
+	)
+
+111 #i�
+def�ed
+ 
+__�lu�lus
+ && def�ed 
+_GLIBCPP_USE_NAMESPACES
+
+
+112 
+	#__BEGIN_NAMESPACE_STD
+ 
+�me�a�
+ 
+�d
+ {
+
+	)
+
+113 
+	#__END_NAMESPACE_STD
+ }
+
+	)
+
+114 
+	#__USING_NAMESPACE_STD
+(
+�me
+�
+us�g
+ 
+�d
+::�me;
+
+	)
+
+115 
+	#__BEGIN_NAMESPACE_C99
+ 
+�me�a�
+ 
+__c99
+ {
+
+	)
+
+116 
+	#__END_NAMESPACE_C99
+ }
+
+	)
+
+117 
+	#__USING_NAMESPACE_C99
+(
+�me
+�
+us�g
+ 
+__c99
+::�me;
+
+	)
+
+122 
+	#__BEGIN_NAMESPACE_STD
+
+
+	)
+
+123 
+	#__END_NAMESPACE_STD
+
+
+	)
+
+124 
+	#__USING_NAMESPACE_STD
+(
+�me
+)
+
+	)
+
+125 
+	#__BEGIN_NAMESPACE_C99
+
+
+	)
+
+126 
+	#__END_NAMESPACE_C99
+
+
+	)
+
+127 
+	#__USING_NAMESPACE_C99
+(
+�me
+)
+
+	)
+
+132 
+	#__bos
+(
+�r
+�
+	`__bu�t�_obje�_size
+ (�r, 
+__USE_FORTIFY_LEVEL
+ > 1)
+
+	)
+
+133 
+	#__bos0
+(
+�r
+�
+	`__bu�t�_obje�_size
+ (�r, 0)
+
+	)
+
+134 
+	#__f�tify_fun�i�
+ 
+__ex��_�ways_�l�e
+ 
+__��ibu�_�tific�l__
+
+
+	)
+
+136 #i�
+__GNUC_PREREQ
+ (4,3)
+
+137 
+	#__w�nde�
+(
+�me
+, 
+msg
+) \
+
+138 

+	`�me
+ (�
+	`__��ibu�__
+((
+	`__w�n�g__
+ (
+msg
+)))
+
+	)
+
+139 
+	#__w�ljr
+(
+msg
+�
+	`__��ibu�__
+((
+	`__w�n�g__
+ (msg)))
+
+	)
+
+140 
+	#__�r�de�
+(
+�me
+, 
+msg
+) \
+
+141 

+	`�me
+ (�
+	`__��ibu�__
+((
+	`__�r�__
+ (
+msg
+)))
+
+	)
+
+143 
+	#__w�nde�
+(
+�me
+, 
+msg
+�

+	`�me
+ ()
+
+	)
+
+144 
+	#__w�ljr
+(
+msg
+)
+
+	)
+
+145 
+	#__�r�de�
+(
+�me
+, 
+msg
+�

+	`�me
+ ()
+
+	)
+
+149 #i�
+__GNUC_PREREQ
+ (2,97)
+
+151 
+	#__�ex�r
+ []
+
+	)
+
+153 #ifde�
+__GNUC__
+
+
+154 
+	#__�ex�r
+ [0]
+
+	)
+
+156 #i�
+def�ed
+ 
+__STDC_VERSION__
+ && __STDC_VERSION__ >= 199901L
+
+157 
+	#__�ex�r
+ []
+
+	)
+
+160 
+	#__�ex�r
+ [1]
+
+	)
+
+176 #i�
+def�ed
+ 
+__GNUC__
+ && __GNUC__ >= 2
+
+178 
+	#__REDIRECT
+(
+�me
+, 
+��o
+, 
+��s
+��m����
+	`__asm__
+ (
+	`__ASMNAME
+ (#��s))
+
+	)
+
+179 #ifde�
+__�lu�lus
+
+
+180 
+	#__REDIRECT_NTH
+(
+�me
+, 
+��o
+, 
+��s
+) \
+
+181 
+�me
+ 
+��o
+ 
+__THROW
+ 
+	`__asm__
+ (
+	`__ASMNAME
+ (#��s))
+
+	)
+
+182 
+	#__REDIRECT_NTHNL
+(
+�me
+, 
+��o
+, 
+��s
+) \
+
+183 
+�me
+ 
+��o
+ 
+__THROWNL
+ 
+	`__asm__
+ (
+	`__ASMNAME
+ (#��s))
+
+	)
+
+185 
+	#__REDIRECT_NTH
+(
+�me
+, 
+��o
+, 
+��s
+) \
+
+186 
+�me
+ 
+��o
+ 
+	`__asm__
+ (
+	`__ASMNAME
+ (#��s)�
+__THROW
+
+
+	)
+
+187 
+	#__REDIRECT_NTHNL
+(
+�me
+, 
+��o
+, 
+��s
+) \
+
+188 
+�me
+ 
+��o
+ 
+	`__asm__
+ (
+	`__ASMNAME
+ (#��s)�
+__THROWNL
+
+
+	)
+
+190 
+	#__ASMNAME
+(
+�ame
+�
+	`__ASMNAME2
+ (
+__USER_LABEL_PREFIX__
+, c�me)
+
+	)
+
+191 
+	#__ASMNAME2
+(
+�efix
+, 
+�ame
+�
+	`__STRING
+ (�efix�
+	)
+cname
+
+204 #i�!
+def�ed
+ 
+__GNUC__
+ || __GNUC__ < 2
+
+205 
+	#__��ibu�__
+(
+xyz
+�
+
+	)
+
+211 #i�
+__GNUC_PREREQ
+ (2,96)
+
+212 
+	#__��ibu�_m�loc__
+ 
+	`__��ibu�__
+ ((
+__m�loc__
+))
+
+	)
+
+214 
+	#__��ibu�_m�loc__
+
+
+	)
+
+219 #i�
+__GNUC_PREREQ
+ (4, 3)
+
+220 
+	#__��ibu�_�loc_size__
+(
+��ms
+) \
+
+221 
+	`__��ibu�__
+ ((
+__�loc_size__
+ 
+��ms
+))
+
+	)
+
+223 
+	#__��ibu�_�loc_size__
+(
+��ms
+�
+
+	)
+
+229 #i�
+__GNUC_PREREQ
+ (2,96)
+
+230 
+	#__��ibu�_pu�__
+ 
+	`__��ibu�__
+ ((
+__pu�__
+))
+
+	)
+
+232 
+	#__��ibu�_pu�__
+
+
+	)
+
+236 #i�
+__GNUC_PREREQ
+ (2,5)
+
+237 
+	#__��ibu�_cڡ__
+ 
+	`__��ibu�__
+ ((
+__cڡ__
+))
+
+	)
+
+239 
+	#__��ibu�_cڡ__
+
+
+	)
+
+245 #i�
+__GNUC_PREREQ
+ (3,1)
+
+246 
+	#__��ibu�_u�d__
+ 
+	`__��ibu�__
+ ((
+__u�d__
+))
+
+	)
+
+247 
+	#__��ibu�_no�l�e__
+ 
+	`__��ibu�__
+ ((
+__no�l�e__
+))
+
+	)
+
+249 
+	#__��ibu�_u�d__
+ 
+	`__��ibu�__
+ ((
+__unu�d__
+))
+
+	)
+
+250 
+	#__��ibu�_no�l�e__
+
+
+	)
+
+254 #i�
+__GNUC_PREREQ
+ (3,2)
+
+255 
+	#__��ibu�_d����d__
+ 
+	`__��ibu�__
+ ((
+__d����d__
+))
+
+	)
+
+257 
+	#__��ibu�_d����d__
+
+
+	)
+
+266 #i�
+__GNUC_PREREQ
+ (2,8)
+
+267 
+	#__��ibu�_f�m�_�g__
+(
+x
+�
+	`__��ibu�__
+ ((
+	`__f�m�_�g__
+ (x)))
+
+	)
+
+269 
+	#__��ibu�_f�m�_�g__
+(
+x
+�
+
+	)
+
+276 #i�
+__GNUC_PREREQ
+ (2,97)
+
+277 
+	#__��ibu�_f�m�_�rfm�__
+(
+a
+,
+b
+) \
+
+278 
+	`__��ibu�__
+ ((
+	`__f�m�__
+ (
+__�rfm�__
+, 
+a
+, 
+b
+)))
+
+	)
+
+280 
+	#__��ibu�_f�m�_�rfm�__
+(
+a
+,
+b
+�
+
+	)
+
+285 #i�
+__GNUC_PREREQ
+ (3,3)
+
+286 
+	#__n�nu�
+(
+��ms
+�
+	`__��ibu�__
+ ((
+__n�nu�__
+��ams))
+
+	)
+
+288 
+	#__n�nu�
+(
+��ms
+)
+
+	)
+
+293 #i�
+__GNUC_PREREQ
+ (3,4)
+
+294 
+	#__��ibu�_w�n_unu�d_�su�__
+ \
+
+295 
+	`__��ibu�__
+ ((
+__w�n_unu�d_�su�__
+))
+
+	)
+
+296 #i�
+__USE_FORTIFY_LEVEL
+ > 0
+
+297 
+	#__wur
+ 
+__��ibu�_w�n_unu�d_�su�__
+
+
+	)
+
+300 
+	#__��ibu�_w�n_unu�d_�su�__
+
+
+	)
+
+302 #i�de�
+__wur
+
+
+303 
+	#__wur
+
+
+	)
+
+307 #i�
+__GNUC_PREREQ
+ (3,2)
+
+308 
+	#__�ways_�l�e
+ 
+__�l�e
+ 
+	`__��ibu�__
+ ((
+__�ways_�l�e__
+))
+
+	)
+
+310 
+	#__�ways_�l�e
+ 
+__�l�e
+
+
+	)
+
+315 #i�
+__GNUC_PREREQ
+ (4,3)
+
+316 
+	#__��ibu�_�tific�l__
+ 
+	`__��ibu�__
+ ((
+__�tific�l__
+))
+
+	)
+
+318 
+	#__��ibu�_�tific�l__
+
+
+	)
+
+321 #ifde�
+__GNUC__
+
+
+326 #i�
+def�ed
+ 
+__GNUC_STDC_INLINE__
+ || def�ed 
+__GNUC_GNU_INLINE__
+
+
+327 
+	#__ex��_�l�e
+ 
+__�l�e
+ 
+	`__��ibu�__
+ ((
+__gnu_�l�e__
+))
+
+	)
+
+328 
+	#__ex��_�ways_�l�e
+ \
+
+329 
+__�ways_�l�e
+ 
+	`__��ibu�__
+ ((
+__gnu_�l�e__
+))
+
+	)
+
+331 
+	#__ex��_�l�e
+ 
+__�l�e
+
+
+	)
+
+332 
+	#__ex��_�ways_�l�e
+ 
+__�ways_�l�e
+
+
+	)
+
+335 
+	#__ex��_�l�e
+
+
+	)
+
+336 
+	#__ex��_�ways_�l�e
+
+
+	)
+
+341 #i�
+__GNUC_PREREQ
+ (4,3)
+
+342 
+	#__va_�g_�ck
+(�
+	`__bu�t�_va_�g_�ck
+ ()
+
+	)
+
+343 
+	#__va_�g_�ck_�n
+(�
+	`__bu�t�_va_�g_�ck_�n
+ ()
+
+	)
+
+350 #i�!
+__GNUC_PREREQ
+ (2,8)
+
+351 
+	#__ex�nsi�__
+
+
+	)
+
+355 #i�!
+__GNUC_PREREQ
+ (2,92)
+
+356 
+	#__��ri�
+
+
+	)
+
+362 #i�
+__GNUC_PREREQ
+ (3,1�&& !
+def�ed
+ 
+__GNUG__
+
+
+363 
+	#__��ri�_�r
+ 
+__��ri�
+
+
+	)
+
+365 #ifde�
+__GNUC__
+
+
+366 
+	#__��ri�_�r
+
+
+	)
+
+368 #i�
+def�ed
+ 
+__STDC_VERSION__
+ && __STDC_VERSION__ >= 199901L
+
+369 
+	#__��ri�_�r
+ 
+��ri�
+
+
+	)
+
+372 
+	#__��ri�_�r
+
+
+	)
+
+377 #i�
+__GNUC__
+ >= 3
+
+378 
+	#__glibc_u�ik�y
+(
+c�d
+�
+	`__bu�t�_ex��
+ ((c�d), 0)
+
+	)
+
+379 
+	#__glibc_lik�y
+(
+c�d
+�
+	`__bu�t�_ex��
+ ((c�d), 1)
+
+	)
+
+381 
+	#__glibc_u�ik�y
+(
+c�d
+�(c�d)
+
+	)
+
+382 
+	#__glibc_lik�y
+(
+c�d
+�(c�d)
+
+	)
+
+385 
+	~<b�s/w�dsize.h
+>
+
+387 #i�
+def�ed
+ 
+__LONG_DOUBLE_MATH_OPTIONAL
+ && def�ed 
+__NO_LONG_DOUBLE_MATH
+
+
+388 
+	#__LDBL_COMPAT
+ 1
+
+	)
+
+389 #ifde�
+__REDIRECT
+
+
+390 
+	#__LDBL_REDIR1
+(
+�me
+, 
+��o
+, 
+��s
+�
+	`__REDIRECT
+ (�me,�r�o,�l�s)
+
+	)
+
+391 
+	#__LDBL_REDIR
+(
+�me
+, 
+��o
+) \
+
+392 
+	`__LDBL_REDIR1
+ (
+�me
+, 
+��o
+, 
+__�dbl_
+##�me)
+
+	)
+
+393 
+	#__LDBL_REDIR1_NTH
+(
+�me
+, 
+��o
+, 
+��s
+�
+	`__REDIRECT_NTH
+ (�me,�r�o,�l�s)
+
+	)
+
+394 
+	#__LDBL_REDIR_NTH
+(
+�me
+, 
+��o
+) \
+
+395 
+	`__LDBL_REDIR1_NTH
+ (
+�me
+, 
+��o
+, 
+__�dbl_
+##�me)
+
+	)
+
+396 
+	#__LDBL_REDIR1_DECL
+(
+�me
+, 
+��s
+) \
+
+397 
+	`__ty�of
+ (
+�me
+��m�
+	`__asm
+ (
+	`__ASMNAME
+ (#��s));
+
+	)
+
+398 
+	#__LDBL_REDIR_DECL
+(
+�me
+) \
+
+399 
+	`__ty�of
+ (
+�me
+��m�
+	`__asm
+ (
+	`__ASMNAME
+ ("__�dbl_" #�me));
+
+	)
+
+400 
+	#__REDIRECT_LDBL
+(
+�me
+, 
+��o
+, 
+��s
+) \
+
+401 
+	`__LDBL_REDIR1
+ (
+�me
+, 
+��o
+, 
+__�dbl_
+##
+��s
+)
+
+	)
+
+402 
+	#__REDIRECT_NTH_LDBL
+(
+�me
+, 
+��o
+, 
+��s
+) \
+
+403 
+	`__LDBL_REDIR1_NTH
+ (
+�me
+, 
+��o
+, 
+__�dbl_
+##
+��s
+)
+
+	)
+
+406 #i�!
+def�ed
+ 
+__LDBL_COMPAT
+ || !def�ed 
+__REDIRECT
+
+
+407 
+	#__LDBL_REDIR1
+(
+�me
+, 
+��o
+, 
+��s
+��m�
+	)
+proto
+
+408 
+	#__LDBL_REDIR
+(
+�me
+, 
+��o
+��m�
+	)
+proto
+
+409 
+	#__LDBL_REDIR1_NTH
+(
+�me
+, 
+��o
+, 
+��s
+��m����
+__THROW
+
+
+	)
+
+410 
+	#__LDBL_REDIR_NTH
+(
+�me
+, 
+��o
+��m����
+__THROW
+
+
+	)
+
+411 
+	#__LDBL_REDIR_DECL
+(
+�me
+)
+
+	)
+
+412 #ifde�
+__REDIRECT
+
+
+413 
+	#__REDIRECT_LDBL
+(
+�me
+, 
+��o
+, 
+��s
+�
+	`__REDIRECT
+ (�me,�r�o,�l�s)
+
+	)
+
+414 
+	#__REDIRECT_NTH_LDBL
+(
+�me
+, 
+��o
+, 
+��s
+) \
+
+415 
+	`__REDIRECT_NTH
+ (
+�me
+, 
+��o
+, 
+��s
+)
+
+	)
+
+	@/usr/include/sys/poll.h
+
+19 #i�def 
+_SYS_POLL_H
+
+
+20 
+	#_SYS_POLL_H
+ 1
+
+	)
+
+22 
+	~<�u�s.h
+>
+
+25 
+	~<b�s/p�l.h
+>
+
+26 #ifde�
+__USE_GNU
+
+
+28 
+	~<b�s/sig�t.h
+>
+
+30 
+	#__�ed_time�ec
+
+
+	)
+
+31 
+	~<time.h
+>
+
+36 
+	tnfds_t
+;
+
+39 
+	sp�lfd
+
+
+41 
+	mfd
+;
+
+42 
+	mev�ts
+;
+
+43 
+	m�v�ts
+;
+
+47 
+__BEGIN_DECLS
+
+
+57 

+p�l
+ (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+, 
+__timeout
+);
+
+59 #ifde�
+__USE_GNU
+
+
+66 

+��l
+ (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+,
+
+67 cڡ 
+time�ec
+ *
+__timeout
+,
+
+68 cڡ 
+__sig�t_t
+ *
+__ss
+);
+
+71 
+	g__END_DECLS
+
+
+75 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+
+
+76 
+	~<b�s/p�l2.h
+>
+
+	@/usr/include/sys/sysmacros.h
+
+19 #i�de�
+_SYS_SYSMACROS_H
+
+
+20 
+	#_SYS_SYSMACROS_H
+ 1
+
+	)
+
+22 
+	~<�u�s.h
+>
+
+24 
+__BEGIN_DECLS
+
+
+26 
+__ex�nsi�__
+
+
+27 

+	$gnu_dev_maj�
+ (
+__dev
+)
+
+28 
+__THROW
+ 
+__��ibu�_cڡ__
+;
+
+29 
+__ex�nsi�__
+
+
+30 

+	$gnu_dev_m��
+ (
+__dev
+)
+
+31 
+__THROW
+ 
+__��ibu�_cڡ__
+;
+
+32 
+__ex�nsi�__
+
+
+33 

+	$gnu_dev_makedev
+ (
+__maj�
+,
+
+34 
+__m��
+)
+
+35 
+__THROW
+ 
+__��ibu�_cڡ__
+;
+
+37 #ifde�
+__USE_EXTERN_INLINES
+
+
+38 
+__ex�nsi�__
+ 
+__ex��_�l�e
+ 
+__��ibu�_cڡ__
+ 
+
+39 
+	`__NTH
+ (
+	$gnu_dev_maj�
+ (
+__dev
+))
+
+41  ((
+__dev
+ >> 8) & 0xfff) | (() (__dev >> 32) & ~0xfff);
+
+42 
+	}
+}
+
+44 
+__ex�nsi�__
+ 
+__ex��_�l�e
+ 
+__��ibu�_cڡ__
+ 
+
+45 
+__NTH
+ (
+	$gnu_dev_m��
+ (
+__dev
+))
+
+47  (
+__dev
+ & 0xff) | (() (__dev >> 12) & ~0xff);
+
+48 
+	}
+}
+
+50 
+__ex�nsi�__
+ 
+__ex��_�l�e
+ 
+__��ibu�_cڡ__
+ 
+
+51 
+__NTH
+ (
+	$gnu_dev_makedev
+ (
+__maj�
+, 
+__m��
+))
+
+53  ((
+__m��
+ & 0xff�| ((
+__maj�
+ & 0xfff) << 8)
+
+54 | (((�(
+__m��
+ & ~0xff)) << 12)
+
+55 | (((�(
+__maj�
+ & ~0xfff)) << 32));
+
+56 
+	}
+}
+
+58 
+	g__END_DECLS
+
+
+61 
+	#maj�
+(
+dev
+�
+	`gnu_dev_maj�
+ (dev)
+
+	)
+
+62 
+	#m��
+(
+dev
+�
+	`gnu_dev_m��
+ (dev)
+
+	)
+
+63 
+	#makedev
+(
+maj
+, 
+m�
+�
+	`gnu_dev_makedev
+ (maj, m�)
+
+	)
+
+	@/usr/include/sys/ttydefaults.h
+
+40 #i�de�
+_SYS_TTYDEFAULTS_H_
+
+
+41 
+	#_SYS_TTYDEFAULTS_H_
+
+
+	)
+
+46 
+	#TTYDEF_IFLAG
+ (
+BRKINT
+ | 
+ISTRIP
+ | 
+ICRNL
+ | 
+IMAXBEL
+ | 
+IXON
+ | 
+IXANY
+)
+
+	)
+
+47 
+	#TTYDEF_OFLAG
+ (
+OPOST
+ | 
+ONLCR
+ | 
+XTABS
+)
+
+	)
+
+48 
+	#TTYDEF_LFLAG
+ (
+ECHO
+ | 
+ICANON
+ | 
+ISIG
+ | 
+IEXTEN
+ | 
+ECHOE
+|
+ECHOKE
+|
+ECHOCTL
+)
+
+	)
+
+49 
+	#TTYDEF_CFLAG
+ (
+CREAD
+ | 
+CS7
+ | 
+PARENB
+ | 
+HUPCL
+)
+
+	)
+
+50 
+	#TTYDEF_SPEED
+ (
+B9600
+)
+
+	)
+
+55 
+	#CTRL
+(
+x
+�(x&037)
+
+	)
+
+56 
+	#CEOF
+ 
+	`CTRL
+('d')
+
+	)
+
+57 #ifde�
+_POSIX_VDISABLE
+
+
+58 
+	#CEOL
+ 
+_POSIX_VDISABLE
+
+
+	)
+
+60 
+	#CEOL
+ '\0'
+
+	)
+
+62 
+	#CERASE
+ 0177
+
+	)
+
+63 
+	#CINTR
+ 
+	`CTRL
+('c')
+
+	)
+
+64 #ifde�
+_POSIX_VDISABLE
+
+
+65 
+	#CSTATUS
+ 
+_POSIX_VDISABLE
+
+
+	)
+
+67 
+	#CSTATUS
+ '\0'
+
+	)
+
+69 
+	#CKILL
+ 
+	`CTRL
+('u')
+
+	)
+
+70 
+	#CMIN
+ 1
+
+	)
+
+71 
+	#CQUIT
+ 034
+
+	)
+
+72 
+	#CSUSP
+ 
+	`CTRL
+('z')
+
+	)
+
+73 
+	#CTIME
+ 0
+
+	)
+
+74 
+	#CDSUSP
+ 
+	`CTRL
+('y')
+
+	)
+
+75 
+	#CSTART
+ 
+	`CTRL
+('q')
+
+	)
+
+76 
+	#CSTOP
+ 
+	`CTRL
+('s')
+
+	)
+
+77 
+	#CLNEXT
+ 
+	`CTRL
+('v')
+
+	)
+
+78 
+	#CDISCARD
+ 
+	`CTRL
+('o')
+
+	)
+
+79 
+	#CWERASE
+ 
+	`CTRL
+('w')
+
+	)
+
+80 
+	#CREPRINT
+ 
+	`CTRL
+('r')
+
+	)
+
+81 
+	#CEOT
+ 
+CEOF
+
+
+	)
+
+83 
+	#CBRK
+ 
+CEOL
+
+
+	)
+
+84 
+	#CRPRNT
+ 
+CREPRINT
+
+
+	)
+
+85 
+	#CFLUSH
+ 
+CDISCARD
+
+
+	)
+
+93 #ifde�
+TTYDEFCHARS
+
+
+94 
+cc_t
+ 
+	g�ydefch�s
+[
+NCCS
+] = {
+
+95 
+CEOF
+, 
+CEOL
+, CEOL, 
+CERASE
+, 
+CWERASE
+, 
+CKILL
+, 
+CREPRINT
+,
+
+96 
+_POSIX_VDISABLE
+, 
+CINTR
+, 
+CQUIT
+, 
+CSUSP
+, 
+CDSUSP
+, 
+CSTART
+, 
+CSTOP
+, 
+CLNEXT
+,
+
+97 
+CDISCARD
+, 
+CMIN
+, 
+CTIME
+, 
+CSTATUS
+, 
+_POSIX_VDISABLE
+
+
+99 #unde�
+TTYDEFCHARS
+
+
+	@/usr/include/sys/ucontext.h
+
+18 #i�de�
+_SYS_UCONTEXT_H
+
+
+19 
+	#_SYS_UCONTEXT_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+22 
+	~<sig�l.h
+>
+
+26 
+	~<b�s/sigcڋxt.h
+>
+
+28 #ifde�
+__x86_64__
+
+
+31 
+__ex�nsi�__
+ 
+	tg�g_t
+;
+
+34 
+	#NGREG
+ 23
+
+	)
+
+37 
+g�g_t
+ 
+	tg�g�t_t
+[
+NGREG
+];
+
+39 #ifde�
+__USE_GNU
+
+
+43 
+	mREG_R8
+ = 0,
+
+44 
+	#REG_R8
+ 
+REG_R8
+
+
+	)
+
+45 
+	mREG_R9
+,
+
+46 
+	#REG_R9
+ 
+REG_R9
+
+
+	)
+
+47 
+	mREG_R10
+,
+
+48 
+	#REG_R10
+ 
+REG_R10
+
+
+	)
+
+49 
+	mREG_R11
+,
+
+50 
+	#REG_R11
+ 
+REG_R11
+
+
+	)
+
+51 
+	mREG_R12
+,
+
+52 
+	#REG_R12
+ 
+REG_R12
+
+
+	)
+
+53 
+	mREG_R13
+,
+
+54 
+	#REG_R13
+ 
+REG_R13
+
+
+	)
+
+55 
+	mREG_R14
+,
+
+56 
+	#REG_R14
+ 
+REG_R14
+
+
+	)
+
+57 
+	mREG_R15
+,
+
+58 
+	#REG_R15
+ 
+REG_R15
+
+
+	)
+
+59 
+	mREG_RDI
+,
+
+60 
+	#REG_RDI
+ 
+REG_RDI
+
+
+	)
+
+61 
+	mREG_RSI
+,
+
+62 
+	#REG_RSI
+ 
+REG_RSI
+
+
+	)
+
+63 
+	mREG_RBP
+,
+
+64 
+	#REG_RBP
+ 
+REG_RBP
+
+
+	)
+
+65 
+	mREG_RBX
+,
+
+66 
+	#REG_RBX
+ 
+REG_RBX
+
+
+	)
+
+67 
+	mREG_RDX
+,
+
+68 
+	#REG_RDX
+ 
+REG_RDX
+
+
+	)
+
+69 
+	mREG_RAX
+,
+
+70 
+	#REG_RAX
+ 
+REG_RAX
+
+
+	)
+
+71 
+	mREG_RCX
+,
+
+72 
+	#REG_RCX
+ 
+REG_RCX
+
+
+	)
+
+73 
+	mREG_RSP
+,
+
+74 
+	#REG_RSP
+ 
+REG_RSP
+
+
+	)
+
+75 
+	mREG_RIP
+,
+
+76 
+	#REG_RIP
+ 
+REG_RIP
+
+
+	)
+
+77 
+	mREG_EFL
+,
+
+78 
+	#REG_EFL
+ 
+REG_EFL
+
+
+	)
+
+79 
+	mREG_CSGSFS
+,
+
+80 
+	#REG_CSGSFS
+ 
+REG_CSGSFS
+
+
+	)
+
+81 
+	mREG_ERR
+,
+
+82 
+	#REG_ERR
+ 
+REG_ERR
+
+
+	)
+
+83 
+	mREG_TRAPNO
+,
+
+84 
+	#REG_TRAPNO
+ 
+REG_TRAPNO
+
+
+	)
+
+85 
+	mREG_OLDMASK
+,
+
+86 
+	#REG_OLDMASK
+ 
+REG_OLDMASK
+
+
+	)
+
+87 
+	mREG_CR2
+
+
+88 
+	#REG_CR2
+ 
+REG_CR2
+
+
+	)
+
+92 
+	s_libc_�x�g
+
+
+94 
+	msignifi�nd
+[4];
+
+95 
+	mexpڒt
+;
+
+96 
+	m�dd�g
+[3];
+
+99 
+	s_libc_xmm�g
+
+
+101 
+__u�t32_t
+ 
+	m�em�t
+[4];
+
+104 
+	s_libc_塩e
+
+
+107 
+__u�t16_t
+ 
+	mcwd
+;
+
+108 
+__u�t16_t
+ 
+	mswd
+;
+
+109 
+__u�t16_t
+ 
+	m�w
+;
+
+110 
+__u�t16_t
+ 
+	mf�
+;
+
+111 
+__u�t64_t
+ 
+	mr�
+;
+
+112 
+__u�t64_t
+ 
+	mrdp
+;
+
+113 
+__u�t32_t
+ 
+	mmxc�
+;
+
+114 
+__u�t32_t
+ 
+	mmx�_mask
+;
+
+115 
+_libc_�x�g
+ 
+	m_�
+[8];
+
+116 
+_libc_xmm�g
+ 
+	m_xmm
+[16];
+
+117 
+__u�t32_t
+ 
+	m�dd�g
+[24];
+
+121 
+_libc_塩e
+ *
+	t�g�t_t
+;
+
+126 
+g�g�t_t
+ 
+	mg�gs
+;
+
+128 
+�g�t_t
+ 
+	m�gs
+;
+
+129 
+__ex�nsi�__
+ 
+	m__��rved1
+ [8];
+
+130 } 
+	tmcڋxt_t
+;
+
+133 
+	sucڋxt
+
+
+135 
+	muc_�ags
+;
+
+136 
+ucڋxt
+ *
+	muc_l�k
+;
+
+137 
+�ack_t
+ 
+	muc_�ack
+;
+
+138 
+mcڋxt_t
+ 
+	muc_mcڋxt
+;
+
+139 
+__sig�t_t
+ 
+	muc_sigmask
+;
+
+140 
+_libc_塩e
+ 
+	m__�gs_mem
+;
+
+141 } 
+	tucڋxt_t
+;
+
+146 
+	tg�g_t
+;
+
+149 
+	#NGREG
+ 19
+
+	)
+
+152 
+g�g_t
+ 
+	tg�g�t_t
+[
+NGREG
+];
+
+154 #ifde�
+__USE_GNU
+
+
+158 
+	mREG_GS
+ = 0,
+
+159 
+	#REG_GS
+ 
+REG_GS
+
+
+	)
+
+160 
+	mREG_FS
+,
+
+161 
+	#REG_FS
+ 
+REG_FS
+
+
+	)
+
+162 
+	mREG_ES
+,
+
+163 
+	#REG_ES
+ 
+REG_ES
+
+
+	)
+
+164 
+	mREG_DS
+,
+
+165 
+	#REG_DS
+ 
+REG_DS
+
+
+	)
+
+166 
+	mREG_EDI
+,
+
+167 
+	#REG_EDI
+ 
+REG_EDI
+
+
+	)
+
+168 
+	mREG_ESI
+,
+
+169 
+	#REG_ESI
+ 
+REG_ESI
+
+
+	)
+
+170 
+	mREG_EBP
+,
+
+171 
+	#REG_EBP
+ 
+REG_EBP
+
+
+	)
+
+172 
+	mREG_ESP
+,
+
+173 
+	#REG_ESP
+ 
+REG_ESP
+
+
+	)
+
+174 
+	mREG_EBX
+,
+
+175 
+	#REG_EBX
+ 
+REG_EBX
+
+
+	)
+
+176 
+	mREG_EDX
+,
+
+177 
+	#REG_EDX
+ 
+REG_EDX
+
+
+	)
+
+178 
+	mREG_ECX
+,
+
+179 
+	#REG_ECX
+ 
+REG_ECX
+
+
+	)
+
+180 
+	mREG_EAX
+,
+
+181 
+	#REG_EAX
+ 
+REG_EAX
+
+
+	)
+
+182 
+	mREG_TRAPNO
+,
+
+183 
+	#REG_TRAPNO
+ 
+REG_TRAPNO
+
+
+	)
+
+184 
+	mREG_ERR
+,
+
+185 
+	#REG_ERR
+ 
+REG_ERR
+
+
+	)
+
+186 
+	mREG_EIP
+,
+
+187 
+	#REG_EIP
+ 
+REG_EIP
+
+
+	)
+
+188 
+	mREG_CS
+,
+
+189 
+	#REG_CS
+ 
+REG_CS
+
+
+	)
+
+190 
+	mREG_EFL
+,
+
+191 
+	#REG_EFL
+ 
+REG_EFL
+
+
+	)
+
+192 
+	mREG_UESP
+,
+
+193 
+	#REG_UESP
+ 
+REG_UESP
+
+
+	)
+
+194 
+	mREG_SS
+
+
+195 
+	#REG_SS
+ 
+REG_SS
+
+
+	)
+
+200 
+	s_libc_�g
+
+
+202 
+	msignifi�nd
+[4];
+
+203 
+	mexpڒt
+;
+
+206 
+	s_libc_塩e
+
+
+208 
+	mcw
+;
+
+209 
+	msw
+;
+
+210 
+	m�g
+;
+
+211 
+	m�off
+;
+
+212 
+	mcs�l
+;
+
+213 
+	md�aoff
+;
+
+214 
+	md�a�l
+;
+
+215 
+_libc_�g
+ 
+	m_�
+[8];
+
+216 
+	m��us
+;
+
+220 
+_libc_塩e
+ *
+	t�g�t_t
+;
+
+225 
+g�g�t_t
+ 
+	mg�gs
+;
+
+228 
+�g�t_t
+ 
+	m�gs
+;
+
+229 
+	m�dmask
+;
+
+230 
+	m�2
+;
+
+231 } 
+	tmcڋxt_t
+;
+
+234 
+	sucڋxt
+
+
+236 
+	muc_�ags
+;
+
+237 
+ucڋxt
+ *
+	muc_l�k
+;
+
+238 
+�ack_t
+ 
+	muc_�ack
+;
+
+239 
+mcڋxt_t
+ 
+	muc_mcڋxt
+;
+
+240 
+__sig�t_t
+ 
+	muc_sigmask
+;
+
+241 
+_libc_塩e
+ 
+	m__�gs_mem
+;
+
+242 } 
+	tucڋxt_t
+;
+
+	@/usr/include/sys/uio.h
+
+18 #i�de�
+_SYS_UIO_H
+
+
+19 
+	#_SYS_UIO_H
+ 1
+
+	)
+
+21 
+	~<�u�s.h
+>
+
+23 
+	~<sys/ty�s.h
+>
+
+25 
+	g__BEGIN_DECLS
+
+
+28 
+	~<b�s/uio.h
+>
+
+39 
+ssize_t
+ 
+	$�adv
+ (
+__fd
+, cڡ 
+iovec
+ *
+__iovec
+, 
+__cou�
+)
+
+40 
+__wur
+;
+
+50 
+ssize_t
+ 
+	$wr�ev
+ (
+__fd
+, cڡ 
+iovec
+ *
+__iovec
+, 
+__cou�
+)
+
+51 
+__wur
+;
+
+54 #ifde�
+__USE_BSD
+
+
+55 #i�de�
+__USE_FILE_OFFSET64
+
+
+65 
+ssize_t
+ 
+	$��dv
+ (
+__fd
+, cڡ 
+iovec
+ *
+__iovec
+, 
+__cou�
+,
+
+66 
+__off_t
+ 
+__off�t
+�
+__wur
+;
+
+77 
+ssize_t
+ 
+	$pwr�ev
+ (
+__fd
+, cڡ 
+iovec
+ *
+__iovec
+, 
+__cou�
+,
+
+78 
+__off_t
+ 
+__off�t
+�
+__wur
+;
+
+80 #ifde�
+__REDIRECT
+
+
+81 
+ssize_t
+ 
+	`__REDIRECT
+ (
+��dv
+, (
+__fd
+, cڡ 
+iovec
+ *
+__iovec
+,
+
+82 
+__cou�
+, 
+__off64_t
+ 
+__off�t
+),
+
+83 
+��dv64
+�
+__wur
+;
+
+84 
+ssize_t
+ 
+	`__REDIRECT
+ (
+pwr�ev
+, (
+__fd
+, cڡ 
+iovec
+ *
+__iovec
+,
+
+85 
+__cou�
+, 
+__off64_t
+ 
+__off�t
+),
+
+86 
+pwr�ev64
+�
+__wur
+;
+
+88 
+	#��dv
+ 
+��dv64
+
+
+	)
+
+89 
+	#pwr�ev
+ 
+pwr�ev64
+
+
+	)
+
+93 #ifde�
+__USE_LARGEFILE64
+
+
+103 
+ssize_t
+ 
+	$��dv64
+ (
+__fd
+, cڡ 
+iovec
+ *
+__iovec
+, 
+__cou�
+,
+
+104 
+__off64_t
+ 
+__off�t
+�
+__wur
+;
+
+115 
+ssize_t
+ 
+	$pwr�ev64
+ (
+__fd
+, cڡ 
+iovec
+ *
+__iovec
+, 
+__cou�
+,
+
+116 
+__off64_t
+ 
+__off�t
+�
+__wur
+;
+
+120 
+__END_DECLS
+
+
+	@/usr/include/xlocale.h
+
+20 #i�de�
+_XLOCALE_H
+
+
+21 
+	#_XLOCALE_H
+ 1
+
+	)
+
+27 
+	s__lo��_�ru�
+
+
+30 
+__lo��_d�a
+ *
+	m__lo��s
+[13];
+
+33 cڡ *
+	m__�y�_b
+;
+
+34 cڡ *
+	m__�y�_t�ow�
+;
+
+35 cڡ *
+	m__�y�_tou��
+;
+
+38 cڡ *
+	m__�mes
+[13];
+
+39 } *
+	t__lo��_t
+;
+
+42 
+__lo��_t
+ 
+	tlo��_t
+;
+
+	@/usr/include/_G_config.h
+
+4 #i�de�
+_G_c�fig_h
+
+
+5 
+	#_G_c�fig_h
+ 1
+
+	)
+
+9 
+	~<b�s/ty�s.h
+>
+
+10 
+	#__�ed_size_t
+
+
+	)
+
+11 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_GLIBCPP_USE_WCHAR_T
+
+
+12 
+	#__�ed_wch�_t
+
+
+	)
+
+14 
+	#__�ed_NULL
+
+
+	)
+
+15 
+	~<�ddef.h
+>
+
+16 
+	#__�ed_mb��e_t
+
+
+	)
+
+17 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_GLIBCPP_USE_WCHAR_T
+
+
+18 
+	#__�ed_w�t_t
+
+
+	)
+
+20 
+	~<wch�.h
+>
+
+23 
+__off_t
+ 
+	m__pos
+;
+
+24 
+__mb��e_t
+ 
+	m__��e
+;
+
+25 } 
+	t_G_�os_t
+;
+
+28 
+__off64_t
+ 
+	m__pos
+;
+
+29 
+__mb��e_t
+ 
+	m__��e
+;
+
+30 } 
+	t_G_�os64_t
+;
+
+31 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_GLIBCPP_USE_WCHAR_T
+
+
+32 
+	~<gc�v.h
+>
+
+35 
+__gc�v_�fo
+ 
+	m__cd
+;
+
+38 
+__gc�v_�fo
+ 
+	m__cd
+;
+
+39 
+__gc�v_��_d�a
+ 
+	m__d�a
+;
+
+40 } 
+	m__comb�ed
+;
+
+41 } 
+	t_G_ic�v_t
+;
+
+46 
+	#_G_va_li�
+ 
+__gnuc_va_li�
+
+
+	)
+
+48 
+	#_G_HAVE_MMAP
+ 1
+
+	)
+
+49 
+	#_G_HAVE_MREMAP
+ 1
+
+	)
+
+51 
+	#_G_IO_IO_FILE_VERSION
+ 0x20001
+
+	)
+
+54 
+	#_G_HAVE_ST_BLKSIZE
+ 
+	`def�ed
+ (
+_STATBUF_ST_BLKSIZE
+)
+
+	)
+
+56 
+	#_G_BUFSIZ
+ 8192
+
+	)
+
+	@/usr/include/asm-generic/sockios.h
+
+1 #i�de�
+__ASM_GENERIC_SOCKIOS_H
+
+
+2 
+	#__ASM_GENERIC_SOCKIOS_H
+
+
+	)
+
+5 
+	#FIOSETOWN
+ 0x8901
+
+	)
+
+6 
+	#SIOCSPGRP
+ 0x8902
+
+	)
+
+7 
+	#FIOGETOWN
+ 0x8903
+
+	)
+
+8 
+	#SIOCGPGRP
+ 0x8904
+
+	)
+
+9 
+	#SIOCATMARK
+ 0x8905
+
+	)
+
+10 
+	#SIOCGSTAMP
+ 0x8906
+
+	)
+
+11 
+	#SIOCGSTAMPNS
+ 0x8907
+
+	)
+
+	@/usr/include/asm/ioctls.h
+
+1 
+	~<asm-g��ic/io�ls.h
+>
+
+	@/usr/include/asm/socket.h
+
+1 
+	~<asm-g��ic/sock�.h
+>
+
+	@/usr/include/bits/byteswap-16.h
+
+19 #i�de�
+_BITS_BYTESWAP_H
+
+
+23 #ifde�
+__GNUC__
+
+
+24 #i�
+__GNUC__
+ >= 2
+
+25 
+	#__bsw�_16
+(
+x
+) \
+
+26 (
+__ex�nsi�__
+ \
+
+27 ({ 
+__v
+, 
+__x
+ = (�(
+x
+); \
+
+28 i�(
+	`__bu�t�_cڡ�t_p
+ (
+__x
+)) \
+
+29 
+__v
+ = 
+	`__bsw�_cڡ�t_16
+ (
+__x
+); \
+
+31 
+	`__asm__
+ ("rorw $8, %w0" \
+
+32 : "�" (
+__v
+) \
+
+33 : "0" (
+__x
+) \
+
+35 
+__v
+; }))
+
+	)
+
+38 
+	#__bsw�_16
+(
+x
+) \
+
+39 (
+__ex�nsi�__
+ \
+
+40 ({ 
+__x
+ = (�(
+x
+); \
+
+41 
+	`__bsw�_cڡ�t_16
+ (
+__x
+); }))
+
+	)
+
+44 
+__�l�e
+ 
+
+45 
+	$__bsw�_16
+ (
+__bsx
+)
+
+47  
+	`__bsw�_cڡ�t_16
+ (
+__bsx
+);
+
+48 
+	}
+}
+
+	@/usr/include/bits/endian.h
+
+3 #i�de�
+_ENDIAN_H
+
+
+7 
+	#__BYTE_ORDER
+ 
+__LITTLE_ENDIAN
+
+
+	)
+
+	@/usr/include/bits/fcntl-linux.h
+
+19 #i�def 
+_FCNTL_H
+
+
+37 #ifde�
+__USE_GNU
+
+
+38 
+	~<b�s/uio.h
+>
+
+42 
+	#O_ACCMODE
+ 0003
+
+	)
+
+43 
+	#O_RDONLY
+ 00
+
+	)
+
+44 
+	#O_WRONLY
+ 01
+
+	)
+
+45 
+	#O_RDWR
+ 02
+
+	)
+
+46 #i�de�
+O_CREAT
+
+
+47 
+	#O_CREAT
+ 0100
+
+	)
+
+49 #i�de�
+O_EXCL
+
+
+50 
+	#O_EXCL
+ 0200
+
+	)
+
+52 #i�de�
+O_NOCTTY
+
+
+53 
+	#O_NOCTTY
+ 0400
+
+	)
+
+55 #i�de�
+O_TRUNC
+
+
+56 
+	#O_TRUNC
+ 01000
+
+	)
+
+58 #i�de�
+O_APPEND
+
+
+59 
+	#O_APPEND
+ 02000
+
+	)
+
+61 #i�de�
+O_NONBLOCK
+
+
+62 
+	#O_NONBLOCK
+ 04000
+
+	)
+
+64 #i�de�
+O_NDELAY
+
+
+65 
+	#O_NDELAY
+ 
+O_NONBLOCK
+
+
+	)
+
+67 #i�de�
+O_SYNC
+
+
+68 
+	#O_SYNC
+ 04010000
+
+	)
+
+70 
+	#O_FSYNC
+ 
+O_SYNC
+
+
+	)
+
+71 #i�de�
+O_ASYNC
+
+
+72 
+	#O_ASYNC
+ 020000
+
+	)
+
+74 #i�de�
+__O_LARGEFILE
+
+
+75 
+	#__O_LARGEFILE
+ 0100000
+
+	)
+
+78 #i�de�
+__O_DIRECTORY
+
+
+79 
+	#__O_DIRECTORY
+ 0200000
+
+	)
+
+81 #i�de�
+__O_NOFOLLOW
+
+
+82 
+	#__O_NOFOLLOW
+ 0400000
+
+	)
+
+84 #i�de�
+__O_CLOEXEC
+
+
+85 
+	#__O_CLOEXEC
+ 02000000
+
+	)
+
+87 #i�de�
+__O_DIRECT
+
+
+88 
+	#__O_DIRECT
+ 040000
+
+	)
+
+90 #i�de�
+__O_NOATIME
+
+
+91 
+	#__O_NOATIME
+ 01000000
+
+	)
+
+93 #i�de�
+__O_PATH
+
+
+94 
+	#__O_PATH
+ 010000000
+
+	)
+
+96 #i�de�
+__O_DSYNC
+
+
+97 
+	#__O_DSYNC
+ 010000
+
+	)
+
+99 #i�de�
+__O_TMPFILE
+
+
+100 
+	#__O_TMPFILE
+ 020200000
+
+	)
+
+103 #i�de�
+F_GETLK
+
+
+104 #i�de�
+__USE_FILE_OFFSET64
+
+
+105 
+	#F_GETLK
+ 5
+
+	)
+
+106 
+	#F_SETLK
+ 6
+
+	)
+
+107 
+	#F_SETLKW
+ 7
+
+	)
+
+109 
+	#F_GETLK
+ 
+F_GETLK64
+
+
+	)
+
+110 
+	#F_SETLK
+ 
+F_SETLK64
+
+
+	)
+
+111 
+	#F_SETLKW
+ 
+F_SETLKW64
+
+
+	)
+
+114 #i�de�
+F_GETLK64
+
+
+115 
+	#F_GETLK64
+ 12
+
+	)
+
+116 
+	#F_SETLK64
+ 13
+
+	)
+
+117 
+	#F_SETLKW64
+ 14
+
+	)
+
+120 #ifde�
+__USE_LARGEFILE64
+
+
+121 
+	#O_LARGEFILE
+ 
+__O_LARGEFILE
+
+
+	)
+
+124 #ifde�
+__USE_XOPEN2K8
+
+
+125 
+	#O_DIRECTORY
+ 
+__O_DIRECTORY
+
+
+	)
+
+126 
+	#O_NOFOLLOW
+ 
+__O_NOFOLLOW
+
+
+	)
+
+127 
+	#O_CLOEXEC
+ 
+__O_CLOEXEC
+
+
+	)
+
+130 #ifde�
+__USE_GNU
+
+
+131 
+	#O_DIRECT
+ 
+__O_DIRECT
+
+
+	)
+
+132 
+	#O_NOATIME
+ 
+__O_NOATIME
+
+
+	)
+
+133 
+	#O_PATH
+ 
+__O_PATH
+
+
+	)
+
+134 
+	#O_TMPFILE
+ 
+__O_TMPFILE
+
+
+	)
+
+140 #i�
+def�ed
+ 
+__USE_POSIX199309
+ || def�ed 
+__USE_UNIX98
+
+
+141 
+	#O_DSYNC
+ 
+__O_DSYNC
+
+
+	)
+
+142 #i�
+def�ed
+ 
+__O_RSYNC
+
+
+143 
+	#O_RSYNC
+ 
+__O_RSYNC
+
+
+	)
+
+145 
+	#O_RSYNC
+ 
+O_SYNC
+
+
+	)
+
+150 
+	#F_DUPFD
+ 0
+
+	)
+
+151 
+	#F_GETFD
+ 1
+
+	)
+
+152 
+	#F_SETFD
+ 2
+
+	)
+
+153 
+	#F_GETFL
+ 3
+
+	)
+
+154 
+	#F_SETFL
+ 4
+
+	)
+
+156 #i�de�
+__F_SETOWN
+
+
+157 
+	#__F_SETOWN
+ 8
+
+	)
+
+158 
+	#__F_GETOWN
+ 9
+
+	)
+
+161 #i�
+def�ed
+ 
+__USE_BSD
+ || def�ed 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K8
+
+
+162 
+	#F_SETOWN
+ 
+__F_SETOWN
+
+
+	)
+
+163 
+	#F_GETOWN
+ 
+__F_GETOWN
+
+
+	)
+
+166 #i�de�
+__F_SETSIG
+
+
+167 
+	#__F_SETSIG
+ 10
+
+	)
+
+168 
+	#__F_GETSIG
+ 11
+
+	)
+
+170 #i�de�
+__F_SETOWN_EX
+
+
+171 
+	#__F_SETOWN_EX
+ 15
+
+	)
+
+172 
+	#__F_GETOWN_EX
+ 16
+
+	)
+
+175 #ifde�
+__USE_GNU
+
+
+176 
+	#F_SETSIG
+ 
+__F_SETSIG
+
+
+	)
+
+177 
+	#F_GETSIG
+ 
+__F_GETSIG
+
+
+	)
+
+178 
+	#F_SETOWN_EX
+ 
+__F_SETOWN_EX
+
+
+	)
+
+179 
+	#F_GETOWN_EX
+ 
+__F_GETOWN_EX
+
+
+	)
+
+182 #ifde�
+__USE_GNU
+
+
+183 
+	#F_SETLEASE
+ 1024
+
+	)
+
+184 
+	#F_GETLEASE
+ 1025
+
+	)
+
+185 
+	#F_NOTIFY
+ 1026
+
+	)
+
+186 
+	#F_SETPIPE_SZ
+ 1031
+
+	)
+
+187 
+	#F_GETPIPE_SZ
+ 1032
+
+	)
+
+189 #ifde�
+__USE_XOPEN2K8
+
+
+190 
+	#F_DUPFD_CLOEXEC
+ 1030
+
+	)
+
+195 
+	#FD_CLOEXEC
+ 1
+
+	)
+
+197 #i�de�
+F_RDLCK
+
+
+199 
+	#F_RDLCK
+ 0
+
+	)
+
+200 
+	#F_WRLCK
+ 1
+
+	)
+
+201 
+	#F_UNLCK
+ 2
+
+	)
+
+206 #i�de�
+F_EXLCK
+
+
+207 
+	#F_EXLCK
+ 4
+
+	)
+
+208 
+	#F_SHLCK
+ 8
+
+	)
+
+211 #ifde�
+__USE_BSD
+
+
+213 
+	#LOCK_SH
+ 1
+
+	)
+
+214 
+	#LOCK_EX
+ 2
+
+	)
+
+215 
+	#LOCK_NB
+ 4
+
+	)
+
+217 
+	#LOCK_UN
+ 8
+
+	)
+
+220 #ifde�
+__USE_GNU
+
+
+221 
+	#LOCK_MAND
+ 32
+
+	)
+
+222 
+	#LOCK_READ
+ 64
+
+	)
+
+223 
+	#LOCK_WRITE
+ 128
+
+	)
+
+224 
+	#LOCK_RW
+ 192
+
+	)
+
+227 #ifde�
+__USE_GNU
+
+
+229 
+	#DN_ACCESS
+ 0x00000001
+
+	)
+
+230 
+	#DN_MODIFY
+ 0x00000002
+
+	)
+
+231 
+	#DN_CREATE
+ 0x00000004
+
+	)
+
+232 
+	#DN_DELETE
+ 0x00000008
+
+	)
+
+233 
+	#DN_RENAME
+ 0x00000010
+
+	)
+
+234 
+	#DN_ATTRIB
+ 0x00000020
+
+	)
+
+235 
+	#DN_MULTISHOT
+ 0x80000000
+
+	)
+
+239 #ifde�
+__USE_GNU
+
+
+241 
+	e__pid_ty�
+
+
+243 
+	mF_OWNER_TID
+ = 0,
+
+244 
+	mF_OWNER_PID
+,
+
+245 
+	mF_OWNER_PGRP
+,
+
+246 
+	mF_OWNER_GID
+ = 
+F_OWNER_PGRP
+
+
+250 
+	sf_ow�r_ex
+
+
+252 
+__pid_ty�
+ 
+	mty�
+;
+
+253 
+__pid_t
+ 
+	mpid
+;
+
+259 #ifdef 
+__USE_BSD
+
+
+260 
+	#FAPPEND
+ 
+O_APPEND
+
+
+	)
+
+261 
+	#FFSYNC
+ 
+O_FSYNC
+
+
+	)
+
+262 
+	#FASYNC
+ 
+O_ASYNC
+
+
+	)
+
+263 
+	#FNONBLOCK
+ 
+O_NONBLOCK
+
+
+	)
+
+264 
+	#FNDELAY
+ 
+O_NDELAY
+
+
+	)
+
+267 #i�de�
+__POSIX_FADV_DONTNEED
+
+
+268 
+	#__POSIX_FADV_DONTNEED
+ 4
+
+	)
+
+269 
+	#__POSIX_FADV_NOREUSE
+ 5
+
+	)
+
+272 #ifde�
+__USE_XOPEN2K
+
+
+273 
+	#POSIX_FADV_NORMAL
+ 0
+
+	)
+
+274 
+	#POSIX_FADV_RANDOM
+ 1
+
+	)
+
+275 
+	#POSIX_FADV_SEQUENTIAL
+ 2
+
+	)
+
+276 
+	#POSIX_FADV_WILLNEED
+ 3
+
+	)
+
+277 
+	#POSIX_FADV_DONTNEED
+ 
+__POSIX_FADV_DONTNEED
+
+
+	)
+
+278 
+	#POSIX_FADV_NOREUSE
+ 
+__POSIX_FADV_NOREUSE
+
+
+	)
+
+282 #ifde�
+__USE_GNU
+
+
+284 
+	#SYNC_FILE_RANGE_WAIT_BEFORE
+ 1
+
+	)
+
+287 
+	#SYNC_FILE_RANGE_WRITE
+ 2
+
+	)
+
+290 
+	#SYNC_FILE_RANGE_WAIT_AFTER
+ 4
+
+	)
+
+295 
+	#SPLICE_F_MOVE
+ 1
+
+	)
+
+296 
+	#SPLICE_F_NONBLOCK
+ 2
+
+	)
+
+299 
+	#SPLICE_F_MORE
+ 4
+
+	)
+
+300 
+	#SPLICE_F_GIFT
+ 8
+
+	)
+
+304 
+	#FALLOC_FL_KEEP_SIZE
+ 1
+
+	)
+
+307 
+	#FALLOC_FL_PUNCH_HOLE
+ 2
+
+	)
+
+311 
+	sf�e_h�d�
+
+
+313 
+	mh�d�_by�s
+;
+
+314 
+	mh�d�_ty�
+;
+
+316 
+	mf_h�d�
+[0];
+
+320 
+	#MAX_HANDLE_SZ
+ 128
+
+	)
+
+324 #ifde�
+__USE_ATFILE
+
+
+325 
+	#AT_FDCWD
+ -100
+
+	)
+
+328 
+	#AT_SYMLINK_NOFOLLOW
+ 0x100
+
+	)
+
+329 
+	#AT_REMOVEDIR
+ 0x200
+
+	)
+
+331 
+	#AT_SYMLINK_FOLLOW
+ 0x400
+
+	)
+
+332 #ifde�
+__USE_GNU
+
+
+333 
+	#AT_NO_AUTOMOUNT
+ 0x800
+
+	)
+
+335 
+	#AT_EMPTY_PATH
+ 0x1000
+
+	)
+
+337 
+	#AT_EACCESS
+ 0x200
+
+	)
+
+341 
+	g__BEGIN_DECLS
+
+
+343 #ifde�
+__USE_GNU
+
+
+346 
+ssize_t
+ 
+	$�adah�d
+ (
+__fd
+, 
+__off64_t
+ 
+__off�t
+, 
+size_t
+ 
+__cou�
+)
+
+347 
+__THROW
+;
+
+354 

+	`sync_f�e_�nge
+ (
+__fd
+, 
+__off64_t
+ 
+__off�t
+, __off64_�
+__cou�
+,
+
+355 
+__�ags
+);
+
+362 
+ssize_t
+ 
+	`vm�li�
+ (
+__fdout
+, cڡ 
+iovec
+ *
+__iov
+,
+
+363 
+size_t
+ 
+__cou�
+, 
+__�ags
+);
+
+369 
+ssize_t
+ 
+	`�li�
+ (
+__fd�
+, 
+__off64_t
+ *
+__off�
+, 
+__fdout
+,
+
+370 
+__off64_t
+ *
+__offout
+, 
+size_t
+ 
+__�n
+,
+
+371 
+__�ags
+);
+
+377 
+ssize_t
+ 
+	`�e
+ (
+__fd�
+, 
+__fdout
+, 
+size_t
+ 
+__�n
+,
+
+378 
+__�ags
+);
+
+384 #i�de�
+__USE_FILE_OFFSET64
+
+
+385 

+	`��o��
+ (
+__fd
+, 
+__mode
+, 
+__off_t
+ 
+__off�t
+, __off_�
+__�n
+);
+
+387 #ifde�
+__REDIRECT
+
+
+388 

+	`__REDIRECT
+ (
+��o��
+, (
+__fd
+, 
+__mode
+, 
+__off64_t
+ 
+__off�t
+,
+
+389 
+__off64_t
+ 
+__�n
+),
+
+390 
+��o��64
+);
+
+392 
+	#��o��
+ 
+��o��64
+
+
+	)
+
+395 #ifde�
+__USE_LARGEFILE64
+
+
+396 

+	`��o��64
+ (
+__fd
+, 
+__mode
+, 
+__off64_t
+ 
+__off�t
+,
+
+397 
+__off64_t
+ 
+__�n
+);
+
+402 

+	$�me_to_h�d�_�
+ (
+__dfd
+, cڡ *
+__�me
+,
+
+403 
+f�e_h�d�
+ *
+__h�d�
+, *
+__m�_id
+,
+
+404 
+__�ags
+�
+__THROW
+;
+
+410 

+	`ݒ_by_h�d�_�
+ (
+__mou�d�fd
+, 
+f�e_h�d�
+ *
+__h�d�
+,
+
+411 
+__�ags
+);
+
+415 
+__END_DECLS
+
+
+	@/usr/include/bits/libio-ldbl.h
+
+19 #i�de�
+_IO_STDIO_H
+
+
+23 
+	$__LDBL_REDIR_DECL
+ (
+_IO_vfs�nf
+)
+
+24 
+	`__LDBL_REDIR_DECL
+ (
+_IO_v�r�tf
+)
+
+	@/usr/include/bits/poll.h
+
+18 #i�de�
+_SYS_POLL_H
+
+
+25 
+	#POLLIN
+ 0x001
+
+	)
+
+26 
+	#POLLPRI
+ 0x002
+
+	)
+
+27 
+	#POLLOUT
+ 0x004
+
+	)
+
+29 #i�
+def�ed
+ 
+__USE_XOPEN
+ || def�ed 
+__USE_XOPEN2K8
+
+
+31 
+	#POLLRDNORM
+ 0x040
+
+	)
+
+32 
+	#POLLRDBAND
+ 0x080
+
+	)
+
+33 
+	#POLLWRNORM
+ 0x100
+
+	)
+
+34 
+	#POLLWRBAND
+ 0x200
+
+	)
+
+37 #ifde�
+__USE_GNU
+
+
+39 
+	#POLLMSG
+ 0x400
+
+	)
+
+40 
+	#POLLREMOVE
+ 0x1000
+
+	)
+
+41 
+	#POLLRDHUP
+ 0x2000
+
+	)
+
+47 
+	#POLLERR
+ 0x008
+
+	)
+
+48 
+	#POLLHUP
+ 0x010
+
+	)
+
+49 
+	#POLLNVAL
+ 0x020
+
+	)
+
+	@/usr/include/bits/poll2.h
+
+19 #i�de�
+_SYS_POLL_H
+
+
+24 
+__BEGIN_DECLS
+
+
+26 

+__REDIRECT
+ (
+__p�l_��s
+, (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+,
+
+27 
+__timeout
+), 
+p�l
+);
+
+28 

+__p�l_chk
+ (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+, 
+__timeout
+,
+
+29 
+__SIZE_TYPE__
+ 
+__fd��
+);
+
+30 

+__REDIRECT
+ (
+__p�l_chk_w�n
+, (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+,
+
+31 
+__timeout
+, 
+__SIZE_TYPE__
+ 
+__fd��
+),
+
+32 
+__p�l_chk
+)
+
+33 
+__w�ljr
+ ("poll called with fds buffer�oo small file�fds�ntries");
+
+35 
+__f�tify_fun�i�
+ 
+
+36 
+	$p�l
+ (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+, 
+__timeout
+)
+
+38 i�(
+	`__bos
+ (
+__fds
+�!�(
+__SIZE_TYPE__
+) -1)
+
+40 i�(! 
+	`__bu�t�_cڡ�t_p
+ (
+__nfds
+))
+
+41  
+	`__p�l_chk
+ (
+__fds
+, 
+__nfds
+, 
+__timeout
+, 
+	`__bos
+ (__fds));
+
+42 i�(
+	`__bos
+ (
+__fds
+�/  (*__fds�< 
+__nfds
+)
+
+43  
+	`__p�l_chk_w�n
+ (
+__fds
+, 
+__nfds
+, 
+__timeout
+, 
+	`__bos
+ (__fds));
+
+46  
+	`__p�l_��s
+ (
+__fds
+, 
+__nfds
+, 
+__timeout
+);
+
+47 
+	}
+}
+
+50 #ifde�
+__USE_GNU
+
+
+51 

+__REDIRECT
+ (
+__��l_��s
+, (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+,
+
+52 cڡ 
+time�ec
+ *
+__timeout
+,
+
+53 cڡ 
+__sig�t_t
+ *
+__ss
+), 
+��l
+);
+
+54 

+__��l_chk
+ (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+,
+
+55 cڡ 
+time�ec
+ *
+__timeout
+,
+
+56 cڡ 
+__sig�t_t
+ *
+__ss
+, 
+__SIZE_TYPE__
+ 
+__fd��
+);
+
+57 

+__REDIRECT
+ (
+__��l_chk_w�n
+, (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+,
+
+58 cڡ 
+time�ec
+ *
+__timeout
+,
+
+59 cڡ 
+__sig�t_t
+ *
+__ss
+,
+
+60 
+__SIZE_TYPE__
+ 
+__fd��
+),
+
+61 
+__��l_chk
+)
+
+62 
+__w�ljr
+ ("ppoll called with fds buffer�oo small file�fds�ntries");
+
+64 
+__f�tify_fun�i�
+ 
+
+65 
+	$��l
+ (
+p�lfd
+ *
+__fds
+, 
+nfds_t
+ 
+__nfds
+, cڡ 
+time�ec
+ *
+__timeout
+,
+
+66 cڡ 
+__sig�t_t
+ *
+__ss
+)
+
+68 i�(
+	`__bos
+ (
+__fds
+�!�(
+__SIZE_TYPE__
+) -1)
+
+70 i�(! 
+	`__bu�t�_cڡ�t_p
+ (
+__nfds
+))
+
+71  
+	`__��l_chk
+ (
+__fds
+, 
+__nfds
+, 
+__timeout
+, 
+__ss
+, 
+	`__bos
+ (__fds));
+
+72 i�(
+	`__bos
+ (
+__fds
+�/  (*__fds�< 
+__nfds
+)
+
+73  
+	`__��l_chk_w�n
+ (
+__fds
+, 
+__nfds
+, 
+__timeout
+, 
+__ss
+,
+
+74 
+	`__bos
+ (
+__fds
+));
+
+77  
+	`__��l_��s
+ (
+__fds
+, 
+__nfds
+, 
+__timeout
+, 
+__ss
+);
+
+78 
+	}
+}
+
+81 
+	g__END_DECLS
+
+
+	@/usr/include/bits/sched.h
+
+20 #i�de�
+__�ed_sched��m
+
+
+22 #i�de�
+_SCHED_H
+
+
+28 
+	#SCHED_OTHER
+ 0
+
+	)
+
+29 
+	#SCHED_FIFO
+ 1
+
+	)
+
+30 
+	#SCHED_RR
+ 2
+
+	)
+
+31 #ifde�
+__USE_GNU
+
+
+32 
+	#SCHED_BATCH
+ 3
+
+	)
+
+33 
+	#SCHED_IDLE
+ 5
+
+	)
+
+35 
+	#SCHED_RESET_ON_FORK
+ 0x40000000
+
+	)
+
+38 #ifde�
+__USE_GNU
+
+
+40 
+	#CSIGNAL
+ 0x000000f�
+
+	)
+
+41 
+	#CLONE_VM
+ 0x00000100
+
+	)
+
+42 
+	#CLONE_FS
+ 0x00000200
+
+	)
+
+43 
+	#CLONE_FILES
+ 0x00000400
+
+	)
+
+44 
+	#CLONE_SIGHAND
+ 0x00000800
+
+	)
+
+45 
+	#CLONE_PTRACE
+ 0x00002000
+
+	)
+
+46 
+	#CLONE_VFORK
+ 0x00004000
+
+	)
+
+48 
+	#CLONE_PARENT
+ 0x00008000
+
+	)
+
+50 
+	#CLONE_THREAD
+ 0x00010000
+
+	)
+
+51 
+	#CLONE_NEWNS
+ 0x00020000
+
+	)
+
+52 
+	#CLONE_SYSVSEM
+ 0x00040000
+
+	)
+
+53 
+	#CLONE_SETTLS
+ 0x00080000
+
+	)
+
+54 
+	#CLONE_PARENT_SETTID
+ 0x00100000
+
+	)
+
+56 
+	#CLONE_CHILD_CLEARTID
+ 0x00200000
+
+	)
+
+58 
+	#CLONE_DETACHED
+ 0x00400000
+
+	)
+
+59 
+	#CLONE_UNTRACED
+ 0x00800000
+
+	)
+
+61 
+	#CLONE_CHILD_SETTID
+ 0x01000000
+
+	)
+
+63 
+	#CLONE_NEWUTS
+ 0x04000000
+
+	)
+
+64 
+	#CLONE_NEWIPC
+ 0x08000000
+
+	)
+
+65 
+	#CLONE_NEWUSER
+ 0x10000000
+
+	)
+
+66 
+	#CLONE_NEWPID
+ 0x20000000
+
+	)
+
+67 
+	#CLONE_NEWNET
+ 0x40000000
+
+	)
+
+68 
+	#CLONE_IO
+ 0x80000000
+
+	)
+
+72 
+	ssched_��m
+
+
+74 
+	m__sched_�iܙy
+;
+
+77 
+	g__BEGIN_DECLS
+
+
+79 #ifde�
+__USE_GNU
+
+
+81 

+��e
+ ((*
+__�
+�(*
+__�g
+), *
+__ch�d_�ack
+,
+
+82 
+__�ags
+, *
+__�g
+, ...�
+__THROW
+;
+
+85 

+	$unsh�e
+ (
+__�ags
+�
+__THROW
+;
+
+88 

+	$sched_g��u
+ (�
+__THROW
+;
+
+91 

+	$��s
+ (
+__fd
+, 
+__n�y�
+�
+__THROW
+;
+
+95 
+__END_DECLS
+
+
+99 #i�!
+def�ed
+ 
+__def�ed_sched��m
+ \
+
+100 && (
+def�ed
+ 
+__�ed_sched��m
+ || def�ed 
+_SCHED_H
+)
+
+101 
+	#__def�ed_sched��m
+ 1
+
+	)
+
+103 
+	s__sched_��m
+
+
+105 
+__sched_�iܙy
+;
+
+107 #unde�
+__�ed_sched��m
+
+
+111 #i�
+def�ed
+ 
+_SCHED_H
+ && !def�ed 
+__�u_�t_t_def�ed
+
+
+112 
+	#__�u_�t_t_def�ed
+
+
+	)
+
+114 
+	#__CPU_SETSIZE
+ 1024
+
+	)
+
+115 
+	#__NCPUBITS
+ (8 *  (
+__�u_mask
+))
+
+	)
+
+118 
+	t__�u_mask
+;
+
+121 
+	#__CPUELT
+(
+�u
+�((�u�/ 
+__NCPUBITS
+)
+
+	)
+
+122 
+	#__CPUMASK
+(
+�u
+�((
+__�u_mask
+�1 << ((�u�% 
+__NCPUBITS
+))
+
+	)
+
+127 
+__�u_mask
+ 
+__b�s
+[
+__CPU_SETSIZE
+ / 
+__NCPUBITS
+];
+
+128 } 
+	t�u_�t_t
+;
+
+131 #i�
+	`__GNUC_PREREQ
+ (2, 91)
+
+132 
+	#__CPU_ZERO_S
+(
+�tsize
+, 
+�u��
+) \
+
+133 d�
+	`__bu�t�_mem�t
+ (
+�u��
+, '\0', 
+�tsize
+); 0)
+
+	)
+
+135 
+	#__CPU_ZERO_S
+(
+�tsize
+, 
+�u��
+) \
+
+137 
+size_t
+ 
+__i
+; \
+
+138 
+size_t
+ 
+__imax
+ = (
+�tsize
+�/  (
+__�u_mask
+); \
+
+139 
+__�u_mask
+ *
+__b�s
+ = (
+�u��
+)->__bits; \
+
+140 
+__i
+ = 0; __�< 
+__imax
+; ++__i) \
+
+141 
+__b�s
+[
+__i
+] = 0; \
+
+142 
+	}
+} 0)
+
+	)
+
+144 
+	#__CPU_SET_S
+(
+�u
+, 
+�tsize
+, 
+�u��
+) \
+
+145 (
+__ex�nsi�__
+ \
+
+146 ({ 
+size_t
+ 
+__�u
+ = (
+�u
+); \
+
+147 
+__�u
+ / 8 < (
+�tsize
+) \
+
+148 ? (((
+__�u_mask
+ *�((
+�u��
+)->
+__b�s
+))[
+	`__CPUELT
+ (
+__�u
+)] \
+
+149 |�
+	`__CPUMASK
+ (
+__�u
+)) \
+
+150 : 0; }))
+
+	)
+
+151 
+	#__CPU_CLR_S
+(
+�u
+, 
+�tsize
+, 
+�u��
+) \
+
+152 (
+__ex�nsi�__
+ \
+
+153 ({ 
+size_t
+ 
+__�u
+ = (
+�u
+); \
+
+154 
+__�u
+ / 8 < (
+�tsize
+) \
+
+155 ? (((
+__�u_mask
+ *�((
+�u��
+)->
+__b�s
+))[
+	`__CPUELT
+ (
+__�u
+)] \
+
+156 &�~
+	`__CPUMASK
+ (
+__�u
+)) \
+
+157 : 0; }))
+
+	)
+
+158 
+	#__CPU_ISSET_S
+(
+�u
+, 
+�tsize
+, 
+�u��
+) \
+
+159 (
+__ex�nsi�__
+ \
+
+160 ({ 
+size_t
+ 
+__�u
+ = (
+�u
+); \
+
+161 
+__�u
+ / 8 < (
+�tsize
+) \
+
+162 ? ((((cڡ 
+__�u_mask
+ *�((
+�u��
+)->
+__b�s
+))[
+	`__CPUELT
+ (
+__�u
+)] \
+
+163 & 
+	`__CPUMASK
+ (
+__�u
+))) != 0 \
+
+164 : 0; }))
+
+	)
+
+166 
+	#__CPU_COUNT_S
+(
+�tsize
+, 
+�u��
+) \
+
+167 
+	`__sched_�ucou�
+ (
+�tsize
+, 
+�u��
+)
+
+	)
+
+169 #i�
+__GNUC_PREREQ
+ (2, 91)
+
+170 
+	#__CPU_EQUAL_S
+(
+�tsize
+, 
+�u��1
+, 
+�u��2
+) \
+
+171 (
+	`__bu�t�_memcmp
+ (
+�u��1
+, 
+�u��2
+, 
+�tsize
+�=�0)
+
+	)
+
+173 
+	#__CPU_EQUAL_S
+(
+�tsize
+, 
+�u��1
+, 
+�u��2
+) \
+
+174 (
+__ex�nsi�__
+ \
+
+175 ({ cڡ 
+__�u_mask
+ *
+__�r1
+ = (
+�u��1
+)->
+__b�s
+; \
+
+176 cڡ 
+__�u_mask
+ *
+__�r2
+ = (
+�u��2
+)->
+__b�s
+; \
+
+177 
+size_t
+ 
+__imax
+ = (
+�tsize
+�/  (
+__�u_mask
+); \
+
+178 
+size_t
+ 
+__i
+; \
+
+179 
+__i
+ = 0; __�< 
+__imax
+; ++__i) \
+
+180 i�(
+__�r1
+[
+__i
+] !�
+__�r2
+[__i]) \
+
+182 
+__i
+ =�
+__imax
+; }))
+
+	)
+
+185 
+	#__CPU_OP_S
+(
+�tsize
+, 
+de��t
+, 
+�c�t1
+, 
+�c�t2
+, 
+�
+) \
+
+186 (
+__ex�nsi�__
+ \
+
+187 ({ 
+�u_�t_t
+ *
+__de�
+ = (
+de��t
+); \
+
+188 cڡ 
+__�u_mask
+ *
+__�r1
+ = (
+�c�t1
+)->
+__b�s
+; \
+
+189 cڡ 
+__�u_mask
+ *
+__�r2
+ = (
+�c�t2
+)->
+__b�s
+; \
+
+190 
+size_t
+ 
+__imax
+ = (
+�tsize
+�/  (
+__�u_mask
+); \
+
+191 
+size_t
+ 
+__i
+; \
+
+192 
+__i
+ = 0; __�< 
+__imax
+; ++__i) \
+
+193 ((
+__�u_mask
+ *�
+__de�
+->
+__b�s
+)[
+__i
+] = 
+__�r1
+[__i] 
+�
+ 
+__�r2
+[__i]; \
+
+194 
+__de�
+; }))
+
+	)
+
+196 
+	#__CPU_ALLOC_SIZE
+(
+cou�
+) \
+
+197 ((((
+cou�
+�+ 
+__NCPUBITS
+ - 1�/ __NCPUBITS�*  (
+__�u_mask
+))
+
+	)
+
+198 
+	#__CPU_ALLOC
+(
+cou�
+�
+	`__sched_�u�loc
+ (cou�)
+
+	)
+
+199 
+	#__CPU_FREE
+(
+�u�t
+�
+	`__sched_�u�
+ (�u�t)
+
+	)
+
+201 
+__BEGIN_DECLS
+
+
+203 

+	$__sched_�ucou�
+ (
+size_t
+ 
+__�tsize
+, cڡ 
+�u_�t_t
+ *
+__��
+)
+
+204 
+__THROW
+;
+
+205 
+�u_�t_t
+ *
+	$__sched_�u�loc
+ (
+size_t
+ 
+__cou�
+�
+__THROW
+ 
+__wur
+;
+
+206 

+	$__sched_�u�
+ (
+�u_�t_t
+ *
+__�t
+�
+__THROW
+;
+
+208 
+__END_DECLS
+
+
+	@/usr/include/bits/socket_type.h
+
+19 #i�de�
+_SYS_SOCKET_H
+
+
+24 
+	e__sock�_ty�
+
+
+26 
+	mSOCK_STREAM
+ = 1,
+
+28 
+	#SOCK_STREAM
+ 
+SOCK_STREAM
+
+
+	)
+
+29 
+	mSOCK_DGRAM
+ = 2,
+
+31 
+	#SOCK_DGRAM
+ 
+SOCK_DGRAM
+
+
+	)
+
+32 
+	mSOCK_RAW
+ = 3,
+
+33 
+	#SOCK_RAW
+ 
+SOCK_RAW
+
+
+	)
+
+34 
+	mSOCK_RDM
+ = 4,
+
+35 
+	#SOCK_RDM
+ 
+SOCK_RDM
+
+
+	)
+
+36 
+	mSOCK_SEQPACKET
+ = 5,
+
+38 
+	#SOCK_SEQPACKET
+ 
+SOCK_SEQPACKET
+
+
+	)
+
+39 
+	mSOCK_DCCP
+ = 6,
+
+40 
+	#SOCK_DCCP
+ 
+SOCK_DCCP
+
+
+	)
+
+41 
+	mSOCK_PACKET
+ = 10,
+
+44 
+	#SOCK_PACKET
+ 
+SOCK_PACKET
+
+
+	)
+
+49 
+	mSOCK_CLOEXEC
+ = 02000000,
+
+51 
+	#SOCK_CLOEXEC
+ 
+SOCK_CLOEXEC
+
+
+	)
+
+52 
+	mSOCK_NONBLOCK
+ = 00004000
+
+54 
+	#SOCK_NONBLOCK
+ 
+SOCK_NONBLOCK
+
+
+	)
+
+	@/usr/include/bits/stdio-lock.h
+
+19 #i�de�
+_BITS_STDIO_LOCK_H
+
+
+20 
+	#_BITS_STDIO_LOCK_H
+ 1
+
+	)
+
+22 
+	~<b�s/libc-lock.h
+>
+
+23 
+	~<low�v�lock.h
+>
+
+27 
+	#_IO_lock_�ex�nsive
+ 1
+
+	)
+
+29 �ru� { 
+	mlock
+; 
+	m�t
+; *
+	mow�r
+; } 
+	t_IO_lock_t
+;
+
+31 
+	#_IO_lock_���liz�
+ { 
+LLL_LOCK_INITIALIZER
+, 0, 
+NULL
+ }
+
+	)
+
+33 
+	#_IO_lock_��
+(
+_�me
+) \
+
+34 ((
+_�me
+��(
+_IO_lock_t
+�
+_IO_lock_���liz�
+ , 0)
+
+	)
+
+36 
+	#_IO_lock_f�i
+(
+_�me
+) \
+
+37 ((�0)
+
+	)
+
+39 
+	#_IO_lock_lock
+(
+_�me
+) \
+
+41 *
+__�lf
+ = 
+THREAD_SELF
+; \
+
+42 i�((
+_�me
+).
+ow�r
+ !�
+__�lf
+) \
+
+44 
+	`�l_lock
+ ((
+_�me
+).
+lock
+, 
+LLL_PRIVATE
+); \
+
+45 (
+_�me
+).
+ow�r
+ = 
+__�lf
+; \
+
+47 ++(
+_�me
+).
+�t
+; \
+
+48 } 0)
+
+	)
+
+50 
+	#_IO_lock_�ylock
+(
+_�me
+) \
+
+52 
+__�su�
+ = 0; \
+
+53 *
+__�lf
+ = 
+THREAD_SELF
+; \
+
+54 i�((
+_�me
+).
+ow�r
+ !�
+__�lf
+) \
+
+56 i�(
+	`�l_�ylock
+ ((
+_�me
+).
+lock
+) == 0) \
+
+58 (
+_�me
+).
+ow�r
+ = 
+__�lf
+; \
+
+59 (
+_�me
+).
+�t
+ = 1; \
+
+62 
+__�su�
+ = 
+EBUSY
+; \
+
+65 ++(
+_�me
+).
+�t
+; \
+
+66 
+__�su�
+; \
+
+67 })
+
+	)
+
+69 
+	#_IO_lock_u�ock
+(
+_�me
+) \
+
+71 i�(--(
+_�me
+).
+�t
+ == 0) \
+
+73 (
+_�me
+).
+ow�r
+ = 
+NULL
+; \
+
+74 
+	`�l_u�ock
+ ((
+_�me
+).
+lock
+, 
+LLL_PRIVATE
+); \
+
+76 } 0)
+
+	)
+
+80 
+	#_IO_��nup_�gi�_��t
+(
+_f�
+, 
+_�
+) \
+
+81 
+	`__libc_��nup_�gi�_��t
+ (((
+_�
+)->
+_�ags
+ & 
+_IO_USER_LOCK
+�=�0, 
+_f�
+, _�)
+
+	)
+
+82 
+	#_IO_��nup_�gi�_��t_n�rg
+(
+_f�
+) \
+
+83 
+	`__libc_��nup_�gi�_��t
+ (1, 
+_f�
+, 
+NULL
+)
+
+	)
+
+84 
+	#_IO_��nup_�gi�_�d
+(
+_do�
+) \
+
+85 
+	`__libc_��nup_�gi�_�d
+ (
+_do�
+)
+
+	)
+
+87 #i�
+def�ed
+ 
+_LIBC
+ && !def�ed 
+NOT_IN_libc
+
+
+89 #ifde�
+__EXCEPTIONS
+
+
+90 
+	#_IO_acqu�e_lock
+(
+_�
+) \
+
+92 
+_IO_FILE
+ *
+_IO_acqu�e_lock_f�e
+ \
+
+93 
+	`__��ibu�__
+((
+	`��nup
+ (
+_IO_acqu�e_lock_f�
+))) \
+
+94 �(
+_�
+); \
+
+95 
+	`_IO_�ockf�e
+ (
+_IO_acqu�e_lock_f�e
+);
+
+	)
+
+96 
+	#_IO_acqu�e_lock_��r_�ags2
+(
+_�
+) \
+
+98 
+_IO_FILE
+ *
+_IO_acqu�e_lock_f�e
+ \
+
+99 
+	`__��ibu�__
+((
+	`��nup
+ (
+_IO_acqu�e_lock_��r_�ags2_f�
+))) \
+
+100 �(
+_�
+); \
+
+101 
+	`_IO_�ockf�e
+ (
+_IO_acqu�e_lock_f�e
+);
+
+	)
+
+103 
+	#_IO_acqu�e_lock
+(
+_�
+�
+_IO_acqu�e_lock_�eds_ex��i�s_�ab�d
+
+
+	)
+
+104 
+	#_IO_acqu�e_lock_��r_�ags2
+(
+_�
+�
+	`_IO_acqu�e_lock
+ (_�)
+
+	)
+
+106 
+	#_IO_��a�_lock
+(
+_�
+�; } 0)
+
+	)
+
+	@/usr/include/bits/timex.h
+
+18 #i�def 
+_BITS_TIMEX_H
+
+
+19 
+	#_BITS_TIMEX_H
+ 1
+
+	)
+
+21 
+	~<b�s/ty�s.h
+>
+
+25 
+	stimex
+
+
+27 
+	mmodes
+;
+
+28 
+__sys��_��g_t
+ 
+	moff�t
+;
+
+29 
+__sys��_��g_t
+ 
+	m�eq
+;
+
+30 
+__sys��_��g_t
+ 
+	mmax�r�
+;
+
+31 
+__sys��_��g_t
+ 
+	me��r�
+;
+
+32 
+	m��us
+;
+
+33 
+__sys��_��g_t
+ 
+	mcڡ�t
+;
+
+34 
+__sys��_��g_t
+ 
+	m�ecisi�
+;
+
+35 
+__sys��_��g_t
+ 
+	mtޔ��
+;
+
+36 
+timev�
+ 
+	mtime
+;
+
+37 
+__sys��_��g_t
+ 
+	mtick
+;
+
+38 
+__sys��_��g_t
+ 
+	m�s�eq
+;
+
+39 
+__sys��_��g_t
+ 
+	mj��r
+;
+
+40 
+	mshi�
+;
+
+41 
+__sys��_��g_t
+ 
+	m�ab�
+;
+
+42 
+__sys��_��g_t
+ 
+	mj��t
+;
+
+43 
+__sys��_��g_t
+ 
+	m�l�t
+;
+
+44 
+__sys��_��g_t
+ 
+	m�r�t
+;
+
+45 
+__sys��_��g_t
+ 
+	m�b�t
+;
+
+47 
+	m�i
+;
+
+56 
+	#ADJ_OFFSET
+ 0x0001
+
+	)
+
+57 
+	#ADJ_FREQUENCY
+ 0x0002
+
+	)
+
+58 
+	#ADJ_MAXERROR
+ 0x0004
+
+	)
+
+59 
+	#ADJ_ESTERROR
+ 0x0008
+
+	)
+
+60 
+	#ADJ_STATUS
+ 0x0010
+
+	)
+
+61 
+	#ADJ_TIMECONST
+ 0x0020
+
+	)
+
+62 
+	#ADJ_TAI
+ 0x0080
+
+	)
+
+63 
+	#ADJ_MICRO
+ 0x1000
+
+	)
+
+64 
+	#ADJ_NANO
+ 0x2000
+
+	)
+
+65 
+	#ADJ_TICK
+ 0x4000
+
+	)
+
+66 
+	#ADJ_OFFSET_SINGLESHOT
+ 0x8001
+
+	)
+
+67 
+	#ADJ_OFFSET_SS_READ
+ 0xa001
+
+	)
+
+70 
+	#MOD_OFFSET
+ 
+ADJ_OFFSET
+
+
+	)
+
+71 
+	#MOD_FREQUENCY
+ 
+ADJ_FREQUENCY
+
+
+	)
+
+72 
+	#MOD_MAXERROR
+ 
+ADJ_MAXERROR
+
+
+	)
+
+73 
+	#MOD_ESTERROR
+ 
+ADJ_ESTERROR
+
+
+	)
+
+74 
+	#MOD_STATUS
+ 
+ADJ_STATUS
+
+
+	)
+
+75 
+	#MOD_TIMECONST
+ 
+ADJ_TIMECONST
+
+
+	)
+
+76 
+	#MOD_CLKB
+ 
+ADJ_TICK
+
+
+	)
+
+77 
+	#MOD_CLKA
+ 
+ADJ_OFFSET_SINGLESHOT
+
+
+	)
+
+78 
+	#MOD_TAI
+ 
+ADJ_TAI
+
+
+	)
+
+79 
+	#MOD_MICRO
+ 
+ADJ_MICRO
+
+
+	)
+
+80 
+	#MOD_NANO
+ 
+ADJ_NANO
+
+
+	)
+
+84 
+	#STA_PLL
+ 0x0001
+
+	)
+
+85 
+	#STA_PPSFREQ
+ 0x0002
+
+	)
+
+86 
+	#STA_PPSTIME
+ 0x0004
+
+	)
+
+87 
+	#STA_FLL
+ 0x0008
+
+	)
+
+89 
+	#STA_INS
+ 0x0010
+
+	)
+
+90 
+	#STA_DEL
+ 0x0020
+
+	)
+
+91 
+	#STA_UNSYNC
+ 0x0040
+
+	)
+
+92 
+	#STA_FREQHOLD
+ 0x0080
+
+	)
+
+94 
+	#STA_PPSSIGNAL
+ 0x0100
+
+	)
+
+95 
+	#STA_PPSJITTER
+ 0x0200
+
+	)
+
+96 
+	#STA_PPSWANDER
+ 0x0400
+
+	)
+
+97 
+	#STA_PPSERROR
+ 0x0800
+
+	)
+
+99 
+	#STA_CLOCKERR
+ 0x1000
+
+	)
+
+100 
+	#STA_NANO
+ 0x2000
+
+	)
+
+101 
+	#STA_MODE
+ 0x4000
+
+	)
+
+102 
+	#STA_CLK
+ 0x8000
+
+	)
+
+105 
+	#STA_RONLY
+ (
+STA_PPSSIGNAL
+ | 
+STA_PPSJITTER
+ | 
+STA_PPSWANDER
+ | \
+
+106 
+STA_PPSERROR
+ | 
+STA_CLOCKERR
+ | 
+STA_NANO
+ | 
+STA_MODE
+ | 
+STA_CLK
+)
+
+	)
+
+	@/usr/include/bits/typesizes.h
+
+19 #i�de�
+_BITS_TYPES_H
+
+
+23 #i�def 
+_BITS_TYPESIZES_H
+
+
+24 
+	#_BITS_TYPESIZES_H
+ 1
+
+	)
+
+30 #i�
+def�ed
+ 
+__x86_64__
+ && def�ed 
+__ILP32__
+
+
+31 
+	#__SYSCALL_SLONG_TYPE
+ 
+__SQUAD_TYPE
+
+
+	)
+
+32 
+	#__SYSCALL_ULONG_TYPE
+ 
+__UQUAD_TYPE
+
+
+	)
+
+34 
+	#__SYSCALL_SLONG_TYPE
+ 
+__SLONGWORD_TYPE
+
+
+	)
+
+35 
+	#__SYSCALL_ULONG_TYPE
+ 
+__ULONGWORD_TYPE
+
+
+	)
+
+38 
+	#__DEV_T_TYPE
+ 
+__UQUAD_TYPE
+
+
+	)
+
+39 
+	#__UID_T_TYPE
+ 
+__U32_TYPE
+
+
+	)
+
+40 
+	#__GID_T_TYPE
+ 
+__U32_TYPE
+
+
+	)
+
+41 
+	#__INO_T_TYPE
+ 
+__SYSCALL_ULONG_TYPE
+
+
+	)
+
+42 
+	#__INO64_T_TYPE
+ 
+__UQUAD_TYPE
+
+
+	)
+
+43 
+	#__MODE_T_TYPE
+ 
+__U32_TYPE
+
+
+	)
+
+44 #ifde�
+__x86_64__
+
+
+45 
+	#__NLINK_T_TYPE
+ 
+__SYSCALL_ULONG_TYPE
+
+
+	)
+
+46 
+	#__FSWORD_T_TYPE
+ 
+__SYSCALL_SLONG_TYPE
+
+
+	)
+
+48 
+	#__NLINK_T_TYPE
+ 
+__UWORD_TYPE
+
+
+	)
+
+49 
+	#__FSWORD_T_TYPE
+ 
+__SWORD_TYPE
+
+
+	)
+
+51 
+	#__OFF_T_TYPE
+ 
+__SYSCALL_SLONG_TYPE
+
+
+	)
+
+52 
+	#__OFF64_T_TYPE
+ 
+__SQUAD_TYPE
+
+
+	)
+
+53 
+	#__PID_T_TYPE
+ 
+__S32_TYPE
+
+
+	)
+
+54 
+	#__RLIM_T_TYPE
+ 
+__SYSCALL_ULONG_TYPE
+
+
+	)
+
+55 
+	#__RLIM64_T_TYPE
+ 
+__UQUAD_TYPE
+
+
+	)
+
+56 
+	#__BLKCNT_T_TYPE
+ 
+__SYSCALL_SLONG_TYPE
+
+
+	)
+
+57 
+	#__BLKCNT64_T_TYPE
+ 
+__SQUAD_TYPE
+
+
+	)
+
+58 
+	#__FSBLKCNT_T_TYPE
+ 
+__SYSCALL_ULONG_TYPE
+
+
+	)
+
+59 
+	#__FSBLKCNT64_T_TYPE
+ 
+__UQUAD_TYPE
+
+
+	)
+
+60 
+	#__FSFILCNT_T_TYPE
+ 
+__SYSCALL_ULONG_TYPE
+
+
+	)
+
+61 
+	#__FSFILCNT64_T_TYPE
+ 
+__UQUAD_TYPE
+
+
+	)
+
+62 
+	#__ID_T_TYPE
+ 
+__U32_TYPE
+
+
+	)
+
+63 
+	#__CLOCK_T_TYPE
+ 
+__SYSCALL_SLONG_TYPE
+
+
+	)
+
+64 
+	#__TIME_T_TYPE
+ 
+__SYSCALL_SLONG_TYPE
+
+
+	)
+
+65 
+	#__USECONDS_T_TYPE
+ 
+__U32_TYPE
+
+
+	)
+
+66 
+	#__SUSECONDS_T_TYPE
+ 
+__SYSCALL_SLONG_TYPE
+
+
+	)
+
+67 
+	#__DADDR_T_TYPE
+ 
+__S32_TYPE
+
+
+	)
+
+68 
+	#__KEY_T_TYPE
+ 
+__S32_TYPE
+
+
+	)
+
+69 
+	#__CLOCKID_T_TYPE
+ 
+__S32_TYPE
+
+
+	)
+
+70 
+	#__TIMER_T_TYPE
+ *
+
+	)
+
+71 
+	#__BLKSIZE_T_TYPE
+ 
+__SYSCALL_SLONG_TYPE
+
+
+	)
+
+72 
+	#__FSID_T_TYPE
+ s�u� { 
+__v�
+[2]; }
+
+	)
+
+73 
+	#__SSIZE_T_TYPE
+ 
+__SWORD_TYPE
+
+
+	)
+
+75 #ifde�
+__x86_64__
+
+
+79 
+	#__OFF_T_MATCHES_OFF64_T
+ 1
+
+	)
+
+82 
+	#__INO_T_MATCHES_INO64_T
+ 1
+
+	)
+
+86 
+	#__FD_SETSIZE
+ 1024
+
+	)
+
+	@/usr/include/bits/uio.h
+
+18 #i�!
+def�ed
+ 
+_SYS_UIO_H
+ && !def�ed 
+_FCNTL_H
+
+
+22 #i�de�
+_BITS_UIO_H
+
+
+23 
+	#_BITS_UIO_H
+ 1
+
+	)
+
+25 
+	~<sys/ty�s.h
+>
+
+39 
+	#UIO_MAXIOV
+ 1024
+
+	)
+
+43 
+	siovec
+
+
+45 *
+	miov_ba�
+;
+
+46 
+size_t
+ 
+	miov_�n
+;
+
+52 #ifde�
+__USE_GNU
+
+
+53 #i�
+def�ed
+ 
+_SYS_UIO_H
+ && !def�ed 
+_BITS_UIO_H_FOR_SYS_UIO_H
+
+
+54 
+	#_BITS_UIO_H_FOR_SYS_UIO_H
+ 1
+
+	)
+
+56 
+__BEGIN_DECLS
+
+
+59 
+ssize_t
+ 
+	$�o�ss_vm_�adv
+ (
+pid_t
+ 
+__pid
+, cڡ 
+iovec
+ *
+__lvec
+,
+
+60 
+__liov�t
+,
+
+61 cڡ 
+iovec
+ *
+__rvec
+,
+
+62 
+__riov�t
+,
+
+63 
+__�ags
+)
+
+64 
+__THROW
+;
+
+67 
+ssize_t
+ 
+	$�o�ss_vm_wr�ev
+ (
+pid_t
+ 
+__pid
+, cڡ 
+iovec
+ *
+__lvec
+,
+
+68 
+__liov�t
+,
+
+69 cڡ 
+iovec
+ *
+__rvec
+,
+
+70 
+__riov�t
+,
+
+71 
+__�ags
+)
+
+72 
+__THROW
+;
+
+74 
+__END_DECLS
+
+
+	@/usr/include/bits/wchar.h
+
+19 #i�de�
+_BITS_WCHAR_H
+
+
+20 
+	#_BITS_WCHAR_H
+ 1
+
+	)
+
+33 #ifde�
+__WCHAR_MAX__
+
+
+34 
+	#__WCHAR_MAX
+ 
+__WCHAR_MAX__
+
+
+	)
+
+35 #�i�
+L
+'\0' - 1 > 0
+
+36 
+	#__WCHAR_MAX
+ (0xffffffffu + 
+L
+'\0')
+
+	)
+
+38 
+	#__WCHAR_MAX
+ (0x7ffffff�+ 
+L
+'\0')
+
+	)
+
+41 #ifde�
+__WCHAR_MIN__
+
+
+42 
+	#__WCHAR_MIN
+ 
+__WCHAR_MIN__
+
+
+	)
+
+43 #�i�
+L
+'\0' - 1 > 0
+
+44 
+	#__WCHAR_MIN
+ (
+L
+'\0' + 0)
+
+	)
+
+46 
+	#__WCHAR_MIN
+ (-
+__WCHAR_MAX
+ - 1)
+
+	)
+
+	@/usr/include/gnu/stubs.h
+
+6 #i�!
+def�ed
+ 
+__x86_64__
+
+
+7 
+	~<gnu/�ubs-32.h
+>
+
+9 #i�
+def�ed
+ 
+__x86_64__
+ && def�ed 
+__LP64__
+
+
+10 
+	~<gnu/�ubs-64.h
+>
+
+12 #i�
+def�ed
+ 
+__x86_64__
+ && def�ed 
+__ILP32__
+
+
+13 
+	~<gnu/�ubs-x32.h
+>
+
+	@/usr/include/linux/errno.h
+
+1 
+	~<asm/��o.h
+>
+
+	@/usr/include/stdc-predef.h
+
+18 #i�def 
+_STDC_PREDEF_H
+
+
+19 
+	#_STDC_PREDEF_H
+ 1
+
+	)
+
+36 #ifde�
+__GCC_IEC_559
+
+
+37 #i�
+__GCC_IEC_559
+ > 0
+
+38 
+	#__STDC_IEC_559__
+ 1
+
+	)
+
+41 
+	#__STDC_IEC_559__
+ 1
+
+	)
+
+44 #ifde�
+__GCC_IEC_559_COMPLEX
+
+
+45 #i�
+__GCC_IEC_559_COMPLEX
+ > 0
+
+46 
+	#__STDC_IEC_559_COMPLEX__
+ 1
+
+	)
+
+49 
+	#__STDC_IEC_559_COMPLEX__
+ 1
+
+	)
+
+54 
+	#__STDC_ISO_10646__
+ 201103L
+
+	)
+
+57 
+	#__STDC_NO_THREADS__
+ 1
+
+	)
+
+	@/usr/include/asm-generic/ioctls.h
+
+1 #i�de�
+__ASM_GENERIC_IOCTLS_H
+
+
+2 
+	#__ASM_GENERIC_IOCTLS_H
+
+
+	)
+
+4 
+	~<l�ux/io�l.h
+>
+
+19 
+	#TCGETS
+ 0x5401
+
+	)
+
+20 
+	#TCSETS
+ 0x5402
+
+	)
+
+21 
+	#TCSETSW
+ 0x5403
+
+	)
+
+22 
+	#TCSETSF
+ 0x5404
+
+	)
+
+23 
+	#TCGETA
+ 0x5405
+
+	)
+
+24 
+	#TCSETA
+ 0x5406
+
+	)
+
+25 
+	#TCSETAW
+ 0x5407
+
+	)
+
+26 
+	#TCSETAF
+ 0x5408
+
+	)
+
+27 
+	#TCSBRK
+ 0x5409
+
+	)
+
+28 
+	#TCXONC
+ 0x540A
+
+	)
+
+29 
+	#TCFLSH
+ 0x540B
+
+	)
+
+30 
+	#TIOCEXCL
+ 0x540C
+
+	)
+
+31 
+	#TIOCNXCL
+ 0x540D
+
+	)
+
+32 
+	#TIOCSCTTY
+ 0x540E
+
+	)
+
+33 
+	#TIOCGPGRP
+ 0x540F
+
+	)
+
+34 
+	#TIOCSPGRP
+ 0x5410
+
+	)
+
+35 
+	#TIOCOUTQ
+ 0x5411
+
+	)
+
+36 
+	#TIOCSTI
+ 0x5412
+
+	)
+
+37 
+	#TIOCGWINSZ
+ 0x5413
+
+	)
+
+38 
+	#TIOCSWINSZ
+ 0x5414
+
+	)
+
+39 
+	#TIOCMGET
+ 0x5415
+
+	)
+
+40 
+	#TIOCMBIS
+ 0x5416
+
+	)
+
+41 
+	#TIOCMBIC
+ 0x5417
+
+	)
+
+42 
+	#TIOCMSET
+ 0x5418
+
+	)
+
+43 
+	#TIOCGSOFTCAR
+ 0x5419
+
+	)
+
+44 
+	#TIOCSSOFTCAR
+ 0x541A
+
+	)
+
+45 
+	#FIONREAD
+ 0x541B
+
+	)
+
+46 
+	#TIOCINQ
+ 
+FIONREAD
+
+
+	)
+
+47 
+	#TIOCLINUX
+ 0x541C
+
+	)
+
+48 
+	#TIOCCONS
+ 0x541D
+
+	)
+
+49 
+	#TIOCGSERIAL
+ 0x541E
+
+	)
+
+50 
+	#TIOCSSERIAL
+ 0x541F
+
+	)
+
+51 
+	#TIOCPKT
+ 0x5420
+
+	)
+
+52 
+	#FIONBIO
+ 0x5421
+
+	)
+
+53 
+	#TIOCNOTTY
+ 0x5422
+
+	)
+
+54 
+	#TIOCSETD
+ 0x5423
+
+	)
+
+55 
+	#TIOCGETD
+ 0x5424
+
+	)
+
+56 
+	#TCSBRKP
+ 0x5425
+
+	)
+
+57 
+	#TIOCSBRK
+ 0x5427
+
+	)
+
+58 
+	#TIOCCBRK
+ 0x5428
+
+	)
+
+59 
+	#TIOCGSID
+ 0x5429
+
+	)
+
+60 
+	#TCGETS2
+ 
+	`_IOR
+('T', 0x2A, 
+�rmios2
+)
+
+	)
+
+61 
+	#TCSETS2
+ 
+	`_IOW
+('T', 0x2B, 
+�rmios2
+)
+
+	)
+
+62 
+	#TCSETSW2
+ 
+	`_IOW
+('T', 0x2C, 
+�rmios2
+)
+
+	)
+
+63 
+	#TCSETSF2
+ 
+	`_IOW
+('T', 0x2D, 
+�rmios2
+)
+
+	)
+
+64 
+	#TIOCGRS485
+ 0x542E
+
+	)
+
+65 #i�de�
+TIOCSRS485
+
+
+66 
+	#TIOCSRS485
+ 0x542F
+
+	)
+
+68 
+	#TIOCGPTN
+ 
+	`_IOR
+('T', 0x30, �
+
+	)
+
+69 
+	#TIOCSPTLCK
+ 
+	`_IOW
+('T', 0x31, �
+
+	)
+
+70 
+	#TIOCGDEV
+ 
+	`_IOR
+('T', 0x32, �
+
+	)
+
+71 
+	#TCGETX
+ 0x5432
+
+	)
+
+72 
+	#TCSETX
+ 0x5433
+
+	)
+
+73 
+	#TCSETXF
+ 0x5434
+
+	)
+
+74 
+	#TCSETXW
+ 0x5435
+
+	)
+
+75 
+	#TIOCSIG
+ 
+	`_IOW
+('T', 0x36, �
+
+	)
+
+76 
+	#TIOCVHANGUP
+ 0x5437
+
+	)
+
+77 
+	#TIOCGPKT
+ 
+	`_IOR
+('T', 0x38, �
+
+	)
+
+78 
+	#TIOCGPTLCK
+ 
+	`_IOR
+('T', 0x39, �
+
+	)
+
+79 
+	#TIOCGEXCL
+ 
+	`_IOR
+('T', 0x40, �
+
+	)
+
+81 
+	#FIONCLEX
+ 0x5450
+
+	)
+
+82 
+	#FIOCLEX
+ 0x5451
+
+	)
+
+83 
+	#FIOASYNC
+ 0x5452
+
+	)
+
+84 
+	#TIOCSERCONFIG
+ 0x5453
+
+	)
+
+85 
+	#TIOCSERGWILD
+ 0x5454
+
+	)
+
+86 
+	#TIOCSERSWILD
+ 0x5455
+
+	)
+
+87 
+	#TIOCGLCKTRMIOS
+ 0x5456
+
+	)
+
+88 
+	#TIOCSLCKTRMIOS
+ 0x5457
+
+	)
+
+89 
+	#TIOCSERGSTRUCT
+ 0x5458
+
+	)
+
+90 
+	#TIOCSERGETLSR
+ 0x5459
+
+	)
+
+91 
+	#TIOCSERGETMULTI
+ 0x545A
+
+	)
+
+92 
+	#TIOCSERSETMULTI
+ 0x545B
+
+	)
+
+94 
+	#TIOCMIWAIT
+ 0x545C
+
+	)
+
+95 
+	#TIOCGICOUNT
+ 0x545D
+
+	)
+
+101 #i�de�
+FIOQSIZE
+
+
+102 
+	#FIOQSIZE
+ 0x5460
+
+	)
+
+106 
+	#TIOCPKT_DATA
+ 0
+
+	)
+
+107 
+	#TIOCPKT_FLUSHREAD
+ 1
+
+	)
+
+108 
+	#TIOCPKT_FLUSHWRITE
+ 2
+
+	)
+
+109 
+	#TIOCPKT_STOP
+ 4
+
+	)
+
+110 
+	#TIOCPKT_START
+ 8
+
+	)
+
+111 
+	#TIOCPKT_NOSTOP
+ 16
+
+	)
+
+112 
+	#TIOCPKT_DOSTOP
+ 32
+
+	)
+
+113 
+	#TIOCPKT_IOCTL
+ 64
+
+	)
+
+115 
+	#TIOCSER_TEMT
+ 0x01
+
+	)
+
+	@/usr/include/asm-generic/socket.h
+
+1 #i�de�
+__ASM_GENERIC_SOCKET_H
+
+
+2 
+	#__ASM_GENERIC_SOCKET_H
+
+
+	)
+
+4 
+	~<asm/sockios.h
+>
+
+7 
+	#SOL_SOCKET
+ 1
+
+	)
+
+9 
+	#SO_DEBUG
+ 1
+
+	)
+
+10 
+	#SO_REUSEADDR
+ 2
+
+	)
+
+11 
+	#SO_TYPE
+ 3
+
+	)
+
+12 
+	#SO_ERROR
+ 4
+
+	)
+
+13 
+	#SO_DONTROUTE
+ 5
+
+	)
+
+14 
+	#SO_BROADCAST
+ 6
+
+	)
+
+15 
+	#SO_SNDBUF
+ 7
+
+	)
+
+16 
+	#SO_RCVBUF
+ 8
+
+	)
+
+17 
+	#SO_SNDBUFFORCE
+ 32
+
+	)
+
+18 
+	#SO_RCVBUFFORCE
+ 33
+
+	)
+
+19 
+	#SO_KEEPALIVE
+ 9
+
+	)
+
+20 
+	#SO_OOBINLINE
+ 10
+
+	)
+
+21 
+	#SO_NO_CHECK
+ 11
+
+	)
+
+22 
+	#SO_PRIORITY
+ 12
+
+	)
+
+23 
+	#SO_LINGER
+ 13
+
+	)
+
+24 
+	#SO_BSDCOMPAT
+ 14
+
+	)
+
+25 
+	#SO_REUSEPORT
+ 15
+
+	)
+
+26 #i�de�
+SO_PASSCRED
+
+
+27 
+	#SO_PASSCRED
+ 16
+
+	)
+
+28 
+	#SO_PEERCRED
+ 17
+
+	)
+
+29 
+	#SO_RCVLOWAT
+ 18
+
+	)
+
+30 
+	#SO_SNDLOWAT
+ 19
+
+	)
+
+31 
+	#SO_RCVTIMEO
+ 20
+
+	)
+
+32 
+	#SO_SNDTIMEO
+ 21
+
+	)
+
+36 
+	#SO_SECURITY_AUTHENTICATION
+ 22
+
+	)
+
+37 
+	#SO_SECURITY_ENCRYPTION_TRANSPORT
+ 23
+
+	)
+
+38 
+	#SO_SECURITY_ENCRYPTION_NETWORK
+ 24
+
+	)
+
+40 
+	#SO_BINDTODEVICE
+ 25
+
+	)
+
+43 
+	#SO_ATTACH_FILTER
+ 26
+
+	)
+
+44 
+	#SO_DETACH_FILTER
+ 27
+
+	)
+
+45 
+	#SO_GET_FILTER
+ 
+SO_ATTACH_FILTER
+
+
+	)
+
+47 
+	#SO_PEERNAME
+ 28
+
+	)
+
+48 
+	#SO_TIMESTAMP
+ 29
+
+	)
+
+49 
+	#SCM_TIMESTAMP
+ 
+SO_TIMESTAMP
+
+
+	)
+
+51 
+	#SO_ACCEPTCONN
+ 30
+
+	)
+
+53 
+	#SO_PEERSEC
+ 31
+
+	)
+
+54 
+	#SO_PASSSEC
+ 34
+
+	)
+
+55 
+	#SO_TIMESTAMPNS
+ 35
+
+	)
+
+56 
+	#SCM_TIMESTAMPNS
+ 
+SO_TIMESTAMPNS
+
+
+	)
+
+58 
+	#SO_MARK
+ 36
+
+	)
+
+60 
+	#SO_TIMESTAMPING
+ 37
+
+	)
+
+61 
+	#SCM_TIMESTAMPING
+ 
+SO_TIMESTAMPING
+
+
+	)
+
+63 
+	#SO_PROTOCOL
+ 38
+
+	)
+
+64 
+	#SO_DOMAIN
+ 39
+
+	)
+
+66 
+	#SO_RXQ_OVFL
+ 40
+
+	)
+
+68 
+	#SO_WIFI_STATUS
+ 41
+
+	)
+
+69 
+	#SCM_WIFI_STATUS
+ 
+SO_WIFI_STATUS
+
+
+	)
+
+70 
+	#SO_PEEK_OFF
+ 42
+
+	)
+
+73 
+	#SO_NOFCS
+ 43
+
+	)
+
+75 
+	#SO_LOCK_FILTER
+ 44
+
+	)
+
+77 
+	#SO_SELECT_ERR_QUEUE
+ 45
+
+	)
+
+79 
+	#SO_BUSY_POLL
+ 46
+
+	)
+
+81 
+	#SO_MAX_PACING_RATE
+ 47
+
+	)
+
+	@/usr/include/asm/errno.h
+
+1 
+	~<asm-g��ic/��o.h
+>
+
+	@/usr/include/bits/libc-lock.h
+
+19 #i�de�
+_BITS_LIBC_LOCK_H
+
+
+20 
+	#_BITS_LIBC_LOCK_H
+ 1
+
+	)
+
+22 
+	~<�h�ad.h
+>
+
+23 
+	#__�ed_NULL
+
+
+	)
+
+24 
+	~<�ddef.h
+>
+
+27 #ifde�
+_LIBC
+
+
+28 
+	~<low�v�lock.h
+>
+
+29 
+	~<�s.h
+>
+
+30 
+	~<�h�ad-fun�i�s.h
+>
+
+31 
+	~<��o.h
+>
+
+32 
+	~<gnu/�ti�-groups.h
+>
+
+36 #i�
+def�ed
+ 
+_LIBC
+ || def�ed 
+_IO_MTSAFE_IO
+
+
+37 #i�(
+def�ed
+ 
+NOT_IN_libc
+ && !def�ed 
+IS_IN_lib�h�ad
+�|| !def�ed 
+_LIBC
+
+
+38 �ru� { 
+�h�ad_mu�x_t
+ 
+	mmu�x
+; } 
+	t__libc_lock_�cursive_t
+;
+
+40 �ru� { 
+	mlock
+; 
+	m�t
+; *
+	mow�r
+; } 
+	t__libc_lock_�cursive_t
+;
+
+43 
+__libc_lock_�cursive_�aque__
+ 
+	t__libc_lock_�cursive_t
+;
+
+53 
+	#__libc_lock_def�e_�cursive
+(
+CLASS
+,
+NAME
+) \
+
+54 
+CLASS
+ 
+__libc_lock_�cursive_t
+ 
+NAME
+;
+
+	)
+
+58 #i�
+def�ed
+ 
+_LIBC
+ && (!def�ed 
+NOT_IN_libc
+ || def�ed 
+IS_IN_lib�h�ad
+)
+
+59 #i�
+LLL_LOCK_INITIALIZER
+ == 0
+
+60 
+	#__libc_lock_def�e_���lized_�cursive
+(
+CLASS
+,
+NAME
+) \
+
+61 
+CLASS
+ 
+__libc_lock_�cursive_t
+ 
+NAME
+;
+
+	)
+
+63 
+	#__libc_lock_def�e_���lized_�cursive
+(
+CLASS
+,
+NAME
+) \
+
+64 
+CLASS
+ 
+__libc_lock_�cursive_t
+ 
+NAME
+ = 
+_LIBC_LOCK_RECURSIVE_INITIALIZER
+;
+
+	)
+
+66 
+	#_LIBC_LOCK_RECURSIVE_INITIALIZER
+ \
+
+67 { 
+LLL_LOCK_INITIALIZER
+, 0, 
+NULL
+ }
+
+	)
+
+69 
+	#__libc_lock_def�e_���lized_�cursive
+(
+CLASS
+,
+NAME
+) \
+
+70 
+CLASS
+ 
+__libc_lock_�cursive_t
+ 
+NAME
+ = 
+_LIBC_LOCK_RECURSIVE_INITIALIZER
+;
+
+	)
+
+71 
+	#_LIBC_LOCK_RECURSIVE_INITIALIZER
+ \
+
+72 {
+PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+}
+
+	)
+
+76 #i�
+def�ed
+ 
+_LIBC
+ && (!def�ed 
+NOT_IN_libc
+ || def�ed 
+IS_IN_lib�h�ad
+)
+
+77 
+	#__libc_lock_��_�cursive
+(
+NAME
+) \
+
+78 ((
+NAME
+��(
+__libc_lock_�cursive_t
+�
+_LIBC_LOCK_RECURSIVE_INITIALIZER
+, 0)
+
+	)
+
+80 
+	#__libc_lock_��_�cursive
+(
+NAME
+) \
+
+82 i�(
+__�h�ad_mu�x_��
+ !�
+NULL
+) \
+
+84 
+�h�ad_mu�x��_t
+ 
+__��
+; \
+
+85 
+	`__�h�ad_mu�x��_��
+ (&
+__��
+); \
+
+86 
+	`__�h�ad_mu�x��_��y�
+ (&
+__��
+, 
+PTHREAD_MUTEX_RECURSIVE_NP
+); \
+
+87 
+	`__�h�ad_mu�x_��
+ (&(
+NAME
+).
+mu�x
+, &
+__��
+); \
+
+88 
+	`__�h�ad_mu�x��_de�roy
+ (&
+__��
+); \
+
+90 } 0)
+
+	)
+
+94 #i�
+def�ed
+ 
+_LIBC
+ && (!def�ed 
+NOT_IN_libc
+ || def�ed 
+IS_IN_lib�h�ad
+)
+
+95 
+	#__libc_lock_f�i_�cursive
+(
+NAME
+�((�0)
+
+	)
+
+97 
+	#__libc_lock_f�i_�cursive
+(
+NAME
+) \
+
+98 
+	`__libc_maybe_��
+ (
+__�h�ad_mu�x_de�roy
+, (&(
+NAME
+).
+mu�x
+), 0)
+
+	)
+
+102 #i�
+def�ed
+ 
+_LIBC
+ && (!def�ed 
+NOT_IN_libc
+ || def�ed 
+IS_IN_lib�h�ad
+)
+
+103 #i�
+__OPTION_EGLIBC_BIG_MACROS
+ != 1
+
+107 

+__libc_lock_lock_�cursive_�
+ (
+__libc_lock_�cursive_t
+ *);
+
+108 
+libc_hidd�_��o
+ (
+__libc_lock_lock_�cursive_�
+);
+
+110 #i�
+__OPTION_EGLIBC_BIG_MACROS
+
+
+111 
+	#__libc_lock_lock_�cursive
+(
+NAME
+) \
+
+113 *
+�lf
+ = 
+THREAD_SELF
+; \
+
+114 i�((
+NAME
+).
+ow�r
+ !�
+�lf
+) \
+
+116 
+	`�l_lock
+ ((
+NAME
+).
+lock
+, 
+LLL_PRIVATE
+); \
+
+117 (
+NAME
+).
+ow�r
+ = 
+�lf
+; \
+
+119 ++(
+NAME
+).
+�t
+; \
+
+120 } 0)
+
+	)
+
+122 
+	#__libc_lock_lock_�cursive
+(
+NAME
+) \
+
+123 
+	`__libc_lock_lock_�cursive_�
+ (&(
+NAME
+))
+
+	)
+
+126 
+	#__libc_lock_lock_�cursive
+(
+NAME
+) \
+
+127 
+	`__libc_maybe_��
+ (
+__�h�ad_mu�x_lock
+, (&(
+NAME
+).
+mu�x
+), 0)
+
+	)
+
+131 #i�
+def�ed
+ 
+_LIBC
+ && (!def�ed 
+NOT_IN_libc
+ || def�ed 
+IS_IN_lib�h�ad
+)
+
+132 #i�
+__OPTION_EGLIBC_BIG_MACROS
+ != 1
+
+136 

+__libc_lock_�ylock_�cursive_�
+ (
+__libc_lock_�cursive_t
+ *);
+
+137 
+libc_hidd�_��o
+ (
+__libc_lock_�ylock_�cursive_�
+);
+
+139 #i�
+__OPTION_EGLIBC_BIG_MACROS
+
+
+140 
+	#__libc_lock_�ylock_�cursive
+(
+NAME
+) \
+
+142 
+�su�
+ = 0; \
+
+143 *
+�lf
+ = 
+THREAD_SELF
+; \
+
+144 i�((
+NAME
+).
+ow�r
+ !�
+�lf
+) \
+
+146 i�(
+	`�l_�ylock
+ ((
+NAME
+).
+lock
+) == 0) \
+
+148 (
+NAME
+).
+ow�r
+ = 
+�lf
+; \
+
+149 (
+NAME
+).
+�t
+ = 1; \
+
+152 
+�su�
+ = 
+EBUSY
+; \
+
+155 ++(
+NAME
+).
+�t
+; \
+
+156 
+�su�
+; \
+
+157 })
+
+	)
+
+159 
+	#__libc_lock_�ylock_�cursive
+(
+NAME
+) \
+
+160 
+	`__libc_lock_�ylock_�cursive_�
+ (&(
+NAME
+))
+
+	)
+
+163 
+	#__libc_lock_�ylock_�cursive
+(
+NAME
+) \
+
+164 
+	`__libc_maybe_��
+ (
+__�h�ad_mu�x_�ylock
+, (&(
+NAME
+).
+mu�x
+), 0)
+
+	)
+
+168 #i�
+def�ed
+ 
+_LIBC
+ && (!def�ed 
+NOT_IN_libc
+ || def�ed 
+IS_IN_lib�h�ad
+)
+
+169 #i�
+__OPTION_EGLIBC_BIG_MACROS
+ != 1
+
+173 

+__libc_lock_u�ock_�cursive_�
+ (
+__libc_lock_�cursive_t
+ *);
+
+174 
+libc_hidd�_��o
+ (
+__libc_lock_u�ock_�cursive_�
+);
+
+176 #i�
+__OPTION_EGLIBC_BIG_MACROS
+
+
+178 
+	#__libc_lock_u�ock_�cursive
+(
+NAME
+) \
+
+180 i�(--(
+NAME
+).
+�t
+ == 0) \
+
+182 (
+NAME
+).
+ow�r
+ = 
+NULL
+; \
+
+183 
+	`�l_u�ock
+ ((
+NAME
+).
+lock
+, 
+LLL_PRIVATE
+); \
+
+185 } 0)
+
+	)
+
+187 
+	#__libc_lock_u�ock_�cursive
+(
+NAME
+) \
+
+188 
+	`__libc_lock_u�ock_�cursive_�
+ (&(
+NAME
+))
+
+	)
+
+191 
+	#__libc_lock_u�ock_�cursive
+(
+NAME
+) \
+
+192 
+	`__libc_maybe_��
+ (
+__�h�ad_mu�x_u�ock
+, (&(
+NAME
+).
+mu�x
+), 0)
+
+	)
+
+199 

+_�h�ad_��nup_push_de�r
+ (
+_�h�ad_��nup_buf�r
+ *
+buf�r
+,
+
+200 (*
+rout�e
+�(*), *
+�g
+);
+
+201 

+	`_�h�ad_��nup_p�_���e
+ (
+_�h�ad_��nup_buf�r
+ *
+buf�r
+,
+
+202 
+execu�
+);
+
+205 
+	#__libc_��nup_�gi�_��t
+(
+DOIT
+, 
+FCT
+, 
+ARG
+) \
+
+206 { 
+_�h�ad_��nup_buf�r
+ 
+_buf�r
+; \
+
+207 
+_ava�
+; \
+
+208 i�(
+DOIT
+) { \
+
+209 
+_ava�
+ = 
+	`PTFAVAIL
+ (
+_�h�ad_��nup_push_de�r
+); \
+
+210 i�(
+_ava�
+) { \
+
+211 
+	`__libc_�f_��_�ways
+ (
+_�h�ad_��nup_push_de�r
+, (&
+_buf�r
+, 
+FCT
+, \
+
+212 
+ARG
+)); \
+
+214 
+_buf�r
+.
+__rout�e
+ = (
+FCT
+); \
+
+215 
+_buf�r
+.
+__�g
+ = (
+ARG
+); \
+
+218 
+_ava�
+ = 0; \
+
+219 }
+
+	)
+
+222 
+	#__libc_��nup_�gi�_�d
+(
+DOIT
+) \
+
+223 i�(
+_ava�
+) { \
+
+224 
+	`__libc_�f_��_�ways
+ (
+_�h�ad_��nup_p�_���e
+, (&
+_buf�r
+, 
+DOIT
+));\
+
+225 } i�(
+DOIT
+) \
+
+226 
+_buf�r
+.
+	`__rout�e
+ (_buf�r.
+__�g
+); \
+
+227 
+	}
+
+	)
+}
+
+232 #ifde�
+_LIBC
+
+
+233 
+	~"libc-lockP.h
+"
+
+	@/usr/include/gconv.h
+
+22 #i�de�
+_GCONV_H
+
+
+23 
+	#_GCONV_H
+ 1
+
+	)
+
+25 
+	~<�u�s.h
+>
+
+26 
+	#__�ed_mb��e_t
+
+
+	)
+
+27 
+	#__�ed_w�t_t
+
+
+	)
+
+28 
+	~<wch�.h
+>
+
+29 
+	#__�ed_size_t
+
+
+	)
+
+30 
+	#__�ed_wch�_t
+
+
+	)
+
+31 
+	~<�ddef.h
+>
+
+34 
+	#__UNKNOWN_10646_CHAR
+ ((
+wch�_t
+�0xfffd)
+
+	)
+
+39 
+	m__GCONV_OK
+ = 0,
+
+40 
+	m__GCONV_NOCONV
+,
+
+41 
+	m__GCONV_NODB
+,
+
+42 
+	m__GCONV_NOMEM
+,
+
+44 
+	m__GCONV_EMPTY_INPUT
+,
+
+45 
+	m__GCONV_FULL_OUTPUT
+,
+
+46 
+	m__GCONV_ILLEGAL_INPUT
+,
+
+47 
+	m__GCONV_INCOMPLETE_INPUT
+,
+
+49 
+	m__GCONV_ILLEGAL_DESCRIPTOR
+,
+
+50 
+	m__GCONV_INTERNAL_ERROR
+
+
+57 
+	m__GCONV_IS_LAST
+ = 0x0001,
+
+58 
+	m__GCONV_IGNORE_ERRORS
+ = 0x0002,
+
+59 
+	m__GCONV_SWAP
+ = 0x0004
+
+64 
+	g__gc�v_��
+;
+
+65 
+	g__gc�v_��_d�a
+;
+
+66 
+	g__gc�v_l�ded_obje�
+;
+
+67 
+	g__gc�v_��s_d�a
+;
+
+71 (*
+	t__gc�v_f�
+�(
+	t__gc�v_��
+ *, 
+	t__gc�v_��_d�a
+ *,
+
+73 **, 
+	tsize_t
+ *, , );
+
+76 
+	$w�t_t
+ (*
+	t__gc�v_btowc_f�
+�(
+	t__gc�v_��
+ *, );
+
+79 (*
+	t__gc�v_��_f�
+�(
+	t__gc�v_��
+ *);
+
+80 (*
+	t__gc�v_�d_f�
+�(
+	t__gc�v_��
+ *);
+
+84 (*
+	t__gc�v_��s_f�
+�(
+	t__gc�v_��
+ *,
+
+85 
+	t__gc�v_��_d�a
+ *, *,
+
+89 
+	tsize_t
+ *);
+
+92 (*
+	t__gc�v_��s_cڋxt_f�
+) (*, const *,
+
+97 (*
+	t__gc�v_��s_qu�y_f�
+) (const *, const ***,
+
+98 
+	tsize_t
+ *);
+
+101 (*
+	t__gc�v_��s_��_f�
+) (**, const *);
+
+102 (*
+	t__gc�v_��s_�d_f�
+) (*);
+
+104 
+	s__gc�v_��s_d�a
+
+
+107 
+__gc�v_��s_f�
+ 
+__��s_f�
+;
+
+108 
+__gc�v_��s_cڋxt_f�
+ 
+__��s_cڋxt_f�
+;
+
+109 
+__gc�v_��s_�d_f�
+ 
+__��s_�d_f�
+;
+
+110 *
+__d�a
+;
+
+111 
+__gc�v_��s_d�a
+ *
+__�xt
+;
+
+116 
+	s__gc�v_��
+
+
+118 
+__gc�v_l�ded_obje�
+ *
+__shlib_h�d�
+;
+
+119 cڡ *
+__mod�me
+;
+
+121 
+__cou��
+;
+
+123 *
+__�om_�me
+;
+
+124 *
+__to_�me
+;
+
+126 
+__gc�v_f�
+ 
+__f�
+;
+
+127 
+__gc�v_btowc_f�
+ 
+__btowc_f�
+;
+
+128 
+__gc�v_��_f�
+ 
+__��_f�
+;
+
+129 
+__gc�v_�d_f�
+ 
+__�d_f�
+;
+
+133 
+__m�_�eded_�om
+;
+
+134 
+__max_�eded_�om
+;
+
+135 
+__m�_�eded_to
+;
+
+136 
+__max_�eded_to
+;
+
+139 
+__��eful
+;
+
+141 *
+__d�a
+;
+
+146 
+	s__gc�v_��_d�a
+
+
+148 *
+__outbuf
+;
+
+149 *
+__outbu�nd
+;
+
+153 
+__�ags
+;
+
+157 
+__�vo�ti�_cou��
+;
+
+161 
+__����_u�
+;
+
+163 
+__mb��e_t
+ *
+__���
+;
+
+164 
+__mb��e_t
+ 
+__��e
+;
+
+168 
+__gc�v_��s_d�a
+ *
+__��s
+;
+
+173 
+	s__gc�v_�fo
+
+
+175 
+size_t
+ 
+__n��s
+;
+
+176 
+__gc�v_��
+ *
+__��s
+;
+
+177 
+__ex�nsi�__
+ 
+__gc�v_��_d�a
+ 
+__d�a
+ 
+__�ex�r
+;
+
+178 } *
+	t__gc�v_t
+;
+
+	@/usr/include/gnu/stubs-32.h
+
+6 #ifde�
+_LIBC
+
+
+7 #�r� 
+A�li�ti�s
+ 
+may
+ 
+n�
+ 
+def�e
+ 
+the
+ 
+ma�o
+ 
+_LIBC
+
+
+10 
+	#__�ub_ch�ags
+
+
+	)
+
+11 
+	#__�ub_�ach
+
+
+	)
+
+12 
+	#__�ub_fch�ags
+
+
+	)
+
+13 
+	#__�ub_fd�ach
+
+
+	)
+
+14 
+	#__�ub_g�y
+
+
+	)
+
+15 
+	#__�ub_lchmod
+
+
+	)
+
+16 
+	#__�ub_�voke
+
+
+	)
+
+17 
+	#__�ub_��og�
+
+
+	)
+
+18 
+	#__�ub_sig�tu�
+
+
+	)
+
+19 
+	#__�ub_s�k
+
+
+	)
+
+20 
+	#__�ub_�ty
+
+
+	)
+
+	@/usr/include/gnu/stubs-64.h
+
+6 #ifde�
+_LIBC
+
+
+7 #�r� 
+A�li�ti�s
+ 
+may
+ 
+n�
+ 
+def�e
+ 
+the
+ 
+ma�o
+ 
+_LIBC
+
+
+10 
+	#__�ub_bd�ush
+
+
+	)
+
+11 
+	#__�ub_ch�ags
+
+
+	)
+
+12 
+	#__�ub_�ach
+
+
+	)
+
+13 
+	#__�ub_fch�ags
+
+
+	)
+
+14 
+	#__�ub_fd�ach
+
+
+	)
+
+15 
+	#__�ub_g�msg
+
+
+	)
+
+16 
+	#__�ub_g�y
+
+
+	)
+
+17 
+	#__�ub_lchmod
+
+
+	)
+
+18 
+	#__�ub_putmsg
+
+
+	)
+
+19 
+	#__�ub_�voke
+
+
+	)
+
+20 
+	#__�ub_��og�
+
+
+	)
+
+21 
+	#__�ub_sig�tu�
+
+
+	)
+
+22 
+	#__�ub_s�k
+
+
+	)
+
+23 
+	#__�ub_�ty
+
+
+	)
+
+	@/usr/include/gnu/stubs-x32.h
+
+6 #ifde�
+_LIBC
+
+
+7 #�r� 
+A�li�ti�s
+ 
+may
+ 
+n�
+ 
+def�e
+ 
+the
+ 
+ma�o
+ 
+_LIBC
+
+
+10 
+	#__�ub_bd�ush
+
+
+	)
+
+11 
+	#__�ub_ch�ags
+
+
+	)
+
+12 
+	#__�ub_���_modu�
+
+
+	)
+
+13 
+	#__�ub_�ach
+
+
+	)
+
+14 
+	#__�ub_fch�ags
+
+
+	)
+
+15 
+	#__�ub_fd�ach
+
+
+	)
+
+16 
+	#__�ub_g�_k��l_syms
+
+
+	)
+
+17 
+	#__�ub_g�msg
+
+
+	)
+
+18 
+	#__�ub_g�y
+
+
+	)
+
+19 
+	#__�ub_lchmod
+
+
+	)
+
+20 
+	#__�ub_nfs�rv�l
+
+
+	)
+
+21 
+	#__�ub_putmsg
+
+
+	)
+
+22 
+	#__�ub_qu�y_modu�
+
+
+	)
+
+23 
+	#__�ub_�voke
+
+
+	)
+
+24 
+	#__�ub_��og�
+
+
+	)
+
+25 
+	#__�ub_sig�tu�
+
+
+	)
+
+26 
+	#__�ub_s�k
+
+
+	)
+
+27 
+	#__�ub_�ty
+
+
+	)
+
+28 
+	#__�ub_u�lib
+
+
+	)
+
+	@/usr/include/wchar.h
+
+23 #i�de�
+_WCHAR_H
+
+
+25 #i�!
+def�ed
+ 
+__�ed_mb��e_t
+ && !def�ed 
+__�ed_w�t_t
+
+
+26 
+	#_WCHAR_H
+ 1
+
+	)
+
+27 
+	~<�u�s.h
+>
+
+30 #ifde�
+_WCHAR_H
+
+
+32 
+	#__�ed___FILE
+
+
+	)
+
+33 #i�
+def�ed
+ 
+__USE_UNIX98
+ || def�ed 
+__USE_XOPEN2K
+
+
+34 
+	#__�ed_FILE
+
+
+	)
+
+36 
+	~<�dio.h
+>
+
+38 
+	#__�ed___va_li�
+
+
+	)
+
+39 
+	~<�d�g.h
+>
+
+41 
+	~<b�s/wch�.h
+>
+
+44 
+	#__�ed_size_t
+
+
+	)
+
+45 
+	#__�ed_wch�_t
+
+
+	)
+
+46 
+	#__�ed_NULL
+
+
+	)
+
+48 #i�
+def�ed
+ 
+_WCHAR_H
+ || def�ed 
+__�ed_w�t_t
+ || !def�ed 
+__WINT_TYPE__
+
+
+49 #unde�
+__�ed_w�t_t
+
+
+50 
+	#__�ed_w�t_t
+
+
+	)
+
+51 
+	~<�ddef.h
+>
+
+55 #i�de�
+_WINT_T
+
+
+60 
+	#_WINT_T
+
+
+	)
+
+61 
+	tw�t_t
+;
+
+65 #i�
+def�ed
+ 
+__�lu�lus
+ && def�ed 
+_GLIBCPP_USE_NAMESPACES
+ \
+
+66 && 
+def�ed
+ 
+__WINT_TYPE__
+
+
+67 
+__BEGIN_NAMESPACE_STD
+
+
+68 
+__WINT_TYPE__
+ 
+	tw�t_t
+;
+
+69 
+	g__END_NAMESPACE_STD
+
+
+74 #i�
+def�ed
+ 
+__�lu�lus
+ && 
+__GNUC_PREREQ
+ (4, 4)
+
+75 
+	#__CORRECT_ISO_CPP_WCHAR_H_PROTO
+
+
+	)
+
+79 #i�(
+def�ed
+ 
+_WCHAR_H
+ || def�ed 
+__�ed_mb��e_t
+�&& !def�ed 
+____mb��e_t_def�ed
+
+
+80 
+	#____mb��e_t_def�ed
+ 1
+
+	)
+
+84 
+	m__cou�
+;
+
+87 #ifde�
+__WINT_TYPE__
+
+
+88 
+__WINT_TYPE__
+ 
+	m__wch
+;
+
+90 
+w�t_t
+ 
+	m__wch
+;
+
+92 
+	m__wchb
+[4];
+
+93 } 
+	m__v�ue
+;
+
+94 } 
+	t__mb��e_t
+;
+
+96 #unde�
+__�ed_mb��e_t
+
+
+101 #ifde�
+_WCHAR_H
+
+
+103 #i�de�
+__mb��e_t_def�ed
+
+
+104 
+__BEGIN_NAMESPACE_C99
+
+
+106 
+__mb��e_t
+ 
+	tmb��e_t
+;
+
+107 
+	g__END_NAMESPACE_C99
+
+
+108 
+	#__mb��e_t_def�ed
+ 1
+
+	)
+
+111 #ifde�
+__USE_GNU
+
+
+112 
+	$__USING_NAMESPACE_C99
+(
+mb��e_t
+)
+
+115 #i�de�
+WCHAR_MIN
+
+
+117 
+	#WCHAR_MIN
+ 
+__WCHAR_MIN
+
+
+	)
+
+118 
+	#WCHAR_MAX
+ 
+__WCHAR_MAX
+
+
+	)
+
+121 #i�de�
+WEOF
+
+
+122 
+	#WEOF
+ (0xffffffffu)
+
+	)
+
+127 #i�
+def�ed
+ 
+__USE_XOPEN
+ && !def�ed 
+__USE_UNIX98
+
+
+128 
+	~<w�y�.h
+>
+
+132 
+__BEGIN_DECLS
+
+
+134 
+__BEGIN_NAMESPACE_STD
+
+
+137 
+tm
+;
+
+138 
+__END_NAMESPACE_STD
+
+
+142 
+	$__USING_NAMESPACE_STD
+(
+tm
+)
+
+145 
+__BEGIN_NAMESPACE_STD
+
+
+147 
+wch�_t
+ *
+	$wcs�y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+148 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+�
+__THROW
+;
+
+150 
+wch�_t
+ *
+	$wc��y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+151 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+152 
+__THROW
+;
+
+155 
+wch�_t
+ *
+	$wcs�t
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+156 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+�
+__THROW
+;
+
+158 
+wch�_t
+ *
+	$wc��t
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+159 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+160 
+__THROW
+;
+
+163 

+	$wcscmp
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+)
+
+164 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+166 

+	$wc�cmp
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+, 
+size_t
+ 
+__n
+)
+
+167 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+168 
+__END_NAMESPACE_STD
+
+
+170 #ifde�
+__USE_XOPEN2K8
+
+
+172 

+	$wcs��cmp
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+�
+__THROW
+;
+
+175 

+	$wc���cmp
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+,
+
+176 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+180 
+	~<xlo��.h
+>
+
+182 

+	$wcs��cmp_l
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+,
+
+183 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+185 

+	$wc���cmp_l
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+,
+
+186 
+size_t
+ 
+__n
+, 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+189 
+__BEGIN_NAMESPACE_STD
+
+
+192 

+	$wcsc�l
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+�
+__THROW
+;
+
+196 
+size_t
+ 
+	$wcsx�m
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+197 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+, 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+198 
+__END_NAMESPACE_STD
+
+
+200 #ifde�
+__USE_XOPEN2K8
+
+
+206 

+	$wcsc�l_l
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+,
+
+207 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+212 
+size_t
+ 
+	$wcsx�m_l
+ (
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+,
+
+213 
+size_t
+ 
+__n
+, 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+216 
+wch�_t
+ *
+	$wcsdup
+ (cڡ 
+wch�_t
+ *
+__s
+�
+__THROW
+ 
+__��ibu�_m�loc__
+;
+
+219 
+__BEGIN_NAMESPACE_STD
+
+
+221 #ifde�
+__CORRECT_ISO_CPP_WCHAR_H_PROTO
+
+
+222 
"C++" 
+wch�_t
+ *
+	$wcschr
+ (
+wch�_t
+ *
+__wcs
+, wch�_�
+__wc
+)
+
+223 
+__THROW
+ 
+	`__asm
+ ("wcschr"�
+__��ibu�_pu�__
+;
+
+224 
"C++" cڡ 
+wch�_t
+ *
+	$wcschr
+ (cڡ 
+wch�_t
+ *
+__wcs
+, wch�_�
+__wc
+)
+
+225 
+__THROW
+ 
+	`__asm
+ ("wcschr"�
+__��ibu�_pu�__
+;
+
+227 
+wch�_t
+ *
+	$wcschr
+ (cڡ 
+wch�_t
+ *
+__wcs
+, wch�_�
+__wc
+)
+
+228 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+231 #ifde�
+__CORRECT_ISO_CPP_WCHAR_H_PROTO
+
+
+232 
"C++" 
+wch�_t
+ *
+	$wc�chr
+ (
+wch�_t
+ *
+__wcs
+, wch�_�
+__wc
+)
+
+233 
+__THROW
+ 
+	`__asm
+ ("wc�chr"�
+__��ibu�_pu�__
+;
+
+234 
"C++" cڡ 
+wch�_t
+ *
+	$wc�chr
+ (cڡ 
+wch�_t
+ *
+__wcs
+, wch�_�
+__wc
+)
+
+235 
+__THROW
+ 
+	`__asm
+ ("wc�chr"�
+__��ibu�_pu�__
+;
+
+237 
+wch�_t
+ *
+	$wc�chr
+ (cڡ 
+wch�_t
+ *
+__wcs
+, wch�_�
+__wc
+)
+
+238 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+240 
+__END_NAMESPACE_STD
+
+
+242 #ifde�
+__USE_GNU
+
+
+245 
+wch�_t
+ *
+	$wcsch�ul
+ (cڡ 
+wch�_t
+ *
+__s
+, wch�_�
+__wc
+)
+
+246 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+249 
+__BEGIN_NAMESPACE_STD
+
+
+252 
+size_t
+ 
+	$wcsc�n
+ (cڡ 
+wch�_t
+ *
+__wcs
+, cڡ wch�_�*
+__�je�
+)
+
+253 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+256 
+size_t
+ 
+	$wcs�n
+ (cڡ 
+wch�_t
+ *
+__wcs
+, cڡ wch�_�*
+__ac��
+)
+
+257 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+259 #ifde�
+__CORRECT_ISO_CPP_WCHAR_H_PROTO
+
+
+260 
"C++" 
+wch�_t
+ *
+	$wc�brk
+ (
+wch�_t
+ *
+__wcs
+, cڡ wch�_�*
+__ac��
+)
+
+261 
+__THROW
+ 
+	`__asm
+ ("wc�brk"�
+__��ibu�_pu�__
+;
+
+262 
"C++" cڡ 
+wch�_t
+ *
+	$wc�brk
+ (cڡ 
+wch�_t
+ *
+__wcs
+,
+
+263 cڡ 
+wch�_t
+ *
+__ac��
+)
+
+264 
+__THROW
+ 
+	`__asm
+ ("wc�brk"�
+__��ibu�_pu�__
+;
+
+266 
+wch�_t
+ *
+	$wc�brk
+ (cڡ 
+wch�_t
+ *
+__wcs
+, cڡ wch�_�*
+__ac��
+)
+
+267 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+270 #ifde�
+__CORRECT_ISO_CPP_WCHAR_H_PROTO
+
+
+271 
"C++" 
+wch�_t
+ *
+	$wcs�r
+ (
+wch�_t
+ *
+__hay�ack
+, cڡ wch�_�*
+__�ed�
+)
+
+272 
+__THROW
+ 
+	`__asm
+ ("wcs�r"�
+__��ibu�_pu�__
+;
+
+273 
"C++" cڡ 
+wch�_t
+ *
+	$wcs�r
+ (cڡ 
+wch�_t
+ *
+__hay�ack
+,
+
+274 cڡ 
+wch�_t
+ *
+__�ed�
+)
+
+275 
+__THROW
+ 
+	`__asm
+ ("wcs�r"�
+__��ibu�_pu�__
+;
+
+277 
+wch�_t
+ *
+	$wcs�r
+ (cڡ 
+wch�_t
+ *
+__hay�ack
+, cڡ wch�_�*
+__�ed�
+)
+
+278 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+282 
+wch�_t
+ *
+	$wc�ok
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+,
+
+283 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__d�im
+,
+
+284 
+wch�_t
+ **
+__��ri�
+ 
+__�r
+�
+__THROW
+;
+
+287 
+size_t
+ 
+	$wc��
+ (cڡ 
+wch�_t
+ *
+__s
+�
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+288 
+__END_NAMESPACE_STD
+
+
+290 #ifde�
+__USE_XOPEN
+
+
+292 #ifde�
+__CORRECT_ISO_CPP_WCHAR_H_PROTO
+
+
+293 
"C++" 
+wch�_t
+ *
+	$wcswcs
+ (
+wch�_t
+ *
+__hay�ack
+, cڡ wch�_�*
+__�ed�
+)
+
+294 
+__THROW
+ 
+	`__asm
+ ("wcswcs"�
+__��ibu�_pu�__
+;
+
+295 
"C++" cڡ 
+wch�_t
+ *
+	$wcswcs
+ (cڡ 
+wch�_t
+ *
+__hay�ack
+,
+
+296 cڡ 
+wch�_t
+ *
+__�ed�
+)
+
+297 
+__THROW
+ 
+	`__asm
+ ("wcswcs"�
+__��ibu�_pu�__
+;
+
+299 
+wch�_t
+ *
+	$wcswcs
+ (cڡ 
+wch�_t
+ *
+__hay�ack
+, cڡ wch�_�*
+__�ed�
+)
+
+300 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+304 #ifde�
+__USE_XOPEN2K8
+
+
+306 
+size_t
+ 
+	$wc��n
+ (cڡ 
+wch�_t
+ *
+__s
+, 
+size_t
+ 
+__max�n
+)
+
+307 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+311 
+__BEGIN_NAMESPACE_STD
+
+
+313 #ifde�
+__CORRECT_ISO_CPP_WCHAR_H_PROTO
+
+
+314 
"C++" 
+wch�_t
+ *
+	$wmemchr
+ (
+wch�_t
+ *
+__s
+, wch�_�
+__c
+, 
+size_t
+ 
+__n
+)
+
+315 
+__THROW
+ 
+	`__asm
+ ("wmemchr"�
+__��ibu�_pu�__
+;
+
+316 
"C++" cڡ 
+wch�_t
+ *
+	$wmemchr
+ (cڡ 
+wch�_t
+ *
+__s
+, wch�_�
+__c
+,
+
+317 
+size_t
+ 
+__n
+)
+
+318 
+__THROW
+ 
+	`__asm
+ ("wmemchr"�
+__��ibu�_pu�__
+;
+
+320 
+wch�_t
+ *
+	$wmemchr
+ (cڡ 
+wch�_t
+ *
+__s
+, wch�_�
+__c
+, 
+size_t
+ 
+__n
+)
+
+321 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+325 

+	$wmemcmp
+ (cڡ 
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+, 
+size_t
+ 
+__n
+)
+
+326 
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+329 
+wch�_t
+ *
+	$wmem�y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+330 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+, 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+334 
+wch�_t
+ *
+	$wmemmove
+ (
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+, 
+size_t
+ 
+__n
+)
+
+335 
+__THROW
+;
+
+338 
+wch�_t
+ *
+	$wmem�t
+ (
+wch�_t
+ *
+__s
+, wch�_�
+__c
+, 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+339 
+__END_NAMESPACE_STD
+
+
+341 #ifde�
+__USE_GNU
+
+
+344 
+wch�_t
+ *
+	$wmemp�y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+345 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+, 
+size_t
+ 
+__n
+)
+
+346 
+__THROW
+;
+
+350 
+__BEGIN_NAMESPACE_STD
+
+
+353 
+w�t_t
+ 
+	$btowc
+ (
+__c
+�
+__THROW
+;
+
+357 

+	$w�ob
+ (
+w�t_t
+ 
+__c
+�
+__THROW
+;
+
+361 

+	$mbs��
+ (cڡ 
+mb��e_t
+ *
+__ps
+�
+__THROW
+ 
+__��ibu�_pu�__
+;
+
+365 
+size_t
+ 
+	$mb�owc
+ (
+wch�_t
+ *
+__��ri�
+ 
+__pwc
+,
+
+366 cڡ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+367 
+mb��e_t
+ *
+__��ri�
+ 
+__p
+�
+__THROW
+;
+
+370 
+size_t
+ 
+	$w�tomb
+ (*
+__��ri�
+ 
+__s
+, 
+wch�_t
+ 
+__wc
+,
+
+371 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+�
+__THROW
+;
+
+374 
+size_t
+ 
+	$__mb��
+ (cڡ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+375 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+�
+__THROW
+;
+
+376 
+size_t
+ 
+	$mb��
+ (cڡ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+377 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+�
+__THROW
+;
+
+378 
+__END_NAMESPACE_STD
+
+
+380 #ifde�
+__USE_EXTERN_INLINES
+
+
+386 
+w�t_t
+ 
+	$__btowc_��s
+ (
+__c
+�
+	`__asm
+ ("btowc");
+
+387 
+__ex��_�l�e
+ 
+w�t_t
+
+
+388 
+	`__NTH
+ (
+	$btowc
+ (
+__c
+))
+
+389 {  (
+	`__bu�t�_cڡ�t_p
+ (
+__c
+) && __c >= '\0' && __c <= '\x7f'
+
+390 ? (
+w�t_t
+�
+__c
+ : 
+	`__btowc_��s
+ (__c)); 
+	}
+}
+
+392 

+	$__w�ob_��s
+ (
+w�t_t
+ 
+__c
+�
+	`__asm
+ ("wctob");
+
+393 
+__ex��_�l�e
+ 
+
+394 
+	`__NTH
+ (
+	$w�ob
+ (
+w�t_t
+ 
+__wc
+))
+
+395 {  (
+	`__bu�t�_cڡ�t_p
+ (
+__wc
+�&& __w�>�
+L
+'\0' && __wc <= L'\x7f'
+
+396 ? (�
+__wc
+ : 
+	`__w�ob_��s
+ (__wc)); 
+	}
+}
+
+398 
+__ex��_�l�e
+ 
+size_t
+
+
+399 
+__NTH
+ (
+	$mb��
+ (cڡ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+400 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+))
+
+401 {  (
+__ps
+ !�
+NULL
+
+
+402 ? 
+	`mb�owc
+ (
+NULL
+, 
+__s
+, 
+__n
+, 
+__ps
+�: 
+	`__mb��
+ (__s, __n, NULL)); 
+	}
+}
+
+405 
+__BEGIN_NAMESPACE_STD
+
+
+408 
+size_t
+ 
+	$mb�towcs
+ (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+409 cڡ **
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__�n
+,
+
+410 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+�
+__THROW
+;
+
+414 
+size_t
+ 
+	$wc�tombs
+ (*
+__��ri�
+ 
+__d�
+,
+
+415 cڡ 
+wch�_t
+ **
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__�n
+,
+
+416 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+�
+__THROW
+;
+
+417 
+__END_NAMESPACE_STD
+
+
+420 #ifdef 
+__USE_XOPEN2K8
+
+
+423 
+size_t
+ 
+	$mb��owcs
+ (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+424 cڡ **
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__nmc
+,
+
+425 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+�
+__THROW
+;
+
+429 
+size_t
+ 
+	$wc��ombs
+ (*
+__��ri�
+ 
+__d�
+,
+
+430 cڡ 
+wch�_t
+ **
+__��ri�
+ 
+__�c
+,
+
+431 
+size_t
+ 
+__nwc
+, size_�
+__�n
+,
+
+432 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+�
+__THROW
+;
+
+437 #ifde�
+__USE_XOPEN
+
+
+439 

+	$wcwidth
+ (
+wch�_t
+ 
+__c
+�
+__THROW
+;
+
+443 

+	$wcswidth
+ (cڡ 
+wch�_t
+ *
+__s
+, 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+447 
+__BEGIN_NAMESPACE_STD
+
+
+450 

+	$wc�od
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+451 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+�
+__THROW
+;
+
+452 
+__END_NAMESPACE_STD
+
+
+454 #ifde�
+__USE_ISOC99
+
+
+455 
+__BEGIN_NAMESPACE_C99
+
+
+457 

+	$wc�of
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+458 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+�
+__THROW
+;
+
+459 

+	$wc��d
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+460 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+�
+__THROW
+;
+
+461 
+__END_NAMESPACE_C99
+
+
+465 
+__BEGIN_NAMESPACE_STD
+
+
+468 

+	$wc��
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+469 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+�
+__THROW
+;
+
+473 

+	$wc�oul
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+474 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+475 
+__THROW
+;
+
+476 
+__END_NAMESPACE_STD
+
+
+478 #ifde�
+__USE_ISOC99
+
+
+479 
+__BEGIN_NAMESPACE_C99
+
+
+482 
+__ex�nsi�__
+
+
+483 

+	$wc��l
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+484 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+485 
+__THROW
+;
+
+489 
+__ex�nsi�__
+
+
+490 

+	$wc�ou�
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+491 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+,
+
+492 
+__ba�
+�
+__THROW
+;
+
+493 
+__END_NAMESPACE_C99
+
+
+496 #ifde�
+__USE_GNU
+
+
+499 
+__ex�nsi�__
+
+
+500 

+	$wc�oq
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+501 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+)
+
+502 
+__THROW
+;
+
+506 
+__ex�nsi�__
+
+
+507 

+	$wc�ouq
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+508 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+,
+
+509 
+__ba�
+�
+__THROW
+;
+
+512 #ifde�
+__USE_GNU
+
+
+526 
+	~<xlo��.h
+>
+
+530 

+	$wc��_l
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+531 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+, 
+__ba�
+,
+
+532 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+534 

+	$wc�oul_l
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+535 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+,
+
+536 
+__ba�
+, 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+538 
+__ex�nsi�__
+
+
+539 

+	$wc��l_l
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+540 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+,
+
+541 
+__ba�
+, 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+543 
+__ex�nsi�__
+
+
+544 

+	$wc�ou�_l
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+545 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+,
+
+546 
+__ba�
+, 
+__lo��_t
+ 
+__loc
+)
+
+547 
+__THROW
+;
+
+549 

+	$wc�od_l
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+550 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+, 
+__lo��_t
+ 
+__loc
+)
+
+551 
+__THROW
+;
+
+553 

+	$wc�of_l
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+554 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+, 
+__lo��_t
+ 
+__loc
+)
+
+555 
+__THROW
+;
+
+557 

+	$wc��d_l
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__Ō
+,
+
+558 
+wch�_t
+ **
+__��ri�
+ 
+__�d�r
+,
+
+559 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+563 #ifde�
+__USE_XOPEN2K8
+
+
+566 
+wch�_t
+ *
+	$w��y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+567 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+�
+__THROW
+;
+
+571 
+wch�_t
+ *
+	$w�n�y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+572 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+)
+
+573 
+__THROW
+;
+
+580 
+__FILE
+ *
+	$ݒ_wmem��am
+ (
+wch�_t
+ **
+__bu�oc
+, 
+size_t
+ *
+__siz�oc
+�
+__THROW
+;
+
+583 #i�
+def�ed
+ 
+__USE_ISOC95
+ || def�ed 
+__USE_UNIX98
+
+
+584 
+__BEGIN_NAMESPACE_STD
+
+
+587 

+	$fwide
+ (
+__FILE
+ *
+__�
+, 
+__mode
+�
+__THROW
+;
+
+594 

+	`fw��tf
+ (
+__FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+595 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+601 

+	`w��tf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+604 

+	$sw��tf
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+605 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+606 
+__THROW
+ ;
+
+612 

+	`vfw��tf
+ (
+__FILE
+ *
+__��ri�
+ 
+__s
+,
+
+613 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+614 
+__gnuc_va_li�
+ 
+__�g
+)
+
+620 

+	`vw��tf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+621 
+__gnuc_va_li�
+ 
+__�g
+)
+
+625 

+	$vsw��tf
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+626 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+627 
+__gnuc_va_li�
+ 
+__�g
+)
+
+628 
+__THROW
+ ;
+
+635 

+	`fws�nf
+ (
+__FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+636 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+642 

+	`ws�nf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+645 

+	$sws�nf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s
+,
+
+646 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+647 
+__THROW
+ ;
+
+649 #i�
+def�ed
+ 
+__USE_ISOC99
+ && !def�ed 
+__USE_GNU
+ \
+
+650 && (!
+def�ed
+ 
+__LDBL_COMPAT
+ || !def�ed 
+__REDIRECT
+) \
+
+651 && (
+def�ed
+ 
+__STRICT_ANSI__
+ || def�ed 
+__USE_XOPEN2K
+)
+
+652 #ifde�
+__REDIRECT
+
+
+656 

+	`__REDIRECT
+ (
+fws�nf
+, (
+__FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+657 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...),
+
+658 
+__isoc99_fws�nf
+)
+
+660 

+	`__REDIRECT
+ (
+ws�nf
+, (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...),
+
+661 
+__isoc99_ws�nf
+)
+
+663 

+	`__REDIRECT_NTH
+ (
+sws�nf
+, (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s
+,
+
+664 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+665 ...), 
+__isoc99_sws�nf
+)
+
+668 

+	`__isoc99_fws�nf
+ (
+__FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+669 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...);
+
+670 

+	`__isoc99_ws�nf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...);
+
+671 

+	$__isoc99_sws�nf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s
+,
+
+672 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+673 
+__THROW
+;
+
+674 
+	#fws�nf
+ 
+__isoc99_fws�nf
+
+
+	)
+
+675 
+	#ws�nf
+ 
+__isoc99_ws�nf
+
+
+	)
+
+676 
+	#sws�nf
+ 
+__isoc99_sws�nf
+
+
+	)
+
+680 
+__END_NAMESPACE_STD
+
+
+683 #ifde�
+__USE_ISOC99
+
+
+684 
+__BEGIN_NAMESPACE_C99
+
+
+689 

+	`vfws�nf
+ (
+__FILE
+ *
+__��ri�
+ 
+__s
+,
+
+690 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+691 
+__gnuc_va_li�
+ 
+__�g
+)
+
+697 

+	`vws�nf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+698 
+__gnuc_va_li�
+ 
+__�g
+)
+
+701 

+	$vsws�nf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s
+,
+
+702 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+703 
+__gnuc_va_li�
+ 
+__�g
+)
+
+704 
+__THROW
+ ;
+
+706 #i�!
+def�ed
+ 
+__USE_GNU
+ \
+
+707 && (!
+def�ed
+ 
+__LDBL_COMPAT
+ || !def�ed 
+__REDIRECT
+) \
+
+708 && (
+def�ed
+ 
+__STRICT_ANSI__
+ || def�ed 
+__USE_XOPEN2K
+)
+
+709 #ifde�
+__REDIRECT
+
+
+710 

+	`__REDIRECT
+ (
+vfws�nf
+, (
+__FILE
+ *
+__��ri�
+ 
+__s
+,
+
+711 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+712 
+__gnuc_va_li�
+ 
+__�g
+), 
+__isoc99_vfws�nf
+)
+
+714 

+	`__REDIRECT
+ (
+vws�nf
+, (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+715 
+__gnuc_va_li�
+ 
+__�g
+), 
+__isoc99_vws�nf
+)
+
+717 

+	`__REDIRECT_NTH
+ (
+vsws�nf
+, (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s
+,
+
+718 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+719 
+__gnuc_va_li�
+ 
+__�g
+), 
+__isoc99_vsws�nf
+)
+
+722 

+	`__isoc99_vfws�nf
+ (
+__FILE
+ *
+__��ri�
+ 
+__s
+,
+
+723 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+724 
+__gnuc_va_li�
+ 
+__�g
+);
+
+725 

+	`__isoc99_vws�nf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+726 
+__gnuc_va_li�
+ 
+__�g
+);
+
+727 

+	$__isoc99_vsws�nf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s
+,
+
+728 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+729 
+__gnuc_va_li�
+ 
+__�g
+�
+__THROW
+;
+
+730 
+	#vfws�nf
+ 
+__isoc99_vfws�nf
+
+
+	)
+
+731 
+	#vws�nf
+ 
+__isoc99_vws�nf
+
+
+	)
+
+732 
+	#vsws�nf
+ 
+__isoc99_vsws�nf
+
+
+	)
+
+736 
+__END_NAMESPACE_C99
+
+
+740 
+__BEGIN_NAMESPACE_STD
+
+
+745 
+w�t_t
+ 
+	`fg�wc
+ (
+__FILE
+ *
+__��am
+);
+
+746 
+w�t_t
+ 
+	`g�wc
+ (
+__FILE
+ *
+__��am
+);
+
+752 
+w�t_t
+ 
+	`g�wch�
+ ();
+
+759 
+w�t_t
+ 
+	`�utwc
+ (
+wch�_t
+ 
+__wc
+, 
+__FILE
+ *
+__��am
+);
+
+760 
+w�t_t
+ 
+	`putwc
+ (
+wch�_t
+ 
+__wc
+, 
+__FILE
+ *
+__��am
+);
+
+766 
+w�t_t
+ 
+	`putwch�
+ (
+wch�_t
+ 
+__wc
+);
+
+774 
+wch�_t
+ *
+	`fg�ws
+ (wch�_�*
+__��ri�
+ 
+__ws
+, 
+__n
+,
+
+775 
+__FILE
+ *
+__��ri�
+ 
+__��am
+);
+
+781 

+	`�utws
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__ws
+,
+
+782 
+__FILE
+ *
+__��ri�
+ 
+__��am
+);
+
+789 
+w�t_t
+ 
+	`ung�wc
+ (w�t_�
+__wc
+, 
+__FILE
+ *
+__��am
+);
+
+790 
+__END_NAMESPACE_STD
+
+
+793 #ifde�
+__USE_GNU
+
+
+801 
+w�t_t
+ 
+	`g�wc_u�ocked
+ (
+__FILE
+ *
+__��am
+);
+
+802 
+w�t_t
+ 
+	`g�wch�_u�ocked
+ ();
+
+810 
+w�t_t
+ 
+	`fg�wc_u�ocked
+ (
+__FILE
+ *
+__��am
+);
+
+818 
+w�t_t
+ 
+	`�utwc_u�ocked
+ (
+wch�_t
+ 
+__wc
+, 
+__FILE
+ *
+__��am
+);
+
+827 
+w�t_t
+ 
+	`putwc_u�ocked
+ (
+wch�_t
+ 
+__wc
+, 
+__FILE
+ *
+__��am
+);
+
+828 
+w�t_t
+ 
+	`putwch�_u�ocked
+ (
+wch�_t
+ 
+__wc
+);
+
+837 
+wch�_t
+ *
+	`fg�ws_u�ocked
+ (wch�_�*
+__��ri�
+ 
+__ws
+, 
+__n
+,
+
+838 
+__FILE
+ *
+__��ri�
+ 
+__��am
+);
+
+846 

+	`�utws_u�ocked
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__ws
+,
+
+847 
+__FILE
+ *
+__��ri�
+ 
+__��am
+);
+
+851 
+__BEGIN_NAMESPACE_C99
+
+
+855 
+size_t
+ 
+	$wcs�ime
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__maxsize
+,
+
+856 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+857 cڡ 
+tm
+ *
+__��ri�
+ 
+__�
+�
+__THROW
+;
+
+858 
+__END_NAMESPACE_C99
+
+
+860 #ifde�
+__USE_GNU
+
+
+861 
+	~<xlo��.h
+>
+
+865 
+size_t
+ 
+	$wcs�ime_l
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__maxsize
+,
+
+866 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+867 cڡ 
+tm
+ *
+__��ri�
+ 
+__�
+,
+
+868 
+__lo��_t
+ 
+__loc
+�
+__THROW
+;
+
+877 #i�
+def�ed
+ 
+__USE_UNIX98
+ && !def�ed 
+__USE_GNU
+
+
+878 
+	#__�ed_iswxxx
+
+
+	)
+
+879 
+	~<w�y�.h
+>
+
+883 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+
+
+884 
+	~<b�s/wch�2.h
+>
+
+887 #ifde�
+__LDBL_COMPAT
+
+
+888 
+	~<b�s/wch�-ldbl.h
+>
+
+891 
+__END_DECLS
+
+
+899 #unde�
+__�ed_mb��e_t
+
+
+900 #unde�
+__�ed_w�t_t
+
+
+	@/usr/include/asm-generic/errno.h
+
+1 #i�de�
+_ASM_GENERIC_ERRNO_H
+
+
+2 
+	#_ASM_GENERIC_ERRNO_H
+
+
+	)
+
+4 
+	~<asm-g��ic/��o-ba�.h
+>
+
+6 
+	#EDEADLK
+ 35
+
+	)
+
+7 
+	#ENAMETOOLONG
+ 36
+
+	)
+
+8 
+	#ENOLCK
+ 37
+
+	)
+
+9 
+	#ENOSYS
+ 38
+
+	)
+
+10 
+	#ENOTEMPTY
+ 39
+
+	)
+
+11 
+	#ELOOP
+ 40
+
+	)
+
+12 
+	#EWOULDBLOCK
+ 
+EAGAIN
+
+
+	)
+
+13 
+	#ENOMSG
+ 42
+
+	)
+
+14 
+	#EIDRM
+ 43
+
+	)
+
+15 
+	#ECHRNG
+ 44
+
+	)
+
+16 
+	#EL2NSYNC
+ 45
+
+	)
+
+17 
+	#EL3HLT
+ 46
+
+	)
+
+18 
+	#EL3RST
+ 47
+
+	)
+
+19 
+	#ELNRNG
+ 48
+
+	)
+
+20 
+	#EUNATCH
+ 49
+
+	)
+
+21 
+	#ENOCSI
+ 50
+
+	)
+
+22 
+	#EL2HLT
+ 51
+
+	)
+
+23 
+	#EBADE
+ 52
+
+	)
+
+24 
+	#EBADR
+ 53
+
+	)
+
+25 
+	#EXFULL
+ 54
+
+	)
+
+26 
+	#ENOANO
+ 55
+
+	)
+
+27 
+	#EBADRQC
+ 56
+
+	)
+
+28 
+	#EBADSLT
+ 57
+
+	)
+
+30 
+	#EDEADLOCK
+ 
+EDEADLK
+
+
+	)
+
+32 
+	#EBFONT
+ 59
+
+	)
+
+33 
+	#ENOSTR
+ 60
+
+	)
+
+34 
+	#ENODATA
+ 61
+
+	)
+
+35 
+	#ETIME
+ 62
+
+	)
+
+36 
+	#ENOSR
+ 63
+
+	)
+
+37 
+	#ENONET
+ 64
+
+	)
+
+38 
+	#ENOPKG
+ 65
+
+	)
+
+39 
+	#EREMOTE
+ 66
+
+	)
+
+40 
+	#ENOLINK
+ 67
+
+	)
+
+41 
+	#EADV
+ 68
+
+	)
+
+42 
+	#ESRMNT
+ 69
+
+	)
+
+43 
+	#ECOMM
+ 70
+
+	)
+
+44 
+	#EPROTO
+ 71
+
+	)
+
+45 
+	#EMULTIHOP
+ 72
+
+	)
+
+46 
+	#EDOTDOT
+ 73
+
+	)
+
+47 
+	#EBADMSG
+ 74
+
+	)
+
+48 
+	#EOVERFLOW
+ 75
+
+	)
+
+49 
+	#ENOTUNIQ
+ 76
+
+	)
+
+50 
+	#EBADFD
+ 77
+
+	)
+
+51 
+	#EREMCHG
+ 78
+
+	)
+
+52 
+	#ELIBACC
+ 79
+
+	)
+
+53 
+	#ELIBBAD
+ 80
+
+	)
+
+54 
+	#ELIBSCN
+ 81
+
+	)
+
+55 
+	#ELIBMAX
+ 82
+
+	)
+
+56 
+	#ELIBEXEC
+ 83
+
+	)
+
+57 
+	#EILSEQ
+ 84
+
+	)
+
+58 
+	#ERESTART
+ 85
+
+	)
+
+59 
+	#ESTRPIPE
+ 86
+
+	)
+
+60 
+	#EUSERS
+ 87
+
+	)
+
+61 
+	#ENOTSOCK
+ 88
+
+	)
+
+62 
+	#EDESTADDRREQ
+ 89
+
+	)
+
+63 
+	#EMSGSIZE
+ 90
+
+	)
+
+64 
+	#EPROTOTYPE
+ 91
+
+	)
+
+65 
+	#ENOPROTOOPT
+ 92
+
+	)
+
+66 
+	#EPROTONOSUPPORT
+ 93
+
+	)
+
+67 
+	#ESOCKTNOSUPPORT
+ 94
+
+	)
+
+68 
+	#EOPNOTSUPP
+ 95
+
+	)
+
+69 
+	#EPFNOSUPPORT
+ 96
+
+	)
+
+70 
+	#EAFNOSUPPORT
+ 97
+
+	)
+
+71 
+	#EADDRINUSE
+ 98
+
+	)
+
+72 
+	#EADDRNOTAVAIL
+ 99
+
+	)
+
+73 
+	#ENETDOWN
+ 100
+
+	)
+
+74 
+	#ENETUNREACH
+ 101
+
+	)
+
+75 
+	#ENETRESET
+ 102
+
+	)
+
+76 
+	#ECONNABORTED
+ 103
+
+	)
+
+77 
+	#ECONNRESET
+ 104
+
+	)
+
+78 
+	#ENOBUFS
+ 105
+
+	)
+
+79 
+	#EISCONN
+ 106
+
+	)
+
+80 
+	#ENOTCONN
+ 107
+
+	)
+
+81 
+	#ESHUTDOWN
+ 108
+
+	)
+
+82 
+	#ETOOMANYREFS
+ 109
+
+	)
+
+83 
+	#ETIMEDOUT
+ 110
+
+	)
+
+84 
+	#ECONNREFUSED
+ 111
+
+	)
+
+85 
+	#EHOSTDOWN
+ 112
+
+	)
+
+86 
+	#EHOSTUNREACH
+ 113
+
+	)
+
+87 
+	#EALREADY
+ 114
+
+	)
+
+88 
+	#EINPROGRESS
+ 115
+
+	)
+
+89 
+	#ESTALE
+ 116
+
+	)
+
+90 
+	#EUCLEAN
+ 117
+
+	)
+
+91 
+	#ENOTNAM
+ 118
+
+	)
+
+92 
+	#ENAVAIL
+ 119
+
+	)
+
+93 
+	#EISNAM
+ 120
+
+	)
+
+94 
+	#EREMOTEIO
+ 121
+
+	)
+
+95 
+	#EDQUOT
+ 122
+
+	)
+
+97 
+	#ENOMEDIUM
+ 123
+
+	)
+
+98 
+	#EMEDIUMTYPE
+ 124
+
+	)
+
+99 
+	#ECANCELED
+ 125
+
+	)
+
+100 
+	#ENOKEY
+ 126
+
+	)
+
+101 
+	#EKEYEXPIRED
+ 127
+
+	)
+
+102 
+	#EKEYREVOKED
+ 128
+
+	)
+
+103 
+	#EKEYREJECTED
+ 129
+
+	)
+
+106 
+	#EOWNERDEAD
+ 130
+
+	)
+
+107 
+	#ENOTRECOVERABLE
+ 131
+
+	)
+
+109 
+	#ERFKILL
+ 132
+
+	)
+
+111 
+	#EHWPOISON
+ 133
+
+	)
+
+	@/usr/include/bits/wchar-ldbl.h
+
+19 #i�de�
+_WCHAR_H
+
+
+23 #i�
+def�ed
+ 
+__USE_ISOC95
+ || def�ed 
+__USE_UNIX98
+
+
+24 
+__BEGIN_NAMESPACE_C99
+
+
+25 
+__LDBL_REDIR_DECL
+ (
+fw��tf
+);
+
+26 
+__LDBL_REDIR_DECL
+ (
+w��tf
+);
+
+27 
+__LDBL_REDIR_DECL
+ (
+sw��tf
+);
+
+28 
+__LDBL_REDIR_DECL
+ (
+vfw��tf
+);
+
+29 
+__LDBL_REDIR_DECL
+ (
+vw��tf
+);
+
+30 
+__LDBL_REDIR_DECL
+ (
+vsw��tf
+);
+
+31 #i�
+def�ed
+ 
+__USE_ISOC99
+ && !def�ed 
+__USE_GNU
+ \
+
+32 && !
+def�ed
+ 
+	g__REDIRECT
+ \
+
+33 && (
+def�ed
+ 
+	g__STRICT_ANSI__
+ || def�ed 
+	g__USE_XOPEN2K
+)
+
+34 
+	$__LDBL_REDIR1_DECL
+ (
+fws�nf
+, 
+__�dbl___isoc99_fws�nf
+)
+
+35 
+	$__LDBL_REDIR1_DECL
+ (
+ws�nf
+, 
+__�dbl___isoc99_ws�nf
+)
+
+36 
+	$__LDBL_REDIR1_DECL
+ (
+sws�nf
+, 
+__�dbl___isoc99_sws�nf
+)
+
+38 
+	`__LDBL_REDIR_DECL
+ (
+fws�nf
+);
+
+39 
+	`__LDBL_REDIR_DECL
+ (
+ws�nf
+);
+
+40 
+	`__LDBL_REDIR_DECL
+ (
+sws�nf
+);
+
+42 
+__END_NAMESPACE_C99
+
+
+45 #ifde�
+__USE_ISOC99
+
+
+46 
+__BEGIN_NAMESPACE_C99
+
+
+47 
+	`__LDBL_REDIR1_DECL
+ (
+wc��d
+, 
+wc�od
+);
+
+48 #i�!
+def�ed
+ 
+__USE_GNU
+ && !def�ed 
+__REDIRECT
+ \
+
+49 && (
+def�ed
+ 
+__STRICT_ANSI__
+ || def�ed 
+__USE_XOPEN2K
+)
+
+50 
+	$__LDBL_REDIR1_DECL
+ (
+vfws�nf
+, 
+__�dbl___isoc99_vfws�nf
+)
+
+51 
+	$__LDBL_REDIR1_DECL
+ (
+vws�nf
+, 
+__�dbl___isoc99_vws�nf
+)
+
+52 
+	$__LDBL_REDIR1_DECL
+ (
+vsws�nf
+, 
+__�dbl___isoc99_vsws�nf
+)
+
+54 
+	`__LDBL_REDIR_DECL
+ (
+vfws�nf
+);
+
+55 
+	`__LDBL_REDIR_DECL
+ (
+vws�nf
+);
+
+56 
+	`__LDBL_REDIR_DECL
+ (
+vsws�nf
+);
+
+58 
+__END_NAMESPACE_C99
+
+
+61 #ifde�
+__USE_GNU
+
+
+62 
+	`__LDBL_REDIR1_DECL
+ (
+wc��d_l
+, 
+wc�od_l
+);
+
+65 #i�
+__USE_FORTIFY_LEVEL
+ > 0 && 
+def�ed
+ 
+__f�tify_fun�i�
+
+
+66 
+	$__LDBL_REDIR_DECL
+ (
+__sw��tf_chk
+)
+
+67 
+	$__LDBL_REDIR_DECL
+ (
+__vsw��tf_chk
+)
+
+68 #i�
+__USE_FORTIFY_LEVEL
+ > 1
+
+69 
+	$__LDBL_REDIR_DECL
+ (
+__fw��tf_chk
+)
+
+70 
+	$__LDBL_REDIR_DECL
+ (
+__w��tf_chk
+)
+
+71 
+	$__LDBL_REDIR_DECL
+ (
+__vfw��tf_chk
+)
+
+72 
+	$__LDBL_REDIR_DECL
+ (
+__vw��tf_chk
+)
+
+	@/usr/include/bits/wchar2.h
+
+19 #i�de�
+_WCHAR_H
+
+
+24 
+wch�_t
+ *
+	$__wmem�y_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+25 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+, 
+size_t
+ 
+__n
+,
+
+26 
+size_t
+ 
+__ns1
+�
+__THROW
+;
+
+27 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wmem�y_��s
+,
+
+28 (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+29 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+, 
+size_t
+ 
+__n
+),
+
+30 
+wmem�y
+);
+
+31 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wmem�y_chk_w�n
+,
+
+32 (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+33 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+, 
+size_t
+ 
+__n
+,
+
+34 
+size_t
+ 
+__ns1
+), 
+__wmem�y_chk
+)
+
+35 
+	`__w�ljr
+ ("wmemcpy called with�ength bigger�han size of destination "
+
+38 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+39 
+	`__NTH
+ (
+	$wmem�y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+, cڡ wch�_�*__��ri� 
+__s2
+,
+
+40 
+size_t
+ 
+__n
+))
+
+42 i�(
+	`__bos0
+ (
+__s1
+�!�(
+size_t
+) -1)
+
+44 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+))
+
+45  
+	`__wmem�y_chk
+ (
+__s1
+, 
+__s2
+, 
+__n
+,
+
+46 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+));
+
+48 i�(
+__n
+ > 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+))
+
+49  
+	`__wmem�y_chk_w�n
+ (
+__s1
+, 
+__s2
+, 
+__n
+,
+
+50 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+));
+
+52  
+	`__wmem�y_��s
+ (
+__s1
+, 
+__s2
+, 
+__n
+);
+
+53 
+	}
+}
+
+56 
+wch�_t
+ *
+	$__wmemmove_chk
+ (
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+,
+
+57 
+size_t
+ 
+__n
+, size_�
+__ns1
+�
+__THROW
+;
+
+58 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wmemmove_��s
+, (wch�_�*
+__s1
+,
+
+59 cڡ 
+wch�_t
+ *
+__s2
+,
+
+60 
+size_t
+ 
+__n
+), 
+wmemmove
+);
+
+61 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wmemmove_chk_w�n
+,
+
+62 (
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+,
+
+63 
+size_t
+ 
+__n
+, size_�
+__ns1
+), 
+__wmemmove_chk
+)
+
+64 
+	`__w�ljr
+ ("wmemmove called with�ength bigger�han size of destination "
+
+67 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+68 
+	`__NTH
+ (
+	$wmemmove
+ (
+wch�_t
+ *
+__s1
+, cڡ wch�_�*
+__s2
+, 
+size_t
+ 
+__n
+))
+
+70 i�(
+	`__bos0
+ (
+__s1
+�!�(
+size_t
+) -1)
+
+72 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+))
+
+73  
+	`__wmemmove_chk
+ (
+__s1
+, 
+__s2
+, 
+__n
+,
+
+74 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+));
+
+76 i�(
+__n
+ > 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+))
+
+77  
+	`__wmemmove_chk_w�n
+ (
+__s1
+, 
+__s2
+, 
+__n
+,
+
+78 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+));
+
+80  
+	`__wmemmove_��s
+ (
+__s1
+, 
+__s2
+, 
+__n
+);
+
+81 
+	}
+}
+
+84 #ifde�
+__USE_GNU
+
+
+85 
+wch�_t
+ *
+	$__wmemp�y_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+86 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+, 
+size_t
+ 
+__n
+,
+
+87 
+size_t
+ 
+__ns1
+�
+__THROW
+;
+
+88 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wmemp�y_��s
+,
+
+89 (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+90 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+,
+
+91 
+size_t
+ 
+__n
+), 
+wmemp�y
+);
+
+92 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wmemp�y_chk_w�n
+,
+
+93 (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+,
+
+94 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__s2
+, 
+size_t
+ 
+__n
+,
+
+95 
+size_t
+ 
+__ns1
+), 
+__wmemp�y_chk
+)
+
+96 
+	`__w�ljr
+ ("wmempcpy called with�ength bigger�han size of destination "
+
+99 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+100 
+	`__NTH
+ (
+	$wmemp�y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s1
+, cڡ wch�_�*__��ri� 
+__s2
+,
+
+101 
+size_t
+ 
+__n
+))
+
+103 i�(
+	`__bos0
+ (
+__s1
+�!�(
+size_t
+) -1)
+
+105 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+))
+
+106  
+	`__wmemp�y_chk
+ (
+__s1
+, 
+__s2
+, 
+__n
+,
+
+107 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+));
+
+109 i�(
+__n
+ > 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+))
+
+110  
+	`__wmemp�y_chk_w�n
+ (
+__s1
+, 
+__s2
+, 
+__n
+,
+
+111 
+	`__bos0
+ (
+__s1
+�/  (
+wch�_t
+));
+
+113  
+	`__wmemp�y_��s
+ (
+__s1
+, 
+__s2
+, 
+__n
+);
+
+114 
+	}
+}
+
+118 
+wch�_t
+ *
+	$__wmem�t_chk
+ (
+wch�_t
+ *
+__s
+, wch�_�
+__c
+, 
+size_t
+ 
+__n
+,
+
+119 
+size_t
+ 
+__ns
+�
+__THROW
+;
+
+120 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wmem�t_��s
+, (wch�_�*
+__s
+, wch�_�
+__c
+,
+
+121 
+size_t
+ 
+__n
+), 
+wmem�t
+);
+
+122 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wmem�t_chk_w�n
+,
+
+123 (
+wch�_t
+ *
+__s
+, wch�_�
+__c
+, 
+size_t
+ 
+__n
+,
+
+124 
+size_t
+ 
+__ns
+), 
+__wmem�t_chk
+)
+
+125 
+	`__w�ljr
+ ("wmemset called with�ength bigger�han size of destination "
+
+128 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+129 
+	`__NTH
+ (
+	$wmem�t
+ (
+wch�_t
+ *
+__s
+, wch�_�
+__c
+, 
+size_t
+ 
+__n
+))
+
+131 i�(
+	`__bos0
+ (
+__s
+�!�(
+size_t
+) -1)
+
+133 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+))
+
+134  
+	`__wmem�t_chk
+ (
+__s
+, 
+__c
+, 
+__n
+, 
+	`__bos0
+ (__s�/  (
+wch�_t
+));
+
+136 i�(
+__n
+ > 
+	`__bos0
+ (
+__s
+�/  (
+wch�_t
+))
+
+137  
+	`__wmem�t_chk_w�n
+ (
+__s
+, 
+__c
+, 
+__n
+,
+
+138 
+	`__bos0
+ (
+__s
+�/  (
+wch�_t
+));
+
+140  
+	`__wmem�t_��s
+ (
+__s
+, 
+__c
+, 
+__n
+);
+
+141 
+	}
+}
+
+144 
+wch�_t
+ *
+	$__wcs�y_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+145 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+146 
+size_t
+ 
+__n
+�
+__THROW
+;
+
+147 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wcs�y_��s
+,
+
+148 (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+149 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+), 
+wcs�y
+);
+
+151 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+152 
+	`__NTH
+ (
+	$wcs�y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+, cڡ wch�_�*__��ri� 
+__�c
+))
+
+154 i�(
+	`__bos
+ (
+__de�
+�!�(
+size_t
+) -1)
+
+155  
+	`__wcs�y_chk
+ (
+__de�
+, 
+__�c
+, 
+	`__bos
+ (__de��/  (
+wch�_t
+));
+
+156  
+	`__wcs�y_��s
+ (
+__de�
+, 
+__�c
+);
+
+157 
+	}
+}
+
+160 
+wch�_t
+ *
+	$__w��y_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+161 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+162 
+size_t
+ 
+__de��n
+�
+__THROW
+;
+
+163 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__w��y_��s
+,
+
+164 (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+165 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+), 
+w��y
+);
+
+167 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+168 
+	`__NTH
+ (
+	$w��y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+, cڡ wch�_�*__��ri� 
+__�c
+))
+
+170 i�(
+	`__bos
+ (
+__de�
+�!�(
+size_t
+) -1)
+
+171  
+	`__w��y_chk
+ (
+__de�
+, 
+__�c
+, 
+	`__bos
+ (__de��/  (
+wch�_t
+));
+
+172  
+	`__w��y_��s
+ (
+__de�
+, 
+__�c
+);
+
+173 
+	}
+}
+
+176 
+wch�_t
+ *
+	$__wc��y_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+177 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+,
+
+178 
+size_t
+ 
+__de��n
+�
+__THROW
+;
+
+179 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wc��y_��s
+,
+
+180 (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+181 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+182 
+size_t
+ 
+__n
+), 
+wc��y
+);
+
+183 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wc��y_chk_w�n
+,
+
+184 (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+185 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+186 
+size_t
+ 
+__n
+, size_�
+__de��n
+), 
+__wc��y_chk
+)
+
+187 
+	`__w�ljr
+ ("wcsncpy called with�ength bigger�han size of destination "
+
+190 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+191 
+	`__NTH
+ (
+	$wc��y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+, cڡ wch�_�*__��ri� 
+__�c
+,
+
+192 
+size_t
+ 
+__n
+))
+
+194 i�(
+	`__bos
+ (
+__de�
+�!�(
+size_t
+) -1)
+
+196 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+))
+
+197  
+	`__wc��y_chk
+ (
+__de�
+, 
+__�c
+, 
+__n
+,
+
+198 
+	`__bos
+ (
+__de�
+�/  (
+wch�_t
+));
+
+199 i�(
+__n
+ > 
+	`__bos
+ (
+__de�
+�/  (
+wch�_t
+))
+
+200  
+	`__wc��y_chk_w�n
+ (
+__de�
+, 
+__�c
+, 
+__n
+,
+
+201 
+	`__bos
+ (
+__de�
+�/  (
+wch�_t
+));
+
+203  
+	`__wc��y_��s
+ (
+__de�
+, 
+__�c
+, 
+__n
+);
+
+204 
+	}
+}
+
+207 
+wch�_t
+ *
+	$__w�n�y_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+208 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__n
+,
+
+209 
+size_t
+ 
+__de��n
+�
+__THROW
+;
+
+210 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__w�n�y_��s
+,
+
+211 (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+212 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+213 
+size_t
+ 
+__n
+), 
+w�n�y
+);
+
+214 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__w�n�y_chk_w�n
+,
+
+215 (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+216 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+217 
+size_t
+ 
+__n
+, size_�
+__de��n
+), 
+__w�n�y_chk
+)
+
+218 
+	`__w�ljr
+ ("wcpncpy called with�ength bigger�han size of destination "
+
+221 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+222 
+	`__NTH
+ (
+	$w�n�y
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+, cڡ wch�_�*__��ri� 
+__�c
+,
+
+223 
+size_t
+ 
+__n
+))
+
+225 i�(
+	`__bos
+ (
+__de�
+�!�(
+size_t
+) -1)
+
+227 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+))
+
+228  
+	`__w�n�y_chk
+ (
+__de�
+, 
+__�c
+, 
+__n
+,
+
+229 
+	`__bos
+ (
+__de�
+�/  (
+wch�_t
+));
+
+230 i�(
+__n
+ > 
+	`__bos
+ (
+__de�
+�/  (
+wch�_t
+))
+
+231  
+	`__w�n�y_chk_w�n
+ (
+__de�
+, 
+__�c
+, 
+__n
+,
+
+232 
+	`__bos
+ (
+__de�
+�/  (
+wch�_t
+));
+
+234  
+	`__w�n�y_��s
+ (
+__de�
+, 
+__�c
+, 
+__n
+);
+
+235 
+	}
+}
+
+238 
+wch�_t
+ *
+	$__wcs�t_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+239 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+240 
+size_t
+ 
+__de��n
+�
+__THROW
+;
+
+241 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wcs�t_��s
+,
+
+242 (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+243 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+), 
+wcs�t
+);
+
+245 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+246 
+	`__NTH
+ (
+	$wcs�t
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+, cڡ wch�_�*__��ri� 
+__�c
+))
+
+248 i�(
+	`__bos
+ (
+__de�
+�!�(
+size_t
+) -1)
+
+249  
+	`__wcs�t_chk
+ (
+__de�
+, 
+__�c
+, 
+	`__bos
+ (__de��/  (
+wch�_t
+));
+
+250  
+	`__wcs�t_��s
+ (
+__de�
+, 
+__�c
+);
+
+251 
+	}
+}
+
+254 
+wch�_t
+ *
+	$__wc��t_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+255 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+256 
+size_t
+ 
+__n
+, size_�
+__de��n
+�
+__THROW
+;
+
+257 
+wch�_t
+ *
+	`__REDIRECT_NTH
+ (
+__wc��t_��s
+,
+
+258 (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+,
+
+259 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__�c
+,
+
+260 
+size_t
+ 
+__n
+), 
+wc��t
+);
+
+262 
+__f�tify_fun�i�
+ 
+wch�_t
+ *
+
+263 
+	`__NTH
+ (
+	$wc��t
+ (
+wch�_t
+ *
+__��ri�
+ 
+__de�
+, cڡ wch�_�*__��ri� 
+__�c
+,
+
+264 
+size_t
+ 
+__n
+))
+
+266 i�(
+	`__bos
+ (
+__de�
+�!�(
+size_t
+) -1)
+
+267  
+	`__wc��t_chk
+ (
+__de�
+, 
+__�c
+, 
+__n
+,
+
+268 
+	`__bos
+ (
+__de�
+�/  (
+wch�_t
+));
+
+269  
+	`__wc��t_��s
+ (
+__de�
+, 
+__�c
+, 
+__n
+);
+
+270 
+	}
+}
+
+273 

+	$__sw��tf_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+274 
+__�ag
+, 
+size_t
+ 
+__s_�n
+,
+
+275 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...)
+
+276 
+__THROW
+ ;
+
+278 

+	`__REDIRECT_NTH_LDBL
+ (
+__sw��tf_��s
+,
+
+279 (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+280 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__fmt
+, ...),
+
+281 
+sw��tf
+);
+
+283 #ifde�
+__va_�g_�ck
+
+
+284 
+__f�tify_fun�i�
+ 
+
+285 
+	`__NTH
+ (
+	$sw��tf
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+286 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__fmt
+, ...))
+
+288 i�(
+	`__bos
+ (
+__s
+�!�(
+size_t
+�-1 || 
+__USE_FORTIFY_LEVEL
+ > 1)
+
+289  
+	`__sw��tf_chk
+ (
+__s
+, 
+__n
+, 
+__USE_FORTIFY_LEVEL
+ - 1,
+
+290 
+	`__bos
+ (
+__s
+�/  (
+wch�_t
+),
+
+291 
+__fmt
+, 
+	`__va_�g_�ck
+ ());
+
+292  
+	`__sw��tf_��s
+ (
+__s
+, 
+__n
+, 
+__fmt
+, 
+	`__va_�g_�ck
+ ());
+
+293 
+	}
+}
+
+294 #�i�!
+def�ed
+ 
+__�lu�lus
+
+
+296 
+	#sw��tf
+(
+s
+, 
+n
+, ...) \
+
+297 (
+	`__bos
+ (
+s
+�!�(
+size_t
+�-1 || 
+__USE_FORTIFY_LEVEL
+ > 1 \
+
+298 ? 
+	`__sw��tf_chk
+ (
+s
+, 
+n
+, 
+__USE_FORTIFY_LEVEL
+ - 1, \
+
+299 
+	`__bos
+ (
+s
+�/  (
+wch�_t
+), 
+__VA_ARGS__
+) \
+
+300 : 
+	`sw��tf
+ (
+s
+, 
+n
+, 
+__VA_ARGS__
+))
+
+	)
+
+303 

+	$__vsw��tf_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+304 
+__�ag
+, 
+size_t
+ 
+__s_�n
+,
+
+305 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+306 
+__gnuc_va_li�
+ 
+__�g
+)
+
+307 
+__THROW
+ ;
+
+309 

+	`__REDIRECT_NTH_LDBL
+ (
+__vsw��tf_��s
+,
+
+310 (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+311 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__fmt
+,
+
+312 
+__gnuc_va_li�
+ 
+__�
+), 
+vsw��tf
+);
+
+314 
+__f�tify_fun�i�
+ 
+
+315 
+	`__NTH
+ (
+	$vsw��tf
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__n
+,
+
+316 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__fmt
+, 
+__gnuc_va_li�
+ 
+__�
+))
+
+318 i�(
+	`__bos
+ (
+__s
+�!�(
+size_t
+�-1 || 
+__USE_FORTIFY_LEVEL
+ > 1)
+
+319  
+	`__vsw��tf_chk
+ (
+__s
+, 
+__n
+, 
+__USE_FORTIFY_LEVEL
+ - 1,
+
+320 
+	`__bos
+ (
+__s
+�/  (
+wch�_t
+), 
+__fmt
+, 
+__�
+);
+
+321  
+	`__vsw��tf_��s
+ (
+__s
+, 
+__n
+, 
+__fmt
+, 
+__�
+);
+
+322 
+	}
+}
+
+325 #i�
+__USE_FORTIFY_LEVEL
+ > 1
+
+327 

+__fw��tf_chk
+ (
+__FILE
+ *
+__��ri�
+ 
+__��am
+, 
+__�ag
+,
+
+328 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+, ...);
+
+329 

+__w��tf_chk
+ (
+__�ag
+, cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+331 

+__vfw��tf_chk
+ (
+__FILE
+ *
+__��ri�
+ 
+__��am
+, 
+__�ag
+,
+
+332 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+333 
+__gnuc_va_li�
+ 
+__�
+);
+
+334 

+__vw��tf_chk
+ (
+__�ag
+, cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__f�m�
+,
+
+335 
+__gnuc_va_li�
+ 
+__�
+);
+
+337 #ifde�
+__va_�g_�ck
+
+
+338 
+__f�tify_fun�i�
+ 
+
+339 
+	$w��tf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__fmt
+, ...)
+
+341  
+	`__w��tf_chk
+ (
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+	`__va_�g_�ck
+ ());
+
+342 
+	}
+}
+
+344 
+__f�tify_fun�i�
+ 
+
+345 
+	$fw��tf
+ (
+__FILE
+ *
+__��ri�
+ 
+__��am
+, cڡ 
+wch�_t
+ *__��ri� 
+__fmt
+, ...)
+
+347  
+	`__fw��tf_chk
+ (
+__��am
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+,
+
+348 
+	`__va_�g_�ck
+ ());
+
+349 
+	}
+}
+
+350 #�i�!
+def�ed
+ 
+__�lu�lus
+
+
+351 
+	#w��tf
+(...) \
+
+352 
+	`__w��tf_chk
+ (
+__USE_FORTIFY_LEVEL
+ - 1, 
+__VA_ARGS__
+)
+
+	)
+
+353 
+	#fw��tf
+(
+��am
+, ...) \
+
+354 
+	`__fw��tf_chk
+ (
+��am
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__VA_ARGS__
+)
+
+	)
+
+357 
+__f�tify_fun�i�
+ 
+
+358 
+	$vw��tf
+ (cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__fmt
+, 
+__gnuc_va_li�
+ 
+__�
+)
+
+360  
+	`__vw��tf_chk
+ (
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+__�
+);
+
+361 
+	}
+}
+
+363 
+__f�tify_fun�i�
+ 
+
+364 
+	$vfw��tf
+ (
+__FILE
+ *
+__��ri�
+ 
+__��am
+,
+
+365 cڡ 
+wch�_t
+ *
+__��ri�
+ 
+__fmt
+, 
+__gnuc_va_li�
+ 
+__�
+)
+
+367  
+	`__vfw��tf_chk
+ (
+__��am
+, 
+__USE_FORTIFY_LEVEL
+ - 1, 
+__fmt
+, 
+__�
+);
+
+368 
+	}
+}
+
+372 
+wch�_t
+ *
+	$__fg�ws_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__size
+, 
+__n
+,
+
+373 
+__FILE
+ *
+__��ri�
+ 
+__��am
+�
+__wur
+;
+
+374 
+wch�_t
+ *
+	`__REDIRECT
+ (
+__fg�ws_��s
+,
+
+375 (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+__n
+,
+
+376 
+__FILE
+ *
+__��ri�
+ 
+__��am
+), 
+fg�ws
+�
+__wur
+;
+
+377 
+wch�_t
+ *
+	`__REDIRECT
+ (
+__fg�ws_chk_w�n
+,
+
+378 (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__size
+, 
+__n
+,
+
+379 
+__FILE
+ *
+__��ri�
+ 
+__��am
+), 
+__fg�ws_chk
+)
+
+380 
+__wur
+ 
+	`__w�ljr
+ ("fgetws called with bigger size�han�ength "
+
+383 
+__f�tify_fun�i�
+ 
+__wur
+ 
+wch�_t
+ *
+
+384 
+	$fg�ws
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+__n
+, 
+__FILE
+ *__��ri� 
+__��am
+)
+
+386 i�(
+	`__bos
+ (
+__s
+�!�(
+size_t
+) -1)
+
+388 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+) || __n <= 0)
+
+389  
+	`__fg�ws_chk
+ (
+__s
+, 
+	`__bos
+ (__s�/  (
+wch�_t
+),
+
+390 
+__n
+, 
+__��am
+);
+
+392 i�((
+size_t
+�
+__n
+ > 
+	`__bos
+ (
+__s
+�/  (
+wch�_t
+))
+
+393  
+	`__fg�ws_chk_w�n
+ (
+__s
+, 
+	`__bos
+ (__s�/  (
+wch�_t
+),
+
+394 
+__n
+, 
+__��am
+);
+
+396  
+	`__fg�ws_��s
+ (
+__s
+, 
+__n
+, 
+__��am
+);
+
+397 
+	}
+}
+
+399 #ifde�
+__USE_GNU
+
+
+400 
+wch�_t
+ *
+	$__fg�ws_u�ocked_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__size
+,
+
+401 
+__n
+, 
+__FILE
+ *
+__��ri�
+ 
+__��am
+)
+
+402 
+__wur
+;
+
+403 
+wch�_t
+ *
+	`__REDIRECT
+ (
+__fg�ws_u�ocked_��s
+,
+
+404 (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+__n
+,
+
+405 
+__FILE
+ *
+__��ri�
+ 
+__��am
+), 
+fg�ws_u�ocked
+)
+
+406 
+__wur
+;
+
+407 
+wch�_t
+ *
+	`__REDIRECT
+ (
+__fg�ws_u�ocked_chk_w�n
+,
+
+408 (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+size_t
+ 
+__size
+, 
+__n
+,
+
+409 
+__FILE
+ *
+__��ri�
+ 
+__��am
+),
+
+410 
+__fg�ws_u�ocked_chk
+)
+
+411 
+__wur
+ 
+	`__w�ljr
+ ("fgetws_unlocked called with bigger size�han�ength "
+
+414 
+__f�tify_fun�i�
+ 
+__wur
+ 
+wch�_t
+ *
+
+415 
+	$fg�ws_u�ocked
+ (
+wch�_t
+ *
+__��ri�
+ 
+__s
+, 
+__n
+, 
+__FILE
+ *__��ri� 
+__��am
+)
+
+417 i�(
+	`__bos
+ (
+__s
+�!�(
+size_t
+) -1)
+
+419 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__n
+) || __n <= 0)
+
+420  
+	`__fg�ws_u�ocked_chk
+ (
+__s
+, 
+	`__bos
+ (__s�/  (
+wch�_t
+),
+
+421 
+__n
+, 
+__��am
+);
+
+423 i�((
+size_t
+�
+__n
+ > 
+	`__bos
+ (
+__s
+�/  (
+wch�_t
+))
+
+424  
+	`__fg�ws_u�ocked_chk_w�n
+ (
+__s
+, 
+	`__bos
+ (__s�/  (
+wch�_t
+),
+
+425 
+__n
+, 
+__��am
+);
+
+427  
+	`__fg�ws_u�ocked_��s
+ (
+__s
+, 
+__n
+, 
+__��am
+);
+
+428 
+	}
+}
+
+432 
+size_t
+ 
+	$__w�tomb_chk
+ (*
+__��ri�
+ 
+__s
+, 
+wch�_t
+ 
+__wch�
+,
+
+433 
+mb��e_t
+ *
+__��ri�
+ 
+__p
+,
+
+434 
+size_t
+ 
+__bu�
+�
+__THROW
+ 
+__wur
+;
+
+435 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__w�tomb_��s
+,
+
+436 (*
+__��ri�
+ 
+__s
+, 
+wch�_t
+ 
+__wch�
+,
+
+437 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+), 
+w�tomb
+�
+__wur
+;
+
+439 
+__f�tify_fun�i�
+ 
+__wur
+ 
+size_t
+
+
+440 
+	`__NTH
+ (
+	$w�tomb
+ (*
+__��ri�
+ 
+__s
+, 
+wch�_t
+ 
+__wch�
+,
+
+441 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+))
+
+446 
+	#__WCHAR_MB_LEN_MAX
+ 16
+
+	)
+
+447 #i�
+def�ed
+ 
+MB_LEN_MAX
+ && MB_LEN_MAX !�
+__WCHAR_MB_LEN_MAX
+
+
+450 i�(
+	`__bos
+ (
+__s
+�!�(
+size_t
+�-1 && 
+__WCHAR_MB_LEN_MAX
+ > __bos (__s))
+
+451  
+	`__w�tomb_chk
+ (
+__s
+, 
+__wch�
+, 
+__ps
+, 
+	`__bos
+ (__s));
+
+452  
+	`__w�tomb_��s
+ (
+__s
+, 
+__wch�
+, 
+__ps
+);
+
+453 
+	}
+}
+
+456 
+size_t
+ 
+	$__mb�towcs_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+457 cڡ **
+__��ri�
+ 
+__�c
+,
+
+458 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+,
+
+459 
+size_t
+ 
+__d��n
+�
+__THROW
+;
+
+460 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__mb�towcs_��s
+,
+
+461 (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+462 cڡ **
+__��ri�
+ 
+__�c
+,
+
+463 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+),
+
+464 
+mb�towcs
+);
+
+465 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__mb�towcs_chk_w�n
+,
+
+466 (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+467 cڡ **
+__��ri�
+ 
+__�c
+,
+
+468 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+,
+
+469 
+size_t
+ 
+__d��n
+), 
+__mb�towcs_chk
+)
+
+470 
+	`__w�ljr
+ ("mbsrtowcs called with dst buffer smaller�han�en "
+
+473 
+__f�tify_fun�i�
+ 
+size_t
+
+
+474 
+	`__NTH
+ (
+	$mb�towcs
+ (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+, cڡ **__��ri� 
+__�c
+,
+
+475 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+))
+
+477 i�(
+	`__bos
+ (
+__d�
+�!�(
+size_t
+) -1)
+
+479 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+480  
+	`__mb�towcs_chk
+ (
+__d�
+, 
+__�c
+, 
+__�n
+, 
+__ps
+,
+
+481 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+));
+
+483 i�(
+__�n
+ > 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+))
+
+484  
+	`__mb�towcs_chk_w�n
+ (
+__d�
+, 
+__�c
+, 
+__�n
+, 
+__ps
+,
+
+485 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+));
+
+487  
+	`__mb�towcs_��s
+ (
+__d�
+, 
+__�c
+, 
+__�n
+, 
+__ps
+);
+
+488 
+	}
+}
+
+491 
+size_t
+ 
+	$__wc�tombs_chk
+ (*
+__��ri�
+ 
+__d�
+,
+
+492 cڡ 
+wch�_t
+ **
+__��ri�
+ 
+__�c
+,
+
+493 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+,
+
+494 
+size_t
+ 
+__d��n
+�
+__THROW
+;
+
+495 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__wc�tombs_��s
+,
+
+496 (*
+__��ri�
+ 
+__d�
+,
+
+497 cڡ 
+wch�_t
+ **
+__��ri�
+ 
+__�c
+,
+
+498 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+),
+
+499 
+wc�tombs
+);
+
+500 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__wc�tombs_chk_w�n
+,
+
+501 (*
+__��ri�
+ 
+__d�
+,
+
+502 cڡ 
+wch�_t
+ **
+__��ri�
+ 
+__�c
+,
+
+503 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+,
+
+504 
+size_t
+ 
+__d��n
+), 
+__wc�tombs_chk
+)
+
+505 
+	`__w�ljr
+ ("wcsrtombs called with dst buffer smaller�han�en");
+
+507 
+__f�tify_fun�i�
+ 
+size_t
+
+
+508 
+	`__NTH
+ (
+	$wc�tombs
+ (*
+__��ri�
+ 
+__d�
+, cڡ 
+wch�_t
+ **__��ri� 
+__�c
+,
+
+509 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+))
+
+511 i�(
+	`__bos
+ (
+__d�
+�!�(
+size_t
+) -1)
+
+513 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+514  
+	`__wc�tombs_chk
+ (
+__d�
+, 
+__�c
+, 
+__�n
+, 
+__ps
+, 
+	`__bos
+ (__dst));
+
+516 i�(
+__�n
+ > 
+	`__bos
+ (
+__d�
+))
+
+517  
+	`__wc�tombs_chk_w�n
+ (
+__d�
+, 
+__�c
+, 
+__�n
+, 
+__ps
+, 
+	`__bos
+ (__dst));
+
+519  
+	`__wc�tombs_��s
+ (
+__d�
+, 
+__�c
+, 
+__�n
+, 
+__ps
+);
+
+520 
+	}
+}
+
+523 #ifde�
+__USE_GNU
+
+
+524 
+size_t
+ 
+	$__mb��owcs_chk
+ (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+525 cڡ **
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__nmc
+,
+
+526 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+,
+
+527 
+size_t
+ 
+__d��n
+�
+__THROW
+;
+
+528 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__mb��owcs_��s
+,
+
+529 (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+530 cڡ **
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__nmc
+,
+
+531 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+),
+
+532 
+mb��owcs
+);
+
+533 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__mb��owcs_chk_w�n
+,
+
+534 (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+,
+
+535 cڡ **
+__��ri�
+ 
+__�c
+, 
+size_t
+ 
+__nmc
+,
+
+536 
+size_t
+ 
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+,
+
+537 
+size_t
+ 
+__d��n
+), 
+__mb��owcs_chk
+)
+
+538 
+	`__w�ljr
+ ("mbsnrtowcs called with dst buffer smaller�han�en "
+
+541 
+__f�tify_fun�i�
+ 
+size_t
+
+
+542 
+	`__NTH
+ (
+	$mb��owcs
+ (
+wch�_t
+ *
+__��ri�
+ 
+__d�
+, cڡ **__��ri� 
+__�c
+,
+
+543 
+size_t
+ 
+__nmc
+, size_�
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+))
+
+545 i�(
+	`__bos
+ (
+__d�
+�!�(
+size_t
+) -1)
+
+547 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+548  
+	`__mb��owcs_chk
+ (
+__d�
+, 
+__�c
+, 
+__nmc
+, 
+__�n
+, 
+__ps
+,
+
+549 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+));
+
+551 i�(
+__�n
+ > 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+))
+
+552  
+	`__mb��owcs_chk_w�n
+ (
+__d�
+, 
+__�c
+, 
+__nmc
+, 
+__�n
+, 
+__ps
+,
+
+553 
+	`__bos
+ (
+__d�
+�/  (
+wch�_t
+));
+
+555  
+	`__mb��owcs_��s
+ (
+__d�
+, 
+__�c
+, 
+__nmc
+, 
+__�n
+, 
+__ps
+);
+
+556 
+	}
+}
+
+559 
+size_t
+ 
+	$__wc��ombs_chk
+ (*
+__��ri�
+ 
+__d�
+,
+
+560 cڡ 
+wch�_t
+ **
+__��ri�
+ 
+__�c
+,
+
+561 
+size_t
+ 
+__nwc
+, size_�
+__�n
+,
+
+562 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+, 
+size_t
+ 
+__d��n
+)
+
+563 
+__THROW
+;
+
+564 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__wc��ombs_��s
+,
+
+565 (*
+__��ri�
+ 
+__d�
+,
+
+566 cڡ 
+wch�_t
+ **
+__��ri�
+ 
+__�c
+,
+
+567 
+size_t
+ 
+__nwc
+, size_�
+__�n
+,
+
+568 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+), 
+wc��ombs
+);
+
+569 
+size_t
+ 
+	`__REDIRECT_NTH
+ (
+__wc��ombs_chk_w�n
+,
+
+570 (*
+__��ri�
+ 
+__d�
+,
+
+571 cڡ 
+wch�_t
+ **
+__��ri�
+ 
+__�c
+,
+
+572 
+size_t
+ 
+__nwc
+, size_�
+__�n
+,
+
+573 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+,
+
+574 
+size_t
+ 
+__d��n
+), 
+__wc��ombs_chk
+)
+
+575 
+	`__w�ljr
+ ("wcsnrtombs called with dst buffer smaller�han�en");
+
+577 
+__f�tify_fun�i�
+ 
+size_t
+
+
+578 
+	`__NTH
+ (
+	$wc��ombs
+ (*
+__��ri�
+ 
+__d�
+, cڡ 
+wch�_t
+ **__��ri� 
+__�c
+,
+
+579 
+size_t
+ 
+__nwc
+, size_�
+__�n
+, 
+mb��e_t
+ *
+__��ri�
+ 
+__ps
+))
+
+581 i�(
+	`__bos
+ (
+__d�
+�!�(
+size_t
+) -1)
+
+583 i�(!
+	`__bu�t�_cڡ�t_p
+ (
+__�n
+))
+
+584  
+	`__wc��ombs_chk
+ (
+__d�
+, 
+__�c
+, 
+__nwc
+, 
+__�n
+, 
+__ps
+,
+
+585 
+	`__bos
+ (
+__d�
+));
+
+587 i�(
+__�n
+ > 
+	`__bos
+ (
+__d�
+))
+
+588  
+	`__wc��ombs_chk_w�n
+ (
+__d�
+, 
+__�c
+, 
+__nwc
+, 
+__�n
+, 
+__ps
+,
+
+589 
+	`__bos
+ (
+__d�
+));
+
+591  
+	`__wc��ombs_��s
+ (
+__d�
+, 
+__�c
+, 
+__nwc
+, 
+__�n
+, 
+__ps
+);
+
+592 
+	}
+}
+
+	@/usr/include/gnu/option-groups.h
+
+10 #i�de�
+__GNU_OPTION_GROUPS_H
+
+
+11 
+	#__GNU_OPTION_GROUPS_H
+
+
+	)
+
+13 
+	#__OPTION_EGLIBC_ADVANCED_INET6
+ 1
+
+	)
+
+14 
+	#__OPTION_EGLIBC_BACKTRACE
+ 1
+
+	)
+
+15 
+	#__OPTION_EGLIBC_BIG_MACROS
+ 1
+
+	)
+
+16 
+	#__OPTION_EGLIBC_BSD
+ 1
+
+	)
+
+17 
+	#__OPTION_EGLIBC_CATGETS
+ 1
+
+	)
+
+18 
+	#__OPTION_EGLIBC_CHARSETS
+ 1
+
+	)
+
+19 
+	#__OPTION_EGLIBC_CRYPT
+ 1
+
+	)
+
+20 
+	#__OPTION_EGLIBC_CRYPT_UFC
+ 1
+
+	)
+
+21 
+	#__OPTION_EGLIBC_CXX_TESTS
+ 1
+
+	)
+
+22 
+	#__OPTION_EGLIBC_DB_ALIASES
+ 1
+
+	)
+
+23 
+	#__OPTION_EGLIBC_ENVZ
+ 1
+
+	)
+
+24 
+	#__OPTION_EGLIBC_FCVT
+ 1
+
+	)
+
+25 
+	#__OPTION_EGLIBC_FMTMSG
+ 1
+
+	)
+
+26 
+	#__OPTION_EGLIBC_FSTAB
+ 1
+
+	)
+
+27 
+	#__OPTION_EGLIBC_FTRAVERSE
+ 1
+
+	)
+
+28 
+	#__OPTION_EGLIBC_GETLOGIN
+ 1
+
+	)
+
+29 
+	#__OPTION_EGLIBC_IDN
+ 1
+
+	)
+
+30 
+	#__OPTION_EGLIBC_INET
+ 1
+
+	)
+
+31 
+	#__OPTION_EGLIBC_INET_ANL
+ 1
+
+	)
+
+32 
+	#__OPTION_EGLIBC_LIBM
+ 1
+
+	)
+
+33 
+	#__OPTION_EGLIBC_LOCALES
+ 1
+
+	)
+
+34 
+	#__OPTION_EGLIBC_LOCALE_CODE
+ 1
+
+	)
+
+35 
+	#__OPTION_EGLIBC_MEMUSAGE
+ 1
+
+	)
+
+36 
+	#__OPTION_EGLIBC_NIS
+ 1
+
+	)
+
+37 
+	#__OPTION_EGLIBC_NSSWITCH
+ 1
+
+	)
+
+38 
+	#__OPTION_EGLIBC_RCMD
+ 1
+
+	)
+
+39 
+	#__OPTION_EGLIBC_RTLD_DEBUG
+ 1
+
+	)
+
+40 
+	#__OPTION_EGLIBC_SPAWN
+ 1
+
+	)
+
+41 
+	#__OPTION_EGLIBC_STREAMS
+ 1
+
+	)
+
+42 
+	#__OPTION_EGLIBC_SUNRPC
+ 1
+
+	)
+
+43 
+	#__OPTION_EGLIBC_UTMP
+ 1
+
+	)
+
+44 
+	#__OPTION_EGLIBC_UTMPX
+ 1
+
+	)
+
+45 
+	#__OPTION_EGLIBC_WORDEXP
+ 1
+
+	)
+
+46 
+	#__OPTION_POSIX_C_LANG_WIDE_CHAR
+ 1
+
+	)
+
+47 
+	#__OPTION_POSIX_REGEXP
+ 1
+
+	)
+
+48 
+	#__OPTION_POSIX_REGEXP_GLIBC
+ 1
+
+	)
+
+49 
+	#__OPTION_POSIX_WIDE_CHAR_DEVICE_IO
+ 1
+
+	)
+
+	@/usr/include/linux/ioctl.h
+
+1 #i�de�
+_LINUX_IOCTL_H
+
+
+2 
+	#_LINUX_IOCTL_H
+
+
+	)
+
+4 
+	~<asm/io�l.h
+>
+
+	@/usr/include/wctype.h
+
+23 #i�de�
+_WCTYPE_H
+
+
+25 
+	~<�u�s.h
+>
+
+26 
+	~<b�s/ty�s.h
+>
+
+28 #i�de�
+__�ed_iswxxx
+
+
+29 
+	#_WCTYPE_H
+ 1
+
+	)
+
+32 
+	#__�ed_w�t_t
+
+
+	)
+
+33 
+	~<wch�.h
+>
+
+37 #i�de�
+WEOF
+
+
+38 
+	#WEOF
+ (0xffffffffu)
+
+	)
+
+41 #unde�
+__�ed_iswxxx
+
+
+46 #i�de�
+__iswxxx_def�ed
+
+
+47 
+	#__iswxxx_def�ed
+ 1
+
+	)
+
+49 
+__BEGIN_NAMESPACE_C99
+
+
+52 
+	tw�y�_t
+;
+
+53 
+	g__END_NAMESPACE_C99
+
+
+55 #i�de�
+_ISwb�
+
+
+60 
+	~<�d�n.h
+>
+
+61 #i�
+__BYTE_ORDER
+ =�
+__BIG_ENDIAN
+
+
+62 
+	#_ISwb�
+(
+b�
+�(1 << (b�))
+
+	)
+
+64 
+	#_ISwb�
+(
+b�
+) \
+
+65 ((
+b�
+) < 8 ? () ((1UL << (bit)) << 24) \
+
+66 : ((
+b�
+) < 16 ? () ((1UL << (bit)) << 8) \
+
+67 : ((
+b�
+) < 24 ? () ((1UL << (bit)) >> 8) \
+
+68 : (�((1UL << (
+b�
+)�>> 24))))
+
+	)
+
+73 
+	m__ISwu��
+ = 0,
+
+74 
+	m__ISwlow�
+ = 1,
+
+75 
+	m__ISw�pha
+ = 2,
+
+76 
+	m__ISwdig�
+ = 3,
+
+77 
+	m__ISwxdig�
+ = 4,
+
+78 
+	m__ISw�a�
+ = 5,
+
+79 
+	m__ISw��t
+ = 6,
+
+80 
+	m__ISwg�ph
+ = 7,
+
+81 
+	m__ISwb�nk
+ = 8,
+
+82 
+	m__ISw��l
+ = 9,
+
+83 
+	m__ISwpun�
+ = 10,
+
+84 
+	m__ISw�num
+ = 11,
+
+86 
+	m_ISwu��
+ = 
+_ISwb�
+ (
+__ISwu��
+),
+
+87 
+	m_ISwlow�
+ = 
+_ISwb�
+ (
+__ISwlow�
+),
+
+88 
+	m_ISw�pha
+ = 
+_ISwb�
+ (
+__ISw�pha
+),
+
+89 
+	m_ISwdig�
+ = 
+_ISwb�
+ (
+__ISwdig�
+),
+
+90 
+	m_ISwxdig�
+ = 
+_ISwb�
+ (
+__ISwxdig�
+),
+
+91 
+	m_ISw�a�
+ = 
+_ISwb�
+ (
+__ISw�a�
+),
+
+92 
+	m_ISw��t
+ = 
+_ISwb�
+ (
+__ISw��t
+),
+
+93 
+	m_ISwg�ph
+ = 
+_ISwb�
+ (
+__ISwg�ph
+),
+
+94 
+	m_ISwb�nk
+ = 
+_ISwb�
+ (
+__ISwb�nk
+),
+
+95 
+	m_ISw��l
+ = 
+_ISwb�
+ (
+__ISw��l
+),
+
+96 
+	m_ISwpun�
+ = 
+_ISwb�
+ (
+__ISwpun�
+),
+
+97 
+	m_ISw�num
+ = 
+_ISwb�
+ (
+__ISw�num
+)
+
+102 
+__BEGIN_DECLS
+
+
+104 
+__BEGIN_NAMESPACE_C99
+
+
+111 

+	$isw�num
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+117 

+	$isw�pha
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+120 

+	$isw��l
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+124 

+	$iswdig�
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+128 

+	$iswg�ph
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+133 

+	$iswlow�
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+136 

+	$isw��t
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+141 

+	$iswpun�
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+146 

+	$isw�a�
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+151 

+	$iswu��
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+156 

+	$iswxdig�
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+161 #ifde�
+__USE_ISOC99
+
+
+162 

+	$iswb�nk
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+171 
+w�y�_t
+ 
+	$w�y�
+ (cڡ *
+__�ݔty
+�
+__THROW
+;
+
+175 

+	$isw�y�
+ (
+w�t_t
+ 
+__wc
+, 
+w�y�_t
+ 
+__desc
+�
+__THROW
+;
+
+176 
+__END_NAMESPACE_C99
+
+
+183 
+__BEGIN_NAMESPACE_C99
+
+
+186 cڡ 
+	t__�t32_t
+ *
+	tw��ns_t
+;
+
+187 
+__END_NAMESPACE_C99
+
+
+188 #ifde�
+__USE_GNU
+
+
+189 
+	$__USING_NAMESPACE_C99
+(
+w��ns_t
+)
+
+192 
+__BEGIN_NAMESPACE_C99
+
+
+194 
+w�t_t
+ 
+	$towlow�
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+197 
+w�t_t
+ 
+	$towu��
+ (
+w�t_t
+ 
+__wc
+�
+__THROW
+;
+
+198 
+__END_NAMESPACE_C99
+
+
+200 
+__END_DECLS
+
+
+207 #ifde�
+_WCTYPE_H
+
+
+213 
+__BEGIN_DECLS
+
+
+215 
+__BEGIN_NAMESPACE_C99
+
+
+218 
+w��ns_t
+ 
+	$w��ns
+ (cڡ *
+__�ݔty
+�
+__THROW
+;
+
+221 
+w�t_t
+ 
+	$tow��ns
+ (
+w�t_t
+ 
+__wc
+, 
+w��ns_t
+ 
+__desc
+�
+__THROW
+;
+
+222 
+__END_NAMESPACE_C99
+
+
+224 #ifde�
+__USE_XOPEN2K8
+
+
+226 
+	~<xlo��.h
+>
+
+230 

+	$isw�num_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+236 

+	$isw�pha_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+239 

+	$isw��l_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+243 

+	$iswdig�_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+247 

+	$iswg�ph_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+252 

+	$iswlow�_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+255 

+	$isw��t_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+260 

+	$iswpun�_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+265 

+	$isw�a�_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+270 

+	$iswu��_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+275 

+	$iswxdig�_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+280 

+	$iswb�nk_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+284 
+w�y�_t
+ 
+	$w�y�_l
+ (cڡ *
+__�ݔty
+, 
+__lo��_t
+ 
+__lo��
+)
+
+285 
+__THROW
+;
+
+289 

+	$isw�y�_l
+ (
+w�t_t
+ 
+__wc
+, 
+w�y�_t
+ 
+__desc
+, 
+__lo��_t
+ 
+__lo��
+)
+
+290 
+__THROW
+;
+
+298 
+w�t_t
+ 
+	$towlow�_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+301 
+w�t_t
+ 
+	$towu��_l
+ (
+w�t_t
+ 
+__wc
+, 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+305 
+w��ns_t
+ 
+	$w��ns_l
+ (cڡ *
+__�ݔty
+, 
+__lo��_t
+ 
+__lo��
+)
+
+306 
+__THROW
+;
+
+309 
+w�t_t
+ 
+	$tow��ns_l
+ (
+w�t_t
+ 
+__wc
+, 
+w��ns_t
+ 
+__desc
+,
+
+310 
+__lo��_t
+ 
+__lo��
+�
+__THROW
+;
+
+314 
+__END_DECLS
+
+
+	@/usr/include/asm-generic/errno-base.h
+
+1 #i�de�
+_ASM_GENERIC_ERRNO_BASE_H
+
+
+2 
+	#_ASM_GENERIC_ERRNO_BASE_H
+
+
+	)
+
+4 
+	#EPERM
+ 1
+
+	)
+
+5 
+	#ENOENT
+ 2
+
+	)
+
+6 
+	#ESRCH
+ 3
+
+	)
+
+7 
+	#EINTR
+ 4
+
+	)
+
+8 
+	#EIO
+ 5
+
+	)
+
+9 
+	#ENXIO
+ 6
+
+	)
+
+10 
+	#E2BIG
+ 7
+
+	)
+
+11 
+	#ENOEXEC
+ 8
+
+	)
+
+12 
+	#EBADF
+ 9
+
+	)
+
+13 
+	#ECHILD
+ 10
+
+	)
+
+14 
+	#EAGAIN
+ 11
+
+	)
+
+15 
+	#ENOMEM
+ 12
+
+	)
+
+16 
+	#EACCES
+ 13
+
+	)
+
+17 
+	#EFAULT
+ 14
+
+	)
+
+18 
+	#ENOTBLK
+ 15
+
+	)
+
+19 
+	#EBUSY
+ 16
+
+	)
+
+20 
+	#EEXIST
+ 17
+
+	)
+
+21 
+	#EXDEV
+ 18
+
+	)
+
+22 
+	#ENODEV
+ 19
+
+	)
+
+23 
+	#ENOTDIR
+ 20
+
+	)
+
+24 
+	#EISDIR
+ 21
+
+	)
+
+25 
+	#EINVAL
+ 22
+
+	)
+
+26 
+	#ENFILE
+ 23
+
+	)
+
+27 
+	#EMFILE
+ 24
+
+	)
+
+28 
+	#ENOTTY
+ 25
+
+	)
+
+29 
+	#ETXTBSY
+ 26
+
+	)
+
+30 
+	#EFBIG
+ 27
+
+	)
+
+31 
+	#ENOSPC
+ 28
+
+	)
+
+32 
+	#ESPIPE
+ 29
+
+	)
+
+33 
+	#EROFS
+ 30
+
+	)
+
+34 
+	#EMLINK
+ 31
+
+	)
+
+35 
+	#EPIPE
+ 32
+
+	)
+
+36 
+	#EDOM
+ 33
+
+	)
+
+37 
+	#ERANGE
+ 34
+
+	)
+
+	@
+1
+.
+1
+/usr/include
+188
+4305
+at91_ioctl.h
+cp_array.c
+cp_array.h
+cp_atcmd.c
+cp_atcmd.h
+cp_common.h
+cp_comport.c
+cp_comport.h
+cp_dictionary.c
+cp_dictionary.h
+cp_fds.c
+cp_fds.h
+cp_gprs.c
+cp_gprs.h
+cp_gsmmux.c
+cp_gsmmux.h
+cp_hal.c
+cp_hal.h
+cp_iniparser.c
+cp_iniparser.h
+cp_klist.h
+cp_logger.c
+cp_logger.h
+cp_network.c
+cp_network.h
+cp_ppp.c
+cp_ppp.h
+cp_proc.c
+cp_proc.h
+cp_queue.c
+cp_queue.h
+cp_ringbuf.c
+cp_ringbuf.h
+cp_sock.c
+cp_sock.h
+cp_string.c
+cp_string.h
+cp_time.h
+cp_vector.c
+cp_vector.h
+test/comport.c
+test/swe_tpdud.c
+test/swe_tpdud.h
+test/test_array.c
+test/test_hal.c
+test/test_hh.c
+test/test_ini.c
+test/test_klist.c
+test/test_logger.c
+test/test_queue.c
+test/test_sock_client.c
+test/test_sock_server.c
+test/test_string.c
+test/test_vector.c
+/usr/include/arpa/inet.h
+/usr/include/asm/ioctl.h
+/usr/include/assert.h
+/usr/include/ctype.h
+/usr/include/errno.h
+/usr/include/fcntl.h
+/usr/include/getopt.h
+/usr/include/libgen.h
+/usr/include/linux/rtc.h
+/usr/include/linux/sockios.h
+/usr/include/linux/stddef.h
+/usr/include/net/if.h
+/usr/include/net/if_arp.h
+/usr/include/netdb.h
+/usr/include/netinet/in.h
+/usr/include/netinet/tcp.h
+/usr/include/poll.h
+/usr/include/pthread.h
+/usr/include/signal.h
+/usr/include/stdio.h
+/usr/include/stdlib.h
+/usr/include/string.h
+/usr/include/sys/epoll.h
+/usr/include/sys/ioctl.h
+/usr/include/sys/resource.h
+/usr/include/sys/select.h
+/usr/include/sys/socket.h
+/usr/include/sys/stat.h
+/usr/include/sys/time.h
+/usr/include/sys/types.h
+/usr/include/sys/un.h
+/usr/include/sys/wait.h
+/usr/include/termios.h
+/usr/include/time.h
+/usr/include/unistd.h
+/usr/include/alloca.h
+/usr/include/asm-generic/ioctl.h
+/usr/include/asm/sockios.h
+/usr/include/bits/byteswap.h
+/usr/include/bits/confname.h
+/usr/include/bits/environments.h
+/usr/include/bits/epoll.h
+/usr/include/bits/errno.h
+/usr/include/bits/fcntl.h
+/usr/include/bits/fcntl2.h
+/usr/include/bits/in.h
+/usr/include/bits/ioctl-types.h
+/usr/include/bits/ioctls.h
+/usr/include/bits/netdb.h
+/usr/include/bits/posix_opt.h
+/usr/include/bits/pthreadtypes.h
+/usr/include/bits/resource.h
+/usr/include/bits/select.h
+/usr/include/bits/select2.h
+/usr/include/bits/setjmp.h
+/usr/include/bits/sigaction.h
+/usr/include/bits/sigcontext.h
+/usr/include/bits/siginfo.h
+/usr/include/bits/signum.h
+/usr/include/bits/sigset.h
+/usr/include/bits/sigstack.h
+/usr/include/bits/sigthread.h
+/usr/include/bits/sockaddr.h
+/usr/include/bits/socket.h
+/usr/include/bits/socket2.h
+/usr/include/bits/stat.h
+/usr/include/bits/stdio-ldbl.h
+/usr/include/bits/stdio.h
+/usr/include/bits/stdio2.h
+/usr/include/bits/stdio_lim.h
+/usr/include/bits/stdlib-bsearch.h
+/usr/include/bits/stdlib-float.h
+/usr/include/bits/stdlib-ldbl.h
+/usr/include/bits/stdlib.h
+/usr/include/bits/string.h
+/usr/include/bits/string2.h
+/usr/include/bits/string3.h
+/usr/include/bits/sys_errlist.h
+/usr/include/bits/termios.h
+/usr/include/bits/time.h
+/usr/include/bits/types.h
+/usr/include/bits/unistd.h
+/usr/include/bits/waitflags.h
+/usr/include/bits/waitstatus.h
+/usr/include/bits/wordsize.h
+/usr/include/endian.h
+/usr/include/features.h
+/usr/include/libio.h
+/usr/include/rpc/netdb.h
+/usr/include/sched.h
+/usr/include/stdint.h
+/usr/include/sys/cdefs.h
+/usr/include/sys/poll.h
+/usr/include/sys/sysmacros.h
+/usr/include/sys/ttydefaults.h
+/usr/include/sys/ucontext.h
+/usr/include/sys/uio.h
+/usr/include/xlocale.h
+/usr/include/_G_config.h
+/usr/include/asm-generic/sockios.h
+/usr/include/asm/ioctls.h
+/usr/include/asm/socket.h
+/usr/include/bits/byteswap-16.h
+/usr/include/bits/endian.h
+/usr/include/bits/fcntl-linux.h
+/usr/include/bits/libio-ldbl.h
+/usr/include/bits/poll.h
+/usr/include/bits/poll2.h
+/usr/include/bits/sched.h
+/usr/include/bits/socket_type.h
+/usr/include/bits/stdio-lock.h
+/usr/include/bits/timex.h
+/usr/include/bits/typesizes.h
+/usr/include/bits/uio.h
+/usr/include/bits/wchar.h
+/usr/include/gnu/stubs.h
+/usr/include/linux/errno.h
+/usr/include/stdc-predef.h
+/usr/include/asm-generic/ioctls.h
+/usr/include/asm-generic/socket.h
+/usr/include/asm/errno.h
+/usr/include/bits/libc-lock.h
+/usr/include/gconv.h
+/usr/include/gnu/stubs-32.h
+/usr/include/gnu/stubs-64.h
+/usr/include/gnu/stubs-x32.h
+/usr/include/wchar.h
+/usr/include/asm-generic/errno.h
+/usr/include/bits/wchar-ldbl.h
+/usr/include/bits/wchar2.h
+/usr/include/gnu/option-groups.h
+/usr/include/linux/ioctl.h
+/usr/include/wctype.h
+/usr/include/asm-generic/errno-base.h
diff --git a/program/cp_library/cscope.po.out b/program/cp_library/cscope.po.out
new file mode 100644
index 0000000..8a83f6c
--- /dev/null
+++ b/program/cp_library/cscope.po.out
Binary files differ
diff --git a/program/cp_library/makefile b/program/cp_library/makefile
new file mode 100644
index 0000000..d48804a
--- /dev/null
+++ b/program/cp_library/makefile
@@ -0,0 +1,107 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common subdir Makefile which to compile all the C
+#                  source code to object files and then generate the shared or 
+#                  static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so,
+#                  which depends on the variable $LINK_MODE.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+
+#If wanna compile in the subdir, not called by top makefile, uncomment it
+ifneq (${TOP_COMPILE}, YES) 
+LOCAL_COMPILE=YES
+endif
+
+LINK_MODE=STATIC
+#MULTHREADS=YES
+
+LIBNAME=$(shell basename ${PWD})
+STALIB=lib${LIBNAME}.a
+DYNLIB=lib${LIBNAME}.so
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+#======================================================
+#  ---> Doesn't call by top makefile, compile by local
+#======================================================
+ifeq (${LOCAL_COMPILE}, YES)
+ARCH?=arm920t
+#ARCH?=i386
+CFLAGS+=-fPIC
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+    CROSS_COMPILE=
+else
+    CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux-
+endif
+
+PRJDIR?=$(shell dirname ${PWD})
+CFLAGS+=-I${PRJDIR} -g -Wall -Werror
+CC = ${CROSS_COMPILE}gcc
+AR = ${CROSS_COMPILE}ar
+
+endif #End local compile
+
+ifeq ("${LINK_MODE}", "STATIC")
+	LIBS = ${STALIB} 
+else 
+	LIBS=${DYNLIB} ${STALIB}
+endif
+
+ifeq ("${MULTHREADS}", "YES") 
+LDFLAGS+=-lpthread
+CFLAGS+=-DMULTHREADS
+endif
+
+all: entry clean ${LIBS} install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **     Compile subdir ${LIBNAME} for ${ARCH}             ";
+	@echo " =========================================================";
+
+#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o
+${STALIB}:	$(OBJS) 
+	$(AR) -rcu $@ $(OBJS)
+
+${DYNLIB}:   $(OBJS) 
+	$(CC) -fPIC -shared -o $@ $(OBJS)
+
+%.o : %.c
+	$(CC) -c $< $(CFLAGS)
+
+test: clean ${LIBS}
+	make -C test ARCH=${ARCH}
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	@if [ ! -z "${LIBS_PATH}" ] ; then \
+		mkdir -p ${LIBS_PATH} ; \
+		cp ${LIBS} ${LIBS_PATH}; \
+	fi;
+
+clean:
+	@rm -f *.o *.lo *~
+	@rm -rf *.gdb *.a *.so
+	@make clean -C test
+	@rm -f *.log
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/program/cp_library/tags b/program/cp_library/tags
new file mode 100644
index 0000000..bc2df0f
--- /dev/null
+++ b/program/cp_library/tags
@@ -0,0 +1,1322 @@
+!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
+!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
+!_TAG_PROGRAM_AUTHOR	Darren Hiebert	/dhiebert@users.sourceforge.net/
+!_TAG_PROGRAM_NAME	Exuberant Ctags	//
+!_TAG_PROGRAM_URL	http://ctags.sourceforge.net	/official site/
+!_TAG_PROGRAM_VERSION	5.9~svn20110310	//
+ALL_READY	cp_gprs.h	/^    ALL_READY,$/;"	e	enum:__anon4
+APN_2G	cp_ppp.h	31;"	d
+APN_3G	cp_ppp.h	30;"	d
+APN_ACCOUNT	cp_ppp.h	/^} APN_ACCOUNT;  $/;"	t	typeref:struct:__APN_ACCOUNT
+APN_DEF_CONF_FILE	cp_ppp.h	39;"	d
+APN_LEN	cp_ppp.h	26;"	d
+AR	makefile	/^AR = ${CROSS_COMPILE}ar$/;"	m
+AR	test/makefile	/^export AR=${CROSS_COMPILE}ar$/;"	m
+ARCH	makefile	/^ARCH?=arm920t$/;"	m
+ARCH	test/makefile	/^ARCH?=arm920t$/;"	m
+ARCH_HAS_PREFETCH	cp_klist.h	54;"	d
+AS	test/makefile	/^export AS=${CROSS_COMPILE}as$/;"	m
+ASCIILINESZ	cp_iniparser.c	14;"	d	file:
+ATCMD_REPLY_LEN	cp_atcmd.c	20;"	d	file:
+BINARIES	test/makefile	/^BINARIES=$(SRCFILES:%.c=%)$/;"	m
+BLINK	cp_hal.h	35;"	d
+BUF_64	cp_comport.h	30;"	d
+BUZZER_BEEP	at91_ioctl.h	50;"	d
+BUZZER_FREQ	at91_ioctl.h	52;"	d
+BUZZER_OFF	at91_ioctl.h	51;"	d
+BUZZER_ON	at91_ioctl.h	49;"	d
+CC	makefile	/^CC = ${CROSS_COMPILE}gcc$/;"	m
+CC	test/makefile	/^export CC=${CROSS_COMPILE}gcc$/;"	m
+CHARS_PER_LINE	cp_logger.c	343;"	d	file:
+CHARS_PER_LINE	cp_string.c	397;"	d	file:
+CHECK_HWINFO	cp_gprs.h	/^    CHECK_HWINFO,    \/* Get GPRS hardware Information *\/$/;"	e	enum:__anon4
+CHECK_REGISTRY	cp_gprs.h	/^    CHECK_REGISTRY,  \/* Check GPRS register network information *\/$/;"	e	enum:__anon4
+CHUNK	cp_string.c	317;"	d	file:
+CMUX_DATAPORT	cp_gprs.h	37;"	d
+CMUX_PORT_START_INDEX	cp_gprs.h	36;"	d
+COMPILE_DATE	test/makefile	/^COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M")$/;"	m
+COM_PORT	cp_comport.h	/^} COM_PORT;$/;"	t	typeref:struct:__COM_PORT
+COM_PRINT	cp_comport.h	38;"	d
+COM_PRINT	cp_comport.h	40;"	d
+CONNECTED	cp_ppp.h	/^    CONNECTED,$/;"	e	enum:__anon2
+CONNECTING	cp_ppp.h	/^    CONNECTING,$/;"	e	enum:__anon2
+CP_ARRAY	cp_array.h	/^} CP_ARRAY;$/;"	t	typeref:struct:_CP_ARRAY
+CP_ARRAY_FLAG_MALLOC	cp_array.h	17;"	d
+CP_DEF_FDS_TIMEOUT	cp_fds.h	33;"	d
+CP_DEF_MAX_CLIENTS	cp_network.h	19;"	d
+CP_DEF_MAX_EVENTS	cp_fds.h	32;"	d
+CP_DEF_RCVBUF_SIZE	cp_sock.h	39;"	d
+CP_DEF_SNDBUF_SIZE	cp_sock.h	40;"	d
+CP_DEF_TIMEOUT	cp_network.h	20;"	d
+CP_FDS	cp_fds.h	/^} CP_FDS;$/;"	t	typeref:struct:_CP_FDS
+CP_LOGGER_ARGUMENT	cp_logger.h	62;"	d
+CP_LOGGER_CONSOLE	cp_logger.h	64;"	d
+CP_LOGGER_FILE	cp_logger.h	65;"	d
+CP_LOGGER_LEVEL_OPT	cp_logger.h	67;"	d
+CP_LOGGER_MALLOC	cp_logger.h	61;"	d
+CP_MAX_EVENT_ONCE	cp_fds.h	31;"	d
+CP_PROC_SIG	cp_proc.h	/^}  CP_PROC_SIG;$/;"	t	typeref:struct:__CP_PROC_SIG
+CP_QNODE	cp_queue.h	/^} CP_QNODE;$/;"	t	typeref:struct:_CP_QNODE
+CP_QUEUE	cp_queue.h	/^} CP_QUEUE;$/;"	t	typeref:struct:_CP_QUEUE
+CP_SOCK	cp_sock.h	/^} CP_SOCK;$/;"	t	typeref:struct:_CP_SOCK
+CP_SOCK_CALLBACK	cp_sock.h	/^} CP_SOCK_CALLBACK; $/;"	t	typeref:struct:_CP_SOCK_CALLBACK
+CP_SOCK_DEF_IDLE_TIMEOUT	cp_sock.h	45;"	d
+CP_SOCK_DEF_MSG_TIMEOUT	cp_sock.h	46;"	d
+CP_SOCK_EVENT_CALLBACK	cp_sock.h	/^typedef int (*CP_SOCK_EVENT_CALLBACK)(struct _CP_SOCK *sock);$/;"	t
+CP_SOCK_EVENT_ERROR	cp_sock.h	/^    CP_SOCK_EVENT_ERROR        =          EPOLLERR,  \/* compatilbe with EPOLLERR  *\/$/;"	e	enum:__anon7
+CP_SOCK_EVENT_HUP	cp_sock.h	/^    CP_SOCK_EVENT_HUP          =          EPOLLHUP,  \/* compatilbe with EPOLLHUP *\/$/;"	e	enum:__anon7
+CP_SOCK_EVENT_IDLE_TIMEOUT	cp_sock.h	/^    CP_SOCK_EVENT_IDLE_TIMEOUT =          (1<<16),   \/* compatilbe with EPOLL reserved*\/  $/;"	e	enum:__anon7
+CP_SOCK_EVENT_MSG_TIMEOUT	cp_sock.h	/^    CP_SOCK_EVENT_MSG_TIMEOUT  =          (1<<17),   \/* compatible with EPOLL reserved*\/$/;"	e	enum:__anon7
+CP_SOCK_EVENT_READ	cp_sock.h	/^    CP_SOCK_EVENT_READ         =          EPOLLIN,   \/* compatilbe with EPOLLIN  *\/$/;"	e	enum:__anon7
+CP_SOCK_EVENT_WRITE	cp_sock.h	/^    CP_SOCK_EVENT_WRITE        =          EPOLLOUT,  \/* compatilbe with EPOLLOUT *\/$/;"	e	enum:__anon7
+CP_SOCK_KEEPCNT	cp_sock.h	49;"	d
+CP_SOCK_KEEPINTVL	cp_sock.h	48;"	d
+CP_SOCK_MODE_ACCEPT	cp_sock.h	52;"	d
+CP_SOCK_MODE_CONNECT	cp_sock.h	53;"	d
+CP_SOCK_MODE_LISTEN	cp_sock.h	54;"	d
+CP_SOCK_MODE_NONE	cp_sock.h	51;"	d
+CP_SOCK_RCVBUF	cp_sock.h	42;"	d
+CP_SOCK_SNDBUF	cp_sock.h	43;"	d
+CP_VECTOR	cp_vector.h	/^} CP_VECTOR;$/;"	t	typeref:struct:_CP_VECTOR
+CROSS_COMPILE	makefile	/^    CROSS_COMPILE=$/;"	m
+CROSS_COMPILE	makefile	/^    CROSS_COMPILE=\/opt\/xtools\/arm920t\/bin\/arm-linux-$/;"	m
+CROSS_COMPILE	test/makefile	/^    CROSS_COMPILE=$/;"	m
+CROSS_COMPILE	test/makefile	/^    CROSS_COMPILE=\/opt\/buildroot-2012.08\/$(ARCH)\/usr\/bin\/arm-linux-$/;"	m
+CXX	test/makefile	/^export CXX=${CROSS_COMPILE}g++$/;"	m
+DATE_TIME	cp_time.h	/^} DATE_TIME;$/;"	t	typeref:struct:__DATE_TIME
+DBG_LOG_FILE	cp_logger.h	37;"	d
+DEBUG	test/makefile	/^DEBUG=1$/;"	m
+DEFAULT_LOGFILE	cp_logger.h	36;"	d
+DEFAULT_PING_INTERVAL	cp_ppp.h	25;"	d
+DEFAULT_TIME_FORMAT	cp_logger.h	42;"	d
+DEF_PING_DST	cp_ppp.h	37;"	d
+DEVNAME_LEN	cp_comport.h	33;"	d
+DEV_GMTUBE_PATH	cp_hal.h	31;"	d
+DEV_GPS_PATH	cp_hal.h	29;"	d
+DEV_GSM_PATH	cp_hal.h	28;"	d
+DEV_LED_PATH	cp_hal.h	27;"	d
+DEV_ZIGBEE_PATH	cp_hal.h	30;"	d
+DICTMINSZ	cp_dictionary.c	27;"	d	file:
+DICT_INVALID_KEY	cp_dictionary.c	30;"	d	file:
+DISCONNECT	cp_ppp.h	/^    DISCONNECT = 0,$/;"	e	enum:__anon2
+DOMAIN	test/test_sock_server.c	23;"	d	file:
+DYNLIB	makefile	/^DYNLIB=lib${LIBNAME}.so$/;"	m
+FILENAME_LEN	cp_logger.h	33;"	d
+FLAG_FDS_INIT	cp_fds.h	38;"	d
+FLAG_FDS_MALLOC	cp_fds.h	39;"	d
+FLAG_SOCK_EPOLLED	cp_sock.h	81;"	d
+FLAG_SOCK_INIT	cp_sock.h	79;"	d
+FLAG_SOCK_INQUEUE	cp_sock.h	83;"	d
+FLAG_SOCK_MALLOC	cp_sock.h	80;"	d
+FLAG_SOCK_REGISTRY	cp_sock.h	82;"	d
+FLAG_SOCK_TASKED	cp_sock.h	84;"	d
+FLAG_TPDU_INIT	test/swe_tpdud.h	26;"	d
+FLAG_TPDU_STOP	test/swe_tpdud.h	27;"	d
+GET_ADC_DATA	at91_ioctl.h	44;"	d
+GET_BATTERY_STAT	at91_ioctl.h	41;"	d
+GET_BUTTON_STATUS	at91_ioctl.h	55;"	d
+GET_DRV_VER	at91_ioctl.h	34;"	d
+GET_GMTUBE_VHIGH	at91_ioctl.h	42;"	d
+GET_GPRS_VBAT	at91_ioctl.h	43;"	d
+GM_GET_MEASURE_DOSE	at91_ioctl.h	81;"	d
+GM_GET_VOLTAGE	at91_ioctl.h	84;"	d
+GM_SET_DUTY	at91_ioctl.h	82;"	d
+GM_SET_INTERVAL	at91_ioctl.h	83;"	d
+GM_SET_MEASURE_RADI	at91_ioctl.h	80;"	d
+GM_SET_MEASURE_TC	at91_ioctl.h	88;"	d
+GM_SET_POWER	at91_ioctl.h	86;"	d
+GM_SET_PWM_TC	at91_ioctl.h	87;"	d
+GM_SET_TIMER_TC	at91_ioctl.h	89;"	d
+GPRS_LOCATION	cp_atcmd.h	/^} GPRS_LOCATION;$/;"	t	typeref:struct:_GPRS_LOCATION
+GPS_GET_POWER	at91_ioctl.h	75;"	d
+GPS_SET_POWER	at91_ioctl.h	74;"	d
+GSMIOC_GETCONF	cp_gsmmux.h	36;"	d
+GSMIOC_SETCONF	cp_gsmmux.h	37;"	d
+GSM_CTRLPORT	cp_gprs.h	32;"	d
+GSM_DATAPORT	cp_gprs.h	33;"	d
+GSM_GET_ADC	at91_ioctl.h	72;"	d
+GSM_GET_POWER	at91_ioctl.h	71;"	d
+GSM_SET_POWER	at91_ioctl.h	70;"	d
+HAL_LIBRARY_TEST	test/test_hal.c	18;"	d	file:
+HH_DATAPORT	test/test_hh.c	16;"	d	file:
+HLIST_HEAD	cp_klist.h	587;"	d
+HLIST_HEAD_INIT	cp_klist.h	586;"	d
+HOSTSIM_IP	test/swe_tpdud.h	20;"	d
+HOSTSIM_PORT	test/swe_tpdud.h	19;"	d
+HW_INFO	cp_atcmd.h	/^} HW_INFO;$/;"	t	typeref:struct:_HARDWARE_INFO
+INIT_HLIST_HEAD	cp_klist.h	588;"	d
+INIT_HLIST_NODE	cp_klist.h	/^static inline void INIT_HLIST_NODE(struct hlist_node *h)$/;"	f
+INIT_LIST_HEAD	cp_klist.h	/^static inline void INIT_LIST_HEAD(struct list_head *list)$/;"	f
+INI_CONF	test/test_ini.c	17;"	d	file:
+INI_INVALID_KEY	cp_iniparser.c	15;"	d	file:
+INSTPATH	test/makefile	/^INSTPATH=\/tftp$/;"	m
+IN_EVENT_LIST	cp_fds.h	35;"	d
+IN_TASK_LIST	cp_fds.h	36;"	d
+IPADDR	test/test_sock_server.c	24;"	d	file:
+LED_BLINK	at91_ioctl.h	60;"	d
+LED_OFF	at91_ioctl.h	58;"	d
+LED_ON	at91_ioctl.h	59;"	d
+LED_SYS	cp_hal.h	44;"	d
+LIBNAME	makefile	/^LIBNAME=$(shell basename ${PWD})$/;"	m
+LIBS	makefile	/^	LIBS = ${STALIB} $/;"	m
+LIBS	makefile	/^	LIBS=${DYNLIB} ${STALIB}$/;"	m
+LIB_NAME	test/makefile	/^LIB_NAME=$(shell basename ${LIB_PATH})$/;"	m
+LIB_PATH	test/makefile	/^LIB_PATH=$(shell dirname ${PWD})$/;"	m
+LINELEN	cp_logger.c	342;"	d	file:
+LINELEN	cp_string.c	396;"	d	file:
+LINE_COMMENT	cp_iniparser.c	/^    LINE_COMMENT,$/;"	e	enum:_line_status_	file:
+LINE_EMPTY	cp_iniparser.c	/^    LINE_EMPTY,$/;"	e	enum:_line_status_	file:
+LINE_ERROR	cp_iniparser.c	/^    LINE_ERROR,$/;"	e	enum:_line_status_	file:
+LINE_SECTION	cp_iniparser.c	/^    LINE_SECTION,$/;"	e	enum:_line_status_	file:
+LINE_UNPROCESSED	cp_iniparser.c	/^    LINE_UNPROCESSED,$/;"	e	enum:_line_status_	file:
+LINE_VALUE	cp_iniparser.c	/^    LINE_VALUE$/;"	e	enum:_line_status_	file:
+LINK_MODE	makefile	/^LINK_MODE=STATIC$/;"	m
+LIST_HEAD	cp_klist.h	74;"	d
+LIST_HEAD_INIT	cp_klist.h	72;"	d
+LIST_POISON1	cp_klist.h	50;"	d
+LIST_POISON2	cp_klist.h	51;"	d
+LOCAL_COMPILE	makefile	/^LOCAL_COMPILE=YES$/;"	m
+LOG_FILE_LINE	cp_logger.h	46;"	d
+LOG_LEVEL_DEBUG	cp_logger.h	/^    LOG_LEVEL_DEBUG,                  \/*  Debug Level "Debug" *\/$/;"	e	enum:__anon1
+LOG_LEVEL_DISB	cp_logger.h	/^    LOG_LEVEL_DISB = 0,               \/*  Disable "Debug" *\/$/;"	e	enum:__anon1
+LOG_LEVEL_ERROR	cp_logger.h	/^    LOG_LEVEL_ERROR,                  \/*  Debug Level "ERROR" *\/$/;"	e	enum:__anon1
+LOG_LEVEL_FATAL	cp_logger.h	/^    LOG_LEVEL_FATAL,                  \/*  Debug Level "Fatal" *\/$/;"	e	enum:__anon1
+LOG_LEVEL_INFO	cp_logger.h	/^    LOG_LEVEL_INFO,                   \/*  Debug Level "Information" *\/$/;"	e	enum:__anon1
+LOG_LEVEL_MAX	cp_logger.h	/^    LOG_LEVEL_MAX,$/;"	e	enum:__anon1
+LOG_LEVEL_NRML	cp_logger.h	/^    LOG_LEVEL_NRML,                   \/*  Debug Level "Normal" *\/$/;"	e	enum:__anon1
+LOG_LEVEL_TRACE	cp_logger.h	/^    LOG_LEVEL_TRACE,                  \/*  Debug Level "Trace" *\/$/;"	e	enum:__anon1
+LOG_LEVEL_WARN	cp_logger.h	/^    LOG_LEVEL_WARN,                   \/*  Debug Level "warnning" *\/$/;"	e	enum:__anon1
+LOG_ROLLBACK_NONE	cp_logger.h	40;"	d
+LOG_ROLLBACK_SIZE	cp_logger.h	39;"	d
+LOG_VERSION_STR	cp_logger.h	30;"	d
+MAXVALSZ	cp_dictionary.c	24;"	d	file:
+MAX_DATAPORT	cp_gprs.h	35;"	d
+MAX_ITEMS	test/test_array.c	22;"	d	file:
+MAX_ITEMS	test/test_queue.c	21;"	d	file:
+MAX_LOG_MESSAGE_LEN	cp_logger.h	43;"	d
+MAX_PPP_FAIL_CNT	cp_ppp.h	99;"	d
+MODE	test/makefile	/^MODE=PRODUCTION$/;"	m
+MODE_AUTO	cp_gprs.h	70;"	d
+MODE_FAST	cp_hal.h	39;"	d
+MODE_GSM	cp_gprs.h	71;"	d
+MODE_SLOW	cp_hal.h	38;"	d
+MODE_WCDMA	cp_gprs.h	72;"	d
+MODULE_INFO	cp_gprs.h	/^} MODULE_INFO;$/;"	t	typeref:struct:__MODULE_INFO
+MODULE_READY	cp_gprs.h	/^    MODULE_READY,    \/* GPRS AT command active and SIM card valid *\/$/;"	e	enum:__anon4
+NO	cp_gprs.h	30;"	d
+NOT_READY	cp_gprs.h	/^    NOT_READY,$/;"	e	enum:__anon4
+NS_EGPRS	cp_gprs.h	/^    NS_EGPRS,         \/* EGPRS(EDGE) *\/$/;"	e	enum:__anon6
+NS_GPRS	cp_gprs.h	/^    NS_GPRS,          \/* GPRS *\/$/;"	e	enum:__anon6
+NS_GSM	cp_gprs.h	/^    NS_GSM,           \/* GSM *\/$/;"	e	enum:__anon6
+NS_HSDPA	cp_gprs.h	/^    NS_HSDPA,         \/* HSDPA only *\/$/;"	e	enum:__anon6
+NS_HSPA	cp_gprs.h	/^    NS_HSPA,          \/* HSDPA and HSUPA *\/$/;"	e	enum:__anon6
+NS_HSUPA	cp_gprs.h	/^    NS_HSUPA,         \/* HSUPA only *\/$/;"	e	enum:__anon6
+NS_NONE	cp_gprs.h	/^    NS_NONE = 0,      \/* No service *\/$/;"	e	enum:__anon6
+NS_WCDMA	cp_gprs.h	/^    NS_WCDMA,         \/* WCDMA *\/$/;"	e	enum:__anon6
+NVALS	cp_dictionary.c	359;"	d	file:
+N_GSM0710	cp_gsmmux.h	39;"	d
+OBJS	makefile	/^OBJS = $(patsubst %.c,%.o,$(SRCS))$/;"	m
+OBJS	test/makefile	/^OBJS = $(patsubst %.c,%.o,$(SRCS))$/;"	m
+OFF	cp_hal.h	33;"	d
+ON	cp_hal.h	34;"	d
+PID_ASCII_SIZE	cp_proc.h	19;"	d
+PING_INTERVAL_TIME	cp_ppp.h	23;"	d
+PLATDRV_MAGIC	at91_ioctl.h	26;"	d
+POISON_POINTER_DELTA	cp_klist.h	40;"	d
+POISON_POINTER_DELTA	cp_klist.h	42;"	d
+PPPD_CMD_LEN	cp_ppp.c	242;"	d	file:
+PPPD_DIAL_SCRIPTS	cp_ppp.h	33;"	d
+PPPD_DIAL_TIMEOUT	cp_ppp.h	22;"	d
+PPPD_INFO	cp_ppp.h	/^} PPPD_INFO;$/;"	t	typeref:struct:__PPPD_INFO
+PPP_BAD	cp_ppp.h	104;"	d
+PPP_CONN	cp_ppp.h	103;"	d
+PPP_CTX	cp_ppp.h	/^} PPP_CTX;$/;"	t	typeref:struct:__PPP_CTX
+PPP_GOOD	cp_ppp.h	105;"	d
+PPP_INTERFACE_NAME	cp_ppp.h	34;"	d
+PPP_PROC_NET_DEV	cp_ppp.h	35;"	d
+PPP_STAT	cp_ppp.h	/^} PPP_STAT;$/;"	t	typeref:struct:__PPP_STAT
+PPP_STOP	cp_ppp.h	101;"	d
+PRECISE_TIME_FACTOR	cp_logger.c	17;"	d	file:
+PRIVT_FREE	cp_sock.h	/^typedef void (*PRIVT_FREE)(void);$/;"	t
+PRJDIR	makefile	/^PRJDIR?=$(shell dirname ${PWD})$/;"	m
+PWD	makefile	/^PWD=$(shell pwd)$/;"	m
+PWD	test/makefile	/^PWD=$(shell pwd)$/;"	m
+PWD_LEN	cp_ppp.h	28;"	d
+RANLIB	test/makefile	/^export RANLIB=${CROSS_COMPILE}ranlib$/;"	m
+REGISTER_INFO	cp_atcmd.h	/^} REGISTER_INFO;$/;"	t	typeref:struct:_REGISTER_INFO
+REG_DENIED	cp_gprs.h	/^    REG_DENIED,       \/* registration denied *\/$/;"	e	enum:__anon5
+REG_HOMEWORK	cp_gprs.h	/^    REG_HOMEWORK,     \/* registered, home network *\/$/;"	e	enum:__anon5
+REG_ROAMING	cp_gprs.h	/^    REG_ROAMING,      \/* registered, roaming *\/$/;"	e	enum:__anon5
+REG_SEARCHING	cp_gprs.h	/^    REG_SEARCHING,    \/* not registered, but ME is currently searching a new operator to register to  *\/$/;"	e	enum:__anon5
+REG_UNKNOW	cp_gprs.h	/^    REG_UNKNOW,       \/* unknow *\/$/;"	e	enum:__anon5
+REG_UNREGIST	cp_gprs.h	/^    REG_UNREGIST = 0, \/* not registered, ME is not currently searching a new operator to register to *\/$/;"	e	enum:__anon5
+REQ_EVENT_NONE	cp_gprs.h	/^    REQ_EVENT_NONE = 0,$/;"	e	enum:__anon3
+REQ_POWER_OFF	cp_gprs.h	/^    REQ_POWER_OFF,$/;"	e	enum:__anon3
+REQ_POWER_ON	cp_gprs.h	/^    REQ_POWER_ON,$/;"	e	enum:__anon3
+REQ_POWER_RESET	cp_gprs.h	/^    REQ_POWER_RESET,$/;"	e	enum:__anon3
+RESET	cp_hal.h	36;"	d
+SELECTED_APN	cp_ppp.h	/^    SELECTED_APN,$/;"	e	enum:__anon2
+SERV_ADDR	test/test_sock_client.c	21;"	d	file:
+SERV_PORT	test/test_sock_client.c	23;"	d	file:
+SERV_PORT1	test/test_sock_server.c	20;"	d	file:
+SERV_PORT2	test/test_sock_server.c	21;"	d	file:
+SET_ADC_INTERVEL	at91_ioctl.h	45;"	d
+SET_DRV_DEBUG	at91_ioctl.h	33;"	d
+SIG_WEAK	cp_ppp.h	102;"	d
+SOCK_STAT_ACCEPTED	cp_sock.h	90;"	d
+SOCK_STAT_ALREADY	cp_sock.h	91;"	d
+SOCK_STAT_CONNECTED	cp_sock.h	88;"	d
+SOCK_STAT_CONNECTING	cp_sock.h	87;"	d
+SOCK_STAT_DISCONNECT	cp_sock.h	92;"	d
+SOCK_STAT_INIT	cp_sock.h	86;"	d
+SOCK_STAT_LISTENED	cp_sock.h	89;"	d
+SRCFILES	test/makefile	/^SRCFILES = $(wildcard *.c)$/;"	m
+SRCS	makefile	/^SRCS = $(wildcard ${VPATH}\/*.c)$/;"	m
+SRCS	test/makefile	/^SRCS = $(wildcard ${VPATH}\/*.c)$/;"	m
+STALIB	makefile	/^STALIB=lib${LIBNAME}.a$/;"	m
+START	cp_hal.h	41;"	d
+STOP	cp_hal.h	42;"	d
+STRIP	test/makefile	/^export STRIP=${CROSS_COMPILE}strip$/;"	m
+SWE_TPDU	test/swe_tpdud.h	/^} SWE_TPDU;$/;"	t	typeref:struct:_SWE_TPDU
+THREAD_BODY	cp_proc.h	/^typedef void *(THREAD_BODY) (void *thread_arg);$/;"	t
+TMP	makefile	/^TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")$/;"	m
+TMP	test/makefile	/^TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")$/;"	m
+TPDUD_PORT	test/swe_tpdud.h	22;"	d
+TURN_ALL_LED	at91_ioctl.h	61;"	d
+UID_LEN	cp_ppp.h	27;"	d
+UPLINK_ADDR	test/swe_tpdud.h	23;"	d
+UPLINK_PORT	test/swe_tpdud.h	24;"	d
+VPATH	makefile	/^VPATH= .$/;"	m
+VPATH	test/makefile	/^VPATH= .$/;"	m
+YES	cp_gprs.h	29;"	d
+ZIGBEE_RESET	at91_ioctl.h	64;"	d
+ZIGBEE_STATUS	at91_ioctl.h	65;"	d
+_CP_ARRAY	cp_array.h	/^typedef struct _CP_ARRAY$/;"	s
+_CP_COMPORT_H	cp_comport.h	14;"	d
+_CP_DICTIONARY_H_	cp_dictionary.h	15;"	d
+_CP_FDS	cp_fds.h	/^struct _CP_FDS;$/;"	x
+_CP_FDS	cp_fds.h	/^typedef struct _CP_FDS$/;"	s
+_CP_FDS	cp_sock.h	/^struct _CP_FDS;$/;"	x
+_CP_INIPARSER_H_	cp_iniparser.h	11;"	d
+_CP_QNODE	cp_queue.h	/^typedef  struct _CP_QNODE$/;"	s
+_CP_QUEUE	cp_queue.h	/^typedef struct _CP_QUEUE$/;"	s
+_CP_SOCK	cp_fds.h	/^struct _CP_SOCK;$/;"	x
+_CP_SOCK	cp_sock.h	/^struct _CP_SOCK;$/;"	x
+_CP_SOCK	cp_sock.h	/^typedef struct _CP_SOCK$/;"	s
+_CP_SOCK_CALLBACK	cp_sock.h	/^typedef struct _CP_SOCK_CALLBACK$/;"	s
+_CP_STRING_H	cp_string.h	2;"	d
+_CP_VECTOR	cp_vector.h	/^typedef struct _CP_VECTOR$/;"	s
+_GPRS_LOCATION	cp_atcmd.h	/^typedef struct _GPRS_LOCATION$/;"	s
+_HARDWARE_INFO	cp_atcmd.h	/^typedef struct _HARDWARE_INFO$/;"	s
+_LINUX_LIST_H	cp_klist.h	15;"	d
+_REGISTER_INFO	cp_atcmd.h	/^typedef struct _REGISTER_INFO$/;"	s
+_SWE_TPDU	test/swe_tpdud.h	/^typedef struct _SWE_TPDU$/;"	s
+__APN_ACCOUNT	cp_ppp.h	/^typedef struct __APN_ACCOUNT$/;"	s
+__AT91_IOCTL_H	at91_ioctl.h	15;"	d
+__COM_PORT	cp_comport.h	/^typedef struct __COM_PORT$/;"	s
+__CP_ARRAY_H	cp_array.h	15;"	d
+__CP_ATCMD_H	cp_atcmd.h	15;"	d
+__CP_COMMON_H	cp_common.h	15;"	d
+__CP_FDS_H	cp_fds.h	15;"	d
+__CP_GPRS_H	cp_gprs.h	15;"	d
+__CP_GSMMUX_H_	cp_gsmmux.h	16;"	d
+__CP_HAL_H	cp_hal.h	14;"	d
+__CP_LOG_H	cp_logger.h	15;"	d
+__CP_NETWORK_H	cp_network.h	14;"	d
+__CP_PROC_H	cp_proc.h	15;"	d
+__CP_PROC_SIG	cp_proc.h	/^typedef struct __CP_PROC_SIG$/;"	s
+__CP_QUEUE	cp_queue.h	14;"	d
+__CP_RINGBUF_H_	cp_ringbuf.h	22;"	d
+__CP_SOCK_H	cp_sock.h	14;"	d
+__CP_TIME_H	cp_time.h	14;"	d
+__CP_VECTOR	cp_vector.h	15;"	d
+__DATE_TIME	cp_time.h	/^typedef struct __DATE_TIME$/;"	s
+__MODULE_INFO	cp_gprs.h	/^typedef struct __MODULE_INFO$/;"	s
+__PPPD_INFO	cp_ppp.h	/^typedef struct __PPPD_INFO$/;"	s
+__PPP_CTX	cp_ppp.h	/^typedef struct __PPP_CTX$/;"	s
+__PPP_H	cp_ppp.h	14;"	d
+__PPP_STAT	cp_ppp.h	/^typedef struct __PPP_STAT$/;"	s
+__SWE_TPDUD_H	test/swe_tpdud.h	15;"	d
+__hlist_del	cp_klist.h	/^static inline void __hlist_del(struct hlist_node *n)$/;"	f
+__list_add	cp_klist.h	/^static inline void __list_add(struct list_head *new,$/;"	f
+__list_cut_position	cp_klist.h	/^static inline void __list_cut_position(struct list_head *list,$/;"	f
+__list_del	cp_klist.h	/^static inline void __list_del(struct list_head *prev, struct list_head *next)$/;"	f
+__list_for_each	cp_klist.h	405;"	d
+__list_splice	cp_klist.h	/^static inline void __list_splice(const struct list_head *list,$/;"	f
+_cp_logger	cp_logger.h	/^typedef struct _cp_logger$/;"	s
+_cp_string	cp_string.h	/^typedef struct _cp_string$/;"	s
+_curOffset	cp_logger.c	/^        long _curOffset = ftell(logger->fp);$/;"	l
+_dictionary_	cp_dictionary.h	/^typedef struct _dictionary_ {$/;"	s
+_line_status_	cp_iniparser.c	/^typedef enum _line_status_ {$/;"	g	file:
+_t_free	cp_common.h	/^static inline void _t_free(void *ptr$/;"	f
+_t_malloc	cp_common.h	/^static inline void *_t_malloc(size_t size$/;"	f
+acBuf	cp_atcmd.c	/^    char                    acBuf [256],$/;"	l
+acRecv	cp_atcmd.c	/^    char                 acRecv[1024];$/;"	l
+accept_cnt	cp_sock.h	/^    int                      accept_cnt;  \/* current clients number, only listen socket use it*\/$/;"	m	struct:_CP_SOCK
+accept_list	cp_sock.h	/^    struct list_head         accept_list; \/* all the accept client list head, only listen socket use it *\/$/;"	m	struct:_CP_SOCK	typeref:struct:_CP_SOCK::list_head
+act	cp_logger.c	/^    struct sigaction act;$/;"	l
+actv_time	cp_sock.h	/^    unsigned long            actv_time;     \/* The last time get event(send\/recv) data in this socket *\/$/;"	m	struct:_CP_SOCK
+adaption	cp_gsmmux.h	/^    unsigned int adaption;$/;"	m	struct:gsm_config
+alloc_gsm_dataport	cp_gprs.c	/^COM_PORT *alloc_gsm_dataport(char *who, MODULE_INFO *module)$/;"	f
+ap	cp_string.c	/^    va_list     ap;$/;"	l
+apn	cp_ppp.h	/^    APN_ACCOUNT        apn;          \/* PPP dial up APN *\/$/;"	m	struct:__PPP_CTX
+apn	cp_ppp.h	/^    char            apn[APN_LEN];$/;"	m	struct:__APN_ACCOUNT
+arg	cp_hal.c	/^    int         arg = led|(mode<<3);$/;"	l
+arg	test/swe_tpdud.c	/^        SWE_TPDU    *arg = dlink->serv_sock->privt;$/;"	l
+argp	cp_logger.c	/^    va_list argp;$/;"	l
+args	cp_proc.c	/^    va_list             args;$/;"	l
+array	test/test_array.c	/^    CP_ARRAY *array = NULL;$/;"	l
+at_match	cp_atcmd.c	/^unsigned char at_match (char *p_pcStr, char *p_pcMatch)$/;"	f
+atcmd	cp_atcmd.c	/^    char             atcmd[64]={0}; $/;"	l
+atcmd	cp_atcmd.c	/^    char             atcmd[64]={0};$/;"	l
+atcmd_check_at_ready	cp_atcmd.c	/^int atcmd_check_at_ready(COM_PORT *comport)$/;"	f
+atcmd_check_gprs_carrier	cp_atcmd.c	/^int atcmd_check_gprs_carrier(COM_PORT *comport, char *carrier)$/;"	f
+atcmd_check_gprs_iemi	cp_atcmd.c	/^int atcmd_check_gprs_iemi(COM_PORT *comport, char *iemi)$/;"	f
+atcmd_check_gprs_location	cp_atcmd.c	/^int atcmd_check_gprs_location(COM_PORT *comport, GPRS_LOCATION *loc)$/;"	f
+atcmd_check_gprs_mcc_mnc	cp_atcmd.c	/^int atcmd_check_gprs_mcc_mnc(COM_PORT *comport, char *mcc_mnc)$/;"	f
+atcmd_check_gprs_name	cp_atcmd.c	/^int atcmd_check_gprs_name(COM_PORT *comport, char *name)$/;"	f
+atcmd_check_gprs_network	cp_atcmd.c	/^int atcmd_check_gprs_network(COM_PORT *comport, int *network)$/;"	f
+atcmd_check_gprs_register	cp_atcmd.c	/^int atcmd_check_gprs_register(COM_PORT *comport)$/;"	f
+atcmd_check_gprs_signal	cp_atcmd.c	/^int atcmd_check_gprs_signal(COM_PORT *comport)$/;"	f
+atcmd_check_gprs_version	cp_atcmd.c	/^int atcmd_check_gprs_version(COM_PORT *comport, char *version)$/;"	f
+atcmd_check_hwinfo	cp_gprs.c	/^int atcmd_check_hwinfo(COM_PORT *comport, HW_INFO *hw, int times)$/;"	f
+atcmd_check_module_ready	cp_gprs.c	/^int atcmd_check_module_ready(COM_PORT *comport, int times)$/;"	f
+atcmd_check_network_info	cp_gprs.c	/^int atcmd_check_network_info(COM_PORT *comport, REGISTER_INFO *reg)$/;"	f
+atcmd_check_power_on	cp_gprs.c	/^int atcmd_check_power_on(COM_PORT *comport)$/;"	f
+atcmd_check_ready	cp_gprs.c	/^int atcmd_check_ready(MODULE_INFO *module)$/;"	f
+atcmd_check_regist	cp_gprs.c	/^int atcmd_check_regist(COM_PORT *comport, REGISTER_INFO *reg, int times)$/;"	f
+atcmd_check_sim_valid	cp_atcmd.c	/^int atcmd_check_sim_valid(COM_PORT *comport)$/;"	f
+atcmd_inspect_status	cp_gprs.c	/^int atcmd_inspect_status(MODULE_INFO *module)$/;"	f
+atcmd_module_preset	cp_gprs.c	/^int atcmd_module_preset(COM_PORT *comport)$/;"	f
+atcmd_set_apn	cp_atcmd.c	/^int atcmd_set_apn(COM_PORT *comport, char *apn)$/;"	f
+atcmd_set_network_mode	cp_atcmd.c	/^int atcmd_set_network_mode(COM_PORT *comport, int mode)$/;"	f
+attach_gsm0710	cp_gsmmux.c	/^int attach_gsm0710(COM_PORT *comport)$/;"	f
+auth	cp_ppp.h	/^    char            auth[10];  \/*  PAP or CHAP *\/$/;"	m	struct:__APN_ACCOUNT
+baudrate	cp_comport.h	/^    long baudrate;$/;"	m	struct:__COM_PORT
+baudrate	test/comport.c	/^    int baudrate = 115200;$/;"	l
+buf	cp_logger.c	/^    char buf[MAX_LOG_MESSAGE_LEN];$/;"	l
+buf	cp_network.c	/^    char                 buf[512];$/;"	l
+buf	cp_ppp.c	/^    char                buf[512];$/;"	l
+buf	cp_ppp.c	/^    char          buf[512];$/;"	l
+buf	cp_ppp.c	/^    char       buf[10];$/;"	l
+buf	cp_string.c	/^	char buf[CHUNK];$/;"	l
+buf	test/comport.c	/^    char buf[512];$/;"	l
+buf	test/test_logger.c	/^    char    buf[30]="Hello World!\\n";$/;"	l
+buffer	cp_ringbuf.h	/^	u_char *buffer;$/;"	m	struct:ring_buffer
+c	cp_gsmmux.c	/^    struct gsm_config      c;$/;"	l
+c	cp_iniparser.c	/^    char    *   c ;$/;"	l
+c	cp_logger.c	/^            unsigned char c = buf[idx];$/;"	l
+c	cp_string.c	/^			unsigned char c = data[idx];$/;"	l
+c	cp_string.c	/^			unsigned char c = str->data[idx];$/;"	l
+cSleep	cp_time.h	/^    struct timespec cSleep;$/;"	l
+carrier	cp_atcmd.h	/^    char            carrier[64];\/*  Network operator *\/$/;"	m	struct:_REGISTER_INFO
+cbfunc	cp_sock.h	/^    CP_SOCK_EVENT_CALLBACK   cbfunc;      \/* event callback function *\/$/;"	m	struct:_CP_SOCK
+ch	cp_string.c	/^		char *i, *f, ch;$/;"	l
+check_and_rollback	cp_logger.c	/^static void check_and_rollback(void)$/;"	f	file:
+check_daemon_running	cp_proc.c	/^int check_daemon_running(const char *pid_file)$/;"	f
+check_ppp_interface	cp_ppp.c	/^int check_ppp_interface(char *ppp_dev)$/;"	f
+check_ppp_ipaddr	cp_ppp.c	/^int check_ppp_ipaddr(PPPD_INFO  *pppd_info, char *ppp_dev)$/;"	f
+check_ppp_stat	cp_ppp.c	/^int check_ppp_stat(PPP_STAT  *ppp_stat, char *ppp_dev)$/;"	f
+check_pppd_pid	cp_ppp.c	/^int check_pppd_pid(char *find_key)$/;"	f
+clen	cp_string.c	/^	int clen = strlen(cstr);$/;"	l
+client_func	cp_sock.h	/^    CP_SOCK_EVENT_CALLBACK   client_func; \/* client data callback function, only server socket use it *\/$/;"	m	struct:_CP_SOCK
+client_list	cp_fds.h	/^    struct list_head      client_list;  \/* a list keep all the connect sockets *\/ $/;"	m	struct:_CP_FDS	typeref:struct:_CP_FDS::list_head
+close_gsm_dataport	cp_gprs.c	/^void close_gsm_dataport(MODULE_INFO *module)$/;"	f
+cmd	cp_logger.c	/^            char cmd[512];$/;"	l
+cmd	cp_network.c	/^    char                 cmd[256];$/;"	l
+cmd	cp_ppp.c	/^    char       cmd[128];$/;"	l
+cmd	cp_proc.c	/^    char                cmd[256];$/;"	l
+comport	cp_comport.c	/^    COM_PORT *comport = NULL;$/;"	l
+comport	cp_gprs.c	/^    COM_PORT        *comport;$/;"	l
+comport	cp_gprs.c	/^    COM_PORT       *comport = NULL;$/;"	l
+comport	cp_gprs.h	/^    COM_PORT        *comport[MAX_DATAPORT]; \/* CMUX driver generate CMUX port *\/$/;"	m	struct:__MODULE_INFO
+comport	cp_ppp.h	/^    COM_PORT           *comport;$/;"	m	struct:__PPP_CTX
+comport	test/comport.c	/^    COM_PORT *comport = NULL;$/;"	l
+comport	test/test_hh.c	/^    COM_PORT        *comport = NULL;$/;"	l
+comport_close	cp_comport.c	/^void comport_close(COM_PORT * comport)$/;"	f
+comport_cnt	cp_gprs.h	/^    int             comport_cnt; \/* GPRS data channel count *\/$/;"	m	struct:__MODULE_INFO
+comport_init	cp_comport.c	/^COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings)$/;"	f
+comport_open	cp_comport.c	/^int comport_open(COM_PORT * comport)$/;"	f
+comport_recv	cp_comport.c	/^int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout)$/;"	f
+comport_send	cp_comport.c	/^int comport_send(COM_PORT * comport, char *buf, int send_bytes)$/;"	f
+comport_term	cp_comport.c	/^void comport_term(COM_PORT * comport)$/;"	f
+container_of	cp_common.h	25;"	d
+container_of	cp_klist.h	29;"	d
+cp_add_epoll_event	cp_fds.c	/^int cp_add_epoll_event(CP_SOCK *sock)$/;"	f
+cp_array_add	cp_array.c	/^int cp_array_add(CP_ARRAY *array, void *data)$/;"	f
+cp_array_count	cp_array.h	28;"	d
+cp_array_init	cp_array.c	/^CP_ARRAY *cp_array_init(CP_ARRAY *array, int size)$/;"	f
+cp_array_is_empty	cp_array.h	27;"	d
+cp_array_is_full	cp_array.h	26;"	d
+cp_array_rm_bydata	cp_array.c	/^int cp_array_rm_bydata(CP_ARRAY *array, void *data)$/;"	f
+cp_array_rm_byindex	cp_array.c	/^void cp_array_rm_byindex(CP_ARRAY *array, int index)$/;"	f
+cp_array_size	cp_array.h	29;"	d
+cp_array_term	cp_array.c	/^void cp_array_term(CP_ARRAY *array)$/;"	f
+cp_array_travel	cp_array.c	/^void cp_array_travel(CP_ARRAY *array)$/;"	f
+cp_cstring_dump	cp_string.c	/^void cp_cstring_dump(char *data, int len)$/;"	f
+cp_del_epoll_event	cp_fds.c	/^void cp_del_epoll_event(CP_SOCK *sock)$/;"	f
+cp_dequeue	cp_queue.c	/^void *cp_dequeue(CP_QUEUE *queue)$/;"	f
+cp_enqueue	cp_queue.c	/^void *cp_enqueue(CP_QUEUE *queue, void *data)$/;"	f
+cp_fds_add_sock_registry	cp_fds.c	/^int cp_fds_add_sock_registry(CP_SOCK *sock)$/;"	f
+cp_fds_add_sock_task	cp_fds.c	/^int cp_fds_add_sock_task(CP_SOCK *sock)$/;"	f
+cp_fds_del_sock_registry	cp_fds.c	/^void cp_fds_del_sock_registry(CP_SOCK *sock)$/;"	f
+cp_fds_del_sock_task	cp_fds.c	/^void cp_fds_del_sock_task(CP_SOCK *sock)$/;"	f
+cp_fds_destroy_sock	cp_fds.c	/^void cp_fds_destroy_sock(CP_SOCK *sock)$/;"	f
+cp_fds_destroy_sock_clear	cp_fds.h	99;"	d
+cp_fds_detect_event	cp_fds.c	/^int cp_fds_detect_event(CP_FDS *fds)$/;"	f
+cp_fds_init	cp_fds.c	/^CP_FDS *cp_fds_init(CP_FDS *fds, int maxevents, int timeout)$/;"	f
+cp_fds_list_sock_task	cp_fds.c	/^void cp_fds_list_sock_task(CP_FDS *fds)$/;"	f
+cp_fds_proc_event	cp_fds.c	/^void cp_fds_proc_event(CP_FDS *fds)$/;"	f
+cp_fds_setrlimit	cp_fds.c	/^int cp_fds_setrlimit(int maxfd)$/;"	f
+cp_fds_sock_dequeue	cp_fds.c	/^void *cp_fds_sock_dequeue(CP_FDS *fds)$/;"	f
+cp_fds_sock_enqueue	cp_fds.c	/^void *cp_fds_sock_enqueue(CP_SOCK *sock)$/;"	f
+cp_fds_sock_rmqueue	cp_fds.c	/^void *cp_fds_sock_rmqueue(CP_SOCK *sock)$/;"	f
+cp_fds_term	cp_fds.c	/^void cp_fds_term(CP_FDS *fds)$/;"	f
+cp_fds_term_clear	cp_fds.h	71;"	d
+cp_hexdump_string	cp_string.c	/^const char *cp_hexdump_string(const void *data, size_t len)$/;"	f
+cp_install_proc_signal	cp_proc.c	/^void cp_install_proc_signal(void)$/;"	f
+cp_list_array_for_each	cp_array.c	/^    cp_list_array_for_each(array, i, data)$/;"	f
+cp_list_array_for_each	cp_array.c	/^    cp_list_array_for_each(array, i, entry)$/;"	f
+cp_list_array_for_each	cp_array.h	31;"	d
+cp_list_array_for_each	test/test_array.c	/^    cp_list_array_for_each(array, i, sock)$/;"	f
+cp_log	cp_logger.c	/^void cp_log(int level, char *fmt, ...)$/;"	f
+cp_log_close	cp_logger.c	/^void cp_log_close(void)$/;"	f
+cp_log_default_signal_handler	cp_logger.c	/^static void cp_log_default_signal_handler(int sig)$/;"	f	file:
+cp_log_dump	cp_logger.c	/^void cp_log_dump(int level, char *buf, int len)$/;"	f
+cp_log_init	cp_logger.c	/^cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size)$/;"	f
+cp_log_line	cp_logger.c	/^void cp_log_line(int level, char *file, int line, char *fmt, ...)$/;"	f
+cp_log_open	cp_logger.c	/^int cp_log_open(void)$/;"	f
+cp_log_raw	cp_logger.c	/^void cp_log_raw(const char *fmt, ...)$/;"	f
+cp_log_reopen	cp_logger.c	/^int cp_log_reopen(void)$/;"	f
+cp_log_set_time_format	cp_logger.c	/^void cp_log_set_time_format(char *time_format)$/;"	f
+cp_log_term	cp_logger.c	/^void cp_log_term(void)$/;"	f
+cp_logger	cp_logger.h	/^} cp_logger;$/;"	t	typeref:struct:_cp_logger
+cp_mod_epoll_event	cp_fds.c	/^int cp_mod_epoll_event(CP_SOCK *sock, int event)$/;"	f
+cp_printout	cp_logger.c	/^static void cp_printout(char *level, char *fmt, va_list argp)$/;"	f	file:
+cp_printout_line	cp_logger.c	/^static void cp_printout_line(char *level, char *fmt, char *file, int line, va_list argp)$/;"	f	file:
+cp_proc_sighandler	cp_proc.c	/^void cp_proc_sighandler(int sig)$/;"	f
+cp_queue_count	cp_queue.h	38;"	d
+cp_queue_destroy	cp_queue.c	/^void cp_queue_destroy(CP_QUEUE *queue)$/;"	f
+cp_queue_destroy_clear	cp_queue.h	47;"	d
+cp_queue_init	cp_queue.c	/^CP_QUEUE *cp_queue_init(CP_QUEUE *queue, int size)$/;"	f
+cp_queue_is_empty	cp_queue.h	37;"	d
+cp_queue_is_full	cp_queue.h	36;"	d
+cp_queue_size	cp_queue.h	39;"	d
+cp_rmqueue	cp_queue.c	/^void *cp_rmqueue(CP_QUEUE *queue, void *data)$/;"	f
+cp_sock_accept	cp_sock.c	/^int cp_sock_accept(CP_SOCK *serv_sock, CP_SOCK *new_sock)$/;"	f
+cp_sock_accept_regist	cp_network.c	/^int cp_sock_accept_regist(CP_SOCK *serv_sock)$/;"	f
+cp_sock_close	cp_sock.c	/^int cp_sock_close(CP_SOCK *sock)$/;"	f
+cp_sock_connect	cp_sock.c	/^int cp_sock_connect(CP_SOCK *sock, char *raddr, int rport, int lport)$/;"	f
+cp_sock_connect_regist	cp_network.c	/^CP_SOCK *cp_sock_connect_regist(CP_FDS *fds, CP_SOCK *sock, char *raddr, int rport, int lport, CP_SOCK_EVENT_CALLBACK service_route)$/;"	f
+cp_sock_detect_timeout	cp_fds.c	/^void cp_sock_detect_timeout(CP_FDS *fds)$/;"	f
+cp_sock_init	cp_sock.c	/^CP_SOCK *cp_sock_init(CP_SOCK *sock, unsigned int rsize, unsigned int ssize, int keepintvl, int keepcnt)$/;"	f
+cp_sock_listen	cp_sock.c	/^int cp_sock_listen(CP_SOCK *sock, char *laddr, int lport, int backlog)$/;"	f
+cp_sock_recv	cp_sock.c	/^int cp_sock_recv(CP_SOCK *sock)$/;"	f
+cp_sock_send	cp_sock.c	/^int cp_sock_send(CP_SOCK *sock)$/;"	f
+cp_sock_server_regist	cp_network.c	/^CP_SOCK *cp_sock_server_regist(CP_FDS *fds, char *addr, int port, int max_client, CP_SOCK_EVENT_CALLBACK service_route, void *data)$/;"	f
+cp_sock_set_buffer	cp_sock.c	/^int cp_sock_set_buffer(int sockfd, int rsize, int ssize)$/;"	f
+cp_sock_set_idle_timeout	cp_sock.h	/^static void inline cp_sock_set_idle_timeout(CP_SOCK *sock, unsigned long timeout)$/;"	f
+cp_sock_set_keepalive	cp_sock.c	/^int cp_sock_set_keepalive(int sockfd, int keepintvl, int keepcnt)$/;"	f
+cp_sock_set_msg_timeout	cp_sock.h	/^static void inline cp_sock_set_msg_timeout(CP_SOCK *sock, unsigned long timeout)$/;"	f
+cp_sock_set_nonblock	cp_sock.c	/^int cp_sock_set_nonblock(int sockfd)$/;"	f
+cp_sock_set_private_data	cp_sock.h	/^static void inline cp_sock_set_private_data(CP_SOCK *sock, void *data, PRIVT_FREE free)$/;"	f
+cp_sock_set_reuseaddr	cp_sock.c	/^int cp_sock_set_reuseaddr(int sockfd)$/;"	f
+cp_sock_term	cp_sock.c	/^void cp_sock_term(CP_SOCK *sock)$/;"	f
+cp_sock_term_all_client	cp_fds.c	/^void cp_sock_term_all_client(CP_FDS *fds)$/;"	f
+cp_sock_term_all_server	cp_fds.c	/^void cp_sock_term_all_server(CP_FDS *fds)$/;"	f
+cp_sock_term_all_service	cp_network.c	/^void cp_sock_term_all_service(CP_FDS *fds)$/;"	f
+cp_sock_term_all_service_clear	cp_network.h	34;"	d
+cp_sock_term_all_task	cp_fds.c	/^void cp_sock_term_all_task(CP_FDS *fds)$/;"	f
+cp_sock_term_clear	cp_sock.h	170;"	d
+cp_sock_term_server	cp_fds.c	/^void cp_sock_term_server(CP_SOCK *serv_sock)$/;"	f
+cp_string	cp_string.h	/^} cp_string;$/;"	t	typeref:struct:_cp_string
+cp_string_append_char	cp_string.c	/^cp_string *cp_string_append_char(cp_string *str, char ch)$/;"	f
+cp_string_cat	cp_string.c	/^cp_string *cp_string_cat(cp_string *str, cp_string *appendum)$/;"	f
+cp_string_cat_bin	cp_string.c	/^cp_string *cp_string_cat_bin(cp_string *str, void *bin, int len)$/;"	f
+cp_string_clear_data	cp_string.c	/^void cp_string_clear_data(cp_string *str)$/;"	f
+cp_string_cmp	cp_string.c	/^int cp_string_cmp(cp_string *s1, cp_string *s2)$/;"	f
+cp_string_copy	cp_string.c	/^int cp_string_copy(cp_string *dst, cp_string *src)$/;"	f
+cp_string_create	cp_string.c	/^cp_string *cp_string_create(char *data, int len)$/;"	f
+cp_string_create_empty	cp_string.c	/^cp_string *cp_string_create_empty(int initial_size)$/;"	f
+cp_string_cstrcat	cp_string.c	/^cp_string *cp_string_cstrcat(cp_string *str, char *cstr)$/;"	f
+cp_string_cstrcopy	cp_string.c	/^int cp_string_cstrcopy(cp_string *dst, char *string, int len)$/;"	f
+cp_string_cstrcpy	cp_string.c	/^cp_string *cp_string_cstrcpy(cp_string *str, char *cstr)$/;"	f
+cp_string_cstrdup	cp_string.c	/^cp_string *cp_string_cstrdup(char *src)$/;"	f
+cp_string_data	cp_string.c	/^char *cp_string_data(cp_string *s)$/;"	f
+cp_string_destroy	cp_string.c	/^void cp_string_destroy(cp_string *str)$/;"	f
+cp_string_dump	cp_string.c	/^void cp_string_dump(cp_string *str)$/;"	f
+cp_string_dup	cp_string.c	/^cp_string *cp_string_dup(cp_string *src)$/;"	f
+cp_string_filter	cp_string.c	/^cp_string *cp_string_filter(cp_string *str, char *letters)$/;"	f
+cp_string_flip	cp_string.c	/^void cp_string_flip(cp_string *str)$/;"	f
+cp_string_len	cp_string.c	/^int cp_string_len(cp_string *s)$/;"	f
+cp_string_move	cp_string.c	/^int cp_string_move(cp_string *dst, cp_string *src)$/;"	f
+cp_string_read	cp_string.c	/^cp_string *cp_string_read(int fd, int len)$/;"	f
+cp_string_read_file	cp_string.c	/^cp_string *cp_string_read_file(char *filename)$/;"	f
+cp_string_tocstr	cp_string.c	/^char *cp_string_tocstr(cp_string *str)$/;"	f
+cp_string_write	cp_string.c	/^int cp_string_write(cp_string *str, int fd)$/;"	f
+cp_string_write_file	cp_string.c	/^int cp_string_write_file(cp_string *str, char *filename)$/;"	f
+cp_time_format	cp_logger.c	/^static char *cp_time_format = DEFAULT_TIME_FORMAT;$/;"	v	file:
+cp_travel_queue	cp_queue.c	/^void cp_travel_queue(CP_QUEUE *queue)$/;"	f
+cp_vector_add	cp_vector.c	/^void *cp_vector_add(CP_VECTOR *vector, int index, void *item)$/;"	f
+cp_vector_count	cp_vector.h	29;"	d
+cp_vector_del	cp_vector.c	/^void *cp_vector_del(CP_VECTOR *vector, int index)$/;"	f
+cp_vector_destroy	cp_vector.c	/^void cp_vector_destroy(CP_VECTOR *vector)$/;"	f
+cp_vector_get	cp_vector.c	/^void *cp_vector_get(CP_VECTOR *vector, int index)$/;"	f
+cp_vector_init	cp_vector.c	/^CP_VECTOR *cp_vector_init(int size)$/;"	f
+cp_vector_size	cp_vector.h	30;"	d
+cstr	cp_string.c	/^	char *cstr = NULL;$/;"	l
+ctrl_thread_start	cp_gprs.c	/^void ctrl_thread_start(void *thread_arg)$/;"	f
+ctrl_thread_term	cp_gprs.c	/^void ctrl_thread_term(void *thread_arg)$/;"	f
+current	cp_time.h	/^    unsigned long current = time_now(); $/;"	l
+cval	cp_dictionary.c	/^    char        cval[90] ;$/;"	l
+d	cp_dictionary.c	/^    dictionary  *   d ;$/;"	l
+d	cp_string.c	/^    unsigned char *d = (unsigned char *)data; $/;"	l
+daemonize	cp_proc.c	/^void daemonize(int nochdir, int noclose)$/;"	f
+data	cp_array.c	/^    void             *data;$/;"	l
+data	cp_array.h	/^    void                   **data;$/;"	m	struct:_CP_ARRAY
+data	cp_string.h	/^	char *data;  \/**< internal buffer  *\/$/;"	m	struct:_cp_string
+databit	cp_comport.h	/^    unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;"	m	struct:__COM_PORT
+date	cp_atcmd.h	/^    char            date[15];$/;"	m	struct:_GPRS_LOCATION
+del_char_from_string	cp_string.c	/^char *del_char_from_string(char *str, char delchar)$/;"	f
+delay	cp_atcmd.c	/^    unsigned long        delay = 200;$/;"	l
+delim	cp_string.c	/^    char        delim[2]={*(fmt+2), '\\0'};$/;"	l
+dev	cp_ppp.h	/^    char               dev[10];      \/* PPP dial up device name, such as PPP10  *\/$/;"	m	struct:__PPP_CTX
+dev_name	cp_comport.h	/^    char dev_name[DEVNAME_LEN];$/;"	m	struct:__COM_PORT
+dev_name	test/comport.c	/^    char *dev_name = NULL;$/;"	l
+devname	cp_gprs.c	/^    char                  devname[DEVNAME_LEN];$/;"	l
+dict	cp_iniparser.c	/^    dictionary * dict ;$/;"	l
+dictionary	cp_dictionary.h	/^} dictionary ;$/;"	t	typeref:struct:_dictionary_
+dictionary_del	cp_dictionary.c	/^void dictionary_del(dictionary * d)$/;"	f
+dictionary_dump	cp_dictionary.c	/^void dictionary_dump(dictionary * d, FILE * out)$/;"	f
+dictionary_get	cp_dictionary.c	/^char * dictionary_get(dictionary * d, const char * key, char * def)$/;"	f
+dictionary_hash	cp_dictionary.c	/^unsigned dictionary_hash(const char * key)$/;"	f
+dictionary_new	cp_dictionary.c	/^dictionary * dictionary_new(int size)$/;"	f
+dictionary_set	cp_dictionary.c	/^int dictionary_set(dictionary * d, const char * key, const char * val)$/;"	f
+dictionary_unset	cp_dictionary.c	/^void dictionary_unset(dictionary * d, const char * key)$/;"	f
+disp_mode	test/comport.c	/^    unsigned char disp_mode = 0x00;$/;"	l
+disp_settings	cp_comport.c	/^void disp_settings(COM_PORT * comport)$/;"	f
+dlink	test/swe_tpdud.c	/^    CP_SOCK       *dlink = NULL;$/;"	l
+dlink	test/swe_tpdud.c	/^    CP_SOCK       *dlink;  $/;"	l
+dlink	test/swe_tpdud.h	/^    CP_SOCK             *dlink;    \/* listen port accept socket *\/$/;"	m	struct:_SWE_TPDU
+do_ioctl	test/comport.c	/^int do_ioctl(char *dev_name, int cmd, int arg)$/;"	f
+done	cp_proc.c	/^    int                 done; $/;"	l
+dose	cp_hal.c	/^    int         dose = 0;$/;"	l
+enable	cp_ppp.h	/^    unsigned char      enable;       \/* Enable PPP thread running or not, RFU *\/$/;"	m	struct:__PPP_CTX
+encapsulation	cp_gsmmux.h	/^    unsigned int encapsulation;$/;"	m	struct:gsm_config
+end	cp_comport.c	/^    char *ptr, *end;$/;"	l
+end	cp_string.c	/^    char *end = str;$/;"	l
+entry	cp_array.c	/^    void             *entry;$/;"	l
+epfd	cp_fds.h	/^    int                   epfd;         \/* the epoll_create() returns file description *\/ $/;"	m	struct:_CP_FDS
+error	cp_sock.h	/^    CP_SOCK_EVENT_CALLBACK  error;$/;"	m	struct:_CP_SOCK_CALLBACK
+errs	cp_iniparser.c	/^    int  errs=0;$/;"	l
+event	cp_gprs.h	/^    unsigned char   event;     \/* Request to set GPRS power REQ_POWER_ON, REQ_POWER_OFF or REQ_POWER_RESET *\/$/;"	m	struct:__MODULE_INFO
+event	cp_sock.h	/^    struct epoll_event       event;       \/* epoll_wait returned event *\/$/;"	m	struct:_CP_SOCK	typeref:struct:_CP_SOCK::epoll_event
+event_cnt	cp_fds.h	/^    int                   event_cnt;    \/* current socket regist in epoll *\/$/;"	m	struct:_CP_FDS
+event_queue	cp_fds.h	/^    CP_QUEUE              *event_queue; \/* a queue keep all these sockets get event happened *\/$/;"	m	struct:_CP_FDS
+evts	cp_fds.c	/^    struct epoll_event    evts[CP_MAX_EVENT_ONCE];$/;"	l
+exec_system_cmd	cp_proc.c	/^void exec_system_cmd(const char *format, ...)$/;"	f
+f	cp_proc.c	/^    FILE *f; $/;"	l
+f	cp_string.c	/^		char *i, *f, ch;$/;"	l
+f	cp_string.c	/^	char *f;$/;"	l
+fStatBuf	cp_proc.c	/^    struct stat fStatBuf; $/;"	l
+fStatBuf	cp_proc.c	/^    struct stat fStatBuf;$/;"	l
+fail_cnt	cp_gprs.c	/^    static int    fail_cnt = 0;$/;"	l	file:
+fail_cnt	cp_ppp.h	/^    unsigned char      fail_cnt;     \/* PPP failure count *\/$/;"	m	struct:__PPP_CTX
+fd	cp_comport.h	/^    int fd;$/;"	m	struct:__COM_PORT
+fd	cp_hal.c	/^    int         fd = -1;$/;"	l
+fd	cp_network.c	/^    int                   fd;           $/;"	l
+fd	cp_ppp.c	/^    int                   fd;$/;"	l
+fd	cp_ppp.c	/^    int           fd = -1;$/;"	l
+fd	cp_proc.c	/^    int fd = -1; $/;"	l
+fd	cp_proc.c	/^    int retval, fd; $/;"	l
+fd	cp_sock.c	/^    int                      fd = -1;$/;"	l
+fd	cp_sock.c	/^    int                 fd = -1;$/;"	l
+fd	cp_sock.h	/^    int                      fd;          \/* the socket file description *\/$/;"	m	struct:_CP_SOCK
+fd	cp_time.h	/^    int                 rv, fd = -1;$/;"	l
+fd	test/comport.c	/^    int fd = -1;$/;"	l
+fds	cp_comport.c	/^    fd_set fds;$/;"	l
+fds	cp_fds.c	/^    CP_FDS                  *fds;$/;"	l
+fds	cp_sock.h	/^    struct _CP_FDS           *fds;        \/* epoll fds contex *\/$/;"	m	struct:_CP_SOCK	typeref:struct:_CP_SOCK::_CP_FDS
+fds	test/swe_tpdud.c	/^    CP_FDS         *fds;$/;"	l
+fds	test/test_sock_client.c	/^    CP_FDS     *fds;$/;"	l
+fds	test/test_sock_server.c	/^    CP_FDS     *fds;$/;"	l
+file	cp_logger.h	/^    char               file[FILENAME_LEN];$/;"	m	struct:_cp_logger
+file	test/test_logger.c	/^    char    file[FILENAME_LEN];$/;"	l
+filemode	cp_logger.c	/^    char *filemode;$/;"	l
+first	cp_klist.h	/^	struct hlist_node *first = h->first;$/;"	l
+first	cp_klist.h	/^	struct hlist_node *first;$/;"	m	struct:hlist_head	typeref:struct:hlist_head::hlist_node
+first	cp_klist.h	/^	struct list_head *first = list->next;$/;"	l
+flag	cp_array.h	/^    unsigned char          flag;$/;"	m	struct:_CP_ARRAY
+flag	cp_fds.h	/^    unsigned char         flag;         \/* Refer to follow definition  *\/$/;"	m	struct:_CP_FDS
+flag	cp_logger.h	/^    unsigned char      flag;  \/* This logger pointer is malloc() or passed by argument *\/$/;"	m	struct:_cp_logger
+flag	cp_sock.c	/^    int               flag;$/;"	l
+flag	cp_sock.h	/^    unsigned short           flag;        \/* Refer to the follow definition  *\/$/;"	m	struct:_CP_SOCK
+flag	test/swe_tpdud.h	/^    unsigned char       flag;$/;"	m	struct:_SWE_TPDU
+flowctrl	cp_comport.h	/^    unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;"	m	struct:__COM_PORT
+force	cp_sock.c	/^    int        force = 0;$/;"	l
+found	cp_iniparser.c	/^    int found=0 ;$/;"	l
+foundsec	cp_iniparser.c	/^    int foundsec ;$/;"	l
+fp	cp_logger.h	/^    FILE               *fp;$/;"	m	struct:_cp_logger
+fp	cp_network.c	/^    FILE                 *fp;$/;"	l
+fp	cp_ppp.c	/^    FILE                *fp;$/;"	l
+fp	cp_ppp.c	/^    FILE       *fp = NULL;$/;"	l
+fp	cp_string.c	/^	FILE *fp = fopen(filename, "rb");$/;"	l
+fp	cp_string.c	/^	FILE *fp = fopen(filename, "wb");$/;"	l
+fp	test/test_ini.c	/^    FILE         *fp;$/;"	l
+frag_size	cp_comport.h	/^    int frag_size;$/;"	m	struct:__COM_PORT
+free_gsm_dataport	cp_gprs.c	/^void free_gsm_dataport(char *who, MODULE_INFO *module, COM_PORT  **comport)$/;"	f
+front	cp_queue.h	/^    CP_QNODE           *front;$/;"	m	struct:_CP_QUEUE
+g_cp_signal	cp_proc.c	/^CP_PROC_SIG     g_cp_signal={0};$/;"	v
+g_cp_signal	cp_proc.h	/^extern CP_PROC_SIG     g_cp_signal;$/;"	x
+g_ucCtrlZ	test/comport.c	/^unsigned char g_ucCtrlZ;$/;"	v
+g_ucProcToken	test/comport.c	/^unsigned char g_ucProcToken = 0x01;$/;"	v
+gap	cp_atcmd.c	/^    unsigned long        gap = 300;$/;"	l
+get_apn_conf	cp_ppp.c	/^int get_apn_conf(char *ini_name, char *ini_key, APN_ACCOUNT *apn, unsigned char type)$/;"	f
+get_current_time	cp_time.h	/^static inline void get_current_time(DATE_TIME * date)$/;"	f
+get_daemon_pid	cp_proc.c	/^pid_t get_daemon_pid(const char *pid_file)$/;"	f
+get_rtc_time	cp_time.h	/^static inline int get_rtc_time(DATE_TIME *date)$/;"	f
+get_sys_time	cp_time.h	94;"	d
+gsm_config	cp_gsmmux.h	/^struct gsm_config$/;"	s
+gsmport	cp_gprs.h	/^    COM_PORT        *gsmport;  \/* The GSM hardware UART port  *\/$/;"	m	struct:__MODULE_INFO
+hal_get_gmtube_dose	cp_hal.c	/^int hal_get_gmtube_dose(void)$/;"	f
+hal_get_gprs_power	cp_hal.c	/^int hal_get_gprs_power(void)$/;"	f
+hal_get_gps_power	cp_hal.c	/^int hal_get_gps_power(void)$/;"	f
+hal_get_zigbee_status	cp_hal.c	/^int hal_get_zigbee_status(void)$/;"	f
+hal_reset_zigbee	cp_hal.c	/^int hal_reset_zigbee(void)$/;"	f
+hal_set_gmtube	cp_hal.c	/^int hal_set_gmtube(status)$/;"	f
+hal_turn_gprs_power	cp_hal.c	/^int hal_turn_gprs_power(int status)$/;"	f
+hal_turn_gps_power	cp_hal.c	/^int hal_turn_gps_power(int status)$/;"	f
+hal_turn_led_blink	cp_hal.c	/^int hal_turn_led_blink(int led, int mode)$/;"	f
+hal_turn_led_off	cp_hal.c	/^int hal_turn_led_off(int led)$/;"	f
+hal_turn_led_on	cp_hal.c	/^int hal_turn_led_on(int  led)$/;"	f
+hash	cp_dictionary.c	/^    unsigned    hash ;$/;"	l
+hash	cp_dictionary.h	/^    unsigned     *  hash ;  \/** List of hash values for keys *\/$/;"	m	struct:_dictionary_
+hc	cp_logger.c	/^    char hc[4];$/;"	l
+hc	cp_string.c	/^	char hc[4];$/;"	l
+hints	cp_sock.c	/^    struct addrinfo     hints, *rp;$/;"	l
+hlist_add_after	cp_klist.h	/^static inline void hlist_add_after(struct hlist_node *n,$/;"	f
+hlist_add_before	cp_klist.h	/^static inline void hlist_add_before(struct hlist_node *n,$/;"	f
+hlist_add_head	cp_klist.h	/^static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)$/;"	f
+hlist_del	cp_klist.h	/^static inline void hlist_del(struct hlist_node *n)$/;"	f
+hlist_del_init	cp_klist.h	/^static inline void hlist_del_init(struct hlist_node *n)$/;"	f
+hlist_empty	cp_klist.h	/^static inline int hlist_empty(const struct hlist_head *h)$/;"	f
+hlist_entry	cp_klist.h	660;"	d
+hlist_for_each	cp_klist.h	662;"	d
+hlist_for_each_entry	cp_klist.h	677;"	d
+hlist_for_each_entry_continue	cp_klist.h	689;"	d
+hlist_for_each_entry_from	cp_klist.h	701;"	d
+hlist_for_each_entry_safe	cp_klist.h	714;"	d
+hlist_for_each_safe	cp_klist.h	666;"	d
+hlist_head	cp_klist.h	/^struct hlist_head {$/;"	s
+hlist_node	cp_klist.h	/^struct hlist_node {$/;"	s
+hlist_unhashed	cp_klist.h	/^static inline int hlist_unhashed(const struct hlist_node *h)$/;"	f
+hw	cp_gprs.h	/^    HW_INFO         hw;        \/* GPRS Hardware information *\/$/;"	m	struct:__MODULE_INFO
+i	cp_array.c	/^    int              i, rv = -3;$/;"	l
+i	cp_array.c	/^    int              i;$/;"	l
+i	cp_array.c	/^    int        i;$/;"	l
+i	cp_atcmd.c	/^        int i = 0;$/;"	l
+i	cp_atcmd.c	/^    int         i = 0;$/;"	l
+i	cp_dictionary.c	/^    int         i ;$/;"	l
+i	cp_dictionary.c	/^    int     i ;$/;"	l
+i	cp_fds.c	/^    int                    i;$/;"	l
+i	cp_fds.c	/^    int                   i=0, nfds=0;$/;"	l
+i	cp_fds.c	/^    int               i;$/;"	l
+i	cp_gprs.c	/^    int                   i=0;$/;"	l
+i	cp_gprs.c	/^    int                i=0;$/;"	l
+i	cp_gprs.c	/^    int            i;$/;"	l
+i	cp_gprs.c	/^    int           i, rv = 0;$/;"	l
+i	cp_gprs.c	/^    int  i;$/;"	l
+i	cp_gprs.c	/^    int i, retval = -1;$/;"	l
+i	cp_gsmmux.h	/^    unsigned int i;$/;"	m	struct:gsm_config
+i	cp_iniparser.c	/^    int     i ;$/;"	l
+i	cp_iniparser.c	/^    int i ;$/;"	l
+i	cp_iniparser.c	/^    int i, j ;$/;"	l
+i	cp_proc.c	/^    int i; $/;"	l
+i	cp_ringbuf.c	/^    int i;$/;"	l
+i	cp_string.c	/^		char *i, *f, ch;$/;"	l
+i	cp_string.c	/^	char *i;$/;"	l
+i	cp_string.c	/^    unsigned int i, left;$/;"	l
+i	test/comport.c	/^    int i;$/;"	l
+i	test/test_array.c	/^    int i;$/;"	l
+i	test/test_hh.c	/^    int             i;$/;"	l
+i	test/test_klist.c	/^    int                 i;$/;"	l
+i	test/test_queue.c	/^    int i;$/;"	l
+i	test/test_string.c	/^    int            i;$/;"	l
+i	test/test_vector.c	/^    int i, n;$/;"	l
+iCmdLen	cp_atcmd.c	/^    int                  iCmdLen = 0,$/;"	l
+iDay	cp_time.h	/^    int iDay;$/;"	m	struct:__DATE_TIME
+iDayOfWeek	cp_time.h	/^    int iDayOfWeek;$/;"	m	struct:__DATE_TIME
+iHour	cp_time.h	/^    int iHour;$/;"	m	struct:__DATE_TIME
+iMinute	cp_time.h	/^    int iMinute;$/;"	m	struct:__DATE_TIME
+iMonth	cp_time.h	/^    int iMonth;$/;"	m	struct:__DATE_TIME
+iPtr	cp_string.c	/^    int         *iPtr;$/;"	l
+iRecvLen	cp_atcmd.c	/^                         iRecvLen = 0,$/;"	l
+iRecvSize	cp_atcmd.c	/^                         iRecvSize = 0,$/;"	l
+iRet	cp_comport.c	/^    int iRet;$/;"	l
+iSecond	cp_time.h	/^    int iSecond;$/;"	m	struct:__DATE_TIME
+iSize	cp_atcmd.c	/^                         iSize = 0;$/;"	l
+iYear	cp_time.h	/^    int iYear;$/;"	m	struct:__DATE_TIME
+idle_timeout	cp_sock.h	/^    unsigned long            idle_timeout;  \/* this is set to the socket idle timeout value, when timeout will disconnect *\/$/;"	m	struct:_CP_SOCK
+idx	cp_logger.c	/^    int idx;$/;"	l
+idx	cp_string.c	/^	int idx;$/;"	l
+idx	cp_string.c	/^    char *idx = str;$/;"	l
+iemi	cp_atcmd.h	/^    char            iemi[64];   \/*  AT+CGSN check GPRS module IEMI(International Mobile station Equipment Identity) number *\/$/;"	m	struct:_HARDWARE_INFO
+ifr	cp_network.c	/^    struct ifreq          ifr;          $/;"	l
+ifr	cp_ppp.c	/^    struct ifreq          ifr;$/;"	l
+in	cp_iniparser.c	/^    FILE * in ;$/;"	l
+inaddr	cp_sock.c	/^    struct in_addr      inaddr;$/;"	l
+index	cp_sock.h	/^    int                      index;       \/* The index member position in the task array *\/$/;"	m	struct:_CP_SOCK
+ini	cp_ppp.c	/^    dictionary       *ini ;$/;"	l
+ini	test/test_ini.c	/^    dictionary   *ini;$/;"	l
+iniparser_dump	cp_iniparser.c	/^void iniparser_dump(dictionary * d, FILE * f)$/;"	f
+iniparser_dump_ini	cp_iniparser.c	/^void iniparser_dump_ini(dictionary * d, FILE * f)$/;"	f
+iniparser_dumpsection_ini	cp_iniparser.c	/^void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f)$/;"	f
+iniparser_find_entry	cp_iniparser.c	/^int iniparser_find_entry($/;"	f
+iniparser_freedict	cp_iniparser.c	/^void iniparser_freedict(dictionary * d)$/;"	f
+iniparser_getboolean	cp_iniparser.c	/^int iniparser_getboolean(dictionary * d, const char * key, int notfound)$/;"	f
+iniparser_getdouble	cp_iniparser.c	/^double iniparser_getdouble(dictionary * d, const char * key, double notfound)$/;"	f
+iniparser_getint	cp_iniparser.c	/^int iniparser_getint(dictionary * d, const char * key, int notfound)$/;"	f
+iniparser_getlong	cp_iniparser.c	/^int iniparser_getlong(dictionary * d, const char * key, int notfound)$/;"	f
+iniparser_getnsec	cp_iniparser.c	/^int iniparser_getnsec(dictionary * d)$/;"	f
+iniparser_getseckeys	cp_iniparser.c	/^char ** iniparser_getseckeys(dictionary * d, char * s)$/;"	f
+iniparser_getsecname	cp_iniparser.c	/^char * iniparser_getsecname(dictionary * d, int n)$/;"	f
+iniparser_getsecnkeys	cp_iniparser.c	/^int iniparser_getsecnkeys(dictionary * d, char * s)$/;"	f
+iniparser_getstring	cp_iniparser.c	/^char * iniparser_getstring(dictionary * d, const char * key, char * def)$/;"	f
+iniparser_line	cp_iniparser.c	/^static line_status iniparser_line($/;"	f	file:
+iniparser_load	cp_iniparser.c	/^dictionary * iniparser_load(const char * ininame)$/;"	f
+iniparser_set	cp_iniparser.c	/^int iniparser_set(dictionary * ini, const char * entry, const char * val)$/;"	f
+iniparser_unset	cp_iniparser.c	/^void iniparser_unset(dictionary * ini, const char * entry)$/;"	f
+init_gsm_module	cp_gprs.c	/^int init_gsm_module(MODULE_INFO *module)$/;"	f
+initiator	cp_gsmmux.h	/^    unsigned int initiator;$/;"	m	struct:gsm_config
+inspect_network_status	cp_ppp.c	/^int inspect_network_status(PPP_CTX *ppp_ctx)$/;"	f
+ipc_dir	cp_proc.c	/^    char ipc_dir[64] = { 0 }; $/;"	l
+is_connted	cp_comport.h	/^    unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;"	m	struct:__COM_PORT
+item	cp_queue.c	/^    void           *item;$/;"	l
+item	cp_queue.h	/^    void               *item;$/;"	m	struct:_CP_QNODE
+items	cp_array.h	/^    int                    items;$/;"	m	struct:_CP_ARRAY
+items	cp_queue.h	/^    int                items;$/;"	m	struct:_CP_QUEUE
+j	cp_iniparser.c	/^    int     j ;$/;"	l
+j	cp_iniparser.c	/^    int i, j ;$/;"	l
+j	cp_iniparser.c	/^    int j ;$/;"	l
+k	cp_gsmmux.h	/^    unsigned int k;$/;"	m	struct:gsm_config
+kbhit	cp_comport.c	/^int kbhit()$/;"	f
+keepcnt	cp_sock.h	/^    int                      keepcnt;     \/* heartbeat(keepalive) count *\/$/;"	m	struct:_CP_SOCK
+keepintvl	cp_sock.h	/^    int                      keepintvl;   \/* heartbeat(keepalive) detect interval *\/$/;"	m	struct:_CP_SOCK
+key	cp_dictionary.h	/^    char        **  key ;   \/** List of string keys *\/$/;"	m	struct:_dictionary_
+key	cp_iniparser.c	/^    char key     [ASCIILINESZ+1] ;$/;"	l
+keym	cp_iniparser.c	/^    char    keym[ASCIILINESZ+1];$/;"	l
+keys	cp_iniparser.c	/^    char **keys;$/;"	l
+kill_pppd_process	cp_ppp.c	/^int kill_pppd_process(COM_PORT *comport)$/;"	f
+l	cp_iniparser.c	/^    static char l[ASCIILINESZ+1];$/;"	l	file:
+lPtr	cp_string.c	/^    long        *lPtr;$/;"	l
+laddr	cp_sock.h	/^    char                     laddr[16];   \/* local IP address*\/$/;"	m	struct:_CP_SOCK
+last	cp_iniparser.c	/^    char * last ;$/;"	l
+last	cp_iniparser.c	/^    int  last=0 ;$/;"	l
+last	cp_klist.h	/^	struct list_head *last = list->prev;$/;"	l
+last_rx_bytes	cp_ppp.c	/^    unsigned long long     last_rx_bytes= ppp_stat->ullRx_Bytes;$/;"	l
+last_tx_bytes	cp_ppp.c	/^    unsigned long long     last_tx_bytes= ppp_stat->ullTx_Bytes;$/;"	l
+latitude	cp_atcmd.h	/^    char            latitude[15];$/;"	m	struct:_GPRS_LOCATION
+lc_key	cp_iniparser.c	/^    char * lc_key ;$/;"	l
+ldisc	cp_gsmmux.c	/^    int                    ldisc = N_GSM0710;$/;"	l
+ldx	cp_logger.c	/^        int ldx = idx % CHARS_PER_LINE;$/;"	l
+left	cp_sock.c	/^    int               rv, left;$/;"	l
+left	cp_string.c	/^    int        left;$/;"	l
+left	cp_string.c	/^    unsigned int i, left;$/;"	l
+left_line	cp_iniparser.c	/^    static char left_line[ASCIILINESZ+1];$/;"	l	file:
+len	cp_dictionary.c	/^    int         len ;$/;"	l
+len	cp_iniparser.c	/^    int         len, offset ;$/;"	l
+len	cp_iniparser.c	/^    int  len ;$/;"	l
+len	cp_sock.c	/^    int                 len = sizeof(saddr); $/;"	l
+len	cp_sock.c	/^    int len = sizeof (int);$/;"	l
+len	cp_sock.c	/^    socklen_t                len = sizeof(saddr);$/;"	l
+len	cp_string.c	/^	int len = str->len;$/;"	l
+len	cp_string.h	/^	int len;     \/**< size used        *\/$/;"	m	struct:_cp_string
+level	cp_logger.h	/^    int                level;$/;"	m	struct:_cp_logger
+line	cp_iniparser.c	/^    char        line[ASCIILINESZ+1];$/;"	l
+line	cp_iniparser.c	/^    char line    [ASCIILINESZ+1] ;$/;"	l
+line_done	cp_logger.c	/^    short line_done = 1;$/;"	l
+line_done	cp_string.c	/^	short line_done = 1;$/;"	l
+line_status	cp_iniparser.c	/^} line_status ;$/;"	t	typeref:enum:_line_status_	file:
+lineno	cp_iniparser.c	/^    int  lineno=0 ;$/;"	l
+list_add	cp_klist.h	/^static inline void list_add(struct list_head *new, struct list_head *head)$/;"	f
+list_add_tail	cp_klist.h	/^static inline void list_add_tail(struct list_head *new, struct list_head *head)$/;"	f
+list_cut_position	cp_klist.h	/^static inline void list_cut_position(struct list_head *list,$/;"	f
+list_del	cp_klist.h	/^static inline void list_del(struct list_head *entry)$/;"	f
+list_del_init	cp_klist.h	/^static inline void list_del_init(struct list_head *entry)$/;"	f
+list_empty	cp_klist.h	/^static inline int list_empty(const struct list_head *head)$/;"	f
+list_empty_careful	cp_klist.h	/^static inline int list_empty_careful(const struct list_head *head)$/;"	f
+list_entry	cp_klist.h	372;"	d
+list_first_entry	cp_klist.h	383;"	d
+list_for_each	cp_klist.h	391;"	d
+list_for_each_entry	cp_klist.h	444;"	d
+list_for_each_entry_continue	cp_klist.h	480;"	d
+list_for_each_entry_continue_reverse	cp_klist.h	494;"	d
+list_for_each_entry_from	cp_klist.h	507;"	d
+list_for_each_entry_reverse	cp_klist.h	455;"	d
+list_for_each_entry_safe	cp_klist.h	518;"	d
+list_for_each_entry_safe	test/test_klist.c	/^    list_for_each_entry_safe(sock, tsock, head, rlist)$/;"	f
+list_for_each_entry_safe_continue	cp_klist.h	534;"	d
+list_for_each_entry_safe_from	cp_klist.h	550;"	d
+list_for_each_entry_safe_reverse	cp_klist.h	565;"	d
+list_for_each_prev	cp_klist.h	413;"	d
+list_for_each_prev_safe	cp_klist.h	433;"	d
+list_for_each_safe	cp_klist.h	423;"	d
+list_head	cp_klist.h	/^struct list_head {$/;"	s
+list_is_last	cp_klist.h	/^static inline int list_is_last(const struct list_head *list,$/;"	f
+list_is_singular	cp_klist.h	/^static inline int list_is_singular(const struct list_head *head)$/;"	f
+list_move	cp_klist.h	/^static inline void list_move(struct list_head *list, struct list_head *head)$/;"	f
+list_move_tail	cp_klist.h	/^static inline void list_move_tail(struct list_head *list,$/;"	f
+list_prepare_entry	cp_klist.h	468;"	d
+list_replace	cp_klist.h	/^static inline void list_replace(struct list_head *old,$/;"	f
+list_replace_init	cp_klist.h	/^static inline void list_replace_init(struct list_head *old,$/;"	f
+list_splice	cp_klist.h	/^static inline void list_splice(const struct list_head *list,$/;"	f
+list_splice_init	cp_klist.h	/^static inline void list_splice_init(struct list_head *list,$/;"	f
+list_splice_tail	cp_klist.h	/^static inline void list_splice_tail(struct list_head *list,$/;"	f
+list_splice_tail_init	cp_klist.h	/^static inline void list_splice_tail_init(struct list_head *list,$/;"	f
+lit	cp_logger.c	/^    char lit[CHARS_PER_LINE + 2];$/;"	l
+lit	cp_string.c	/^	char lit[CHARS_PER_LINE + 1];$/;"	l
+loc	cp_atcmd.h	/^    GPRS_LOCATION   loc;        \/*  Location *\/$/;"	m	struct:_REGISTER_INFO
+local	cp_logger.c	/^    struct tm *local;$/;"	l
+lock	cp_gprs.c	/^    static int     lock = 0;$/;"	l	file:
+lock	cp_gprs.h	/^    pthread_mutex_t lock;      \/* Module control mutex lock *\/$/;"	m	struct:__MODULE_INFO
+log	cp_atcmd.c	/^        char   log[512] = {0};$/;"	l
+log_banner	cp_logger.c	/^static void log_banner(char *prefix)$/;"	f	file:
+log_dbg	cp_logger.h	102;"	d
+log_dbg	cp_logger.h	94;"	d
+log_err	cp_logger.h	105;"	d
+log_err	cp_logger.h	97;"	d
+log_fatal	cp_logger.h	106;"	d
+log_fatal	cp_logger.h	98;"	d
+log_info	cp_logger.h	101;"	d
+log_info	cp_logger.h	93;"	d
+log_nrml	cp_logger.h	103;"	d
+log_nrml	cp_logger.h	95;"	d
+log_rollback_size	cp_logger.c	/^static unsigned long log_rollback_size = LOG_ROLLBACK_NONE;$/;"	v	file:
+log_str	cp_logger.c	/^char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" };$/;"	v
+log_str	cp_logger.h	/^extern char *log_str[];$/;"	x
+log_trace	cp_logger.h	100;"	d
+log_trace	cp_logger.h	92;"	d
+log_warn	cp_logger.h	104;"	d
+log_warn	cp_logger.h	96;"	d
+logger	cp_logger.c	/^static cp_logger *logger = NULL;$/;"	v	file:
+loglevel	test/swe_tpdud.c	/^    int            loglevel = LOG_LEVEL_NRML;$/;"	l
+long_options	test/comport.c	/^    struct option long_options[] = {$/;"	l
+long_options	test/swe_tpdud.c	/^    struct option  long_options[] = $/;"	l
+long_options	test/test_hal.c	/^    struct option long_options[] = {$/;"	l
+longitude	cp_atcmd.h	/^    char            longitude[15];$/;"	m	struct:_GPRS_LOCATION
+lost_percent	cp_network.c	/^    int                  lost_percent = 100;$/;"	l
+lost_percent	cp_ppp.c	/^    int                    lost_percent;$/;"	l
+lport	cp_sock.h	/^    int                      lport;       \/* local port *\/$/;"	m	struct:_CP_SOCK
+lport	test/swe_tpdud.h	/^    int                 lport;     \/* dlink  local listen port  *\/$/;"	m	struct:_SWE_TPDU
+main	cp_dictionary.c	/^int main(int argc, char *argv[])$/;"	f
+main	test/comport.c	/^int main(int argc, char **argv)$/;"	f
+main	test/swe_tpdud.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_array.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_hal.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_hh.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_ini.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_klist.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_logger.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_queue.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_sock_client.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_sock_server.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_string.c	/^int main (int argc, char **argv)$/;"	f
+main	test/test_vector.c	/^int main (int argc, char **argv)$/;"	f
+max_client	cp_sock.h	/^    int                      max_client;  \/* max clients, only listen socket use it*\/$/;"	m	struct:_CP_SOCK
+max_event	cp_fds.h	/^    int                   max_event;    \/* Maximum monitor FD number *\/$/;"	m	struct:_CP_FDS
+mcc	cp_atcmd.c	/^    char              mcc[5];$/;"	l
+mcc_mnc	cp_atcmd.h	/^    char            mcc_mnc[16];\/*   Mobile Country Code, China is 460 *\/$/;"	m	struct:_GPRS_LOCATION
+mem	cp_vector.h	/^    void          **mem;$/;"	m	struct:_CP_VECTOR
+mem_double	cp_dictionary.c	/^static void * mem_double(void * ptr, int size)$/;"	f	file:
+micro_second_sleep	cp_time.h	/^static inline void micro_second_sleep(unsigned long ms)$/;"	f
+mnc	cp_atcmd.c	/^    char              mnc[5];$/;"	l
+mode	cp_proc.c	/^    int mode = S_IROTH | S_IXOTH | S_IRGRP | S_IXGRP | S_IRWXU;$/;"	l
+mode	cp_sock.h	/^    int                      mode;        \/* socket work mode: listen, accept, connect *\/$/;"	m	struct:_CP_SOCK
+model	cp_atcmd.h	/^    char            model[64];  \/*  AT+CGMM check GPRS module model *\/$/;"	m	struct:_HARDWARE_INFO
+module	cp_gprs.c	/^    MODULE_INFO        *module = (MODULE_INFO *)thread_arg;$/;"	l
+module	cp_ppp.c	/^    MODULE_INFO         *module = ppp_ctx->module; $/;"	l
+module	cp_ppp.c	/^    MODULE_INFO         *module;$/;"	l
+module	cp_ppp.h	/^    MODULE_INFO        *module;$/;"	m	struct:__PPP_CTX
+mrev	cp_atcmd.h	/^    char            mrev[64];   \/*  AT+CGMR check GPRS module revision *\/$/;"	m	struct:_HARDWARE_INFO
+mru	cp_gsmmux.h	/^    unsigned int mru;$/;"	m	struct:gsm_config
+msg_time	cp_sock.h	/^    unsigned long            msg_time;      \/* The last time get incoming data in this socket *\/$/;"	m	struct:_CP_SOCK
+msg_timeout	cp_sock.h	/^    unsigned long            msg_timeout;   \/* this is set to the socket recv data timeout value,  *\/$/;"	m	struct:_CP_SOCK
+mtu	cp_gsmmux.h	/^    unsigned int mtu;$/;"	m	struct:gsm_config
+n	cp_dictionary.h	/^    int             n ;     \/** Number of entries in dictionary *\/$/;"	m	struct:_dictionary_
+n	test/test_vector.c	/^    int i, n;$/;"	l
+n2	cp_gsmmux.h	/^    unsigned int n2;$/;"	m	struct:gsm_config
+netaddr	cp_ppp.h	/^    char            netaddr[INET_ADDRSTRLEN];$/;"	m	struct:__PPPD_INFO
+network	cp_ppp.h	/^    unsigned char      network;      \/* PPP network status: PPP_FAIL,PPP_BAD,PPP_GOOD *\/$/;"	m	struct:__PPP_CTX
+network_ping_test	cp_network.c	/^int network_ping_test(char *from, char *ping_ip)$/;"	f
+new_cfg	cp_comport.c	/^    struct termios old_cfg, new_cfg;$/;"	l
+new_first	cp_klist.h	/^	struct list_head *new_first = entry->next;$/;"	l
+new_sock	cp_network.c	/^    CP_SOCK                *new_sock = NULL;$/;"	l
+newptr	cp_dictionary.c	/^    void * newptr ;$/;"	l
+next	cp_klist.h	/^	struct hlist_node *next = n->next;$/;"	l
+next	cp_klist.h	/^	struct hlist_node *next, **pprev;$/;"	m	struct:hlist_node	typeref:struct:hlist_node::hlist_node
+next	cp_klist.h	/^	struct list_head *next = head->next;$/;"	l
+next	cp_klist.h	/^	struct list_head *next, *prev;$/;"	m	struct:list_head	typeref:struct:list_head::list_head
+next	cp_queue.h	/^    struct _CP_QNODE   *next;$/;"	m	struct:_CP_QNODE	typeref:struct:_CP_QNODE::_CP_QNODE
+nfds	cp_fds.c	/^    int                   i=0, nfds=0;$/;"	l
+nic_get_ipaddr	cp_network.c	/^int nic_get_ipaddr(char *nic, char *ipaddr)$/;"	f
+nic_get_ptpaddr	cp_network.c	/^int nic_get_ptpaddr(char *nic, char *ptpaddr)$/;"	f
+nic_network_config	cp_network.c	/^int nic_network_config(char *nic, char *mac, char *ip)$/;"	f
+nkeys	cp_iniparser.c	/^    int     seclen, nkeys ;$/;"	l
+node	cp_queue.c	/^    CP_QNODE         *node;$/;"	l
+node	cp_queue.c	/^    CP_QNODE       *node, *tmp;$/;"	l
+node	cp_queue.c	/^    CP_QNODE       *node;$/;"	l
+nonblock	cp_comport.c	/^void nonblock()$/;"	f
+now	cp_logger.c	/^    struct timeval now;$/;"	l
+now	cp_time.h	/^    struct timeval now; $/;"	l
+now	cp_time.h	/^    time_t now = time(NULL);$/;"	l
+nsec	cp_iniparser.c	/^    int     nsec ;$/;"	l
+nsec	cp_iniparser.c	/^    int nsec ;$/;"	l
+offset	cp_iniparser.c	/^    int         len, offset ;$/;"	l
+offsetof	cp_common.h	22;"	d
+offsetof	cp_klist.h	27;"	d
+offsetof	cp_klist.h	28;"	d
+old_cfg	cp_comport.c	/^    struct termios old_cfg, new_cfg;$/;"	l
+old_flags	cp_comport.c	/^    int old_flags;$/;"	l
+olen	cp_string.c	/^	int olen = str->len;$/;"	l
+open_gsm_dataport	cp_gprs.c	/^int open_gsm_dataport(MODULE_INFO *module)$/;"	f
+opt	cp_sock.c	/^    int        opt;$/;"	l
+opt	cp_sock.c	/^    int  opt;$/;"	l
+opt	cp_sock.c	/^    int opt = 1;$/;"	l
+opt	test/comport.c	/^    int opt = 0;$/;"	l
+opt	test/swe_tpdud.c	/^    int            opt;$/;"	l
+opt	test/test_hal.c	/^    int                   opt;$/;"	l
+optlen	cp_sock.c	/^    socklen_t  optlen = sizeof(opt);$/;"	l
+opts	cp_sock.c	/^    int opts;$/;"	l
+p	cp_string.c	/^		int p = (s1->len > s2->len) ? s2->len : s1->len;$/;"	l
+p	test/test_vector.c	/^    CP_SOCK *p = NULL;$/;"	l
+parity	cp_comport.h	/^    unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;"	m	struct:__COM_PORT
+pcPtr	cp_string.c	/^    char        *pcPtr;$/;"	l
+pcRecvPtr	cp_atcmd.c	/^    char                 *pcRecvPtr = NULL; $/;"	l
+pcStart	cp_atcmd.c	/^                            *pcStart = NULL,$/;"	l
+pcTab	cp_atcmd.c	/^                            *pcTab   = NULL;$/;"	l
+pid	cp_ppp.c	/^    int           pid = -1;$/;"	l
+pid	cp_ppp.c	/^    int        pid = -1;$/;"	l
+pid	cp_ppp.c	/^    pid_t               pid;$/;"	l
+pid	cp_ppp.h	/^    pid_t           pid;$/;"	m	struct:__PPPD_INFO
+pid	cp_proc.c	/^        char pid[PID_ASCII_SIZE]; $/;"	l
+pid	cp_proc.c	/^        pid_t pid = -1; $/;"	l
+pid	cp_proc.c	/^    pid_t pid; $/;"	l
+pid_ascii	cp_proc.c	/^        char pid_ascii[PID_ASCII_SIZE]; $/;"	l
+ping_interval	cp_ppp.h	/^    long               ping_interval;$/;"	m	struct:__PPP_CTX
+ping_ip	cp_ppp.h	/^    char               ping_ip[INET_ADDRSTRLEN];$/;"	m	struct:__PPP_CTX
+ping_time	cp_ppp.h	/^    unsigned long   ping_time;$/;"	m	struct:__PPPD_INFO
+power_off_module	cp_gprs.c	/^int power_off_module(MODULE_INFO *module)$/;"	f
+power_on_module	cp_gprs.c	/^int power_on_module(MODULE_INFO *module)$/;"	f
+ppp_context_init	cp_ppp.c	/^int ppp_context_init(PPP_CTX *ppp_ctx, MODULE_INFO *module)$/;"	f
+ppp_context_term	cp_ppp.c	/^void ppp_context_term(PPP_CTX *ppp_ctx)$/;"	f
+ppp_ctx	cp_ppp.c	/^    PPP_CTX             ppp_ctx; $/;"	l
+ppp_stat	cp_ppp.c	/^    PPP_STAT               *ppp_stat = &(ppp_ctx->ppp_stat);$/;"	l
+ppp_stat	cp_ppp.h	/^    PPP_STAT           ppp_stat;     \/* PPP network statistic *\/$/;"	m	struct:__PPP_CTX
+ppp_thread_workbody	cp_ppp.c	/^void *ppp_thread_workbody(void *thread_arg)$/;"	f
+pppd_cmd	cp_ppp.c	/^    char                pppd_cmd[PPPD_CMD_LEN];$/;"	l
+pppd_info	cp_ppp.c	/^    PPPD_INFO              *pppd_info = &(ppp_ctx->pppd_info);$/;"	l
+pppd_info	cp_ppp.h	/^    PPPD_INFO          pppd_info;    \/* pppd process information *\/$/;"	m	struct:__PPP_CTX
+pprev	cp_klist.h	/^	struct hlist_node **pprev = n->pprev;$/;"	l
+pprev	cp_klist.h	/^	struct hlist_node *next, **pprev;$/;"	m	struct:hlist_node	typeref:struct:hlist_node::
+prefetch	cp_klist.h	/^static inline void prefetch(const void *x) {;}$/;"	f
+prev	cp_klist.h	/^	struct list_head *next, *prev;$/;"	m	struct:list_head	typeref:struct:list_head::
+print_char	cp_logger.c	/^static char *print_char =$/;"	v	file:
+print_char	cp_string.c	/^static char *print_char = $/;"	v	file:
+print_usage	test/swe_tpdud.c	/^void print_usage(char *progname)$/;"	f
+print_usage	test/test_hal.c	/^void print_usage(char *progname)$/;"	f
+print_version	test/comport.c	/^void print_version(char *name)$/;"	f
+privt	cp_sock.h	/^    void                     *privt;      \/* socket private data *\/$/;"	m	struct:_CP_SOCK
+privt_free	cp_sock.h	/^    PRIVT_FREE               privt_free;  \/* private data free function if it's malloc *\/$/;"	m	struct:_CP_SOCK
+prn	cp_logger.c	/^    char prn[LINELEN];$/;"	l
+prn	cp_string.c	/^	char prn[LINELEN];$/;"	l
+proc_uplink_event	test/swe_tpdud.c	/^int proc_uplink_event(CP_SOCK *ulink)$/;"	f
+progname	test/comport.c	/^    char *progname = NULL;$/;"	l
+progname	test/test_hal.c	/^    char                  *progname=NULL;$/;"	l
+ptpaddr	cp_ppp.h	/^    char            ptpaddr[INET_ADDRSTRLEN];$/;"	m	struct:__PPPD_INFO
+ptr	cp_atcmd.c	/^    char              *ptr = NULL;$/;"	l
+ptr	cp_atcmd.c	/^    char        *ptr = NULL;$/;"	l
+ptr	cp_common.h	/^    void *ptr;$/;"	l
+ptr	cp_comport.c	/^    char *ptr, *end;$/;"	l
+ptr	cp_iniparser.c	/^        char      *ptr = NULL; $/;"	l
+ptr	cp_ppp.c	/^    char                *ptr;$/;"	l
+ptr	test/comport.c	/^    char *ptr = NULL;$/;"	l
+pwd	cp_ppp.h	/^    char            pwd[PWD_LEN];$/;"	m	struct:__APN_ACCOUNT
+pwr_status	cp_gprs.h	/^    unsigned char   pwr_status; \/* Current module power status *\/$/;"	m	struct:__MODULE_INFO
+queue	test/test_queue.c	/^    CP_QUEUE *queue = NULL;$/;"	l
+raddr	cp_sock.h	/^    char                     raddr[16];   \/* remote IP address  *\/$/;"	m	struct:_CP_SOCK
+raddr	test/swe_tpdud.h	/^    char                raddr[32]; \/* uplink remote listen port *\/$/;"	m	struct:_SWE_TPDU
+rb_clear	cp_ringbuf.c	/^void rb_clear (struct ring_buffer *rb) {$/;"	f
+rb_data_size	cp_ringbuf.c	/^int rb_data_size (struct ring_buffer *rb) {$/;"	f
+rb_free_size	cp_ringbuf.c	/^int rb_free_size (struct ring_buffer *rb){$/;"	f
+rb_init	cp_ringbuf.c	/^void rb_init (struct ring_buffer *ring, u_char* buff, int size) {$/;"	f
+rb_peek	cp_ringbuf.c	/^u_char rb_peek(struct ring_buffer* rb, int index) {$/;"	f
+rb_read	cp_ringbuf.c	/^int rb_read (struct ring_buffer *rb, u_char * buf, int max) {$/;"	f
+rb_write	cp_ringbuf.c	/^rb_write (struct ring_buffer *rb, u_char * buf, int len)$/;"	f
+rbuf	cp_sock.c	/^    cp_string         *rbuf;$/;"	l
+rbuf	cp_sock.h	/^    cp_string                *rbuf;       \/* receive buffer  *\/$/;"	m	struct:_CP_SOCK
+rbuf	test/test_hh.c	/^    unsigned char   rbuf[10];$/;"	l
+rc	cp_logger.c	/^    int rc = 0;$/;"	l
+rc	cp_logger.c	/^    int rc;$/;"	l
+rc	cp_string.c	/^		int rc = $/;"	l
+rc	cp_string.c	/^		int rc = memcmp(s1->data, s2->data, p);$/;"	l
+rc	cp_string.c	/^	int rc;$/;"	l
+rcv	test/test_string.c	/^    cp_string      *rcv;$/;"	l
+rd_pointer	cp_ringbuf.h	/^    int rd_pointer;$/;"	m	struct:ring_buffer
+read	cp_sock.h	/^    CP_SOCK_EVENT_CALLBACK  read;$/;"	m	struct:_CP_SOCK_CALLBACK
+read_len	cp_string.c	/^	int read_len;$/;"	l
+ready	cp_gprs.h	/^    unsigned char   ready;     \/* SIM card regist and can work or not *\/$/;"	m	struct:__MODULE_INFO
+rear	cp_queue.h	/^    CP_QNODE           *rear;$/;"	m	struct:_CP_QUEUE
+record_daemon_pid	cp_proc.c	/^int record_daemon_pid(const char *pid_file)$/;"	f
+recv_buf	cp_atcmd.c	/^    char              recv_buf[ATCMD_REPLY_LEN];$/;"	l
+recv_buf	cp_atcmd.c	/^    char        recv_buf[ATCMD_REPLY_LEN]; $/;"	l
+recv_buf	cp_atcmd.c	/^    char        recv_buf[ATCMD_REPLY_LEN];$/;"	l
+recv_size	test/comport.c	/^    int recv_size = 0;$/;"	l
+reg	cp_gprs.c	/^    REGISTER_INFO   *reg = &(module->reg);   \/* SIM card Register information  *\/ $/;"	l
+reg	cp_gprs.h	/^    REGISTER_INFO   reg;       \/* SIM card register network information *\/$/;"	m	struct:__MODULE_INFO
+res	cp_fds.c	/^    struct  rlimit    res;$/;"	l
+res	cp_sock.c	/^    struct addrinfo     *res = NULL;$/;"	l
+res	cp_string.c	/^	cp_string *res = NULL;$/;"	l
+res	cp_string.c	/^	cp_string *res;$/;"	l
+result	cp_string.c	/^    char        *result;$/;"	l
+ret	cp_iniparser.c	/^    int         ret ;$/;"	l
+retVal	cp_proc.c	/^    int retVal = -1; $/;"	l
+retval	cp_atcmd.c	/^    int                  retval = -1; $/;"	l
+retval	cp_atcmd.c	/^    int               retval;$/;"	l
+retval	cp_atcmd.c	/^    int              retval; $/;"	l
+retval	cp_atcmd.c	/^    int              retval;$/;"	l
+retval	cp_atcmd.c	/^    int         retval = 0; $/;"	l
+retval	cp_atcmd.c	/^    int         retval, stat = -1;$/;"	l
+retval	cp_atcmd.c	/^    int         retval;$/;"	l
+retval	cp_atcmd.c	/^    int         retval=0; $/;"	l
+retval	cp_atcmd.c	/^    int    retval;$/;"	l
+retval	cp_atcmd.c	/^    int  retval;$/;"	l
+retval	cp_comport.c	/^    int retval = -1;$/;"	l
+retval	cp_comport.c	/^    int retval = 0;             \/\/ Function return value$/;"	l
+retval	cp_comport.c	/^    int retval = 0;$/;"	l
+retval	cp_gprs.c	/^    int           retval = 0;$/;"	l
+retval	cp_gprs.c	/^    int i, retval = -1;$/;"	l
+retval	cp_ppp.c	/^    int                 retval;$/;"	l
+retval	cp_ppp.c	/^    int           retval = -1;$/;"	l
+retval	cp_proc.c	/^    int        retval = 0;$/;"	l
+retval	cp_proc.c	/^    int retval, fd; $/;"	l
+retval	test/comport.c	/^    int retval = -1;$/;"	l
+retval	test/comport.c	/^    int retval = 0;$/;"	l
+ring_buffer	cp_ringbuf.h	/^struct ring_buffer {$/;"	s
+rlist	cp_sock.h	/^    struct list_head         rlist;       \/* The list_head member position just for the registry list *\/$/;"	m	struct:_CP_SOCK	typeref:struct:_CP_SOCK::list_head
+rp	cp_sock.c	/^    struct addrinfo     hints, *rp;$/;"	l
+rport	cp_sock.h	/^    int                      rport;       \/* remote port *\/$/;"	m	struct:_CP_SOCK
+rport	test/swe_tpdud.h	/^    int                 rport;     \/* uplink remote IP address  *\/$/;"	m	struct:_SWE_TPDU
+rsize	cp_sock.h	/^    int                      rsize;       \/* ioctl() set socket recv buffer size  *\/$/;"	m	struct:_CP_SOCK
+rtc_tm	cp_time.h	/^    struct rtc_time     rtc_tm;  $/;"	l
+rv	cp_array.c	/^    int              i, rv = -3;$/;"	l
+rv	cp_fds.c	/^    int                     rv = 0;$/;"	l
+rv	cp_fds.c	/^    int                     rv;$/;"	l
+rv	cp_fds.c	/^    int                    rv;$/;"	l
+rv	cp_fds.c	/^    int          rv = 0;$/;"	l
+rv	cp_gprs.c	/^    int             rv;$/;"	l
+rv	cp_gprs.c	/^    int           i, rv = 0;$/;"	l
+rv	cp_gprs.c	/^    int           rv = 0;$/;"	l
+rv	cp_gprs.c	/^    int           rv;$/;"	l
+rv	cp_gprs.c	/^    int     rv = 0;$/;"	l
+rv	cp_hal.c	/^    int         rv = 0;$/;"	l
+rv	cp_network.c	/^    int                    rv = 0;$/;"	l
+rv	cp_network.c	/^    int  rv = 0;$/;"	l
+rv	cp_sock.c	/^    int                      rv = 0;$/;"	l
+rv	cp_sock.c	/^    int                      rv;$/;"	l
+rv	cp_sock.c	/^    int                 rv = 0;$/;"	l
+rv	cp_sock.c	/^    int               rv, left;$/;"	l
+rv	cp_sock.c	/^    int        rv = 0;$/;"	l
+rv	cp_time.h	/^    int                 rv, fd = -1;$/;"	l
+rv	test/swe_tpdud.c	/^    int            rv = 0;$/;"	l
+rv	test/swe_tpdud.c	/^    int           rv;$/;"	l
+rv	test/test_hal.c	/^    int        rv = 0;$/;"	l
+rv	test/test_sock_client.c	/^    int      rv;$/;"	l
+rv	test/test_sock_server.c	/^    int           rv = 0;$/;"	l
+rx_packets	cp_network.c	/^    unsigned long        rx_packets = 0;$/;"	l
+saddr	cp_sock.c	/^            struct sockaddr_in    *saddr = (struct sockaddr_in *)rp->ai_addr;$/;"	l
+saddr	cp_sock.c	/^    struct sockaddr_in       saddr;$/;"	l
+saddr	cp_sock.c	/^    struct sockaddr_in  saddr;$/;"	l
+saddr	cp_sock.h	/^    struct sockaddr          saddr;       \/* sockaddr for connect *\/$/;"	m	struct:_CP_SOCK	typeref:struct:_CP_SOCK::sockaddr
+save	cp_vector.c	/^    void    *save;$/;"	l
+sbuf	cp_sock.h	/^    cp_string                *sbuf;       \/* send buffer *\/$/;"	m	struct:_CP_SOCK
+sbuf	test/test_hh.c	/^    unsigned char   sbuf[10]={0x02, 0x48, 0x32, 0x03, 0x20, 0x00, 0x00, 0xF6, 0xBE, 0x03};$/;"	l
+seclen	cp_iniparser.c	/^    int     seclen ;$/;"	l
+seclen	cp_iniparser.c	/^    int     seclen, nkeys ;$/;"	l
+secname	cp_iniparser.c	/^    char *  secname ;$/;"	l
+section	cp_iniparser.c	/^    char section [ASCIILINESZ+1] ;$/;"	l
+select_apn	cp_ppp.c	/^int select_apn(PPP_CTX *ppp_ctx, char *key)$/;"	f
+send	cp_comport.c	/^    int send = 0;$/;"	l
+send_atcmd	cp_atcmd.c	/^int send_atcmd(COM_PORT *comport, char *atCmd, char *expect, char *error,$/;"	f
+send_atcmd_check_ok	cp_atcmd.c	/^int send_atcmd_check_ok(COM_PORT *comport, char *atcmd, unsigned long timeout)$/;"	f
+send_atcmd_check_request	cp_atcmd.c	/^int send_atcmd_check_request(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len)$/;"	f
+send_atcmd_check_value	cp_atcmd.c	/^int send_atcmd_check_value(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len)$/;"	f
+serv_sock	cp_fds.c	/^    CP_SOCK           *sock, *tsock, *serv_sock;$/;"	l
+serv_sock	cp_sock.h	/^    struct _CP_SOCK          *serv_sock;  \/* Accept socket used to point to the server socket *\/$/;"	m	struct:_CP_SOCK	typeref:struct:_CP_SOCK::_CP_SOCK
+serv_tpdu	test/swe_tpdud.c	/^            SWE_TPDU       *serv_tpdu;$/;"	l
+server_list	cp_fds.h	/^    struct list_head      server_list;  \/* a list keep all the listen sockets *\/ $/;"	m	struct:_CP_FDS	typeref:struct:_CP_FDS::list_head
+service	cp_sock.c	/^    char                service[20];$/;"	l
+service_route	test/test_sock_client.c	/^int service_route(CP_SOCK *sock)$/;"	f
+service_route	test/test_sock_server.c	/^int service_route(CP_SOCK *sock)$/;"	f
+set_daemon_running	cp_proc.c	/^int set_daemon_running(const char *pid_file)$/;"	f
+set_module_event	cp_gprs.c	/^void set_module_event(MODULE_INFO *module, int request)$/;"	f
+set_module_event_power	cp_gprs.c	/^int set_module_event_power(MODULE_INFO *module)$/;"	f
+set_ppp_disconnect	cp_ppp.c	/^void set_ppp_disconnect(PPP_CTX *ppp_ctx)$/;"	f
+set_settings	cp_comport.c	/^void set_settings(COM_PORT * comport, const char *settings)$/;"	f
+settings	test/comport.c	/^    char *settings = "8N1N";$/;"	l
+sigact	cp_proc.c	/^    struct sigaction sigact, sigign;$/;"	l
+sigact	test/comport.c	/^    struct sigaction sigact;$/;"	l
+sigign	cp_proc.c	/^    struct sigaction sigact, sigign;$/;"	l
+signal	cp_atcmd.c	/^    int         signal = -1;$/;"	l
+signal	cp_atcmd.h	/^    int             signal;     \/*  GPRS signal *\/ $/;"	m	struct:_REGISTER_INFO
+signal	cp_proc.h	/^    int       signal;$/;"	m	struct:__CP_PROC_SIG
+signal_handler	test/comport.c	/^void signal_handler(int i_sig)$/;"	f
+sin	cp_network.c	/^    struct sockaddr_in    *sin;         $/;"	l
+sin	cp_ppp.c	/^    struct sockaddr_in    *sin;  $/;"	l
+size	cp_array.h	/^    int                    size;$/;"	m	struct:_CP_ARRAY
+size	cp_dictionary.h	/^    int             size ;  \/** Storage size *\/$/;"	m	struct:_dictionary_
+size	cp_logger.h	/^    int                size;$/;"	m	struct:_cp_logger
+size	cp_queue.h	/^    int                size;$/;"	m	struct:_CP_QUEUE
+size	cp_ringbuf.h	/^    int size;$/;"	m	struct:ring_buffer
+size	cp_string.c	/^    int        size;$/;"	l
+size	cp_string.h	/^	int size;    \/**< size allocated   *\/$/;"	m	struct:_cp_string
+size	cp_vector.h	/^    int           size;$/;"	m	struct:_CP_VECTOR
+snd	test/test_string.c	/^    cp_string      *snd;$/;"	l
+so_linger	cp_sock.c	/^            struct linger so_linger;$/;"	l
+sock	cp_fds.c	/^    CP_SOCK                *sock;$/;"	l
+sock	cp_fds.c	/^    CP_SOCK               *sock;$/;"	l
+sock	cp_fds.c	/^    CP_SOCK           *sock = NULL, *tsock;$/;"	l
+sock	cp_fds.c	/^    CP_SOCK           *sock, *tsock, *serv_sock;$/;"	l
+sock	cp_fds.c	/^    CP_SOCK           *sock, *tsock;$/;"	l
+sock	cp_fds.c	/^    CP_SOCK           *sock;$/;"	l
+sock	cp_fds.c	/^    CP_SOCK    *sock = NULL;$/;"	l
+sock	cp_network.c	/^    CP_SOCK   *sock = NULL;$/;"	l
+sock	test/swe_tpdud.c	/^    CP_SOCK        *sock;$/;"	l
+sock	test/test_array.c	/^    CP_SOCK *sock = NULL;$/;"	l
+sock	test/test_klist.c	/^    CP_SOCK             *sock, *tsock;$/;"	l
+sock	test/test_queue.c	/^    CP_SOCK *sock = NULL;$/;"	l
+sock	test/test_sock_client.c	/^    CP_SOCK    *sock = NULL;$/;"	l
+sock	test/test_sock_server.c	/^    CP_SOCK    *sock;$/;"	l
+sock_list	test/test_klist.c	/^    struct list_head    sock_list;$/;"	l
+sock_poll	cp_sock.c	/^    struct pollfd            sock_poll;$/;"	l
+split_string_to_value	cp_string.c	/^int split_string_to_value(char *str, char *fmt, ...)$/;"	f
+ssize	cp_sock.h	/^    int                      ssize;       \/* ioctl() set socket send buffer size  *\/$/;"	m	struct:_CP_SOCK
+stExcpFds	cp_comport.c	/^    fd_set stReadFds, stExcpFds;$/;"	l
+stReadFds	cp_comport.c	/^    fd_set stReadFds, stExcpFds;$/;"	l
+stTime	cp_comport.c	/^    struct timeval stTime;$/;"	l
+sta	cp_iniparser.c	/^    line_status sta ;$/;"	l
+start	cp_atcmd.c	/^    char        *start;$/;"	l
+start_ppp_connect	cp_ppp.c	/^int start_ppp_connect(PPP_CTX *ppp_ctx)$/;"	f
+start_ppp_dial_cmd	cp_ppp.c	/^int start_ppp_dial_cmd(COM_PORT  *comport, APN_ACCOUNT *apn, char *ppp_dev)$/;"	f
+start_thread_ppp	cp_ppp.c	/^int start_thread_ppp(MODULE_INFO *module)$/;"	f
+start_time	cp_gprs.c	/^    static unsigned long start_time ;$/;"	l	file:
+start_time	cp_ppp.h	/^    unsigned long   start_time;$/;"	m	struct:__PPPD_INFO
+stat	cp_atcmd.c	/^    int         retval, stat = -1;$/;"	l
+status	cp_atcmd.c	/^    int               status;$/;"	l
+status	cp_hal.c	/^    int         status;$/;"	l
+status	cp_ppp.h	/^    unsigned char      status;       \/* Current PPP connection status *\/$/;"	m	struct:__PPP_CTX
+status	cp_sock.h	/^    unsigned char            status;      \/* current socket status *\/$/;"	m	struct:_CP_SOCK
+stop	cp_proc.h	/^    unsigned  stop;     \/* 0: Not term  1: Stop  *\/$/;"	m	struct:__CP_PROC_SIG
+stop_ppp_connect	cp_ppp.c	/^int stop_ppp_connect(PPP_CTX *ppp_ctx)$/;"	f
+stop_tpdu_service	test/swe_tpdud.c	/^static void stop_tpdu_service(SWE_TPDU *tpdu)$/;"	f	file:
+stopbit	cp_comport.h	/^    unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;"	m	struct:__COM_PORT
+str	cp_iniparser.c	/^    char    *   str ;$/;"	l
+str	cp_ppp.c	/^    char             *str;$/;"	l
+str	cp_string.c	/^	cp_string *str = t_malloc(sizeof(cp_string));$/;"	l
+str	cp_string.c	/^	cp_string *str;$/;"	l
+string	cp_string.c	/^    static char string[1024]; $/;"	l	file:
+strlwc	cp_iniparser.c	/^static char * strlwc(const char * s)$/;"	f	file:
+strstrip	cp_iniparser.c	/^static char * strstrip(const char * s)$/;"	f	file:
+sval	cp_iniparser.c	/^    char * sval ;$/;"	l
+t	cp_dictionary.c	/^    char * t ;$/;"	l
+t1	cp_gsmmux.h	/^    unsigned int t1;$/;"	m	struct:gsm_config
+t2	cp_gsmmux.h	/^    unsigned int t2;$/;"	m	struct:gsm_config
+t3	cp_gsmmux.h	/^    unsigned int t3;$/;"	m	struct:gsm_config
+t_free	cp_common.h	60;"	d
+t_free	cp_common.h	63;"	d
+t_malloc	cp_common.h	61;"	d
+t_malloc	cp_common.h	64;"	d
+task_array	cp_fds.h	/^    CP_ARRAY              *task_array;  \/* an array keep all these pending\/or other special task socket *\/ $/;"	m	struct:_CP_FDS
+test_buzzer	test/test_hal.c	/^    int                   test_buzzer = 0;$/;"	l
+test_buzzer_hal_api	test/test_hal.c	/^void test_buzzer_hal_api(void)$/;"	f
+test_gprs	test/test_hal.c	/^    int                   test_gprs = 0;$/;"	l
+test_gprs_hal_api	test/test_hal.c	/^void test_gprs_hal_api(void)$/;"	f
+test_led	test/test_hal.c	/^    int                   test_led = 0;$/;"	l
+test_led_hal_api	test/test_hal.c	/^void test_led_hal_api(void)$/;"	f
+thread_attr	cp_proc.c	/^    pthread_attr_t thread_attr; $/;"	l
+thread_id	cp_ppp.h	/^    pthread_t          thread_id;    \/* PPP Thread ID, RFU *\/$/;"	m	struct:__PPP_CTX
+thread_start	cp_proc.c	/^int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg)$/;"	f
+tid	cp_ppp.c	/^    pthread_t           tid;$/;"	l
+time	cp_atcmd.h	/^    char            time[15];$/;"	m	struct:_GPRS_LOCATION
+time_elapsed	cp_time.h	/^static inline unsigned long time_elapsed(unsigned long start)$/;"	f
+time_now	cp_time.h	/^static inline unsigned long time_now()$/;"	f
+timeout	cp_fds.h	/^    int                   timeout;      \/* epoll_wait timeout value  *\/$/;"	m	struct:_CP_FDS
+timestr	cp_logger.c	/^    char timestr[256];$/;"	l
+tmp	cp_atcmd.c	/^    char        tmp[ATCMD_REPLY_LEN];$/;"	l
+tmp	cp_comport.c	/^    long tmp;$/;"	l
+tmp	cp_iniparser.c	/^    char tmp     [ASCIILINESZ+1] ;$/;"	l
+tmp	cp_ppp.c	/^    char                tmp[64];$/;"	l
+tmp	cp_ppp.c	/^    char             tmp[64];$/;"	l
+tmp	cp_queue.c	/^    CP_QNODE       *node, *tmp;$/;"	l
+tmp	test/test_array.c	/^    CP_SOCK *tmp = NULL;$/;"	l
+tmp	test/test_queue.c	/^    CP_SOCK *tmp = NULL;$/;"	l
+tnow	cp_time.h	/^    struct tm *tnow = localtime(&now); $/;"	l
+total	cp_ringbuf.c	/^    int total;$/;"	l
+total	cp_string.c	/^	int total = 0;$/;"	l
+tpdu	test/swe_tpdud.c	/^    SWE_TPDU       *tpdu;$/;"	l
+tpdu	test/swe_tpdud.c	/^    SWE_TPDU       tpdu = {.lport=TPDUD_PORT, .raddr=HOSTSIM_IP, .rport=HOSTSIM_PORT};$/;"	l
+tpdu	test/swe_tpdud.c	/^    SWE_TPDU      *tpdu = NULL; $/;"	l
+tpdu_connect_uplink	test/swe_tpdud.c	/^int tpdu_connect_uplink(SWE_TPDU *tpdu)$/;"	f
+tpdu_service_route	test/swe_tpdud.c	/^int tpdu_service_route(CP_SOCK *dlink)$/;"	f
+travel_list	test/test_klist.c	/^void travel_list(struct list_head *head)$/;"	f
+tsock	cp_fds.c	/^    CP_SOCK           *sock = NULL, *tsock;$/;"	l
+tsock	cp_fds.c	/^    CP_SOCK           *sock, *tsock, *serv_sock;$/;"	l
+tsock	cp_fds.c	/^    CP_SOCK           *sock, *tsock;$/;"	l
+tsock	test/test_klist.c	/^    CP_SOCK             *sock, *tsock;$/;"	l
+ttystate	cp_comport.c	/^    struct termios ttystate;$/;"	l
+tv	cp_comport.c	/^    struct timeval tv;$/;"	l
+tx_packets	cp_network.c	/^    unsigned long        tx_packets = 0;$/;"	l
+type	cp_atcmd.h	/^    int             type;       \/*  SIM card register type: REG_HOMEWORK,REG_SEARCHING... *\/$/;"	m	struct:_REGISTER_INFO
+type	cp_ppp.c	/^    unsigned char       type = APN_2G;$/;"	l
+uid	cp_ppp.h	/^    char            uid[UID_LEN];    $/;"	m	struct:__APN_ACCOUNT
+ulCollisions	cp_ppp.h	/^    unsigned long ulCollisions;$/;"	m	struct:__PPP_STAT
+ulRx_CRC_Errors	cp_ppp.h	/^    unsigned long ulRx_CRC_Errors;  \/\/ recved pkt with crc error$/;"	m	struct:__PPP_STAT
+ulRx_Compressed	cp_ppp.h	/^    unsigned long ulRx_Compressed;$/;"	m	struct:__PPP_STAT
+ulRx_Dropped	cp_ppp.h	/^    unsigned long ulRx_Dropped; \/\/ no space in linux buffers$/;"	m	struct:__PPP_STAT
+ulRx_Errors	cp_ppp.h	/^    unsigned long ulRx_Errors;  \/\/ bad packets received   $/;"	m	struct:__PPP_STAT
+ulRx_FIFO_Errors	cp_ppp.h	/^    unsigned long ulRx_FIFO_Errors; \/\/ recv'r fifo overrun    $/;"	m	struct:__PPP_STAT
+ulRx_Frame_Errors	cp_ppp.h	/^    unsigned long ulRx_Frame_Errors;    \/\/ recv'd frame alignment error$/;"	m	struct:__PPP_STAT
+ulRx_Length_Errors	cp_ppp.h	/^    unsigned long ulRx_Length_Errors;$/;"	m	struct:__PPP_STAT
+ulRx_Missed_Errors	cp_ppp.h	/^    unsigned long ulRx_Missed_Errors;   \/\/ receiver missed packet  $/;"	m	struct:__PPP_STAT
+ulRx_Multicast	cp_ppp.h	/^    unsigned long ulRx_Multicast;   \/\/ multicast packets received   $/;"	m	struct:__PPP_STAT
+ulRx_Over_Errors	cp_ppp.h	/^    unsigned long ulRx_Over_Errors; \/\/ receiver ring buff overflow$/;"	m	struct:__PPP_STAT
+ulStartTime	cp_atcmd.c	/^    unsigned long        ulStartTime; $/;"	l
+ulTmp	cp_time.h	/^    unsigned long ulTmp;$/;"	l
+ulTx_Aborted_Errors	cp_ppp.h	/^    unsigned long ulTx_Aborted_Errors;$/;"	m	struct:__PPP_STAT
+ulTx_Carrier_Errors	cp_ppp.h	/^    unsigned long ulTx_Carrier_Errors;$/;"	m	struct:__PPP_STAT
+ulTx_Compressed	cp_ppp.h	/^    unsigned long ulTx_Compressed;$/;"	m	struct:__PPP_STAT
+ulTx_Dropped	cp_ppp.h	/^    unsigned long ulTx_Dropped; \/\/ no space available in linux$/;"	m	struct:__PPP_STAT
+ulTx_Errors	cp_ppp.h	/^    unsigned long ulTx_Errors;  \/\/ packet transmit problems$/;"	m	struct:__PPP_STAT
+ulTx_FIFO_Errors	cp_ppp.h	/^    unsigned long ulTx_FIFO_Errors;$/;"	m	struct:__PPP_STAT
+ulTx_Heartbeat_Errors	cp_ppp.h	/^    unsigned long ulTx_Heartbeat_Errors;$/;"	m	struct:__PPP_STAT
+ulTx_Window_Errors	cp_ppp.h	/^    unsigned long ulTx_Window_Errors;$/;"	m	struct:__PPP_STAT
+ulink	test/swe_tpdud.c	/^    CP_SOCK       *ulink;$/;"	l
+ulink	test/swe_tpdud.h	/^    CP_SOCK             *ulink;    \/* connect to hostsim socket *\/$/;"	m	struct:_SWE_TPDU
+ullRx_Bytes	cp_ppp.h	/^    unsigned long long ullRx_Bytes; \/\/ total bytes received   $/;"	m	struct:__PPP_STAT
+ullRx_Packets	cp_ppp.h	/^    unsigned long long ullRx_Packets;   \/\/ total packets received $/;"	m	struct:__PPP_STAT
+ullTx_Bytes	cp_ppp.h	/^    unsigned long long ullTx_Bytes; \/\/ total bytes transmitted     $/;"	m	struct:__PPP_STAT
+ullTx_Packets	cp_ppp.h	/^    unsigned long long ullTx_Packets;   \/\/ total packets transmitted$/;"	m	struct:__PPP_STAT
+unused	cp_gsmmux.h	/^    unsigned int unused[8];   \/* Padding for expansion without breaking stuff *\/$/;"	m	struct:gsm_config
+usage	test/comport.c	/^void usage(char *name)$/;"	f
+used	cp_comport.h	/^    unsigned char  used;     \/* This comport used or not now *\/$/;"	m	struct:__COM_PORT
+used	cp_vector.h	/^    int           used;$/;"	m	struct:_CP_VECTOR
+users	cp_gprs.h	/^    int             users;     \/* How many users use the module now  *\/$/;"	m	struct:__MODULE_INFO
+v	test/test_vector.c	/^    CP_VECTOR *v = cp_vector_init(1024);$/;"	l
+val	cp_dictionary.c	/^    char    *   val ;$/;"	l
+val	cp_dictionary.h	/^    char        **  val ;   \/** List of string values *\/$/;"	m	struct:_dictionary_
+val	cp_iniparser.c	/^    char val     [ASCIILINESZ+1] ;$/;"	l
+vector	cp_vector.c	/^    CP_VECTOR  *vector = NULL;$/;"	l
+who	cp_gprs.c	/^    char            *who = "atcmd_check_ready()";$/;"	l
+who	cp_gprs.c	/^    char            *who = "atcmd_inspect_status()";$/;"	l
+wr_pointer	cp_ringbuf.h	/^    int wr_pointer;$/;"	m	struct:ring_buffer
+write	cp_sock.h	/^    CP_SOCK_EVENT_CALLBACK  write;$/;"	m	struct:_CP_SOCK_CALLBACK
+xstrdup	cp_dictionary.c	/^static char * xstrdup(const char * s)$/;"	f	file:
diff --git a/program/cp_library/test/comport.c b/program/cp_library/test/comport.c
new file mode 100644
index 0000000..606f203
--- /dev/null
+++ b/program/cp_library/test/comport.c
@@ -0,0 +1,238 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com> 
+ *                  All rights reserved.
+ *
+ *       Filename:  comport.c
+ *    Description:  This file used to do ioctl() on common device or communicate 
+ *                  with serial port/TTY device.
+ *                 
+ *        Version:  1.0.0(10/18/2011~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/18/2011 10:08:05 AM"
+ *                 
+ ********************************************************************************/
+#include <getopt.h>
+#include <libgen.h>
+#include <sys/ioctl.h>
+
+#include "cp_comport.h"
+#include "cp_common.h"
+#include "version.h"
+
+unsigned char g_ucProcToken = 0x01;
+unsigned char g_ucCtrlZ;
+
+void print_version(char *name);
+void usage(char *name);
+int do_ioctl(char *dev_name, int cmd, int arg);
+void signal_handler(int i_sig);
+
+int main(int argc, char **argv)
+{
+    int opt = 0;
+    int retval = 0;
+    int recv_size = 0;
+    int i;
+    char *dev_name = NULL;
+    int baudrate = 115200;
+    char *settings = "8N1N";
+    char buf[512];
+    unsigned char disp_mode = 0x00;
+
+    struct sigaction sigact;
+
+    struct option long_options[] = {
+        {"device", required_argument, NULL, 'd'},
+        {"baudrate", required_argument, NULL, 'b'},
+        {"settings", required_argument, NULL, 's'},
+        {"ioctl", required_argument, NULL, 'i'},
+        {"hex", no_argument, NULL, 'x'},
+        {"version", no_argument, NULL, 'v'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };
+
+    while ((opt = getopt_long(argc, argv, "d:b:s:ivh", long_options, NULL)) != -1)
+    {
+        switch (opt)
+        {
+          case 'd':
+              dev_name = optarg;
+              break;
+          case 'b':
+              baudrate = atoi(optarg);
+              break;
+          case 's':            /* Default settings as 8N1N */
+              settings = optarg;
+              break;
+          case 'i':
+              if (5 != argc)
+              {
+                  usage(argv[0]);
+              }
+              else
+              {
+                  do_ioctl(argv[2], atoi(argv[3]), atoi(argv[4]));
+              }
+              return 0;
+          case 'x':            /* Display receive data as Hex mode */
+              disp_mode = 0x01;
+              break;
+          case 'v':            /* version */
+              print_version(argv[0]);
+              return 0;
+          case 'h':            /* help */
+              usage(argv[0]);
+              return 0;
+          default:
+              break;
+        }                       /* end of "switch(opt)" */
+    }
+
+    if (argc < 2)
+    {
+        usage(argv[0]);
+        return 0;
+    }
+
+    COM_PORT *comport = NULL;
+    if (NULL == (comport = comport_init(dev_name, baudrate, settings)))
+    {
+        printf("Comport initialize failure.\n");
+        return -1;
+    }
+
+    if ( (retval=comport_open(comport)) < 0)
+    {
+        printf("Failed to open %s with baudrate %d, %s. RetCode [%d]\n", dev_name, baudrate,
+               settings, retval);
+        return -1;
+    }
+
+    nonblock();
+
+    /* Process level signal handler */
+    sigemptyset(&sigact.sa_mask);
+    sigact.sa_flags = 0;
+    sigact.sa_handler = signal_handler;
+
+    sigaction(SIGTERM, &sigact, NULL);  /* catch terminate signal */
+    sigaction(SIGINT, &sigact, NULL);   /* catch interrupt signal */
+    sigaction(SIGSEGV, &sigact, NULL);  /* catch segmentation faults */
+    sigaction(SIGTSTP, &sigact, NULL);  /* catch ctrl+Z */
+    sigaction(SIGSTOP, &sigact, NULL);  /* catch ctrl+Z */
+
+    while (0x01 == g_ucProcToken)
+    {
+        recv_size = comport_recv(comport, buf, sizeof(buf) - 1, 10);
+        if (recv_size > 0)
+        {
+            for (i = 0; i < recv_size; i++)
+            {
+                if (0 == disp_mode)
+                    printf("%c", buf[i]);
+                else
+                    printf("%02X ", buf[i]);
+            }
+            fflush(stdout);
+        }
+        if (0 != kbhit())
+        {
+            retval = fgetc(stdin);
+
+            if (0x0A == retval)
+            {
+                buf[0] = 0x0D; /* 13 == 0x0D */
+            }
+            else
+            {
+                buf[0] = retval;
+            }
+
+            comport_send(comport, buf, 1);
+        }
+        else if (0x00 != g_ucCtrlZ)
+        {
+            g_ucCtrlZ = 0x00;
+            buf[0] = 0x1A;
+            comport_send(comport, buf, 1);
+        }
+    }
+
+    comport_term(comport);
+    return 0;
+}                               /* ----- End of main() ----- */
+
+void print_version(char *name)
+{
+    char *progname = NULL;
+    char *ptr = NULL;
+
+    ptr = strdup(name);
+    progname = basename(ptr);
+
+    printf("%s version: %d.%d.%d Build %04d on %s\n", progname, MAJOR, MINOR, REVER, SVNVER, DATE);
+    printf("Copyright (C) 2010 guowenxue <guowenxue@gmail.com>\n");
+
+    t_free(ptr);
+    return;
+}
+
+void usage(char *name)
+{
+    char *progname = NULL;
+    char *ptr = NULL;
+
+    ptr = strdup(name);
+    progname = basename(ptr);
+    printf("Usage1: comport -d <device> [-b <baudrate>][-s <settings>] [-x]\n");
+    printf("Usage2: comport [-i <driver port> <cmd> <arg>][--help][--version]\n");
+    printf(" -d[device  ]  device name\n");
+    printf(" -b[baudrate]  device baudrate (115200, 57600, 19200, 9600), default is 115200\n");
+    printf(" -s[settings]  device settings as like 8N1N(default setting)\n");
+    printf("                 - data bits: 8, 7\n");
+    printf("                 - parity: N=None, O=Odd, E=Even, S=Space\n");
+    printf("                 - stop bits: 1, 0\n");
+    printf("                 - flow control: N=None, H=Hardware, S=Software, B=Both\n");
+    printf(" -x[hex     ]  display received data in hex format\n");
+    printf(" -i[ioctl   ]  ioctl system call (cmd & arg only support int)\n");
+    printf(" -v[version ]  Display the program version\n");
+    printf(" -h[help    ]  Display this help information\n");
+
+    print_version(progname);
+
+    t_free(ptr);
+
+    return;
+}
+
+int do_ioctl(char *dev_name, int cmd, int arg)
+{
+    int fd = -1;
+    int retval = -1;
+    if (((fd = open(dev_name, O_RDWR)) < 0))
+    {
+        printf("Open device \"%s\" failure: %s\n", dev_name, strerror(errno));
+        return -1;
+    }
+
+    retval = ioctl(fd, cmd, arg);
+    printf("ioctl (%s, %d, %d) returned %d\n", dev_name, cmd, arg, retval);
+
+    close(fd);
+    return retval;
+}
+
+void signal_handler(int i_sig)
+{
+    if (SIGTERM == i_sig || SIGINT == i_sig)
+    {
+        g_ucProcToken = 0x00;
+    }
+    else if (20 == i_sig)
+    {
+        g_ucCtrlZ = 0x01;
+    }
+}
+
+
diff --git a/program/cp_library/test/makefile b/program/cp_library/test/makefile
new file mode 100644
index 0000000..16b401a
--- /dev/null
+++ b/program/cp_library/test/makefile
@@ -0,0 +1,121 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This Makefile used to compile all the C source code file in current 
+#                  folder to respective excutable binary files.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "11/11/2011 01:29:33 PM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+LIB_PATH=$(shell dirname ${PWD})
+LIB_NAME=$(shell basename ${LIB_PATH})
+INSTPATH=/tftp
+
+#ARCH ?= i386
+#ARCH?=arm926t
+ARCH?=arm920t
+
+#LINK_MODE=STATIC
+MODE=PRODUCTION
+DEBUG=1
+
+CFLAGS+=-Wall -Werror
+#CFLAGS+=-Wno-unused
+
+ifeq ("${MODE}", "PRODUCTION")
+    CFLAGS+=-DPRODUCTION_MODE
+endif
+ifdef DEBUG
+    CFLAGS+=-g -DDEBUG
+endif
+
+COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M")
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+    CROSS_COMPILE=
+else
+    CROSS_COMPILE=/opt/buildroot-2012.08/$(ARCH)/usr/bin/arm-linux-
+endif
+
+CFLAGS+=-I${LIB_PATH}
+LDFLAGS+=-L${LIB_PATH} -l${LIB_NAME}
+
+export CC=${CROSS_COMPILE}gcc
+export CXX=${CROSS_COMPILE}g++
+export AR=${CROSS_COMPILE}ar
+export AS=${CROSS_COMPILE}as
+export RANLIB=${CROSS_COMPILE}ranlib
+export STRIP=${CROSS_COMPILE}strip
+export CFLAGS
+export LDFLAGS
+export ARCH
+export LINK_MODE
+
+LDFLAGS+=-lpthread
+ifeq ("${LINK_MODE}", "STATIC")
+	CFLAGS+=--static
+	LDFLAGS+=-static
+else
+	LDFLAGS+=-ldl
+endif
+
+SRCFILES = $(wildcard *.c)
+BINARIES=$(SRCFILES:%.c=%)
+
+all: entry version binaries install
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **        Compile \"${BINARIES}\" for ${ARCH}         ";
+	@echo " =========================================================";
+
+version:
+	@echo "/* Generated by makefile, don't Edit it by hand */" > version.h 
+	@echo "#define DATE \"$(COMPILE_DATE)\"" >> version.h 
+	@echo "#define MAJOR 1" >>version.h 
+	@echo "#define MINOR 0" >>version.h 
+	@echo "#define REVER 0" >>version.h 
+	@if [ -f .svn/entries ] ; then \
+        echo "#define SVNVER `sed -n -e 11p .svn/entries`" >>version.h; \
+    else \
+        echo "#define SVNVER 0" >>version.h; \
+    fi;
+	@echo "" >> version.h 
+	@echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)'  >> version.h
+	@echo '#define copyright() printf("Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com\n")' >>version.h
+	@echo '#define banner(progname) {version(progname); copyright(); printf("\n");}' >>version.h
+	@echo "" >> version.h
+
+binaries:  ${BINARIES} 
+	@echo " Compile over"
+
+%:  %.c 
+	$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	@cp $(BINARIES) ${INSTPATH}
+
+clean: 
+	@rm -f version.h 
+	@rm -f *.o *.lo $(BINARIES) 
+	@rm -rf *.gdb *.a *.so *.elf*
+	@rm -f *.log
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/program/cp_library/test/sample.ini b/program/cp_library/test/sample.ini
new file mode 100644
index 0000000..ebac699
--- /dev/null
+++ b/program/cp_library/test/sample.ini
@@ -0,0 +1,11 @@
+
+[section1]
+key1                           = 15
+key2                           = hello
+
+
+[section2]
+key1                           = 30
+key2                           = world
+
+
diff --git a/program/cp_library/test/swe_tpdud.c b/program/cp_library/test/swe_tpdud.c
new file mode 100644
index 0000000..39b109e
--- /dev/null
+++ b/program/cp_library/test/swe_tpdud.c
@@ -0,0 +1,360 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  tpdud.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(10/30/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/30/2012 01:15:18 PM"
+ *                 
+ ********************************************************************************/
+
+#include <unistd.h>
+#include <getopt.h>
+#include <libgen.h>
+
+#include "cp_common.h"
+#include "cp_network.h"
+#include "cp_logger.h"
+#include "cp_proc.h"
+#include "cp_time.h"
+#include "swe_tpdud.h"
+#include "version.h"
+
+static void stop_tpdu_service(SWE_TPDU *tpdu)
+{
+    if(!tpdu)
+        return ;
+    
+    log_dbg("release tpdu contex [%p]\n", tpdu);
+
+    if( tpdu->dlink ) 
+    { 
+        log_nrml("stop tpdu service for downlink socket [%p:%d]\n", tpdu->dlink, tpdu->dlink->fd);
+        cp_fds_destroy_sock_clear(tpdu->dlink);
+        tpdu->dlink = NULL;
+    } 
+        
+    if( tpdu->ulink ) 
+    { 
+        log_nrml("stop tpdu service for uplink socket [%p:%d]\n", tpdu->ulink, tpdu->ulink->fd);
+        cp_fds_destroy_sock_clear(tpdu->ulink);
+        tpdu->ulink = NULL;
+    } 
+    
+    t_free(tpdu);
+}
+
+int proc_uplink_event(CP_SOCK *ulink)
+{
+    int           rv;
+    CP_SOCK       *dlink = NULL;
+    SWE_TPDU      *tpdu = NULL; 
+
+    if(!ulink || !(tpdu=ulink->privt) || !(dlink=tpdu->dlink))
+    {
+        log_err("tpdu address:[%p] ulink address:[%p] dlink address:[%p]\n", tpdu, ulink, dlink);
+        return -1;
+    }
+
+    if(ulink->status == SOCK_STAT_DISCONNECT)
+    {
+        goto stop_service;
+    }
+
+    if(ulink->event.events & CP_SOCK_EVENT_READ)
+    {
+        rv = cp_sock_recv(ulink);
+        if( 0==rv )
+        {
+            log_warn("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n", 
+                    ulink->fd, ulink->laddr, ulink->lport, ulink->raddr, ulink->rport);
+            goto stop_service;
+        }
+        else if(rv > 0)
+        {
+            log_nrml("Socket [%d %s:%d] receive %d bytes data:\n", ulink->fd, ulink->laddr, ulink->lport, rv);
+            cp_log_dump(LOG_LEVEL_DEBUG, ulink->rbuf->data, ulink->rbuf->len);
+
+            if(ulink->rbuf->len > 0)
+            { 
+                cp_string_move(dlink->sbuf, ulink->rbuf); 
+                cp_sock_send(dlink);
+            }
+        }
+        else
+        {
+            log_err("Socket [%d %s:%d] receive data failed: %s\n", ulink->fd, ulink->laddr, ulink->lport, strerror(errno));
+        }
+    }
+    else if(ulink->event.events & CP_SOCK_EVENT_IDLE_TIMEOUT)
+    {
+        log_warn("uplink socket [%d] is idle and to-do something here\n");
+    }
+    else if(ulink->event.events & CP_SOCK_EVENT_MSG_TIMEOUT)
+    {
+        log_warn("uplink socket [%d] message is timeout and to-do something here\n");
+    }
+
+
+
+    return 0;
+    
+stop_service:
+    stop_tpdu_service(tpdu);
+    return 0;
+}
+
+/* Connect to hostsim */
+int tpdu_connect_uplink(SWE_TPDU *tpdu)
+{
+    CP_SOCK       *ulink;
+    CP_SOCK       *dlink;  
+
+    if(!tpdu || !(dlink=tpdu->dlink))
+    {
+        log_err("tpdu address [%p] dlink address [%p]\n", tpdu, dlink);
+        return -1;
+    }
+
+    ulink = tpdu->ulink;
+    
+    ulink=cp_sock_connect_regist(dlink->fds, ulink, tpdu->raddr, tpdu->rport, 0, proc_uplink_event); 
+    if( !ulink ) /* connect failure */
+    {
+        /* the uplink connect failure or connect already, then we should 
+         * remove the downlink socket from task list  */
+        log_err("connect to remote [%s:%d] failure\n", tpdu->raddr, tpdu->rport);
+        tpdu->ulink = NULL;
+        return -1;
+    }
+    else /* connecting in progress */
+    { 
+        ulink->privt = tpdu; 
+        tpdu->ulink = ulink;
+        log_info("connect to remote [%s:%d] in progress\n", tpdu->raddr, tpdu->rport);
+        cp_fds_add_sock_task(dlink);
+        dlink->event.events = 0;  /* clear the events flag */
+    }
+
+    return 0;
+}
+
+int tpdu_service_route(CP_SOCK *dlink)
+{
+    int            rv = 0;
+
+    SWE_TPDU       *tpdu;
+
+    if( !dlink )
+        return -1;
+
+    tpdu = dlink->privt;
+
+    /* If it's first data incoming from the dlink, then we should 
+     * malloc a TPDU work context now and save it */
+    if( !tpdu ) 
+    { 
+        if( !(tpdu=t_malloc(sizeof(*tpdu))) ) 
+        {
+            log_err("Malloc TPDU work contex failure\n");
+            goto stop_service;
+        }
+        else
+        {
+            SWE_TPDU       *serv_tpdu;
+            log_info("malloc TPDU work contex [%p]\n", tpdu);
+
+            serv_tpdu = dlink->serv_sock->privt;
+            dlink->privt = tpdu; 
+            tpdu->dlink = dlink;
+            strcpy(tpdu->raddr, serv_tpdu->raddr);
+            tpdu->rport = serv_tpdu->rport;
+        }
+    }
+
+    log_dbg("Process socket [%d %s:%d] with event [%d]\n", dlink->fd, dlink->laddr, dlink->lport, dlink->event.events);
+
+    /* If there is data incoming from this socket, now we receive the data */
+    if(dlink->event.events & CP_SOCK_EVENT_READ)
+    {
+        rv = cp_sock_recv(dlink);
+        if( rv == 0 )
+        {
+            log_warn("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n", 
+                    dlink->fd, dlink->laddr, dlink->lport, dlink->raddr, dlink->rport);
+            goto stop_service;
+        }
+        else if( rv < 0)
+        {
+            log_err("Socket [%d %s:%d] receive data failed: %s\n", dlink->fd, dlink->laddr, dlink->lport, strerror(errno));
+            goto stop_service;
+        }
+
+        /* Receive data OK */
+        log_nrml("Socket [%d %s:%d] receive %d bytes data:\n", dlink->fd, dlink->laddr, dlink->lport, rv);
+        cp_log_dump(LOG_LEVEL_DEBUG, dlink->rbuf->data, dlink->rbuf->len);
+    }
+    else if(dlink->event.events & CP_SOCK_EVENT_HUP)
+    {
+        log_warn("socket [%d] remote already disconnect\n", dlink->fd);
+        dlink->status = SOCK_STAT_DISCONNECT;
+        goto stop_service;
+    }
+    else if(dlink->event.events & CP_SOCK_EVENT_IDLE_TIMEOUT)
+    {
+        log_warn("socket [%d] is idle and to-do something here\n");
+    }
+    else if(dlink->event.events & CP_SOCK_EVENT_MSG_TIMEOUT)
+    {
+        log_warn("socket [%d] message is timeout and to-do something here\n");
+    }
+
+    /* If we have receive some data already, now we need do TPDU parser to 
+     * get the remote server address and port */
+    if( dlink->rbuf->len > 0)
+    {
+        SWE_TPDU    *arg = dlink->serv_sock->privt;
+        /* To-Do: parser downlink data here and get the uplink IP address and port */
+        tpdu->rport = arg->rport;
+        strncpy(tpdu->raddr, arg->raddr, sizeof(tpdu->raddr));
+    }
+        
+    /* If not connect to the remote host or it's still connecting, then we do it again  */
+    if( !tpdu->ulink || (tpdu->ulink->status==SOCK_STAT_CONNECTING))
+    {
+        log_nrml("tpdu dlink: %p\n", tpdu->dlink);
+        if( tpdu_connect_uplink(tpdu) < 0 )
+            goto stop_service;
+    }
+
+    /* If connect to the remote host already, now we send the data to the remote host  */
+    if( !tpdu->ulink || (tpdu->ulink->status==SOCK_STAT_CONNECTED))
+    {
+        log_dbg("connect to remote [%s:%d] ok and send %d bytes data\n", tpdu->raddr, tpdu->rport, dlink->rbuf->len);
+        cp_fds_del_sock_task(dlink);
+        if(dlink->rbuf->len > 0)
+        {
+            cp_string_move(tpdu->ulink->sbuf, dlink->rbuf);
+            cp_sock_send(tpdu->ulink);  /* send the data to the remote host  */
+            return 0;
+        }
+    }
+
+    return 0;
+
+stop_service:
+    stop_tpdu_service(tpdu);
+    tpdu = NULL;
+    return 0;
+}
+
+void print_usage(char *progname)
+{
+    version(progname); 
+    printf("Usage: %s [OPTION]...\n", progname);
+    printf(" %s is a handle program to create a tunnel between an incoming and outgoing FD\n", progname); 
+
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n"); 
+    
+    printf(" -l[loglevel]  To configure the logger level [0(DIS)...8(MAX)], default 4[NRML]\n");
+    printf(" -p[port    ]  To configure the listening port, default [%d]\n", TPDUD_PORT);
+    printf(" -i[RemoteIP]  To configure the remote/outgoing IP, default [%s]\n", HOSTSIM_IP);
+    printf(" -o[outgoing]  To configure the remote/outgoing Port, default [%d]\n", HOSTSIM_PORT);
+    printf(" -h[help    ]  Display this help information\n");
+    printf(" -v[version ]  Display the program version\n");
+    printf("\n"); 
+    
+    return ;
+}
+
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    CP_FDS         *fds;
+    CP_SOCK        *sock;
+    SWE_TPDU       tpdu = {.lport=TPDUD_PORT, .raddr=HOSTSIM_IP, .rport=HOSTSIM_PORT};
+    int            opt;
+    int            loglevel = LOG_LEVEL_NRML;
+
+    struct option  long_options[] = 
+    { 
+        {"loglevel", required_argument, NULL, 'l'},
+        {"port", required_argument, NULL, 'p'},
+        {"host", required_argument, NULL, 'i'},
+        {"outgoing", required_argument, NULL, 'o'},
+        {"version", no_argument, NULL, 'v'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };
+
+    while ((opt = getopt_long(argc, argv, "l:p:i:o:vh", long_options, NULL)) != -1)
+    { 
+        switch (opt)
+        {
+            case 'l':
+                loglevel = atoi(optarg);
+                break;
+
+            case 'p':
+                tpdu.lport = atoi(optarg);
+                break;
+            
+            case 'i':
+                strncpy(tpdu.raddr, optarg, sizeof(tpdu.raddr));
+                break; 
+            
+            case 'o': 
+                tpdu.rport = atoi(optarg);
+                break;
+
+            case 'v':
+                version(basename(argv[0])); 
+                return EXIT_SUCCESS;
+
+            case 'h':  
+                print_usage(basename(argv[0]));
+                return EXIT_SUCCESS; 
+            
+            default: 
+                break; 
+        }
+    }
+
+    //if (!cp_log_init(NULL, "tpdud.log", LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open())
+    //if (!cp_log_init(NULL, "tpdud.log", loglevel, LOG_ROLLBACK_SIZE) || cp_log_open())
+    if (!cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open())
+    //if (!cp_log_init(NULL, DBG_LOG_FILE, loglevel, LOG_ROLLBACK_NONE) || cp_log_open())
+        goto cleanup;
+
+    cp_install_proc_signal();
+
+    if( !(fds=cp_fds_init(NULL, CP_DEF_MAX_EVENTS, CP_DEF_FDS_TIMEOUT)) )
+        goto cleanup;
+
+    if( !(sock=cp_sock_server_regist(fds, NULL, tpdu.lport, 0, tpdu_service_route, (void *)&tpdu)) )
+        goto cleanup;
+
+    while( !g_cp_signal.stop )
+    {
+        cp_fds_detect_event(fds);
+        cp_fds_proc_event(fds);
+        cp_sock_detect_timeout(fds);
+        micro_second_sleep(10);
+    }
+
+cleanup:
+    cp_sock_term_all_service_clear(fds);
+    cp_log_term(); 
+    return 0;
+} /* ----- End of main() ----- */
+
+
diff --git a/program/cp_library/test/swe_tpdud.h b/program/cp_library/test/swe_tpdud.h
new file mode 100644
index 0000000..0e66d03
--- /dev/null
+++ b/program/cp_library/test/swe_tpdud.h
@@ -0,0 +1,42 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  tpdud.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(11/19/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/19/2012 11:21:05 AM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __SWE_TPDUD_H
+#define __SWE_TPDUD_H
+
+#include <cp_sock.h>
+
+#define HOSTSIM_PORT          9002
+#define HOSTSIM_IP            "192.168.3.6"
+
+#define TPDUD_PORT            8000
+#define UPLINK_ADDR           HOSTSIM_IP
+#define UPLINK_PORT           HOSTSIM_PORT
+
+#define FLAG_TPDU_INIT        (1<<0)
+#define FLAG_TPDU_STOP        (1<<7)
+
+typedef struct _SWE_TPDU
+{
+    unsigned char       flag;
+    char                raddr[32]; /* uplink remote listen port */
+    int                 lport;     /* dlink  local listen port  */
+    int                 rport;     /* uplink remote IP address  */
+
+    CP_SOCK             *dlink;    /* listen port accept socket */
+    CP_SOCK             *ulink;    /* connect to hostsim socket */
+} SWE_TPDU;
+
+
+#endif
+
diff --git a/program/cp_library/test/test_array.c b/program/cp_library/test/test_array.c
new file mode 100644
index 0000000..d7bb2ab
--- /dev/null
+++ b/program/cp_library/test/test_array.c
@@ -0,0 +1,82 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_array.c
+ *    Description:  This file used to test the array library
+ *                 
+ *        Version:  1.0.0(08/14/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/14/2012 05:17:03 PM"
+ *                 
+ ********************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "cp_array.h"
+#include "cp_sock.h"
+#include "cp_logger.h"
+
+#define MAX_ITEMS  10
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    int i;
+
+    CP_SOCK *sock = NULL;
+    CP_SOCK *tmp = NULL;
+    CP_ARRAY *array = NULL;
+    
+    if (!cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open())
+        return 0;
+
+    if( !(array=cp_array_init(NULL, MAX_ITEMS)) )
+        return -1;
+
+    for (i=0; i<MAX_ITEMS; i++)
+    {
+        sock = cp_sock_init(NULL, 1024, 1024, 10, 30);
+        if( cp_array_add(array, sock)<0 )
+        {
+            cp_sock_term(sock);
+        }
+        else
+        {
+            if(i==3)
+            {
+                tmp = sock;
+            }
+        }
+    }
+
+    printf("Array usage %d/%d \n", cp_array_count(array), cp_array_size(array));
+
+    cp_array_travel(array);
+
+    if( !cp_array_rm_bydata(array, tmp) )
+    {
+        printf("remove and terminate sock [%p] from array\n", tmp);
+        cp_sock_term(tmp);
+    }
+    cp_array_travel(array);
+
+    cp_list_array_for_each(array, i, sock)
+    {
+        cp_sock_term(sock);
+    }
+
+    cp_array_term(array);
+    cp_log_term();
+
+    return 0;
+
+} /* ----- End of main() ----- */
+
diff --git a/program/cp_library/test/test_hal.c b/program/cp_library/test/test_hal.c
new file mode 100644
index 0000000..1f92ee5
--- /dev/null
+++ b/program/cp_library/test/test_hal.c
@@ -0,0 +1,210 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_hal.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(12/05/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "12/05/2012 04:52:59 PM"
+ *                 
+ ********************************************************************************/
+
+#include <libgen.h>
+#include <getopt.h>
+#include "cp_hal.h"
+
+#define  HAL_LIBRARY_TEST
+
+void test_led_hal_api(void)
+{
+    printf("+------------------------------------+\n");
+    printf("|          Test LED HAL API          |\n");
+    printf("+------------------------------------+\n");
+
+    printf("Turn all LED off\n");
+    hal_turn_led_off(LED_ALL);
+    sleep(2);
+
+    printf("Turn LED blink one by one\n");
+    hal_turn_led_blink(LED_SYS, MODE_FAST);
+    hal_turn_led_blink(LED_SIM1, MODE_FAST);
+    hal_turn_led_blink(LED_SIM2, MODE_FAST);
+    hal_turn_led_blink(LED_WIFI, MODE_FAST);
+    hal_turn_led_blink(LED_ETH, MODE_FAST);
+    sleep(4);
+
+    printf("Turn LED off one by one\n");
+    hal_turn_led_off(LED_SYS);
+    hal_turn_led_off(LED_SIM1);
+    hal_turn_led_off(LED_SIM2);
+    hal_turn_led_off(LED_WIFI);
+    hal_turn_led_off(LED_ETH);
+    sleep(4);
+
+    printf("Turn LED on one by one\n");
+    hal_turn_led_on(LED_SYS);
+    hal_turn_led_on(LED_SIM1);
+    hal_turn_led_on(LED_SIM2);
+    hal_turn_led_on(LED_WIFI);
+    hal_turn_led_on(LED_ETH);
+    sleep(4);
+
+    printf("Turn all LED off\n");
+    hal_turn_led_off(LED_ALL);
+    sleep(2);
+
+    printf("Turn all LED blink\n");
+    hal_turn_led_blink(LED_ALL, MODE_SLOW);
+    sleep(4);
+
+    printf("Turn all LED on\n");
+    hal_turn_led_on(LED_ALL);
+    sleep(4);
+    hal_turn_led_off(LED_ALL);
+}
+
+void test_buzzer_hal_api(void)
+{
+    printf("+------------------------------------+\n");
+    printf("|         Test Buzzer HAL API        |\n");
+    printf("+------------------------------------+\n");
+
+    printf("Turn buzzer on\n");
+    hal_turn_buzzer_on();
+    sleep(2);
+
+    printf("Turn buzzer off\n");
+    hal_turn_buzzer_off();
+    sleep(2);
+
+    printf("Turn buzzer beep for 5 times\n");
+    hal_turn_buzzer_beep(3);
+    sleep(4);
+
+    printf("Turn buzzer off\n");
+    hal_turn_buzzer_off();
+    sleep(3);
+
+    printf("Turn buzzer beep infinitely\n");
+    hal_turn_buzzer_beep(0);
+    sleep(5);
+
+    printf("Turn buzzer off\n");
+    hal_turn_buzzer_off();
+}
+
+void test_gprs_hal_api(void)
+{
+    int        rv = 0;
+
+    printf("+------------------------------------+\n");
+    printf("|         Test GPRS HAL API          |\n");
+    printf("+------------------------------------+\n");
+
+    hal_poweron_gprs(SIM_NONE);
+
+    rv = hal_check_simdoor(SIM_ALL);
+    printf("Check all SIM card present status: 0x%02x\n", rv);
+
+    rv = hal_check_simdoor(SIM1);
+    printf("Check SIM1 card present status: 0x%02x\n", rv);
+
+    rv = hal_check_simdoor(SIM2);
+    printf("Check SIM2 card present status: 0x%02x\n", rv);
+
+    printf("Get current working SIM card: 0x%02x\n", hal_get_worksim());
+
+    hal_set_worksim(SIM2);
+    printf("Set current working SIM to SIM2\n");
+
+    printf("Get current working SIM card: 0x%02x\n", hal_get_worksim());
+
+    hal_set_worksim(SIM1);
+    printf("Set current working SIM to SIM1\n");
+
+    printf("Get current working SIM card: 0x%02x\n", hal_get_worksim());
+    hal_poweroff_gprs();
+
+}
+
+void print_usage(char *progname)
+{
+    printf("Usage: %s [OPTION]...\n", progname);
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n");
+
+    printf(" -l[led     ]  Test LED HAL API\n");
+    printf(" -b[buzzer  ]  Test Buzzer HAL API\n");
+    printf(" -g[gprs    ]  Test GPRS HAL API\n");
+    printf(" -h[help    ]  Display this help information\n");
+
+
+}
+
+
+#ifdef HAL_LIBRARY_TEST
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    int                   opt;
+    char                  *progname=NULL;
+    int                   test_led = 0;
+    int                   test_gprs = 0;
+    int                   test_buzzer = 0;
+
+    struct option long_options[] = {
+        {"led", no_argument, NULL, 'l'},
+        {"buzzer", no_argument, NULL, 'b'},
+        {"gprs", no_argument, NULL, 'g'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };
+
+    progname = basename(argv[0]);
+
+    while ((opt = getopt_long(argc, argv, "bghl", long_options, NULL)) != -1)
+    {
+        switch(opt)
+        {
+            case 'b':
+                test_buzzer = 1;
+                break;
+
+            case 'l':
+                test_led = 1;
+                break;
+
+            case 'g':
+                test_gprs = 1;
+                break;
+
+            case 'h':
+                print_usage(progname);
+
+            default:
+                break;
+        }
+    }
+
+    if(!test_buzzer && !test_led && !test_gprs)
+        print_usage(progname);
+
+    if(test_buzzer)
+        test_buzzer_hal_api();
+
+    if(test_led)
+        test_led_hal_api();
+
+    if(test_gprs)
+        test_gprs_hal_api();
+
+    return 0;
+} /* ----- End of main() ----- */
+
+#endif /*  HAL_LIBRARY_TEST */
diff --git a/program/cp_library/test/test_hh.c b/program/cp_library/test/test_hh.c
new file mode 100644
index 0000000..68e5d8f
--- /dev/null
+++ b/program/cp_library/test/test_hh.c
@@ -0,0 +1,85 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2013 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_hh.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(01/28/2013~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "01/28/2013 03:35:36 PM"
+ *                 
+ ********************************************************************************/
+
+#include <libgen.h>
+#include "cp_comport.h"
+#define HH_DATAPORT     "/dev/ttySSHHR"
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    int             i;
+    COM_PORT        *comport = NULL;
+    unsigned char   sbuf[10]={0x02, 0x48, 0x32, 0x03, 0x20, 0x00, 0x00, 0xF6, 0xBE, 0x03};
+    unsigned char   rbuf[10];
+#if 0
+    char            *HH_DATAPORT = NULL;
+
+    if(argc != 2)
+    {
+        printf("Usage: %s [device name]\n", basename(argv[0]));
+        return 0;
+    }
+    HH_DATAPORT = argv[1];
+#endif
+
+    if( !(comport=comport_init(HH_DATAPORT, 115200, "8N1N")) )
+    {
+        printf("Initialise comport %s failure\n", HH_DATAPORT);
+        return -1;
+    }
+
+    if(comport_open(comport)<0)
+    {
+        printf("Open comport %s failure\n", HH_DATAPORT);
+        return -1;
+    }
+
+    if(comport_send(comport, (char *)sbuf, sizeof(sbuf)) < 0)
+    {
+        printf("Send 10 bytes data to %s failure\n", HH_DATAPORT);
+        return -1;
+    }
+    printf("Send %d bytes data to %s:\n>>", sizeof(sbuf), HH_DATAPORT);
+    for(i=0; i<10; i++)
+    {
+        printf("%02x ", sbuf[i]);
+    }
+    printf("\n");
+
+
+    memset(rbuf, 0, sizeof(rbuf));
+    if((i=comport_recv(comport, (char *)rbuf, sizeof(rbuf), 5000)) < 0)
+    {
+        printf("Receive 10 bytes data to %s failure\n", HH_DATAPORT);
+        return -1;
+    }
+
+    printf("Receive %d bytes data from %s:\n<<", i, HH_DATAPORT);
+    for(i=0; i<10; i++)
+    {
+        printf("%02x ", rbuf[i]);
+    }
+    printf("\n");
+
+    comport_term(comport);
+
+    return 0;
+} /* ----- End of main() ----- */
+
+
diff --git a/program/cp_library/test/test_ini.c b/program/cp_library/test/test_ini.c
new file mode 100644
index 0000000..c0633e2
--- /dev/null
+++ b/program/cp_library/test/test_ini.c
@@ -0,0 +1,48 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_ini.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(12/18/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "12/18/2012 10:54:09 AM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_iniparser.h"
+
+
+#define INI_CONF   "sample.ini"
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    dictionary   *ini;
+    FILE         *fp;
+
+    ini=iniparser_load(INI_CONF);
+
+    fp=fopen(INI_CONF, "w+");
+
+    iniparser_set(ini, "section1:key1", "30");
+
+
+    iniparser_dump(ini, stderr);
+
+    iniparser_dump_ini(ini, fp);
+
+
+    iniparser_freedict(ini);
+
+
+    return 0;
+} /* ----- End of main() ----- */
+
+
diff --git a/program/cp_library/test/test_klist.c b/program/cp_library/test/test_klist.c
new file mode 100644
index 0000000..5ff09cb
--- /dev/null
+++ b/program/cp_library/test/test_klist.c
@@ -0,0 +1,79 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_klist.c
+ *    Description:  This file is for test kernel space double linked list.
+ *                 
+ *        Version:  1.0.0(11/12/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/12/2012 04:26:39 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_klist.h"
+#include "cp_sock.h"
+
+//#define LIST_REVERSE
+
+void travel_list(struct list_head *head)
+{
+    CP_SOCK             *sock, *tsock;
+
+
+    if( (sock=cp_sock_init(NULL, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) )
+    {
+        list_add_tail(&sock->rlist, head);
+        printf("Add new socket %p to sock_list \n", sock);
+    }
+
+    /* Use list_for_each_entry to travel the socket list, we can not remove the node in it */
+    list_for_each_entry_safe(sock, tsock, head, rlist)
+    {
+        printf("Travel2 socket list on socket %p\n", sock);
+    }
+}
+
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    int                 i;
+    struct list_head    sock_list;
+    CP_SOCK             *sock, *tsock;
+
+    INIT_LIST_HEAD(&sock_list);
+
+    for(i=0; i<10; i++)
+    {
+        if( (sock=cp_sock_init(NULL, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) )
+        {
+            list_add_tail(&sock->rlist, &sock_list);
+            printf("Add socket %p to sock_list \n", sock);
+        }
+    }
+
+    /* Use list_for_each_entry to travel the socket list, we can not remove the node in it */
+    list_for_each_entry(sock, &sock_list, rlist)
+    {
+        printf("Travel socket list on socket %p\n", sock);
+    }
+
+    travel_list(&sock_list);
+
+    /* Use list_for_each_entry_safe to travel the socket list and destroy the socket */
+    list_for_each_entry_safe(sock, tsock, &sock_list, rlist)
+    {
+        list_del(&sock->rlist);
+        cp_sock_term(sock);
+        printf("Remove and destroy socket %p from socket list\n", sock);
+    }
+
+    return 0;
+} /* ----- End of main() ----- */
+
diff --git a/program/cp_library/test/test_logger.c b/program/cp_library/test/test_logger.c
new file mode 100644
index 0000000..e22b622
--- /dev/null
+++ b/program/cp_library/test/test_logger.c
@@ -0,0 +1,58 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  test_logger.c
+ *    Description:  This is the linux logger system test code.
+ *                 
+ *        Version:  1.0.0(08/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/08/2012 06:51:40 PM"
+ *                 
+ ********************************************************************************/
+
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <libgen.h>
+#include "cp_logger.h"
+
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    char    buf[30]="Hello World!\n";
+    char    file[FILENAME_LEN];
+
+    snprintf(file, FILENAME_LEN, "%s.log", basename(argv[0]) );
+
+    //if (! cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_NRML, LOG_ROLLBACK_NONE) )
+    //if (! cp_log_init(NULL, DEFAULT_LOGFILE, LOG_LEVEL_MAX, LOG_ROLLBACK_SIZE) )
+    if(! cp_log_init(NULL, file, LOG_LEVEL_MAX, 12) || cp_log_open() )
+        return 0;
+
+
+    while(1)
+    {
+        log_info("1connection.\n");
+        log_dbg("2connection.\n");
+        log_nrml("3connection.\n");
+        log_warn("4connection.\n");
+        log_err("5connection.\n");
+        log_fatal("6connection.\n");
+
+        cp_log_dump(LOG_LEVEL_DEBUG, buf, 30);
+
+        sleep(1);
+    } 
+    
+    cp_log_term();
+
+    return 0;
+} /* ----- End of main() ----- */
+
diff --git a/program/cp_library/test/test_queue.c b/program/cp_library/test/test_queue.c
new file mode 100644
index 0000000..aceddfb
--- /dev/null
+++ b/program/cp_library/test/test_queue.c
@@ -0,0 +1,84 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_queue.c
+ *    Description:  This file used to test the queue library
+ *                 
+ *        Version:  1.0.0(08/14/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/14/2012 05:17:03 PM"
+ *                 
+ ********************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "cp_queue.h"
+#include "cp_sock.h"
+
+#define MAX_ITEMS  10
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    int i;
+
+    CP_SOCK *sock = NULL;
+    CP_SOCK *tmp = NULL;
+
+    CP_QUEUE *queue = NULL;
+    
+    queue = cp_queue_init(NULL, MAX_ITEMS);
+
+    //for (i=0; i<MAX_ITEMS; i++)
+    for (i=0; i<MAX_ITEMS+10; i++)
+    //for (i=0; i<MAX_ITEMS-3; i++)
+    {
+        sock = cp_sock_init(NULL, 1024, 1024, 10, 30);
+        if( NULL==cp_enqueue(queue, sock) )
+        {
+            cp_sock_term(sock);
+        }
+        else
+        {
+            if(i==3)
+            {
+                tmp = sock;
+            }
+            printf("enqueue sock %p\n", sock);
+        }
+    }
+
+
+    printf("queue usage %d/%d \n", cp_queue_count(queue), cp_queue_size(queue));
+
+    cp_travel_queue(queue);
+    if( cp_rmqueue(queue, tmp) )
+    {
+        printf("remove and terminate sock [%p] from queue\n", tmp);
+        cp_sock_term(tmp);
+    }
+    cp_travel_queue(queue);
+
+    while(!cp_queue_is_empty(queue))
+    {
+        if( (sock=cp_dequeue(queue)) )
+        {
+            printf("Terminate socket: %p\n", sock);
+            cp_sock_term(sock);
+        }
+    }
+
+    cp_queue_destroy(queue);
+
+    return 0;
+
+} /* ----- End of main() ----- */
+
diff --git a/program/cp_library/test/test_sock_client.c b/program/cp_library/test/test_sock_client.c
new file mode 100644
index 0000000..028c921
--- /dev/null
+++ b/program/cp_library/test/test_sock_client.c
@@ -0,0 +1,110 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_client_sock.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(10/30/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/30/2012 01:15:18 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_network.h"
+#include "cp_logger.h"
+#include "cp_proc.h"
+#include "cp_time.h"
+
+
+//#define SERV_ADDR              "192.168.1.175"
+#define SERV_ADDR              "192.168.1.78"
+//#define SERV_ADDR              "kkernel.oicp.net"
+#define SERV_PORT              8880
+
+int service_route(CP_SOCK *sock)
+{
+    int      rv;
+
+    if( !sock ) 
+        return -1;
+
+    printf("Client socket [%d] get event: %d\n", sock->fd, sock->event.events);
+    if(sock->event.events & EPOLLIN)
+    {
+        rv = cp_sock_recv(sock);
+        if(!rv)
+        {
+            log_nrml("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n",
+                    sock->fd, sock->laddr, sock->lport, sock->raddr, sock->rport);
+
+            cp_fds_destroy_sock(sock);
+            g_cp_signal.stop = 1;
+
+            return 0;
+        }
+        else if(rv > 0)
+        {
+            log_nrml("Socket [%d %s:%d] receive [%d] bytes data:\n", sock->fd, sock->laddr, sock->lport, sock->rbuf->len);
+            cp_log_dump(LOG_LEVEL_DEBUG, sock->rbuf->data, sock->rbuf->len);
+            cp_string_clear_data(sock->rbuf);
+        }
+    }
+
+    return 0;
+}
+
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    CP_FDS     *fds;
+    CP_SOCK    *sock = NULL;
+
+    if ( !cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_NRML, LOG_ROLLBACK_NONE) || cp_log_open() )
+    //if ( !cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open() )
+        return -1;
+
+    cp_install_proc_signal();
+
+    if( !(fds=cp_fds_init(NULL, CP_DEF_MAX_EVENTS, CP_DEF_FDS_TIMEOUT)) )
+        return -2;
+
+    while( !g_cp_signal.stop )
+    {
+        sock = cp_sock_connect_regist(fds, sock, SERV_ADDR, SERV_PORT, 0, service_route);
+        if( sock && sock->status==SOCK_STAT_CONNECTING)
+        {
+            /* Connect is in progress */
+            sleep(1);
+            continue;
+        }
+        else if(!sock || sock->status!=SOCK_STAT_CONNECTED)
+        {
+            break;
+        }
+
+        cp_string_cstrcpy(sock->sbuf, "Hello World!\n");
+        printf("Send buffer data: %s", cp_string_data(sock->sbuf));
+        cp_sock_send(sock);
+
+        cp_fds_detect_event(fds);
+
+        cp_fds_proc_event(fds);
+
+        micro_second_sleep(100);
+    }
+
+    cp_sock_term_all_service_clear(fds);
+
+    cp_log_term();
+
+    return 0;
+} /* ----- End of main() ----- */
+
+
diff --git a/program/cp_library/test/test_sock_server.c b/program/cp_library/test/test_sock_server.c
new file mode 100644
index 0000000..f16393b
--- /dev/null
+++ b/program/cp_library/test/test_sock_server.c
@@ -0,0 +1,98 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_sock_server.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(10/30/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/30/2012 01:15:18 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_network.h"
+#include "cp_logger.h"
+#include "cp_proc.h"
+#include "cp_time.h"
+
+
+#define SERV_PORT1            8880
+#define SERV_PORT2            8881
+
+#define DOMAIN                "kkernel.oicp.net"
+#define IPADDR                "192.168.1.78"
+
+int service_route(CP_SOCK *sock)
+{
+    int           rv = 0;
+    log_nrml("Process socket [%d %s:%d] get event [%d]\n", sock->fd, sock->laddr, sock->lport, sock->event.events);
+
+    if(sock->event.events & EPOLLIN)
+    {
+        rv = cp_sock_recv(sock);
+        if(0==rv)
+        {
+            log_nrml("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n", 
+                    sock->fd, sock->laddr, sock->lport, sock->raddr, sock->rport);
+
+            cp_fds_destroy_sock(sock);
+
+            return 0;
+        }
+        else if(rv > 0)
+        {
+            log_nrml("Socket[%d] recv buffer %d bytes data:\n", sock->fd, sock->rbuf->len);
+            //cp_log_dump(LOG_LEVEL_NRML, sock->rbuf->data, sock->rbuf->len);
+
+            cp_string_move(sock->sbuf, sock->rbuf);
+
+            log_nrml("Socket[%d] send buffer %d bytes data:\n", sock->fd, sock->sbuf->len);
+            cp_sock_send(sock);
+            cp_string_clear_data(sock->sbuf);
+        }
+    }
+
+    return 0;
+}
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    CP_FDS     *fds;
+    CP_SOCK    *sock;
+
+    //if (!cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_NRML, LOG_ROLLBACK_NONE) || cp_log_open())
+    if (!cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open())
+        goto cleanup;
+
+    cp_install_proc_signal();
+
+    if( !(fds=cp_fds_init(NULL, CP_DEF_MAX_EVENTS, CP_DEF_FDS_TIMEOUT)) )
+        goto cleanup;
+
+    if( !(sock=cp_sock_server_regist(fds, NULL, SERV_PORT1, 0, service_route, NULL)) )
+        goto cleanup;
+
+    if( !(sock=cp_sock_server_regist(fds, NULL, SERV_PORT2, 0, service_route, NULL)) )
+        goto cleanup;
+
+    while( !g_cp_signal.stop )
+    { 
+        cp_fds_detect_event(fds);
+        cp_fds_proc_event(fds);
+        micro_second_sleep(10);
+    }
+
+cleanup:
+    cp_sock_term_all_service_clear(fds);
+    cp_log_term();
+    return 0;
+} /* ----- End of main() ----- */
+
+
diff --git a/program/cp_library/test/test_string.c b/program/cp_library/test/test_string.c
new file mode 100644
index 0000000..0b8d4f3
--- /dev/null
+++ b/program/cp_library/test/test_string.c
@@ -0,0 +1,77 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_string.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(11/27/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/27/2012 01:28:39 PM"
+ *                 
+ ********************************************************************************/
+
+#include <cp_string.h>
+
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    int            i;
+    cp_string      *rcv;
+    cp_string      *snd;
+
+    rcv = cp_string_create_empty(64);
+    snd = cp_string_create_empty(64);
+
+    printf("=======================\n");
+    printf("Test cp_string_copy \n");
+    printf("=======================\n");
+    cp_string_clear_data(rcv);
+    cp_string_cstrcpy(rcv, "Hello world!");
+    printf("Receive buffer data:\n");
+    cp_string_dump(rcv);
+
+    for(i=0; i<20; i++) 
+    {
+        if( cp_string_copy(snd, rcv) > 0)
+        {
+            printf("[%d] Send buffer data:\n", i);
+            cp_string_dump(snd);
+        }
+    }
+
+    printf("\n=======================\n");
+    printf("Test cp_string_move \n");
+    printf("=======================\n");
+
+    cp_string_clear_data(snd);
+    cp_string_clear_data(rcv);
+    for(i=0; i<20; i++) 
+    {
+        cp_string_cstrcpy(rcv, "Hello world!");
+        //printf("Set new receive buffer data [%d] bytes:\n", cp_string_len(rcv));
+        cp_string_dump(rcv);
+
+        if( cp_string_move(snd, rcv) > 0)
+        {
+            printf("[%d] Send buffer [%d] bytes data:\n", i, cp_string_len(snd));
+            cp_string_dump(snd);
+            
+            printf("[%d] receive buffer [%d] bytes data:\n", i, cp_string_len(rcv));
+            cp_string_dump(rcv);
+        }
+    }
+
+    cp_string_destroy(rcv);
+    cp_string_destroy(snd);
+
+
+    return 0;
+} /* ----- End of main() ----- */
+
diff --git a/program/cp_library/test/test_vector.c b/program/cp_library/test/test_vector.c
new file mode 100644
index 0000000..97231a9
--- /dev/null
+++ b/program/cp_library/test/test_vector.c
@@ -0,0 +1,67 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  test_vector.c
+ *    Description:  This file used to test the vector library
+ *                 
+ *        Version:  1.0.0(08/14/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/14/2012 05:17:03 PM"
+ *                 
+ ********************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "cp_vector.h"
+#include "cp_sock.h"
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+
+    int i, n;
+    CP_SOCK *p = NULL;
+
+    CP_VECTOR *v = cp_vector_init(1024);
+
+    for (i = 0; i < 10; i++)
+    {
+        p = cp_sock_init(NULL, 1024, 1024, 10, 30);
+        cp_vector_add(v, i, p);
+    }
+
+    n = cp_vector_count(v);
+    for (i = 0; i < n; i++)
+    {
+        p = cp_vector_get(v, i);
+        printf("%d: %p\n", i, p);
+    }
+
+    p = cp_sock_init(NULL, 1024, 1024, 10, 30);
+    cp_vector_add(v, 28, p);
+    printf("Set 28: %p\n", p);
+
+    for (i=0; i <cp_vector_size(v); i++)
+    {
+        p = cp_vector_get(v, i);
+        if(p)
+        {
+            printf("Terminate socket %i: %p\n", i, p);
+            cp_sock_term(p);
+        }
+    }
+
+    cp_vector_destroy(v);
+
+    return 0;
+
+} /* ----- End of main() ----- */
+
diff --git a/program/fwed/etc/default_apn.conf b/program/fwed/etc/default_apn.conf
new file mode 100644
index 0000000..6ad590d
--- /dev/null
+++ b/program/fwed/etc/default_apn.conf
@@ -0,0 +1,741 @@
+[202-01]  carrier='Cosmote Wireless Internet' apn='internet' uid='' pwd=''
+[202-05]  carrier='Vf Mobile Internet' apn='internet.vodafone.gr' uid='' pwd=''
+[202-10]  carrier='Wind Internet' apn='gint.b-online.gr' uid='' pwd=''
+[204-04]  carrier='Vodafone NL' apn='live.vodafone.com' uid='vodafone' pwd='vodafone'
+[204-08]  carrier='KPN Internet' apn='portalmmm.nl' uid='' pwd=''
+[204-12]  carrier='Telfort Internet' apn='internet' uid='' pwd=''
+[204-16]  carrier='T-Mobile Internet' apn='internet' uid='' pwd=''
+[204-20]  carrier='Rabo Mobiel' apn='rabo.plus' uid='' pwd=''
+[206-01]  carrier='Proximus Internet' apn='internet.proximus.be' uid='' pwd=''
+[206-01]  carrier='Telenet Internet' apn='telenetwap.be' uid='' pwd=''
+[206-05]  carrier='Telenet' apn='telenetwap.be' uid='' pwd=''
+[206-10]  carrier='Mobistar' apn='mworld.be' uid='mobistar' pwd='mobistar'
+[206-20]  carrier='Base' apn='gprs.base.be' uid='base' pwd='base'
+[208-01]  carrier='Orange World' apn='orange' uid='orange' pwd='orange'
+[208-01]  carrier='Orange Entreprise' apn='orange-mib' uid='orange' pwd='orange'
+[208-01]  carrier='Orange Internet' apn='orange.fr' uid='orange' pwd='orange'
+[208-01]  carrier='Orange Internet Entreprise' apn='internet-entreprise' uid='orange' pwd='orange'
+[208-10]  carrier='SFR webphone' apn='sl2sfr' uid='' pwd=''
+[208-10]  carrier='SFR Mobile' apn='wapsfr' uid='' pwd=''
+[208-10]  carrier='NRJWEB' apn='fnetnrj' uid='' pwd=''
+[208-01]  carrier='VM WAP' apn='ofnew.fr' uid='orange' pwd='orange'
+[208-01]  carrier='Tele2 WAP' apn='ofnew.fr' uid='orange' pwd='orange'
+[208-01]  carrier='Carrefour WAP' apn='ofnew.fr' uid='orange' pwd='orange'
+[208-10]  carrier='Auchan WAP' apn='wap65' uid='' pwd=''
+[208-01]  carrier='NRJWEB' apn='ofnew.fr' uid='orange' pwd='orange'
+[208-10]  carrier='WAP Simplicime' apn='wapdebitel' uid='' pwd=''
+[208-10]  carrier='WAP LeclercMobile' apn='wap66' uid='' pwd=''
+[208-10]  carrier='Coriolis WAP' apn='wapcoriolis' uid='' pwd=''
+[208-10]  carrier='Keyyo Mobile Internet' apn='internet68' uid='' pwd=''
+[208-10]  carrier='WEB La Poste Mobile' apn='wapdebitel' uid='' pwd=''
+[214-01]  carrier='Internet movil' apn='airtelwap.es' uid='wap@wap' pwd='wap125'
+[214-03]  carrier='Orange Internet M�vil' apn='orangeworld' uid='orange' pwd='orange'
+[214-03]  carrier='Orange Internet PC' apn='internet' uid='orange' pwd='orange'
+[214-04]  carrier='Yoigo Navegador' apn='internet' uid='' pwd=''
+[214-06]  carrier='INTERNET GPRS' apn='airtelnet.es' uid='vodafone' pwd='vodafone'
+[214-06]  carrier='Euskaltel Internet' apn='internet.euskaltel.mobi' uid='CLIENTE' pwd='EUSKALTEL'
+[214-06]  carrier='Internet R' apn='internet.mundo-r.com' uid='' pwd=''
+[214-06]  carrier='TeleCable Internet' apn='internet.telecable.es' uid='telecable' pwd='telecable'
+[214-07]  carrier='Movistar' apn='telefonica.es' uid='telefonica' pwd='telefonica'
+[214-07]  carrier='Conexi�n compartida' apn='movistar.es' uid='MOVISTAR' pwd='MOVISTAR'
+[214-08]  carrier='Euskaltel Internet' apn='internet.euskaltel.mobi' uid='CLIENTE' pwd='EUSKALTEL'
+[214-16]  carrier='TeleCable Internet' apn='internet.telecable.es' uid='telecable' pwd='telecable'
+[216-01]  carrier='Telenor Online' apn='online' uid='' pwd=''
+[216-30]  carrier='Web' apn='wnw' uid='' pwd=''
+[216-70]  carrier='VF internet' apn='internet.vodafone.net' uid='' pwd=''
+[216-70]  carrier='VMAX Internet' apn='vitamax.internet.vodafone.net' uid='' pwd=''
+[218-03]  carrier='HT Eronet' apn='wap.eronet.ba' uid='' pwd=''
+[218-05]  carrier='m:tel' apn='3g1' uid='' pwd=''
+[218-90]  carrier='Bh Mobile' apn='active.bhmobile.ba' uid='' pwd=''
+[219-01]  carrier='T-Mobile' apn='web.htgprs' uid='' pwd=''
+[219-02]  carrier='Tele2' apn='internet.tele2.hr' uid='' pwd=''
+[219-10]  carrier='Broadband' apn='data.vip.hr' uid='38591' pwd='38591'
+[220-01]  carrier='Telenor WAP' apn='internet' uid='telenor' pwd='gprs'
+[220-02]  carrier='Telenor MNE internet' apn='internet' uid='gprs' pwd='gprs'
+[220-03]  carrier='mt:s wap' apn='gprswap' uid='mts' pwd='64'
+[220-04]  carrier='T-Mobile Internet' apn='tmcg-wnw' uid='38267' pwd='38267'
+[220-05]  carrier='Vip GPRS' apn='vipmobile' uid='vipmobile' pwd='vipmobile'
+[222-01]  carrier='TIM WAP' apn='wap.tim.it' uid='WAPTIM' pwd='WAPTIM'
+[222-01]  carrier='TIM WEB' apn='ibox.tim.it' uid='' pwd=''
+[222-10]  carrier='Vodafone Internet' apn='mobile.vodafone.it' uid='' pwd=''
+[222-10]  carrier='Vodafone WEB' apn='web.omnitel.it' uid='' pwd=''
+[222-88]  carrier='WIND WEB' apn='internet.wind' uid='' pwd=''
+[222-88]  carrier='WIND BIZ WEB' apn='internet.wind.biz' uid='' pwd=''
+[222-99]  carrier='3' apn='tre.it' uid='' pwd=''
+[222-99]  carrier='Fastweb WEB' apn=' apn.fastweb.it' uid='' pwd=''
+[226-01]  carrier='Vodafone live!' apn='live.vodafone.com' uid='live' pwd='vodafone'
+[226-01]  carrier='Vodafone live! PRE' apn='live.pre.vodafone.com' uid='live' pwd='vodafone'
+[226-03]  carrier='Cosmote Internet' apn='internet' uid='' pwd=''
+[226-03]  carrier='web'n'walk' apn='wnw' uid='wnw' pwd='wnw'
+[226-06]  carrier='web'n'walk' apn='wnw' uid='wnw' pwd='wnw'
+[226-10]  carrier='Orange WAP' apn='wap' uid='' pwd=''
+[226-10]  carrier='Orange Internet' apn='net' uid='' pwd=''
+[228-01]  carrier='Swisscom Services' apn='gprs.swisscom.ch' uid='' pwd=''
+[228-02]  carrier='Sunrise live' apn='internet' uid='' pwd=''
+[228-03]  carrier='Orange Internet' apn='internet' uid='' pwd=''
+[230-01]  carrier='T-Mobile CZ' apn='internet.t-mobile.cz' uid='wap' pwd='wap'
+[230-02]  carrier='O2 internet' apn='internet' uid='' pwd=''
+[230-03]  carrier='GPRS Web' apn='internet' uid='' pwd=''
+[231-01]  carrier='Orange SK' apn='internet' uid='' pwd=''
+[231-01]  carrier='Orange World' apn='orangewap' uid='wap' pwd='wap'
+[231-02]  carrier='T-Mobile internet' apn='internet' uid='' pwd=''
+[231-06]  carrier='O2 internet' apn='o2internet' uid='' pwd=''
+[232-01]  carrier='A1' apn='a1.net' uid='ppp@a1plus.at' pwd='ppp'
+[232-01]  carrier='aonMobil' apn='aon.at' uid='mobil@aon.at' pwd='ppp'
+[232-03]  carrier='T-Mobile Internet' apn='gprsinternet' uid='t-mobile' pwd='tm'
+[232-05]  carrier='Orange Smartphone' apn='orange.smartphone' uid='web' pwd='web'
+[232-07]  carrier='tele.ring web' apn='web' uid='web@telering.at' pwd='web'
+[232-10]  carrier='Planet3' apn='drei.at' uid='' pwd=''
+[232-11]  carrier='data.bob' apn='bob.at' uid='data@bob.at' pwd='ppp'
+[232-12]  carrier='YESSS! GPRS' apn='web.yesss.at' uid='' pwd=''
+[234-01]  carrier='UBIQUISYS' apn='internet' uid='' pwd=''
+[234-02]  carrier='O2 MOBILE WEB' apn='mobile.o2.co.uk' uid='O2web' pwd='O2web'
+[234-10]  carrier='O2 Mobile Web' apn='mobile.o2.co.uk' uid='o2web' pwd='password'
+[234-10]  carrier='O2 PREPAY' apn='payandgo.o2.co.uk' uid='payandgo' pwd='password'
+[234-10]  carrier='TESCO' apn='prepay.tesco-mobile.com' uid='tescowap' pwd='password'
+[234-11]  carrier='O2 MOBILE WEB' apn='mobile.o2.co.uk' uid='O2web' pwd='O2web'
+[234-11]  carrier='O2 MOBILE WEB' apn='mobile.o2.co.uk' uid='O2web' pwd='O2web'
+[234-15]  carrier='Vodafone UK' apn='wap.vodafone.co.uk' uid='wap' pwd='wap'
+[234-15]  carrier='Vodafone UK Prepay' apn='pp.vodafone.co.uk' uid='wap' pwd='wap'
+[234-20]  carrier='3' apn='three.co.uk' uid='' pwd=''
+[234-30]  carrier='T-Mobile UK' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm'
+[234-30]  carrier='Virgin Media' apn='goto.virginmobile.uk' uid='user' pwd=''
+[234-31]  carrier='T-Mobile Internet' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm'
+[234-31]  carrier='T-Mobile Picture Message' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm'
+[234-32]  carrier='T-Mobile Internet' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm'
+[234-32]  carrier='T-Mobile Picture Message' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm'
+[234-33]  carrier='Orange Internet' apn='orangeinternet' uid='' pwd=''
+[234-33]  carrier='Consumer Broadband' apn='consumerbroadband' uid='' pwd=''
+[234-34]  carrier='Orange internet' apn='orangeinternet' uid='' pwd=''
+[234-50]  carrier='pepperWEB (Jersey)' apn='pepper' uid='' pwd=''
+[234-55]  carrier='C&W Guernsey Internet' apn='internet' uid='' pwd=''
+[234-58]  carrier='3G HSDPA' apn='3gpronto' uid='' pwd=''
+[234-58]  carrier='Manx Telecom Contract WEB' apn='web.manxpronto.net' uid='gprs' pwd='gprs'
+[234-86]  carrier='Orange internet' apn='orangeinternet' uid='' pwd=''
+[238-01]  carrier='TDC' apn='internet' uid='' pwd=''
+[238-01]  carrier='TDC Song WAP' apn='internet.no' uid='' pwd=''
+[238-01]  carrier='TDC WAP' apn='wap' uid='' pwd=''
+[238-01]  carrier='Telmore Wap' apn='wap' uid='' pwd=''
+[238-02]  carrier='Telenor Internet' apn='Internet' uid='' pwd=''
+[238-06]  carrier='3' apn='data.tre.dk' uid='' pwd=''
+[238-20]  carrier='Internet' apn='websp' uid='' pwd=''
+[238-20]  carrier='Telia Internet' apn='www.internet.mtelia.dk' uid='' pwd=''
+[238-77]  carrier='Telenor Internet' apn='Internet' uid='' pwd=''
+[240-01]  carrier='Telia SE WAP' apn='online.telia.se' uid='' pwd=''
+[240-17]  carrier='Halebop Internet' apn='halebop.telia.se' uid='' pwd=''
+[240-02]  carrier='3' apn='data.tre.se' uid='' pwd=''
+[240-04]  carrier='Telenor Mobilsurf' apn='services.telenor.se' uid='' pwd=''
+[240-06]  carrier='Telenor Mobilsurf' apn='services.telenor.se' uid='' pwd=''
+[240-07]  carrier='Tele2' apn='internet.tele2.no' uid='' pwd=''
+[240-07]  carrier='Tele2' apn='internet.tele2.se' uid='' pwd=''
+[240-08]  carrier='Telenor Mobilsurf' apn='services.telenor.se' uid='' pwd=''
+[240-09]  carrier='TelenorMobilsurf' apn='services.telenor.se' uid='' pwd=''
+[240-10]  carrier='Spring data' apn='data.springmobil.se' uid='' pwd=''
+[242-01]  carrier='Ventelo Internett' apn='internet.ventelo.no' uid='' pwd=''
+[242-01]  carrier='Telenor' apn='telenor' uid='' pwd=''
+[242-02]  carrier='NetCom Internett' apn='wap' uid='' pwd=''
+[242-04]  carrier='Tele2 Internett' apn='internet.tele2.no' uid='' pwd=''
+[242-05]  carrier='NwN Internet' apn='internet' uid='' pwd=''
+[244-03]  carrier='DNA Internet' apn='internet' uid='' pwd=''
+[244-04]  carrier='DNA Internet' apn='internet' uid='' pwd=''
+[244-05]  carrier='Elisa Internet' apn='internet' uid='' pwd=''
+[244-10]  carrier='TDC Internet' apn='internet.song.fi' uid='song@internet' pwd='songnet'
+[244-12]  carrier='DNA Pro Internet' apn='dnapro.fi' uid='' pwd=''
+[244-12]  carrier='TDC Internet Finland' apn='inet.tdc.fi' uid='' pwd=''
+[244-13]  carrier='DNA Internet' apn='internet' uid='' pwd=''
+[244-21]  carrier='Saunalahti Internet' apn='internet.saunalahti' uid='' pwd=''
+[244-91]  carrier='SONERA Internet' apn='internet' uid='' pwd=''
+[246-01]  carrier='Omnitel Internet' apn='omnitel' uid='omni' pwd='omni'
+[246-02]  carrier='Bite LT WAP' apn='wap' uid='' pwd=''
+[246-03]  carrier='Tele2 Internet LT' apn='internet.tele2.lt' uid='wap' pwd='wap'
+[247-01]  carrier='LMT Internet' apn='internet.lmt.lv' uid='' pwd=''
+[247-02]  carrier='Tele2 LV Internet' apn='internet.tele2.lv' uid='wap' pwd='wap'
+[247-05]  carrier='Bite LV Internet' apn='internet' uid='' pwd=''
+[247-05]  carrier='Bite LV WAP' apn='wap' uid='' pwd=''
+[248-01]  carrier='EMT Internet' apn='internet.emt.ee' uid='' pwd=''
+[248-01]  carrier='EMT WAP' apn='wap.emt.ee' uid='' pwd=''
+[248-02]  carrier='Elisa Internet' apn='internet' uid='' pwd=''
+[248-02]  carrier='Elisa WAP' apn='wap' uid='' pwd=''
+[248-03]  carrier='Tele2 Internet' apn='internet.tele2.ee' uid='' pwd=''
+[250-01]  carrier='MTS Internet' apn='internet.mts.ru' uid='mts' pwd='mts'
+[250-02]  carrier='Megafon Internet' apn='internet' uid='gdata' pwd='gdata'
+[250-99]  carrier='Beeline Internet' apn='internet.beeline.ru' uid='beeline' pwd='beeline'
+[250-20]  carrier='TELE2 Internet' apn='internet.tele2.ru' uid='' pwd=''
+[255-01]  carrier='MTS-internet' apn='internet' uid='' pwd=''
+[255-02]  carrier='Beeline-internet' apn='internet.beeline.ua' uid='' pwd=''
+[255-03]  carrier='Kyivstar Internet' apn='www.kyivstar.net' uid='' pwd=''
+[255-06]  carrier='life:) internet' apn='internet' uid='' pwd=''
+[255-07]  carrier='Utel Internet' apn='3g.utel.ua' uid='' pwd=''
+[260-01]  carrier='Plus Internet' apn='internet' uid='' pwd=''
+[260-02]  carrier='T-mobile.pl' apn='internet' uid='' pwd=''
+[260-02]  carrier='heyahinternet' apn='heyah.pl' uid='' pwd=''
+[260-03]  carrier='Internet' apn='Internet' uid='internet' pwd='internet'
+[260-06]  carrier='P4 Internet' apn='internet' uid='' pwd=''
+[262-01]  carrier='T-Mobile Internet' apn='internet.t-mobile' uid='t-mobile' pwd='tm'
+[262-02]  carrier='Vodafone DE' apn='web.vodafone.de' uid='' pwd=''
+[262-03]  carrier='E-Plus Web GPRS' apn='internet.eplus.de' uid='eplus' pwd='internet'
+[262-07]  carrier='o2' apn='internet' uid='' pwd=''
+[262-07]  carrier='o2 Internet Prepaid' apn='pinternet.interkom.de' uid='' pwd=''
+[268-01]  carrier='Vodafone Net2' apn='net2.vodafone.pt' uid='vodafone' pwd='vodafone'
+[268-03]  carrier='Optimus Internet' apn='umts' uid='' pwd=''
+[268-06]  carrier='tmn internet' apn='internet' uid='' pwd=''
+[270-01]  carrier='LUXGSM WAP' apn='wap.pt.lu' uid='wap' pwd='wap'
+[270-77]  carrier='Tango WAP' apn='internet' uid='tango' pwd='tango'
+[270-99]  carrier='Vox Mobile' apn='vox.lu' uid='' pwd=''
+[272-01]  carrier='Vodafone IE' apn='live.vodafone.com' uid='' pwd=''
+[272-02]  carrier='O2 Ireland' apn='internet' uid='' pwd=''
+[272-03]  carrier='Meteor Data' apn='data.mymeteor.ie' uid='' pwd=''
+[272-05]  carrier='3' apn='3ireland.ie' uid='' pwd=''
+[272-11]  carrier='Tesco' apn='tescomobile.liffeytelecom.com' uid='' pwd=''
+[274-01]  carrier='Siminn Internet' apn='internet' uid='' pwd=''
+[274-02]  carrier='Vodafone Internet' apn='gprs.is' uid='' pwd=''
+[274-11]  carrier='Net Nova' apn='net.nova.is' uid='' pwd=''
+[278-01]  carrier='Vodafone MT' apn='internet' uid='internet' pwd='internet'
+[280-01]  carrier='CYTA' apn='cytamobile' uid='user' pwd='pass'
+[280-10]  carrier='MTN Wap' apn='wap' uid='wap' pwd='wap'
+[284-01]  carrier='M-Tel' apn='wap-gprs.mtel.bg' uid='' pwd=''
+[284-03]  carrier='Vivacom WAP' apn='wap.vivacom.bg' uid='wap' pwd='wap'
+[284-05]  carrier='GPRS GLOBUL' apn='globul' uid='' pwd=''
+[286-01]  carrier='Turkcell Internet' apn='internet' uid='gprs' pwd='gprs'
+[286-02]  carrier='Vodafone Internet' apn='internet' uid='vodafone' pwd='vodafone'
+[286-03]  carrier='Avea Internet' apn='internet' uid='wap' pwd='wap'
+[290-01]  carrier='Tele Internet' apn='internet' uid='' pwd=''
+[293-40]  carrier='Vodafone live!' apn='internet.simobil.si' uid='simobil' pwd='internet'
+[293-41]  carrier='Planet' apn='internet' uid='mobitel' pwd='internet'
+[294-01]  carrier='T-Mobile MK Internet' apn='internet' uid='internet' pwd='t-mobile'
+[294-02]  carrier='Cosmofon' apn='Internet' uid='Internet' pwd='Internet'
+[294-03]  carrier='Internet' apn='vipoperator' uid='vipoperator' pwd='vipoperator'
+[297-02]  carrier='T-Mobile Internet' apn='tmcg-wnw' uid='38267' pwd='38267'
+[302-220] carrier='TELUS' apn='sp.telus.com' uid='' pwd=''
+[302-320] carrier='MOWAP' apn='wap.davewireless.com' uid='' pwd=''
+[302-370] carrier='Fido Internet' apn='fido-core-appl1.apn' uid='' pwd=''
+[302-370] carrier='Fido Tethering' apn='isp.fido.apn' uid='' pwd=''
+[302-720] carrier='Chatr Internet' apn='chatrweb.apn' uid='' pwd=''
+[302-490] carrier='Wind CA' apn='internet.windmobile.ca' uid='' pwd=''
+[302-500] carrier='Videotron' apn='media.videotron' uid='' pwd=''
+[302-610] carrier='Bell Internet' apn='pda.bell.ca' uid='' pwd=''
+[302-720] carrier='Rogers Tethering' apn='isp.apn' uid='' pwd=''
+[302-720] carrier='Rogers' apn='rogers-core-appl1.apn' uid='' pwd=''
+[302-780] carrier='SaskTel' apn='pda.stm.sk.ca' uid='' pwd=''
+[310-30]  carrier='Internet' apn='private.centennialwireless.com' uid='privuser' pwd='priv'
+[310-90]  carrier='Internet' apn='isp' uid='' pwd=''
+[310-100] carrier='PLATWEB' apn='plateauweb' uid='' pwd=''
+[310-160] carrier='T-Mobile US 160' apn='epc.tmobile.com' uid='' pwd=''
+[310-170] carrier='DataConnect' apn='isp.cingular' uid='' pwd=''
+[310-200] carrier='T-Mobile US 200' apn='epc.tmobile.com' uid='' pwd=''
+[310-210] carrier='T-Mobile US 210' apn='epc.tmobile.com' uid='' pwd=''
+[310-220] carrier='T-Mobile US 220' apn='epc.tmobile.com' uid='' pwd=''
+[310-230] carrier='T-Mobile US 230' apn='epc.tmobile.com' uid='' pwd=''
+[310-240] carrier='T-Mobile US 240' apn='epc.tmobile.com' uid='' pwd=''
+[310-250] carrier='T-Mobile US 250' apn='epc.tmobile.com' uid='' pwd=''
+[310-260] carrier='T-Mobile US' apn='epc.tmobile.com' uid='' pwd=''
+[310-270] carrier='T-Mobile US 270' apn='epc.tmobile.com' uid='' pwd=''
+[310-310] carrier='T-Mobile US 310' apn='epc.tmobile.com' uid='' pwd=''
+[310-380] carrier='Cingular 380 ATT' apn='proxy' uid='' pwd=''
+[310-410] carrier='Cingular 410' apn='wap.cingular' uid='WAP@CINGULARGPRS.COM' pwd='CINGULAR1'
+[310-470] carrier='DataConnect' apn='isp.cingular' uid='' pwd=''
+[310-470] carrier='MediaNet' apn='wap.cingular' uid='WAP@CINGULARGPRS.COM' pwd='CINGULAR1'
+[310-480] carrier='DataConnect' apn='isp.cingular' uid='' pwd=''
+[310-480] carrier='MediaNet' apn='wap.cingular' uid='WAP@CINGULARGPRS.COM' pwd='CINGULAR1'
+[310-490] carrier='T-Mobile US 490' apn='epc.tmobile.com' uid='' pwd=''
+[310-490] carrier='GoodCall Picture Message' apn='good.call' uid='' pwd=''
+[310-580] carrier='T-Mobile US 580' apn='epc.tmobile.com' uid='' pwd=''
+[310-610] carrier='EpicINT' apn='internet.epictouch' uid='' pwd=''
+[310-660] carrier='T-Mobile US 660' apn='epc.tmobile.com' uid='' pwd=''
+[310-770] carrier='WEB 2' apn='i2.iwireless.com' uid='' pwd=''
+[310-770] carrier='Picture Messaging' apn='wap1.iwireless.com' uid='' pwd=''
+[310-770] carrier='PIAPicture Messaging' apn='wap9.iwireless.com' uid='' pwd=''
+[310-800] carrier='T-Mobile US 800' apn='epc.tmobile.com' uid='' pwd=''
+[310-840] carrier='Internet' apn='isp' uid='' pwd=''
+[310-910] carrier='WOW_WAP' apn='wap.firstcellular.com' uid='' pwd=''
+[311-210] carrier='Farmers GPRS' apn='internet.farmerswireless.com' uid='' pwd=''
+[330-110] carrier='INTERNET CLARO' apn='internet.claropr.com' uid='' pwd=''
+[334-20]  carrier='Internet' apn='internet.itelcel.com' uid='webgprs' pwd='webgprs2002'
+[334-03]  carrier='movistar Internet' apn='internet.movistar.mx' uid='movistar' pwd='movistar'
+[334-30]  carrier='movistar Internet' apn='internet.movistar.mx' uid='movistar' pwd='movistar'
+[334-50]  carrier='Iusacell Internet' apn='web.iusacellgsm.mx' uid='Iusacellgsm' pwd='Iusacellgsm'
+[338-50]  carrier='INTERNET Digicel' apn='web.digiceljamaica.com' uid='' pwd=''
+[338-18]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[338-70]  carrier='Claro Web' apn='internet.ideasclaro.com.jm' uid='' pwd=''
+[338-180] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[340-01]  carrier='Orange World Cara�be' apn='orangewap' uid='orange' pwd='wap'
+[340-20]  carrier='Digicel FR' apn='wap.digicelfr.com' uid='wap' pwd='wap'
+[342-60]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[344-92]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[346-14]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[348-17]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[352-11]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[354-86]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[356-11]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[358-11]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[360-11]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[363-02]  carrier='INTERNET Aruba' apn='web.digicelaruba.com' uid='' pwd=''
+[363-20]  carrier='INTERNET Aruba' apn='web.digicelaruba.com' uid='' pwd=''
+[365-84]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[366-11]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[368-01]  carrier='Internet' apn='internet' uid='' pwd=''
+[370-01]  carrier='Orange net' apn='orangenet.com.do' uid='' pwd=''
+[370-02]  carrier='INTERNET CLARO' apn='internet.ideasclaro.com.do' uid='' pwd=''
+[370-04]  carrier='Viva Edge' apn='edge.viva.net.do' uid='viva' pwd='viva'
+[374-12]  carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-120] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-121] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-122] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-123] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-124] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-125] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-126] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-127] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-128] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-129] carrier='Bmobile internet' apn='internet' uid='' pwd=''
+[374-13]  carrier='INTERNET Trinidad' apn='web.digiceltt.com' uid='' pwd=''
+[374-130] carrier='INTERNET Trinidad' apn='web.digiceltt.com' uid='' pwd=''
+[376-35]  carrier='Lime Internet Postpaid' apn='internet' uid='' pwd=''
+[401-01]  carrier='Beeline Internet' apn='internet.beeline.kz' uid='@internet.beeline' pwd='beeline'
+[401-02]  carrier='Kcell Internet' apn='internet' uid='' pwd=''
+[401-77]  carrier='Tele2 Internet' apn='internet' uid='' pwd=''
+[404-01]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-02]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-03]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-04]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-05]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-07]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-09]  carrier='Reliance RTel' apn='SMARTNET' uid='' pwd=''
+[404-10]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-11]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-12]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-13]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-14]  carrier='IDEA Punjab' apn='spicegprs' uid='' pwd=''
+[404-15]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-16]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-17]  carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd=''
+[404-18]  carrier='Reliance RTel' apn='SMARTNET' uid='' pwd=''
+[404-19]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-20]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-21]  carrier='Loop Mobile' apn='www' uid='' pwd=''
+[404-22]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-24]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-25]  carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd=''
+[404-27]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-28]  carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd=''
+[404-29]  carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd=''
+[404-30]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-31]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-33]  carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd=''
+[404-34]  carrier='Cellone_North' apn='bsnlnet' uid='' pwd=''
+[404-35]  carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd=''
+[404-36]  carrier='Reliance RTel' apn='SMARTNET' uid='' pwd=''
+[404-37]  carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd=''
+[404-38]  carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd=''
+[404-40]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-41]  carrier='AIRCEL TN' apn='aircelgprs.po' uid='' pwd=''
+[404-42]  carrier='AIRCEL TN' apn='aircelgprs.po' uid='' pwd=''
+[404-43]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-44]  carrier='IDEA Karnataka' apn='simplyinternet' uid='' pwd=''
+[404-45]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-46]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-49]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-50]  carrier='Reliance RTel' apn='SMARTNET' uid='' pwd=''
+[404-51]  carrier='Cellone_North' apn='bsnlnet' uid='' pwd=''
+[404-52]  carrier='Reliance RTel' apn='SMARTNET' uid='' pwd=''
+[404-53]  carrier='Cellone_North' apn='bsnlnet' uid='' pwd=''
+[404-54]  carrier='Cellone_North' apn='bsnlnet' uid='' pwd=''
+[404-55]  carrier='Cellone_North' apn='bsnlnet' uid='' pwd=''
+[404-56]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-57]  carrier='Cellone_West' apn='bsnlnet' uid='' pwd=''
+[404-58]  carrier='Cellone_West' apn='bsnlnet' uid='' pwd=''
+[404-59]  carrier='Cellone_North' apn='bsnlnet' uid='' pwd=''
+[404-60]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-62]  carrier='Cellone_North' apn='bsnlnet' uid='' pwd=''
+[404-64]  carrier='CellOne_South' apn='bsnlnet' uid='' pwd=''
+[404-66]  carrier='Cellone_West' apn='bsnlnet' uid='' pwd=''
+[404-67]  carrier='Reliance RTel' apn='SMARTNET' uid='' pwd=''
+[404-68]  carrier='Dolphin_Delhi' apn='gprsmtnldel' uid='mtnl' pwd='mtnl123'
+[404-68]  carrier='Dolphin_Delhi_3G' apn='mtnl3g' uid='mtnl' pwd='mtnl123'
+[404-69]  carrier='Dolphin_Mumbai' apn='gprsmtnlmum' uid='mtnl' pwd='mtnl123'
+[404-69]  carrier='Dolphin_Mumbai_3G' apn='mtnl3g' uid='mtnl' pwd='mtnl123'
+[404-70]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-71]  carrier='CellOne_South' apn='bsnlnet' uid='' pwd=''
+[404-72]  carrier='CellOne_South' apn='bsnlnet' uid='' pwd=''
+[404-73]  carrier='CellOne_South' apn='bsnlnet' uid='' pwd=''
+[404-74]  carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd=''
+[404-75]  carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd=''
+[404-76]  carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd=''
+[404-77]  carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd=''
+[404-78]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-79]  carrier='CellOne_South' apn='bsnlnet' uid='' pwd=''
+[404-80]  carrier='CellOne_South' apn='bsnlnet' uid='' pwd=''
+[404-81]  carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd=''
+[404-82]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-83]  carrier='Reliance RTel' apn='SMARTNET' uid='' pwd=''
+[404-84]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-85]  carrier='Reliance RTel' apn='SMARTNET' uid='' pwd=''
+[404-86]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-87]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-88]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[404-89]  carrier='IDEA' apn='internet' uid='' pwd=''
+[404-90]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-91]  carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd=''
+[404-92]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-93]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-94]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-95]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-96]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-97]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[404-98]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[405-01]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-03]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-04]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-05]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-06]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-07]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-08]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-09]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-10]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-11]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-12]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-13]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-14]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-15]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-17]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-18]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-19]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-20]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-21]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-22]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-23]  carrier='Reliance RCOM' apn='rcomnet' uid='' pwd=''
+[405-25]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-26]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-27]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-28]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-29]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-30]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-31]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-32]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-33]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-34]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-35]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-36]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-37]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-38]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-39]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-40]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-41]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-42]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-43]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-44]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-45]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-46]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-47]  carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd=''
+[405-51]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[405-52]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[405-53]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[405-54]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[405-55]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[405-56]  carrier='Airtel' apn='airtelgprs.com' uid='' pwd=''
+[405-66]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[405-67]  carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[405-70]  carrier='IDEA' apn='internet' uid='' pwd=''
+[405-750] carrier='Vodafone Connect' apn='jkgprs' uid='' pwd=''
+[405-750] carrier='VodafoneLive!' apn='vodafonelivejk' uid='' pwd=''
+[405-751] carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[405-752] carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[405-753] carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[405-754] carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[405-755] carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[405-756] carrier='Vodafone Connect' apn='www' uid='' pwd=''
+[405-799] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-800] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd=''
+[405-801] carrier='AIRCEL South' apn='aircelgprs' uid='' pwd=''
+[405-802] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd=''
+[405-803] carrier='AIRCEL South' apn='aircelgprs' uid='' pwd=''
+[405-804] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd=''
+[405-805] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd=''
+[405-806] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd=''
+[405-807] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd=''
+[405-808] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd=''
+[405-809] carrier='AIRCEL South' apn='aircelgprs' uid='' pwd=''
+[405-810] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd=''
+[405-811] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd=''
+[405-812] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd=''
+[405-813] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-814] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-815] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-816] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-817] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-818] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-819] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-820] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-821] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-822] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-823] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-824] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-825] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-826] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-827] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-828] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-829] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-830] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-831] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-832] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-833] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-834] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-835] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-836] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-837] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-838] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-839] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-840] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-841] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-842] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-843] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[405-844] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-845] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-846] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-847] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-848] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-849] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-850] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-851] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-852] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-853] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-875] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-876] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-877] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-878] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-879] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-880] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-881] carrier='STEL' apn='gprs.stel.in' uid='' pwd=''
+[405-882] carrier='STEL' apn='gprs.stel.in' uid='' pwd=''
+[405-883] carrier='STEL' apn='gprs.stel.in' uid='' pwd=''
+[405-884] carrier='STEL' apn='gprs.stel.in' uid='' pwd=''
+[405-885] carrier='STEL' apn='gprs.stel.in' uid='' pwd=''
+[405-886] carrier='STEL' apn='gprs.stel.in' uid='' pwd=''
+[405-908] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-909] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-910] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-911] carrier='IDEA' apn='internet' uid='' pwd=''
+[405-925] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-926] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-927] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-928] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-929] carrier='Uninor GPRS' apn='uninor' uid='' pwd=''
+[405-932] carrier='Videocon' apn='vinternet.com' uid='' pwd=''
+[410-01]  carrier='Mobilink WAP GPRS' apn='connect.mobilinkworld.com' uid='Mobilink' pwd='Mobilink'
+[410-03]  carrier='Ufone WAP' apn='Ufone.internet' uid='' pwd=''
+[410-04]  carrier='ZONG WAP' apn='zonginternet' uid='' pwd=''
+[410-06]  carrier='Telenor WAP' apn='internet' uid='' pwd=''
+[410-07]  carrier='Warid WAP' apn='Wap.warid' uid='' pwd=''
+[415-01]  carrier='Alfa Internet' apn='internet.mic1.com.lb' uid='mic1' pwd='mic1'
+[415-03]  carrier='MTC Touch GPRS' apn='gprs.mtctouch.com.lb' uid='' pwd=''
+[416-01]  carrier='Zain JO Internet Postpaid' apn='internet' uid='' pwd=''
+[416-01]  carrier='Zain JO Internet Prepaid' apn='internetpre' uid='zain' pwd='zain'
+[416-03]  carrier='umniahinternet Postpaid' apn='internet' uid='' pwd=''
+[416-03]  carrier='umniah Prepaid' apn='net' uid='' pwd=''
+[416-77]  carrier='Orange Internet' apn='net.orange.jo' uid='net' pwd='net'
+[419-02]  carrier='ZAIN MI' apn='pps' uid='pps' pwd='pps'
+[419-03]  carrier='INTERNET ACTION' apn='action.wataniya.com' uid='' pwd=''
+[419-04]  carrier='VIVA Internet' apn='VIVA' uid='' pwd=''
+[420-01]  carrier='JAWALNet' apn='jawalnet.com.sa' uid='' pwd=''
+[420-03]  carrier='mobily Net Prepaid' apn='web2' uid='' pwd=''
+[420-03]  carrier='mobily Net Postpaid' apn='web1' uid='' pwd=''
+[420-04]  carrier='zain-gprs' apn='zain' uid='' pwd=''
+[422-02]  carrier='Oman Mobile Internet' apn='taif' uid='taif' pwd='taif'
+[422-03]  carrier='Nawras GPRS' apn='isp.nawras.com.om' uid='' pwd=''
+[424-02]  carrier='DATA Package' apn='etisalat.ae' uid='' pwd=''
+[424-03]  carrier='du' apn='du' uid='' pwd=''
+[425-01]  carrier='3G Portal' apn='uwap.orange.co.il' uid='' pwd=''
+[425-01]  carrier='Internet 3G' apn='modem.orange.net.il' uid='' pwd=''
+[425-02]  carrier='Cellcom Internet' apn='Sphone' uid='' pwd=''
+[425-03]  carrier='Sphone Pelephone' apn='sphone.pelephone.net.il' uid='pcl@3g' pwd='pcl'
+[426-01]  carrier='Internet' apn='internet.batelco.com' uid='' pwd=''
+[426-02]  carrier='Zain Internet' apn='connect.mobilinkworld.com' uid='Mobilink' pwd='Mobilink'
+[426-04]  carrier='VIVAGPRS' apn='viva.bh' uid='' pwd=''
+[427-01]  carrier='Qtel GPRS' apn='gprs.qtel' uid='gprs' pwd='gprs'
+[427-02]  carrier='VFQ Mobile Internet' apn='web.vodafone.com.qa' uid='' pwd=''
+[440-10]  carrier='sp???' apn='spmode.ne.jp' uid='' pwd=''
+[440-10]  carrier='mopera U(?????????)' apn='mpr2.bizho.net' uid='' pwd=''
+[440-10]  carrier='mopera U??' apn='0120.mopera.net' uid='' pwd=''
+[450-05]  carrier='SK Telecom (Roaming)' apn='roaming.sktelecom.com' uid='' pwd=''
+[450-05]  carrier='SK Telecom' apn='web.sktelecom.com' uid='' pwd=''
+[450-08]  carrier='KT-HSDPA' apn='alwayson-r6.ktfwing.com' uid='' pwd=''
+[452-04]  carrier='Viettel Email' apn='v-internet' uid='' pwd=''
+[452-05]  carrier='Vietnamobile Email' apn='internet' uid='' pwd=''
+[452-07]  carrier='BEELINE Email' apn='internet' uid='' pwd=''
+[452-08]  carrier='EVNTelecom Email' apn='e-internet' uid='' pwd=''
+[454-00]  carrier='CSL Data' apn='hkcsl' uid='' pwd=''
+[454-02]  carrier='CSL Data' apn='hkcsl' uid='' pwd=''
+[454-03]  carrier='3' apn='mobile.three.com.hk' uid='' pwd=''
+[454-04]  carrier='3-DB-GPRS' apn='web-g.three.com.hk' uid='' pwd=''
+[454-06]  carrier='SmarTone HK' apn='SmarTone' uid='' pwd=''
+[454-10]  carrier='CSL Data' apn='hkcsl' uid='' pwd=''
+[454-12]  carrier='CMHK GPRS' apn='peoples.net' uid='' pwd=''
+[454-16]  carrier='PCCW_GPRS' apn='pccwdata' uid='' pwd=''
+[454-18]  carrier='CSL Data' apn='hkcsl' uid='' pwd=''
+[454-19]  carrier='PCCW 3G' apn='pccw' uid='' pwd=''
+[455-00]  carrier='SmarTone MAC' apn='smartgprs' uid='' pwd=''
+[455-01]  carrier='CTM' apn='ctm-mobile' uid='' pwd=''
+[455-03]  carrier='3 Macau' apn='web-g.three.com.hk' uid='hutchison' pwd='1234'
+[455-04]  carrier='CTM' apn='ctm-mobile' uid='' pwd=''
+[460-00]  carrier='China Mobile' apn='cmnet' uid='' pwd='' 
+[460-01]  carrier='China Unicom' 3g_apn='3gnet' 3g_uid='' 3g_pwd='' apn='uninet' uid='' pwd=''
+[460-02]  carrier='China Mobile' apn='cmnet' uid='' pwd=''
+[460-03]  carrier='China Telecom' apn='ctnet' uid='' pwd=''
+[460-07]  carrier='China Mobile' apn='cmnet' uid='' pwd=''
+[466-01]  carrier='????(Far EasTone) (Internet)' apn='internet' uid='' pwd=''
+[466-88]  carrier='????(KGT-Online) (Internet)' apn='internet' uid='' pwd=''
+[466-89]  carrier='????(VIBO)' apn='vibo' uid='' pwd=''
+[466-92]  carrier='????(Chunghwa) (Internet)' apn='internet' uid='' pwd=''
+[466-92]  carrier='????(Chunghwa)' apn='emome' uid='' pwd=''
+[466-93]  carrier='?????(TW Mobile) (Internet)' apn='internet' uid='' pwd=''
+[466-93]  carrier='?????(TW Mobile) (twm)' apn='TWM' uid='' pwd=''
+[466-97]  carrier='?????(TW Mobile) (Internet)' apn='internet' uid='' pwd=''
+[466-97]  carrier='?????(TW Mobile) (twm)' apn='TWM' uid='' pwd=''
+[466-99]  carrier='?????(TW Mobile) (Internet)' apn='internet' uid='' pwd=''
+[466-99]  carrier='?????(TW Mobile) (twm)' apn='TWM' uid='' pwd=''
+[502-12]  carrier='Maxis 3G Internet' 3g_apn='unet' 3g_uid='maxis' 3g_pwd='wap' apn='net' uid='maxis' pwd='wap'
+[502-16]  carrier='DiGi Internet' 3g_apn='diginet' 3g_uid='' 3g_pwd='' apn='diginet' uid='' pwd=''
+[502-18]  carrier='U Mobile Internet' 3g_apn='my3g' 3g_uid='' 3g_pwd='' apn='my3g' uid='' pwd=''
+[502-19]  carrier='Celcom 3G Internet' 3g_apn='celcom3g' 3g_uid='' 3g_pwd='' apn='celcom.net.my' uid='' pwd=''
+[505-01]  carrier='Telstra Internet' apn='telstra.wap' uid='' pwd=''
+[505-02]  carrier='Optus Yes Internet' apn='yesinternet' uid='' pwd=''
+[505-03]  carrier='Vodafone live!' apn='live.vodafone.com' uid='' pwd=''
+[505-06]  carrier='Planet 3' apn='3services' uid='' pwd=''
+[505-07]  carrier='VF AU PXT' apn='live.vodafone.com' uid='' pwd=''
+[505-07]  carrier='VF Internet' apn='vfinternet.au' uid='' pwd=''
+[505-11]  carrier='Telstra Internet' apn='Telstra.wap' uid='' pwd=''
+[505-12]  carrier='3Internet' apn='3netaccess' uid='' pwd=''
+[505-12]  carrier='3' apn='3services' uid='' pwd=''
+[505-71]  carrier='Telstra Internet' apn='Telstra.wap' uid='' pwd=''
+[505-72]  carrier='Telstra Internet' apn='Telstra.wap' uid='' pwd=''
+[505-88]  carrier='VF AU PXT' apn='live.vodafone.com' uid='' pwd=''
+[505-88]  carrier='VF Internet' apn='vfinternet.au' uid='' pwd=''
+[505-90]  carrier='Optus Internet' apn='internet' uid='' pwd=''
+[510-01]  carrier='ISAT BB INTERNET' apn='indosat3g' uid='indosat' pwd='indosat'
+[510-01]  carrier='ISAT WAP' apn='indosatgprs' uid='indosat' pwd='indosat'
+[510-08]  carrier='AXISinternet' apn='AXIS' uid='AXIS' pwd='123456'
+[510-10]  carrier='Telkomsel GPRS WEB' apn='internet' uid='wap' pwd='wap123'
+[510-11]  carrier='XL GPRS' apn='www.xlgprs.net' uid='xlgprs' pwd='proxl'
+[510-11]  carrier='XL Unlimited' apn='xlunlimited' uid='' pwd=''
+[510-21]  carrier='ISAT M3 INTERNET' apn='indosatgprs' uid='indosat' pwd='indosat'
+[510-89]  carrier='3 GPRS' apn='3gprs' uid='3gprs' pwd='3gprs'
+[515-02]  carrier='myGlobe Internet Postpaid' apn='internet.globe.com.ph' uid='' pwd=''
+[515-02]  carrier='myGlobe Internet Prepaid' apn='http.globe.com.ph' uid='' pwd=''
+[515-03]  carrier='Smart Internet' apn='internet' uid='' pwd=''
+[515-05]  carrier='SUN INTERNET' apn='minternet' uid='' pwd=''
+[515-18]  carrier='RED INTERNET' apn='redinternet' uid='' pwd=''
+[520-01]  carrier='AIS Internet' apn='internet' uid='' pwd=''
+[520-18]  carrier='DTAC Internet' apn='www.dtac.co.th' uid='' pwd=''
+[520-99]  carrier='True GPRS Inet' apn='internet' uid='TRUE' pwd='TRUE'
+[525-01]  carrier='IDEAS E-mail' apn='e-ideas' uid='' pwd=''
+[525-02]  carrier='IDEAS E-mail' apn='e-ideas' uid='' pwd=''
+[525-03]  carrier='M1 E-mail' apn='sunsurf' uid='65' pwd=''
+[525-05]  carrier='StarHub' apn='internet' uid='' pwd=''
+[525-05]  carrier='Gee!' apn='shwap' uid='star' pwd='hub'
+[525-05]  carrier='StarHub E-mail' apn='shwap' uid='' pwd=''
+[530-01]  carrier='VFNZ PXT' apn='live.vodafone.com' uid='' pwd=''
+[530-01]  carrier='VFNZ Internet' apn='www.vodafone.net.nz' uid='' pwd=''
+[530-05]  carrier='TelecomDefault' apn='wap.telecom.co.nz' uid='' pwd=''
+[530-24]  carrier='2degrees Internet' apn='internet' uid='' pwd=''
+[602-01]  carrier='Mobinil Web' apn='MobinilWeb' uid='' pwd=''
+[602-02]  carrier='VF internet' apn='internet.vodafone.net' uid='internet' pwd='internet'
+[602-03]  carrier='Etisalat internet' apn='Etisalat' uid='' pwd=''
+[605-01]  carrier='weborange' apn='weborange' uid='' pwd=''
+[605-02]  carrier='mobinet' apn='gprs.tn' uid='gprs' pwd='gprs'
+[605-03]  carrier='internet Tunisiana' apn='internet.tunisiana.com' uid='internet' pwd='internet'
+[621-20]  carrier='Zain Mobile Internet' apn='internet.ng.Zain.com' uid='' pwd=''
+[621-30]  carrier='MTN GPRS' apn='web.gprs.mtnnigeria.net' uid='web' pwd='web'
+[621-50]  carrier='glo direct' apn='glosecure' uid='gprs' pwd='gprs'
+[621-60]  carrier='Etisalat Internet' apn='etisalat' uid='' pwd=''
+[639-02]  carrier='SafaricomBrowse' apn='Safaricom' uid='saf' pwd='data'
+[639-03]  carrier='Zain WAP' apn='wap.ke.celtel.com' uid='wap' pwd='wap'
+[639-07]  carrier='Orange Internet' apn='wap.orange.co.ke' uid='' pwd=''
+[640-04]  carrier='Vodacom WAP' apn='Wap' uid='' pwd=''
+[647-00]  carrier='Orange World re' apn='orangerun' uid='orange' pwd='orange'
+[647-10]  carrier='GPRS SRR' apn='wapsfr' uid='wap' pwd='wap'
+[651-01]  carrier='VCL Internet GPRS' apn='internet' uid='' pwd=''
+[655-01]  carrier='Vodacom' apn='internet' uid='' pwd=''
+[655-02]  carrier='8.ta internet' apn='internet' uid='' pwd=''
+[655-07]  carrier='Smartdata' apn='internet' uid='' pwd=''
+[655-07]  carrier='virgin_internet' apn='vdata' uid='' pwd=''
+[655-10]  carrier='MTN Data' apn='myMTN' uid='mtn' pwd=''
+[704-01]  carrier='INTERNET CLARO' apn='internet.ideasclaro' uid='' pwd=''
+[704-02]  carrier='BROADBAND TIGO' apn='broadband.tigo.gt' uid='' pwd=''
+[704-03]  carrier='Internet GT' apn='internet.movistar.gt' uid='movistargt' pwd='movistargt'
+[704-30]  carrier='Internet GT' apn='internet.movistar.gt' uid='movistargt' pwd='movistargt'
+[706-01]  carrier='INTERNET CLARO' apn='internet.ideasclaro' uid='' pwd=''
+[706-02]  carrier='El Salvaldor Digicel' apn='web.digicelsv.com' uid='' pwd=''
+[706-03]  carrier='BROADBAND TIGO' apn='broadband.tigo.sv' uid='' pwd=''
+[706-04]  carrier='Internet SV' apn='internet.movistar.sv' uid='movistarsv' pwd='movistarsv'
+[706-40]  carrier='Internet SV' apn='internet.movistar.sv' uid='movistarsv' pwd='movistarsv'
+[708-01]  carrier='Internet Claro' apn='web.megatel.hn' uid='webmegatel' pwd='webmegatel'
+[708-02]  carrier='INTERNET TIGO' apn='internet.tigo.hn' uid='' pwd=''
+[708-20]  carrier='INTERNET TIGO' apn='internet.tigo.hn' uid='' pwd=''
+[710-21]  carrier='INTERNET' apn='web.emovil' uid='webemovil' pwd='webemovil'
+[710-300] carrier='Internet GPRS' apn='internet.movistar.ni' uid='movistarni' pwd='movistarni'
+[710-730] carrier='INTERNET' apn='web.emovil' uid='webemovil' pwd='webemovil'
+[712-01]  carrier='Kolbi' apn='kolbi3g' uid='' pwd=''
+[712-01]  carrier='Multimedia' apn='kolbi3g' uid='' pwd=''
+[712-02]  carrier='Kolbi' apn='kolbi3g' uid='' pwd=''
+[712-02]  carrier='Multimedia' apn='kolbi3g' uid='' pwd=''
+[712-03]  carrier='INTERNET CLARO' apn='internet.ideasclaro' uid='' pwd=''
+[712-04]  carrier='movistar INTERNET' apn='internet.movistar.cr' uid='movistarcr' pwd='movistarcr'
+[714-01]  carrier='Wap' apn=' apn01.cwpanama.com.pa' uid='' pwd=''
+[714-01]  carrier='Mms' apn=' apn02.cwpanama.com.pa' uid='' pwd=''
+[714-20]  carrier='movistar INTERNET' apn='internet.movistar.pa' uid='movistarpa' pwd='movistarpa'
+[714-03]  carrier='WEB Claro' apn='web.claro.com.pa' uid='CLAROWEB' pwd='CLAROWEB'
+[714-04]  carrier='INTERNET Panama' apn='web.digicelpanama.com' uid='' pwd=''
+[716-06]  carrier='movistar Internet' apn='movistar.pe' uid='movistar@datos' pwd='movistar'
+[716-10]  carrier='CLARO DATOS' apn='claro.pe' uid='claro' pwd='claro'
+[722-07]  carrier='Movistar Emoci�n' apn='wap.gprs.unifon.com.ar' uid='wap' pwd='wap'
+[722-31]  carrier='Claro AR' apn='igprs.claro.com.ar' uid='ctigprs' pwd='ctigprs999'
+[722-310] carrier='Claro AR' apn='igprs.claro.com.ar' uid='ctigprs' pwd='ctigprs999'
+[722-34]  carrier='Personal Datos' apn='datos.personal.com' uid='gprs' pwd='adgj'
+[722-341] carrier='Personal Datos' apn='datos.personal.com' uid='gprs' pwd='adgj'
+[724-02]  carrier='TIM Connect' apn='timbrasil.br' uid='tim' pwd='tim'
+[724-03]  carrier='TIM Connect' apn='timbrasil.br' uid='tim' pwd='tim'
+[724-04]  carrier='TIM Connect' apn='timbrasil.br' uid='tim' pwd='tim'
+[724-05]  carrier='Java Session' apn='java.claro.com.br' uid='claro' pwd='claro'
+[724-06]  carrier='Vivo Internet' apn='zap.vivo.com.br' uid='vivo' pwd='vivo'
+[724-07]  carrier='SCTL GPRS' apn='sercomtel.com.br' uid='sercomtel' pwd='sercomtel'
+[724-10]  carrier='Vivo Internet' apn='zap.vivo.com.br' uid='vivo' pwd='vivo'
+[724-11]  carrier='Vivo Internet' apn='zap.vivo.com.br' uid='vivo' pwd='vivo'
+[724-16]  carrier='BrT Modem' apn='brt.br' uid='brt' pwd='brt'
+[724-19]  carrier='TelemigC GPRS' apn='gprs.telemigcelular.com.br' uid='celular' pwd='celular'
+[724-23]  carrier='Vivo Internet' apn='zap.vivo.com.br' uid='vivo' pwd='vivo'
+[724-24]  carrier='Amaz�niaC GPRS' apn='gprs.amazoniacelular.com.br' uid='celular' pwd='celular'
+[724-31]  carrier='OI GPRS' apn='gprs.oi.com.br' uid='' pwd=''
+[730-01]  carrier='Internet Movil' apn='bam.entelpcs.cl' uid='entelpcs' pwd='entelpcs'
+[730-10]  carrier='Internet Movil' apn='bam.entelpcs.cl' uid='entelpcs' pwd='entelpcs'
+[730-02]  carrier='NEM' apn='wap.tmovil.cl' uid='wap' pwd='wap'
+[730-03]  carrier='BAM Claro' apn='bam.clarochile.cl' uid='clarochile' pwd='clarochile'
+[730-07]  carrier='web' apn='web.gtdmovil.cl' uid='webgtd' pwd='webgtd'
+[730-08]  carrier='Internet' apn='movil.vtr.com' uid='vtrmovil' pwd='vtrmovil'
+[730-08]  carrier='Wap' apn='wap.vtr.com' uid='' pwd=''
+[730-08]  carrier='Bam' apn='bam.vtr.com' uid='vtr' pwd='vtr'
+[730-10]  carrier='Internet Movil' apn='bam.entelpcs.cl' uid='entelpcs' pwd='entelpcs'
+[732-101] carrier='WEB Comcel 3GSM' apn='internet.comcel.com.co' uid='COMCELWEB' pwd='COMCELWEB'
+[732-103] carrier='TIGO WEB' apn='web.colombiamovil.com.co' uid='' pwd=''
+[732-111] carrier='TIGO WEB' apn='web.colombiamovil.com.co' uid='' pwd=''
+[732-123] carrier='movistar INTERNET' apn='internet.movistar.com.co' uid='movistar' pwd='movistar'
+[734-01]  carrier='Digitel GSM' apn='gprsweb.digitel.ve' uid='' pwd=''
+[734-02]  carrier='Digitel GSM' apn='gprsweb.digitel.ve' uid='' pwd=''
+[734-03]  carrier='Digitel GSM' apn='gprsweb.digitel.ve' uid='' pwd=''
+[734-04]  carrier='movistar INTERNET' apn='internet.movistar.ve' uid='' pwd=''
+[734-04]  carrier='movistar WAP' apn='wap.movistar.ve' uid='' pwd=''
+[734-06]  carrier='MODEM' apn='int.movilnet.com.ve' uid='' pwd=''
+[736-01]  carrier='VIVA3G' apn='internet.nuevatel.com' uid='' pwd=''
+[736-02]  carrier='ENTEL WAP GPRS' apn='wap.movil.com.bo' uid='' pwd=''
+[736-03]  carrier='WAPTIGO' apn='wap.tigo.bo' uid='' pwd=''
+[740-00]  carrier='movistar INTERNET' apn='internet.movistar.com.ec' uid='movistar' pwd='movistar'
+[740-01]  carrier='Claro Internet' apn='internet.porta.com.ec' uid='' pwd=''
+[740-10]  carrier='Claro Internet' apn='internet.porta.com.ec' uid='' pwd=''
+[740-02]  carrier='ALEGRO 3G' apn='internet3gsp.alegro.net.ec' uid='' pwd=''
+[744-01]  carrier='VOX INTERNET' apn='vox.internet' uid='' pwd=''
+[744-02]  carrier='Claro PY' apn='igprs.claro.com.py' uid='ctigprs' pwd='ctigprs999'
+[744-04]  carrier='TIGO PY' apn='internet.tigo.py' uid='' pwd=''
+[744-05]  carrier='Personal Datos Py' apn='internet' uid='personal' pwd='personal'
+[748-01]  carrier='wapANCEL' apn='wap' uid='' pwd=''
+[748-01]  carrier='gprsANCEL' apn='gprs.ancel' uid='' pwd=''
+[748-07]  carrier='Movistar Emoci�n' apn='webapn.movistar.com.uy' uid='movistar' pwd='movistar'
+[748-10]  carrier='Claro UY' apn='igprs.claro.com.uy' uid='ctigprs' pwd='ctigprs999'
diff --git a/program/fwed/fwe_entry.c b/program/fwed/fwe_entry.c
new file mode 100644
index 0000000..a4fc006
--- /dev/null
+++ b/program/fwed/fwe_entry.c
@@ -0,0 +1,96 @@
+/*********************************************************************************
+ *      Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  fw_entry.c 
+ *    Description:  This is the FWE(FL2440 Worker Engine) applets(such as gsmd, 
+ *                  gpsd, zigbeed) main entry point function.
+ *                 
+ *        Version:  1.0.0(01/13/2013~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "01/13/2013 02:40:36 PM"
+ *                 
+ ********************************************************************************/
+
+#include "fwe_entry.h"
+#include "gsmd.h"
+#include "gpsd.h"
+#include "zigd.h"
+
+FWE_APPLET applets_list[] = 
+{
+    {"gsmd", gsmd_main},
+    {"gpsd", gpsd_main},
+    {"zigd", zigd_main},
+    {0, 0}
+};
+
+static void entry_usage(void);
+static void print_applist(void);
+
+int main(int argc, char **argv)
+{
+    FWE_APPLET      *app = NULL; 
+    const char       *applet_name = NULL;
+    int              ind = 0;
+
+    applet_name = basename(argv[0]);
+
+    /* Run command like "FWE gsmd"  */
+    if( !strncmp(applet_name, FWE_ENTRY_NAME, 4) )
+    {
+        if(argv[1] && argv[1][0]!='-') 
+        { 
+            applet_name = basename(argv[1]); 
+            ind = 1;
+        }
+        else
+        { 
+            entry_usage();
+            return 0;
+        }
+    }
+
+    for(app=(FWE_APPLET *)&applets_list; app->name; app++)
+    {
+        if(!strcmp (app->name, applet_name) && app->main)
+        {
+            return app->main(argc-ind, argv+ind);
+        }
+    }
+
+    printf("%s: applet not found\n\n", applet_name);
+    print_applist();
+
+    return 0;
+}
+
+static void print_applist(void)
+{
+    FWE_APPLET       *app;
+
+    printf("Currently defined applets:\n");
+    for(app=(FWE_APPLET *)&applets_list; app->name; app++)
+    {
+        printf("%s ", app->name);
+    }
+    printf("\n");
+}
+
+/* Just print the help information  */
+static void entry_usage(void)
+{
+    banner(FWE_ENTRY_NAME);
+
+    printf("Usage: %s [applet] [arguments]...\n", FWE_ENTRY_NAME);
+    printf("   or: applet [arguments]...\n");
+
+    printf("\n\t%s is a multi-call binary that combines many FL2440 Work Engine(FWE) applets\n", FWE_ENTRY_NAME);
+    printf("\tinto a single executable. We can create a symbolic link to %s for each applet\n",FWE_ENTRY_NAME);
+    printf("\tlike busybox work.\n\n");
+
+    print_applist();
+    printf("\n");
+
+    return ;
+}
diff --git a/program/fwed/fwe_entry.h b/program/fwed/fwe_entry.h
new file mode 100644
index 0000000..e40efa3
--- /dev/null
+++ b/program/fwed/fwe_entry.h
@@ -0,0 +1,39 @@
+/********************************************************************************
+ *      Copyright:  (C) 2013 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  fwe_entry.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(01/13/2013~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "01/13/2013 02:53:41 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __FWE_ENTRY_H_
+#define __FWE_ENTRY_H_
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <string.h>
+#include <pthread.h>
+
+#include "version.h"
+
+#define FWE_ENTRY_NAME "fwed"
+
+typedef int (APPLET_MAIN)(int argc, char **argv);
+
+typedef struct __FWE_APPLET
+{
+    char             *name; 
+    APPLET_MAIN      *main;
+} FWE_APPLET;
+
+
+
+#endif /* end of __FWE_ENTRY_H_  */
diff --git a/program/fwed/gpsd/gpsd.c b/program/fwed/gpsd/gpsd.c
new file mode 100644
index 0000000..7183167
--- /dev/null
+++ b/program/fwed/gpsd/gpsd.c
@@ -0,0 +1,211 @@
+/*********************************************************************************
+ *      Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  gpsd.c
+ *    Description:  This is the RWME(Radiation Monitor Works Engine) gpsd applet entry point
+ *                 
+ *        Version:  1.0.0(01/13/2013~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "01/13/2013 02:40:36 PM"
+ *                 
+ ********************************************************************************/
+#include "gpsd.h"
+#include "cp_hal.h"
+#include "cp_time.h"
+
+static void usage_gpsd(const char *progname)
+{
+    banner(progname);
+
+    printf("Usage: %s [OPTION]...\n", progname); 
+    printf(" %s is a daemon program running on the device to locate the device\n", progname); 
+    
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n"); 
+    printf(" -d[debug   ]  Running in debug mode\n");
+    printf(" -l[level   ]  Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); 
+    printf(" -h[help    ]  Display this help information\n");
+    printf(" -v[version ]  Display the program version\n");
+
+    return;
+}
+
+int init_gpsd_context(GPSD_CONTEX *gps)
+{
+    log_info("Initialize gpsd context.\n");
+
+    gps->pwr_status = POWER_OFF;
+
+    nmea_zero_INFO(&(gps->info));
+
+    /*  Initialize the GPS dataport pointer */
+    gps->comport = comport_init(GPS_DATAPORT, 9600, "8N1N");
+    if(NULL == gps->comport)
+    {
+        log_err("Initialise GPS data port %s on 9600 with 8N1N failure\n", GPS_DATAPORT);
+        return -1;
+    }
+    
+    if( comport_open(gps->comport) < 0)
+    {
+        log_err("Open GPS data port %s on 9600 with 8N1N failure\n", GPS_DATAPORT);
+        return -2;
+    }
+
+    log_dbg("Open GPS data port %s on 9600 with 8N1N successfully\n", GPS_DATAPORT);
+    return 0;
+}
+
+void term_gpsd_context(GPSD_CONTEX *gps)
+{
+    comport_term(gps->comport);
+
+#if 0
+    if( ON== hal_get_gps_power()) 
+    {
+        hal_turn_gps_power(OFF);
+    }
+#endif
+
+    return ;
+}
+
+
+
+int start_gpsd_service(GPSD_CONTEX *gps)
+{
+    int            len;
+    char           buf[1024];
+
+    while( !g_cp_signal.stop )
+    {
+        if( OFF== (gps->pwr_status=hal_get_gps_power()) )
+        {
+            hal_turn_gps_power(ON);
+            continue;
+        }
+
+        memset(buf, 0, sizeof(buf));
+        if( (len=comport_recv(gps->comport, buf, sizeof(buf), 3000)) > 0)
+        {
+            /* Data sample: 
+             * $GPGGA,081803.000,3029.9100,N,11423.2012,E,1,05,1.6,38.7,M,-13.7,M,,0000*4C
+             * $GPGSA,A,3,18,24,21,22,15,,,,,,,,3.1,1.6,2.7*3A
+             * $GPRMC,081803.000,A,3029.9100,N,11423.2012,E,1.14,126.38,210113,,,A*62  
+             */
+            nmea_parse(buf, len, &(gps->info));
+            log_nrml("GPS get UTC time: %d-%d-%d %d:%d:%d.%d\n", gps->info.utc.year+1900, gps->info.utc.mon+1, gps->info.utc.day,
+                    gps->info.utc.hour+8, gps->info.utc.min, gps->info.utc.sec, gps->info.utc.hsec);
+            log_nrml("GPS Sig[%d] Latitude:[%f] Longitude:[%f]\n", gps->info.sig, gps->info.lat, gps->info.lon);
+        }
+
+        micro_second_sleep(100);
+    }
+
+    return 0;
+}
+
+int gpsd_main(int argc, char **argv)
+{
+    int            opt; 
+    int            rv = 0; 
+    int            debug = 0;
+    char           pid_file[64] = { 0 }; /* The file used to record the PID */
+    const char     *progname=NULL;
+    char           *log_file = GPSD_DEF_LOG_FILE;
+    int            log_level = GPSD_DEF_LOG_LEVEL;
+    cp_logger      *logger = NULL;
+    GPSD_CONTEX    gpsd_ctx;
+
+    struct option long_options[] = { 
+        {"debug", no_argument, NULL, 'd'}, 
+        {"level", required_argument, NULL, 'l'}, 
+        {"version", no_argument, NULL, 'v'}, 
+        {"help", no_argument, NULL, 'h'}, 
+        {NULL, 0, NULL, 0} 
+    };
+
+    progname = basename(argv[0]);
+
+    /* Parser the command line parameters */
+    while ((opt = getopt_long(argc, argv, "dl:vh", long_options, NULL)) != -1) 
+    { 
+        switch (opt) 
+        { 
+            case 'd': /* Set debug running */ 
+                debug = 1; 
+                log_file = DBG_LOG_FILE;
+                break; 
+
+            case 'l': /* Set the log level */
+                log_level = atoi(optarg); 
+                break; 
+
+            case 'v':  /* Get software version */ 
+                banner(progname); /* Defined in version.h */ 
+                return EXIT_SUCCESS; 
+            
+            case 'h':  /* Get help information */ 
+                usage_gpsd(progname); 
+                return 0; 
+
+            default: 
+                break; 
+        } /*  end of "switch(opt)" */ 
+    }
+
+    if( !debug )
+    {
+        snprintf(pid_file, sizeof(pid_file), "%s/%s.pid", PID_FILE_PATH, progname);
+        if( check_daemon_running(pid_file) ) 
+        { 
+            printf("Programe already running, exit now.\n"); 
+            return -1; 
+        } 
+    }
+ 
+    if ( !(logger=cp_log_init(NULL, log_file, log_level, GPSD_LOG_FILE_SIZE)) )
+    {
+        printf("Logger initialize failure with file: %s\n", logger->file);
+        return -1;
+    }
+
+    if ( cp_log_open() )
+    {
+        printf("Logger initialize failure with file: %s\n", logger->file);
+        return -1;
+    }
+
+    if( !debug )
+    {
+        if( set_daemon_running(pid_file) )
+        {
+            log_fatal("Set program \"%s\" running as daemon failure.\n", progname);
+            goto CleanUp;
+        } 
+    }
+
+    cp_install_proc_signal();
+
+    if( init_gpsd_context(&gpsd_ctx) < 0 )
+    {
+        log_fatal("Initialise gpsd work context failure, rv=%d\n", rv); 
+        goto CleanUp; 
+    }
+
+    /*  Start the GPS thread to locate the device */ 
+    if( (rv=start_gpsd_service(&gpsd_ctx)) < 0)
+    { 
+        log_fatal("Start PPP thread failure, rv=%d\n", rv); 
+        goto CleanUp; 
+    } 
+    
+CleanUp: 
+    log_nrml("Terminate program \"%s\".\n", progname);
+    term_gpsd_context(&gpsd_ctx);
+    unlink(pid_file); 
+    cp_log_term(); 
+    return rv;
+}
+
+
diff --git a/program/fwed/gpsd/gpsd.h b/program/fwed/gpsd/gpsd.h
new file mode 100644
index 0000000..d9d2407
--- /dev/null
+++ b/program/fwed/gpsd/gpsd.h
@@ -0,0 +1,52 @@
+/********************************************************************************
+ *      Copyright:  (C) guowenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  gpsd.h
+ *    Description:  This is the rmwe(Radiation Moniter Worker Engine) gpsd applet head file
+ *
+ *        Version:  1.0.0(02/02/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/02/2012 11:33:33 AM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __GPSD_H_
+#define __GPSD_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include "cp_comport.h"
+#include "cp_logger.h"
+#include "cp_proc.h"
+#include "nmea_info.h"
+#include "version.h"
+
+#ifndef PID_FILE_PATH
+#define PID_FILE_PATH         "/var/run/" 
+#endif
+
+#define GPSD_DEF_LOG_FILE     "/logs/gpsd.log"
+#define GPSD_DEF_LOG_LEVEL    LOG_LEVEL_NRML
+#define GPSD_LOG_FILE_SIZE    12  /* Unit KiByte */
+
+#define GPS_DATAPORT          "/dev/ttyS4"
+
+#define POWER_OFF             0
+#define POWER_ON              1
+
+typedef struct __GPSD_CONTEX
+{
+    unsigned char     pwr_status;
+    nmeaINFO          info;
+    COM_PORT          *comport;
+} GPSD_CONTEX;
+
+extern int gpsd_main(int argc, char **argv);
+
+#endif /* End of __GPSD_H_ */
diff --git a/program/fwed/gpsd/makefile b/program/fwed/gpsd/makefile
new file mode 100644
index 0000000..8b3dcbf
--- /dev/null
+++ b/program/fwed/gpsd/makefile
@@ -0,0 +1,95 @@
+#*********************************************************************************
+#      Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common subdir Makefile which to compile all the C
+#                  source code to object files and then generate the shared or 
+#                  static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so,
+#                  which depends on the variable $LINK_MODE.
+#                      
+#        Version:  1.0.0(01/13/2013~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "Sun Jan 13 14:44:36 CST 2013"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+
+#If wanna compile in the subdir, not called by top makefile, uncomment it
+ifneq (${TOP_COMPILE}, YES) 
+LOCAL_COMPILE=YES
+endif
+
+LIBNAME=$(shell basename ${PWD})
+STALIB=lib${LIBNAME}.a
+DYNLIB=lib${LIBNAME}.so
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+#======================================================
+#  ---> Doesn't call by top makefile, compile by local
+#======================================================
+ifeq (${LOCAL_COMPILE}, YES)
+#ARCH?=arm926t
+ARCH?=i386
+CFLAGS+=-fPIC
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+    CROSS_COMPILE=
+else
+    CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux-
+endif
+
+PRJDIR?=$(shell dirname ${PWD})
+CFLAGS+=-I${PRJDIR}
+CC = ${CROSS_COMPILE}gcc
+AR = ${CROSS_COMPILE}ar
+
+endif #End local compile
+
+ifeq ("${LINK_MODE}", "STATIC")
+	LIBS = ${STALIB} 
+else 
+	LIBS=${DYNLIB}
+endif
+
+all: entry ${LIBS} install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **     Compile subdir ${LIBNAME} for ${ARCH}             ";
+	@echo " =========================================================";
+
+#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o
+${STALIB}:	$(OBJS) 
+	$(AR) -rcu $@ $(OBJS)
+
+${DYNLIB}:   $(OBJS) 
+	$(CC) -fPIC -shared -o $@ $(OBJS)
+
+%.o : %.c
+	$(CC) -c $< $(CFLAGS)
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	@if [ ! -z "${LIBS_PATH}" ] ; then \
+		mkdir -p ${LIBS_PATH} ; \
+		cp ${LIBS} ${LIBS_PATH}; \
+	fi;
+
+
+clean:
+	@rm -f *.o
+	@rm -rf *.gdb *.a *.so
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/program/fwed/gpsd/nmea_info.c b/program/fwed/gpsd/nmea_info.c
new file mode 100644
index 0000000..5214e3b
--- /dev/null
+++ b/program/fwed/gpsd/nmea_info.c
@@ -0,0 +1,195 @@
+/*
+ *
+ * NMEA library
+ * URL: http://nmea.sourceforge.net
+ * Author: Tim (xtimor@gmail.com)
+ * Licence: http://www.gnu.org/licenses/lgpl.html
+ * $Id: sentence.c 17 2008-03-11 11:56:11Z xtimor $
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <stdio.h>
+
+#include "nmea_parse.h"
+#include "nmea_info.h"
+#include "cp_logger.h"
+
+void nmea_zero_GPGGA(nmeaGPGGA *pack)
+{
+    memset(pack, 0, sizeof(nmeaGPGGA));
+    nmea_time_now(&pack->utc);
+    pack->ns = 'N';
+    pack->ew = 'E';
+    pack->elv_units = 'M';
+    pack->diff_units = 'M';
+}
+
+void nmea_zero_GPGSA(nmeaGPGSA *pack)
+{
+    memset(pack, 0, sizeof(nmeaGPGSA));
+    pack->fix_mode = 'A';
+    pack->fix_type = NMEA_FIX_BAD;
+}
+
+void nmea_zero_GPGSV(nmeaGPGSV *pack)
+{
+    memset(pack, 0, sizeof(nmeaGPGSV));
+}
+
+void nmea_zero_GPRMC(nmeaGPRMC *pack)
+{
+    memset(pack, 0, sizeof(nmeaGPRMC));
+    nmea_time_now(&pack->utc);
+    pack->status = 'V';
+    pack->ns = 'N';
+    pack->ew = 'E';
+    pack->declin_ew = 'E';
+}
+
+void nmea_zero_GPVTG(nmeaGPVTG *pack)
+{
+    memset(pack, 0, sizeof(nmeaGPVTG));
+    pack->dir_t = 'T';
+    pack->dec_m = 'M';
+    pack->spn_n = 'N';
+    pack->spk_k = 'K';
+}
+
+void nmea_zero_INFO(nmeaINFO *info)
+{
+    memset(info, 0, sizeof(nmeaINFO));
+    nmea_time_now(&info->utc);
+    info->sig = NMEA_SIG_BAD;
+    info->fix = NMEA_FIX_BAD;
+}
+
+void nmea_time_now(nmeaTIME *stm)
+{
+    time_t lt;
+    struct tm *tt;
+
+    time(&lt);
+    tt = gmtime(&lt);
+
+    stm->year = tt->tm_year;
+    stm->mon = tt->tm_mon;
+    stm->day = tt->tm_mday;
+    stm->hour = tt->tm_hour;
+    stm->min = tt->tm_min;
+    stm->sec = tt->tm_sec;
+    stm->hsec = 0;
+}
+
+/* buf sample: "$GPRMC,134325.000,A,3029.8871,N,11423.1932,E,0.26,258.74,210113,,,A*"  */
+int nmea_parse_line(char *buf, int buf_sz, nmeaINFO *info)
+{
+    int       type;
+    void      *pack;
+
+    type = nmea_pack_type(buf+1, buf_sz); /* Skip '$' */
+    switch (type) 
+    {
+        case GPGGA:
+            if( !(pack = malloc(sizeof(nmeaGPGGA))) ) 
+            {
+                goto mem_fail;
+            }
+
+            if( nmea_parse_GPGGA(buf, buf_sz, (nmeaGPGGA *)pack) )
+            {
+                nmea_GPGGA2info(pack, info);
+            }
+            free(pack);
+            break;
+
+        case GPGSA:
+            if( !(pack = malloc(sizeof(nmeaGPGSA))) ) 
+            {
+                goto mem_fail;
+            }
+
+            if( nmea_parse_GPGSA(buf, buf_sz, (nmeaGPGSA *)pack) ) 
+            {
+                nmea_GPGSA2info(pack, info);
+            }
+            free(pack);
+            break; 
+        
+        case GPGSV:
+            if( !(pack = malloc(sizeof(nmeaGPGSV))) ) 
+            {
+                goto mem_fail;
+            } 
+            
+            if( nmea_parse_GPGSV(buf, buf_sz, (nmeaGPGSV *)pack) )
+            {
+                nmea_GPGSV2info(pack, info);
+            }
+            free(pack);
+            break;
+
+        case GPRMC:
+            if( !(pack = malloc(sizeof(nmeaGPRMC))) ) 
+            {
+                goto mem_fail;
+            } 
+            
+            if( nmea_parse_GPRMC(buf, buf_sz, (nmeaGPRMC *)pack) )
+            {
+                nmea_GPRMC2info(pack, info);
+            }
+            free(pack);
+            break;
+
+        case GPVTG:
+            if( !(pack = malloc(sizeof(nmeaGPVTG))) ) 
+            {
+                goto mem_fail;
+            } 
+            
+            if( nmea_parse_GPVTG(buf, buf_sz, (nmeaGPVTG *)pack) )
+            {
+                nmea_GPVTG2info(pack, info);
+            }
+            free(pack);
+            break;
+
+        default:
+            break;
+    }
+
+    return 0;
+
+mem_fail:
+    log_err("Insufficient memory!\n");
+    return -1;
+}
+
+int nmea_parse(char *data, int len, nmeaINFO *info)
+{
+    int       line_len, nbytes; 
+    char      line[512];
+
+    while(len > 0)
+    {
+        memset(line, 0, sizeof(line));
+        nbytes = nmea_get_item_line(data, len, line, &line_len);
+
+        /* Not a integrated line */
+        if( line_len< 0 )
+            break;
+
+        if( line_len > 0 )
+        {
+            nmea_parse_line(line, line_len, info);
+        }
+
+        data += nbytes;
+        len -= nbytes;
+    }
+
+    return 0;
+}
diff --git a/program/fwed/gpsd/nmea_info.h b/program/fwed/gpsd/nmea_info.h
new file mode 100644
index 0000000..573ca11
--- /dev/null
+++ b/program/fwed/gpsd/nmea_info.h
@@ -0,0 +1,234 @@
+/*
+ *
+ * NMEA library
+ * URL: http://nmea.sourceforge.net
+ * Author: Tim (xtimor@gmail.com)
+ * Licence: http://www.gnu.org/licenses/lgpl.html
+ * $Id: sentence.h 17 2008-03-11 11:56:11Z xtimor $
+ *
+ */
+
+/*! \file */
+
+#ifndef __NMEA_INFO_H__
+#define __NMEA_INFO_H__
+
+#define NMEA_SIG_BAD        (0)
+#define NMEA_SIG_LOW        (1)
+#define NMEA_SIG_MID        (2)
+#define NMEA_SIG_HIGH       (3)
+
+#define NMEA_FIX_BAD        (1)
+#define NMEA_FIX_2D         (2)
+#define NMEA_FIX_3D         (3)
+
+#define NMEA_MAXSAT         (12)
+#define NMEA_SATINPACK      (4)
+#define NMEA_NSATPACKS      (NMEA_MAXSAT / NMEA_SATINPACK)
+
+#define NMEA_DEF_LAT        (5001.2621)
+#define NMEA_DEF_LON        (3613.0595)
+
+
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Date and time data
+ * @see nmea_time_now
+ */
+typedef struct _nmeaTIME
+{
+    int     year;       /**< Years since 1900 */
+    int     mon;        /**< Months since January - [0,11] */
+    int     day;        /**< Day of the month - [1,31] */
+    int     hour;       /**< Hours since midnight - [0,23] */
+    int     min;        /**< Minutes after the hour - [0,59] */
+    int     sec;        /**< Seconds after the minute - [0,59] */
+    int     hsec;       /**< Hundredth part of second - [0,99] */
+
+} nmeaTIME;
+
+
+/**
+ * Position data in fractional degrees or radians
+ */
+typedef struct _nmeaPOS
+{
+    double lat;         /**< Latitude */
+    double lon;         /**< Longitude */
+
+} nmeaPOS;
+
+/**
+ * Information about satellite
+ * @see nmeaSATINFO
+ * @see nmeaGPGSV
+ */
+typedef struct _nmeaSATELLITE
+{
+    int     id;         /**< Satellite PRN number */
+    int     in_use;     /**< Used in position fix */
+    int     elv;        /**< Elevation in degrees, 90 maximum */
+    int     azimuth;    /**< Azimuth, degrees from true north, 000 to 359 */
+    int     sig;        /**< Signal, 00-99 dB */
+
+} nmeaSATELLITE;
+
+/**
+ * Information about all satellites in view
+ * @see nmeaINFO
+ * @see nmeaGPGSV
+ */
+typedef struct _nmeaSATINFO
+{
+    int     inuse;      /**< Number of satellites in use (not those in view) */
+    int     inview;     /**< Total number of satellites in view */
+    nmeaSATELLITE sat[NMEA_MAXSAT]; /**< Satellites information */
+
+} nmeaSATINFO;
+
+/**
+ * Summary GPS information from all parsed packets,
+ * used also for generating NMEA stream
+ * @see nmea_parse
+ * @see nmea_GPGGA2info,  nmea_...2info
+ */
+typedef struct _nmeaINFO
+{
+    int     smask;      /**< Mask specifying types of packages from which data have been obtained */
+
+    nmeaTIME utc;       /**< UTC of position */
+
+    int     sig;        /**< GPS quality indicator (0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive) */
+    int     fix;        /**< Operating mode, used for navigation (1 = Fix not available; 2 = 2D; 3 = 3D) */
+
+    double  PDOP;       /**< Position Dilution Of Precision */
+    double  HDOP;       /**< Horizontal Dilution Of Precision */
+    double  VDOP;       /**< Vertical Dilution Of Precision */
+
+    double  lat;        /**< Latitude in NDEG - +/-[degree][min].[sec/60] */
+    double  lon;        /**< Longitude in NDEG - +/-[degree][min].[sec/60] */
+    double  elv;        /**< Antenna altitude above/below mean sea level (geoid) in meters */
+    double  speed;      /**< Speed over the ground in kilometers/hour */
+    double  direction;  /**< Track angle in degrees True */
+    double  declination; /**< Magnetic variation degrees (Easterly var. subtracts from true course) */
+
+    nmeaSATINFO satinfo; /**< Satellites information */
+
+} nmeaINFO;
+
+
+
+/**
+ * NMEA packets type which parsed and generated by library
+ */
+enum nmeaPACKTYPE
+{
+    GPNON   = 0x0000,   /**< Unknown packet type. */
+    GPGGA   = 0x0001,   /**< GGA - Essential fix data which provide 3D location and accuracy data. */
+    GPGSA   = 0x0002,   /**< GSA - GPS receiver operating mode, SVs used for navigation, and DOP values. */
+    GPGSV   = 0x0004,   /**< GSV - Number of SVs in view, PRN numbers, elevation, azimuth & SNR values. */
+    GPRMC   = 0x0008,   /**< RMC - Recommended Minimum Specific GPS/TRANSIT Data. */
+    GPVTG   = 0x0010    /**< VTG - Actual track made good and speed over ground. */
+};
+
+/**
+ * GGA packet information structure (Global Positioning System Fix Data)
+ */
+typedef struct _nmeaGPGGA
+{
+    nmeaTIME utc;       /**< UTC of position (just time) */
+	double  lat;        /**< Latitude in NDEG - [degree][min].[sec/60] */
+    char    ns;         /**< [N]orth or [S]outh */
+	double  lon;        /**< Longitude in NDEG - [degree][min].[sec/60] */
+    char    ew;         /**< [E]ast or [W]est */
+    int     sig;        /**< GPS quality indicator (0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive) */
+	int     satinuse;   /**< Number of satellites in use (not those in view) */
+    double  HDOP;       /**< Horizontal dilution of precision */
+    double  elv;        /**< Antenna altitude above/below mean sea level (geoid) */
+    char    elv_units;  /**< [M]eters (Antenna height unit) */
+    double  diff;       /**< Geoidal separation (Diff. between WGS-84 earth ellipsoid and mean sea level. '-' = geoid is below WGS-84 ellipsoid) */
+    char    diff_units; /**< [M]eters (Units of geoidal separation) */
+    double  dgps_age;   /**< Time in seconds since last DGPS update */
+    int     dgps_sid;   /**< DGPS station ID number */
+
+} nmeaGPGGA;
+
+/**
+ * GSA packet information structure (Satellite status)
+ */
+typedef struct _nmeaGPGSA
+{
+    char    fix_mode;   /**< Mode (M = Manual, forced to operate in 2D or 3D; A = Automatic, 3D/2D) */
+    int     fix_type;   /**< Type, used for navigation (1 = Fix not available; 2 = 2D; 3 = 3D) */
+    int     sat_prn[NMEA_MAXSAT]; /**< PRNs of satellites used in position fix (null for unused fields) */
+    double  PDOP;       /**< Dilution of precision */
+    double  HDOP;       /**< Horizontal dilution of precision */
+    double  VDOP;       /**< Vertical dilution of precision */
+
+} nmeaGPGSA;
+
+/**
+ * GSV packet information structure (Satellites in view)
+ */
+typedef struct _nmeaGPGSV
+{
+    int     pack_count; /**< Total number of messages of this type in this cycle */
+    int     pack_index; /**< Message number */
+    int     sat_count;  /**< Total number of satellites in view */
+    nmeaSATELLITE sat_data[NMEA_SATINPACK];
+
+} nmeaGPGSV;
+
+/**
+ * RMC packet information structure (Recommended Minimum sentence C)
+ */
+typedef struct _nmeaGPRMC
+{
+    nmeaTIME utc;       /**< UTC of position */
+    char    status;     /**< Status (A = active or V = void) */
+	double  lat;        /**< Latitude in NDEG - [degree][min].[sec/60] */
+    char    ns;         /**< [N]orth or [S]outh */
+	double  lon;        /**< Longitude in NDEG - [degree][min].[sec/60] */
+    char    ew;         /**< [E]ast or [W]est */
+    double  speed;      /**< Speed over the ground in knots */
+    double  direction;  /**< Track angle in degrees True */
+    double  declination; /**< Magnetic variation degrees (Easterly var. subtracts from true course) */
+    char    declin_ew;  /**< [E]ast or [W]est */
+    char    mode;       /**< Mode indicator of fix type (A = autonomous, D = differential, E = estimated, N = not valid, S = simulator) */
+
+} nmeaGPRMC;
+
+/**
+ * VTG packet information structure (Track made good and ground speed)
+ */
+typedef struct _nmeaGPVTG
+{
+    double  dir;        /**< True track made good (degrees) */
+    char    dir_t;      /**< Fixed text 'T' indicates that track made good is relative to true north */
+    double  dec;        /**< Magnetic track made good */
+    char    dec_m;      /**< Fixed text 'M' */
+    double  spn;        /**< Ground speed, knots */
+    char    spn_n;      /**< Fixed text 'N' indicates that speed over ground is in knots */
+    double  spk;        /**< Ground speed, kilometers per hour */
+    char    spk_k;      /**< Fixed text 'K' indicates that speed over ground is in kilometers/hour */
+
+} nmeaGPVTG;
+
+void nmea_zero_INFO(nmeaINFO *info);
+void nmea_zero_GPGGA(nmeaGPGGA *pack);
+void nmea_zero_GPGSA(nmeaGPGSA *pack);
+void nmea_zero_GPGSV(nmeaGPGSV *pack);
+void nmea_zero_GPRMC(nmeaGPRMC *pack);
+void nmea_zero_GPVTG(nmeaGPVTG *pack);
+void nmea_time_now(nmeaTIME *t);
+int nmea_parse(char *buf, int len, nmeaINFO *info);
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* __NMEA_INFO_H__ */
diff --git a/program/fwed/gpsd/nmea_parse.c b/program/fwed/gpsd/nmea_parse.c
new file mode 100644
index 0000000..cdd3a83
--- /dev/null
+++ b/program/fwed/gpsd/nmea_parse.c
@@ -0,0 +1,681 @@
+/*
+ *
+ * NMEA library
+ * URL: http://nmea.sourceforge.net
+ * Author: Tim (xtimor@gmail.com)
+ * Licence: http://www.gnu.org/licenses/lgpl.html
+ * $Id: context.c 17 2008-03-11 11:56:11Z xtimor $
+ *
+ */
+#include "nmea_parse.h"
+#include "cp_logger.h"
+
+#include <assert.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <limits.h>
+
+#define NMEA_TOKS_COMPARE   (1)
+#define NMEA_TOKS_PERCENT   (2)
+#define NMEA_TOKS_WIDTH     (3)
+#define NMEA_TOKS_TYPE      (4)
+
+/**
+ * \brief Convert string to number
+ */
+int nmea_atoi(const char *str, int str_sz, int radix)
+{
+    char *tmp_ptr;
+    char buff[NMEA_CONVSTR_BUF];
+    int res = 0;
+
+    if(str_sz < NMEA_CONVSTR_BUF)
+    {
+        memcpy(&buff[0], str, str_sz);
+        buff[str_sz] = '\0';
+        res = strtol(&buff[0], &tmp_ptr, radix);
+    }
+
+    return res;
+}
+
+/**
+ * \brief Convert string to fraction number
+ */
+double nmea_atof(const char *str, int str_sz)
+{
+    char *tmp_ptr;
+    char buff[NMEA_CONVSTR_BUF];
+    double res = 0;
+
+    if(str_sz < NMEA_CONVSTR_BUF)
+    {
+        memcpy(&buff[0], str, str_sz);
+        buff[str_sz] = '\0';
+        res = strtod(&buff[0], &tmp_ptr);
+    }
+
+    return res;
+}
+
+/**
+ * \brief Analyse string (specificate for NMEA sentences)
+ */
+int nmea_scanf(const char *buff, int buff_sz, const char *format, ...)
+{
+    const char *beg_tok;
+    const char *end_buf = buff + buff_sz;
+
+    va_list arg_ptr;
+    int tok_type = NMEA_TOKS_COMPARE;
+    int width = 0;
+    const char *beg_fmt = 0;
+    int snum = 0, unum = 0;
+
+    int tok_count = 0;
+    void *parg_target;
+
+    va_start(arg_ptr, format);
+    
+    for(; *format && buff < end_buf; ++format)
+    {
+        switch(tok_type)
+        {
+        case NMEA_TOKS_COMPARE:
+            if('%' == *format)
+                tok_type = NMEA_TOKS_PERCENT;
+            else if(*buff++ != *format)
+                goto fail;
+            break;
+        case NMEA_TOKS_PERCENT:
+            width = 0;
+            beg_fmt = format;
+            tok_type = NMEA_TOKS_WIDTH;
+        case NMEA_TOKS_WIDTH:
+            if(isdigit(*format))
+                break;
+            {
+                tok_type = NMEA_TOKS_TYPE;
+                if(format > beg_fmt)
+                    width = nmea_atoi(beg_fmt, (int)(format - beg_fmt), 10);
+            }
+        case NMEA_TOKS_TYPE:
+            beg_tok = buff;
+
+            if(!width && ('c' == *format || 'C' == *format) && *buff != format[1])
+                width = 1;
+
+            if(width)
+            {
+                if(buff + width <= end_buf)
+                    buff += width;
+                else
+                    goto fail;
+            }
+            else
+            {
+                if(!format[1] || (0 == (buff = (char *)memchr(buff, format[1], end_buf - buff))))
+                    buff = end_buf;
+            }
+
+            if(buff > end_buf)
+                goto fail;
+
+            tok_type = NMEA_TOKS_COMPARE;
+            tok_count++;
+
+            parg_target = 0; width = (int)(buff - beg_tok);
+
+            switch(*format)
+            {
+            case 'c':
+            case 'C':
+                parg_target = (void *)va_arg(arg_ptr, char *);
+                if(width && 0 != (parg_target))
+                    *((char *)parg_target) = *beg_tok;
+                break;
+            case 's':
+            case 'S':
+                parg_target = (void *)va_arg(arg_ptr, char *);
+                if(width && 0 != (parg_target))
+                {
+                    memcpy(parg_target, beg_tok, width);
+                    ((char *)parg_target)[width] = '\0';
+                }
+                break;
+            case 'f':
+            case 'g':
+            case 'G':
+            case 'e':
+            case 'E':
+                parg_target = (void *)va_arg(arg_ptr, double *);
+                if(width && 0 != (parg_target))
+                    *((double *)parg_target) = nmea_atof(beg_tok, width);
+                break;
+            };
+
+            if(parg_target)
+                break;
+            if(0 == (parg_target = (void *)va_arg(arg_ptr, int *)))
+                break;
+            if(!width)
+                break;
+
+            switch(*format)
+            {
+            case 'd':
+            case 'i':
+                snum = nmea_atoi(beg_tok, width, 10);
+                memcpy(parg_target, &snum, sizeof(int));
+                break;
+            case 'u':
+                unum = nmea_atoi(beg_tok, width, 10);
+                memcpy(parg_target, &unum, sizeof(unsigned int));
+                break;
+            case 'x':
+            case 'X':
+                unum = nmea_atoi(beg_tok, width, 16);
+                memcpy(parg_target, &unum, sizeof(unsigned int));
+                break;
+            case 'o':
+                unum = nmea_atoi(beg_tok, width, 8);
+                memcpy(parg_target, &unum, sizeof(unsigned int));
+                break;
+            default:
+                goto fail;
+            };
+
+            break;
+        };
+    }
+
+fail:
+
+    va_end(arg_ptr);
+
+    return tok_count;
+}
+
+int nmea_parse_time(const char *buff, int buff_sz, nmeaTIME *res)
+{
+    int success = 0;
+
+    switch(buff_sz)
+    {
+    case sizeof("hhmmss") - 1:
+        success = (3 == nmea_scanf(buff, buff_sz,
+            "%2d%2d%2d", &(res->hour), &(res->min), &(res->sec)
+            ));
+        break;
+    case sizeof("hhmmss.s") - 1:
+    case sizeof("hhmmss.ss") - 1:
+    case sizeof("hhmmss.sss") - 1:
+        success = (4 == nmea_scanf(buff, buff_sz,
+            "%2d%2d%2d.%d", &(res->hour), &(res->min), &(res->sec), &(res->hsec)
+            ));
+        break;
+    default:
+        log_err("Parse of time error (format error)!\n");
+        success = 0;
+        break;
+    }
+
+    return (success?0:-1);        
+}
+
+/**
+ * \brief Define packet type by header (nmeaPACKTYPE).
+ * @param buff a constant character pointer of packet buffer.
+ * @param buff_sz buffer size.
+ * @return The defined packet type
+ * @see nmeaPACKTYPE
+ */
+int nmea_pack_type(const char *buff, int buff_sz)
+{
+    static const char *pheads[] = {
+        "GPGGA",
+        "GPGSA",
+        "GPGSV",
+        "GPRMC",
+        "GPVTG",
+    };
+
+    assert(buff);
+
+    if(buff_sz < 5)
+        return GPNON;
+    else if(0 == memcmp(buff, pheads[0], 5))
+        return GPGGA;
+    else if(0 == memcmp(buff, pheads[1], 5))
+        return GPGSA;
+    else if(0 == memcmp(buff, pheads[2], 5))
+        return GPGSV;
+    else if(0 == memcmp(buff, pheads[3], 5))
+        return GPRMC;
+    else if(0 == memcmp(buff, pheads[4], 5))
+        return GPVTG;
+
+    return GPNON;
+}
+
+/**
+ * \brief Get the first line in buffer and check control sum (CRC).
+ * @param buff a constant character pointer of packets buffer.
+ * @param buff_sz buffer size.
+ * @param line pointer output for a line in the packet
+ * @param line_len a integer pointer for return the line length (must be defined).
+ * @return already read bytes to a line end from buff.
+ */
+int nmea_get_item_line(const char *buff, int buff_sz, char *line, int *line_len)
+{
+    static const int tail_sz = 3 /* *[CRC] */ + 2 /* \r\n */;
+    char  *start, *star;
+    int nread = 0;
+
+    *line_len = -1;
+
+    /* Data sample:
+     * $GPGGA,081803.000,3029.9100,N,11423.2012,E,1,05,1.6,38.7,M,-13.7,M,,0000*4C
+     * $GPGSA,A,3,18,24,21,22,15,,,,,,,,3.1,1.6,2.7*3A
+     * $GPRMC,081803.000,A,3029.9100,N,11423.2012,E,1.14,126.38,210113,,,A*62  
+     */
+    start = strchr(buff, '$');
+    if(!start)
+    {
+        /* Can not find the line start flag '$', means can not find an integrated line */
+        return buff_sz;
+    }
+
+    star = strchr(start, '*');
+    if(!star)
+    {
+        /* Can not find the line CRC start flag '*', means can not find an integrated line */
+        return buff_sz;
+    }
+
+    *line_len = star - start + 1; /* include '*' */
+    strncpy(line, start, *line_len);
+
+    nread = (star-buff) + tail_sz ;
+
+    return nread>buff_sz ? buff_sz : nread;
+}
+
+/**
+ * \brief Find tail of packet ("\r\n") in buffer and check control sum (CRC).
+ * @param buff a constant character pointer of packets buffer.
+ * @param buff_sz buffer size.
+ * @param res_crc a integer pointer for return CRC of packet (must be defined).
+ * @return Number of bytes to packet tail.
+ */
+int nmea_find_tail(const char *buff, int buff_sz, int *res_crc)
+{
+    static const int tail_sz = 3 /* *[CRC] */ + 2 /* \r\n */;
+
+    const char *end_buff = buff + buff_sz;
+    int nread = 0;
+    int crc = 0;
+
+    assert(buff && res_crc);
+
+    *res_crc = -1;
+
+    for(;buff < end_buff; ++buff, ++nread)
+    {
+        if(('$' == *buff) && nread)
+        {
+            buff = 0;
+            break;
+        }
+        else if('*' == *buff)
+        {
+            if(buff + tail_sz <= end_buff && '\r' == buff[3] && '\n' == buff[4])
+            {
+                *res_crc = nmea_atoi(buff + 1, 2, 16);
+                nread = buff_sz - (int)(end_buff - (buff + tail_sz));
+                if(*res_crc != crc)
+                {
+                    *res_crc = -1;
+                    buff = 0;
+                }
+            }
+
+            break;
+        }
+        else if(nread)
+            crc ^= (int)*buff;
+    }
+
+    if(*res_crc < 0 && buff)
+        nread = 0;
+
+    return nread;
+}
+
+/**
+ * \brief Parse GGA packet from buffer.
+ * @param buff a constant character pointer of packet buffer.
+ * @param buff_sz buffer size.
+ * @param pack a pointer of packet which will filled by function.
+ * @return 1 (true) - if parsed successfully or 0 (false) - if fail.
+ */
+int nmea_parse_GPGGA(const char *buff, int buff_sz, nmeaGPGGA *pack)
+{
+    char time_buff[NMEA_TIMEPARSE_BUF];
+
+    assert(buff && pack);
+
+    memset(pack, 0, sizeof(nmeaGPGGA));
+
+    log_dbg("parse_GPGGA: %s\n", buff);
+
+    if(14 != nmea_scanf(buff, buff_sz,
+        "$GPGGA,%s,%f,%C,%f,%C,%d,%d,%f,%f,%C,%f,%C,%f,%d*",
+        &(time_buff[0]),
+        &(pack->lat), &(pack->ns), &(pack->lon), &(pack->ew),
+        &(pack->sig), &(pack->satinuse), &(pack->HDOP), &(pack->elv), &(pack->elv_units),
+        &(pack->diff), &(pack->diff_units), &(pack->dgps_age), &(pack->dgps_sid)))
+    {
+        log_err("GPGGA parse error!\n");
+        return 0;
+    }
+
+    if(0 != nmea_parse_time(&time_buff[0], (int)strlen(&time_buff[0]), &(pack->utc)))
+    {
+        log_err("GPGGA time parse error!\n");
+        return 0;
+    }
+
+    return 1;
+}
+
+/**
+ * \brief Parse GSA packet from buffer.
+ * @param buff a constant character pointer of packet buffer.
+ * @param buff_sz buffer size.
+ * @param pack a pointer of packet which will filled by function.
+ * @return 1 (true) - if parsed successfully or 0 (false) - if fail.
+ */
+int nmea_parse_GPGSA(const char *buff, int buff_sz, nmeaGPGSA *pack)
+{
+    assert(buff && pack);
+
+    memset(pack, 0, sizeof(nmeaGPGSA));
+
+    log_dbg("parse_GPGSA: %s\n", buff);
+
+    if(17 != nmea_scanf(buff, buff_sz,
+        "$GPGSA,%C,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%f*",
+        &(pack->fix_mode), &(pack->fix_type),
+        &(pack->sat_prn[0]), &(pack->sat_prn[1]), &(pack->sat_prn[2]), &(pack->sat_prn[3]), &(pack->sat_prn[4]), &(pack->sat_prn[5]),
+        &(pack->sat_prn[6]), &(pack->sat_prn[7]), &(pack->sat_prn[8]), &(pack->sat_prn[9]), &(pack->sat_prn[10]), &(pack->sat_prn[11]),
+        &(pack->PDOP), &(pack->HDOP), &(pack->VDOP)))
+    {
+        log_err("GPGSA parse error!\n");
+        return 0;
+    }
+
+    return 1;
+}
+
+/**
+ * \brief Parse GSV packet from buffer.
+ * @param buff a constant character pointer of packet buffer.
+ * @param buff_sz buffer size.
+ * @param pack a pointer of packet which will filled by function.
+ * @return 1 (true) - if parsed successfully or 0 (false) - if fail.
+ */
+int nmea_parse_GPGSV(const char *buff, int buff_sz, nmeaGPGSV *pack)
+{
+    int nsen, nsat;
+
+    assert(buff && pack);
+
+    memset(pack, 0, sizeof(nmeaGPGSV));
+
+    log_dbg("parse_GPGSV: %s\n", buff);
+
+    nsen = nmea_scanf(buff, buff_sz,
+        "$GPGSV,%d,%d,%d,"
+        "%d,%d,%d,%d,"
+        "%d,%d,%d,%d,"
+        "%d,%d,%d,%d,"
+        "%d,%d,%d,%d*",
+        &(pack->pack_count), &(pack->pack_index), &(pack->sat_count),
+        &(pack->sat_data[0].id), &(pack->sat_data[0].elv), &(pack->sat_data[0].azimuth), &(pack->sat_data[0].sig),
+        &(pack->sat_data[1].id), &(pack->sat_data[1].elv), &(pack->sat_data[1].azimuth), &(pack->sat_data[1].sig),
+        &(pack->sat_data[2].id), &(pack->sat_data[2].elv), &(pack->sat_data[2].azimuth), &(pack->sat_data[2].sig),
+        &(pack->sat_data[3].id), &(pack->sat_data[3].elv), &(pack->sat_data[3].azimuth), &(pack->sat_data[3].sig));
+
+    nsat = (pack->pack_index - 1) * NMEA_SATINPACK;
+    nsat = (nsat + NMEA_SATINPACK > pack->sat_count)?pack->sat_count - nsat:NMEA_SATINPACK;
+    nsat = nsat * 4 + 3 /* first three sentence`s */;
+
+    if(nsen < nsat || nsen > (NMEA_SATINPACK * 4 + 3))
+    {
+        log_err("GPGSV parse error!\n");
+        return 0;
+    }
+
+    return 1;
+}
+
+/**
+ * \brief Parse RMC packet from buffer.
+ * @param buff a constant character pointer of packet buffer.
+ * @param buff_sz buffer size.
+ * @param pack a pointer of packet which will filled by function.
+ * @return 1 (true) - if parsed successfully or 0 (false) - if fail.
+ */
+int nmea_parse_GPRMC(const char *buff, int buff_sz, nmeaGPRMC *pack)
+{
+    int nsen;
+    char time_buff[NMEA_TIMEPARSE_BUF];
+
+    assert(buff && pack);
+
+    memset(pack, 0, sizeof(nmeaGPRMC));
+
+    log_dbg("parse_GPGRMC: %s\n", buff);
+
+    nsen = nmea_scanf(buff, buff_sz,
+        "$GPRMC,%s,%C,%f,%C,%f,%C,%f,%f,%2d%2d%2d,%f,%C,%C*",
+        &(time_buff[0]),
+        &(pack->status), &(pack->lat), &(pack->ns), &(pack->lon), &(pack->ew),
+        &(pack->speed), &(pack->direction),
+        &(pack->utc.day), &(pack->utc.mon), &(pack->utc.year),
+        &(pack->declination), &(pack->declin_ew), &(pack->mode));
+
+    if(nsen != 13 && nsen != 14)
+    {
+        log_err("GPRMC parse error!\n");
+        return 0;
+    }
+
+    if(0 != nmea_parse_time(&time_buff[0], (int)strlen(&time_buff[0]), &(pack->utc)))
+    {
+        log_err("GPRMC time parse error!\n");
+        return 0;
+    }
+
+    if(pack->utc.year < 90)
+        pack->utc.year += 100;
+    pack->utc.mon -= 1;
+
+    return 1;
+}
+
+/**
+ * \brief Parse VTG packet from buffer.
+ * @param buff a constant character pointer of packet buffer.
+ * @param buff_sz buffer size.
+ * @param pack a pointer of packet which will filled by function.
+ * @return 1 (true) - if parsed successfully or 0 (false) - if fail.
+ */
+int nmea_parse_GPVTG(const char *buff, int buff_sz, nmeaGPVTG *pack)
+{
+    assert(buff && pack);
+
+    memset(pack, 0, sizeof(nmeaGPVTG));
+
+    log_dbg("parse_GPVTG: %s\n", buff);
+
+    if(8 != nmea_scanf(buff, buff_sz,
+        "$GPVTG,%f,%C,%f,%C,%f,%C,%f,%C*",
+        &(pack->dir), &(pack->dir_t),
+        &(pack->dec), &(pack->dec_m),
+        &(pack->spn), &(pack->spn_n),
+        &(pack->spk), &(pack->spk_k)))
+    {
+        log_err("GPVTG parse error!\n");
+        return 0;
+    }
+
+    if( pack->dir_t != 'T' ||
+        pack->dec_m != 'M' ||
+        pack->spn_n != 'N' ||
+        pack->spk_k != 'K')
+    {
+        log_err("GPVTG parse error (format error)!\n");
+        return 0;
+    }
+
+    return 1;
+}
+
+/**
+ * \brief Fill nmeaINFO structure by GGA packet data.
+ * @param pack a pointer of packet structure.
+ * @param info a pointer of summary information structure.
+ */
+void nmea_GPGGA2info(nmeaGPGGA *pack, nmeaINFO *info)
+{
+    assert(pack && info);
+
+    info->utc.hour = pack->utc.hour;
+    info->utc.min = pack->utc.min;
+    info->utc.sec = pack->utc.sec;
+    info->utc.hsec = pack->utc.hsec;
+    info->sig = pack->sig;
+    info->HDOP = pack->HDOP;
+    info->elv = pack->elv;
+    info->lat = ((pack->ns == 'N')?pack->lat:-(pack->lat));
+    info->lon = ((pack->ew == 'E')?pack->lon:-(pack->lon));
+    info->smask |= GPGGA;
+}
+
+/**
+ * \brief Fill nmeaINFO structure by GSA packet data.
+ * @param pack a pointer of packet structure.
+ * @param info a pointer of summary information structure.
+ */
+void nmea_GPGSA2info(nmeaGPGSA *pack, nmeaINFO *info)
+{
+    int i, j, nuse = 0;
+
+    assert(pack && info);
+
+    info->fix = pack->fix_type;
+    info->PDOP = pack->PDOP;
+    info->HDOP = pack->HDOP;
+    info->VDOP = pack->VDOP;
+
+    for(i = 0; i < NMEA_MAXSAT; ++i)
+    {
+        for(j = 0; j < info->satinfo.inview; ++j)
+        {
+            if(pack->sat_prn[i] && pack->sat_prn[i] == info->satinfo.sat[j].id)
+            {
+                info->satinfo.sat[j].in_use = 1;
+                nuse++;
+            }
+        }
+    }
+
+    info->satinfo.inuse = nuse;
+    info->smask |= GPGSA;
+}
+
+/**
+ * \brief Fill nmeaINFO structure by GSV packet data.
+ * @param pack a pointer of packet structure.
+ * @param info a pointer of summary information structure.
+ */
+void nmea_GPGSV2info(nmeaGPGSV *pack, nmeaINFO *info)
+{
+    int isat, isi, nsat;
+
+    assert(pack && info);
+
+    if(pack->pack_index > pack->pack_count ||
+        pack->pack_index * NMEA_SATINPACK > NMEA_MAXSAT)
+        return;
+
+    if(pack->pack_index < 1)
+        pack->pack_index = 1;
+
+    info->satinfo.inview = pack->sat_count;
+
+    nsat = (pack->pack_index - 1) * NMEA_SATINPACK;
+    nsat = (nsat + NMEA_SATINPACK > pack->sat_count)?pack->sat_count - nsat:NMEA_SATINPACK;
+
+    for(isat = 0; isat < nsat; ++isat)
+    {
+        isi = (pack->pack_index - 1) * NMEA_SATINPACK + isat;
+        info->satinfo.sat[isi].id = pack->sat_data[isat].id;
+        info->satinfo.sat[isi].elv = pack->sat_data[isat].elv;
+        info->satinfo.sat[isi].azimuth = pack->sat_data[isat].azimuth;
+        info->satinfo.sat[isi].sig = pack->sat_data[isat].sig;
+    }
+
+    info->smask |= GPGSV;
+}
+
+/**
+ * \brief Fill nmeaINFO structure by RMC packet data.
+ * @param pack a pointer of packet structure.
+ * @param info a pointer of summary information structure.
+ */
+void nmea_GPRMC2info(nmeaGPRMC *pack, nmeaINFO *info)
+{
+    assert(pack && info);
+
+    if('A' == pack->status)
+    {
+        if(NMEA_SIG_BAD == info->sig)
+            info->sig = NMEA_SIG_MID;
+        if(NMEA_FIX_BAD == info->fix)
+            info->fix = NMEA_FIX_2D;
+    }
+    else if('V' == pack->status)
+    {
+        info->sig = NMEA_SIG_BAD;
+        info->fix = NMEA_FIX_BAD;
+    }
+
+    info->utc = pack->utc;
+    info->lat = ((pack->ns == 'N')?pack->lat:-(pack->lat));
+    info->lon = ((pack->ew == 'E')?pack->lon:-(pack->lon));
+    info->speed = pack->speed * NMEA_TUD_KNOTS;
+    info->direction = pack->direction;
+    info->smask |= GPRMC;
+}
+
+/**
+ * \brief Fill nmeaINFO structure by VTG packet data.
+ * @param pack a pointer of packet structure.
+ * @param info a pointer of summary information structure.
+ */
+void nmea_GPVTG2info(nmeaGPVTG *pack, nmeaINFO *info)
+{
+    assert(pack && info);
+
+    info->direction = pack->dir;
+    info->declination = pack->dec;
+    info->speed = pack->spk;
+    info->smask |= GPVTG;
+}
+
diff --git a/program/fwed/gpsd/nmea_parse.h b/program/fwed/gpsd/nmea_parse.h
new file mode 100644
index 0000000..f783e02
--- /dev/null
+++ b/program/fwed/gpsd/nmea_parse.h
@@ -0,0 +1,65 @@
+/*
+ *
+ * NMEA library
+ * URL: http://nmea.sourceforge.net
+ * Author: Tim (xtimor@gmail.com)
+ * Licence: http://www.gnu.org/licenses/lgpl.html
+ * $Id: parse.h 4 2007-08-27 13:11:03Z xtimor $
+ *
+ */
+
+#ifndef __NMEA_PARSE_H__
+#define __NMEA_PARSE_H__
+
+#include "nmea_info.h"
+
+#define NMEA_DEF_PARSEBUFF  (1024)
+#define NMEA_MIN_PARSEBUFF  (256)
+
+#define NMEA_CONVSTR_BUF    (256)
+#define NMEA_TIMEPARSE_BUF  (256)
+
+/*
+ * Distance units
+ */
+
+#define NMEA_TUD_YARDS      (1.0936)        /* *< Yeards, meter * NMEA_TUD_YARDS = yard */
+#define NMEA_TUD_KNOTS      (1.852)         /* *< Knots, kilometer / NMEA_TUD_KNOTS = knot */
+#define NMEA_TUD_MILES      (1.609)         /* *< Miles, kilometer / NMEA_TUD_MILES = mile */
+
+/*
+ * Speed units
+ */
+
+#define NMEA_TUS_MS         (3.6)           /* *< Meters per seconds, (k/h) / NMEA_TUS_MS= (m/s) */
+
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+int     nmea_atoi(const char *str, int str_sz, int radix);
+double  nmea_atof(const char *str, int str_sz);
+int     nmea_scanf(const char *buff, int buff_sz, const char *format, ...);
+
+int nmea_pack_type(const char *buff, int buff_sz);
+int nmea_find_tail(const char *buff, int buff_sz, int *res_crc);
+int nmea_get_item_line(const char *buff, int buff_sz, char *line, int *line_len);
+
+int nmea_parse_GPGGA(const char *buff, int buff_sz, nmeaGPGGA *pack);
+int nmea_parse_GPGSA(const char *buff, int buff_sz, nmeaGPGSA *pack);
+int nmea_parse_GPGSV(const char *buff, int buff_sz, nmeaGPGSV *pack);
+int nmea_parse_GPRMC(const char *buff, int buff_sz, nmeaGPRMC *pack);
+int nmea_parse_GPVTG(const char *buff, int buff_sz, nmeaGPVTG *pack);
+
+void nmea_GPGGA2info(nmeaGPGGA *pack, nmeaINFO *info);
+void nmea_GPGSA2info(nmeaGPGSA *pack, nmeaINFO *info);
+void nmea_GPGSV2info(nmeaGPGSV *pack, nmeaINFO *info);
+void nmea_GPRMC2info(nmeaGPRMC *pack, nmeaINFO *info);
+void nmea_GPVTG2info(nmeaGPVTG *pack, nmeaINFO *info);
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* __NMEA_PARSE_H__ */
diff --git a/program/fwed/gsmd/gsmd.c b/program/fwed/gsmd/gsmd.c
new file mode 100644
index 0000000..9846a24
--- /dev/null
+++ b/program/fwed/gsmd/gsmd.c
@@ -0,0 +1,153 @@
+/*********************************************************************************
+ *      Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  gsmd.c
+ *    Description:  This is the RWME(Radiation Monitor Works Engine) gsmd applet entry point
+ *                 
+ *        Version:  1.0.0(01/13/2013~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "01/13/2013 02:40:36 PM"
+ *                 
+ ********************************************************************************/
+#include "gsmd.h"
+
+static void usage_gsmd(const char *progname)
+{
+    banner(progname);
+
+    printf("Usage: %s [OPTION]...\n", progname); 
+    printf(" %s is a daemon program running on the device, which used to\n", progname); 
+    printf("auto start ppp connection and receive/send SMS by GPRS module.\n"); 
+    
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n"); 
+    printf(" -d[debug   ]  Running in debug mode\n");
+    printf(" -l[level   ]  Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); 
+    printf(" -h[help    ]  Display this help information\n");
+    printf(" -v[version ]  Display the program version\n");
+
+    return;
+}
+
+
+int gsmd_main(int argc, char **argv)
+{
+    int            opt; 
+    int            rv = 0; 
+    int            debug = 0;
+    char           pid_file[64] = { 0 }; /* The file used to record the PID */
+    char           *conf_file = GSMD_DEF_CONF_FILE;
+    const char     *progname=NULL;
+    char           *log_file = GSMD_DEF_LOG_FILE;
+    int            log_level = GSMD_DEF_LOG_LEVEL;
+    cp_logger      *logger = NULL;
+    MODULE_INFO    module;
+
+    struct option long_options[] = { 
+        {"conf", required_argument, NULL, 'c'}, 
+        {"debug", no_argument, NULL, 'd'}, 
+        {"level", required_argument, NULL, 'l'}, 
+        {"version", no_argument, NULL, 'v'}, 
+        {"help", no_argument, NULL, 'h'}, 
+        {NULL, 0, NULL, 0} 
+    };
+
+    progname = basename(argv[0]);
+
+    /* Parser the command line parameters */
+    while ((opt = getopt_long(argc, argv, "c:dl:vh", long_options, NULL)) != -1) 
+    { 
+        switch (opt) 
+        { 
+            case 'c':  /* Set configure file */ 
+                conf_file = optarg; 
+                break; 
+            
+            case 'd': /* Set debug running */ 
+                debug = 1; 
+                log_file = DBG_LOG_FILE;
+                break; 
+
+            case 'l': /* Set the log level */
+                log_level = atoi(optarg); 
+                break; 
+
+            case 'v':  /* Get software version */ 
+                banner(progname); /* Defined in version.h */ 
+                return EXIT_SUCCESS; 
+            
+            case 'h':  /* Get help information */ 
+                usage_gsmd(progname); 
+                return 0; 
+
+            default: 
+                break; 
+        } /*  end of "switch(opt)" */ 
+    }
+
+    if( !debug )
+    {
+        snprintf(pid_file, sizeof(pid_file), "%s/%s.pid", PID_FILE_PATH, progname);
+        if( check_daemon_running(pid_file) ) 
+        { 
+            printf("Programe already running, exit now.\n"); 
+            return -1; 
+        } 
+    }
+ 
+    if ( !(logger=cp_log_init(NULL, log_file, log_level, GSMD_LOG_FILE_SIZE)) )
+    {
+        printf("Logger initialize failure with file: %s\n", logger->file);
+        return -1;
+    }
+
+    if ( cp_log_open() )
+    {
+        printf("Logger initialize failure with file: %s\n", logger->file);
+        return -1;
+    }
+
+    if( !debug )
+    {
+        if( set_daemon_running(pid_file) )
+        {
+            log_fatal("Set program \"%s\" running as daemon failure.\n", progname);
+            goto CleanUp;
+        } 
+    }
+
+    cp_install_proc_signal();
+
+    if( init_gsm_module(&module) < 0 )
+    {
+        log_fatal("Initialise gsmd work context failure, rv=%d\n", rv); 
+        goto CleanUp; 
+    }
+
+    /*  Start the PPP thread to do PPP dial up */ 
+    if( ( rv=start_thread_ppp(&module)) < 0)
+    { 
+        log_fatal("Start PPP thread failure, rv=%d\n", rv); 
+        goto CleanUp; 
+    } 
+    
+#ifdef CONFIG_SMS
+    /*  Create the SMS thread to receive the SMS */
+    if( (rv=start_thread_sms(&module)) < 0)
+    {
+        log_fatal("Start SMS thread failure, rv=%d\n", rv); 
+        goto CleanUp;
+    }
+#endif
+
+    ctrl_thread_start(&module);
+
+CleanUp: 
+
+    log_nrml("Terminate program \"%s\".\n", progname);
+    unlink(pid_file); 
+    cp_log_term(); 
+    return rv;
+}
+
+
diff --git a/program/fwed/gsmd/gsmd.h b/program/fwed/gsmd/gsmd.h
new file mode 100644
index 0000000..3eaffa6
--- /dev/null
+++ b/program/fwed/gsmd/gsmd.h
@@ -0,0 +1,43 @@
+/********************************************************************************
+ *      Copyright:  (C) guowenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  gsmd.h
+ *    Description:  This is the rmwe(Radiation Moniter Worker Engine) gsmd applet head file
+ *
+ *        Version:  1.0.0(02/02/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/02/2012 11:33:33 AM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __GSMD_H_
+#define __GSMD_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include "cp_logger.h"
+#include "cp_string.h"
+#include "cp_proc.h"
+#include "version.h"
+#include "cp_ppp.h"
+#include "cp_gprs.h"
+
+#ifndef PID_FILE_PATH
+#define PID_FILE_PATH         "/var/run/" 
+#endif
+
+#define GSMD_DEF_CONF_FILE    "/apps/rmwe/etc/gsmd.conf"
+#define GSMD_DEF_LOG_FILE     "/logs/gsmd.log"
+
+#define GSMD_DEF_LOG_LEVEL    LOG_LEVEL_NRML
+#define GSMD_LOG_FILE_SIZE    12  /* Unit KiByte */
+
+extern int gsmd_main(int argc, char **argv);
+
+#endif /* End of __GSMD_H_ */
diff --git a/program/fwed/gsmd/makefile b/program/fwed/gsmd/makefile
new file mode 100644
index 0000000..8b3dcbf
--- /dev/null
+++ b/program/fwed/gsmd/makefile
@@ -0,0 +1,95 @@
+#*********************************************************************************
+#      Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common subdir Makefile which to compile all the C
+#                  source code to object files and then generate the shared or 
+#                  static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so,
+#                  which depends on the variable $LINK_MODE.
+#                      
+#        Version:  1.0.0(01/13/2013~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "Sun Jan 13 14:44:36 CST 2013"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+
+#If wanna compile in the subdir, not called by top makefile, uncomment it
+ifneq (${TOP_COMPILE}, YES) 
+LOCAL_COMPILE=YES
+endif
+
+LIBNAME=$(shell basename ${PWD})
+STALIB=lib${LIBNAME}.a
+DYNLIB=lib${LIBNAME}.so
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+#======================================================
+#  ---> Doesn't call by top makefile, compile by local
+#======================================================
+ifeq (${LOCAL_COMPILE}, YES)
+#ARCH?=arm926t
+ARCH?=i386
+CFLAGS+=-fPIC
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+    CROSS_COMPILE=
+else
+    CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux-
+endif
+
+PRJDIR?=$(shell dirname ${PWD})
+CFLAGS+=-I${PRJDIR}
+CC = ${CROSS_COMPILE}gcc
+AR = ${CROSS_COMPILE}ar
+
+endif #End local compile
+
+ifeq ("${LINK_MODE}", "STATIC")
+	LIBS = ${STALIB} 
+else 
+	LIBS=${DYNLIB}
+endif
+
+all: entry ${LIBS} install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **     Compile subdir ${LIBNAME} for ${ARCH}             ";
+	@echo " =========================================================";
+
+#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o
+${STALIB}:	$(OBJS) 
+	$(AR) -rcu $@ $(OBJS)
+
+${DYNLIB}:   $(OBJS) 
+	$(CC) -fPIC -shared -o $@ $(OBJS)
+
+%.o : %.c
+	$(CC) -c $< $(CFLAGS)
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	@if [ ! -z "${LIBS_PATH}" ] ; then \
+		mkdir -p ${LIBS_PATH} ; \
+		cp ${LIBS} ${LIBS_PATH}; \
+	fi;
+
+
+clean:
+	@rm -f *.o
+	@rm -rf *.gdb *.a *.so
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/program/fwed/makefile b/program/fwed/makefile
new file mode 100644
index 0000000..6594eb9
--- /dev/null
+++ b/program/fwed/makefile
@@ -0,0 +1,201 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 CoherentPlus Sdn. Bhd.
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common top Makefile which used to call function to 
+#                  Cross compile the subdir source code and link all the libs to 
+#                  excutable binary file.
+#    
+#        Version:  1.0.0(10/08/2011~)
+#         Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                 
+#********************************************************************************/
+
+APP_BINARY_NAME = fwed
+INST_PATH = /tftp
+TOP_PATH = $(shell pwd)
+LIBS_PATH=${TOP_PATH}/.libs
+COMPILE_DATE=$(shell date  +"%Y-%m-%d %H:%M:%S %Z")
+
+#Excutable binary file runs on platform
+ARCH?=arm920t
+#ARCH?=i386
+
+#Static linked or Dynamic link
+LINK_MODE=STATIC
+MODE=PRODUCTION
+DEBUG=1
+
+CFLAGS+=-Werror -Wall
+CFLAGS+=-DLINUX -DIS_LITTLE_ENDIAN -D_GNU_SOURCE -D_REENTRANT -D_LARGE_THREADS -D_THREAD_SAFE
+CFLAGS+=-DAPP_BINARY_NAME="${APP_BINARY_NAME}"
+
+#Compile Modules
+CFLAGS+=-DSWE_GSMD
+CFLAGS+=-DSWE_ROUTED
+
+CFLAGS+=-DCONFIG_PPP
+
+ifeq ("${MODE}", "PRODUCTION")
+	CFLAGS+=-DPRODUCTION_MODE
+endif
+ifdef DEBUG
+	CFLAGS+=-g -DDEBUG
+endif
+
+ifeq ("${LINK_MODE}", "STATIC")
+	CFLAGS+=--static
+	LDFLAGS+=-static
+else
+	LDFLAGS+=-ldl
+endif
+
+# ==================================
+# **   Cross Compiler Setting     **
+# ==================================
+
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+	CROSS_COMPILE=
+else
+	CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux-
+endif
+TOP_COMPILE=YES
+
+
+# Get alll the source code folder, all the source code in the subdir will be compiled and
+# archive to a static library, named lib${subdir_name}.a
+OBJFILES = $(patsubst %.c,%,$(wildcard *.c))
+SUBSRCS = $(shell find . -follow  -maxdepth 1 -type d|sed -n 's/.\///p'|grep -v 'libs' \
+		  |grep -v 'etc' | grep -v '.svn'|grep -v '.git'|grep -v 'include'|grep -v 'bin')
+
+# Add the subdir compiled static library into LDFLAGS
+#LDFLAGS+=$(patsubst %,-L%,$(SUBSRCS)) 
+#LDFLAGS+=$(patsubst %,-l%,$(SUBSRCS)) 
+
+LDFLAGS+=-L${LIBS_PATH}
+LDFLAGS+=$(patsubst %,-l%,$(SUBSRCS)) 
+LIBS=$(patsubst %,${LIBS_PATH}/lib%.a,$(SUBSRCS))
+LDFLAGS+=-Xlinker "-(" $(LIBS) -Xlinker "-)"
+
+CFLAGS+=$(patsubst %,-I${TOP_PATH}/%,$(SUBSRCS))
+CFLAGS+=-I$(TOP_PATH) 
+LDFLAGS+=-lpthread
+
+export CC=${CROSS_COMPILE}gcc
+export CXX=${CROSS_COMPILE}gcc
+export AR=${CROSS_COMPILE}ar
+export AS=${CROSS_COMPILE}as
+export LD=${CROSS_COMPILE}ld
+export RANLIB=${CROSS_COMPILE}ranlib
+export STRIP=${CROSS_COMPILE}strip
+export CFLAGS
+export LDFLAGS
+export ARCH
+export LINK_MODE
+export LIBS_PATH
+
+#A function used to goes into the sub-folder to compile
+MAKEFUNC = @MakeSubDir() \
+    { \
+        for DIR in ${SUBSRCS}; do \
+            if [ -d $${DIR} ] ; then \
+                cd $${DIR}; \
+                MakeSubDir; \
+                if [ -f makefile -o -f Makefile ]; then \
+                    pwd; \
+                    make $(1); \
+                    if [ "$$?" != "0" ]; then \
+                        exit 1; \
+                    fi; \
+                fi; \
+                cd ..; \
+            fi; \
+        done; \
+        if [ -f makefile -o -f Makefile ]; then \
+            make $(1); \
+            if [ "$$?" != "0" ]; then \
+                exit 1; \
+            fi; \
+        fi; \
+    }; \
+
+MAKEME = cd $(2); MakeSubDir $(1); cd ..;
+LOOPMAKEFUNC = $(MAKEFUNC) $(foreach dir,$(SUBSRCS),$(call MAKEME,$(1),$(dir)))
+
+.PHONY: all
+
+all: entry version prepare binary install
+
+prepare:
+	@if [ ! -L cp_library  ] ; then \
+		ln -s ../cp_library; \
+	fi
+
+entry:
+	@echo $(SUBSRCS)
+	@echo " ";
+	@echo " =========================================================";
+	@echo " ** Come into compile ${APP_BINARY_NAME} for ARCH $(ARCH) ";
+	@echo " =========================================================";
+	@echo " ";
+	@make clean
+
+version:
+	@echo "/* Generated by makefile, don't Edit it by hand */" > version.h
+	@echo '#define DATE "$(COMPILE_DATE)"' >> version.h
+	@echo "#define MAJOR 1" >>version.h
+	@echo "#define MINOR 0" >>version.h
+	@echo "#define REVER 0" >>version.h
+	@if [ -f .svn/entries ] ; then \
+		echo "#define SVNVER `sed -n -e 4p .svn/entries`" >>version.h; \
+	else \
+		echo "#define SVNVER 0" >>version.h; \
+	fi;
+	@echo "" >> version.h
+	@echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)' >> version.h
+	@echo '#define copyright() printf("Copyright (C) 2012 CoherentPlus Sdn. Bhd.\\n")' >>version.h
+	@echo '#define banner(progname) {version(progname); copyright(); printf("\\n");}' >>version.h
+	@echo "" >> version.h
+
+subdir:
+	@$(call LOOPMAKEFUNC,all)
+	@echo " ";
+	@echo " =========================================================";
+	@echo " ** Compile and linking ${APP_BINARY_NAME} for ${ARCH} now";
+	@echo " =========================================================";
+
+%: %.c
+	$(CC) $< $(CFLAGS) -c -o $@.o
+
+binary: subdir $(OBJFILES)
+	$(CC) $(CFLAGS) -o $(APP_BINARY_NAME) *.o $(LDFLAGS) 
+	$(STRIP) $(APP_BINARY_NAME)
+	
+tag:
+	@cscope -Rbq
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .
+
+install:
+	cp $(APP_BINARY_NAME) ${INST_PATH}
+
+uninstall:
+	rm -f ${INST_PATH}/$(APP_BINARY_NAME)
+
+clean:
+	@$(call LOOPMAKEFUNC,clean)
+	@rm -rf ${LIBS_PATH}
+	@rm -f version.h
+	@rm -f *.o $(APP_BINARY_NAME)
+	@rm -f *.elf*
+	@rm -f *.gdb
+	@rm -f cp_library
+
+distclean: clean
+	@$(call LOOPMAKEFUNC,distclean)
+
+clear: distclean
+	@rm -f tags  cscope*
+
diff --git a/program/fwed/zigd/makefile b/program/fwed/zigd/makefile
new file mode 100644
index 0000000..8b3dcbf
--- /dev/null
+++ b/program/fwed/zigd/makefile
@@ -0,0 +1,95 @@
+#*********************************************************************************
+#      Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This is the common subdir Makefile which to compile all the C
+#                  source code to object files and then generate the shared or 
+#                  static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so,
+#                  which depends on the variable $LINK_MODE.
+#                      
+#        Version:  1.0.0(01/13/2013~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "Sun Jan 13 14:44:36 CST 2013"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+
+#If wanna compile in the subdir, not called by top makefile, uncomment it
+ifneq (${TOP_COMPILE}, YES) 
+LOCAL_COMPILE=YES
+endif
+
+LIBNAME=$(shell basename ${PWD})
+STALIB=lib${LIBNAME}.a
+DYNLIB=lib${LIBNAME}.so
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+#======================================================
+#  ---> Doesn't call by top makefile, compile by local
+#======================================================
+ifeq (${LOCAL_COMPILE}, YES)
+#ARCH?=arm926t
+ARCH?=i386
+CFLAGS+=-fPIC
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+    CROSS_COMPILE=
+else
+    CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux-
+endif
+
+PRJDIR?=$(shell dirname ${PWD})
+CFLAGS+=-I${PRJDIR}
+CC = ${CROSS_COMPILE}gcc
+AR = ${CROSS_COMPILE}ar
+
+endif #End local compile
+
+ifeq ("${LINK_MODE}", "STATIC")
+	LIBS = ${STALIB} 
+else 
+	LIBS=${DYNLIB}
+endif
+
+all: entry ${LIBS} install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **     Compile subdir ${LIBNAME} for ${ARCH}             ";
+	@echo " =========================================================";
+
+#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o
+${STALIB}:	$(OBJS) 
+	$(AR) -rcu $@ $(OBJS)
+
+${DYNLIB}:   $(OBJS) 
+	$(CC) -fPIC -shared -o $@ $(OBJS)
+
+%.o : %.c
+	$(CC) -c $< $(CFLAGS)
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	@if [ ! -z "${LIBS_PATH}" ] ; then \
+		mkdir -p ${LIBS_PATH} ; \
+		cp ${LIBS} ${LIBS_PATH}; \
+	fi;
+
+
+clean:
+	@rm -f *.o
+	@rm -rf *.gdb *.a *.so
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/program/fwed/zigd/zigd.c b/program/fwed/zigd/zigd.c
new file mode 100644
index 0000000..c040989
--- /dev/null
+++ b/program/fwed/zigd/zigd.c
@@ -0,0 +1,152 @@
+/*********************************************************************************
+ *      Copyright:  (C) Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  zigd.c
+ *    Description:  This is the RWME(Radiation Monitor Works Engine) zigd applet entry point
+ *                 
+ *        Version:  1.0.0(01/13/2013~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "01/13/2013 02:40:36 PM"
+ *                 
+ ********************************************************************************/
+#include "zigd.h"
+
+static void usage_zigd(const char *progname)
+{
+    banner(progname);
+
+    printf("Usage: %s [OPTION]...\n", progname); 
+    printf(" %s is a daemon program running on the device to locate the device\n", progname); 
+    
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n"); 
+    printf(" -d[debug   ]  Running in debug mode\n");
+    printf(" -l[level   ]  Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); 
+    printf(" -h[help    ]  Display this help information\n");
+    printf(" -v[version ]  Display the program version\n");
+
+    return;
+}
+
+int init_zigd_context(ZIGD_CONTEX *ctx)
+{
+    log_info("Initialize zigd context.\n");
+
+    ctx->pwr_status = POWER_OFF;
+
+    /*  Initialize the zig dataport pointer */
+    ctx->comport = comport_init(ZIGD_DATAPORT, 9600, "8N1N");
+    if(NULL == ctx->comport)
+        return -1;
+    
+    return 0;
+}
+
+
+int zigd_main(int argc, char **argv)
+{
+    int            opt; 
+    int            rv = 0; 
+    int            debug = 0;
+    char           pid_file[64] = { 0 }; /* The file used to record the PID */
+    const char     *progname=NULL;
+    char           *log_file = ZIGD_DEF_LOG_FILE;
+    int            log_level = ZIGD_DEF_LOG_LEVEL;
+    cp_logger      *logger = NULL;
+    ZIGD_CONTEX    zigd_ctx;
+
+    struct option long_options[] = { 
+        {"debug", no_argument, NULL, 'd'}, 
+        {"level", required_argument, NULL, 'l'}, 
+        {"version", no_argument, NULL, 'v'}, 
+        {"help", no_argument, NULL, 'h'}, 
+        {NULL, 0, NULL, 0} 
+    };
+
+    progname = basename(argv[0]);
+
+    /* Parser the command line parameters */
+    while ((opt = getopt_long(argc, argv, "dl:vh", long_options, NULL)) != -1) 
+    { 
+        switch (opt) 
+        { 
+            case 'd': /* Set debug running */ 
+                debug = 1; 
+                log_file = DBG_LOG_FILE;
+                break; 
+
+            case 'l': /* Set the log level */
+                log_level = atoi(optarg); 
+                break; 
+
+            case 'v':  /* Get software version */ 
+                banner(progname); /* Defined in version.h */ 
+                return EXIT_SUCCESS; 
+            
+            case 'h':  /* Get help information */ 
+                usage_zigd(progname); 
+                return 0; 
+
+            default: 
+                break; 
+        } /*  end of "switch(opt)" */ 
+    }
+
+    if( !debug )
+    {
+        snprintf(pid_file, sizeof(pid_file), "%s/%s.pid", PID_FILE_PATH, progname);
+        if( check_daemon_running(pid_file) ) 
+        { 
+            printf("Programe already running, exit now.\n"); 
+            return -1; 
+        } 
+    }
+ 
+    if ( !(logger=cp_log_init(NULL, log_file, log_level, ZIGD_LOG_FILE_SIZE)) )
+    {
+        printf("Logger initialize failure with file: %s\n", logger->file);
+        return -1;
+    }
+
+    if ( cp_log_open() )
+    {
+        printf("Logger initialize failure with file: %s\n", logger->file);
+        return -1;
+    }
+
+    if( !debug )
+    {
+        if( set_daemon_running(pid_file) )
+        {
+            log_fatal("Set program \"%s\" running as daemon failure.\n", progname);
+            goto CleanUp;
+        } 
+    }
+
+    cp_install_proc_signal();
+
+    if( init_zigd_context(&zigd_ctx) < 0 )
+    {
+        log_fatal("Initialise zigd work context failure, rv=%d\n", rv); 
+        goto CleanUp; 
+    }
+
+#if 0
+    /*  Start the zig thread to locate the device */ 
+    if( (rv=start_thread_zigd(&(zigd_ctx))) < 0)
+    { 
+        log_fatal("Start PPP thread failure, rv=%d\n", rv); 
+        goto CleanUp; 
+    } 
+    
+    ctrl_thread_start( &zigd_ctx);
+#endif
+
+CleanUp: 
+    log_nrml("Terminate program \"%s\".\n", progname);
+    unlink(pid_file); 
+    cp_log_term(); 
+    return rv;
+}
+
+
diff --git a/program/fwed/zigd/zigd.h b/program/fwed/zigd/zigd.h
new file mode 100644
index 0000000..f05db03
--- /dev/null
+++ b/program/fwed/zigd/zigd.h
@@ -0,0 +1,51 @@
+/********************************************************************************
+ *      Copyright:  (C) guowenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  zigd.h
+ *    Description:  This is the rmwe(Radiation Moniter Worker Engine) zigd applet head file
+ *
+ *        Version:  1.0.0(02/02/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "02/02/2012 11:33:33 AM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __ZIGD_H_
+#define __ZIGD_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include "cp_comport.h"
+#include "cp_logger.h"
+#include "cp_string.h"
+#include "cp_proc.h"
+#include "version.h"
+
+#ifndef PID_FILE_PATH
+#define PID_FILE_PATH         "/var/run/" 
+#endif
+
+#define ZIGD_DEF_LOG_FILE     "/logs/zigd.log"
+#define ZIGD_DEF_LOG_LEVEL    LOG_LEVEL_NRML
+#define ZIGD_LOG_FILE_SIZE    12  /* Unit KiByte */
+
+#define ZIGD_DATAPORT         "/dev/ttyS1"
+
+#define POWER_OFF             0
+#define POWER_ON              1
+
+typedef struct __ZIGD_CONTEX
+{
+    unsigned char     pwr_status;
+    COM_PORT          *comport;
+} ZIGD_CONTEX;
+
+extern int zigd_main(int argc, char **argv);
+
+#endif /* End of __ZIGD_H_ */
diff --git a/program/serial2socket/thread_mode/cp_comport.c b/program/serial2socket/thread_mode/cp_comport.c
new file mode 100644
index 0000000..8363cb2
--- /dev/null
+++ b/program/serial2socket/thread_mode/cp_comport.c
@@ -0,0 +1,600 @@
+/*  ********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_comport.c
+ *    Description:  It's the comport operate library.
+ *                  
+ *        Version:  1.0.0(10/17/2011~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/17/2011 03:33:25 PM"
+ *                  
+ ********************************************************************************/
+
+#include    "cp_comport.h"
+
+/**************************************************************************************
+ *  Description: Set the comport structure
+ *   Input Args: dev_name:  The comport device name path, such as '/dev/ttyS3'
+ *               baudrate:  The baudrate, such as 115200
+ *               settings:  The databit,parity,stopbit,flowctrl settings, such as '8N1N'
+ *  Output Args: NONE
+ * Return Value: The cp_comport_t structure pointer.
+ *************************************************************************************/
+cp_comport_t *comport_init(const char *dev_name, int baudrate, const char *settings)
+{
+    cp_comport_t *comport = NULL;
+    if (NULL == (comport = (cp_comport_t *) malloc(sizeof(cp_comport_t))))
+    {
+        return NULL;
+    }
+    memset(comport, 0, sizeof(cp_comport_t));
+    comport->connected = 0;
+    comport->frag_size = 128;
+
+    strncpy(comport->dev_name, dev_name, DEVNAME_LEN);
+    comport->baudrate = baudrate;
+
+    set_settings(comport, settings);
+#ifdef  COM_DEBUG
+    disp_settings(comport);
+#endif
+
+    return comport;
+}
+
+#ifdef  COM_DEBUG
+void disp_settings(cp_comport_t * comport)
+{
+    COM_PRINT("Device:\t\t\t\"%s\"\n", comport->dev_name);
+    COM_PRINT("Baudrate:\t\t%ld\n", comport->baudrate);
+    COM_PRINT("DataBit:\t\t\'%d\'\n", comport->databit);
+    switch (comport->parity)
+    {
+      case 0:
+          COM_PRINT("Parity:\t\t\t\'N\'\n");
+          break;
+      case 1:
+          COM_PRINT("Parity:\t\t\t\'O\'\n");
+          break;
+      case 2:
+          COM_PRINT("Parity:\t\t\t\'E\'\n");
+          break;
+      case 3:
+          COM_PRINT("Parity:\t\t\t\'S\'\n");
+          break;
+    }
+    COM_PRINT("StopBit:\t\t\'%ld\'\n", (long int)comport->stopbit);
+    switch (comport->flowctrl)
+    {
+      case 0:
+          COM_PRINT("FlowCtrl:\t\t\'N\'\n");
+          break;
+      case 1:
+          COM_PRINT("FlowCtrl:\t\t\'S\'\n");
+          break;
+      case 2:
+          COM_PRINT("FlowCtrl:\t\t\'H\'\n");
+          break;
+      case 3:
+          COM_PRINT("FlowCtrl:\t\t\'B\'\n");
+          break;
+    }
+    COM_PRINT("\n");
+    return;
+}
+#endif
+
+/**************************************************************************************
+ *  Description: Set the comport databit,parity,stopbit,flowctrl
+ *   Input Args: comport: the cp_comport_t pointer
+ *               settings: The databit/parity/stopbit/flowctrl settings as like "8N1N" 
+ *  Output Args: NONE
+ * Return Value: NONE
+ *************************************************************************************/
+void set_settings(cp_comport_t * comport, const char *settings)
+{
+    if(NULL==settings || NULL==comport)
+        return ;
+
+    switch (settings[0])        /* data bit */
+    {
+      case '7':
+          comport->databit = 7;
+          break;
+      case '8':
+      default:
+          comport->databit = 8;
+          break;
+    }
+
+    switch (settings[1])        /* parity */
+    {
+      case 'O':
+      case 'o':
+          comport->parity = 1;
+          break;
+      case 'E':
+      case 'e':
+          comport->parity = 2;
+          break;
+      case 'S':
+      case 's':
+          comport->parity = 3;
+          break;
+      case 'N':
+      case 'n':
+      default:
+          comport->parity = 0;
+          break;
+    }
+
+    switch (settings[2])        /* stop bit */
+    {
+      case '0':
+          comport->stopbit = 0;
+          break;
+      case '1':
+      default:
+          comport->stopbit = 1;
+          break;
+    }
+
+    switch (settings[3])        /* flow control */
+    {
+      case 'S':
+      case 's':
+          comport->flowctrl = 1;
+          break;
+      case 'H':
+      case 'h':
+          comport->flowctrl = 2;
+          break;
+      case 'B':
+      case 'b':
+          comport->flowctrl = 3;
+          break;
+      case 'N':
+      case 'n':
+      default:
+          comport->flowctrl = 0;
+          break;
+    }
+}
+
+void comport_close(cp_comport_t * comport)
+{
+    if (0 != comport->fd)
+    {
+        COM_PRINT("Close device \"%s\"\n", comport->dev_name);
+        close(comport->fd);
+    }
+    comport->connected = 0x00;
+    comport->fd = -1;
+}
+
+void cp_comport_term(cp_comport_t * comport)
+{
+    if(NULL == comport)
+        return;
+
+    if (0 != comport->fd)
+    {
+        comport_close(comport);
+    }
+    memset(comport, 0x00, sizeof(cp_comport_t)); 
+    free(comport);
+    comport = NULL;
+
+    return;
+}
+
+int comport_open(cp_comport_t * comport)
+{
+    int retval = -1;
+    struct termios old_cfg, new_cfg;
+    int old_flags;
+    long tmp;
+
+    if(NULL==comport)
+        return -1;
+
+    comport_close(comport);
+
+
+    /* Not a TTY device */
+    if( !strstr(comport->dev_name, "tty"))
+    {
+        COM_PRINT("Open Not tty device \"%s\"\n", comport->dev_name);
+        comport->fd = open(comport->dev_name, O_RDWR);
+        retval = comport->fd<0 ? -2 : comport->fd;
+        goto CleanUp;
+    }
+
+    comport->fd = open(comport->dev_name, O_RDWR | O_NOCTTY | O_NONBLOCK);
+    if (comport->fd < 0)
+    {
+        retval = -3;
+        goto CleanUp;
+    }
+    COM_PRINT("Open device \"%s\"\n", comport->dev_name);
+
+    if ((-1 != (old_flags = fcntl(comport->fd, F_GETFL, 0)))
+        && (-1 != fcntl(comport->fd, F_SETFL, old_flags & ~O_NONBLOCK)))
+    {
+        // Flush input and output
+        if (-1 == tcflush(comport->fd, TCIOFLUSH))
+        {
+            retval = -4;
+            goto CleanUp;
+        }
+    }
+    else                        // Failure
+    {
+        retval = -5;
+        goto CleanUp;
+    }
+
+    if (0 != tcgetattr(comport->fd, &old_cfg))
+    {
+        retval = -6;          // Failed to get Com settings  
+        goto CleanUp;
+    }
+
+    memset(&new_cfg, 0, sizeof(new_cfg));
+
+    /*=====================================*/
+    /*       Configure comport         */
+    /*=====================================*/
+
+    new_cfg.c_cflag &= ~CSIZE;
+    new_cfg.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
+    new_cfg.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+    new_cfg.c_oflag &= ~(OPOST);
+
+    /* Set the data bit */
+    switch (comport->databit)
+    {
+      case 0x07:
+          new_cfg.c_cflag |= CS7;
+          break;
+      case 0x06:
+          new_cfg.c_cflag |= CS6;
+          break;
+      case 0x05:
+          new_cfg.c_cflag |= CS5;
+          break;
+      default:
+          new_cfg.c_cflag |= CS8;
+          break;
+    }
+
+    /* Set the parity */
+    switch (comport->parity)
+    {
+      case 0x01:               // Odd  
+          new_cfg.c_cflag |= (PARENB | PARODD);
+          new_cfg.c_cflag |= (INPCK | ISTRIP);
+          break;
+      case 0x02:               // Even 
+          new_cfg.c_cflag |= PARENB;
+          new_cfg.c_cflag &= ~PARODD;;
+          new_cfg.c_cflag |= (INPCK | ISTRIP);
+          break;
+      case 0x03:
+          new_cfg.c_cflag &= ~PARENB;
+          new_cfg.c_cflag &= ~CSTOPB;
+          break;
+      default:
+          new_cfg.c_cflag &= ~PARENB;
+    }
+
+    /* Set Stop bit */
+    if (0x01 != comport->stopbit)
+    {
+        new_cfg.c_cflag |= CSTOPB;
+    }
+    else
+    {
+        new_cfg.c_cflag &= ~CSTOPB;
+    }
+
+    /* Set flow control */
+    switch (comport->flowctrl)
+    {
+      case 1:                  // Software control 
+      case 3:
+          new_cfg.c_cflag &= ~(CRTSCTS);
+          new_cfg.c_iflag |= (IXON | IXOFF);
+          break;
+      case 2:                  // Hardware control
+          new_cfg.c_cflag |= CRTSCTS;   // Also called CRTSCTS
+          new_cfg.c_iflag &= ~(IXON | IXOFF);
+          break;
+      default:                 // NONE
+          new_cfg.c_cflag &= ~(CRTSCTS);
+          new_cfg.c_iflag &= ~(IXON | IXOFF);
+          break;
+    }
+
+    /* Set baudrate */
+    switch (comport->baudrate)
+    {
+      case 115200:
+          tmp = B115200;
+          break;
+      case 57600:
+          tmp = B57600;
+          break;
+      case 38400:
+          tmp = B38400;
+          break;
+      case 19200:
+          tmp = B19200;
+          break;
+      case 9600:
+          tmp = B9600;
+          break;
+      case 4800:
+          tmp = B4800;
+          break;
+      case 2400:
+          tmp = B2400;
+          break;
+      case 1800:
+          tmp = B1800;
+          break;
+      case 1200:
+          tmp = B1200;
+          break;
+      case 600:
+          tmp = B600;
+          break;
+      case 300:
+          tmp = B300;
+          break;
+      case 200:
+          tmp = B200;
+          break;
+      case 150:
+          tmp = B150;
+          break;
+      case 134:
+          tmp = B134;
+          break;
+      case 110:
+          tmp = B110;
+          break;
+      case 75:
+          tmp = B75;
+          break;
+      case 50:
+          tmp = B50;
+          break;
+      default:
+          tmp = B115200;
+    }
+    cfsetispeed(&new_cfg, tmp);
+    cfsetispeed(&new_cfg, tmp);
+
+    /* Set the Com port timeout settings */
+    new_cfg.c_cc[VMIN] = 0;
+    new_cfg.c_cc[VTIME] = 0;
+
+    tcflush(comport->fd, TCIFLUSH);
+    if (0 != tcsetattr(comport->fd, TCSANOW, &new_cfg))
+    {
+        retval = -7;          // Failed to set device com port settings   
+        goto CleanUp;
+    }
+
+    COM_PRINT("Connected device \"%s\".\n", comport->dev_name);
+    comport->connected = 0x01;
+    retval = comport->fd;
+
+CleanUp:
+    COM_PRINT("Open device \"%s\" %s.\n", comport->dev_name, retval>0 ? "successfully" : "failure");
+    return retval;
+}
+
+void nonblock()
+{
+    struct termios ttystate;
+
+    //get the terminal state
+    tcgetattr(STDIN_FILENO, &ttystate);
+
+    //turn off canonical mode
+    ttystate.c_lflag &= ~ICANON;
+    //minimum of number input read.
+    ttystate.c_cc[VMIN] = 1;
+
+    //set the terminal attributes.
+    tcsetattr(STDIN_FILENO, TCSANOW, &ttystate);
+}
+
+int kbhit()
+{
+    struct timeval tv;
+    fd_set fds;
+    tv.tv_sec = 0;
+    tv.tv_usec = 0;
+    FD_ZERO(&fds);
+    FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0
+    select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv);
+    return FD_ISSET(STDIN_FILENO, &fds);
+}
+
+int comport_recv(cp_comport_t * comport, char *buf, int buf_size, unsigned long timeout)
+{
+    int retval = 0;             // Function return value
+    int iRet;
+    fd_set stReadFds, stExcpFds;
+    struct timeval stTime;
+
+    if (NULL == buf || 0 >= buf_size)
+    {
+        COM_PRINT("%s() usage error.\n", __FUNCTION__);
+        retval = -1;
+        goto CleanUp;
+    }
+
+    if (0x01 != comport->connected)
+    {
+        COM_PRINT("%s() comport not connected.\n", __FUNCTION__);
+        retval = -2;
+        goto CleanUp;
+    }
+
+    //printf("bufsize=%d timeout=%lu\n", buf_size, timeout);
+
+    FD_ZERO(&stReadFds);
+    FD_ZERO(&stExcpFds);
+    FD_SET(comport->fd, &stReadFds);
+    FD_SET(comport->fd, &stExcpFds);
+
+    if (0xFFFFFFFF != timeout)
+    {
+        stTime.tv_sec = (time_t) (timeout / 1000);
+        stTime.tv_usec = (long)(1000 * (timeout % 1000));
+
+        iRet = select(comport->fd + 1, &stReadFds, 0, &stExcpFds, &stTime);
+        if (0 == iRet)
+        {
+            retval = 0;         // No data in Com port buffer
+            goto CleanUp;
+        }
+        else if (0 < iRet)
+        {
+            if (0 != FD_ISSET(comport->fd, &stExcpFds))
+            {
+                retval = -6;  // Error during checking recv status    
+                COM_PRINT("Error checking recv status.\n");
+                goto CleanUp;
+            }
+
+            if (0 == FD_ISSET(comport->fd, &stReadFds))
+            {
+                retval = 0;  // No incoming data 
+                COM_PRINT("No incoming data.\n");
+                goto CleanUp;
+            }
+        }
+        else
+        {
+            if (EINTR == errno)
+            {
+                COM_PRINT("catch interrupt signal.\n");
+                retval = 0;  // Interrupted signal catched
+            }
+            else
+            {
+                COM_PRINT("Check recv status failure.\n");
+                retval = -7;  // Error during checking recv status
+            }
+
+            goto CleanUp;
+        }
+    }
+
+    usleep(10000); /* sleep for 10ms for data incoming */
+
+    // Get data from Com port
+    iRet = read(comport->fd, buf, buf_size);
+    if (0 > iRet)
+    {
+        if (EINTR == errno)
+            retval = 0;      // Interrupted signal catched
+        else
+            retval = -3;      // Failed to read Com port
+
+        goto CleanUp;
+    }
+
+#if 0
+    {
+        int   i=0;
+        printf("Receive %d bytes data: \n", iRet);
+        for(i=0; i<iRet; i++)
+        {
+            printf("0x%02x ", buf[i]);
+        }
+        printf("\n");
+    }
+#endif
+
+    retval = iRet;
+
+  CleanUp:
+    return retval;
+
+}
+
+int comport_send(cp_comport_t * comport, char *buf, int send_bytes)
+{
+    char *ptr, *end;
+    int retval = 0;
+    int send = 0;
+
+    if (NULL == buf || 0 >= send_bytes)
+    {
+        COM_PRINT("%s() Usage error.\n", __FUNCTION__);
+        retval = -1;
+        goto CleanUp;
+    }
+
+    if (0x01 != comport->connected)    // Comport not opened ?
+    {
+        retval = -3;
+        COM_PRINT("Serail not connected.\n");
+        goto CleanUp;
+    }
+
+    //printf("Send %s with %d bytes.\n", buf, send_bytes);
+
+    // Large data, then slice them and send
+    if (comport->frag_size < send_bytes)
+    {
+        ptr = buf;
+        end = buf + send_bytes;
+
+        do
+        {
+            // Large than frag_size
+            if (comport->frag_size < (end - ptr))
+            {
+                send = write(comport->fd, ptr, comport->frag_size);
+                if (0 >= send || comport->frag_size != send)
+                {
+                    retval = -4;
+                    goto CleanUp;
+                }
+                ptr += comport->frag_size;
+            }
+            else                // Less than frag_size, maybe last fragmention.
+            {
+                send = write(comport->fd, ptr, (end - ptr));
+                if (0 >= send || (end - ptr) != send)
+                {
+                    retval = -4;
+                    goto CleanUp;
+                }
+                ptr += (end - ptr);
+            }
+        }
+        while (ptr < end);
+    }
+    else                        // The send data is not large than a fragmention.
+    {
+        send = write(comport->fd, buf, send_bytes);
+        if (0 >= send || send_bytes != send)
+        {
+            retval = -5;
+            goto CleanUp;
+        }
+    }
+
+  CleanUp:
+    return retval;
+}
+
diff --git a/program/serial2socket/thread_mode/cp_comport.h b/program/serial2socket/thread_mode/cp_comport.h
new file mode 100644
index 0000000..5c08b9b
--- /dev/null
+++ b/program/serial2socket/thread_mode/cp_comport.h
@@ -0,0 +1,67 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_comport.h
+ *    Description:  This head file is for the common TTY/Serial port operator library 
+ *                   
+ *        Version:  1.0.0(10/17/2011~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "10/17/2011 03:33:25 PM"
+ *                     
+ ********************************************************************************/
+#ifndef  _CP_COMPORT_H
+#define  _CP_COMPORT_H
+
+#include  <stdio.h>
+#include  <stdlib.h>
+#include  <unistd.h>
+#include  <string.h>
+#include  <getopt.h>
+#include  <fcntl.h>
+#include  <errno.h>
+#include  <termios.h>
+#include  <sys/stat.h>
+#include  <sys/wait.h>
+#include  <sys/types.h>
+#include  <sys/stat.h>
+#include  <sys/select.h>
+
+#define BUF_64  64
+
+#ifndef DEVNAME_LEN
+#define DEVNAME_LEN          64
+#endif
+
+//#define COM_DEBUG
+#ifdef  COM_DEBUG
+#define COM_PRINT(format,args...) printf(format, ##args)
+#else
+#define COM_PRINT(format,args...) do{} while(0);
+#endif
+
+//#define msleep(m)               {struct timespec cSleep; cSleep.tv_sec = 0; cSleep.tv_nsec = m * 1000; nanosleep(&cSleep, 0);}
+
+typedef struct cp_comport_s
+{
+    unsigned char databit, parity, stopbit, flowctrl, connected;
+    char dev_name[DEVNAME_LEN];
+    unsigned char  used;     /* This comport used or not now */
+    int fd;
+    int frag_size;
+    long baudrate;
+} cp_comport_t;
+
+cp_comport_t *comport_init(const char *dev_name, int baudrate, const char *settings);
+void comport_close(cp_comport_t * comport);
+int comport_open(cp_comport_t * comport);
+void cp_comport_term(cp_comport_t * comport);
+int comport_recv(cp_comport_t * comport, char *buf, int buf_size, unsigned long timeout);
+int comport_send(cp_comport_t * comport, char *buf, int send_bytes);
+
+void set_settings(cp_comport_t * comport, const char *settings);
+void disp_settings(cp_comport_t * comport);
+void nonblock();
+int kbhit();
+
+#endif
diff --git a/program/serial2socket/thread_mode/cp_logger.c b/program/serial2socket/thread_mode/cp_logger.c
new file mode 100644
index 0000000..efb04e5
--- /dev/null
+++ b/program/serial2socket/thread_mode/cp_logger.c
@@ -0,0 +1,433 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_log.c
+ *    Description:  This file is the linux infrastructural logger system library
+ *                 
+ *        Version:  1.0.0(08/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/08/2012 04:24:01 PM"
+ *                 
+ ********************************************************************************/
+
+#include "cp_logger.h"
+//#include "cp_common.h"
+
+#define PRECISE_TIME_FACTOR 1000
+
+static unsigned long log_rollback_size = LOG_ROLLBACK_NONE;
+
+static cp_logger *logger = NULL;
+
+char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" };
+
+static char *cp_time_format = DEFAULT_TIME_FORMAT;
+
+void cp_log_set_time_format(char *time_format)
+{
+    cp_time_format = time_format;
+}
+
+static void cp_log_default_signal_handler(int sig)
+{
+    if(!logger)
+        return ;
+
+    if (sig == SIGHUP)
+    {
+        signal(SIGHUP, cp_log_default_signal_handler);
+        log_fatal("SIGHUP received - reopenning log file [%s]", logger->file);
+        cp_log_reopen();
+    }
+}
+
+static void log_banner(char *prefix)
+{
+    if(!logger)
+        return ;
+
+    fprintf(logger->fp, "%s log \"%s\" on level [%s] size [%lu] KiB, log system version %s\n",
+            prefix, logger->file, log_str[logger->level], log_rollback_size / 1024, LOG_VERSION_STR);
+#ifdef LOG_FILE_LINE
+    fprintf(logger->fp, " [Date]    [Time]   [Level] [PID/TID] [File/Line]  [Content]\n");
+#else
+    fprintf(logger->fp, " [Date]    [Time]   [Level] [PID/TID] [Content]\n");
+#endif
+    fprintf(logger->fp, "-------------------------------------------------------------\n");
+}
+
+static void check_and_rollback(void)
+{
+    if(!logger)
+        return ;
+
+    if (log_rollback_size != LOG_ROLLBACK_NONE)
+    {
+        long _curOffset = ftell(logger->fp);
+
+        if ((_curOffset != -1) && (_curOffset >= log_rollback_size))
+        {
+            char cmd[512];
+
+            snprintf(cmd, sizeof(cmd), "cp -f %s %s.roll", logger->file, logger->file);
+            system(cmd);
+
+            if (-1 == fseek(logger->fp, 0L, SEEK_SET))
+                fprintf(logger->fp, "log rollback fseek failed \n");
+
+            rewind(logger->fp);
+
+            truncate(logger->file, 0);
+            log_banner("Already rollback");
+        }
+    }
+}
+
+cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size)
+{
+    if(NULL == log)
+    {
+        logger = malloc(sizeof(cp_logger));
+        memset(logger, 0, sizeof(cp_logger));
+        logger->flag |= CP_LOGGER_MALLOC; 
+    }
+    else
+    {
+        logger = log;
+        logger->flag |= CP_LOGGER_ARGUMENT; 
+    }
+
+    if(NULL == logger)
+    {
+        return NULL;
+    }
+
+    strncpy(logger->file, filename, FILENAME_LEN); 
+    logger->level = level;
+    logger->size = log_size; 
+
+    return logger;
+}
+
+int cp_log_open(void)
+{
+    struct sigaction act;
+    char *filemode;
+
+    if(!logger)
+    {
+        return -1;
+    }
+
+    log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024;    /* Unit KiB */
+        
+    if ('\0' == logger->file)
+        return -1;
+
+    if (!strcmp(logger->file, DBG_LOG_FILE))
+    {
+        logger->fp = stderr;
+        log_rollback_size = LOG_ROLLBACK_NONE;
+        logger->flag |= CP_LOGGER_CONSOLE;
+        goto OUT;
+    }
+
+    filemode = (log_rollback_size==LOG_ROLLBACK_NONE) ? "a+" : "w+";
+
+    logger->fp = fopen(logger->file, filemode);
+    if (NULL == logger->fp)
+    {
+        fprintf(stderr, "Open log file \"%s\" in %s failure\n", logger->file, filemode);
+        return -2;
+    }
+
+    act.sa_handler = cp_log_default_signal_handler;
+    sigemptyset(&act.sa_mask);
+    act.sa_flags = 0;
+    sigaction(SIGHUP, &act, NULL);
+
+  OUT:
+    log_banner("Initialize");
+
+    return 0;
+}
+
+void cp_log_close(void)
+{
+    if (!logger || !logger->fp )
+        return;
+
+    log_banner("\nTerminate");
+    cp_log_raw("\n\n\n\n");
+
+    fflush(logger->fp);
+
+    fclose(logger->fp);
+    logger->fp = NULL;
+
+    return ;
+}
+
+int cp_log_reopen(void)
+{
+    int rc = 0;
+    char *filemode;
+
+    if( !logger )
+        return -1;
+
+    log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024;    /* Unit KiB */
+
+    if (logger->flag & CP_LOGGER_CONSOLE )
+    {
+        fflush(logger->fp);
+        logger->fp = stderr;
+        return 0;
+    }
+
+    if (logger->fp)
+    {
+        cp_log_close();
+        filemode = log_rollback_size==LOG_ROLLBACK_NONE ? "a+" : "w+";
+        logger->fp = fopen(logger->file, filemode); 
+        
+        if (logger->fp == NULL)
+            rc = -2;
+    }
+    else
+    {
+        rc = -3;
+    }
+
+    if (!rc)
+    {
+        log_banner("\nReopen");
+    }
+    return rc;
+}
+
+void cp_log_term(void)
+{
+    if(!logger)
+        return ;
+
+    cp_log_close();
+
+    if (logger->flag & CP_LOGGER_MALLOC )
+    {
+        free(logger);
+    }
+    logger = NULL;
+}
+
+void cp_log_raw(const char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || !logger->fp)
+        return;
+
+    check_and_rollback();
+
+    va_start(argp, fmt);
+    vfprintf(logger->fp, fmt, argp);
+    va_end(argp);
+}
+
+static void cp_printout(char *level, char *fmt, va_list argp)
+{
+    char buf[MAX_LOG_MESSAGE_LEN];
+    struct tm *local;
+    struct timeval now;
+    char timestr[256];
+
+    if(!logger)
+        return ;
+
+    pthread_t tid;
+
+    check_and_rollback();
+
+#ifdef MULTHREADS
+    tid = pthread_self();
+#else 
+    tid = getpid();
+#endif
+
+    gettimeofday(&now, NULL);
+    local = localtime(&now.tv_sec);
+
+    strftime(timestr, 256, cp_time_format, local);
+    vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp);
+
+#ifdef DUMPLICATE_OUTPUT
+    printf("%s.%03ld [%s] [%06lu]: %s",
+           timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, buf);
+#endif
+
+    if (logger->fp)
+        fprintf(logger->fp, "%s.%03ld [%s] [%06lu]: %s", timestr, now.tv_usec / PRECISE_TIME_FACTOR,
+                level, tid, buf);
+
+    if (logger->fp)
+        fflush(logger->fp);
+}
+
+static void cp_printout_line(char *level, char *fmt, char *file, int line, va_list argp)
+{
+    char buf[MAX_LOG_MESSAGE_LEN];
+    struct tm *local;
+    struct timeval now;
+    char timestr[256];
+
+    if(!logger)
+        return ;
+
+    pthread_t tid;
+
+    check_and_rollback();
+
+#ifdef MULTHREADS
+    tid = pthread_self();
+#else 
+    tid = getpid();
+#endif
+
+    gettimeofday(&now, NULL);
+    local = localtime(&now.tv_sec);
+
+    strftime(timestr, 256, cp_time_format, local);
+    vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp);
+
+#ifdef DUMPLICATE_OUTPUT
+    printf("%s.%03ld [%s] [%06lu] (%s [%04d]) : %s",
+           timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf);
+#endif
+
+    if (logger->fp)
+        fprintf(logger->fp, "%s.%03ld [%s] [%06lu] (%s [%04d]) : %s",
+                timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf);
+
+    if (logger->fp)
+        fflush(logger->fp);
+}
+
+void cp_log_str(int level, const char *msg)
+{
+    if (!logger || level>logger->level)
+        return;
+
+    check_and_rollback();
+
+    if (logger->fp)
+        fwrite(msg, 1, strlen(msg), logger->fp);
+
+    if(logger->fp)
+        fflush(logger->fp);
+}
+
+void cp_log(int level, char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || level>logger->level)
+        return;
+
+    va_start(argp, fmt);
+    cp_printout(log_str[level], fmt, argp);
+    va_end(argp);
+}
+
+void cp_log_line(int level, char *file, int line, char *fmt, ...)
+{
+    va_list argp;
+
+    if (!logger || level>logger->level)
+        return;
+
+    va_start(argp, fmt);
+    cp_printout_line(log_str[level], fmt, file, line, argp);
+
+    va_end(argp);
+}
+
+#define LINELEN 81
+#define CHARS_PER_LINE 16
+static char *print_char =
+    "                "
+    "                "
+    " !\"#$%&'()*+,-./"
+    "0123456789:;<=>?"
+    "@ABCDEFGHIJKLMNO"
+    "PQRSTUVWXYZ[\\]^_"
+    "`abcdefghijklmno"
+    "pqrstuvwxyz{|}~ "
+    "                "
+    "                "
+    " ???????????????"
+    "????????????????" 
+    "????????????????" 
+    "????????????????" 
+    "????????????????" 
+    "????????????????";
+
+void cp_log_dump(int level, char *buf, int len)
+{
+    int rc;
+    int idx;
+    char prn[LINELEN];
+    char lit[CHARS_PER_LINE + 2];
+    char hc[4];
+    short line_done = 1;
+
+    if (!logger || level>logger->level)
+        return;
+
+    rc = len;
+    idx = 0;
+    lit[CHARS_PER_LINE] = '\0';
+
+    while (rc > 0)
+    {
+        if (line_done)
+            snprintf(prn, LINELEN, "%08X: ", idx);
+
+        do
+        {
+            unsigned char c = buf[idx];
+            snprintf(hc, 4, "%02X ", c);
+            strncat(prn, hc, LINELEN);
+
+            lit[idx % CHARS_PER_LINE] = print_char[c];
+        }
+        while (--rc > 0 && (++idx % CHARS_PER_LINE != 0));
+
+        line_done = (idx % CHARS_PER_LINE) == 0;
+        if (line_done)
+        {
+#ifdef DUMPLICATE_OUTPUT
+            printf("%s  %s\n", prn, lit);
+#endif
+            if (logger->fp)
+                fprintf(logger->fp, "%s  %s\n", prn, lit);
+        }
+    }
+
+    if (!line_done)
+    {
+        int ldx = idx % CHARS_PER_LINE;
+        lit[ldx++] = print_char[(int)buf[idx]];
+        lit[ldx] = '\0';
+
+        while ((++idx % CHARS_PER_LINE) != 0)
+            strncat(prn, "   ", LINELEN);
+
+#ifdef DUMPLICATE_OUTPUT
+        printf("%s  %s\n", prn, lit);
+#endif
+        if (logger->fp)
+            fprintf(logger->fp, "%s  %s\n", prn, lit);
+
+    }
+}
diff --git a/program/serial2socket/thread_mode/cp_logger.h b/program/serial2socket/thread_mode/cp_logger.h
new file mode 100644
index 0000000..7548514
--- /dev/null
+++ b/program/serial2socket/thread_mode/cp_logger.h
@@ -0,0 +1,111 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue <guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_logger.h
+ *    Description:  This file is the linux infrastructural logger system library
+ *
+ *        Version:  1.0.0(08/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "08/08/2012 05:16:56 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_LOG_H
+#define __CP_LOG_H
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <signal.h>
+#include <time.h>
+#include <errno.h>
+
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+#define LOG_VERSION_STR             "1.0.0"
+
+#ifndef FILENAME_LEN
+#define FILENAME_LEN                64
+#endif
+
+#define DEFAULT_LOGFILE             "cp_logger.log"
+#define DBG_LOG_FILE                "console"  /*  Debug mode log file is console */ 
+
+#define LOG_ROLLBACK_SIZE           512    /* Default rollback log size  */
+#define LOG_ROLLBACK_NONE           0      /* Set rollback size to 0 will not rollback  */
+
+#define DEFAULT_TIME_FORMAT         "%Y-%m-%d %H:%M:%S"
+#define MAX_LOG_MESSAGE_LEN         0x1000
+
+//#define DUMPLICATE_OUTPUT  /* Log to file and printf on console  */
+#define LOG_FILE_LINE      /* Log the file and line */
+
+enum
+{
+    LOG_LEVEL_DISB = 0,               /*  Disable "Debug" */
+    LOG_LEVEL_FATAL,                  /*  Debug Level "Fatal" */
+    LOG_LEVEL_ERROR,                  /*  Debug Level "ERROR" */
+    LOG_LEVEL_WARN,                   /*  Debug Level "warnning" */
+    LOG_LEVEL_NRML,                   /*  Debug Level "Normal" */
+    LOG_LEVEL_DEBUG,                  /*  Debug Level "Debug" */
+    LOG_LEVEL_INFO,                   /*  Debug Level "Information" */
+    LOG_LEVEL_TRACE,                  /*  Debug Level "Trace" */
+    LOG_LEVEL_MAX,
+};
+
+#define CP_LOGGER_MALLOC              1<<0
+#define CP_LOGGER_ARGUMENT            0<<0
+
+#define CP_LOGGER_CONSOLE             1<<1
+#define CP_LOGGER_FILE                0<<1
+
+#define CP_LOGGER_LEVEL_OPT           1<<2 /*  The log level is sepcified by the command option */
+typedef struct _cp_logger
+{
+    unsigned char      flag;  /* This logger pointer is malloc() or passed by argument */
+    char               file[FILENAME_LEN];
+    int                level;
+    int                size;
+
+    FILE               *fp;
+} cp_logger;
+
+extern char *log_str[];
+
+extern cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size);
+extern int  cp_log_open(void);
+extern void cp_log_set_time_format(char *time_format);
+extern int  cp_log_reopen(void);
+extern void cp_log_term(void);
+extern void cp_log_raw(const char *fmt, ...);
+extern void cp_log(int level, char *fmt, ...);
+extern void cp_log_line(int level, char *file, int line, char *fmt, ...);
+extern void cp_log_str(int level, const char *msg);
+
+extern void cp_log_dump(int level, char *buf, int len);
+
+#ifdef LOG_FILE_LINE
+#define log_trace(fmt, ...) cp_log_line(LOG_LEVEL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_info(fmt, ...)  cp_log_line(LOG_LEVEL_INFO,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_dbg(fmt, ...)   cp_log_line(LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_nrml(fmt, ...)  cp_log_line(LOG_LEVEL_NRML,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_warn(fmt, ...)  cp_log_line(LOG_LEVEL_WARN,  __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_err(fmt, ...)   cp_log_line(LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#define log_fatal(fmt, ...) cp_log_line(LOG_LEVEL_FATAL, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
+#else
+#define log_trace(fmt, ...) cp_log(LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__)
+#define log_info(fmt, ...) cp_log(LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
+#define log_dbg(fmt, ...) cp_log(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
+#define log_nrml(fmt, ...) cp_log(LOG_LEVEL_NRML, fmt, ##__VA_ARGS__)
+#define log_warn(fmt, ...) cp_log(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
+#define log_err(fmt, ...) cp_log(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
+#define log_fatal(fmt, ...) cp_log(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__)
+#endif
+
+
+#endif /* __CP_LOG_H  */
diff --git a/program/serial2socket/thread_mode/cp_proc.c b/program/serial2socket/thread_mode/cp_proc.c
new file mode 100644
index 0000000..769ec5c
--- /dev/null
+++ b/program/serial2socket/thread_mode/cp_proc.c
@@ -0,0 +1,342 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_proc.c
+ *    Description:  This file is the process API
+ *                 
+ *        Version:  1.0.0(11/06/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/06/2012 09:19:02 PM"
+ *                 
+ ********************************************************************************/ 
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <libgen.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <pthread.h>
+
+#include "cp_proc.h"
+#include "cp_logger.h"
+
+CP_PROC_SIG     g_cp_signal={0};
+
+void cp_proc_sighandler(int sig)
+{
+    switch(sig)
+    {
+        case SIGINT:
+            log_warn("SIGINT - stopping\n");
+            g_cp_signal.stop = 1;
+            break;
+
+        case SIGTERM:
+            log_warn("SIGTERM - stopping\n");
+            g_cp_signal.stop = 1;
+            break;
+        case SIGSEGV:
+            log_warn("SIGSEGV - stopping\n");
+#if 0
+            if(g_cp_signal.stop)
+                exit(0);
+
+            g_cp_signal.stop = 1;
+#endif
+            break;
+
+        case SIGPIPE:
+            log_warn("SIGPIPE - warnning\n");
+            break;
+    
+        default:
+            break;
+    }
+}
+
+
+void cp_install_proc_signal(void)
+{
+    struct sigaction sigact, sigign;
+
+    log_nrml("Install default signal handler.\n");
+
+    /*  Initialize the catch signal structure. */
+    sigemptyset(&sigact.sa_mask);
+    sigact.sa_flags = 0;
+    sigact.sa_handler = cp_proc_sighandler;
+
+    /*  Setup the ignore signal. */
+    sigemptyset(&sigign.sa_mask);
+    sigign.sa_flags = 0;
+    sigign.sa_handler = SIG_IGN;
+
+    sigaction(SIGTERM, &sigact, 0); /*  catch terminate signal "kill" command */
+    sigaction(SIGINT,  &sigact, 0); /*  catch interrupt signal CTRL+C */
+    //sigaction(SIGSEGV, &sigact, 0); /*  catch segmentation faults  */
+    sigaction(SIGPIPE, &sigact, 0); /*  catch broken pipe */
+#if 0
+    sigaction(SIGCHLD, &sigact, 0); /*  catch child process return */
+    sigaction(SIGUSR2, &sigact, 0); /*  catch USER signal */ 
+#endif
+}
+
+
+/* ****************************************************************************
+ * FunctionName: daemonize
+ * Description : Set the programe runs as daemon in background
+ * Inputs      : nodir: DON'T change the work directory to / :  1:NoChange 0:Change
+ *               noclose: close the opened file descrtipion or not 1:Noclose 0:Close
+ * Output      : NONE
+ * Return      : NONE
+ * *****************************************************************************/
+void daemonize(int nochdir, int noclose)
+{ 
+    int retval, fd; 
+    int i; 
+    
+    /*  already a daemon */ 
+    if (1 == getppid()) 
+        return; 
+    
+    /*  fork error */
+    retval = fork(); 
+    if (retval < 0) exit(1); 
+    
+    /*  parent process exit */
+    if (retval > 0)
+        exit(0); 
+    
+    /*  obtain a new process session group */
+    setsid(); 
+    
+    if (!noclose)
+    {
+        /*  close all descriptors */
+        for (i = getdtablesize(); i >= 0; --i)
+        {
+            //if (i != g_logPtr->fd)
+                close(i);
+        } 
+
+        /*  Redirect Standard input [0] to /dev/null */
+        fd = open("/dev/null", O_RDWR); 
+
+        /* Redirect Standard output [1] to /dev/null */
+        dup(fd);  
+
+        /* Redirect Standard error [2] to /dev/null */
+        dup(fd);  
+    } 
+    
+    umask(0); 
+    
+    if (!nochdir)
+        chdir("/"); 
+    
+    return;
+}
+
+/* ****************************************************************************
+ * FunctionName: record_daemon_pid
+ * Description : Record the running daemon program PID to the file "pid_file"
+ * Inputs      : pid_file:The record PID file path
+ * Output      : NONE
+ * Return      : 0: Record successfully  Else: Failure
+ * *****************************************************************************/
+int record_daemon_pid(const char *pid_file)
+{ 
+    struct stat fStatBuf; 
+    int fd = -1; 
+    int mode = S_IROTH | S_IXOTH | S_IRGRP | S_IXGRP | S_IRWXU;
+    char ipc_dir[64] = { 0 }; 
+    
+    strncpy(ipc_dir, pid_file, 64); 
+
+    /* dirname() will modify ipc_dir and save the result */ 
+    dirname(ipc_dir);  
+    
+    /* If folder pid_file PATH doesnot exist, then we will create it" */
+    if (stat(ipc_dir, &fStatBuf) < 0) 
+    { 
+        if (mkdir(ipc_dir, mode) < 0) 
+        { 
+            log_fatal("cannot create %s: %s\n", ipc_dir, strerror(errno)); 
+            return -1; 
+        } 
+        
+        (void)chmod(ipc_dir, mode); 
+    } 
+    
+    /*  Create the process running PID file */ 
+    mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+    if ((fd = open(pid_file, O_RDWR | O_CREAT | O_TRUNC, mode)) >= 0)
+    {
+        char pid[PID_ASCII_SIZE]; 
+        snprintf(pid, sizeof(pid), "%u\n", (unsigned)getpid()); 
+        write(fd, pid, strlen(pid)); 
+        close(fd); 
+
+        log_dbg("Record PID<%u> to file %s.\n", getpid(), pid_file);
+    } 
+    else 
+    {
+        log_fatal("cannot create %s: %s\n", pid_file, strerror(errno));
+        return -1;
+    }
+
+    return 0;
+}
+
+/* ****************************************************************************
+ * FunctionName: get_daemon_pid
+ * Description : Get the daemon process PID from the PID record file "pid_file"
+ * Inputs      : pid_file: the PID record file
+ * Output      : NONE
+ * Return      : pid_t: The daemon process PID number
+ * *****************************************************************************/
+pid_t get_daemon_pid(const char *pid_file)
+{ 
+    FILE *f; 
+    pid_t pid; 
+    
+    if ((f = fopen(pid_file, "rb")) != NULL)
+    { 
+        char pid_ascii[PID_ASCII_SIZE]; 
+        (void)fgets(pid_ascii, PID_ASCII_SIZE, f); 
+        (void)fclose(f); 
+        pid = atoi(pid_ascii); 
+    } 
+    else
+    {
+        log_fatal("Can't open PID record file %s: %s\n", pid_file, strerror(errno));
+        return -1;
+    } 
+    return pid;
+}     
+
+/* ****************************************************************************
+ * FunctionName: check_daemon_running
+ * Description : Check the daemon program already running or not
+ * Inputs      : pid_file: The record running daemon program PID
+ * Output      : NONE
+ * Return      : 1: The daemon program alread running   0: Not running
+ * *****************************************************************************/
+int check_daemon_running(const char *pid_file)
+{
+    int retVal = -1; 
+    struct stat fStatBuf;
+
+    retVal = stat(pid_file, &fStatBuf); 
+    if (0 == retVal) 
+    { 
+        pid_t pid = -1; 
+        printf("PID record file \"%s\" exist.\n", pid_file);
+
+        pid = get_daemon_pid(pid_file);
+        if (pid > 0)  /*  Process pid exist */
+        { 
+            if ((retVal = kill(pid, 0)) == 0) 
+            { 
+                printf("Program with PID[%d] seems running.\n", pid); 
+                return 1; 
+            } 
+            else   /* Send signal to the old process get no reply. */ 
+            { 
+                printf("Program with PID[%d] seems exit.\n", pid); 
+                remove(pid_file); 
+                return 0; 
+            } 
+        } 
+        else if (0 == pid) 
+        { 
+            printf("Can not read program PID form record file.\n"); 
+            remove(pid_file); 
+            return 0; 
+        } 
+        else  /* Read pid from file "pid_file" failure */
+        { 
+            printf("Read record file \"%s\" failure, maybe program still running.\n", pid_file); 
+            return 1; 
+        } 
+    } 
+    
+    return 0;
+}
+
+/* ****************************************************************************
+ * FunctionName: set_daemon_running
+ * Description : Set the programe running as daemon if it's not running and record 
+ *               its PID to the pid_file.
+ * Inputs      : pid_file: The record running daemon program PID
+ * Output      : NONE
+ * Return      : 0: Successfully. 1: Failure
+ * *****************************************************************************/
+int set_daemon_running(const char *pid_file)
+{ 
+    daemonize(0, 1); 
+    log_nrml("Program running as daemon [PID:%d].\n", getpid()); 
+    
+    if (record_daemon_pid(pid_file) < 0) 
+    { 
+        log_fatal("Record PID to file \"%s\" failure.\n", pid_file); 
+        return -2;
+    }
+
+    return 0;
+}
+
+
+int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg)
+{
+    int        retval = 0;
+
+    pthread_attr_t thread_attr; 
+
+    /* Initialize the thread  attribute */
+    retval = pthread_attr_init(&thread_attr); 
+    if(retval)
+        return -1;
+
+    /* Set the stack size of the thread */
+    retval = pthread_attr_setstacksize(&thread_attr, 120 * 1024); 
+    if(retval)
+        goto CleanUp;
+    
+    /* Set thread to detached state:Don`t need pthread_join */
+    retval = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); 
+    if(retval)
+        goto CleanUp;
+    
+    /* Create the thread */
+    retval = pthread_create(thread_id, &thread_attr, thread_workbody, thread_arg);
+    if(retval)
+        goto CleanUp;
+    
+CleanUp:
+    /* Destroy the  attributes  of  thread */
+    pthread_attr_destroy(&thread_attr); 
+    return retval;
+}
+
+
+void exec_system_cmd(const char *format, ...)
+{
+    char                cmd[256];
+    va_list             args;
+    //int                 done = 0; 
+    
+    memset(cmd, 0, sizeof(cmd)); 
+    
+    va_start(args, format); 
+    //done = vsnprintf(cmd, sizeof(cmd), format, args);
+    vsnprintf(cmd, sizeof(cmd), format, args);
+    va_end(args); 
+    
+    system(cmd);
+}
+
+
diff --git a/program/serial2socket/thread_mode/cp_proc.h b/program/serial2socket/thread_mode/cp_proc.h
new file mode 100644
index 0000000..f79abe8
--- /dev/null
+++ b/program/serial2socket/thread_mode/cp_proc.h
@@ -0,0 +1,42 @@
+/********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_proc.h
+ *    Description:  This head file is for Linux process API
+ *
+ *        Version:  1.0.0(11/06/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/06/2012 09:21:33 PM"
+ *                 
+ ********************************************************************************/
+
+#ifndef __CP_PROC_H
+#define __CP_PROC_H
+
+#include <signal.h>
+
+#define PID_ASCII_SIZE  11
+
+typedef struct __CP_PROC_SIG
+{
+    int       signal;
+    unsigned  stop;     /* 0: Not term  1: Stop  */
+}  CP_PROC_SIG;
+
+typedef void *(THREAD_BODY) (void *thread_arg);
+
+extern CP_PROC_SIG     g_cp_signal;
+extern void cp_install_proc_signal(void);
+
+extern void daemonize(int nochdir, int noclose);
+extern int record_daemon_pid(const char *pid_file);
+extern pid_t get_daemon_pid(const char *pid_file);
+extern int check_daemon_running(const char *pid_file);
+extern int set_daemon_running(const char *pid_file);
+
+extern void exec_system_cmd(const char *format, ...);
+
+extern int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg);
+
+#endif
diff --git a/program/serial2socket/thread_mode/cp_socket.c b/program/serial2socket/thread_mode/cp_socket.c
new file mode 100644
index 0000000..7773281
--- /dev/null
+++ b/program/serial2socket/thread_mode/cp_socket.c
@@ -0,0 +1,357 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2014 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_socket.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(11/18/2014)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/18/2014 11:15:04 PM"
+ *                 
+ ********************************************************************************/
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <netdb.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <sys/un.h>
+#include <sys/types.h>
+#include <linux/sockios.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include "cp_logger.h"
+#include "cp_socket.h"
+
+int cp_sock_block_connect(cp_socket_t *sock, char *servaddr, unsigned short servport)
+{
+    int                 rv = -1;
+    int                 sock_fd = -1;
+    char                service[20];
+    struct addrinfo     hints, *rp;
+    struct addrinfo     *res = NULL;
+    struct in_addr      inaddr;
+    char                ipstr[20];
+    int                 len;
+
+    if(!sock || !servaddr || !servport )
+    {
+        log_err("Invalid input argument\n");
+        return -1;
+    }
+
+    if(SOCK_STAT_CONNECTED == sock->status)
+    {
+        return 0;
+    }
+
+    len = strlen(servaddr);
+    len = len>DOMAIN_MAX_LEN ? DOMAIN_MAX_LEN : len;
+
+    memcpy(sock->servaddr, servaddr, strlen(servaddr));
+    sock->servport = servport;
+
+    log_nrml("Start socket connect to [%s:%d]...\n", sock->servaddr, sock->servport);
+
+    memset(&hints, 0, sizeof(struct addrinfo));
+    hints.ai_family = AF_INET; /*   Only support IPv4 */
+    hints.ai_socktype = SOCK_STREAM;
+
+    /*  If Hostname is a valid IP address, then don't use name resolution */
+    if( inet_aton(sock->servaddr, &inaddr) )
+    {
+        log_info("%s is a valid IP address, don't use name resolution.\n", sock->servaddr);
+        hints.ai_flags |= AI_NUMERICHOST;
+    }  
+
+    /*  Obtain address(es) matching servaddr/servport */
+    snprintf(service, sizeof(service), "%d", sock->servport);
+    if( (rv=getaddrinfo(sock->servaddr, service, &hints, &res)) )
+    {
+        log_err("getaddrinfo() parser [%s:%s] failed: %s\n", sock->servaddr, service, gai_strerror(rv));
+        rv = -2;
+        goto out;
+    }   
+
+    /*  getaddrinfo() returns a list of address structures. Try each address until connected */
+    rv = -3; /* default return value set be connect failure  */
+    sock->status = SOCK_STAT_DISCONNECT;
+    for (rp=res; rp!=NULL; rp=rp->ai_next)
+    {
+        /*  create the socket */ 
+        sock_fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); 
+        if( sock_fd < 0) 
+        { 
+            log_err("socket() create failed: %s\n", strerror(errno));
+            rv = -4;
+            continue;
+        }
+
+        inet_ntop(AF_INET, &(((struct sockaddr_in *)(rp->ai_addr))->sin_addr), ipstr, sizeof(ipstr));
+        log_dbg("DNS resolve IP address [%s]\n", ipstr);
+        
+        /* connect to the remote server successfully  */
+        if(0==connect(sock_fd, rp->ai_addr, rp->ai_addrlen))
+        {
+            memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr));
+            sock->fd = sock_fd;
+            sock->status = SOCK_STAT_CONNECTED;
+            rv = 0;
+            goto out;
+        }
+        else /* Connect to server failed. */
+        {
+            rv = -5;
+            log_err("connect() to server IP[%s] failed: %s\n", ipstr, strerror(errno));
+        }
+
+        close(sock_fd);
+    }
+
+
+out:
+    if( rv < 0 )
+    {
+        log_err("create socket connect to [%s:%d] failed: %s\n", sock->servaddr, sock->servport, strerror(errno));
+        sock->status = SOCK_STAT_DISCONNECT;
+        sock->fd = -1;
+    }
+    else
+    {
+        log_nrml("create socket connect to [%s:%d] successfully\n", sock->servaddr, sock->servport);
+        sock->status = SOCK_STAT_CONNECTED;
+    }
+
+    if(res)
+    {
+        freeaddrinfo(res); 
+    }
+
+    return rv;
+}
+
+int cp_sock_nonblock_connect(cp_socket_t *sock, char *servaddr, unsigned short servport)
+{
+    int                 rv = -1;
+    int                 sock_fd = -1;
+    char                service[20];
+    struct addrinfo     hints, *rp;
+    struct addrinfo     *res = NULL;
+    struct in_addr      inaddr;
+    char                ipstr[20];
+
+    if( !sock || !servaddr || !servport )
+    {
+        log_err("Invalid input argument\n");
+        return -1;
+    }
+
+    if(SOCK_STAT_CONNECTED == sock->status)
+    {
+        return 0;
+    }
+    else if(SOCK_STAT_CONNECTING == sock->status)
+    {
+        goto connecting;
+    }
+
+    log_nrml("Start socket connect to [%s:%d]...\n", sock->servaddr, sock->servport);
+
+    memset(&hints, 0, sizeof(struct addrinfo));
+    hints.ai_family = AF_INET; /*   Only support IPv4 */
+    hints.ai_socktype = SOCK_STREAM;
+
+    /*  If Hostname is a valid IP address, then don't use name resolution */
+    if( inet_aton(sock->servaddr, &inaddr) )
+    {
+        log_info("%s is a valid IP address, don't use name resolution.\n", sock->servaddr);
+        hints.ai_flags |= AI_NUMERICHOST;
+    }  
+
+    /*  Obtain address(es) matching servaddr/servport */
+    snprintf(service, sizeof(service), "%d", sock->servport);
+    if( (rv=getaddrinfo(sock->servaddr, service, &hints, &res)) )
+    {
+        log_err("getaddrinfo() parser [%s:%s] failed: %s\n", sock->servaddr, service, gai_strerror(rv));
+        rv = -2;
+        goto failed;
+    }   
+
+
+    /*  getaddrinfo() returns a list of address structures. Try each 
+     *  address until we successfully connect or bind 
+     */
+    rv = -3; /* Connect failure  */
+    for (rp=res; rp!=NULL; rp=rp->ai_next)
+    {
+        /*  Create the socket */ 
+        sock_fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); 
+        if( sock_fd < 0) 
+        { 
+            log_err("socket() create failed: %s\n", strerror(errno));
+            rv = -4;
+            continue;
+        }
+
+        inet_ntop(AF_INET, &(((struct sockaddr_in *)(rp->ai_addr))->sin_addr), ipstr, sizeof(ipstr));
+        log_dbg("DNS resolve IP address [%s]\n", ipstr);
+        
+        cp_sock_set_nonblock(sock_fd);
+
+        /* Nono block Connect to the remote server */
+        if(0==connect(sock_fd, rp->ai_addr, rp->ai_addrlen))
+        {
+            /* Conenct to server successfully */
+            memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr));
+            sock->fd = sock_fd;
+            sock->status = SOCK_STAT_CONNECTED;
+            rv = 0;
+            goto connected;
+        }
+        else
+        {
+            if(EINPROGRESS == errno)
+            {
+                /* Connect to server now in progress  */
+                memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr));
+                sock->fd = sock_fd;
+                sock->status = SOCK_STAT_CONNECTING; 
+                rv = 0; 
+                goto connecting;
+            }
+            else
+            {
+                /* Connect to server failed. */
+                close(sock_fd);
+                rv = -5;
+                log_err("connect() to server failed: %s\n", strerror(errno));
+                goto failed;
+            }
+        }
+
+        close(sock_fd);
+    }
+
+
+failed:
+    log_err("create socket connect to [%s:%d] failed: %s\n", sock->servaddr, sock->servport, strerror(errno));
+    sock->status = SOCK_STAT_DISCONNECT;
+    sock->fd = -1;
+    return rv;
+
+connecting:
+    if(SOCK_STAT_CONNECTING == sock->status)
+    {
+        int         len;
+
+        len = sizeof(sock->saddr);
+
+        errno = 0;
+        if( 0 == connect(sock->fd, &sock->saddr, len) )
+        {
+            /* connect() return 0 means it already connected */
+            sock->status = SOCK_STAT_CONNECTED;
+            rv = 0;
+            goto connected;
+        }
+
+        /* Connect failure will continue to check */
+        switch (errno)
+        {
+            case EISCONN:
+                sock->status = SOCK_STAT_CONNECTED;
+                rv = 0;
+                goto connected;
+
+            case EALREADY:
+            case EINPROGRESS:
+                log_dbg("socket[%d] connect to remote [%s:%d] in progress\n", sock->fd, sock->servaddr, sock->servport);
+                rv = 0;
+                goto cleanup;
+
+            default:
+                log_err("socket[%d] connect to remote [%s:%d] failed: %s\n", sock->fd, sock->servaddr, sock->servport, strerror(errno));
+                sock->status = SOCK_STAT_DISCONNECT;
+                rv = -7;
+                break;
+        }
+    }
+
+connected:
+    if(SOCK_STAT_CONNECTED == sock->status)
+    {
+        rv = 0;
+        log_nrml("socket[%d] connected to remote server [%s:%d]\n", sock->fd, sock->servaddr, sock->servport);
+        goto cleanup;
+    }
+
+cleanup:
+    if(res)
+        freeaddrinfo(res);  /* No longer needed */
+
+    return rv;
+}
+
+
+int cp_sock_set_nonblock(int sockfd)
+{
+    int opts;
+    /*
+     * fcntl may set: 
+     *
+     * EACCES, EAGAIN: Operation is prohibited by locks held by other 
+     *          processes. Or, operation is prohibited because the file has 
+     *          been memory-mapped by another process. 
+     * EBADF:   fd is not an open file descriptor, or the command was F_SETLK 
+     *          or F_SETLKW and the file descriptor open mode doesn't match 
+     *          with the type of lock requested.
+     * EDEADLK: It was detected that the specified F_SETLKW command would 
+     *          cause a deadlock.
+     * EFAULT:  lock is outside your accessible address space.
+     * EINTR:   For F_SETLKW, the command was interrupted by a signal. For 
+     *          F_GETLK and F_SETLK, the command was interrupted by a signal 
+     *          before the lock was checked or acquired. Most likely when 
+     *          locking a remote file (e.g. locking over NFS), but can 
+     *          sometimes happen locally.
+     * EINVAL:  For F_DUPFD, arg is negative or is greater than the maximum 
+     *          allowable value. For F_SETSIG, arg is not an allowable signal 
+     *          number.
+     * EMFILE:  For F_DUPFD, the process already has the maximum number of 
+     *          file descriptors open. 
+     * ENOLCK:  Too many segment locks open, lock table is full, or a remote 
+     *          locking protocol failed (e.g. locking over NFS).
+     * EPERM:   Attempted to clear the O_APPEND flag on a file that has the 
+     *          append-only attribute set.
+     */
+    opts = fcntl(sockfd, F_GETFL);
+    if (opts < 0)
+    {
+        log_warn("fcntl() get socket options failure: %s\n", strerror(errno));
+        return -1;
+    }
+
+    opts |= O_NONBLOCK;
+    if (fcntl(sockfd, F_SETFL, opts) < 0)
+    {
+        log_warn("fcntl() set socket options failure: %s\n", strerror(errno));
+        return -1;
+    }
+
+    log_dbg("Set socket[%d] none blocking\n", sockfd);
+    return opts;
+}
+
+
+
+void cp_sock_close(cp_socket_t *sock)
+{
+    close(sock->fd);
+    sock->fd = 0;
+    sock->status = SOCK_STAT_INIT;
+}
+
diff --git a/program/serial2socket/thread_mode/cp_socket.h b/program/serial2socket/thread_mode/cp_socket.h
new file mode 100644
index 0000000..ada48c1
--- /dev/null
+++ b/program/serial2socket/thread_mode/cp_socket.h
@@ -0,0 +1,65 @@
+/********************************************************************************
+ *      Copyright:  (C) 2014 Guo Wenxue<guowenxue@gmail.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  cp_socket.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(11/19/2014)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/19/2014 12:16:45 AM"
+ *                 
+ ********************************************************************************/
+#ifndef __CP_SOCKET_H_
+#define __CP_SOCKET_H_
+
+#include <sys/types.h> 
+#include <sys/socket.h>
+
+#define DOMAIN_MAX_LEN             128
+
+#define SOCK_STAT_INIT             0
+#define SOCK_STAT_CONNECTING       1
+#define SOCK_STAT_CONNECTED        2
+#define SOCK_STAT_DISCONNECT       3
+
+typedef struct cp_socket_s 
+{
+    char               servaddr[DOMAIN_MAX_LEN];      /*  connect server hostname or IP address */
+    unsigned short     servport;                      /*  connect server port  */
+    int                fd;                            /*  socket fd  */ 
+    struct sockaddr    saddr;                         /*  sockaddr for none-block connect */ 
+    unsigned char      status;                        /*  socket connect status: 0:disconnect 1:connecting 2:connected  */
+} cp_socket_t;
+
+
+/* Description: create socket object and connect to server in block mode
+ * $sock:       socket object, if it's NULL will be malloced.
+ * $servaddr:   connect server hostname or IP address
+ * $servport:   connect to server port
+ *
+ * Return:      socket object address
+ */
+extern int cp_sock_block_connect(cp_socket_t *sock, char * servaddr, unsigned short servport);
+
+
+/* Description: set socket to none block mode  */
+extern int cp_sock_set_nonblock(int sockfd);
+
+/* Description: create socket object and connect to server in none block mode
+ * $sock:       socket object, if it's NULL will be malloced.
+ * $servaddr:   connect server hostname or IP address
+ * $servport:   connect to server port
+ *
+ * Return:      0: connecting or connected  <0: connect failure 
+ */
+
+extern int cp_sock_nonblock_connect(cp_socket_t *sock, char * servaddr, unsigned short servport);
+
+
+/* Description: close socket  */
+extern void cp_sock_close(cp_socket_t *sock);
+
+
+#endif
+
diff --git a/program/serial2socket/thread_mode/makefile b/program/serial2socket/thread_mode/makefile
new file mode 100644
index 0000000..5819c95
--- /dev/null
+++ b/program/serial2socket/thread_mode/makefile
@@ -0,0 +1,70 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This Makefile used to call function to compile all the C source
+#                  in current folder and links all the objects file into a excutable
+#                  binary file.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+INSTPATH=/tftp
+
+APP_BINARY_NAME = sp2sck
+
+LDFLAGS+=-lpthread
+CFLAGS+=-Wall -Werror
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+CFLAGS+=-I${PWD}
+
+CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux-
+export CC=${CROSS_COMPILE}gcc
+export CXX=${CROSS_COMPILE}g++
+export AR=${CROSS_COMPILE}ar
+export AS=${CROSS_COMPILE}as
+export RANLIB=${CROSS_COMPILE}ranlib
+export STRIP=${CROSS_COMPILE}strip
+export CFLAGS
+export LDFLAGS
+
+
+all: entry $(APP_BINARY_NAME)
+	make install
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **        Compile ${APP_BINARY_NAME} by ${CC}         ";
+	@echo " =========================================================";
+
+$(APP_BINARY_NAME):	$(OBJS) 
+	$(CC)  -o $@ *.c ${LDFLAGS}
+	@$(STRIP) $(APP_BINARY_NAME)
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	@cp $(APP_BINARY_NAME) ${INSTPATH}
+
+clean: 
+	@rm -f *.o $(APP_BINARY_NAME) 
+	@rm -rf *.gdb *.a *.so *.elf*
+	@rm -f *.log
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
+
diff --git a/program/serial2socket/thread_mode/sp2sck.c b/program/serial2socket/thread_mode/sp2sck.c
new file mode 100644
index 0000000..0c29513
--- /dev/null
+++ b/program/serial2socket/thread_mode/sp2sck.c
@@ -0,0 +1,319 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2018 LingYun IoT System Studio
+ *                  All rights reserved.
+ *
+ *       Filename:  sp2sck.c
+ *    Description:  This file is the serial port to socket converter
+ *                 
+ *        Version:  1.0.0(2018年05月29日)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "2018年05月29日 21时03分54秒"
+ *                 
+ ********************************************************************************/
+
+#include <libgen.h>
+#include "cp_logger.h"
+#include "cp_comport.h"
+#include "cp_socket.h"
+#include "cp_proc.h"
+#include "sp2sck.h"
+
+
+void *comport_worker(void *);
+void *socket_worker(void *);
+
+
+/* Show program version information, can used by 'sp2sck --version or sp2sck -v'*/
+static inline void prog_version(const char *progname)
+{
+    printf("%s Version 1.0.0 Build(%s)\n", progname, __DATE__);
+    return ;
+}
+
+
+/* Show program help information, can used by 'sp2sck --help or sp2sck -h'*/
+static void prog_usage(const char *progname)
+{
+    prog_version(progname);
+    
+    printf("Usage: %s [OPTION]...\n", progname);
+    printf("Receive date from a serial port and transfer the data to remote server by socket.\n");
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n");
+
+    printf(" -d[debug   ]  Running in debug mode\n");
+    printf(" -l[level   ]  Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1);
+    printf(" -c[comport ]  Serial port device, default as /dev/ttyS1.\n");
+    printf(" -b[baudrate]  Baudrate, default as 115200.\n");
+    printf(" -s[server  ]  Socket connect server host and port, format as: Hostname:Port, default as 127.0.0.1:8900\n");
+
+    printf(" -v[version ]  Display program version\n");
+    printf(" -h[help    ]  Display this help information\n");
+    return ;
+}
+
+
+int main (int argc, char **argv)
+{
+    const char             *progname=NULL;
+
+    int                    opt;
+    int                    debug = 0;            /* program running information log to stdard output */
+    char                   pid_file[64] = { 0 }; /*   The file used to record the PID */
+    int                    log_level = LOG_LEVEL_TRACE;  /* program running information log to file level  */
+    cp_logger             *logger;
+    char                  *log_file="sp2sck.log";        /* program running information log file name  */
+
+    char                  *devname = "/dev/ttyS1";      /* default serial port, can use '-c' option to change */
+    unsigned long          baudrate = 115200;           /* default serial port baudrate, can use '-b' option to change */
+    char                  *server="127.0.0.1:8900";    /* default connect server address, can use '-s' option to change */
+
+
+    sp2sck_ctx_t           ctx;
+    int                    rv;
+    pthread_t              tid;
+
+    memset(&ctx, 0, sizeof(ctx));
+
+    /* progranm command options  */
+    struct option long_options[] = { 
+        {"debug", no_argument, NULL, 'd'},          /* sp2sck -d or sp2sck --debug, log to standard output or not */
+        {"level", required_argument, NULL, 'l'},    /* sp2sck -l 7, specify log to file level */
+        {"comport", required_argument, NULL, 'c'},  /* sp2sck -c /dev/ttyUSB0, specify serial port device name */
+        {"baudrate", required_argument, NULL, 'b'}, /* sp2sck -b 115200, specify serial port baudrate  */
+        {"server", required_argument, NULL, 's'},   /* sp2sck -s 192.168.0.5:9999, specify server address and port */
+        {"version", no_argument, NULL, 'v'},        /* sp2sck -v or sp2sck --version to check program version information */
+        {"help", no_argument, NULL, 'h'},           /* sp2sck -h or sp2sck --help to get program help information  */
+        {NULL, 0, NULL, 0}                          /* array end flag */
+    }; 
+
+
+    progname = basename(argv[0]);
+
+
+    /* Parser the command line options */
+    while ((opt = getopt_long(argc, argv, "c:b:s:dl:vh", long_options, NULL)) != -1)
+    {
+        switch (opt)
+        {
+            case 'c':  /* sp2sck -c /dev/ttyUSB0 */
+                devname = optarg;
+                break;
+
+            case 'b':  /* sp2sck -b 115200 */
+                baudrate = atol(optarg);
+                break;
+
+            case 's': /*  sp2sck -s 192.168.0.5:9999 */
+                server=optarg;
+                break;
+
+            case 'd': /* sp2sck -d or sp2sck --debug */
+                debug = 1;
+                log_file = DBG_LOG_FILE;
+                break;
+
+            case 'l': /* sp2sck -l 7 */
+                rv = atoi(optarg);
+                log_level = rv>LOG_LEVEL_MAX ? LOG_LEVEL_MAX-1 : rv;
+                break;
+
+            case 'v':  /* sp2sck -v */
+                prog_version(progname); 
+                return EXIT_SUCCESS;
+
+            case 'h':  /* sp2sck -h */
+                prog_usage(progname);
+                return 0;
+
+            default:
+                break;
+        } /*  end of "switch(opt)" */
+    }
+
+
+
+    /* parser hostname and port by server*/
+    {
+        char       *ptr;
+
+        ptr=strchr(server, ':');
+        if( !ptr )
+        {
+            printf("Invalid server host[%s], which format should be [HostName:Port] such as \"127.0.0.1:8900\"", server);
+            return -1;
+        }
+
+        strncpy(ctx.hostname, server, ptr-server);
+        ctx.port = atoi(&ptr[1]);
+    }
+
+    printf("Serial[%s] and server[%s:%d] converter start\n", devname, ctx.hostname, ctx.port);
+    
+
+    /* check program already running on background or not */
+    if( !debug )
+    {   
+        snprintf(pid_file, sizeof(pid_file), "/var/run/%s.pid", progname);
+        if( check_daemon_running(pid_file) )
+        {   
+            printf("Programe already running, exit now.\n");
+            return -1; 
+        }   
+    }
+    
+    
+    /* initialise logger system  */
+    if( !(logger=cp_log_init(NULL, log_file, log_level, 0)) || cp_log_open()<0  )
+    {
+        printf("Init logger system failed, program exit now...\n");
+        return -1;
+    }
+    log_nrml("Serial[%s] and server[%s] converter start\n", devname, server);
+
+    if( NULL == (ctx.comport=comport_init(devname, baudrate, "8N1N")) )
+    {
+        log_err("initial serial port failure\n");
+        return -1;
+    }
+
+    /* set program running in background */
+    if( !debug )
+    {
+        if( set_daemon_running(pid_file) )
+        {
+            log_fatal("Set program \"%s\" running as daemon failure.\n", progname);
+            return -2;
+        }
+    }
+
+    /* install signal process handler  */
+    cp_install_proc_signal();
+
+
+    /* start serial port data process thread */
+    thread_start(&tid, comport_worker, &ctx); 
+    
+    
+    /* start socket data process thread */
+    thread_start(&tid, socket_worker, &ctx);
+
+
+    while( !g_cp_signal.stop )
+    {
+        /* control/main thread do nothing here  */
+        sleep(1);
+    }
+
+    return 0;
+} 
+
+
+void *comport_worker(void *arg)
+{
+    sp2sck_ctx_t          *ctx = (sp2sck_ctx_t *)arg;
+    cp_comport_t          *comport;
+    cp_socket_t           *socket;
+    char                   buf[1024];
+    int                    rv = 0;
+
+    if( !ctx ) 
+    {
+        log_err("Invalid arguments\n");
+        return NULL;
+    }
+
+    comport = ctx->comport;
+    socket = &ctx->socket;
+
+    log_nrml("Thread worker for comport start\n");
+
+    while( !g_cp_signal.stop )
+    {
+        if( ctx->comport->connected )
+        {
+            rv=comport_open(ctx->comport);
+            if( 0 == rv )
+                log_nrml("open serial port \"%s\" successfully\n", ctx->comport->dev_name);
+            else 
+                log_err("open serial port \"%s\" failure, rv=%d\n", ctx->comport->dev_name, rv);
+        }
+
+
+        if( !comport->connected || SOCK_STAT_CONNECTED != socket->status )
+        {
+            continue; 
+        }
+
+        rv=comport_recv(comport, buf, sizeof(buf), 1000);
+        if( rv > 0 )
+        {
+            log_nrml("Recive %d bytes data from comport[%s] and will write to socket[%s:%d]\n", 
+                    rv, comport->dev_name, socket->servaddr, socket->servport);
+            cp_log_dump(LOG_LEVEL_DEBUG, buf, rv);
+
+            write(socket->fd, buf, rv);
+        }
+    }
+
+    return NULL;
+}
+
+
+void *socket_worker(void *arg)
+{
+    sp2sck_ctx_t          *ctx = (sp2sck_ctx_t *)arg;
+    cp_comport_t          *comport;
+    cp_socket_t           *socket;
+    char                   buf[1024];
+    int                    rv = 0;
+    
+
+    if( !ctx ) 
+    {
+        log_err("Invalid arguments\n");
+        return NULL;
+    }
+
+    comport = ctx->comport;
+    socket = &ctx->socket;
+
+    log_nrml("Thread worker for socket start\n");
+
+    while( !g_cp_signal.stop )
+    {
+
+        if( SOCK_STAT_CONNECTED != ctx->socket.status )
+        {
+            printf("start block connect\n");
+            rv=cp_sock_block_connect(&ctx->socket, ctx->hostname, ctx->port);
+            if( rv<0 )
+                log_err("connect to server [%s:%d] return rv=%d\n", ctx->socket.servaddr, ctx->socket.servport, rv);
+            else 
+                log_nrml("connect to server [%s:%d] successfully\n", ctx->socket.servaddr, ctx->socket.servport);
+        }
+
+
+        if( !comport->connected ||  SOCK_STAT_CONNECTED != socket->status )
+        {
+            continue; 
+        }
+
+        rv=read(socket->fd, buf, sizeof(buf));
+        if( rv > 0 )
+        {
+            log_nrml("Recive %d bytes data from socket[%s:%d] and will write to comport[%s]\n", 
+                    rv, socket->servaddr, socket->servport, comport->dev_name);
+            cp_log_dump(LOG_LEVEL_DEBUG, buf, rv);
+
+            comport_send(comport, buf, rv);
+        }
+        else if( 0==rv )
+        {
+            log_warn("Remove socket server disconnect\n");
+            socket->status = SOCK_STAT_DISCONNECT;
+        }
+    }
+
+    return NULL;
+}
+
diff --git a/program/serial2socket/thread_mode/sp2sck.h b/program/serial2socket/thread_mode/sp2sck.h
new file mode 100644
index 0000000..52722cc
--- /dev/null
+++ b/program/serial2socket/thread_mode/sp2sck.h
@@ -0,0 +1,31 @@
+/********************************************************************************
+ *      Copyright:  (C) 2018 LingYun IoT System Studio
+ *                  All rights reserved.
+ *
+ *       Filename:  sp2sck.h
+ *    Description:  This head file 
+ *
+ *        Version:  1.0.0(2018年05月29日)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "2018年05月29日 21时05分43秒"
+ *                 
+ ********************************************************************************/
+
+#ifndef  _SP2SCK_H_
+#define  _SP2SCK_H_
+
+#include "cp_comport.h"
+#include "cp_socket.h"
+
+
+typedef struct sp2sck_ctx_s 
+{
+    char               hostname[DOMAIN_MAX_LEN]; /* socket connect server address  */
+    unsigned short     port; /* socket connect server port  */
+
+    cp_comport_t      *comport; /* serial port context, include fd */
+    cp_socket_t        socket;  /* socket port context, include fd */
+} sp2sck_ctx_t;  /*---  end of struct sp2sck_ctx_s  ---*/
+
+
+#endif   /* ----- #ifndef _SP2SCK_H_  ----- */
diff --git a/program/sqlite/build.sh b/program/sqlite/build.sh
new file mode 100644
index 0000000..68ceab0
--- /dev/null
+++ b/program/sqlite/build.sh
@@ -0,0 +1,124 @@
+#!/bin/bash
+
+#+--------------------------------------------------------------------------------------------
+#|Description:  This shell script used to download SQLite code and cross compile it.
+#|     Author:  GuoWenxue <guowenxue@gmail.com>
+#|  ChangeLog:
+#|           1, Initialize 1.0.0 on 2011.12.26
+#+--------------------------------------------------------------------------------------------
+
+PRJ_PATH=`pwd`
+
+APP_NAME="sqlite-autoconf-3071401"
+PACK_SUFIX="tar.gz"
+DL_ADDR="http://www.sqlite.org//$APP_NAME.$PACK_SUFIX"
+PREFIX_PATH=$PRJ_PATH/sqlite3
+
+#ARCH=arm926t
+CROSS=
+
+sup_arch=("" "arm926t" "arm920t" )
+
+function select_arch()
+{
+   echo "Current support ARCH: "
+   i=1
+   len=${#sup_arch[*]}
+
+   while [ $i -lt $len ]; do
+     echo "$i: ${sup_arch[$i]}"
+     let i++;
+   done
+
+   echo "Please select: "
+   index=
+   read index
+   ARCH=${sup_arch[$index]}
+}
+
+
+function decompress_packet()
+(
+   echo "+---------------------------------------------+"
+   echo "|  Decompress $1 now"  
+   echo "+---------------------------------------------+"
+
+    ftype=`file "$1"`
+    case "$ftype" in
+       "$1: Zip archive"*)
+           unzip "$1" ;;
+       "$1: gzip compressed"*)
+           if [ 0 != `expr "$1" : ".*.tar.*" ` ] ; then
+               tar -xzf $1
+           else
+               gzip -d "$1"
+           fi ;;
+       "$1: bzip2 compressed"*)
+           if [ 0 != `expr "$1" : ".*.tar.*" ` ] ; then
+               tar -xjf $1
+           else
+               bunzip2 "$1"
+           fi ;;
+       "$1: POSIX tar archive"*)
+           tar -xf "$1" ;;
+       *)
+          echo "$1 is unknow compress format";;
+    esac
+)
+
+if [ -z $ARCH ] ; then
+  select_arch
+fi
+
+if [ "i386" == $ARCH ] ; then 
+    CROSS=
+else
+    CROSS="/opt/buildroot-2012.08/${ARCH}/usr/bin/arm-linux-"
+fi 
+
+export CC=${CROSS}gcc 
+export CXX=${CROSS}g++ 
+export AR=${CROSS}ar 
+export AS=${CROSS}as 
+export LD=${CROSS}ld 
+export NM=${CROSS}nm 
+export RANLIB=${CROSS}ranlib 
+export STRIP=${CROSS}strip
+unset CFLAGS
+unset LDFLAGS
+
+if [ ! -d $PREFIX_PATH/lib ] ; then
+    mkdir -p $PREFIX_PATH
+else
+    echo "$APP_NAME already cross compiled, exit now..."
+    exit;
+fi
+
+# Download source code packet
+if [ ! -s $APP_NAME.$PACK_SUFIX ] ; then 
+    echo "+------------------------------------------------------------------+" 
+    echo "|  Download $APP_NAME.$PACK_SUFIX now "  
+    echo "+------------------------------------------------------------------+" 
+    wget $DL_ADDR 
+fi 
+
+# Decompress source code packet 
+if [ ! -d $APP_NAME ] ; then 
+    decompress_packet $APP_NAME.$PACK_SUFIX 
+fi
+
+echo "+------------------------------------------------------------------+"
+echo "|          Build $APP_NAME for $ARCH "
+echo "| Crosstool:  $CROSS"
+echo "+------------------------------------------------------------------+"
+
+cd $APP_NAME
+   set -x
+   ./configure --host=arm-linux --enable-static --prefix=$PREFIX_PATH
+   make
+   make install
+   $STRIP $PREFIX_PATH/bin/sqlite3
+cd -
+
+rm -rf $APP_NAME
+
diff --git a/program/sqlite/makefile b/program/sqlite/makefile
new file mode 100644
index 0000000..80500fe
--- /dev/null
+++ b/program/sqlite/makefile
@@ -0,0 +1,123 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This Makefile used to call function to compile all the C source
+#                  in current folder and links all the objects file into a excutable
+#                  binary file.
+#                      
+#        Version:  1.0.0(10/08/2011~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+INSTPATH=/tftp
+
+APP_BINARY_NAME = test_sqlite
+ARCH?=i386
+#ARCH?=arm926t
+
+LINK_MODE=STATIC
+MODE=PRODUCTION
+DEBUG=1
+
+#CFLAGS+=-Wall -Werror
+
+CFLAGS+=-Isqlite3/include
+LDFLAGS+=-Lsqlite3/lib/ -lsqlite3
+
+ifeq ("${MODE}", "PRODUCTION")
+    CFLAGS+=-DPRODUCTION_MODE
+endif
+ifdef DEBUG
+    CFLAGS+=-g -DDEBUG
+endif
+
+COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M")
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+    CROSS_COMPILE=
+else
+    CROSS_COMPILE=/opt/buildroot-2012.08/$(ARCH)/usr/bin/arm-linux-
+
+endif
+
+CFLAGS+=-I${PWD}
+
+export CC=${CROSS_COMPILE}gcc
+export CXX=${CROSS_COMPILE}g++ 
+export AR=${CROSS_COMPILE}ar
+export AS=${CROSS_COMPILE}as
+export RANLIB=${CROSS_COMPILE}ranlib
+export STRIP=${CROSS_COMPILE}strip
+
+export CFLAGS
+export LDFLAGS
+export ARCH
+export LINK_MODE
+
+ifeq ("${LINK_MODE}", "STATIC")
+	CFLAGS+=--static
+	LDFLAGS+=-static
+else
+	LDFLAGS+=-ldl
+endif
+
+LDFLAGS+=-lpthread -ldl
+
+all: entry version $(APP_BINARY_NAME)
+
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **        Compile ${APP_BINARY_NAME} for ${ARCH}         ";
+	@echo " =========================================================";
+	bash build.sh
+
+version:
+	@echo "/* Generated by makefile, don't Edit it by hand */" > version.h 
+	@echo "#define DATE \"$(COMPILE_DATE)\"" >> version.h 
+	@echo "#define MAJOR 1" >>version.h 
+	@echo "#define MINOR 0" >>version.h 
+	@echo "#define REVER 0" >>version.h 
+	@if [ -f .svn/entries ] ; then \
+        echo "#define SVNVER `sed -n -e 11p .svn/entries`" >>version.h; \
+    else \
+        echo "#define SVNVER 0" >>version.h; \
+    fi;
+	@echo "" >> version.h 
+	@echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)'  >> version.h
+	@echo '#define copyright() printf("Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292>\n")' >>version.h
+	@echo '#define banner(progname) {version(progname); copyright(); printf("\n");}' >>version.h
+	@echo "" >> version.h
+
+$(APP_BINARY_NAME): $(OBJS) 
+	$(CC)  -o $@ $(OBJS) $(LDFLAGS)
+	$(STRIP) $(APP_BINARY_NAME)
+
+%.o : %.c
+	$(CC)  -c $< $(CFLAGS)
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	@cp $(APP_BINARY_NAME) ${INSTPATH}
+
+clean: 
+	@rm -f version.h 
+	@rm -f *.o $(APP_BINARY_NAME) 
+	@rm -rf *.gdb *.a *.so *.elf*
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
diff --git a/program/sqlite/test_sqlite.c b/program/sqlite/test_sqlite.c
new file mode 100644
index 0000000..b2097f1
--- /dev/null
+++ b/program/sqlite/test_sqlite.c
@@ -0,0 +1,150 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
+ *                  All rights reserved.
+ *
+ *       Filename:  sqlite_test.c
+ *    Description:  This file 
+ *                 
+ *        Version:  1.0.0(11/29/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "11/29/2012 10:09:29 AM"
+ *                 
+ ********************************************************************************/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sqlite3.h>
+
+#define SQL_CMD_LEN     256
+
+int data_callback(void * para, int n_column, char ** column_value, char ** column_name)
+{
+    char     *arg = (char *)para;
+    int      i;
+
+    printf("%s", arg);
+
+    for(i=0; i<n_column; i++)
+    {
+        printf("%4s: %s\n", column_name[i], column_value[i]);
+    }
+
+    return 0;
+}
+
+/********************************************************************************
+ *  Description:
+ *   Input Args:
+ *  Output Args:
+ * Return Value:
+ ********************************************************************************/
+int main (int argc, char **argv)
+{
+    int               rv;
+    sqlite3           *db;
+    char              *errmsg = NULL;
+    char              sqlcmd[SQL_CMD_LEN];
+
+    /* open the database.db, if it not exist then create it */
+    if(SQLITE_OK != (rv=sqlite3_open("database.db", &db)) )
+    {
+        printf("Open/create database failed\n");
+        return -1;
+    }
+
+    /* create a table if it doesn't exist  */
+    strncpy(sqlcmd, "create table if not exists cplus(ID integer primary key autoincrement, name nvarchar(32), time not null default current_timestamp)", sizeof(sqlcmd));
+    if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) )
+    {
+        printf("create ID table failed [%d]: %s\n", rv, errmsg);
+        sqlite3_free(errmsg);
+    }
+
+    //snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus(name) values('%s')", "guowenxue");
+    snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus values(1, '%s', datetime('2012-01-01 20:35:10'))", "guowenxue");
+    if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) )
+    {
+        printf("Add item into cplus failed [%d]: %s\n", rv, errmsg);
+        sqlite3_free(errmsg);
+    }
+
+    //snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus(name) values('%s')", "jason");
+    snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus values(2, '%s', datetime('now'))", "jason");
+    if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) )
+    {
+        printf("Add item into cplus failed [%d]: %s\n", rv, errmsg);
+        sqlite3_free(errmsg);
+    }
+
+    //snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus(name) values('%s')", "adrian");
+    snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus values(3, '%s', datetime('now'))", "adrian");
+    if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) )
+    {
+        printf("Add item into cplus failed [%d]: %s\n", rv, errmsg);
+        sqlite3_free(errmsg);
+    }
+
+    strncpy(sqlcmd, "select * from cplus", sizeof(sqlcmd));
+    if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, data_callback, "\n==== Query all the items ====\n", &errmsg)) )
+    {
+        printf("Query all items from cplus failed [%d]: %s\n", rv, errmsg);
+        sqlite3_free(errmsg);
+    }
+
+    strncpy(sqlcmd, "select * from cplus where name='guowenxue'", sizeof(sqlcmd));
+    if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, data_callback, "\n==== Query all guowenxue ====\n", &errmsg)) )
+    {
+        printf("Query guowexue from cplus failed [%d]: %s\n", rv, errmsg);
+        sqlite3_free(errmsg);
+    }
+
+    printf("\n==== delete all guowenxue in the table ====\n");
+    strncpy(sqlcmd, "delete from cplus where name='guowenxue'", sizeof(sqlcmd));
+    if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) )
+    {
+        printf("Delete guowenxue from cplus failed [%d]: %s\n", rv, errmsg);
+        sqlite3_free(errmsg);
+    }
+
+    strncpy(sqlcmd, "select * from cplus", sizeof(sqlcmd));
+    if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, data_callback, "\n==== Query all the items ====\n", &errmsg)) )
+    {
+        printf("Query all items from cplus failed [%d]: %s\n", rv, errmsg);
+        sqlite3_free(errmsg);
+    }
+
+    {
+        char   **result;
+        int    rows, cols;
+        int    i, j, index;
+
+        strncpy(sqlcmd, "select * from cplus", sizeof(sqlcmd));
+        if(SQLITE_OK != (rv=sqlite3_get_table(db, sqlcmd, &result, &rows, &cols, &errmsg)) )
+        {
+            printf("%s command failed: %s\n", sqlcmd, errmsg);
+        }
+
+        printf("rows:%d cols:%d\n", rows, cols);
+
+        index = cols;
+
+        for(i=0; i<rows; i++)
+        {
+            for(j=0; j<cols; j++)
+            {
+                printf("KeyName: %4s  KeyValue: %s\n", result[j], result[index]);
+                index ++;
+            }
+        }
+
+        sqlite3_free_table(result);
+    }
+
+cleanup:
+    sqlite3_close(db);
+    return 0;
+} /* ----- End of main() ----- */
+
diff --git a/program/unp/makefile b/program/unp/makefile
new file mode 100644
index 0000000..8799991
--- /dev/null
+++ b/program/unp/makefile
@@ -0,0 +1,79 @@
+#*********************************************************************************
+#      Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292>
+#                  All rights reserved.
+#
+#       Filename:  Makefile
+#    Description:  This Makefile used to compile all the C source code file in current 
+#                  folder to respective excutable binary files.
+#                      
+#        Version:  1.0.0(2012.06.08~)
+#                  Author:  Guo Wenxue <guowenxue@gmail.com>
+#      ChangeLog:  1, Release initial version on "Fri Jun  8 16:07:36 CST 2012"
+#                       
+#********************************************************************************/
+
+PWD=$(shell pwd)
+INSTPATH=/tftp
+
+ARCH?=i386
+#ARCH?=arm920t
+
+LDFLAGS+=-lpthread
+#CFLAGS+=-Wall -Werror
+
+VPATH= .
+SRCS = $(wildcard ${VPATH}/*.c)
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
+ifneq (,$(filter i386,$(TMP)))
+    CROSS_COMPILE=
+else
+    CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux-
+endif
+
+CFLAGS+=-I${PWD}
+#CFLAGS+=-DCONFIG_VERIFY_USER
+
+export CC=${CROSS_COMPILE}gcc
+export CXX=${CROSS_COMPILE}gcc
+export AR=${CROSS_COMPILE}ar
+export AS=${CROSS_COMPILE}as
+export RANLIB=${CROSS_COMPILE}ranlib
+export STRIP=${CROSS_COMPILE}strip
+export CFLAGS
+export LDFLAGS
+
+SRCFILES = $(wildcard *.c)
+BINARIES=$(SRCFILES:%.c=%)
+
+all: entry binaries install 
+entry: 
+	@echo " ";
+	@echo " =========================================================";
+	@echo " **        Compile \"${BINARIES}\" for ${ARCH}         ";
+	@echo " =========================================================";
+
+binaries:  ${BINARIES} 
+	@echo " Compile over"
+
+%:  %.c 
+	$(CC) -o $@ $< $(CFLAGS) ${LDFLAGS}
+
+tag: 
+	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
+	@cscope -Rbq
+
+install:
+	cp $(BINARIES) ${INSTPATH}
+
+clean: 
+	@rm -f version.h 
+	@rm -f *.o $(BINARIES) 
+	@rm -rf *.gdb *.a *.so *.elf*
+
+distclean: clean
+	@rm -f  tags cscope*
+
+.PHONY: clean entry
+
diff --git a/program/unp/socket_client.c b/program/unp/socket_client.c
new file mode 100644
index 0000000..a257460
--- /dev/null
+++ b/program/unp/socket_client.c
@@ -0,0 +1,209 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2018 LingYun I.o.T Studio  <www.iot-yun.com>
+ *                  All rights reserved.
+ *
+ *       Filename:  socket_client.c
+ *    Description:  This is a sample socket client demo program.
+ *                  Usage: socket_client -i 192.168.2.18 -p 6666
+ *                 
+ *        Version:  1.0.0(06/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "06/08/2012 02:50:51 PM"
+ *                 
+ ********************************************************************************/
+
+/* Some Unix Program Standard head file  */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <getopt.h> /* getopt_long */
+#include <libgen.h> /* getopt_long */
+
+/* Socket Program head file */
+#include <sys/types.h>   
+#include <sys/socket.h>
+#include <netinet/in.h> /* sockaddr_in{} and other Internet define */
+
+#include <errno.h>      /* strerror(), perror(), errno head file*/
+#include <arpa/inet.h>  /* For inet_pton() */
+
+#define MAX_BUF_SIZE                       1024
+
+#define LOGON_INFO                         "lingyun:www.iot-yun.com"
+
+#define MAJOR            1
+#define MINOR            0
+#define REVER            0
+
+void print_version(char *progname)
+{
+    printf("%s Version 1.0.0\n", progname);
+    printf("Copyright (C) 2012 Guo Wenxue<guowenxue@gmail.com>.\n");
+    return;
+}
+
+void print_usage(char *progname)
+{
+    print_version(progname); 
+    
+    printf("Usage: %s [OPTION]...\n", progname);
+    printf(" %s is a socket client test program, which used to logon server and send string to server\n", progname);
+
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n");
+
+    printf(" -i[ipaddr  ]  Socket server IP address\n");
+    printf(" -p[port    ]  Socket server port address\n");
+    printf(" -h[help    ]  Display this help information\n");
+    printf(" -v[version ]  Display the program version\n");
+
+    printf("\nExample: %s -i 192.168.2.18 -p 8900\n", progname);
+    return ;
+}
+
+
+/* Argc is the program linux running command arguments count, and argv is 
+ * the arguments string value. All of the arguments take as string.
+ */
+int main(int argc, char **argv)
+{
+    int                       sockfd, len, rv;
+    int                       opt;
+    char                     *progname = NULL;
+    char                     *server_ip = NULL;
+    unsigned short            server_port = 0;
+    char                      buf[MAX_BUF_SIZE];
+    struct sockaddr_in        servaddr;
+
+    struct option             long_options[] = 
+    { 
+        {"ipaddr", required_argument, NULL, 'i'},
+        {"port", required_argument, NULL, 'p'},
+        {"version", no_argument, NULL, 'v'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };
+
+    progname = basename(argv[0]);
+
+    /*  Parser the command line parameters */
+    while ((opt = getopt_long(argc, argv, "i:p:vh", long_options, NULL)) != -1)
+    {
+        switch (opt)
+        {
+            case 'p':
+                server_port = atoi(optarg);
+                break;
+
+            case 'i':
+                server_ip = optarg;
+                break;
+
+            case 'v':
+                print_version(progname); /*  Defined in version.h */
+                return EXIT_SUCCESS;
+
+            case 'h':  /*  Get help information */
+                print_usage(progname);
+                return EXIT_SUCCESS;
+
+            default:
+                break;
+        }
+    }
+
+    if(NULL==server_ip || 0==server_port) 
+    {
+        print_usage(progname);
+        return -1;
+    }
+
+    /* Open an IPV4(AF_INET) TCP(SOCK_STREAM) Socket File Description, UDP socket should 
+     * use SOCK_DGRAM,We can use linux command "man socket" to see this function manual
+     */
+    if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+    {
+        /* strerror() is the 1st way to display the failure reason, argument 
+         * errno is a globle variable defined in <errno.h>, we can use linux command 
+         * "man strerror" to see this function manual*/
+        printf("Use socket() to create a TCP socket failure: %s\n", strerror(errno));
+        return -1;
+    }
+
+    /* Now we set the Server Information, include IPV4 or IPV6, Server Port, Server IP address  */
+    memset(&servaddr, 0, sizeof(servaddr));
+    servaddr.sin_family = AF_INET;   /* Set it as IPV4 protocal */
+    servaddr.sin_port = htons(server_port); /*Server port*/ 
+
+    /* argv[1] we take as Server IP address, it's the second arguments in running command  */
+    if (inet_pton(AF_INET, server_ip, &servaddr.sin_addr) <= 0) 
+    {
+        printf("Use inet_pton() to set the Server IP address failure.\n");
+        rv = -2;
+        goto CleanUp;
+    }
+
+    /* Now call connect() function to connect to the server, we can use linux command "man connect" 
+     * to see this function manual */
+    if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
+    {
+        printf("Connect to the server [%s:%d] failure: %s\n", server_ip, server_port, strerror(errno));
+        rv = -3;
+        goto CleanUp;
+    }
+    printf("Connect to Server [%s:%d] ok\n", server_ip, server_port);
+
+#ifdef CONFIG_VERIFY_USER
+    if( write(sockfd, LOGON_INFO, strlen(LOGON_INFO)) < 0)
+    {
+        printf("Write logon information to server failure: %s\n", strerror(errno));
+        goto CleanUp;
+    }
+
+    /* Once we connect to the server successfully, we can receive the data from the socket socekt */
+    memset(buf, 0, sizeof(buf));
+    if( (len = read(sockfd, buf, MAX_BUF_SIZE)) < 0) 
+    {
+        printf("socket read data from server[%s] failure:%s\n", server_ip, strerror(errno));
+        goto CleanUp;
+    }
+    else if( 0 == len ) 
+    {
+        printf("logon to server[%s] failure and socket disconnected\n", server_ip);
+        goto CleanUp;
+    }
+
+    /* socket read data from server */
+    if( strncasecmp(buf, "passed", 6) )
+    {
+        printf("Logon to server[%s] failure: %s\n", server_ip, buf);
+        goto CleanUp;
+    }
+    printf("Logon to server successfully!\n");
+#endif
+
+    while(1)
+    {
+        printf("\nplease input string to send to server:\n==> ");
+
+        memset(buf, 0, sizeof(buf));
+        fgets(buf, sizeof(buf), stdin);
+        write(sockfd, buf, strlen(buf));
+
+        memset(buf, 0, sizeof(buf));
+        rv=read(sockfd, buf, sizeof(buf));
+        if(rv <= 0)
+        {
+            printf("ERROR:socket disconnected or get error\n");
+            goto CleanUp;
+        }
+
+        printf("<== %s\n", buf);
+    }
+
+
+CleanUp:
+    close(sockfd);  /* We must close socket File Description when program exit*/
+    return 0;
+}
+
diff --git a/program/unp/socket_server_select.c b/program/unp/socket_server_select.c
new file mode 100644
index 0000000..cb81e7e
--- /dev/null
+++ b/program/unp/socket_server_select.c
@@ -0,0 +1,435 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292>
+ *                  All rights reserved.
+ *
+ *       Filename:  date_time_server.c
+ *    Description:  This is a sample socket server demo program.
+ *                 
+ *        Version:  1.0.0(06/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "06/08/2012 02:50:51 PM"
+ *                 
+ ********************************************************************************/
+
+/* Some Unix Program Standard head file  */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <pthread.h>
+#include <getopt.h> /*  getopt_long */
+#include <libgen.h> /*  getopt_long */
+
+/* Socket Program head file */
+#include <sys/types.h>   
+#include <sys/socket.h>
+#include <netinet/in.h> /* sockaddr_in{} and other Internet define */
+
+/* strerror(), perror(), errno head file*/
+#include <errno.h>
+#include <time.h>
+
+
+#define LISTENQ                                1024 /* 2nd argument to listen () */
+
+#define DEF_USER                               "lingyun"
+#define DEF_PASSWD                             "www.iot-yun.com"
+
+
+typedef struct link_node_s 
+{
+    int                   fd;    /* server/client socket fd  */
+    int                   logon; /* client socket logon or not  */
+    struct link_node_s   *next;
+} link_node_t;  
+
+
+int socket_server_init(char *listen_ip, int listen_port);
+int proc_client_socket(link_node_t **head, fd_set *rdset );
+
+static inline msleep(unsigned long ms) 
+{
+    struct timeval       tv; 
+
+    tv.tv_sec = ms/1000;
+    tv.tv_usec = (ms%1000)*1000; 
+    
+    select(0, NULL, NULL, NULL, &tv);
+}
+
+
+void print_usage(char *progname)
+{ 
+    printf("Usage: %s [OPTION]...\n", progname);
+    
+    printf(" %s is a socket server program, which used to verify client and echo back string from it\n", progname); 
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n"); 
+    
+    printf(" -b[daemon ]  set program running on background\n");
+    printf(" -p[port    ]  Socket server port address\n");
+    printf(" -h[help    ]  Display this help information\n");
+    
+
+    printf("\nExample: %s -b -p 8900\n", progname);
+    return ;
+}
+
+
+int main(int argc, char **argv)
+{
+    int                       listenfd, connfd;
+    int                       serv_port = 0;
+    int                       daemon_run = 0;
+    char                     *progname = NULL;
+    pthread_t                 tid;
+    int                       opt;
+    fd_set                    rdset; 
+    link_node_t              *client_list = NULL; /* client fd link list, we will not use arrary for it get max client limite */
+    int                       rv;
+
+    struct option             long_options[] = 
+    {   
+        {"daemon", no_argument, NULL, 'b'},
+        {"port", required_argument, NULL, 'p'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };  
+
+    progname = basename(argv[0]);
+
+    /*  Parser the command line parameters */
+    while ((opt = getopt_long(argc, argv, "bp:h", long_options, NULL)) != -1) 
+    {   
+        switch (opt)
+        {   
+            case 'b':
+                daemon_run=1;
+                break;
+
+            case 'p':
+                serv_port = atoi(optarg);
+                break;
+
+            case 'h':  /*  Get help information */
+                print_usage(progname);
+                return EXIT_SUCCESS;
+
+            default:
+                break;
+        }   
+    }   
+
+    if( !serv_port ) 
+    {   
+        print_usage(progname);
+        return -1; 
+    }
+
+    if( (listenfd=socket_server_init(NULL, serv_port)) < 0 )
+    {
+        printf("ERROR: %s server listen on port %d failure\n", argv[0],serv_port);
+        return -2;
+    }
+    printf("%s server start to listen on port %d\n", argv[0],serv_port);
+
+
+    if( daemon_run ) /* set program running on background */
+    {
+        daemon(0, 0);
+    }
+
+
+    printf("add listen socket[%d] into client list\n", listenfd );
+    add_fd_list(&client_list, listenfd);
+
+    for ( ; ; ) 
+    {
+        rv=start_select_listen(client_list, &rdset);
+        if(rv < 0)
+        {
+            printf("select get error: %s\n", strerror(errno));
+            break;
+        }
+        else if(rv == 0)
+        {
+            printf("seelct get timeout\n");
+            continue;
+        }
+        
+
+        /* some client get read event happened  */
+        if ( FD_ISSET(listenfd, &rdset) ) /* listen socket get event means new client require connect */
+        {
+            if( (connfd=accept(listenfd, (struct sockaddr *)NULL, NULL)) <= 0)
+            {
+                printf("accept new client failure: %s\n", strerror(errno));
+                continue;
+            }
+
+            printf("accept new client[%d] and add it into client list\n", connfd );
+            add_fd_list(&client_list, connfd);
+        }
+        else /* already connected socket client send data arrive  */
+        {
+            proc_client_socket(&client_list, &rdset);
+        }
+    }
+
+CleanUp:
+    close(listenfd);  /* We must close socket File Description when program exit*/
+    return 0;
+}
+
+int socket_server_init(char *listen_ip, int listen_port)
+{
+    struct sockaddr_in        servaddr;
+    int                       listenfd = -1;
+    int                       on = 1;
+
+    /*
+     * Open an IPV4(AF_INET) TCP(SOCK_STREAM) Socket File Description(listenfd), UDP socket 
+     * should use SOCK_DGRAM,We can use linux command "man socket" to see this function manual
+     */
+    if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+    {
+        /* strerror() is the 1st way to display the failure reason, argument 
+         * errno is a globle variable defined in <errno.h>, we can use linux command 
+         * "man strerror" to see this function manual*/
+        printf("Use socket() to create a TCP socket failure: %s\n", strerror(errno));
+        return -1;
+    }
+
+    /* Set socket port reuseable  */
+    setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+
+    /* Now we set the Server Information, include IPV4 or IPV6, Listen IP address and Port */
+    memset(&servaddr, 0, sizeof(servaddr));
+    servaddr.sin_family = AF_INET;   /* Set it as IPV4 protocal */
+
+    /* set listen IP address  */
+    if( !listen_ip ) 
+    {
+        /* Listen all the local IP address */
+        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);  
+    }
+    else 
+    {
+        /* listen the specified IP address  */
+        if (inet_pton(AF_INET, listen_ip, &servaddr.sin_addr) <= 0)
+        {
+            printf("inet_pton() set listen IP address failure.\n");
+            listenfd = -2;
+            goto CleanUp;
+        }
+    }
+
+    servaddr.sin_port = htons(listen_port); /*  set listen port */
+
+    /*
+     * When a socket is created with socket(2), it exists in a name space (address family) but 
+     * has no address assigned to it. bind() assigns the address specified to by addr to the 
+     * socket referred to by the file descriptor listenfd. We can use Linux command "man 2 bind" 
+     * to see this function manual.
+     */
+    if(bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
+    {
+        printf("Use bind() to bind the TCP socket failure: %s\n", strerror(errno));
+        listenfd = -3;
+        goto CleanUp;
+    }
+
+    /*
+     * listen() marks the socket referred to by listenfd as a passive socket, that is, as a socket 
+     * that will be used to accept incoming connection requests using accept(2). We can use Linux
+     * command "man listen" to see this function manual.
+     */
+    if(listen(listenfd, LISTENQ) < 0)
+    {
+        printf("Use bind() to bind the TCP socket failure: %s\n", strerror(errno));
+        listenfd = -4;
+        goto CleanUp;
+    }
+
+CleanUp:
+    return listenfd;
+
+}
+
+int start_select_listen(link_node_t *head, fd_set *set)
+{
+    link_node_t          *node;
+    int                  maxfd=0;
+
+    if(!head || !set)
+        return -2;
+
+    FD_ZERO(set);
+
+    for( node=head; node!=NULL; node=node->next )
+    {
+        maxfd = node->fd>maxfd ? node->fd : maxfd;
+        FD_SET(node->fd, set); 
+    }
+
+    /* program will block here  */
+    return select(maxfd+1, set, NULL, NULL, NULL);
+}
+
+int add_fd_list(link_node_t  **head, int fd)
+{
+    link_node_t          *node;
+    link_node_t          *tmp;
+
+    if( NULL == (node=(link_node_t *)malloc(sizeof(*node))) ) 
+    {
+        printf("malloc for new node failure\n");
+        return -1;
+    }
+
+    memset(node, 0, sizeof(*node));
+    node->fd = fd;
+    node->next = NULL;
+
+    if( *head == NULL )
+    {
+        *head = node;
+        return 0;
+    }
+
+    tmp = *head;
+    while( tmp->next != NULL )
+    {
+        tmp=tmp->next;
+    }
+
+    tmp->next = node;
+}
+
+
+int destroy_fd_list(link_node_t **head)
+{
+
+}
+
+
+char      *fail_str[3]={"Verify user account get wrong format",
+                        "Verify user account get wrong username",
+                        "Verify user account get wrong password"};
+int verify_user_logon(char *buf)
+{
+    char                *ptr = NULL;
+
+    if( !(ptr=strchr(buf, ':')) )
+    {
+        return 1;
+    }
+
+    if( strncmp(buf, DEF_USER, strlen(DEF_USER)) )
+    {
+        return 2;
+    }
+
+    if( strncmp(ptr+1, DEF_PASSWD, strlen(DEF_PASSWD)) )
+    {
+        return 3;
+    }
+
+    return 0;
+}
+
+int proc_client_socket(link_node_t **head, fd_set *rdset )
+{
+    int                  client_fd;
+    char                 buf[512];
+    int                  rv;
+    int                  maxfd=0;
+    link_node_t         *node;
+    link_node_t         *prev;
+    int                  rmflag = 0;
+
+    if(!head || !rdset)
+        return -2;
+
+
+    if( !rdset )
+    {
+        printf("Invalid arg\n");
+        return -1;
+    }
+
+    node = *head;
+    while( node != NULL )
+    {
+        //printf( "proc socket[%d] ##########\n", node->fd ); 
+
+        if( FD_ISSET(node->fd, rdset) )
+        {
+            client_fd = node->fd;
+            
+            memset(buf, 0, sizeof(buf));
+
+            if( (rv=read(client_fd, buf, sizeof(buf))) <= 0)
+            {
+                printf("socket[%d] disconncet or read get error\n", client_fd);
+                rmflag = 1;
+                goto REMOVE_CLIENT;
+            }
+
+            printf("socket[%d] read get %d bytes data\n", client_fd, rv);
+#ifdef CONFIG_VERIFY_USER
+            /* not logon before, then need logon information  */
+            if( !node->logon )
+            {
+                if( 0 != (rv=verify_user_logon(buf)) )
+                {
+                    printf("client socket[%d] logon account [%s] invalid, disconncet it now\n", client_fd, buf);
+                    write(client_fd, fail_str[rv-1], strlen(fail_str[rv-1]));
+                    rmflag = 1;
+                    goto REMOVE_CLIENT;
+                }
+                else
+                {
+                    printf("client socket[%d] logon successfully!\n", client_fd);
+                    node->logon = 1;
+                    write(client_fd, "passed", 6);
+                }
+            }
+            else /* already logon  */
+#endif
+            {
+                /* echo the data from client back  */
+                write(client_fd, buf, rv);
+            }
+
+REMOVE_CLIENT:
+            if( rmflag )
+            {
+                printf("remove socket client[%d] from list now\n", node->fd);
+                /* node is first node  */
+                if( node == *head )
+                {
+                    close(node->fd);
+                    *head = node->next;
+                    free(node);
+                    node=*head;
+                }
+                else
+                {
+                    close(node->fd);
+                    prev->next = node->next;
+                    free(node);
+                    node = prev->next;
+                }
+                rmflag = 0;
+                continue;
+            }
+        }
+
+        prev = node;
+        node = node->next;
+    }
+
+    return 0;
+}
+
+
diff --git a/program/unp/socket_server_thread.c b/program/unp/socket_server_thread.c
new file mode 100644
index 0000000..0d99aa0
--- /dev/null
+++ b/program/unp/socket_server_thread.c
@@ -0,0 +1,272 @@
+/*********************************************************************************
+ *      Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292>
+ *                  All rights reserved.
+ *
+ *       Filename:  date_time_server.c
+ *    Description:  This is a sample socket server demo program.
+ *                 
+ *        Version:  1.0.0(06/08/2012~)
+ *         Author:  Guo Wenxue <guowenxue@gmail.com>
+ *      ChangeLog:  1, Release initial version on "06/08/2012 02:50:51 PM"
+ *                 
+ ********************************************************************************/
+
+/* Some Unix Program Standard head file  */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <pthread.h>
+#include <getopt.h> /*  getopt_long */
+#include <libgen.h> /*  getopt_long */
+
+/* Socket Program head file */
+#include <sys/types.h>   
+#include <sys/socket.h>
+#include <netinet/in.h> /* sockaddr_in{} and other Internet define */
+
+/* strerror(), perror(), errno head file*/
+#include <errno.h>
+#include <time.h>
+
+
+#define LISTENQ                                1024 /* 2nd argument to listen () */
+
+#define DEF_USER                               "lingyun"
+#define DEF_PASSWD                             "www.iot-yun.com"
+
+
+void *socket_client_worker(void *arg);
+
+
+void print_usage(char *progname)
+{ 
+    printf("Usage: %s [OPTION]...\n", progname);
+    
+    printf(" %s is a socket server program, which used to verify client and echo back string from it\n", progname); 
+    printf("\nMandatory arguments to long options are mandatory for short options too:\n"); 
+    
+    printf(" -b[daemon ]  set program running on background\n");
+    printf(" -p[port    ]  Socket server port address\n");
+    printf(" -h[help    ]  Display this help information\n");
+    
+
+    printf("\nExample: %s -b -p 8900\n", progname);
+    return ;
+}
+
+
+int main(int argc, char **argv)
+{
+    int                       listenfd, connfd;
+    struct sockaddr_in        servaddr;
+    int                       serv_port = 0;
+    int                       daemon_run = 0;
+    char                     *progname = NULL;
+    pthread_t                 tid;
+    int                       opt;
+    int                       on=1;
+
+
+    struct option             long_options[] = 
+    {   
+        {"daemon", no_argument, NULL, 'b'},
+        {"port", required_argument, NULL, 'p'},
+        {"help", no_argument, NULL, 'h'},
+        {NULL, 0, NULL, 0}
+    };  
+
+    progname = basename(argv[0]);
+
+    /*  Parser the command line parameters */
+    while ((opt = getopt_long(argc, argv, "bp:h", long_options, NULL)) != -1) 
+    {   
+        switch (opt)
+        {   
+            case 'b':
+                daemon_run=1;
+                break;
+
+            case 'p':
+                serv_port = atoi(optarg);
+                break;
+
+            case 'h':  /*  Get help information */
+                print_usage(progname);
+                return EXIT_SUCCESS;
+
+            default:
+                break;
+        }   
+    }   
+
+    if(0==serv_port) 
+    {   
+        print_usage(progname);
+        return -1; 
+    }
+
+    /* set program running on background */
+    if( daemon_run )
+    {
+        daemon(0, 0);
+    }
+
+    /*
+     * Open an IPV4(AF_INET) TCP(SOCK_STREAM) Socket File Description(listenfd), UDP socket 
+     * should use SOCK_DGRAM,We can use linux command "man socket" to see this function manual
+     */
+    if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+    {
+        /* strerror() is the 1st way to display the failure reason, argument 
+         * errno is a globle variable defined in <errno.h>, we can use linux command 
+         * "man strerror" to see this function manual*/
+        printf("Use socket() to create a TCP socket failure: %s\n", strerror(errno));
+        return -1;
+    }
+
+    /* Set socket port reuseable  */
+    setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+
+    /* Now we set the Server Information, include IPV4 or IPV6, Listen IP address and Port */
+    memset(&servaddr, 0, sizeof(servaddr));
+    servaddr.sin_family = AF_INET;   /* Set it as IPV4 protocal */
+    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);  /* Listen all the local IP address */
+    servaddr.sin_port = htons(serv_port); /*  daytime server port */
+
+    /*
+     * When a socket is created with socket(2), it exists in a name space (address family) but 
+     * has no address assigned to it. bind() assigns the address specified to by addr to the 
+     * socket referred to by the file descriptor listenfd. We can use Linux command "man 2 bind" 
+     * to see this function manual.
+     */
+    if(bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
+    {
+        printf("Use bind() to bind the TCP socket failure: %s\n", strerror(errno));
+        goto CleanUp;
+    }
+
+    /*
+     * listen() marks the socket referred to by listenfd as a passive socket, that is, as a socket 
+     * that will be used to accept incoming connection requests using accept(2). We can use Linux
+     * command "man listen" to see this function manual.
+     */
+    if(listen(listenfd, LISTENQ) < 0)
+    {
+        printf("Use bind() to bind the TCP socket failure: %s\n", strerror(errno));
+        goto CleanUp;
+    }
+    printf("%s server start to listen port %d\n", argv[0],serv_port);
+
+
+    for ( ; ; ) 
+    {
+        /*
+         * The accept() system call is used with connection-based socket types (SOCK_STREAM, SOCK_SEQPACKET).
+         * It extracts the first connection request on the queue of pending connections for the listening 
+         * socket linstenfd, creates a new connected socket(connfd), and returns a new file descriptor referring 
+         * to that socket. The newly created socket is not in the listening state. The original socket 
+         * listenfd is unaffected by this call.
+         */
+
+        if( (connfd=accept(listenfd, (struct sockaddr *)NULL, NULL)) > 0)
+        {
+            pthread_create(&tid, NULL, socket_client_worker, (void *)connfd);
+        }
+    }
+
+CleanUp:
+    close(listenfd);  /* We must close socket File Description when program exit*/
+    return 0;
+}
+
+static inline msleep(unsigned long ms) 
+{
+    struct timeval       tv; 
+
+    tv.tv_sec = ms/1000;
+    tv.tv_usec = (ms%1000)*1000; 
+    
+    select(0, NULL, NULL, NULL, &tv);
+}
+
+
+char      *fail_str[3]={"Verify user account get wrong format",
+                        "Verify user account get wrong username",
+                        "Verify user account get wrong password"};
+int verify_user_logon(char *buf)
+{
+    char                *ptr = NULL;
+
+    if( !(ptr=strchr(buf, ':')) )
+    {
+        return 1;
+    }
+
+    if( strncmp(buf, DEF_USER, strlen(DEF_USER)) )
+    {
+        return 2;
+    }
+
+    if( strncmp(ptr+1, DEF_PASSWD, strlen(DEF_PASSWD)) )
+    {
+        return 3;
+    }
+
+    return 0;
+}
+
+void *socket_client_worker(void *arg)
+{
+    int            client_fd;
+    char           buf[512];
+    int            rv;
+
+    if( !arg )
+    {
+        printf("Invalid arg\n");
+        return NULL;
+    }
+
+    client_fd = (int) arg;
+
+#ifdef CONFIG_VERIFY_USER
+    memset(buf, 0, sizeof(buf));
+    if( (rv=read(client_fd, buf, sizeof(buf))) <= 0)
+    {
+        printf("socket disconncet or read get error\n");
+        goto CleanUp;
+    }
+
+    if( 0 != (rv=verify_user_logon(buf)) )
+    {
+        printf("client logon account [%s] invalid, disconncet it now\n", buf);
+        write(client_fd, fail_str[rv-1], strlen(fail_str[rv-1]));
+        goto CleanUp;
+    }
+
+    write(client_fd, "passed", 6);
+#endif
+
+    while(1)
+    {
+        memset(buf, 0, sizeof(buf));
+        if( (rv=read(client_fd, buf, sizeof(buf))) <= 0)
+        {
+            printf("socket disconncet or read get error\n");
+            goto CleanUp;
+        }
+
+        /* echo the data from client back  */
+        printf("socket[%d] read get %d bytes data and will echo it back\n", client_fd, rv);
+        write(client_fd, buf, rv);
+    }
+
+
+CleanUp:
+    printf("Thread worker for socket[%d] exit.\n", client_fd);
+    msleep(500);
+    close(client_fd);
+}
+
+
diff --git a/program/unp/test.sh b/program/unp/test.sh
new file mode 100755
index 0000000..9d00aad
--- /dev/null
+++ b/program/unp/test.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+for i in `seq 1 100` ; do
+    ./socket_client -i 127.0.0.1 -p 8900 &
+done
+
+sleep 1
+
+killall socket_client
+

--
Gitblit v1.9.1