$Id: README 74 2014-09-22 13:12:37Z abalama $
App::MBUtiny v1.08 and later  
This document written in Windows-1251 charset
=============================================

  
-----------------

App::MBUtiny -         ,     
   . App::MBUtiny        - mbu 
 mbutiny.


-----------

    -   - ()   /
    -     
    -            
    -       ,   FTP/HTTP 
    -       
    -    CPAN      make install
    -         


-----------

  ,      ,   
   "" App::MBUtiny:

    - gcc  
    - perl v5.10   (   v5.12)
    - libwww (p5-libwww / perl-libwww)
    - libnet
    - zlib

    ,      WEB  Apache 2.2
 .       CGI (perl) .


---------

   .  - ;  - .

       :

    # cpan install App::MBUtiny

 ( ActivePerl):

    # ppm install App-MBUtiny

        :

    -    CPAN      SourceForge:
    
      https://metacpan.org/pod/App::MBUtiny
      http://search.cpan.org/~abalama/
      https://sourceforge.net/projects/app-mbutiny/
    
    -   ,        
    
    -         :
    
      perl Makefile.PL
      make
      make test
      make install
    
        (),  
          .


-------------

     mbutiny (  mbutiny).  
         
  App::MBUtiny.

         .

     :

    # mbutiny config

        ,    
   -c DIRECTORY/mbutiny.conf:

    # mbutiny -c /my/config/files/mbutiny.conf config

  ""     /my/config/files


------------

    .     
   .

         ,    
 .       : 

    extra/arc.conf
    extra/collector.conf
    extra/sendmail.conf
    hosts/host-foo.conf.sample
    collector.cgi.sample
    mbutiny.conf

     mbutiny.conf.      
       .  collector.cgi.sample
      (      ).  
       extra/collector.conf. 
 extra/arc.conf      ; extra/sendmail.conf
       .  hosts/host-foo.conf.sample
    ,    . 

 -   ,       .
        ().     
    ,     .

mbutiny.conf
~~~~~~~~~~~~

   ,  mbutiny.conf   .

    LogEnable   on
    LogEnable   off

       mbutiny.   - off

    LogLevel warning

   .     : debug, info, 
notice, warning, error, crit, alert, emerg, fatal, except.     debug

   mbutiny    mbutiny.log    
, : /var/log/mbutiny.log

    mbutiny   -l   mbutiny.log    
  - mbutiny_debug.log.         
 App::MBUtiny.

    BUday    3

BUday    .      

    BUweek   3

BUweek    .      
.      ,     .

    BUmonth  3

BUmonth    .      
.      ,      
 .

    SendReport      yes
    SendReport      no

 SendReport ,        
       ,   
 extra/sendmail.conf.   - no

    SendErrorReport yes
    SendErrorReport no

             
,         .
  - no

extra/sendmail.conf
~~~~~~~~~~~~~~~~~~~

    <SendMail>...</SendMail>     
  .      SMTP,   
 :

    TestMail    test@example.com

      test@example.com     
  -t

    ErrorMail   error@example.com

        error@example.com   
 SendErrorReport yes

    Sendmail   /usr/sbin/sendmail
    Flags      -t

 Sendmail   SMTP ,  .  
   -t,   Flags

    SMTP       192.168.0.1
    SMTPuser   user
    SMTPpass   password

      SMTP    . 
SMTPuser  SMTPpass .

    <Attach>...</Attach>
    
 (     )  ,     

extra/arc.conf
~~~~~~~~~~~~~~

   .   .   CTK.

        ,     
    .       :

     :

    FILE     --     
    FILENAME --    
    DIRSRC   --    
    DIRIN    -- = DIRSRC
    DIRDST   --     
    DIROUT   -- = DIRDST
    LIST     --    ,  

       :

    FILE     --       
    DIRSRC   --        
    DIRIN    -- = DIRSRC
    LIST     --    ,  

        tar
 
    <Arc tgz> #   . ,  ,    
        type       tar                       #  ,   
        ext        tgz                       #   
        create     tar -zcpf [FILE] [LIST]   #    
        extract    tar -zxpf [FILE] [DIRDST] #      
        list       tar -ztf [FILE]           #       
        nocompress tar -cpf [FILE]           #      
    </Arc>

extra/collector.conf
~~~~~~~~~~~~~~~~~~~~

       <Collector>...</Collector>

      .

 <Collector>...</Collector>       ( <DBI>...</DBI>) 
  DataDir. 

    DataDir   "/var/data/mbutiny"

        (HTTP ).   - 
    (DOCUMENT_ROOT)

hosts/host-*.conf
~~~~~~~~~~~~~~~~~

   host-*.conf    .   host-*.conf  
  <Host name>...</Host>.  name -   .    
  ,         ,  
 .       , 
    .

    Enable      yes
    Enable      no

   .     .   ,  
  ,   .    .   
,     <Host name>...</Host>  Enable ! , 
    .

    SendReport  no
    SendErrorReport yes

       .      
  <SendMail>...</SendMail> ,      ,  
 extra/sendmail.conf,  .

    ArcName     zip

  <Arc>...</Arc>  extra/arc.conf.      : tar, tgz,
gz, zip, bz2, rar.   ArcName   tar -  Tape ARchive (TAR)

    ArcMask [HOST]-[YEAR]-[MONTH]-[DAY].[EXT]

  . ArcMask   ,    ()   
 .      ,      
: [HOST]-[YEAR]-[MONTH]-[DAY].[EXT]

     :

    DEFAULT  --    [HOST]-[YEAR]-[MONTH]-[DAY].[EXT]
    HOST     --   
    YEAR     --   
    MONTH    --   
    DAY      --   
    EXT      --   
    TYPE     --  

     ,       
  ""  ,  .    
    - .     
     .        
: [HOST].[YEAR][MONTH][DAY].[EXT]
         , : 

    ArcMask [DEFAULT]

    BUday, BUweek  BUmonth     
 mbutiny.conf.      :

    BUday       3
    BUweek      3
    BUmonth     3

 ,     ,   mbutiny   
  .

    SHA1sum     yes
    MD5sum      yes

         SHA1  MD5. 
          , 
     .

    Trigger mkdir /tmp/test
    Trigger echo foo > /tmp/test/foo.txt

.  ,          
 (  ).     ,      
.           
    . 

    Trigger mysqldump -f -h mysql.host.com -u user --port=3306 --password=password \
            --add-drop-table --default-character-set=utf8 \
            --databases databasename > /tmp/test/databasename.sql

             
  .        .

    Object /tmp/test/foo.txt
    Object /tmp/test/databasename.sql



    Object /tmp/test

 Object ,         
. 

    <Exclude "exclude_sample">
         #     .     
         Object /usr/local/etc

         # .      .   
         Target /tmp/test_exclude_sample

         #            Target
         Exclude bar.txt
         Exclude baz.txt
    </Exclude>

   ,     .   
        Object    
   Target.         
  ,     Exclude.    
      .

 ,    Target      
   .    (.  )    
   Object,      .   ,  
:     /tmp/test,    /tmp/test 
 foo.txt   foo.  ,      /tmp/test/foo.txt 
        /tmp/test/foo.txt    /tmp/test.
      .

    <Collector>
        URI         https://user:password@collector.example.com/collector.cgi
        #User       user # Optional. See URI
        #Password   password # Optional. See URI
        #TimeOut    180
    </Collector>
    
   .         .
 URI -  (URI)   ().    HTTP   
   URI,  ,    . TimeOut - .   
180 . 

    <Local>
        FixUP       off
        Localdir    C:\\Temp\\mbutimy-local1
        Localdir    C:\\Temp\\mbutimy-local2
        #Comment    Local said blah-blah-blah for collector # Optional for collector
    </Local>

 <Local>...</Local>        .  
  ,     ,      
      (, , , 
  ..).  <Local>...</Local>   :

Localdir -   .        
( ).   Localdir   ,    
    . 

FixUP -       .    on  off

Comment -   .     .  
    .

    <FTP>
        FixUP       on
        FTPhost     ftp.example.com
        FTPdir      mbutiny/foo
        FTPuser     user
        FTPpassword password
        Set         Passive 1
        Comment     FTP said blah-blah-blah for collector # Optional for collector
    </FTP>

 <FTP>...</FTP>    FTP-. <FTP>    
    .         
FTP-.   - FTPhost, FTPdir, FTPuser  FTPpassword -  
   FTP-,    FixUP  Comment   
 <Local>...</Local>.  Set    FTP

    <HTTP>
        FixUP       on
        URI         https://user:password@collector.example.com/collector.cgi
        #User       user # Optional. See URI
        #Password   password # Optional. See URI
        Comment     HTTP said blah-blah-blah for collector # Optional for collector
        #TimeOut    180
    </HTTP>

 <HTTP>...</HTTP>    HTTP-.  <HTTP>   
.        HTTP-.     
,  <HTTP>...</HTTP>     "" ,  
   .        HTTP  
  . URI -    (  ).    HTTP 
    URI  ,    . FixUP -  
     .   FTP  Local  
 on  off.  ,        
  , ..            
. TimeOut - .   180 .       
,         . 

 
-------------

    ,    -    
mbutiny.       :

    # mbutiny -h

   mbutiny :

    # mbutiny [OPTIONS] [COMMANDS [ARGS]]

    :

    -D DATADIR

  ()   ,      , 
    -,      .
      .

    -c CONFFILE
    --config=CONFFILE

        CONFFILE.   
     mbutiny.conf.

    -v

        mbutiny.    
    -d.

    :

    test [HOSTs]

     .    ,  
   ,     .

    [backup [HOSTs]]

      .    ,  
   ,     . 
,   backup       mbutiny.

    restore [HOSTs] [DATE]

         
   ( ,    ).  DATE  ,  
YYYY.MM.DD  DD.MM.YYYY  .        ,  
      ,    .    
   ,       .    
    .

    checkup [HOSTs] [DATE]

            .
 DATE  ,   YYYY.MM.DD  DD.MM.YYYY    .
   ,      .    0 
0  0      .      
 ,         ,
             .
     ,  .

 
--------------------------

             
 .           - cron.

           :

    0 2 * * * /usr/bin/mbutiny >/dev/null 2>>/var/log/mbutiny-error.log

 ,          2  

   ,   ""   :

    0 2 * * * /usr/bin/mbutiny backup foo >/dev/null 2>>/var/log/mbutiny-error.log
    0 3 * * * /usr/bin/mbutiny backup bar >/dev/null 2>>/var/log/mbutiny-error.log
    0 4 * * * /usr/bin/mbutiny backup baz >/dev/null 2>>/var/log/mbutiny-error.log

          .

    ,     /var/log/mbutiny-error.log


---------

   App::MBUtiny.   CGI ,    
 collector.cgi.sample:

    #!/usr/bin/perl -w
    use strict;

    use WWW::MLite;
    my $mlite = new WWW::MLite(
        prefix  => 'collector',
        name    => 'Collector',
        module  => 'App::MBUtiny::Collector',
        config_file => '/path/to/mbutiny/extra/collector.conf',
        register => ['App::MBUtiny::Collector::Root'],
    );
    $mlite->show;

       WWW::MLite,    
  App::MBUtiny.     HTTP.

  CGI      App::MonM. App::MonM ,  
   App::MBUtiny,         
.

  API. API       XML. 
       ,  extra/collector.conf
          
  CGI  collector.cgi      , , 
  ,       Linux:

    /etc/mbutiny/extra/collector.conf

 
~~~~~~~~~~~~~~~~~~~~    

    :

    1.    App::MBUtiny  ,    
        . . 
    2.  " "   mbutiny
    3.    collector.conf
    4.   collector.cgi       
       collector.conf
    5.     

 2     , , MySQL.    
   ""     .  : 
   UTF8!

      we   mbutiny.     
,        collector.conf   Table  DBI.

    DDL    - collector.conf, 
    App::MBUtiny.

      3 -     ,  
            .

 4      collector.cgi.      
  Apache    .      
        .

       .htaccess,   
 ,    HTTP:

    <Files collector.cgi>
        AuthName "App::MBUtiny file authorization for access to collector"
        AuthType Basic

        AuthGroupFile /var/www/mbutiny.example.com/.htgroups
        AuthUserFile  /var/www/mbutiny.example.com/.htpasswd

        Require valid-user
        #Require username
        Require group collector
    </Files>

 .htgroups  .htpasswd     , .

          
.           CGI   
check. :

    https://mbutiny.example.com/collector.cgi?action=check

       XML    status   1:

    <status>1</status>

     .   API.

             .

    
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   ,    mbutiny     
   FTP     .    
  CentOS.   ,    .  
 host-mbutiny.example.com.conf     /etc/mbutiny/hosts

    <Host mbutiny.example.com>
        Enable          yes
        SendReport      no
        SendErrorReport yes
        ArcName         tgz
        SHA1sum         yes
        MD5sum          yes

        # Triggers
        Trigger mysqldump -f -h localhost -u user --port=3306 --password=password \
                --add-drop-table --default-character-set=utf8 \
                --databases mbutiny > /home/mbutiny/mbutiny.sql

        # Objects
        Object /etc
        Object /home/mbutiny/mbutiny.sql

        # Collector definitions (Can be defined by several sections)
        <Collector>
            URI         http://user:password@mbutiny.example.com/collector.cgi
            Comment     "(LOCAL) Configuration and databases on mbutiny.example.com"
            #TimeOut    180
        </Collector>

        # Local storage
        <Local>
            Localdir    /home/mbutiny/local
        </Local>

        # FTP storage (Can be defined by several sections)
        <FTP>
            FixUP       on
            FTPhost     192.168.92.88
            FTPdir      mbutiny/mbutiny.example.com
            FTPuser     bu
            FTPpassword asdfghjkl
            Comment     "(FTP) Configuration and databases on mbutiny.example.com"
        </FTP>

        # HTTP storage (Can be defined by several sections)
        <HTTP>
            FixUP       on
            URI         http://user:password@mbutiny.example.com/collector.cgi
            Comment     "(HTTP) Configuration and databases on mbutiny.example.com"
            TimeOut     600
        </HTTP>
    </Host>

API
---

         (   
 mbutiny)    ( )    HTTP  
   - XML.     POST      
XML,    XML .    ,    
     MIME  application/octet-stream.    
 download,            
 .           download.

  API    POST (   GET) ,   
    ( ),   - XML  .    
   :

    http://SITE:PORT/collector.cgi?action=_&request=XML_
    https://SITE:PORT/collector.cgi?action=_&request=XML_

     ,       default.  
   .

   XML,    request  :

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <object>
            _
        </object>
        <data>
            _
        </data>
    </request>

  <object>...</object>   ,   action.   
        .  <data>...</data>  
 ,    .

  ,    ,  :

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data>
            _
        </data>
        <debug_time>0.531</debug_time>
        <error>
            _
        </error>
        <object>
            _
        </object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>
            _
        </status>
    </response>

   , -     request,     
 response.  <object>...</object>   ,      , 
     .  <data>...</data>   , 
   .  <status>...</status>    : 0 -  
  ; 1 -          
  .   - ,       
<error>...</error>.   <debug_time>...</debug_time>, 
<query_string>...</query_string>, <remote_addr>...</remote_addr>   
. debug_time -   ,      . 
query_string -    ,    . remote_addr - IP  ,
 .

default
~~~~~~~

 default      .   
default:

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data></data>
        <debug_time>0.056</debug_time>
        <error>  .       
            check</error>
        <object>default</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>0</status>
    </response>

   ,          0.    
   .

check
~~~~~

   .      
  .       -   
.        :

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <object>check</object>
    </request>

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data></data>
        <debug_time>0.531</debug_time>
        <error>ERR: 2005; ERRSTR: Unknown MySQL server host 'mysql.example.com' (11001); 
            STATE: HY000</error>
        <object>check</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>0</status>
    </response>


    <?xml version="1.0" encoding="utf-8"?>
    <request>
      <object>check</object>
    </request>

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data>
            <action>check</action>
            <action>upload</action>
            <action>fixup</action>
            <action>status</action>
            <action>list</action>
            <action>info</action>
            <action>download</action>
            <action>delete</action>
            <dir>data</dir>
            <message>Ok</message>
        </data>
        <debug_time>0.125</debug_time>
        <error></error>
        <object>check</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>1</status>
    </response>

        <data>...</data>   
.

upload
~~~~~~

         -  .
         (MIME) multipart/form-data.
     multipart/form-data    .

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <data>
            <comment>blah-blah-blah</comment>
            <file>test1-2014-09-05.zip</file>
            <host>test1</host>
            <md5>229f51f8257e5200f5942fa210b2b4c5</md5>
            <sha1>ecf0cc7fb25a57025a20ba42161cd215d585f3af</sha1>
        </data>
        <object>upload</object>
    </request>

 <comment>...</comment>     . <file>...</file> 
   . <host>...</host>   ,  . 
<md5>...</md5>  <sha1>...<.sha1>     .   
  ,    <comment>...</comment>.     
POST    data,     multipart/form-data.

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data>
            <id>422</id>
            <message>Uploading sucess</message>
            <path>data\test1\test1-2014-09-05.zip</path>
        </data>
        <debug_time>0.142</debug_time>
        <error></error>
        <object>upload</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>1</status>
    </response>

       ,     
  #ID     .      
  <message>...</message>.

fixup
~~~~~

           
   ,    fixup,   
  .     HTTP      ,
   <id>...</id>,  ID     (.  upload).
 <status>...</status>    : 1 -   ; 
0 -    .  <type>1</type>     1,  
          ,   . 
        .

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <data>
            <id>422</id>
            <comment>blah-blah-blah</comment>
            <message>Uploading sucess: test1-2014-09-05.zip ... </message>
            <status>1</status>
            <type>1</type>
        </data>
        <object>fixup</object>
    </request>

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data>
            <id>422</id>
            <message>Fixing sucess. The data successfully inserted to table of database</message>
        </data>
        <debug_time>0.125</debug_time>
        <error></error>
        <object>fixup</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>1</status>
    </response>

     ,  = 0.

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <data>
            <comment>local said blah-blah-blah</comment>
            <file>test1-2014-09-05.zip</file>
            <host>test1</host>
            <md5>229f51f8257e5200f5942fa210b2b4c5</md5>
            <message>Files successfully stored to LOCAL directoy ... </message>
            <sha1>ecf0cc7fb25a57025a20ba42161cd215d585f3af</sha1>
            <size>131616</size>
            <status>1</status>
            <type>0</type>
        </data>
        <object>fixup</object>
    </request>

  <size>...</size>      ,   
  upload  fixup    .

list
~~~~

         HTTP   
.

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <data>
            <host>test1</host>
        </data>
        <object>list</object>
    </request>

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data>
            <list>test1-2014-08-27.zip</list>
            <list>test1-2014-08-28.zip</list>
            <list>test1-2014-08-29.zip</list>
            <list>test1-2014-09-01.zip</list>
            <list>test1-2014-09-03.zip</list>
            <list>test1-2014-09-05.zip</list>
            <message>Spisok failov dlia khosta uspieshno poluchien</message>
        </data>
        <debug_time>0.119</debug_time>
        <error></error>
        <object>list</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>1</status>
    </response>

     <host>...</host>      
  .  ,   <list>...</list>,     
.

delete
~~~~~~

       HTTP    .

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <data>
            <file>test1-2014-08-27.zip</file>
            <host>test1</host>
        </data>
    <object>delete</object>
    </request>

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data>
            <id>35</id>
            <message>Fail uspieshno udalien</message>
        </data>
        <debug_time>0.149</debug_time>
        <error></error>
        <object>delete</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>1</status>
    </response>

           <file>...</file>  <host>...</host>

info
~~~~

    .

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <data>
            <file>test1-2014-09-05.zip</file>
            <host>test1</host>
        </data>
        <object>info</object>
    </request>

           <file>...</file>  <host>...</host>

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data>
            <id>428</id>
            <agent_host>mnsdesktop</agent_host>
            <agent_ip>127.0.0.1</agent_ip>
            <agent_name>test1</agent_name>
            <comment>blah-blah-blah</comment>
            <date_finish></date_finish>
            <date_start>2014-09-05 15:15:14</date_start>
            <datestamp>2014-09-05 15:15:13</datestamp>
            <file_md5>229f51f8257e5200f5942fa210b2b4c5</file_md5>
            <file_name>test1-2014-09-05.zip</file_name>
            <file_sha1>ecf0cc7fb25a57025a20ba42161cd215d585f3af</file_sha1>
            <file_size>131616</file_size>
            <message>Uploading sucess ... </message>
            <server_host>mbutiny.localhost</server_host>
            <server_ip>127.0.0.1</server_ip>
            <status>1</status>
            <type>1</type>
        </data>
        <debug_time>0.115</debug_time>
        <error></error>
        <object>info</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>1</status>
    </response>
    
       ,     .
    .

download
~~~~~~~~

     .     XML ,  
 ,   ,    MIME    text/xml

,    ,        "AS IS".

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <data>
            <file>test1-2014-09-05.zip</file>
            <host>test1</host>
        </data>
        <object>download</object>
    </request>

           <file>...</file>  <host>...</host>

report
~~~~~~

  ()        .

     ,    App::MonM.
    ()     ,  , 
  .        .   
  ,          .

    <?xml version="1.0" encoding="utf-8"?>
    <request>
        <data>
            <type>1</type>
            <host>test1</host>
            <date_start>01.09.2014</date_start>
            <date_finish>09.09.2014</date_finish>
        </data>
        <object>report</object>
    </request>

    :  ,    -     .
     (  )  : 0 - , 
1 - , 2 -    .         DD.MM.YYYY. 
     ,         00:00:00  
 .

   :

    <?xml version="1.0" encoding="utf-8"?>
    <response>
        <data>
            <backup>
                <id>460</id>
                <agent_host>mnsdesktop</agent_host>
                <agent_ip>127.0.0.1</agent_ip>
                <agent_name>localhost</agent_name>
                <comment>(HTTP) Configuration and databases on ... </comment>
                <date_start>2014-09-09 04:05:06</date_start>
                <file_md5>96e3596cff90daebd186fac5e478f0af</file_md5>
                <file_name>test1-2014-09-03.zip</file_name>
                <file_sha1>c47b0a6346f0ea3ef791a9fb579eff8b833f5d44</file_sha1>
                <file_size>1198023</file_size>
                <message>Uploading sucess ... </message>
                <n>1</n>
                <server_host>mbutiny.localhost</server_host>
                <server_ip>127.0.0.1</server_ip>
                <status>1</status>
                <type>1</type>
            </backup>
            <message>  </message>
            <number>1</number>
        </data>
        <debug_time>0.116</debug_time>
        <error></error>
        <object>report</object>
        <query_string></query_string>
        <remote_addr>127.0.0.1</remote_addr>
        <status>1</status>
    </response>

 <backup>...</backup> (    )     . 
 <number>    .

__END__