xmlrpc-light-0.6.1/0000775000175000017500000000000011140336623013117 5ustar ramenramenxmlrpc-light-0.6.1/doc/0000775000175000017500000000000011140336623013664 5ustar ramenramenxmlrpc-light-0.6.1/doc/xmlrpc-light/0000775000175000017500000000000011140336623016276 5ustar ramenramenxmlrpc-light-0.6.1/doc/xmlrpc-light/html/0000775000175000017500000000000011140336623017242 5ustar ramenramenxmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpc.multicall.html0000664000175000017500000000405311140336573024371 0ustar ramenramen XmlRpc.multicall XmlRpc.client ->
object
  method call : string -> XmlRpc.value list -> XmlRpc.value Lazy.t
  method completed : bool
  method execute : unit -> unit
  method executed : bool
  method result : int -> XmlRpc.value
end
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_attributes.html0000664000175000017500000000770311140336573023520 0ustar ramenramen Index of class attributes

Index of class attributes


B
base64_decoder [XmlRpcServer.base]
Base-64 binary decoding function.
base64_encoder [XmlRpcServer.base]
Base-64 binary encoding function.

D
datetime_decoder [XmlRpcServer.base]
ISO-8601 date/time decoding function.
datetime_encoder [XmlRpcServer.base]
ISO-8601 date/time encoding function.
debug [XmlRpc.client]
If true, Xml messages will be printed to standard error.

E
error_handler [XmlRpcServer.base]
Handler for unhandled exceptions.

H
headers [XmlRpc.client]
List of custom HTTP headers to send with each request.

I
insecure_ssl [XmlRpc.client]
If true, SSL will be allowed even if the certificate is self-signed.

M
methods [XmlRpcServer.base]
Hashtable mapping method names to implementation functions.

T
timeout [XmlRpc.client]
Maximum time to wait for a request to complete, in seconds.

U
url [XmlRpc.client]
Url of the remote XmlRpc server.
useragent [XmlRpc.client]
User-agent to send in request headers.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_class_types.html0000664000175000017500000000256011140336573023657 0ustar ramenramen Index of class types

Index of class types


S
server [XmlRpcServer]
Type of concrete XmlRpc server classes.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpc.client.html0000664000175000017500000001754411140336574022632 0ustar ramenramen XmlRpc.client

Class XmlRpc.client


class client : ?debug:bool -> ?headers:(string * string) list -> ?insecure_ssl:bool -> ?timeout:float -> ?useragent:string -> string -> object .. end
Class for XmlRpc clients. Takes a single mandatory argument, url.

If url is of the form "http://username:password@...", basic authentication will be used.

If url starts with "https", Curl will be used instead of Ocamlnet. The "curl" command-line program must be in your path for this to work. You can use the insecure_ssl setting to allow connections to servers with self-signed certificates; by default this is false and certificates must be valid.

timeout can be used to specify the maximum amount of time elapsed before a connection is cancelled. It defaults to 300.0 seconds.

headers may contain an array of (name, value) pairs of additional headers to send with each request.

The useragent setting provides a convenient way to change the User-Agent header, which defaults to "XmlRpc-Light/<version>".

The debug setting, if true, will enable verbose debugging output to the standard error stream.


val url : string
Url of the remote XmlRpc server.
val mutable debug : bool
If true, Xml messages will be printed to standard error.
val mutable headers : (string * string) list
List of custom HTTP headers to send with each request.
val mutable insecure_ssl : bool
If true, SSL will be allowed even if the certificate is self-signed.
val mutable timeout : float
Maximum time to wait for a request to complete, in seconds.
val mutable useragent : string
User-agent to send in request headers.
method url : string
Gets url.
method debug : bool
Gets debug.
method set_debug : bool -> unit
Sets debug.
method headers : (string * string) list
Gets headers.
method set_headers : (string * string) list -> unit
Sets headers.
method insecure_ssl : bool
Gets insecure_ssl.
method set_insecure_ssl : bool -> unit
Sets insecure_ssl.
method timeout : float
Gets timeout.
method set_timeout : float -> unit
Sets timeout.
method useragent : string
Gets useragent.
method set_useragent : string -> unit
Sets useragent.
method set_base64_encoder : (string -> string) -> unit
Sets an alternate Base-64 binary encoding function.
method set_base64_decoder : (string -> string) -> unit
Sets an alternate Base-64 binary decoding function.
method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit
Sets an alternate ISO-8601 date/time encoding function.
method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit
Sets an alternate ISO-8601 date/time decoding function.
method call : string -> value list -> value
call name params invokes an XmlRpc method and returns the result, or raises XmlRpc.Error on error.
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpcDateTime.html0000664000175000017500000001750311140336574022765 0ustar ramenramen XmlRpcDateTime

Module XmlRpcDateTime


module XmlRpcDateTime: sig .. end
Date/time type.


Types


exception Parse_error of string
Raised by XmlRpcDateTime.of_string if a string could not be parsed. The exception contains the input string.
type t = int * int * int * int * int * int * int 
Type of XmlRpc-compatible date/time values. (year, month, day, hour, minute, second, time zone offset in minutes)

Comparison


val compare : t -> t -> int
Standard comparator for date/time values. Converts all values to UTC before comparing to ensure correct behavior with values of differing time zones.
val equal : t -> t -> bool
Standard equality function for date/time values. Converts all values to UTC before comparing.
val hash : t -> int
Standard hash function for date/time values. Converts values to UTC before hashing.

Current date and time


val now : unit -> t
Returns the current date and time in the local time zone.
val now_utc : unit -> t
Returns the current date and time in UTC.

Time zone adjustments


val set_tz_offset : int -> t -> t
Adjusts the time zone offset, preserving equality.
val fix_tz_offset : int -> t -> t
Forces the time zone offset to a different value, ignoring all other fields. Use this to correct the time zone of a date/time value that was received without a time zone offset and is known not to be UTC.

Conversion


val from_unixfloat : float -> t
Builds a date/time value from epoch seconds in the local time zone.
val from_unixfloat_utc : float -> t
Builds a date/time value from epoch seconds in UTC.
val to_unixfloat : t -> float
Converts a date/time value to epoch seconds in the local time zone.
val to_unixfloat_utc : t -> float
Converts a date/time value to epoch seconds in UTC.
val from_unixtm : Unix.tm -> t
Builds a date/time value from a Unix.tm value in the local time zone.
val from_unixtm_utc : Unix.tm -> t
Builds a date/time value from a Unix.tm value in UTC.
val to_unixtm : t -> Unix.tm
Converts a date/time value to a Unix.tm value in the local time zone.
val to_unixtm_utc : t -> Unix.tm
Converts a date/time value to a Unix.tm value in UTC.

ISO-8601 parsing and generation


val of_string : string -> t
Parses an (XmlRpc-flavor) ISO-8601 date/time value from a string.
val to_string : t -> string
Generates an ISO-8601 string from a date/time value.
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpcDateTime.html0000664000175000017500000001202311140336574024016 0ustar ramenramen XmlRpcDateTime sig
  exception Parse_error of string
  type t = int * int * int * int * int * int * int
  val compare : XmlRpcDateTime.t -> XmlRpcDateTime.t -> int
  val equal : XmlRpcDateTime.t -> XmlRpcDateTime.t -> bool
  val hash : XmlRpcDateTime.t -> int
  val now : unit -> XmlRpcDateTime.t
  val now_utc : unit -> XmlRpcDateTime.t
  val set_tz_offset : int -> XmlRpcDateTime.t -> XmlRpcDateTime.t
  val fix_tz_offset : int -> XmlRpcDateTime.t -> XmlRpcDateTime.t
  val from_unixfloat : float -> XmlRpcDateTime.t
  val from_unixfloat_utc : float -> XmlRpcDateTime.t
  val to_unixfloat : XmlRpcDateTime.t -> float
  val to_unixfloat_utc : XmlRpcDateTime.t -> float
  val from_unixtm : Unix.tm -> XmlRpcDateTime.t
  val from_unixtm_utc : Unix.tm -> XmlRpcDateTime.t
  val to_unixtm : XmlRpcDateTime.t -> Unix.tm
  val to_unixtm_utc : XmlRpcDateTime.t -> Unix.tm
  val of_string : string -> XmlRpcDateTime.t
  val to_string : XmlRpcDateTime.t -> string
end
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpc.client.html0000664000175000017500000001126511140336574023665 0ustar ramenramen XmlRpc.client ?debug:bool ->
?headers:(string * string) list ->
?insecure_ssl:bool ->
?timeout:float ->
?useragent:string ->
string ->
object
  val mutable debug : bool
  val mutable headers : (string * string) list
  val mutable insecure_ssl : bool
  val mutable timeout : float
  val url : string
  val mutable useragent : string
  method call : string -> XmlRpc.value list -> XmlRpc.value
  method debug : bool
  method headers : (string * string) list
  method insecure_ssl : bool
  method set_base64_decoder : (string -> string) -> unit
  method set_base64_encoder : (string -> string) -> unit
  method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit
  method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit
  method set_debug : bool -> unit
  method set_headers : (string * string) list -> unit
  method set_insecure_ssl : bool -> unit
  method set_timeout : float -> unit
  method set_useragent : string -> unit
  method timeout : float
  method url : string
  method useragent : string
end
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_classes.html0000664000175000017500000000425711140336574022771 0ustar ramenramen Index of classes

Index of classes


B
base [XmlRpcServer]
Abstract base class for XmlRpc servers.

C
cgi [XmlRpcServer]
CGI XmlRpc server based on Netcgi2.
client [XmlRpc]
Class for XmlRpc clients.

M
multicall [XmlRpc]
Convenience class for system.multicall calls.

N
netplex [XmlRpcServer]
Stand-alone XmlRpc server based on Netplex.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/style.css0000664000175000017500000000433111140336574021122 0ustar ramenramena:visited {color : #416DFF; text-decoration : none; } a:link {color : #416DFF; text-decoration : none;} a:hover {color : Red; text-decoration : none; background-color: #5FFF88} a:active {color : Red; text-decoration : underline; } .keyword { font-weight : bold ; color : Red } .keywordsign { color : #C04600 } .superscript { font-size : 4 } .subscript { font-size : 4 } .comment { color : Green } .constructor { color : Blue } .type { color : #5C6585 } .string { color : Maroon } .warning { color : Red ; font-weight : bold } .info { margin-left : 3em; margin-right : 3em } .param_info { margin-top: 4px; margin-left : 3em; margin-right : 3em } .code { color : #465F91 ; } h1 { font-size : 20pt ; text-align: center; } h2 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90BDFF ;padding: 2px; } h3 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90DDFF ;padding: 2px; } h4 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90EDFF ;padding: 2px; } h5 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90FDFF ;padding: 2px; } h6 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #C0FFFF ; padding: 2px; } div.h7 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #E0FFFF ; padding: 2px; } div.h8 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #F0FFFF ; padding: 2px; } div.h9 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #FFFFFF ; padding: 2px; } .typetable { border-style : hidden } .indextable { border-style : hidden } .paramstable { border-style : hidden ; padding: 5pt 5pt} body { background-color : White } tr { background-color : White } td.typefieldcomment { background-color : #FFFFFF ; font-size: smaller ;} pre { margin-bottom: 4px } div.sig_block {margin-left: 2em}xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_values.html0000664000175000017500000002300011140336574022616 0ustar ramenramen Index of values

Index of values


C
compare [XmlRpcDateTime]
Standard comparator for date/time values.

D
decode [XmlRpcBase64]
Generic base64 decoding over a character stream.
default_error_handler [XmlRpc]
The default error handler for serve.
dump [XmlRpc]
Converts an XmlRpc value to a human-readable string.

E
encode [XmlRpcBase64]
Generic base64 encoding over a character stream.
equal [XmlRpcDateTime]
Standard equality function for date/time values.

F
fix_tz_offset [XmlRpcDateTime]
Forces the time zone offset to a different value, ignoring all other fields.
from_unixfloat [XmlRpcDateTime]
Builds a date/time value from epoch seconds in the local time zone.
from_unixfloat_utc [XmlRpcDateTime]
Builds a date/time value from epoch seconds in UTC.
from_unixtm [XmlRpcDateTime]
Builds a date/time value from a Unix.tm value in the local time zone.
from_unixtm_utc [XmlRpcDateTime]
Builds a date/time value from a Unix.tm value in UTC.

H
hash [XmlRpcDateTime]
Standard hash function for date/time values.

I
invalid_method [XmlRpcServer]
Raise an XmlRpc.Error indicating a method name not found.
invalid_params [XmlRpcServer]
Raise an XmlRpc.Error indicating invalid method parameters.

M
make_decoding_table [XmlRpcBase64]
Create a valid decoding table from an encoding one.
message_of_xml_element [XmlRpc]
Converts an Xml Light element to an XmlRpc message.

N
now [XmlRpcDateTime]
Returns the current date and time in the local time zone.
now_utc [XmlRpcDateTime]
Returns the current date and time in UTC.

O
of_string [XmlRpcDateTime]
Parses an (XmlRpc-flavor) ISO-8601 date/time value from a string.

Q
quiet_error_handler [XmlRpc]
A "quiet" error handler for serve.

S
serve [XmlRpc]
Creates a function from string (Xml representing a MethodCall) to string (Xml representing a MethodResult or Fault) given a function of the form: (name -> params -> result), where name is the name of the method, params is a list of parameter values, and result is the result value.
serve_message [XmlRpc]
Performs the same function as serve, but operates on typed messages instead of strings.
set_tz_offset [XmlRpcDateTime]
Adjusts the time zone offset, preserving equality.
str_decode [XmlRpcBase64]
Decode a string encoded into Base64, raise Invalid_char if a character in the input string is not a valid one.
str_encode [XmlRpcBase64]
Encode a string into Base64.

T
to_string [XmlRpcDateTime]
Generates an ISO-8601 string from a date/time value.
to_unixfloat [XmlRpcDateTime]
Converts a date/time value to epoch seconds in the local time zone.
to_unixfloat_utc [XmlRpcDateTime]
Converts a date/time value to epoch seconds in UTC.
to_unixtm [XmlRpcDateTime]
Converts a date/time value to a Unix.tm value in the local time zone.
to_unixtm_utc [XmlRpcDateTime]
Converts a date/time value to a Unix.tm value in UTC.

V
value_of_xml_element [XmlRpc]
Converts an Xml Light element to an XmlRpc value.
version [XmlRpc]
Version of XmlRpc-Light as a string.

X
xml_element_of_message [XmlRpc]
Converts an XmlRpc message to an Xml Light element.
xml_element_of_value [XmlRpc]
Converts an XmlRpc value to an Xml Light element.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_methods.html0000664000175000017500000002116511140336574022774 0ustar ramenramen Index of class methods

Index of class methods


C
call [XmlRpc.multicall]
Adds a call to this multicall instance.
call [XmlRpc.client]
call name params invokes an XmlRpc method and returns the result, or raises XmlRpc.Error on error.
completed [XmlRpc.multicall]
True of the call has executed and completed successfully.

D
debug [XmlRpc.client]
Gets debug.

E
execute [XmlRpc.multicall]
Forces the call to execute immediately.
executed [XmlRpc.multicall]
True if the call has executed, whether or not it succeeded.

H
headers [XmlRpc.client]
Gets headers.

I
insecure_ssl [XmlRpc.client]
Gets insecure_ssl.

R
register [XmlRpcServer.base]
Registers a method with the server.
result [XmlRpc.multicall]
Returns a multicall result, executing the call if necessary.
run [XmlRpcServer.server]
Starts the main server process.
run [XmlRpcServer.base]
Starts the main server process.

S
serve [XmlRpcServer.base]
For use in subclasses; calls XmlRpc.serve with the current encoders, decoders, and error handler.
serve_message [XmlRpcServer.base]
Like serve, but operates on messages instead of strings.
set_base64_decoder [XmlRpcServer.base]
Sets an alternate Base-64 binary decoding function.
set_base64_decoder [XmlRpc.client]
Sets an alternate Base-64 binary decoding function.
set_base64_encoder [XmlRpcServer.base]
Sets an alternate Base-64 binary encoding function.
set_base64_encoder [XmlRpc.client]
Sets an alternate Base-64 binary encoding function.
set_datetime_decoder [XmlRpcServer.base]
Sets an alternate ISO-8601 date/time decoding function.
set_datetime_decoder [XmlRpc.client]
Sets an alternate ISO-8601 date/time decoding function.
set_datetime_encoder [XmlRpcServer.base]
Sets an alternate ISO-8601 date/time encoding function.
set_datetime_encoder [XmlRpc.client]
Sets an alternate ISO-8601 date/time encoding function.
set_debug [XmlRpc.client]
Sets debug.
set_error_handler [XmlRpcServer.base]
Sets an alternate handler for unhandled exceptions.
set_headers [XmlRpc.client]
Sets headers.
set_insecure_ssl [XmlRpc.client]
Sets insecure_ssl.
set_timeout [XmlRpc.client]
Sets timeout.
set_useragent [XmlRpc.client]
Sets useragent.

T
timeout [XmlRpc.client]
Gets timeout.

U
unregister [XmlRpcServer.base]
Removes a method from the server.
url [XmlRpc.client]
Gets url.
useragent [XmlRpc.client]
Gets useragent.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpc.multicall.html0000664000175000017500000001377511140336574023344 0ustar ramenramen XmlRpc.multicall

Class XmlRpc.multicall


class multicall : client -> object .. end
Convenience class for system.multicall calls.

Instances take an XmlRpc.client as an argument:

        # let mc = new XmlRpc.multicall client;;
        val mc : XmlRpc.multicall = <obj>
    
The "call" method works like client#call, but it returns a lazy value:
        # let a = mc#call "demo.addTwoNumbers" [`Int 3; `Int 4];;
        val a : XmlRpc.value Lazy.t = <lazy>
        # let b = mc#call "demo.addTwoNumbers" [`Int 42; `String "oh noes!"];;
        val b : XmlRpc.value Lazy.t = <lazy>
        # let c = mc#call "demo.addTwoNumbers" [`Double 3.0; `Double 4.0];;
        val c : XmlRpc.value Lazy.t = <lazy>
    
At this point, the call has not been executed yet:
        # mc#executed;;
        -- : bool = false
    
As soon as one of the return values is forced, the call is executed:
        # Lazy.force a;;
        -- : XmlRpc.value = `Int 7
        # mc#executed;;
        -- : bool = true
    
Once a call has been executed, this instance cannot be used to make any further calls; instead, a new multicall instance must be created:
        # mc#call "demo.addTwoNumbers" [`Int 2; `Int 2];;
        Exception: Failure "multicall#call: already executed".
    
If an XmlRpc fault occurred, the exception will be thrown when the lazy value is forced:
        # Lazy.force b;;
        Exception: XmlRpc.Error (-32602, "server error. invalid method parameters").
    
This will not prevent further methods from executing successfully:
        # Lazy.force c;;
        -- : XmlRpc.value = `Double 7.
    
It is possible for a multicall to be executed but not completed, for example if a transport error occurs. Aside from catching the exception, the completed property indicates if the call actually went through or not:
        # mc#completed;;
        -- : bool = true
    
It is not necessary to use lazy values. Instead, the call can be executed explicitly, and the results can be retrieved by number:
        # let mc = new XmlRpc.multicall client;;
        val mc : XmlRpc.multicall = <obj>
        # ignore (mc#call "demo.addTwoNumbers" [`Int 2; `Int 2]);;
        -- : unit = ()
        # ignore (mc#call "demo.addTwoNumbers" [`Int 3; `Int 3]);;
        -- : unit = ()
        # mc#result 1;;
        -- : XmlRpc.value = `Int 6
    


method call : string -> value list -> value Lazy.t
Adds a call to this multicall instance. If the call has already executed, the following exception will be raised: Failure "multicall#call: already executed".
method execute : unit -> unit
Forces the call to execute immediately. If the call has already executed and completed successfully, the following exception will be raised: Failure "multicall#execute: already completed".
method result : int -> value
Returns a multicall result, executing the call if necessary. The results are numbered starting with zero.
method executed : bool
True if the call has executed, whether or not it succeeded.
method completed : bool
True of the call has executed and completed successfully.
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpcServer.html0000664000175000017500000001202711140336574022533 0ustar ramenramen XmlRpcServer

Module XmlRpcServer


module XmlRpcServer: sig .. end
XmlRpc Light server.


Example:
    let server = new XmlRpcServer.cgi () in
    server#register "demo.sayHello"
      (fun _ -> `String "Hello!");
    server#run () 

By inheriting from XmlRpcServer.base, all servers provide the following introspection functions by default: system.listMethods, system.getCapabilities. To prevent their use, use server#unregister.

Additionally, the methods system.methodHelp and system.methodSignature will be made available if at least one method help or method signature is provided.

type param_type = [ `Array
| `Binary
| `Boolean
| `DateTime
| `Double
| `Int
| `String
| `Struct
| `Undefined ]
Type of parameters used in method signatures.

Base classes


class virtual base : object .. end
Abstract base class for XmlRpc servers.
class type server = object .. end
Type of concrete XmlRpc server classes.

Server implementations


class cgi : unit -> server
CGI XmlRpc server based on Netcgi2.
class netplex : ?parallelizer:Netplex_types.parallelizer -> ?handler:string -> unit -> server
Stand-alone XmlRpc server based on Netplex.

Utility functions


val invalid_method : string -> 'a
Raise an XmlRpc.Error indicating a method name not found.
val invalid_params : unit -> 'a
Raise an XmlRpc.Error indicating invalid method parameters.
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_types.html0000664000175000017500000000630211140336574022471 0ustar ramenramen Index of types

Index of types


D
decoding_table [XmlRpcBase64]
A decoding table maps chars 0..255 to the corresponding 0..63 value or -1 if the char is not accepted.

E
encoding_table [XmlRpcBase64]
An encoding table maps integers 0..63 to the corresponding char.

M
message [XmlRpc]
Type for XmlRpc messages.

P
param_type [XmlRpcServer]
Type of parameters used in method signatures.

T
t [XmlRpcDateTime]
Type of XmlRpc-compatible date/time values.

V
value [XmlRpc]
Polymorphic variant type for XmlRpc values: `Array: An ordered list of values, `Binary: A string containing binary data, `Boolean: A boolean, `DateTime: A date/time value, `Double: A floating-point value, `Int: An integer, `Int32: A 32-bit integer, `Nil: A null value, `String: A string, `Struct: An association list of (name, value) pairs Note that base64-encoding of `Binary values is done automatically.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpcServer.cgi.html0000664000175000017500000000231211140336574024331 0ustar ramenramen XmlRpcServer.cgi unit -> XmlRpcServer.serverxmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpcServer.html0000664000175000017500000003336311140336574023602 0ustar ramenramen XmlRpcServer sig
  type param_type =
      [ `Array
      | `Binary
      | `Boolean
      | `DateTime
      | `Double
      | `Int
      | `String
      | `Struct
      | `Undefined ]
  class virtual base :
    object
      val mutable base64_decoder : string -> string
      val mutable base64_encoder : string -> string
      val mutable datetime_decoder : string -> XmlRpcDateTime.t
      val mutable datetime_encoder : XmlRpcDateTime.t -> string
      val mutable error_handler : exn -> XmlRpc.message
      val methods : (string, XmlRpc.value list -> XmlRpc.value) Hashtbl.t
      method register :
        string ->
        ?help:string ->
        ?signature:XmlRpcServer.param_type list ->
        ?signatures:XmlRpcServer.param_type list list ->
        (XmlRpc.value list -> XmlRpc.value) -> unit
      method virtual run : unit -> unit
      method serve :
        (string -> XmlRpc.value list -> XmlRpc.value) -> string -> string
      method serve_message :
        (string -> XmlRpc.value list -> XmlRpc.value) ->
        XmlRpc.message -> XmlRpc.message
      method set_base64_decoder : (string -> string) -> unit
      method set_base64_encoder : (string -> string) -> unit
      method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit
      method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit
      method set_error_handler : (exn -> XmlRpc.message) -> unit
      method unregister : string -> unit
    end
  class type server =
    object
      val mutable base64_decoder : string -> string
      val mutable base64_encoder : string -> string
      val mutable datetime_decoder : string -> XmlRpcDateTime.t
      val mutable datetime_encoder : XmlRpcDateTime.t -> string
      val mutable error_handler : exn -> XmlRpc.message
      val methods : (string, XmlRpc.value list -> XmlRpc.value) Hashtbl.t
      method register :
        string ->
        ?help:string ->
        ?signature:param_type list ->
        ?signatures:param_type list list ->
        (XmlRpc.value list -> XmlRpc.value) -> unit
      method run : unit -> unit
      method serve :
        (string -> XmlRpc.value list -> XmlRpc.value) -> string -> string
      method serve_message :
        (string -> XmlRpc.value list -> XmlRpc.value) ->
        XmlRpc.message -> XmlRpc.message
      method set_base64_decoder : (string -> string) -> unit
      method set_base64_encoder : (string -> string) -> unit
      method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit
      method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit
      method set_error_handler : (exn -> XmlRpc.message) -> unit
      method unregister : string -> unit
    end
  class cgi : unit -> server
  class netplex :
    ?parallelizer:Netplex_types.parallelizer ->
    ?handler:string -> unit -> server
  val invalid_method : string -> 'a
  val invalid_params : unit -> 'a
end
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpcServer.cgi.html0000664000175000017500000000341011140336574023270 0ustar ramenramen XmlRpcServer.cgi

Class XmlRpcServer.cgi


class cgi : unit -> server
CGI XmlRpc server based on Netcgi2.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_module_types.html0000664000175000017500000000222211140336574024033 0ustar ramenramen Index of module types

Index of module types


xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_modules.html0000664000175000017500000000316611140336574023002 0ustar ramenramen Index of modules

Index of modules


X
XmlRpc
XmlRpc Light.
XmlRpcBase64
Base64 codec.
XmlRpcDateTime
Date/time type.
XmlRpcServer
XmlRpc Light server.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpcServer.base.html0000664000175000017500000001316511140336574024511 0ustar ramenramen XmlRpcServer.base object
  val mutable base64_decoder : string -> string
  val mutable base64_encoder : string -> string
  val mutable datetime_decoder : string -> XmlRpcDateTime.t
  val mutable datetime_encoder : XmlRpcDateTime.t -> string
  val mutable error_handler : exn -> XmlRpc.message
  val methods : (string, XmlRpc.value list -> XmlRpc.value) Hashtbl.t
  method register :
    string ->
    ?help:string ->
    ?signature:XmlRpcServer.param_type list ->
    ?signatures:XmlRpcServer.param_type list list ->
    (XmlRpc.value list -> XmlRpc.value) -> unit
  method virtual run : unit -> unit
  method serve :
    (string -> XmlRpc.value list -> XmlRpc.value) -> string -> string
  method serve_message :
    (string -> XmlRpc.value list -> XmlRpc.value) ->
    XmlRpc.message -> XmlRpc.message
  method set_base64_decoder : (string -> string) -> unit
  method set_base64_encoder : (string -> string) -> unit
  method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit
  method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit
  method set_error_handler : (exn -> XmlRpc.message) -> unit
  method unregister : string -> unit
end
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpcServer.server.html0000664000175000017500000000360711140336574024044 0ustar ramenramen XmlRpcServer.server

Class type XmlRpcServer.server


class type server = object .. end
Type of concrete XmlRpc server classes.
Inherits
method run : unit -> unit
Starts the main server process.
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpc.html0000664000175000017500000002725311140336574021353 0ustar ramenramen XmlRpc

Module XmlRpc


module XmlRpc: sig .. end
XmlRpc Light.

XmlRpc Light is a minimal XmlRpc library based on Xml Light and Ocamlnet.

It provides a type for values, a client class with a simple calling interface, and low-level tools that can be used to implement a server.

(c) 2007-2009 Dave Benjamin


val version : string
Version of XmlRpc-Light as a string.

High-level interface



Example:
    let rpc = new XmlRpc.client "http://localhost:8000" in
    let result = rpc#call "echo" [`String "hello!"] in
    print_endline (XmlRpc.dump result) 

exception Error of (int * string)
Raised for all errors including XmlRpc faults (code, string).
type value = [ `Array of value list
| `Binary of string
| `Boolean of bool
| `DateTime of XmlRpcDateTime.t
| `Double of float
| `Int of int
| `Int32 of int32
| `Nil
| `String of string
| `Struct of (string * value) list ]
Polymorphic variant type for XmlRpc values: Note that base64-encoding of `Binary values is done automatically. You do not need to do the encoding yourself.
class client : ?debug:bool -> ?headers:(string * string) list -> ?insecure_ssl:bool -> ?timeout:float -> ?useragent:string -> string -> object .. end
Class for XmlRpc clients.
class multicall : client -> object .. end
Convenience class for system.multicall calls.

Utility functions


val dump : value -> string
Converts an XmlRpc value to a human-readable string.

Low-level interface



type message =
| MethodCall of (string * value list)
| MethodResponse of value
| Fault of (int * string)
Type for XmlRpc messages.
val message_of_xml_element : ?base64_decoder:(string -> string) ->
?datetime_decoder:(string -> XmlRpcDateTime.t) -> Xml.xml -> message
Converts an Xml Light element to an XmlRpc message.
val xml_element_of_message : ?base64_encoder:(string -> string) ->
?datetime_encoder:(XmlRpcDateTime.t -> string) -> message -> Xml.xml
Converts an XmlRpc message to an Xml Light element.
val value_of_xml_element : ?base64_decoder:(string -> string) ->
?datetime_decoder:(string -> XmlRpcDateTime.t) -> Xml.xml -> value
Converts an Xml Light element to an XmlRpc value.
val xml_element_of_value : ?base64_encoder:(string -> string) ->
?datetime_encoder:(XmlRpcDateTime.t -> string) -> value -> Xml.xml
Converts an XmlRpc value to an Xml Light element.

Server tools


val serve : ?base64_encoder:(string -> string) ->
?base64_decoder:(string -> string) ->
?datetime_encoder:(XmlRpcDateTime.t -> string) ->
?datetime_decoder:(string -> XmlRpcDateTime.t) ->
?error_handler:(exn -> message) ->
(string -> value list -> value) -> string -> string
Creates a function from string (Xml representing a MethodCall) to string (Xml representing a MethodResult or Fault) given a function of the form: (name -> params -> result), where name is the name of the method, params is a list of parameter values, and result is the result value.

This function can be used to build many different kinds of XmlRpc servers since it makes no assumptions about the network library or other communications method used.

If an exception other than XmlRpc.Error occurs, the exception is passed to error_handler. If error_handler returns a message, the message will be used as the result. If an XmlRpc.Error is raised by either the main function or error_handler, it will be converted to an XmlRpc Fault. Any other exception raised by error_handler is allowed to escape.

For a full-featured, easy-to-use, network-capable server implementation, see the XmlRpcServer module.

val serve_message : ?error_handler:(exn -> message) ->
(string -> value list -> value) ->
message -> message
Performs the same function as serve, but operates on typed messages instead of strings.
val default_error_handler : exn -> message
The default error handler for serve.

This error handler catches all exceptions and converts them into faults by wrapping them in XmlRpc.Error.

val quiet_error_handler : exn -> message
A "quiet" error handler for serve.

This error handler simply re-raises the exception. Use this if you want exceptions to remain unhandled so that they will escape to the error log. The client will receive a generic "transport error", which is more secure since it does not reveal any information about the specific exception that occurred.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpc.html0000664000175000017500000003504411140336574022411 0ustar ramenramen XmlRpc sig
  val version : string
  exception Error of (int * string)
  type value =
      [ `Array of XmlRpc.value list
      | `Binary of string
      | `Boolean of bool
      | `DateTime of XmlRpcDateTime.t
      | `Double of float
      | `Int of int
      | `Int32 of int32
      | `Nil
      | `String of string
      | `Struct of (string * XmlRpc.value) list ]
  class client :
    ?debug:bool ->
    ?headers:(string * string) list ->
    ?insecure_ssl:bool ->
    ?timeout:float ->
    ?useragent:string ->
    string ->
    object
      val mutable debug : bool
      val mutable headers : (string * string) list
      val mutable insecure_ssl : bool
      val mutable timeout : float
      val url : string
      val mutable useragent : string
      method call : string -> XmlRpc.value list -> XmlRpc.value
      method debug : bool
      method headers : (string * string) list
      method insecure_ssl : bool
      method set_base64_decoder : (string -> string) -> unit
      method set_base64_encoder : (string -> string) -> unit
      method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit
      method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit
      method set_debug : bool -> unit
      method set_headers : (string * string) list -> unit
      method set_insecure_ssl : bool -> unit
      method set_timeout : float -> unit
      method set_useragent : string -> unit
      method timeout : float
      method url : string
      method useragent : string
    end
  class multicall :
    XmlRpc.client ->
    object
      method call : string -> XmlRpc.value list -> XmlRpc.value Lazy.t
      method completed : bool
      method execute : unit -> unit
      method executed : bool
      method result : int -> XmlRpc.value
    end
  val dump : XmlRpc.value -> string
  type message =
      MethodCall of (string * XmlRpc.value list)
    | MethodResponse of XmlRpc.value
    | Fault of (int * string)
  val message_of_xml_element :
    ?base64_decoder:(string -> string) ->
    ?datetime_decoder:(string -> XmlRpcDateTime.t) ->
    Xml.xml -> XmlRpc.message
  val xml_element_of_message :
    ?base64_encoder:(string -> string) ->
    ?datetime_encoder:(XmlRpcDateTime.t -> string) ->
    XmlRpc.message -> Xml.xml
  val value_of_xml_element :
    ?base64_decoder:(string -> string) ->
    ?datetime_decoder:(string -> XmlRpcDateTime.t) -> Xml.xml -> XmlRpc.value
  val xml_element_of_value :
    ?base64_encoder:(string -> string) ->
    ?datetime_encoder:(XmlRpcDateTime.t -> string) -> XmlRpc.value -> Xml.xml
  val serve :
    ?base64_encoder:(string -> string) ->
    ?base64_decoder:(string -> string) ->
    ?datetime_encoder:(XmlRpcDateTime.t -> string) ->
    ?datetime_decoder:(string -> XmlRpcDateTime.t) ->
    ?error_handler:(exn -> XmlRpc.message) ->
    (string -> XmlRpc.value list -> XmlRpc.value) -> string -> string
  val serve_message :
    ?error_handler:(exn -> XmlRpc.message) ->
    (string -> XmlRpc.value list -> XmlRpc.value) ->
    XmlRpc.message -> XmlRpc.message
  val default_error_handler : exn -> XmlRpc.message
  val quiet_error_handler : exn -> XmlRpc.message
end
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpcServer.server.html0000664000175000017500000001276111140336574025106 0ustar ramenramen XmlRpcServer.server object
  val mutable base64_decoder : string -> string
  val mutable base64_encoder : string -> string
  val mutable datetime_decoder : string -> XmlRpcDateTime.t
  val mutable datetime_encoder : XmlRpcDateTime.t -> string
  val mutable error_handler : exn -> XmlRpc.message
  val methods : (string, XmlRpc.value list -> XmlRpc.value) Hashtbl.t
  method register :
    string ->
    ?help:string ->
    ?signature:param_type list ->
    ?signatures:param_type list list ->
    (XmlRpc.value list -> XmlRpc.value) -> unit
  method run : unit -> unit
  method serve :
    (string -> XmlRpc.value list -> XmlRpc.value) -> string -> string
  method serve_message :
    (string -> XmlRpc.value list -> XmlRpc.value) ->
    XmlRpc.message -> XmlRpc.message
  method set_base64_decoder : (string -> string) -> unit
  method set_base64_encoder : (string -> string) -> unit
  method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit
  method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit
  method set_error_handler : (exn -> XmlRpc.message) -> unit
  method unregister : string -> unit
end
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpcServer.base.html0000664000175000017500000001703011140336574023443 0ustar ramenramen XmlRpcServer.base

Class virtual XmlRpcServer.base


class virtual base : object .. end
Abstract base class for XmlRpc servers.

val methods : (string, XmlRpc.value list -> XmlRpc.value) Hashtbl.t
Hashtable mapping method names to implementation functions.
val mutable base64_encoder : string -> string
Base-64 binary encoding function.
val mutable base64_decoder : string -> string
Base-64 binary decoding function.
val mutable datetime_encoder : XmlRpcDateTime.t -> string
ISO-8601 date/time encoding function.
val mutable datetime_decoder : string -> XmlRpcDateTime.t
ISO-8601 date/time decoding function.
val mutable error_handler : exn -> XmlRpc.message
Handler for unhandled exceptions.
method set_base64_encoder : (string -> string) -> unit
Sets an alternate Base-64 binary encoding function.
method set_base64_decoder : (string -> string) -> unit
Sets an alternate Base-64 binary decoding function.
method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit
Sets an alternate ISO-8601 date/time encoding function.
method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit
Sets an alternate ISO-8601 date/time decoding function.
method set_error_handler : (exn -> XmlRpc.message) -> unit
Sets an alternate handler for unhandled exceptions. See XmlRpc.default_error_handler and XmlRpc.quiet_error_handler for examples.
method serve : (string -> XmlRpc.value list -> XmlRpc.value) -> string -> string
For use in subclasses; calls XmlRpc.serve with the current encoders, decoders, and error handler.
method serve_message : (string -> XmlRpc.value list -> XmlRpc.value) ->
XmlRpc.message -> XmlRpc.message
Like serve, but operates on messages instead of strings.
method register : string ->
?help:string ->
?signature:param_type list ->
?signatures:param_type list list ->
(XmlRpc.value list -> XmlRpc.value) -> unit
Registers a method with the server.

If a help string is specified, its contents will be returned for calls to system.methodHelp for this method.

If signature is specified, this method's signature will be published by system.methodSignature and (shallow) type-checking will be enabled for parameters passed into this method.

Multiple signatures can be supplied via signatures if desired to provide for overloaded methods.

Signatures are of the form return-type; param1-type; param2-type; ... where each type is an instance of the XmlRpcServer.param_type variant.

method unregister : string -> unit
Removes a method from the server.
method virtual run : unit -> unit
Starts the main server process.
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index.html0000664000175000017500000000411411140336574021244 0ustar ramenramen

Index of types
Index of exceptions
Index of values
Index of class attributes
Index of class methods
Index of classes
Index of class types
Index of modules


XmlRpc
XmlRpc Light.
XmlRpcServer
XmlRpc Light server.
XmlRpcDateTime
Date/time type.
XmlRpcBase64
Base64 codec.
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpcServer.netplex.html0000664000175000017500000000340111140336574024205 0ustar ramenramen XmlRpcServer.netplex

Class XmlRpcServer.netplex


class netplex : ?parallelizer:Netplex_types.parallelizer -> ?handler:string -> unit -> server
Stand-alone XmlRpc server based on Netplex.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/index_exceptions.html0000664000175000017500000000436011140336574023510 0ustar ramenramen Index of exceptions

Index of exceptions


E
Error [XmlRpc]
Raised for all errors including XmlRpc faults (code, string).

I
Invalid_char [XmlRpcBase64]
This exception is raised when reading an invalid character from a base64 input.
Invalid_table [XmlRpcBase64]
This exception is raised if the encoding or decoding table size is not correct.

P
Parse_error [XmlRpcDateTime]
Raised by XmlRpcDateTime.of_string if a string could not be parsed.

xmlrpc-light-0.6.1/doc/xmlrpc-light/html/XmlRpcBase64.html0000664000175000017500000001033211140336574022306 0ustar ramenramen XmlRpcBase64

Module XmlRpcBase64


module XmlRpcBase64: sig .. end
Base64 codec.

8-bit characters are encoded into 6-bit ones using ASCII lookup tables. Default tables maps 0..63 values on characters A-Z, a-z, 0-9, '+' and '/' (in that order).


exception Invalid_char
This exception is raised when reading an invalid character from a base64 input.
exception Invalid_table
This exception is raised if the encoding or decoding table size is not correct.
type encoding_table = char array 
An encoding table maps integers 0..63 to the corresponding char.
type decoding_table = int array 
A decoding table maps chars 0..255 to the corresponding 0..63 value or -1 if the char is not accepted.
val str_encode : ?tbl:encoding_table -> string -> string
Encode a string into Base64.
val str_decode : ?tbl:decoding_table -> string -> string
Decode a string encoded into Base64, raise Invalid_char if a character in the input string is not a valid one.
val encode : ?tbl:encoding_table -> char Stream.t -> char Stream.t
Generic base64 encoding over a character stream.
val decode : ?tbl:decoding_table -> char Stream.t -> char Stream.t
Generic base64 decoding over a character stream.
val make_decoding_table : encoding_table -> decoding_table
Create a valid decoding table from an encoding one.
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpcBase64.html0000664000175000017500000000604711140336574023357 0ustar ramenramen XmlRpcBase64 sig
  exception Invalid_char
  exception Invalid_table
  type encoding_table = char array
  type decoding_table = int array
  val str_encode : ?tbl:XmlRpcBase64.encoding_table -> string -> string
  val str_decode : ?tbl:XmlRpcBase64.decoding_table -> string -> string
  val encode :
    ?tbl:XmlRpcBase64.encoding_table -> char Stream.t -> char Stream.t
  val decode :
    ?tbl:XmlRpcBase64.decoding_table -> char Stream.t -> char Stream.t
  val make_decoding_table :
    XmlRpcBase64.encoding_table -> XmlRpcBase64.decoding_table
end
xmlrpc-light-0.6.1/doc/xmlrpc-light/html/type_XmlRpcServer.netplex.html0000664000175000017500000000261111140336574025250 0ustar ramenramen XmlRpcServer.netplex ?parallelizer:Netplex_types.parallelizer ->
?handler:string -> unit -> XmlRpcServer.server
xmlrpc-light-0.6.1/doc/xmlrpc-light/latex/0000775000175000017500000000000011140336623017413 5ustar ramenramenxmlrpc-light-0.6.1/doc/xmlrpc-light/latex/ocamldoc.sty0000664000175000017500000000377411140336574021755 0ustar ramenramen %% Support macros for LaTeX documentation generated by ocamldoc. %% This file is in the public domain; do what you want with it. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ocamldoc} [2001/12/04 v1.0 ocamldoc support] \newenvironment{ocamldoccode}{% \bgroup \leftskip\@totalleftmargin \rightskip\z@skip \parindent\z@ \parfillskip\@flushglue \parskip\z@skip %\noindent \@@par\smallskip \@tempswafalse \def\par{% \if@tempswa \leavevmode\null\@@par\penalty\interlinepenalty \else \@tempswatrue \ifhmode\@@par\penalty\interlinepenalty\fi \fi} \obeylines \verbatim@font \let\org@prime~% \@noligs \let\org@dospecials\dospecials \g@remfrom@specials{\\} \g@remfrom@specials{\{} \g@remfrom@specials{\}} \let\do\@makeother \dospecials \let\dospecials\org@dospecials \frenchspacing\@vobeyspaces \everypar \expandafter{\the\everypar \unpenalty}} {\egroup\par} \def\g@remfrom@specials#1{% \def\@new@specials{} \def\@remove##1{% \ifx##1#1\else \g@addto@macro\@new@specials{\do ##1}\fi} \let\do\@remove\dospecials \let\dospecials\@new@specials } \newenvironment{ocamldocdescription} {\list{}{\rightmargin0pt \topsep0pt}\raggedright\item\noindent\relax\ignorespaces} {\endlist\medskip} \newenvironment{ocamldoccomment} {\list{}{\leftmargin 2\leftmargini \rightmargin0pt \topsep0pt}\raggedright\item\noindent\relax} {\endlist} \let \ocamldocparagraph \paragraph \def \paragraph #1{\ocamldocparagraph {#1}\noindent} \let \ocamldocsubparagraph \subparagraph \def \subparagraph #1{\ocamldocsubparagraph {#1}\noindent} \let\ocamldocvspace\vspace \newenvironment{ocamldocindent}{\list{}{}\item\relax}{\endlist} \newenvironment{ocamldocsigend} {\noindent\quad\texttt{sig}\ocamldocindent} {\endocamldocindent\vskip -\lastskip \noindent\quad\texttt{end}\medskip} \newenvironment{ocamldocobjectend} {\noindent\quad\texttt{object}\ocamldocindent} {\endocamldocindent\vskip -\lastskip \noindent\quad\texttt{end}\medskip} \endinput xmlrpc-light-0.6.1/doc/xmlrpc-light/latex/doc.aux0000664000175000017500000001635211140336574020713 0ustar ramenramen\relax \@writefile{toc}{\contentsline {section}{\numberline {1}Module {\tt {XmlRpc}} : XmlRpc Light.}{1}} \newlabel{module:XmlRpc}{{1}{1}} \newlabel{val:XmlRpc.version}{{1}{1}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.1}High-level interface}{1}} \newlabel{exception:XmlRpc.Error}{{1.1}{1}} \newlabel{type:XmlRpc.value}{{1.1}{2}} \newlabel{class:XmlRpc.client}{{1.1}{2}} \newlabel{val:XmlRpc.client.url}{{1.1}{2}} \newlabel{val:XmlRpc.client.debug}{{1.1}{2}} \newlabel{val:XmlRpc.client.headers}{{1.1}{2}} \newlabel{val:XmlRpc.client.insecure-underscoressl}{{1.1}{2}} \newlabel{val:XmlRpc.client.timeout}{{1.1}{2}} \newlabel{val:XmlRpc.client.useragent}{{1.1}{3}} \newlabel{method:XmlRpc.client.url}{{1.1}{3}} \newlabel{method:XmlRpc.client.debug}{{1.1}{3}} \newlabel{method:XmlRpc.client.set-underscoredebug}{{1.1}{3}} \newlabel{method:XmlRpc.client.headers}{{1.1}{3}} \newlabel{method:XmlRpc.client.set-underscoreheaders}{{1.1}{3}} \newlabel{method:XmlRpc.client.insecure-underscoressl}{{1.1}{3}} \newlabel{method:XmlRpc.client.set-underscoreinsecure-underscoressl}{{1.1}{3}} \newlabel{method:XmlRpc.client.timeout}{{1.1}{3}} \newlabel{method:XmlRpc.client.set-underscoretimeout}{{1.1}{3}} \newlabel{method:XmlRpc.client.useragent}{{1.1}{3}} \newlabel{method:XmlRpc.client.set-underscoreuseragent}{{1.1}{3}} \newlabel{method:XmlRpc.client.set-underscorebase64-underscoreencoder}{{1.1}{3}} \newlabel{method:XmlRpc.client.set-underscorebase64-underscoredecoder}{{1.1}{4}} \newlabel{method:XmlRpc.client.set-underscoredatetime-underscoreencoder}{{1.1}{4}} \newlabel{method:XmlRpc.client.set-underscoredatetime-underscoredecoder}{{1.1}{4}} \newlabel{method:XmlRpc.client.call}{{1.1}{4}} \newlabel{class:XmlRpc.multicall}{{1.1}{4}} \newlabel{method:XmlRpc.multicall.call}{{1.1}{4}} \newlabel{method:XmlRpc.multicall.execute}{{1.1}{4}} \newlabel{method:XmlRpc.multicall.result}{{1.1}{4}} \newlabel{method:XmlRpc.multicall.executed}{{1.1}{5}} \newlabel{method:XmlRpc.multicall.completed}{{1.1}{5}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Utility functions}{6}} \newlabel{val:XmlRpc.dump}{{1.2}{6}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Low-level interface}{6}} \newlabel{type:XmlRpc.message}{{1.3}{6}} \newlabel{val:XmlRpc.message-underscoreof-underscorexml-underscoreelement}{{1.3}{7}} \newlabel{val:XmlRpc.xml-underscoreelement-underscoreof-underscoremessage}{{1.3}{7}} \newlabel{val:XmlRpc.value-underscoreof-underscorexml-underscoreelement}{{1.3}{7}} \newlabel{val:XmlRpc.xml-underscoreelement-underscoreof-underscorevalue}{{1.3}{7}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.4}Server tools}{7}} \newlabel{val:XmlRpc.serve}{{1.4}{7}} \newlabel{val:XmlRpc.serve-underscoremessage}{{1.4}{8}} \newlabel{val:XmlRpc.default-underscoreerror-underscorehandler}{{1.4}{8}} \newlabel{val:XmlRpc.quiet-underscoreerror-underscorehandler}{{1.4}{8}} \@writefile{toc}{\contentsline {section}{\numberline {2}Module {\tt {XmlRpcServer}} : XmlRpc Light server.}{8}} \newlabel{module:XmlRpcServer}{{2}{8}} \newlabel{type:XmlRpcServer.param-underscoretype}{{2}{8}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Base classes}{9}} \newlabel{class:XmlRpcServer.base}{{2.1}{9}} \newlabel{val:XmlRpcServer.base.methods}{{2.1}{9}} \newlabel{val:XmlRpcServer.base.base64-underscoreencoder}{{2.1}{9}} \newlabel{val:XmlRpcServer.base.base64-underscoredecoder}{{2.1}{9}} \newlabel{val:XmlRpcServer.base.datetime-underscoreencoder}{{2.1}{9}} \newlabel{val:XmlRpcServer.base.datetime-underscoredecoder}{{2.1}{9}} \newlabel{val:XmlRpcServer.base.error-underscorehandler}{{2.1}{9}} \newlabel{method:XmlRpcServer.base.set-underscorebase64-underscoreencoder}{{2.1}{9}} \newlabel{method:XmlRpcServer.base.set-underscorebase64-underscoredecoder}{{2.1}{9}} \newlabel{method:XmlRpcServer.base.set-underscoredatetime-underscoreencoder}{{2.1}{9}} \newlabel{method:XmlRpcServer.base.set-underscoredatetime-underscoredecoder}{{2.1}{9}} \newlabel{method:XmlRpcServer.base.set-underscoreerror-underscorehandler}{{2.1}{9}} \newlabel{method:XmlRpcServer.base.serve}{{2.1}{9}} \newlabel{method:XmlRpcServer.base.serve-underscoremessage}{{2.1}{10}} \newlabel{method:XmlRpcServer.base.register}{{2.1}{10}} \newlabel{method:XmlRpcServer.base.unregister}{{2.1}{10}} \newlabel{method:XmlRpcServer.base.run}{{2.1}{10}} \newlabel{classtype:XmlRpcServer.server}{{2.1}{10}} \newlabel{method:XmlRpcServer.server.run}{{2.1}{10}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Server implementations}{11}} \newlabel{class:XmlRpcServer.cgi}{{2.2}{11}} \newlabel{class:XmlRpcServer.netplex}{{2.2}{11}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Utility functions}{11}} \newlabel{val:XmlRpcServer.invalid-underscoremethod}{{2.3}{11}} \newlabel{val:XmlRpcServer.invalid-underscoreparams}{{2.3}{11}} \@writefile{toc}{\contentsline {section}{\numberline {3}Module {\tt {XmlRpcDateTime}} : Date/time type.}{11}} \newlabel{module:XmlRpcDateTime}{{3}{11}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Types}{11}} \newlabel{exception:XmlRpcDateTime.Parse-underscoreerror}{{3.1}{11}} \newlabel{type:XmlRpcDateTime.t}{{3.1}{11}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Comparison}{11}} \newlabel{val:XmlRpcDateTime.compare}{{3.2}{11}} \newlabel{val:XmlRpcDateTime.equal}{{3.2}{11}} \newlabel{val:XmlRpcDateTime.hash}{{3.2}{11}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Current date and time}{12}} \newlabel{val:XmlRpcDateTime.now}{{3.3}{12}} \newlabel{val:XmlRpcDateTime.now-underscoreutc}{{3.3}{12}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Time zone adjustments}{12}} \newlabel{val:XmlRpcDateTime.set-underscoretz-underscoreoffset}{{3.4}{12}} \newlabel{val:XmlRpcDateTime.fix-underscoretz-underscoreoffset}{{3.4}{12}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Conversion}{12}} \newlabel{val:XmlRpcDateTime.from-underscoreunixfloat}{{3.5}{12}} \newlabel{val:XmlRpcDateTime.from-underscoreunixfloat-underscoreutc}{{3.5}{12}} \newlabel{val:XmlRpcDateTime.to-underscoreunixfloat}{{3.5}{12}} \newlabel{val:XmlRpcDateTime.to-underscoreunixfloat-underscoreutc}{{3.5}{12}} \newlabel{val:XmlRpcDateTime.from-underscoreunixtm}{{3.5}{12}} \newlabel{val:XmlRpcDateTime.from-underscoreunixtm-underscoreutc}{{3.5}{12}} \newlabel{val:XmlRpcDateTime.to-underscoreunixtm}{{3.5}{12}} \newlabel{val:XmlRpcDateTime.to-underscoreunixtm-underscoreutc}{{3.5}{12}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.6}ISO-8601 parsing and generation}{13}} \newlabel{val:XmlRpcDateTime.of-underscorestring}{{3.6}{13}} \newlabel{val:XmlRpcDateTime.to-underscorestring}{{3.6}{13}} \@writefile{toc}{\contentsline {section}{\numberline {4}Module {\tt {XmlRpcBase64}} : Base64 codec.}{13}} \newlabel{module:XmlRpcBase64}{{4}{13}} \newlabel{exception:XmlRpcBase64.Invalid-underscorechar}{{4}{13}} \newlabel{exception:XmlRpcBase64.Invalid-underscoretable}{{4}{13}} \newlabel{type:XmlRpcBase64.encoding-underscoretable}{{4}{13}} \newlabel{type:XmlRpcBase64.decoding-underscoretable}{{4}{13}} \newlabel{val:XmlRpcBase64.str-underscoreencode}{{4}{13}} \newlabel{val:XmlRpcBase64.str-underscoredecode}{{4}{13}} \newlabel{val:XmlRpcBase64.encode}{{4}{13}} \newlabel{val:XmlRpcBase64.decode}{{4}{13}} \newlabel{val:XmlRpcBase64.make-underscoredecoding-underscoretable}{{4}{13}} xmlrpc-light-0.6.1/doc/xmlrpc-light/latex/doc.tex0000664000175000017500000011346311140336574020717 0ustar ramenramen\documentclass[11pt]{article} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage{fullpage} \usepackage{url} \usepackage{ocamldoc} \begin{document} \tableofcontents \section{Module {\tt{XmlRpc}} : XmlRpc Light.} \label{module:XmlRpc}\index{XmlRpc@\verb`XmlRpc`} XmlRpc Light is a minimal XmlRpc library based on Xml Light and Ocamlnet. It provides a type for values, a client class with a simple calling interface, and low-level tools that can be used to implement a server. {\it (c) 2007-2009 Dave Benjamin} \ocamldocvspace{0.5cm} \label{val:XmlRpc.version}\begin{ocamldoccode} val version : string \end{ocamldoccode} \index{version@\verb`version`} \begin{ocamldocdescription} Version of XmlRpc-Light as a string. \end{ocamldocdescription} \subsection{High-level interface} Example: \begin{ocamldoccode} let rpc = new XmlRpc.client "http://localhost:8000" in let result = rpc#call "echo" [`String "hello!"] in print_endline (XmlRpc.dump result) \end{ocamldoccode} \label{exception:XmlRpc.Error}\begin{ocamldoccode} exception Error of (int * string) \end{ocamldoccode} \index{Error@\verb`Error`} \begin{ocamldocdescription} Raised for all errors including XmlRpc faults (code, string). \end{ocamldocdescription} \label{type:XmlRpc.value}\begin{ocamldoccode} type value = [ `Array of value list | `Binary of string | `Boolean of bool | `DateTime of XmlRpcDateTime.t | `Double of float | `Int of int | `Int32 of int32 | `Nil | `String of string | `Struct of (string * value) list ] \end{ocamldoccode} \index{value@\verb`value`} \begin{ocamldocdescription} Polymorphic variant type for XmlRpc values:\begin{itemize} \item {\tt{`Array}}: An ordered list of values \item {\tt{`Binary}}: A string containing binary data \item {\tt{`Boolean}}: A boolean \item {\tt{`DateTime}}: A date/time value \item {\tt{`Double}}: A floating-point value \item {\tt{`Int}}: An integer \item {\tt{`Int32}}: A 32-bit integer \item {\tt{`Nil}}: A null value \item {\tt{`String}}: A string \item {\tt{`Struct}}: An association list of (name, value) pairs \end{itemize} Note that base64-encoding of {\tt{`Binary}} values is done automatically. You do not need to do the encoding yourself. \end{ocamldocdescription} \begin{ocamldoccode} {\tt{class client : }}{\tt{?debug:bool -> ?headers:(string * string) list -> ?insecure\_ssl:bool -> ?timeout:float -> ?useragent:string -> string -> }}\end{ocamldoccode} \label{class:XmlRpc.client}\index{client@\verb`client`} \begin{ocamldocobjectend} \label{val:XmlRpc.client.url}\begin{ocamldoccode} val url : string \end{ocamldoccode} \index{url@\verb`url`} \begin{ocamldocdescription} Url of the remote XmlRpc server. \end{ocamldocdescription} \label{val:XmlRpc.client.debug}\begin{ocamldoccode} val mutable debug : bool \end{ocamldoccode} \index{debug@\verb`debug`} \begin{ocamldocdescription} If true, Xml messages will be printed to standard error. \end{ocamldocdescription} \label{val:XmlRpc.client.headers}\begin{ocamldoccode} val mutable headers : (string * string) list \end{ocamldoccode} \index{headers@\verb`headers`} \begin{ocamldocdescription} List of custom HTTP headers to send with each request. \end{ocamldocdescription} \label{val:XmlRpc.client.insecure-underscoressl}\begin{ocamldoccode} val mutable insecure_ssl : bool \end{ocamldoccode} \index{insecure-underscoressl@\verb`insecure_ssl`} \begin{ocamldocdescription} If true, SSL will be allowed even if the certificate is self-signed. \end{ocamldocdescription} \label{val:XmlRpc.client.timeout}\begin{ocamldoccode} val mutable timeout : float \end{ocamldoccode} \index{timeout@\verb`timeout`} \begin{ocamldocdescription} Maximum time to wait for a request to complete, in seconds. \end{ocamldocdescription} \label{val:XmlRpc.client.useragent}\begin{ocamldoccode} val mutable useragent : string \end{ocamldoccode} \index{useragent@\verb`useragent`} \begin{ocamldocdescription} User-agent to send in request headers. \end{ocamldocdescription} \label{method:XmlRpc.client.url}\begin{ocamldoccode} method url : string \end{ocamldoccode} \index{url@\verb`url`} \begin{ocamldocdescription} Gets {\tt{url}}. \end{ocamldocdescription} \label{method:XmlRpc.client.debug}\begin{ocamldoccode} method debug : bool \end{ocamldoccode} \index{debug@\verb`debug`} \begin{ocamldocdescription} Gets {\tt{debug}}. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscoredebug}\begin{ocamldoccode} method set_debug : bool -> unit \end{ocamldoccode} \index{set-underscoredebug@\verb`set_debug`} \begin{ocamldocdescription} Sets {\tt{debug}}. \end{ocamldocdescription} \label{method:XmlRpc.client.headers}\begin{ocamldoccode} method headers : (string * string) list \end{ocamldoccode} \index{headers@\verb`headers`} \begin{ocamldocdescription} Gets {\tt{headers}}. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscoreheaders}\begin{ocamldoccode} method set_headers : (string * string) list -> unit \end{ocamldoccode} \index{set-underscoreheaders@\verb`set_headers`} \begin{ocamldocdescription} Sets {\tt{headers}}. \end{ocamldocdescription} \label{method:XmlRpc.client.insecure-underscoressl}\begin{ocamldoccode} method insecure_ssl : bool \end{ocamldoccode} \index{insecure-underscoressl@\verb`insecure_ssl`} \begin{ocamldocdescription} Gets {\tt{insecure\_ssl}}. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscoreinsecure-underscoressl}\begin{ocamldoccode} method set_insecure_ssl : bool -> unit \end{ocamldoccode} \index{set-underscoreinsecure-underscoressl@\verb`set_insecure_ssl`} \begin{ocamldocdescription} Sets {\tt{insecure\_ssl}}. \end{ocamldocdescription} \label{method:XmlRpc.client.timeout}\begin{ocamldoccode} method timeout : float \end{ocamldoccode} \index{timeout@\verb`timeout`} \begin{ocamldocdescription} Gets {\tt{timeout}}. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscoretimeout}\begin{ocamldoccode} method set_timeout : float -> unit \end{ocamldoccode} \index{set-underscoretimeout@\verb`set_timeout`} \begin{ocamldocdescription} Sets {\tt{timeout}}. \end{ocamldocdescription} \label{method:XmlRpc.client.useragent}\begin{ocamldoccode} method useragent : string \end{ocamldoccode} \index{useragent@\verb`useragent`} \begin{ocamldocdescription} Gets {\tt{useragent}}. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscoreuseragent}\begin{ocamldoccode} method set_useragent : string -> unit \end{ocamldoccode} \index{set-underscoreuseragent@\verb`set_useragent`} \begin{ocamldocdescription} Sets {\tt{useragent}}. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscorebase64-underscoreencoder}\begin{ocamldoccode} method set_base64_encoder : (string -> string) -> unit \end{ocamldoccode} \index{set-underscorebase64-underscoreencoder@\verb`set_base64_encoder`} \begin{ocamldocdescription} Sets an alternate Base-64 binary encoding function. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscorebase64-underscoredecoder}\begin{ocamldoccode} method set_base64_decoder : (string -> string) -> unit \end{ocamldoccode} \index{set-underscorebase64-underscoredecoder@\verb`set_base64_decoder`} \begin{ocamldocdescription} Sets an alternate Base-64 binary decoding function. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscoredatetime-underscoreencoder}\begin{ocamldoccode} method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit \end{ocamldoccode} \index{set-underscoredatetime-underscoreencoder@\verb`set_datetime_encoder`} \begin{ocamldocdescription} Sets an alternate ISO-8601 date/time encoding function. \end{ocamldocdescription} \label{method:XmlRpc.client.set-underscoredatetime-underscoredecoder}\begin{ocamldoccode} method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit \end{ocamldoccode} \index{set-underscoredatetime-underscoredecoder@\verb`set_datetime_decoder`} \begin{ocamldocdescription} Sets an alternate ISO-8601 date/time decoding function. \end{ocamldocdescription} \label{method:XmlRpc.client.call}\begin{ocamldoccode} method call : string -> XmlRpc.value list -> XmlRpc.value \end{ocamldoccode} \index{call@\verb`call`} \begin{ocamldocdescription} {\tt{call name params}} invokes an XmlRpc method and returns the result, or raises {\tt{XmlRpc.Error}}[\ref{exception:XmlRpc.Error}] on error. \end{ocamldocdescription} \end{ocamldocobjectend} \begin{ocamldocdescription} Class for XmlRpc clients. Takes a single mandatory argument, {\tt{url}}. If {\tt{url}} is of the form "http://username:password@$\ldots$", basic authentication will be used. If {\tt{url}} starts with "https", Curl will be used instead of Ocamlnet. The "curl" command-line program must be in your path for this to work. You can use the {\tt{insecure\_ssl}} setting to allow connections to servers with self-signed certificates; by default this is false and certificates must be valid. {\tt{timeout}} can be used to specify the maximum amount of time elapsed before a connection is cancelled. It defaults to 300.0 seconds. {\tt{headers}} may contain an array of (name, value) pairs of additional headers to send with each request. The {\tt{useragent}} setting provides a convenient way to change the User-Agent header, which defaults to "XmlRpc-Light/$<$version$>$". The {\tt{debug}} setting, if true, will enable verbose debugging output to the standard error stream. \end{ocamldocdescription} \begin{ocamldoccode} {\tt{class multicall : }}{\tt{client -> }}\end{ocamldoccode} \label{class:XmlRpc.multicall}\index{multicall@\verb`multicall`} \begin{ocamldocobjectend} \label{method:XmlRpc.multicall.call}\begin{ocamldoccode} method call : string -> XmlRpc.value list -> XmlRpc.value Lazy.t \end{ocamldoccode} \index{call@\verb`call`} \begin{ocamldocdescription} Adds a call to this {\tt{multicall}} instance. If the call has already executed, the following exception will be raised: Failure "multicall\verb`#`call: already executed". \end{ocamldocdescription} \label{method:XmlRpc.multicall.execute}\begin{ocamldoccode} method execute : unit -> unit \end{ocamldoccode} \index{execute@\verb`execute`} \begin{ocamldocdescription} Forces the call to execute immediately. If the call has already executed and completed successfully, the following exception will be raised: Failure "multicall\verb`#`execute: already completed". \end{ocamldocdescription} \label{method:XmlRpc.multicall.result}\begin{ocamldoccode} method result : int -> XmlRpc.value \end{ocamldoccode} \index{result@\verb`result`} \begin{ocamldocdescription} Returns a {\tt{multicall}} result, executing the call if necessary. The results are numbered starting with zero. \end{ocamldocdescription} \label{method:XmlRpc.multicall.executed}\begin{ocamldoccode} method executed : bool \end{ocamldoccode} \index{executed@\verb`executed`} \begin{ocamldocdescription} True if the call has executed, whether or not it succeeded. \end{ocamldocdescription} \label{method:XmlRpc.multicall.completed}\begin{ocamldoccode} method completed : bool \end{ocamldoccode} \index{completed@\verb`completed`} \begin{ocamldocdescription} True of the call has executed and completed successfully. \end{ocamldocdescription} \end{ocamldocobjectend} \begin{ocamldocdescription} Convenience class for {\tt{system.multicall}} calls. Instances take an {\tt{XmlRpc.client}}[\ref{class:XmlRpc.client}] as an argument: \begin{ocamldoccode} # let mc = new XmlRpc.multicall client;; val mc : XmlRpc.multicall = \end{ocamldoccode} The "call" method works like {\tt{client\verb`#`call}}, but it returns a lazy value: \begin{ocamldoccode} # let a = mc#call "demo.addTwoNumbers" [`Int 3; `Int 4];; val a : XmlRpc.value Lazy.t = # let b = mc#call "demo.addTwoNumbers" [`Int 42; `String "oh noes!"];; val b : XmlRpc.value Lazy.t = # let c = mc#call "demo.addTwoNumbers" [`Double 3.0; `Double 4.0];; val c : XmlRpc.value Lazy.t = \end{ocamldoccode} At this point, the call has not been executed yet: \begin{ocamldoccode} # mc#executed;; -- : bool = false \end{ocamldoccode} As soon as one of the return values is forced, the call is executed: \begin{ocamldoccode} # Lazy.force a;; -- : XmlRpc.value = `Int 7 # mc#executed;; -- : bool = true \end{ocamldoccode} Once a call has been executed, this instance cannot be used to make any further calls; instead, a new {\tt{multicall}} instance must be created: \begin{ocamldoccode} # mc#call "demo.addTwoNumbers" [`Int 2; `Int 2];; Exception: Failure "multicall#call: already executed". \end{ocamldoccode} If an XmlRpc fault occurred, the exception will be thrown when the lazy value is forced: \begin{ocamldoccode} # Lazy.force b;; Exception: XmlRpc.Error (-32602, "server error. invalid method parameters"). \end{ocamldoccode} This will not prevent further methods from executing successfully: \begin{ocamldoccode} # Lazy.force c;; -- : XmlRpc.value = `Double 7. \end{ocamldoccode} It is possible for a {\tt{multicall}} to be executed but not completed, for example if a transport error occurs. Aside from catching the exception, the {\tt{completed}} property indicates if the call actually went through or not: \begin{ocamldoccode} # mc#completed;; -- : bool = true \end{ocamldoccode} It is not necessary to use lazy values. Instead, the call can be executed explicitly, and the results can be retrieved by number: \begin{ocamldoccode} # let mc = new XmlRpc.multicall client;; val mc : XmlRpc.multicall = # ignore (mc#call "demo.addTwoNumbers" [`Int 2; `Int 2]);; -- : unit = () # ignore (mc#call "demo.addTwoNumbers" [`Int 3; `Int 3]);; -- : unit = () # mc#result 1;; -- : XmlRpc.value = `Int 6 \end{ocamldoccode} \end{ocamldocdescription} \subsection{Utility functions} \label{val:XmlRpc.dump}\begin{ocamldoccode} val dump : value -> string \end{ocamldoccode} \index{dump@\verb`dump`} \begin{ocamldocdescription} Converts an XmlRpc value to a human-readable string. \end{ocamldocdescription} \subsection{Low-level interface} \label{type:XmlRpc.message}\begin{ocamldoccode} type message = | MethodCall of (string * value list) | MethodResponse of value | Fault of (int * string) \end{ocamldoccode} \index{message@\verb`message`} \begin{ocamldocdescription} Type for XmlRpc messages. \end{ocamldocdescription} \label{val:XmlRpc.message-underscoreof-underscorexml-underscoreelement}\begin{ocamldoccode} val message_of_xml_element : ?base64_decoder:(string -> string) -> ?datetime_decoder:(string -> XmlRpcDateTime.t) -> Xml.xml -> message \end{ocamldoccode} \index{message-underscoreof-underscorexml-underscoreelement@\verb`message_of_xml_element`} \begin{ocamldocdescription} Converts an Xml Light element to an XmlRpc message. \end{ocamldocdescription} \label{val:XmlRpc.xml-underscoreelement-underscoreof-underscoremessage}\begin{ocamldoccode} val xml_element_of_message : ?base64_encoder:(string -> string) -> ?datetime_encoder:(XmlRpcDateTime.t -> string) -> message -> Xml.xml \end{ocamldoccode} \index{xml-underscoreelement-underscoreof-underscoremessage@\verb`xml_element_of_message`} \begin{ocamldocdescription} Converts an XmlRpc message to an Xml Light element. \end{ocamldocdescription} \label{val:XmlRpc.value-underscoreof-underscorexml-underscoreelement}\begin{ocamldoccode} val value_of_xml_element : ?base64_decoder:(string -> string) -> ?datetime_decoder:(string -> XmlRpcDateTime.t) -> Xml.xml -> value \end{ocamldoccode} \index{value-underscoreof-underscorexml-underscoreelement@\verb`value_of_xml_element`} \begin{ocamldocdescription} Converts an Xml Light element to an XmlRpc value. \end{ocamldocdescription} \label{val:XmlRpc.xml-underscoreelement-underscoreof-underscorevalue}\begin{ocamldoccode} val xml_element_of_value : ?base64_encoder:(string -> string) -> ?datetime_encoder:(XmlRpcDateTime.t -> string) -> value -> Xml.xml \end{ocamldoccode} \index{xml-underscoreelement-underscoreof-underscorevalue@\verb`xml_element_of_value`} \begin{ocamldocdescription} Converts an XmlRpc value to an Xml Light element. \end{ocamldocdescription} \subsection{Server tools} \label{val:XmlRpc.serve}\begin{ocamldoccode} val serve : ?base64_encoder:(string -> string) -> ?base64_decoder:(string -> string) -> ?datetime_encoder:(XmlRpcDateTime.t -> string) -> ?datetime_decoder:(string -> XmlRpcDateTime.t) -> ?error_handler:(exn -> message) -> (string -> value list -> value) -> string -> string \end{ocamldoccode} \index{serve@\verb`serve`} \begin{ocamldocdescription} Creates a function from string (Xml representing a {\tt{MethodCall}}) to string (Xml representing a {\tt{MethodResult}} or {\tt{Fault}}) given a function of the form: ({\tt{name}} $\rightarrow$ {\tt{params}} $\rightarrow$ {\tt{result}}), where {\tt{name}} is the name of the method, {\tt{params}} is a list of parameter values, and {\tt{result}} is the result value. This function can be used to build many different kinds of XmlRpc servers since it makes no assumptions about the network library or other communications method used. If an exception other than {\tt{XmlRpc.Error}}[\ref{exception:XmlRpc.Error}] occurs, the exception is passed to {\tt{error\_handler}}. If {\tt{error\_handler}} returns a message, the message will be used as the result. If an {\tt{XmlRpc.Error}}[\ref{exception:XmlRpc.Error}] is raised by either the main function or {\tt{error\_handler}}, it will be converted to an XmlRpc {\tt{Fault}}. Any other exception raised by {\tt{error\_handler}} is allowed to escape. For a full-featured, easy-to-use, network-capable server implementation, see the {\tt{XmlRpcServer}}[\ref{module:XmlRpcServer}] module. \end{ocamldocdescription} \label{val:XmlRpc.serve-underscoremessage}\begin{ocamldoccode} val serve_message : ?error_handler:(exn -> message) -> (string -> value list -> value) -> message -> message \end{ocamldoccode} \index{serve-underscoremessage@\verb`serve_message`} \begin{ocamldocdescription} Performs the same function as {\tt{serve}}, but operates on typed messages instead of strings. \end{ocamldocdescription} \label{val:XmlRpc.default-underscoreerror-underscorehandler}\begin{ocamldoccode} val default_error_handler : exn -> message \end{ocamldoccode} \index{default-underscoreerror-underscorehandler@\verb`default_error_handler`} \begin{ocamldocdescription} The default error handler for {\tt{serve}}. This error handler catches all exceptions and converts them into faults by wrapping them in {\tt{XmlRpc.Error}}. \end{ocamldocdescription} \label{val:XmlRpc.quiet-underscoreerror-underscorehandler}\begin{ocamldoccode} val quiet_error_handler : exn -> message \end{ocamldoccode} \index{quiet-underscoreerror-underscorehandler@\verb`quiet_error_handler`} \begin{ocamldocdescription} A "quiet" error handler for {\tt{serve}}. This error handler simply re-raises the exception. Use this if you want exceptions to remain unhandled so that they will escape to the error log. The client will receive a generic "transport error", which is more secure since it does not reveal any information about the specific exception that occurred. \end{ocamldocdescription} \section{Module {\tt{XmlRpcServer}} : XmlRpc Light server.} \label{module:XmlRpcServer}\index{XmlRpcServer@\verb`XmlRpcServer`} \ocamldocvspace{0.5cm} Example: \begin{ocamldoccode} let server = new XmlRpcServer.cgi () in server#register "demo.sayHello" (fun _ -> `String "Hello!"); server#run () \end{ocamldoccode} By inheriting from {\tt{XmlRpcServer.base}}[\ref{class:XmlRpcServer.base}], all servers provide the following introspection functions by default: {\tt{system.listMethods}}, {\tt{system.getCapabilities}}. To prevent their use, use {\tt{server\verb`#`unregister}}. Additionally, the methods {\tt{system.methodHelp}} and {\tt{system.methodSignature}} will be made available if at least one method help or method signature is provided. \label{type:XmlRpcServer.param-underscoretype}\begin{ocamldoccode} type param_type = [ `Array | `Binary | `Boolean | `DateTime | `Double | `Int | `String | `Struct | `Undefined ] \end{ocamldoccode} \index{param-underscoretype@\verb`param_type`} \begin{ocamldocdescription} Type of parameters used in method signatures. \end{ocamldocdescription} \subsection{Base classes} \begin{ocamldoccode} {\tt{class virtual base : }}\end{ocamldoccode} \label{class:XmlRpcServer.base}\index{base@\verb`base`} \begin{ocamldocobjectend} \label{val:XmlRpcServer.base.methods}\begin{ocamldoccode} val methods : (string, XmlRpc.value list -> XmlRpc.value) Hashtbl.t \end{ocamldoccode} \index{methods@\verb`methods`} \begin{ocamldocdescription} Hashtable mapping method names to implementation functions. \end{ocamldocdescription} \label{val:XmlRpcServer.base.base64-underscoreencoder}\begin{ocamldoccode} val mutable base64_encoder : string -> string \end{ocamldoccode} \index{base64-underscoreencoder@\verb`base64_encoder`} \begin{ocamldocdescription} Base-64 binary encoding function. \end{ocamldocdescription} \label{val:XmlRpcServer.base.base64-underscoredecoder}\begin{ocamldoccode} val mutable base64_decoder : string -> string \end{ocamldoccode} \index{base64-underscoredecoder@\verb`base64_decoder`} \begin{ocamldocdescription} Base-64 binary decoding function. \end{ocamldocdescription} \label{val:XmlRpcServer.base.datetime-underscoreencoder}\begin{ocamldoccode} val mutable datetime_encoder : XmlRpcDateTime.t -> string \end{ocamldoccode} \index{datetime-underscoreencoder@\verb`datetime_encoder`} \begin{ocamldocdescription} ISO-8601 date/time encoding function. \end{ocamldocdescription} \label{val:XmlRpcServer.base.datetime-underscoredecoder}\begin{ocamldoccode} val mutable datetime_decoder : string -> XmlRpcDateTime.t \end{ocamldoccode} \index{datetime-underscoredecoder@\verb`datetime_decoder`} \begin{ocamldocdescription} ISO-8601 date/time decoding function. \end{ocamldocdescription} \label{val:XmlRpcServer.base.error-underscorehandler}\begin{ocamldoccode} val mutable error_handler : exn -> XmlRpc.message \end{ocamldoccode} \index{error-underscorehandler@\verb`error_handler`} \begin{ocamldocdescription} Handler for unhandled exceptions. \end{ocamldocdescription} \label{method:XmlRpcServer.base.set-underscorebase64-underscoreencoder}\begin{ocamldoccode} method set_base64_encoder : (string -> string) -> unit \end{ocamldoccode} \index{set-underscorebase64-underscoreencoder@\verb`set_base64_encoder`} \begin{ocamldocdescription} Sets an alternate Base-64 binary encoding function. \end{ocamldocdescription} \label{method:XmlRpcServer.base.set-underscorebase64-underscoredecoder}\begin{ocamldoccode} method set_base64_decoder : (string -> string) -> unit \end{ocamldoccode} \index{set-underscorebase64-underscoredecoder@\verb`set_base64_decoder`} \begin{ocamldocdescription} Sets an alternate Base-64 binary decoding function. \end{ocamldocdescription} \label{method:XmlRpcServer.base.set-underscoredatetime-underscoreencoder}\begin{ocamldoccode} method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit \end{ocamldoccode} \index{set-underscoredatetime-underscoreencoder@\verb`set_datetime_encoder`} \begin{ocamldocdescription} Sets an alternate ISO-8601 date/time encoding function. \end{ocamldocdescription} \label{method:XmlRpcServer.base.set-underscoredatetime-underscoredecoder}\begin{ocamldoccode} method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit \end{ocamldoccode} \index{set-underscoredatetime-underscoredecoder@\verb`set_datetime_decoder`} \begin{ocamldocdescription} Sets an alternate ISO-8601 date/time decoding function. \end{ocamldocdescription} \label{method:XmlRpcServer.base.set-underscoreerror-underscorehandler}\begin{ocamldoccode} method set_error_handler : (exn -> XmlRpc.message) -> unit \end{ocamldoccode} \index{set-underscoreerror-underscorehandler@\verb`set_error_handler`} \begin{ocamldocdescription} Sets an alternate handler for unhandled exceptions. See {\tt{XmlRpc.default\_error\_handler}}[\ref{val:XmlRpc.default-underscoreerror-underscorehandler}] and {\tt{XmlRpc.quiet\_error\_handler}}[\ref{val:XmlRpc.quiet-underscoreerror-underscorehandler}] for examples. \end{ocamldocdescription} \label{method:XmlRpcServer.base.serve}\begin{ocamldoccode} method serve : (string -> XmlRpc.value list -> XmlRpc.value) -> string -> string \end{ocamldoccode} \index{serve@\verb`serve`} \begin{ocamldocdescription} For use in subclasses; calls {\tt{XmlRpc.serve}}[\ref{val:XmlRpc.serve}] with the current encoders, decoders, and error handler. \end{ocamldocdescription} \label{method:XmlRpcServer.base.serve-underscoremessage}\begin{ocamldoccode} method serve_message : (string -> XmlRpc.value list -> XmlRpc.value) -> XmlRpc.message -> XmlRpc.message \end{ocamldoccode} \index{serve-underscoremessage@\verb`serve_message`} \begin{ocamldocdescription} Like {\tt{serve}}, but operates on messages instead of strings. \end{ocamldocdescription} \label{method:XmlRpcServer.base.register}\begin{ocamldoccode} method register : string -> ?help:string -> ?signature:XmlRpcServer.param_type list -> ?signatures:XmlRpcServer.param_type list list -> (XmlRpc.value list -> XmlRpc.value) -> unit \end{ocamldoccode} \index{register@\verb`register`} \begin{ocamldocdescription} Registers a method with the server. If a {\tt{help}} string is specified, its contents will be returned for calls to {\tt{system.methodHelp}} for this method. If {\tt{signature}} is specified, this method's signature will be published by {\tt{system.methodSignature}} and (shallow) type-checking will be enabled for parameters passed into this method. Multiple signatures can be supplied via {\tt{signatures}} if desired to provide for overloaded methods. Signatures are of the form {\tt{return-type; param1-type; param2-type; ...}} where each type is an instance of the {\tt{XmlRpcServer.param\_type}}[\ref{type:XmlRpcServer.param-underscoretype}] variant. \end{ocamldocdescription} \label{method:XmlRpcServer.base.unregister}\begin{ocamldoccode} method unregister : string -> unit \end{ocamldoccode} \index{unregister@\verb`unregister`} \begin{ocamldocdescription} Removes a method from the server. \end{ocamldocdescription} \label{method:XmlRpcServer.base.run}\begin{ocamldoccode} method virtual run : unit -> unit \end{ocamldoccode} \index{run@\verb`run`} \begin{ocamldocdescription} Starts the main server process. \end{ocamldocdescription} \end{ocamldocobjectend} \begin{ocamldocdescription} Abstract base class for XmlRpc servers. \end{ocamldocdescription} \begin{ocamldoccode} {\tt{class type server = }}\end{ocamldoccode} \label{classtype:XmlRpcServer.server}\index{server@\verb`server`} \begin{ocamldocobjectend} {\tt{inherit XmlRpcServer.base}} [\ref{class:XmlRpcServer.base}] \label{method:XmlRpcServer.server.run}\begin{ocamldoccode} method run : unit -> unit \end{ocamldoccode} \index{run@\verb`run`} \begin{ocamldocdescription} Starts the main server process. \end{ocamldocdescription} \end{ocamldocobjectend} \begin{ocamldocdescription} Type of concrete XmlRpc server classes. \end{ocamldocdescription} \subsection{Server implementations} \begin{ocamldoccode} {\tt{class cgi : }}{\tt{unit -> }}{\tt{server}}\end{ocamldoccode} \label{class:XmlRpcServer.cgi}\index{cgi@\verb`cgi`} \begin{ocamldocdescription} CGI XmlRpc server based on Netcgi2. \end{ocamldocdescription} \begin{ocamldoccode} {\tt{class netplex : }}{\tt{?parallelizer:Netplex\_types.parallelizer -> ?handler:string -> unit -> }}{\tt{server}}\end{ocamldoccode} \label{class:XmlRpcServer.netplex}\index{netplex@\verb`netplex`} \begin{ocamldocdescription} Stand-alone XmlRpc server based on Netplex. \end{ocamldocdescription} \subsection{Utility functions} \label{val:XmlRpcServer.invalid-underscoremethod}\begin{ocamldoccode} val invalid_method : string -> 'a \end{ocamldoccode} \index{invalid-underscoremethod@\verb`invalid_method`} \begin{ocamldocdescription} Raise an {\tt{XmlRpc.Error}}[\ref{exception:XmlRpc.Error}] indicating a method name not found. \end{ocamldocdescription} \label{val:XmlRpcServer.invalid-underscoreparams}\begin{ocamldoccode} val invalid_params : unit -> 'a \end{ocamldoccode} \index{invalid-underscoreparams@\verb`invalid_params`} \begin{ocamldocdescription} Raise an {\tt{XmlRpc.Error}}[\ref{exception:XmlRpc.Error}] indicating invalid method parameters. \end{ocamldocdescription} \section{Module {\tt{XmlRpcDateTime}} : Date/time type.} \label{module:XmlRpcDateTime}\index{XmlRpcDateTime@\verb`XmlRpcDateTime`} \ocamldocvspace{0.5cm} \subsection{Types} \label{exception:XmlRpcDateTime.Parse-underscoreerror}\begin{ocamldoccode} exception Parse_error of string \end{ocamldoccode} \index{Parse-underscoreerror@\verb`Parse_error`} \begin{ocamldocdescription} Raised by {\tt{XmlRpcDateTime.of\_string}}[\ref{val:XmlRpcDateTime.of-underscorestring}] if a string could not be parsed. The exception contains the input string. \end{ocamldocdescription} \label{type:XmlRpcDateTime.t}\begin{ocamldoccode} type t = int * int * int * int * int * int * int \end{ocamldoccode} \index{t@\verb`t`} \begin{ocamldocdescription} Type of XmlRpc-compatible date/time values. (year, month, day, hour, minute, second, time zone offset in minutes) \end{ocamldocdescription} \subsection{Comparison} \label{val:XmlRpcDateTime.compare}\begin{ocamldoccode} val compare : t -> t -> int \end{ocamldoccode} \index{compare@\verb`compare`} \begin{ocamldocdescription} Standard comparator for date/time values. Converts all values to UTC before comparing to ensure correct behavior with values of differing time zones. \end{ocamldocdescription} \label{val:XmlRpcDateTime.equal}\begin{ocamldoccode} val equal : t -> t -> bool \end{ocamldoccode} \index{equal@\verb`equal`} \begin{ocamldocdescription} Standard equality function for date/time values. Converts all values to UTC before comparing. \end{ocamldocdescription} \label{val:XmlRpcDateTime.hash}\begin{ocamldoccode} val hash : t -> int \end{ocamldoccode} \index{hash@\verb`hash`} \begin{ocamldocdescription} Standard hash function for date/time values. Converts values to UTC before hashing. \end{ocamldocdescription} \subsection{Current date and time} \label{val:XmlRpcDateTime.now}\begin{ocamldoccode} val now : unit -> t \end{ocamldoccode} \index{now@\verb`now`} \begin{ocamldocdescription} Returns the current date and time in the local time zone. \end{ocamldocdescription} \label{val:XmlRpcDateTime.now-underscoreutc}\begin{ocamldoccode} val now_utc : unit -> t \end{ocamldoccode} \index{now-underscoreutc@\verb`now_utc`} \begin{ocamldocdescription} Returns the current date and time in UTC. \end{ocamldocdescription} \subsection{Time zone adjustments} \label{val:XmlRpcDateTime.set-underscoretz-underscoreoffset}\begin{ocamldoccode} val set_tz_offset : int -> t -> t \end{ocamldoccode} \index{set-underscoretz-underscoreoffset@\verb`set_tz_offset`} \begin{ocamldocdescription} Adjusts the time zone offset, preserving equality. \end{ocamldocdescription} \label{val:XmlRpcDateTime.fix-underscoretz-underscoreoffset}\begin{ocamldoccode} val fix_tz_offset : int -> t -> t \end{ocamldoccode} \index{fix-underscoretz-underscoreoffset@\verb`fix_tz_offset`} \begin{ocamldocdescription} Forces the time zone offset to a different value, ignoring all other fields. Use this to correct the time zone of a date/time value that was received without a time zone offset and is known not to be UTC. \end{ocamldocdescription} \subsection{Conversion} \label{val:XmlRpcDateTime.from-underscoreunixfloat}\begin{ocamldoccode} val from_unixfloat : float -> t \end{ocamldoccode} \index{from-underscoreunixfloat@\verb`from_unixfloat`} \begin{ocamldocdescription} Builds a date/time value from epoch seconds in the local time zone. \end{ocamldocdescription} \label{val:XmlRpcDateTime.from-underscoreunixfloat-underscoreutc}\begin{ocamldoccode} val from_unixfloat_utc : float -> t \end{ocamldoccode} \index{from-underscoreunixfloat-underscoreutc@\verb`from_unixfloat_utc`} \begin{ocamldocdescription} Builds a date/time value from epoch seconds in UTC. \end{ocamldocdescription} \label{val:XmlRpcDateTime.to-underscoreunixfloat}\begin{ocamldoccode} val to_unixfloat : t -> float \end{ocamldoccode} \index{to-underscoreunixfloat@\verb`to_unixfloat`} \begin{ocamldocdescription} Converts a date/time value to epoch seconds in the local time zone. \end{ocamldocdescription} \label{val:XmlRpcDateTime.to-underscoreunixfloat-underscoreutc}\begin{ocamldoccode} val to_unixfloat_utc : t -> float \end{ocamldoccode} \index{to-underscoreunixfloat-underscoreutc@\verb`to_unixfloat_utc`} \begin{ocamldocdescription} Converts a date/time value to epoch seconds in UTC. \end{ocamldocdescription} \label{val:XmlRpcDateTime.from-underscoreunixtm}\begin{ocamldoccode} val from_unixtm : Unix.tm -> t \end{ocamldoccode} \index{from-underscoreunixtm@\verb`from_unixtm`} \begin{ocamldocdescription} Builds a date/time value from a Unix.tm value in the local time zone. \end{ocamldocdescription} \label{val:XmlRpcDateTime.from-underscoreunixtm-underscoreutc}\begin{ocamldoccode} val from_unixtm_utc : Unix.tm -> t \end{ocamldoccode} \index{from-underscoreunixtm-underscoreutc@\verb`from_unixtm_utc`} \begin{ocamldocdescription} Builds a date/time value from a Unix.tm value in UTC. \end{ocamldocdescription} \label{val:XmlRpcDateTime.to-underscoreunixtm}\begin{ocamldoccode} val to_unixtm : t -> Unix.tm \end{ocamldoccode} \index{to-underscoreunixtm@\verb`to_unixtm`} \begin{ocamldocdescription} Converts a date/time value to a Unix.tm value in the local time zone. \end{ocamldocdescription} \label{val:XmlRpcDateTime.to-underscoreunixtm-underscoreutc}\begin{ocamldoccode} val to_unixtm_utc : t -> Unix.tm \end{ocamldoccode} \index{to-underscoreunixtm-underscoreutc@\verb`to_unixtm_utc`} \begin{ocamldocdescription} Converts a date/time value to a Unix.tm value in UTC. \end{ocamldocdescription} \subsection{ISO-8601 parsing and generation} \label{val:XmlRpcDateTime.of-underscorestring}\begin{ocamldoccode} val of_string : string -> t \end{ocamldoccode} \index{of-underscorestring@\verb`of_string`} \begin{ocamldocdescription} Parses an (XmlRpc-flavor) ISO-8601 date/time value from a string. \end{ocamldocdescription} \label{val:XmlRpcDateTime.to-underscorestring}\begin{ocamldoccode} val to_string : t -> string \end{ocamldoccode} \index{to-underscorestring@\verb`to_string`} \begin{ocamldocdescription} Generates an ISO-8601 string from a date/time value. \end{ocamldocdescription} \section{Module {\tt{XmlRpcBase64}} : Base64 codec.} \label{module:XmlRpcBase64}\index{XmlRpcBase64@\verb`XmlRpcBase64`} 8-bit characters are encoded into 6-bit ones using ASCII lookup tables. Default tables maps 0..63 values on characters A-Z, a-z, 0-9, '+' and '/' (in that order). \ocamldocvspace{0.5cm} \label{exception:XmlRpcBase64.Invalid-underscorechar}\begin{ocamldoccode} exception Invalid_char \end{ocamldoccode} \index{Invalid-underscorechar@\verb`Invalid_char`} \begin{ocamldocdescription} This exception is raised when reading an invalid character from a base64 input. \end{ocamldocdescription} \label{exception:XmlRpcBase64.Invalid-underscoretable}\begin{ocamldoccode} exception Invalid_table \end{ocamldoccode} \index{Invalid-underscoretable@\verb`Invalid_table`} \begin{ocamldocdescription} This exception is raised if the encoding or decoding table size is not correct. \end{ocamldocdescription} \label{type:XmlRpcBase64.encoding-underscoretable}\begin{ocamldoccode} type encoding_table = char array \end{ocamldoccode} \index{encoding-underscoretable@\verb`encoding_table`} \begin{ocamldocdescription} An encoding table maps integers 0..63 to the corresponding char. \end{ocamldocdescription} \label{type:XmlRpcBase64.decoding-underscoretable}\begin{ocamldoccode} type decoding_table = int array \end{ocamldoccode} \index{decoding-underscoretable@\verb`decoding_table`} \begin{ocamldocdescription} A decoding table maps chars 0..255 to the corresponding 0..63 value or -1 if the char is not accepted. \end{ocamldocdescription} \label{val:XmlRpcBase64.str-underscoreencode}\begin{ocamldoccode} val str_encode : ?tbl:encoding_table -> string -> string \end{ocamldoccode} \index{str-underscoreencode@\verb`str_encode`} \begin{ocamldocdescription} Encode a string into Base64. \end{ocamldocdescription} \label{val:XmlRpcBase64.str-underscoredecode}\begin{ocamldoccode} val str_decode : ?tbl:decoding_table -> string -> string \end{ocamldoccode} \index{str-underscoredecode@\verb`str_decode`} \begin{ocamldocdescription} Decode a string encoded into Base64, raise {\tt{Invalid\_char}} if a character in the input string is not a valid one. \end{ocamldocdescription} \label{val:XmlRpcBase64.encode}\begin{ocamldoccode} val encode : ?tbl:encoding_table -> char Stream.t -> char Stream.t \end{ocamldoccode} \index{encode@\verb`encode`} \begin{ocamldocdescription} Generic base64 encoding over a character stream. \end{ocamldocdescription} \label{val:XmlRpcBase64.decode}\begin{ocamldoccode} val decode : ?tbl:decoding_table -> char Stream.t -> char Stream.t \end{ocamldoccode} \index{decode@\verb`decode`} \begin{ocamldocdescription} Generic base64 decoding over a character stream. \end{ocamldocdescription} \label{val:XmlRpcBase64.make-underscoredecoding-underscoretable}\begin{ocamldoccode} val make_decoding_table : encoding_table -> decoding_table \end{ocamldoccode} \index{make-underscoredecoding-underscoretable@\verb`make_decoding_table`} \begin{ocamldocdescription} Create a valid decoding table from an encoding one. \end{ocamldocdescription} \end{document}xmlrpc-light-0.6.1/doc/xmlrpc-light/latex/doc.log0000664000175000017500000001142511140336574020673 0ustar ramenramenThis is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=latex 2008.11.2) 19 JAN 2009 17:36 entering extended mode %&-line parsing enabled. **doc.tex (./doc.tex LaTeX2e <2005/12/01> Babel and hyphenation patterns for english, usenglishmax, dumylang, noh yphenation, croatian, ukrainian, russian, bulgarian, czech, slovak, danish, dut ch, finnish, basque, french, german, ngerman, ibycus, greek, monogreek, ancient greek, hungarian, italian, latin, mongolian, norsk, icelandic, interlingua, tur kish, coptic, romanian, welsh, serbian, slovenian, estonian, esperanto, upperso rbian, indonesian, polish, portuguese, spanish, catalan, galician, swedish, loa ded. (/usr/share/texmf-texlive/tex/latex/base/article.cls Document Class: article 2005/09/16 v1.4f Standard LaTeX document class (/usr/share/texmf-texlive/tex/latex/base/size11.clo File: size11.clo 2005/09/16 v1.4f Standard LaTeX file (size option) ) \c@part=\count79 \c@section=\count80 \c@subsection=\count81 \c@subsubsection=\count82 \c@paragraph=\count83 \c@subparagraph=\count84 \c@figure=\count85 \c@table=\count86 \abovecaptionskip=\skip41 \belowcaptionskip=\skip42 \bibindent=\dimen102 ) (/usr/share/texmf-texlive/tex/latex/base/inputenc.sty Package: inputenc 2006/05/05 v1.1b Input encoding file \inpenc@prehook=\toks14 \inpenc@posthook=\toks15 (/usr/share/texmf-texlive/tex/latex/base/latin1.def File: latin1.def 2006/05/05 v1.1b Input encoding file )) (/usr/share/texmf-texlive/tex/latex/base/fontenc.sty Package: fontenc 2005/09/27 v1.99g Standard LaTeX package (/usr/share/texmf-texlive/tex/latex/base/t1enc.def File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file LaTeX Font Info: Redeclaring font encoding T1 on input line 43. )) (/usr/share/texmf-texlive/tex/latex/preprint/fullpage.sty Package: fullpage 1999/02/23 1.1 (PWD) \FP@margin=\skip43 ) (/usr/share/texmf-texlive/tex/latex/ltxmisc/url.sty \Urlmuskip=\muskip10 Package: url 2005/06/27 ver 3.2 Verb mode for urls, etc. ) (./ocamldoc.sty Package: ocamldoc 2001/12/04 v1.0 ocamldoc support ) (./doc.aux) \openout1 = `doc.aux'. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 7. LaTeX Font Info: ... okay on input line 7. LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 7. LaTeX Font Info: ... okay on input line 7. LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 7. LaTeX Font Info: ... okay on input line 7. LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 7. LaTeX Font Info: ... okay on input line 7. LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 7. LaTeX Font Info: ... okay on input line 7. LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 7. LaTeX Font Info: ... okay on input line 7. (./doc.toc LaTeX Font Info: Try loading font information for T1+cmtt on input line 1. (/usr/share/texmf-texlive/tex/latex/base/t1cmtt.fd File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions ) LaTeX Font Info: External font `cmex10' loaded for size (Font) <10.95> on input line 2. LaTeX Font Info: External font `cmex10' loaded for size (Font) <8> on input line 2. LaTeX Font Info: External font `cmex10' loaded for size (Font) <6> on input line 2. ) \tf@toc=\write3 \openout3 = `doc.toc'. [1 ] LaTeX Font Info: Try loading font information for OMS+cmr on input line 85. (/usr/share/texmf-texlive/tex/latex/base/omscmr.fd File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions ) LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10.95> not available (Font) Font shape `OMS/cmsy/m/n' tried instead on input line 85. Overfull \hbox (294.12506pt too wide) in paragraph at lines 107--107 []\T1/cmtt/m/n/10.95 class client : ?debug:bool -> ?headers:(string * string) l ist -> ?insecure_ssl:bool -> ?timeout:float -> ?useragent:string -> string -> [] [2] [3] [4] [5] Overfull \hbox (32.9232pt too wide) in paragraph at lines 514--514 [] \T1/cmtt/m/n/10.95 Exception: XmlRpc.Error (-32602, "server error. i nvalid method parameters").[] [] [6] [7] [8] [9] [10] Overfull \hbox (56.47348pt too wide) in paragraph at lines 1081--1081 []\T1/cmtt/m/n/10.95 class netplex : ?parallelizer:Netplex_types.parallelizer - > ?handler:string -> unit -> server [] [11] [12] [13] (./doc.aux) LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. ) Here is how much of TeX's memory you used: 742 strings out of 94102 11159 string characters out of 1165833 53000 words of memory out of 1500000 4060 multiletter control sequences out of 10000+50000 12330 words of font info for 32 fonts, out of 1200000 for 2000 637 hyphenation exceptions out of 8191 22i,5n,20p,232b,304s stack positions out of 5000i,500n,6000p,200000b,5000s Output written on doc.dvi (13 pages, 30196 bytes). xmlrpc-light-0.6.1/doc/xmlrpc-light/latex/doc.dvi0000664000175000017500000007276411140336574020711 0ustar ramenramen÷ƒ’À;è TeX output 2009.01.19:1736‹ÿÿÿÿ Šn ýu‘ë ln ýž‘ëó&Lt$ffffecbx1440¼Con•cten“tsŽ©|æóíÄ]] ó3 ó3ecbx1095½1Ž‘TòMošXïdule–+¡óÚvªh ó3 ó3ectt1095¾XmlRpc“½:‘^XmlRp˜c“Ligh§t.’b@1ŽŽ¤ ™š‘Tòó$•Hd ó3 ó3ecrm1095º1.1Ž‘)_¼High-lev•² el‘¡kin“terface‘þ:‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘B£1ŽŽ¡‘Tò1.2Ž‘)_¼Utilit² y‘¡kfunctions‘ ‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘B£6ŽŽ¡‘Tò1.3Ž‘)_¼Lo•² w-lev“el‘¡kin“terface‘ÝØ‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘B£6ŽŽ¡‘Tò1.4Ž‘)_¼Serv² er‘¡ktoM_ols‘ž†‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘B£7ŽŽ¦½2Ž‘TòMošXïdule–+¡¾XmlRpcServer“½:‘^XmlRp˜c“Lighš§t“serv˜er.’Éc”8ŽŽ¡‘Tòº2.1Ž‘)_¼Base‘¡kclasses‘¯‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘B£8ŽŽ¡‘Tò2.2Ž‘)_¼Serv•² er‘¡kimplemen“tations‘zP‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘Ðý10ŽŽ¡‘Tò2.3Ž‘)_¼Utilit² y‘¡kfunctions‘ ‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘Ðý10ŽŽ¦½3Ž‘TòMošXïdule–+¡¾XmlRpcDateTime“½:‘^Date/time“t§yp˜e.’ÕýÙ11ŽŽ¡‘Tòº3.1Ž‘)_¼T² ypM_es‘Wô‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘Ðý11ŽŽ¡‘Tò3.2Ž‘)_¼Comparison‘¸Y‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘Ðý11ŽŽ¡‘Tò3.3Ž‘)_¼Curren² t–¡kdate“and“time‘Eµ‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘Ðý11ŽŽ¡‘Tò3.4Ž‘)_¼Time–¡kzone“adjustmen² ts‘Ó­‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘Ðý11ŽŽ¡‘Tò3.5Ž‘)_¼Con•² v“ersion‘@쑼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘Ðý12ŽŽ¡‘Tò3.6Ž‘)_¼ISO-8601–¡kparsing“and“generation‘8¶‘¼É.ŽŽ–€@‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ“‘¼É.ŽŽ‘Ðý12ŽŽ¦½4Ž‘TòMošXïdule–+¡¾XmlRpcBase64“½:‘^Base64“co˜dec.’íèA12ŽŽŸ"7¼1Ž‘ÁMošpœdule–G\óÄN½¿ffffectt1440ÇXmlRpc“¼:‘ ÐXmlRp˜c“Lighct.ŽŸpܺXmlRpšM_c–¡kLigh² t“is“a“minimal“XmlRp˜c“library“based“on“Xml“Ligh² t“and“Ocamlnet.Ž¡‘It–CÌproš² vides“a‘CËt˜ypM_e“for“v‘ÿeBalues,‘lda“clien˜t“class›CËwith“a“simple“calling˜inš² terface,‘ldand“lo˜w-lev˜el“toM_olsŽ¡that–¡kcan“bM_e“used“to“implemenš² t“a“serv˜er.Ž¡‘ó–¤ð ó3 ó3ecti1095È(c)–ã=2007-2009“Dave“BenjaminŽŸÓ¾val–¨‹version“:“stringޤ™š‘`ºV‘ÿãersion–¡kof“XmlRpM_c-Ligh² t“as“a“string.ŽŸ&QŽó¥!¢N ecbx1200Ê1.1Ž‘¾High-lev• el‘¸in“terfaceŽŸ«ºExample:Ž¡¤ ™š‘¢,¾let–¨‹rpc“=“new“XmlRpc.client“"http://localhost:8000"“inŽ¡‘¢,let–¨‹result“=“rpc#call“"echo"“[`String“"hello!"]“inŽ¡‘¢,print_endline–¨‹(XmlRpc.dump“result)ޤ™šexception–¨‹Error“of“(int“*“string)Ž¡‘`ºRaised–¡kfor“all“errors“including“XmlRpšM_c“faults“(co˜de,“string).ŽŽŸ’è'Ò1ŽŽŒ‹* Šn ýu‘ë ln ýž‘ë¾type–¨‹value“=“[“`Array“of“value“listޤ ™š‘ Q|–¨‹`Binary“of“stringŽ¡‘ Q|–¨‹`Boolean“of“boolŽ¡‘ Q|–¨‹`DateTime“of“XmlRpcDateTime.tŽ¡‘ Q|–¨‹`Double“of“floatŽ¡‘ Q|–¨‹`Int“of“intŽ¡‘ Q|–¨‹`Int32“of“int32Ž¡‘ Q|‘¨‹`NilŽ¡‘ Q|–¨‹`String“of“stringŽ¡‘ Q|–¨‹`Struct“of“(string“*“value)“list“]ŽŸ™š‘`ºP•² olymorphic›¡kv‘ÿeBarian“t˜t“yp•M_e˜for˜XmlRp“c˜v‘ÿeBalues:Ž©™š‘(ƒÜó!",š ó3 cmsy10ÄŽŽŽ‘3w¾`Arrayº:‘ÖçAn–¡kordered“list“of“v‘ÿeBaluesޤ™š‘(ƒÜÄŽŽŽ‘3w¾`Binaryº:‘ÖçA–¡kstring“con² taining“binary“dataŽ¡‘(ƒÜÄŽŽŽ‘3w¾`Booleanº:‘ÖçA‘¡kb•M_o“oleanŽ¡‘(ƒÜÄŽŽŽ‘3w¾`DateTimeº:‘ÖçA–¡kdate/time“v‘ÿeBalueŽ¡‘(ƒÜÄŽŽŽ‘3w¾`Doubleº:‘ÖçA–¡koating-pM_oin² t“v‘ÿeBalueŽ¡‘(ƒÜÄŽŽŽ‘3w¾`Intº:‘ÖçAn‘¡kin² tegerŽ¡‘(ƒÜÄŽŽŽ‘3w¾`Int32º:‘ÖçA–¡k32-bit“in² tegerŽ¡‘(ƒÜÄŽŽŽ‘3w¾`Nilº:‘ÖçA–¡kn² ull“v‘ÿeBalueŽ¡‘(ƒÜÄŽŽŽ‘3w¾`Stringº:‘ÖçA‘¡kstringŽ¡‘(ƒÜÄŽŽŽ‘3w¾`Structº:‘ÖçAn–¡kassoM_ciation“list“of“(name,“v‘ÿeBalue)“pairsަ‘`Note–¡kthat“base64-encoM_ding“of“¾`Binary“ºv‘ÿeBalues“is“done“automatically–ÿã.‘ÖçY“ou–¡kdo“not“need“to“doޤ ™š‘`the–¡kencoM_ding“y² ourself.Ž©™š¾class–¨‹client“:“?debug:bool“->“?headers:(string“*“string)“list“->“?insecure_ssl:bool“->“?timeout:float“->“?useragent:string“->“string“->Ž¡‘ ãLobjectޤš‘`val–¨‹url“:“stringŽ¡‘3wºUrl–¡kof“the“remote“XmlRpM_c“serv² er.ަ‘`¾val–¨‹mutable“debug“:“boolŽ¡‘3wºIf–¡ktrue,“Xml“messages“will“bM_e“prin² ted“to“standard“error.ަ‘`¾val–¨‹mutable“headers“:“(string“*“string)“listŽ¡‘3wºList–¡kof“custom“HTTP“headers“to“send“with“eac² h“request.ަ‘`¾val–¨‹mutable“insecure_ssl“:“boolŽ¡‘3wºIf–¡ktrue,“SSL“will“bM_e“allo•² w“ed›¡kev“en˜if˜the˜certicate˜is˜self-signed.ަ‘`¾val–¨‹mutable“timeout“:“floatŽŽŸ’è'Òº2ŽŽŒ‹X Šn ýu‘ë ln ýž‘ë‘3wºMaximš² um–¡ktime“to“w˜ait“for“a“request“to“complete,“in“seconds.ޤ™š‘`¾val–¨‹mutable“useragent“:“stringŽ©š‘3wºUser-agen² t–¡kto“send“in“request“headers.Ž¡‘`¾method–¨‹url“:“stringަ‘3wºGets‘¡k¾urlº.Ž¡‘`¾method–¨‹debug“:“boolަ‘3wºGets‘¡k¾debugº.Ž¡‘`¾method–¨‹set_debug“:“bool“->“unitަ‘3wºSets‘¡k¾debugº.Ž¡‘`¾method–¨‹headers“:“(string“*“string)“listަ‘3wºGets‘¡k¾headersº.Ž¡‘`¾method–¨‹set_headers“:“(string“*“string)“list“->“unitަ‘3wºSets‘¡k¾headersº.Ž¡‘`¾method–¨‹insecure_ssl“:“boolަ‘3wºGets‘¡k¾insecure_sslº.Ž¡‘`¾method–¨‹set_insecure_ssl“:“bool“->“unitަ‘3wºSets‘¡k¾insecure_sslº.Ž¡‘`¾method–¨‹timeout“:“floatަ‘3wºGets‘¡k¾timeoutº.Ž¡‘`¾method–¨‹set_timeout“:“float“->“unitަ‘3wºSets‘¡k¾timeoutº.Ž¡‘`¾method–¨‹useragent“:“stringަ‘3wºGets‘¡k¾useragentº.Ž¡‘`¾method–¨‹set_useragent“:“string“->“unitަ‘3wºSets‘¡k¾useragentº.Ž¡‘`¾method–¨‹set_base64_encoder“:“(string“->“string)“->“unitަ‘3wºSets–¡kan“alternate“Base-64“binary“encoM_ding“function.ŽŽŸ’è'Ò3ŽŽŒ‹"² Šn ýu‘ë ln ýž‘ë‘`¾method–¨‹set_base64_decoder“:“(string“->“string)“->“unitޤšÕ‘3wºSets–¡kan“alternate“Base-64“binary“decoM_ding“function.Ž©œ‘`¾method–¨‹set_datetime_encoder“:“(XmlRpcDateTime.t“->“string)“->“unitŽ¡‘3wºSets–¡kan“alternate“ISO-8601“date/time“encoM_ding“function.ަ‘`¾method–¨‹set_datetime_decoder“:“(string“->“XmlRpcDateTime.t)“->“unitŽŸšÖ‘3wºSets–¡kan“alternate“ISO-8601“date/time“decoM_ding“function.ަ‘`¾method–¨‹call“:“string“->“XmlRpc.value“list“->“XmlRpc.valueŽ¡‘3wcall–¨‹name“params›¡kºin•² v“ok“es˜an˜XmlRp•M_c˜metho“d˜and˜returns˜the˜result,˜or˜raisesŽ© ™š‘3w¾XmlRpc.Errorº[1.1]–¡kon“error.ŽŸ‘ ãL¾endŽŸÛr‘`ºClass–¡kfor“XmlRpM_c“clien•² ts.‘ÖçT‘ÿãak“es–¡ka“single“mandatory“argumen² t,“¾urlº.ޤÚ8‘`If–¡k¾url“ºis“of“the“form“"h•² ttp://username:passw“ord@ó  b> ó3 cmmi10Á:–Ó1:“:Ž‘ Æcº",–¡kbasic“authen² tication“will“bM_e“used.Ž¡‘`If–¡k¾url“ºstarts“with“"h² ttps",“Curl“will“bM_e“used“instead“of“Ocamlnet.‘ÖçThe“"curl"“command-lineަ‘`program–¡kmš² ust“bM_e“in“y˜our“path“for“this“to“w˜ork.‘ÖçY‘ÿãou“can“use“the“¾insecure_ssl“ºsetting“toަ‘`alloš² w–¡kconnections“to“serv˜ers“with“self-signed“certicates;“b˜y“default“this“is“false“andަ‘`certicates–¡km² ust“bM_e“v‘ÿeBalid.ŽŸÚ7‘`¾timeout–¡kºcan“bšM_e“used“to“sp˜ecify“the“maximš² um“amoun˜t“of“time“elapsed“bM_efore“a“connection“isަ‘`cancelled.‘ÖçIt–¡kdefaults“to“300.0“seconds.Ž¡‘`¾headers–Œ‘ºmaš² y“con˜tain“an“arra˜y“of“(name,‘¼v‘ÿeBalue)“pairs“of“additional“headers“to“send“with“eac˜hަ‘`request.ŽŸÚ7‘`The–¡k¾useragent“ºsetting“proš² vides“a“con˜v˜enien˜t“w˜a˜y“to“c˜hange“the“User-Agen˜t“header,“whic˜hަ‘`defaults–¡kto“"XmlRpM_c-Ligh•² t/Á<ºv“ersionÁ>º".Ž¡‘`The–¡k¾debug“ºsetting,“if“true,“will“enable“v² erbM_ose“debugging“output“to“the“standard“errorަ‘`stream.ޤœ¾class–¨‹multicall“:“client“->ަ‘ ãLobjectŽŸÜ®‘`method–¨‹call“:“string“->“XmlRpc.value“list“->“XmlRpc.value“Lazy.tŽŸšÕ‘3wºAš² dds–¡ka“call“to“this“¾multicall“ºinstance.‘ÖçIf“the“call“has“already“executed,“the“follo˜wingަ‘3wexception–¡kwill“bM_e“raised:›ÖçF‘ÿãailure“"m² ulticall¾#ºcall:˜already“executed".Ž¡‘`¾method–¨‹execute“:“unit“->“unitŽŸšÕ‘3wºF›ÿãorces–¡kthe“call“to“execute“immediately˜.‘ÖçIf“the“call“has“already“executed“and“completedަ‘3wsuccessfully›ÿã,–¡kthe“follo² wing“exception“will“bM_e“raised:‘ÖçF˜ailure“"m² ulticall¾#ºexecute:‘Öçalreadyަ‘3wcompleted".Ž¡‘`¾method–¨‹result“:“int“->“XmlRpc.valueŽŽŸ’è'Òº4ŽŽŒ‹'$ Šn ýu‘ë ln ýž‘ë‘3wºReturns–¡ka“¾multicall“ºresult,“executing“the“call“if“necessary‘ÿã.‘ÖçThe“results“are“n•² um“bM_eredŽŸ ™š‘3wstarting–¡kwith“zero.ޤ¸«‘`¾method–¨‹executed“:“boolŽ©©"‘3wºT‘ÿãrue–¡kif“the“call“has“executed,“whether“or“not“it“succeeded.Ž¡‘`¾method–¨‹completed“:“boolަ‘3wºT›ÿãrue–¡kof“the“call“has“executed“and“completed“successfully˜.ŽŸ8«‘ ãL¾endŽŸðæ‘`ºCon•² v“enience–¡kclass“for“¾system.multicall“ºcalls.Ž©á^‘6ÀInstances–¡ktakš² e“an“¾XmlRpc.clientº[1.1]“as“an“argumen˜t:ŽŸa_¤ ™š‘H¤\¾#–¨‹let“mc“=“new“XmlRpc.multicall“client;;Ž¡‘H¤\val–¨‹mc“:“XmlRpc.multicall“=“Ž¡¦‘6ÀºThe–¡k"call"“methoM_d“wš² orks“lik˜e“¾client#callº,“but“it“returns“a“lazy“v‘ÿeBalue:ŽŸa^¡‘H¤\¾#–¨‹let“a“=“mc#call“"demo.addTwoNumbers"“[`Int“3;“`Int“4];;Ž¡‘H¤\val–¨‹a“:“XmlRpc.value“Lazy.t“=“Ž¡‘H¤\#–¨‹let“b“=“mc#call“"demo.addTwoNumbers"“[`Int“42;“`String“"oh“noes!"];;Ž¡‘H¤\val–¨‹b“:“XmlRpc.value“Lazy.t“=“Ž¡‘H¤\#–¨‹let“c“=“mc#call“"demo.addTwoNumbers"“[`Double“3.0;“`Double“4.0];;Ž¡‘H¤\val–¨‹c“:“XmlRpc.value“Lazy.t“=“Ž¡¦‘6ÀºAš² t–¡kthis“pM_oin˜t,“the“call“has“not“bM_een“executed“y˜et:ŽŸa^¡‘H¤\¾#‘¨‹mc#executed;;Ž¡‘H¤\--–¨‹:“bool“=“falseŽ¡¦‘6ÀºAs–¡ksoM_on“as“one“of“the“return“v‘ÿeBalues“is“forced,“the“call“is“executed:ŽŸa_¡‘H¤\¾#–¨‹Lazy.force“a;;Ž¡‘H¤\--–¨‹:“XmlRpc.value“=“`Int“7Ž¡‘H¤\#‘¨‹mc#executed;;Ž¡‘H¤\--–¨‹:“bool“=“trueŽ¡¦‘6ÀºOnce–Ùa“call“has“bšM_een“executed,‘ç•this“instance“cannot“b˜e‘ÙŒused“to“makš² e“an˜y“further“calls;Ž¡‘6Àinstead,–¡ka“new“¾multicall“ºinstance“m² ust“bM_e“created:ŽŸa^¡‘H¤\¾#–¨‹mc#call“"demo.addTwoNumbers"“[`Int“2;“`Int“2];;Ž¡‘H¤\Exception:–¨‹Failure“"multicall#call:“already“executed".ŽŽŸ’è'Òº5ŽŽŒ‹1U Šn ýu‘ë ln ýž‘멚‘6ÀºIf–+an“XmlRpšM_c“fault“o˜ccurred,‘2the“exception“will“b˜e“thro² wn“when‘*the“lazy“v‘ÿeBalue“is“forced:ŽŸ™š¤ ™š‘H¤\¾#–¨‹Lazy.force“b;;Ž¡‘H¤\Exception:–¨‹XmlRpc.Error“(-32602,“"server“error.“invalid“method“parameters").Ž¡¦‘6ÀºThis–¡kwill“not“prev•² en“t–¡kfurther“methoM_ds“from“executing“successfully:ŽŸ™š¡‘H¤\¾#–¨‹Lazy.force“c;;Ž¡‘H¤\--–¨‹:“XmlRpc.value“=“`Double“7.Ž¡¦‘6ÀºIt–t¬is›t­pM_ossible“for˜a“¾multicall˜ºto“bM_e˜executed“but“not˜completed,‘}Ÿfor˜example“if˜a“trans-Ž¡‘6Àp•M_ort›eerror‘eo“ccurs.‘ÂÄAside˜from–ecatc² hing˜the“exception,‘qthe˜¾completed“ºpropM_ert² y˜indicatesŽ¡‘6Àif–¡kthe“call“actually“w•² en“t–¡kthrough“or“not:ŽŸ™š¡‘H¤\¾#‘¨‹mc#completed;;Ž¡‘H¤\--–¨‹:“bool“=“trueŽ¡¦‘6ÀºIt–ý•is“not“necessary“to“use“lazy“v‘ÿeBalues.‘ëeInstead,‘ the“call“can“bM_e“executed“explicitly‘ÿã,‘ŸandŽ¡‘6Àthe–¡kresults“can“bM_e“retrievš² ed“b˜y“n˜um˜bM_er:Ž©™š¡‘H¤\¾#–¨‹let“mc“=“new“XmlRpc.multicall“client;;Ž¡‘H¤\val–¨‹mc“:“XmlRpc.multicall“=“Ž¡‘H¤\#–¨‹ignore“(mc#call“"demo.addTwoNumbers"“[`Int“2;“`Int“2]);;Ž¡‘H¤\--–¨‹:“unit“=“()Ž¡‘H¤\#–¨‹ignore“(mc#call“"demo.addTwoNumbers"“[`Int“3;“`Int“3]);;Ž¡‘H¤\--–¨‹:“unit“=“()Ž¡‘H¤\#–¨‹mc#result“1;;Ž¡‘H¤\--–¨‹:“XmlRpc.value“=“`Int“6Ž¡¤&QŽÊ1.2Ž‘¾Utilit y‘¸functionsŽŸ«¾val–¨‹dump“:“value“->“stringަ‘`ºCon•² v“erts–¡kan“XmlRpM_c“v‘ÿeBalue“to“a“h² uman-readable“string.Ž¡Ê1.3Ž‘¾Lo• w-lev“el‘¸in“terfaceŽŸ«¾type–¨‹message“=ޤ ™š‘ Q|–¨‹MethodCall“of“(string“*“value“list)Ž¡‘ Q|–¨‹MethodResponse“of“valueŽ¡‘ Q|–¨‹Fault“of“(int“*“string)ŽŽŸ’è'Òº6ŽŽŒ‹8_ Šn ýu‘ë ln ýž‘ë‘`ºT² ypšM_e–¡kfor“XmlRp˜c“messages.ŽŸæž¾val–¨‹message_of_xml_element“:ޤ ™š‘ Q?base64_decoder:(string–¨‹->“string)“->Ž¡‘ Q?datetime_decoder:(string–¨‹->“XmlRpcDateTime.t)“->“Xml.xml“->“messageŽ©lÛ‘`ºCon•² v“erts–¡kan“Xml“Lighš² t“elemen˜t“to“an“XmlRpM_c“message.ŽŸæ¾val–¨‹xml_element_of_message“:Ž¡‘ Q?base64_encoder:(string–¨‹->“string)“->Ž¡‘ Q?datetime_encoder:(XmlRpcDateTime.t–¨‹->“string)“->“message“->“Xml.xmlަ‘`ºCon•² v“erts–¡kan“XmlRpM_c“message“to“an“Xml“Lighš² t“elemen˜t.ŽŸæž¾val–¨‹value_of_xml_element“:Ž¡‘ Q?base64_decoder:(string–¨‹->“string)“->Ž¡‘ Q?datetime_decoder:(string–¨‹->“XmlRpcDateTime.t)“->“Xml.xml“->“valueަ‘`ºCon•² v“erts–¡kan“Xml“Lighš² t“elemen˜t“to“an“XmlRpM_c“v‘ÿeBalue.ŽŸæž¾val–¨‹xml_element_of_value“:Ž¡‘ Q?base64_encoder:(string–¨‹->“string)“->Ž¡‘ Q?datetime_encoder:(XmlRpcDateTime.t–¨‹->“string)“->“value“->“Xml.xmlަ‘`ºCon•² v“erts–¡kan“XmlRpM_c“v‘ÿeBalue“to“an“Xml“Lighš² t“elemen˜t.ŽŸ%¡"Ê1.4Ž‘¾Serv er‘¸to_úolsŽŸ~ξval–¨‹serve“:Ž¡‘ Q?base64_encoder:(string–¨‹->“string)“->Ž¡‘ Q?base64_decoder:(string–¨‹->“string)“->Ž¡‘ Q?datetime_encoder:(XmlRpcDateTime.t–¨‹->“string)“->Ž¡‘ Q?datetime_decoder:(string–¨‹->“XmlRpcDateTime.t)“->Ž¡‘ Q?error_handler:(exn–¨‹->“message)“->Ž¡‘ Q(string–¨‹->“value“list“->“value)“->“string“->“stringަ‘`ºCreates–¡ka“function“from“string“(Xml“represenš² ting“a“¾MethodCallº)“to“string“(Xml“represen˜tingŽ¡‘`a–¡k¾MethodResult“ºor“¾Faultº)“giv² en“a“function“of“the“form:‘Öç(¾name“Ä!“¾params“Ä!“¾resultº),“whereŽ¡‘`¾name–¡kºis“the“name“of“the“methoM_d,“¾params“ºis“a“list“of“parameter“v‘ÿeBalues,“and“¾result“ºis“theŽ¡‘`result‘¡kv‘ÿeBalue.Ž©ìÛ‘`This–›function“can“bM_e“used‘›to“build“manš² y“dieren˜t“kinds“of“XmlRpM_c“serv˜ers‘›since“it“mak˜es“noŽ¡‘`assumptions–¡kabšM_out“the“net•² w“ork–¡klibrary“or“other“comm² unications“metho˜d“used.ަ‘`If–¡kan“exception“other“than“¾XmlRpc.Errorº[1.1]“oM_ccurs,“the“exception“is“passed“toŽ¡‘`¾error_handlerº.‘ÍsIf–…¾error_handler›…ºreturns“a˜message,‘Šºthe“message˜will“bM_e˜used“as˜the“result.Ž¡‘`If–¡kan“¾XmlRpc.Errorº[1.1]“is“raised“b² y“either“the“main“function“or“¾error_handlerº,“it“will“bM_eŽ¡‘`con•² v“erted–¡kto“an“XmlRpM_c“¾Faultº.‘ÖçAnš² y“other“exception“raised“b˜y“¾error_handler“ºis“allo˜w˜ed“toŽ¡‘`escapM_e.ަ‘`F‘ÿãor–¡ka“full-featured,“easy-to-use,“net•² w“ork-capable›¡kserv“er˜implemen“tation,˜see˜theŽ¡‘`¾XmlRpcServerº[2]‘¡kmoM_dule.ŽŽŸ’è'Ò7ŽŽŒ‹>ÿ Šn ýu‘ë ln ýž‘ë¾val–¨‹serve_message“:ޤ ™š‘ Q?error_handler:(exn–¨‹->“message)“->Ž¡‘ Q(string–¨‹->“value“list“->“value)“->Ž¡‘ Qmessage–¨‹->“messageޤ™š‘`ºPš² erforms–¡kthe“same“function“as“¾serveº,“but“opM_erates“on“t˜ypM_ed“messages“instead“of“strings.Ž©™š¾val–¨‹default_error_handler“:“exn“->“messageŽ¡‘`ºThe–¡kdefault“error“handler“for“¾serveº.ŽŸš‘`This–¡kerror“handler“catcš² hes“all“exceptions“and“con˜v˜erts“them“in˜to“faults“b˜y“wrapping“them“inŽŸ ™š‘`¾XmlRpc.Errorº.ަ¾val–¨‹quiet_error_handler“:“exn“->“messageŽ¡‘`ºA–¡k"quiet"“error“handler“for“¾serveº.ŽŸš‘`This–¡kerror“handler“simply“re-raises“the“exception.‘ÖçUse“this“if“yš² ou“w˜an˜t“exceptions“to“remainޤ ™š‘`unhandled–¡kso“that“they“will“escapM_e“to“the“error“log.‘ÖçThe“clienš² t“will“receiv˜e“a“genericŽ¡‘`"transpšM_ort–¡kerror",“whic² h“is“more“secure“since“it“do˜es“not“revš² eal“an˜y“information“abM_out“theŽ¡‘`spšM_ecic–¡kexception“that“o˜ccurred.ŽŸ+7¼2Ž‘ÁMošpœdule–G\ÇXmlRpcServer“¼:‘ ÐXmlRp˜c“Lighšct“serv˜er.ŽŸ&ªÏºExample:Ž©™š¡‘¢,¾let–¨‹server“=“new“XmlRpcServer.cgi“()“inŽ¡‘¢,server#register‘¨‹"demo.sayHello"Ž¡‘!óB(fun–¨‹_“->“`String“"Hello!");Ž¡‘¢,server#run‘¨‹()Ž¡‘ºBy– inheriting› from“¾XmlRpcServer.baseº[2.1],‘!all˜servš² ers“pro˜vide“the“follo˜wing‘ in˜trospM_ection“func-Ž¡tions–ârbš² y“default:‘ Xõ¾system.listMethodsº,‘r³¾system.getCapabilitiesº.‘ ™üT‘ÿão“prev˜en˜t“their“use,‘r³useŽ¡¾server#unregisterº.Ž¡‘A² dditionally‘ÿã,‘øüthe–methošM_ds“¾system.methodHelp“ºand“¾system.methodSignature“ºwill“b˜e“madeŽ¡a² v‘ÿeBailable–¡kif“at“least“one“methošM_d“help“or“metho˜d“signature“is“pro² vided.ަ¾type–¨‹param_type“=“[“`ArrayŽ¡‘ Q|‘¨‹`BinaryŽ¡‘ Q|‘¨‹`BooleanŽ¡‘ Q|‘¨‹`DateTimeŽ¡‘ Q|‘¨‹`DoubleŽ¡‘ Q|‘¨‹`IntŽ¡‘ Q|‘¨‹`StringŽ¡‘ Q|‘¨‹`StructŽ¡‘ Q|–¨‹`Undefined“]ަ‘`ºT² ypšM_e–¡kof“parameters“used“in“metho˜d“signatures.ŽŽŸ’è'Ò8ŽŽŒ‹ I6 Šn ýu‘ë ln ýž‘ëÊ2.1Ž‘¾Base‘¸classesŽŸŸR¾class–¨‹virtual“base“:ŽŸ ™š‘ ãLobjectŽŸÜp‘`val–¨‹methods“:“(string,“XmlRpc.value“list“->“XmlRpc.value)“Hashtbl.tŽ©$‘3wºHashš² table–¡kmapping“methoM_d“names“to“implemen˜tation“functions.ޤh¬‘`¾val–¨‹mutable“base64_encoder“:“string“->“stringŽŸ#‘3wºBase-64–¡kbinary“encoM_ding“function.Ž¡‘`¾val–¨‹mutable“base64_decoder“:“string“->“stringަ‘3wºBase-64–¡kbinary“decoM_ding“function.Ž¡‘`¾val–¨‹mutable“datetime_encoder“:“XmlRpcDateTime.t“->“stringŽŸ#‘3wºISO-8601–¡kdate/time“encoM_ding“function.Ž¡‘`¾val–¨‹mutable“datetime_decoder“:“string“->“XmlRpcDateTime.tަ‘3wºISO-8601–¡kdate/time“decoM_ding“function.Ž¡‘`¾val–¨‹mutable“error_handler“:“exn“->“XmlRpc.messageŽŸ#‘3wºHandler–¡kfor“unhandled“exceptions.Ž¡‘`¾method–¨‹set_base64_encoder“:“(string“->“string)“->“unitަ‘3wºSets–¡kan“alternate“Base-64“binary“encoM_ding“function.Ž¡‘`¾method–¨‹set_base64_decoder“:“(string“->“string)“->“unitŽŸ#‘3wºSets–¡kan“alternate“Base-64“binary“decoM_ding“function.Ž¡‘`¾method–¨‹set_datetime_encoder“:“(XmlRpcDateTime.t“->“string)“->“unitަ‘3wºSets–¡kan“alternate“ISO-8601“date/time“encoM_ding“function.Ž¡‘`¾method–¨‹set_datetime_decoder“:“(string“->“XmlRpcDateTime.t)“->“unitŽŸ#‘3wºSets–¡kan“alternate“ISO-8601“date/time“decoM_ding“function.Ž¡‘`¾method–¨‹set_error_handler“:“(exn“->“XmlRpc.message)“->“unitަ‘3wºSets–¡kan“alternate“handler“for“unhandled“exceptions.‘ÖçSeeޤ ™š‘3w¾XmlRpc.default_error_handlerº[1.4]–¡kand“¾XmlRpc.quiet_error_handlerº[1.4]“forŽ¡‘3wexamples.ŽŸh¬‘`¾method–¨‹serve“:Ž¡‘&±(string–¨‹->“XmlRpc.value“list“->“XmlRpc.value)“->“string“->“stringŽŽŸ’è'Òº9ŽŽŒ‹ Q Šn ýu‘ë ln ýž‘ë‘3wºF‘ÿãor–¡kuse“in“subšM_classes;“calls“¾XmlRpc.serveº[1.4]“with“the“curren² t“enco˜ders,“deco˜ders,“andޤ ™š‘3werror‘¡khandler.Ž©»Â‘`¾method–¨‹serve_message“:Ž¡‘&±(string–¨‹->“XmlRpc.value“list“->“XmlRpc.value)“->Ž¡‘&±XmlRpc.message–¨‹->“XmlRpc.messageŽŸ*­‘3wºLik² e–¡k¾serveº,“but“opM_erates“on“messages“instead“of“strings.ަ‘`¾method–¨‹register“:Ž¡‘&±string‘¨‹->Ž¡‘&±?help:string‘¨‹->Ž¡‘&±?signature:XmlRpcServer.param_type–¨‹list“->Ž¡‘&±?signatures:XmlRpcServer.param_type–¨‹list“list“->Ž¡‘&±(XmlRpc.value–¨‹list“->“XmlRpc.value)“->“unitŽŸ*®‘3wºRegisters–¡ka“methoM_d“with“the“serv² er.ŽŸ"#‘3wIf–¡ka“¾help“ºstring“is“spšM_ecied,“its“con•² ten“ts–¡kwill“b˜e“returned“for“calls“toŽ¡‘3w¾system.methodHelp–¡kºfor“this“methoM_d.Ž©"$‘3wIf–¡k¾signature“ºis“spšM_ecied,“this“metho˜d's“signature“will“b˜e“published“b² yŽ¡‘3w¾system.methodSignature–¡kºand“(shalloš² w)“t˜ypM_e-c˜hec˜king“will“bM_e“enabled“for“parametersŽ¡‘3wpassed–¡kin² to“this“methoM_d.ަ‘3wMultiple–¡ksignatures“can“bM_e“supplied“via“¾signatures“ºif“desired“to“proš² vide“for“o˜v˜erloadedŽ¡‘3wmethoM_ds.ަ‘3wSignatures–¡kare“of“the“form“¾return-type;–¨‹param1-type;“param2-type;“...‘ÖçºwhereŽ¡‘3weac•² h›¡kt“ypM_e˜is˜an˜instance˜of˜the˜¾XmlRpcServer.param_typeº[2]˜v‘ÿeBarian“t.ޤ»Â‘`¾method–¨‹unregister“:“string“->“unitŽŸ*­‘3wºRemo•² v“es–¡ka“methoM_d“from“the“serv² er.Ž¡‘`¾method–¨‹virtual“run“:“unit“->“unitޤ*®‘3wºStarts–¡kthe“main“serv² er“proM_cess.ŽŸ;Á‘ ãL¾endŽŸ38‘`ºAbstract–¡kbase“class“for“XmlRpM_c“serv² ers.ŽŸ»Á¾class–¨‹type“server“=ŽŸ ™š‘ ãLobjectŽŸDL‘`inherit‘¨‹XmlRpcServer.base‘¡kº[2.1]ŽŸ"#‘`¾method–¨‹run“:“unit“->“unitŽ¡‘3wºStarts–¡kthe“main“serv² er“proM_cess.ŽŸ;‘ ãL¾endŽŸ37‘`ºT² ypšM_e–¡kof“concrete“XmlRp˜c“serv² er“classes.ŽŽŸ’ånÿ10ŽŽŒ‹ X  Šn ýu‘ë ln ýž‘ëÊ2.2Ž‘¾Serv• er‘¸implemen“tationsŽ©«¾class–¨‹cgi“:“unit“->“serverޤ™š‘`ºCGI–¡kXmlRpM_c“serv² er“based“on“Netcgi2.ŽŸ™š¾class–¨‹netplex“:“?parallelizer:Netplex_types.parallelizer“->“?handler:string“->“unit“->“serverŽ¡‘`ºStand-alone–¡kXmlRpM_c“serv² er“based“on“Netplex.ŽŸ&QŽÊ2.3Ž‘¾Utilit y‘¸functionsަ¾val–¨‹invalid_method“:“string“->“'aŽ¡‘`ºRaise–¡kan“¾XmlRpc.Errorº[1.1]“indicating“a“methoM_d“name“not“found.ŽŸ™š¾val–¨‹invalid_params“:“unit“->“'aŽ¡‘`ºRaise–¡kan“¾XmlRpc.Errorº[1.1]“indicating“in² v‘ÿeBalid“methoM_d“parameters.ŽŸ+7¼3Ž‘ÁMošpœdule–G\ÇXmlRpcDateTime“¼:‘ ÐDate/time“tcyp˜e.ŽŸ'5Ê3.1Ž‘¾T yp_úesަ¾exception–¨‹Parse_error“of“stringŽ¡‘`ºRaised–¡kb² y“¾XmlRpcDateTime.of_stringº[3.6]“if“a“string“could“not“bM_e“parsed.‘ÖçThe“exceptionŽ© ™š‘`con² tains–¡kthe“input“string.ŽŸ™š¾type–¨‹t“=“int“*“int“*“int“*“int“*“int“*“int“*“intŽ¡‘`ºT² ypšM_e–¡kof“XmlRp˜c-compatible“date/time“v‘ÿeBalues.‘Öç(yš² ear,“mon˜th,“da˜y‘ÿã,“hour,“min˜ute,“second,ަ‘`time–¡kzone“oset“in“min² utes)ŽŸ&QŽÊ3.2Ž‘¾ComparisonŽŸ«¾val–¨‹compare“:“t“->“t“->“intŽ¡‘`ºStandard–¡kcomparator“for“date/time“v›ÿeBalues.‘ÖçCon•² v“erts–¡kall“v˜alues“to“UTC“bM_efore“comparing“toަ‘`ensure–¡kcorrect“bM_eha² vior“with“v‘ÿeBalues“of“diering“time“zones.ŽŸ™š¾val–¨‹equal“:“t“->“t“->“boolŽ¡‘`ºStandard–¡kequalitš² y“function“for“date/time“v‘ÿeBalues.‘ÖçCon˜v˜erts“all“v‘ÿeBalues“to“UTC“bM_eforeަ‘`comparing.ŽŸ™š¾val–¨‹hash“:“t“->“intŽ¡‘`ºStandard–¡khash“function“for“date/time“v›ÿeBalues.‘ÖçCon•² v“erts–¡kv˜alues“to“UTC“bM_efore“hashing.ŽŽŸ’ånÿ11ŽŽŒ‹ _© Šn ýu‘ë ln ýž‘ëÊ3.3Ž‘¾Curren t–¸date“and“timeŽ©œ¾val–¨‹now“:“unit“->“tޤ}©‘`ºReturns–¡kthe“curren² t“date“and“time“in“the“loM_cal“time“zone.ŽŸ)Ö¾val–¨‹now_utc“:“unit“->“tŽ¡‘`ºReturns–¡kthe“curren² t“date“and“time“in“UTC.ŽŸ%ãdÊ3.4Ž‘¾Time–¸zone“adjustmen tsަ¾val–¨‹set_tz_offset“:“int“->“t“->“tŽ¡‘`ºAš² djusts–¡kthe“time“zone“oset,“preserving“equalit˜y‘ÿã.ŽŸ)Ö¾val–¨‹fix_tz_offset“:“int“->“t“->“tŽ¡‘`ºF‘ÿãorces–¡kthe“time“zone“oset“to“a“dieren² t“v‘ÿeBalue,“ignoring“all“other“elds.‘ÖçUse“this“to“correctޤ ™š‘`the–¡ktime“zone“of“a“date/time“v‘ÿeBalue“that“wš² as“receiv˜ed“without“a“time“zone“oset“and“isŽ¡‘`kno² wn–¡knot“to“bM_e“UTC.ŽŸ%ãeÊ3.5Ž‘¾Con• v“ersionަ¾val–¨‹from_unixfloat“:“float“->“tޤ}©‘`ºBuilds–¡ka“date/time“v‘ÿeBalue“from“ep•M_o“c² h–¡kseconds“in“the“loM_cal“time“zone.Ž©)Ö¾val–¨‹from_unixfloat_utc“:“float“->“tŽ¡‘`ºBuilds–¡ka“date/time“v‘ÿeBalue“from“ep•M_o“c² h–¡kseconds“in“UTC.ަ¾val–¨‹to_unixfloat“:“t“->“floatŽ¡‘`ºCon•² v“erts–¡ka“date/time“v‘ÿeBalue“to“ep•M_o“c² h–¡kseconds“in“the“loM_cal“time“zone.ަ¾val–¨‹to_unixfloat_utc“:“t“->“floatŽ¡‘`ºCon•² v“erts–¡ka“date/time“v‘ÿeBalue“to“ep•M_o“c² h–¡kseconds“in“UTC.ަ¾val–¨‹from_unixtm“:“Unix.tm“->“tŽ¡‘`ºBuilds–¡ka“date/time“v›ÿeBalue“from“a“Unix.tm“v˜alue“in“the“loM_cal“time“zone.ަ¾val–¨‹from_unixtm_utc“:“Unix.tm“->“tŽ¡‘`ºBuilds–¡ka“date/time“v›ÿeBalue“from“a“Unix.tm“v˜alue“in“UTC.ަ¾val–¨‹to_unixtm“:“t“->“Unix.tmŽ¡‘`ºCon•² v“erts–¡ka“date/time“v›ÿeBalue“to“a“Unix.tm“v˜alue“in“the“loM_cal“time“zone.ަ¾val–¨‹to_unixtm_utc“:“t“->“Unix.tmŽ¡‘`ºCon•² v“erts–¡ka“date/time“v›ÿeBalue“to“a“Unix.tm“v˜alue“in“UTC.ŽŽŸ’ånÿ12ŽŽŒ‹ fi Šn ýu‘ë ln ýž‘ëÊ3.6Ž‘¾ISO-8601–¸parsing“and“generationŽŸ«¾val–¨‹of_string“:“string“->“tޤ™š‘`ºPš² arses–¡kan“(XmlRpM_c-a˜v˜or)“ISO-8601“date/time“v‘ÿeBalue“from“a“string.Ž©™š¾val–¨‹to_string“:“t“->“stringŽ¡‘`ºGenerates–¡kan“ISO-8601“string“from“a“date/time“v‘ÿeBalue.ŽŸ+7¼4Ž‘ÁMošpœdule–G\ÇXmlRpcBase64“¼:‘ ÐBase64“co˜dec.ŽŸpܺ8-bit–ç c² haracters›çare“encoM_ded˜in² to“6-bit“ones˜using“ASCI•M_I‘çlo“okup˜tables.‘¨Default–ç tables˜maps“0..63ŽŸ ™šv‘ÿeBalues–¡kon“c² haracters“A-Z,“a-z,“0-9,“'+'“and“'/'“(in“that“order).ŽŸÓ¾exception‘¨‹Invalid_charŽ¡‘`ºThis–¡kexception“is“raised“when“reading“an“inš² v‘ÿeBalid“c˜haracter“from“a“base64“input.ަ¾exception‘¨‹Invalid_tableŽ¡‘`ºThis–¡kexception“is“raised“if“the“encošM_ding“or“deco˜ding“table“size“is“not“correct.ަ¾type–¨‹encoding_table“=“char“arrayŽ¡‘`ºAn–¡kencošM_ding“table“maps“in² tegers“0..63“to“the“corresp˜onding“c² har.ަ¾type–¨‹decoding_table“=“int“arrayŽ¡‘`ºA–¡kdecošM_ding“table“maps“c² hars“0..255“to“the“corresp˜onding“0..63“v‘ÿeBalue“or“-1“if“the“c² har“is“notŽŸ ™š‘`accepted.ަ¾val–¨‹str_encode“:“?tbl:encoding_table“->“string“->“stringŽ¡‘`ºEncoM_de–¡ka“string“in² to“Base64.ަ¾val–¨‹str_decode“:“?tbl:decoding_table“->“string“->“stringŽ¡‘`ºDecošM_de–}a‘}string“enco˜ded›}in² to“Base64,‘„Xraise“¾Invalid_char“ºif˜a“c² haracter“in˜the“input˜string“isŽŸ ™š‘`not–¡ka“v‘ÿeBalid“one.ަ¾val–¨‹encode“:“?tbl:encoding_table“->“char“Stream.t“->“char“Stream.tŽ¡‘`ºGeneric–¡kbase64“encoM_ding“o•² v“er–¡ka“c² haracter“stream.ަ¾val–¨‹decode“:“?tbl:decoding_table“->“char“Stream.t“->“char“Stream.tŽ¡‘`ºGeneric–¡kbase64“decoM_ding“o•² v“er–¡ka“c² haracter“stream.ަ¾val–¨‹make_decoding_table“:“encoding_table“->“decoding_tableŽ¡‘`ºCreate–¡ka“v‘ÿeBalid“decošM_ding“table“from“an“enco˜ding“one.ŽŽŸ’ånÿ13ŽŽŒømcƒ’À;èŠnÕÁI ó¥!¢N ecbx1200ó–¤ð ó3 ó3ecti1095óÄN½¿ffffectt1440ó!",š ó3 cmsy10ó  b> ó3 cmmi10óÚvªh ó3 ó3ectt1095óíÄ]] ó3 ó3ecbx1095ó&Lt$ffffecbx1440ó$•Hd ó3 ó3ecrm1095ùtößßßßßßßxmlrpc-light-0.6.1/doc/xmlrpc-light/latex/doc.ps0000664000175000017500000077042111140336574020544 0ustar ramenramen%!PS-Adobe-2.0 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: doc.dvi %%CreationDate: Mon Jan 19 17:36:42 2009 %%Pages: 13 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%DocumentFonts: CMSY10 CMMI10 %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips doc.dvi -o doc.ps %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2009.01.19:1736 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMMI10 %!PS-AdobeFont-1.1: CMMI10 1.100 %%CreationDate: 1996 Jul 23 07:53:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMMI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 60 /less put dup 62 /greater put readonly def /FontBBox{-32 -250 1048 750}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E 6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF 8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE 03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 956017667094CD8DC214A666D7D12CB23EC030318B42CBAAF40FFB3841355872 715967202E674F5ECE31075C2B1C5F53E28AE3C1491012441F34A19EE7421594 8C7C9937E184D28A736BA38E5E2596B6541FD3FDFB0E3F2FDCD1C10D2F048B47 01E771216915C6D5AA086DAE91E8581D5017146B452AC12080853B8BA982ED62 439481801A9791BEE207032642F4B66ADFEDFF9C7C779E896DA0BFF61C4B2847 94C5CE44B7F6ECA777491672DA62C4904A9D4A9BC8D49672446AE640BD50117A 6E2F3D44C38F21E572847884011309A71D567154A43D2BBEA13682287A5D63A3 8C0FCCAD477B607D89F84E32868DC2D5CB6E2DBB39AE0FB7C049A517DF8AC902 4B8A6982210B2D361A9E381E960E5D1F4C42599AED2677F84F23522A6D19653B E6E0EA0D94F5649FE39A3666098D55AACD60AABA48EC29060611C411D34D0DB8 383F260E1EB69D9F81BB6CE70ADC191C5F3A9690F1AAEE51D174CF24D4D687D3 80BFDB524A54B5CA242E9B724C74B83B0F9F04C028B3F26EC2065E23434B2A47 C067859462BB1EC0FF0FE19FD2B0539D7D82691518E48CE2D618C3FDA5ECC5CB 27A4096487A78DCACAF340BBFC7704B57514D8B041E527B0CD94DDD3BA2F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.1: CMSY10 1.0 %%CreationDate: 1991 Aug 15 07:20:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def end readonly def /FontName /CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 15 /bullet put dup 33 /arrowright put readonly def /FontBBox{-29 -960 1116 775}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A 27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF 5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A 71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C 515DB70A8D4F6146FE068DC1E5DE8BC57036431151EC603C8BCFE359BBD953AD 5F3D998C6EE18EABCDD31D35C7E933DEA008418A4F0845FC9A361328AB270359 C974485C9BCBCB1E9EBBF3ACC647C4108F7E05961E22390303FD667A2294F500 7A085C407875EB0F306D82AF2CD4829E70C8DDF7E27A57EE6D66713B450FB5D1 E37EA9012BE3E4642F467847C3401CCDBF7987531B406162E82910D56F7AE6E0 4587FAB307D874BEF0981B709F3C6847D141FF45F2C46CA337D65E6E31005EC9 E1C970667034EAE2CEAD678E6F94BC880E81E288D425B4C078126B01D9374BAA D20451839407F0174C7CDA9FBA9599BC29F1BC4D574290B8FF1DF4E1A737DBD5 5D64259C877191547076B1C7684CD252C02D58B7810E95ADC8C1C4497EE27922 D87EB5B4B2F7081AB03BEEFB555C6942C79F53C77FF154FD87EAC82AC3A3A8C2 2D91DF7C509A1838C72ADA3CB65BAF59E392FD8936DF8DC002A0C41215A3 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 39158280 55380996 1000 600 600 (doc.dvi) @start /Fa 193[71 1[71 1[25 58[{}3 90.9091 /CMMI10 rf /Fb 222[91 17[45 15[{}2 90.9091 /CMSY10 rf %DVIPSBitmapFont: Fc ecbx1200 12 41 /Fc 41 123 df45 D<07C01FF03FF87FFCFFFEFFFEFFFEFFFEFFFEFFFEFF FE7FFC3FF81FF007C00F0F788E1F>I<00003FF800000001FFFF0000000FFFFFE000003F FFFFF800007FF01FFC0000FFC007FE0001FF0001FF0003FE0000FF8007FE0000FFC007FC 00007FC00FFC00007FE00FF800003FE01FF800003FF01FF800003FF03FF800003FF83FF8 00003FF83FF000001FF87FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF0 00001FFC7FF000001FFCFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFE7FF000001FFC7FF0 00001FFC7FF000001FFC7FF000001FFC7FF000001FFC3FF800003FF83FF800003FF83FF8 00003FF81FF800003FF01FF800003FF00FF800003FE00FFC00007FE007FC00007FC007FE 0000FFC003FF0001FF8001FF8003FF0000FFC007FE00007FF01FFC00003FFFFFF800000F FFFFE0000003FFFF800000003FF800002F427CC038>48 D<000003C000000007C0000000 1FC00000007FC0000003FFC000003FFFC000FFFFFFC000FFFFFFC000FFFFFFC000FFFFFF C000FFC3FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0 000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC000 0003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000 03FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003 FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FF C0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0 000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC000 FFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFC264177C038>I<0000FFE0 0000000FFFFE0000003FFFFF800000FFFFFFE00003FFFFFFF80007FC03FFFE000FE0007F FF001F80003FFF803F00000FFFC07F000007FFC07FC00007FFE07FF00003FFE0FFF00001 FFF0FFF80001FFF0FFF80001FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000 FFF87FF00000FFF83FE00000FFF81FC00000FFF800000000FFF800000000FFF000000001 FFF000000001FFF000000001FFE000000003FFE000000003FFC000000007FF800000000F FF000000000FFF000000001FFC000000003FF8000000003FF0000000007FE000000000FF C000000001FF0000000003FE0000000007FC000000000FF0000000001FE0000000003F80 000000007F0000780000FE0000780001FC0000780003F80000F80007E00000F0000FC000 00F0001F800000F0003F000000F0007C000001F000F8000003F001FFFFFFFFF003FFFFFF FFE007FFFFFFFFE00FFFFFFFFFE01FFFFFFFFFE03FFFFFFFFFE07FFFFFFFFFE0FFFFFFFF FFE0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC02D417BC038>I<0000FF F000000007FFFF0000001FFFFFC000007FFFFFF00000FF007FF80003F8003FFE0007E000 1FFF0007E0000FFF000FF80007FF800FFE0007FF801FFE0007FFC01FFF0007FFC01FFF00 07FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC00FFE0007FFC007FC00 07FF8003F8000FFF800000000FFF000000001FFF000000001FFE000000003FFC00000000 7FF800000000FFF000000001FFE00000000FFF80000007FFFE00000007FFF800000007FF FF00000007FFFFC000000000FFF0000000003FFC000000000FFE000000000FFF80000000 07FF8000000003FFC000000003FFE000000003FFE000000001FFF000000001FFF0000000 01FFF800000001FFF800000001FFF80FC00001FFF83FF00001FFF87FF80001FFF87FF800 01FFF8FFFC0001FFF8FFFC0001FFF8FFFC0001FFF0FFFC0001FFF0FFFC0003FFF0FFFC00 03FFE07FF80003FFE07FF00007FFC07FE00007FFC03F80000FFF801FF0001FFF000FFE00 FFFE0007FFFFFFF80001FFFFFFF000007FFFFFC000001FFFFE00000001FFE000002D427B C038>I<000000003F0000000000003F0000000000007F000000000000FF000000000001 FF000000000003FF000000000003FF000000000007FF00000000000FFF00000000001FFF 00000000003FFF00000000003FFF00000000007FFF0000000000FFFF0000000001F7FF00 00000003E7FF0000000007E7FF0000000007C7FF000000000F87FF000000001F07FF0000 00003E07FF000000007E07FF000000007C07FF00000000F807FF00000001F007FF000000 03E007FF00000007E007FF00000007C007FF0000000F8007FF0000001F0007FF0000003E 0007FF0000007C0007FF0000007C0007FF000000F80007FF000001F00007FF000003E000 07FF000007C00007FF00000FC00007FF00000F800007FF00001F000007FF00003E000007 FF00007C000007FF0000FC000007FF0000FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFF FF80FFFFFFFFFFFF80FFFFFFFFFFFF800000000FFF00000000000FFF00000000000FFF00 000000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000FFF0000 0000000FFF00000000000FFF00000000000FFF00000000000FFF000000007FFFFFFF8000 007FFFFFFF8000007FFFFFFF8000007FFFFFFF8000007FFFFFFF8031417DC038>I<0700 0000030007E000003F0007FF0007FF0007FFFFFFFF0007FFFFFFFE0007FFFFFFFC0007FF FFFFF80007FFFFFFF00007FFFFFFE00007FFFFFF800007FFFFFE000007FFFFFC000007FF FFE0000007FFFF00000007C00000000007C00000000007C00000000007C00000000007C0 0000000007C00000000007C00000000007C00000000007C00000000007C00000000007C0 3FF0000007C1FFFF000007C7FFFFC00007DFFFFFF00007FFE03FFC0007FF000FFE0007FC 0007FF0007F00003FF8007E00003FFC007C00001FFC003800001FFE000000001FFE00000 0000FFF000000000FFF000000000FFF000000000FFF800000000FFF800000000FFF80000 0000FFF80F800000FFF83FE00000FFF87FF00000FFF8FFF00000FFF8FFF80000FFF8FFF8 0000FFF8FFF80000FFF8FFF80000FFF0FFF00000FFF0FFF00001FFF07FE00001FFE07FC0 0001FFE07E000003FFC03E000003FFC03F000007FF801FC0000FFF000FF0001FFE0007FE 00FFFC0003FFFFFFF00000FFFFFFE000003FFFFF8000000FFFFC00000001FFC000002D42 7BC038>I<000001FF800000001FFFF00000007FFFFC000001FFFFFF000007FF807F8000 0FFC001F80003FF0001FC0007FE0007FC000FFC000FFE001FF8001FFE003FF8001FFE003 FF0001FFE007FE0001FFE00FFE0001FFE00FFE0001FFE01FFC0000FFC01FFC00007F801F FC00001E003FFC000000003FFC000000003FF8000000007FF8000000007FF8000000007F F807FC00007FF81FFF8000FFF87FFFE000FFF8FFFFF800FFF9F01FFC00FFFBC007FE00FF FF8003FF00FFFF8003FF80FFFF0001FFC0FFFE0001FFC0FFFE0000FFE0FFFE0000FFE0FF FC0000FFF0FFFC0000FFF0FFFC0000FFF0FFFC0000FFF8FFF80000FFF8FFF80000FFF8FF F80000FFF8FFF80000FFF87FF80000FFF87FF80000FFF87FF80000FFF87FF80000FFF87F F80000FFF83FF80000FFF83FF80000FFF83FF80000FFF03FFC0000FFF01FFC0000FFF01F FC0000FFF00FFC0001FFE00FFC0001FFE007FE0001FFC007FF0003FF8003FF8003FF0001 FFC007FE0000FFE01FFC00007FFFFFF800001FFFFFF0000007FFFFC0000001FFFF000000 003FF000002D427BC038>I<00007FF000000003FFFF0000000FFFFFC000003FFFFFF000 007F801FFC0001FC0003FE0003F80001FF0003F00000FF0007E000007F8007E000003F80 0FC000003FC00FC000003FC01FC000001FC01FC000001FC01FE000001FC01FE000001FC0 1FF000001FC01FF800001FC01FFE00003FC01FFF00003F801FFFC0007F801FFFF0007F00 0FFFFC00FF000FFFFE01FE0007FFFF83FC0007FFFFE7F80003FFFFFFE00001FFFFFFC000 00FFFFFF0000007FFFFFC000003FFFFFE000000FFFFFF800000FFFFFFC00003FFFFFFE00 00FFFFFFFF0001FF3FFFFF8007FC0FFFFFC00FF803FFFFE01FF000FFFFE01FE0007FFFF0 3FE0001FFFF07FC00007FFF07F800003FFF87F800000FFF8FF8000007FF8FF0000003FF8 FF0000001FF8FF0000000FF8FF0000000FF8FF00000007F8FF00000007F8FF00000007F8 FF80000007F07F80000007F07F8000000FF07FC000000FE03FE000001FE03FF000003FC0 1FF800007F800FFE0001FF0007FFC00FFE0003FFFFFFFC0000FFFFFFF000003FFFFFC000 000FFFFF00000000FFF000002D427BC038>56 D66 D<00000000FFF00000700000001FFFFF0000F0000001FFFFFFE001F0000007FFFFFFF803 F000003FFFFFFFFE07F00000FFFFE001FF0FF00001FFFE00003F9FF00007FFF000000FFF F0000FFFC0000007FFF0001FFF00000003FFF0003FFE00000001FFF0007FFC00000000FF F000FFF8000000007FF001FFF0000000003FF003FFE0000000001FF007FFE0000000001F F007FFC0000000000FF00FFF80000000000FF00FFF800000000007F01FFF000000000007 F01FFF000000000003F03FFF000000000003F03FFE000000000003F03FFE000000000003 F07FFE000000000001F07FFE000000000001F07FFE000000000001F07FFC000000000000 00FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000000000 00FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000000000 00FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000000000 00FFFC00000000000000FFFC000000000000007FFC000000000000007FFE000000000000 007FFE000000000000F07FFE000000000000F03FFE000000000000F03FFE000000000000 F03FFF000000000000F01FFF000000000001F01FFF000000000001E00FFF800000000001 E00FFF800000000003E007FFC00000000003C007FFE00000000007C003FFE00000000007 C001FFF0000000000F8000FFF8000000001F00007FFC000000003F00003FFE000000007E 00001FFF80000000FC00000FFFC0000001F8000007FFF0000007F0000001FFFE00001FE0 000000FFFFF001FF800000003FFFFFFFFF0000000007FFFFFFFC0000000001FFFFFFF000 000000001FFFFF80000000000000FFF800000044467AC451>I72 DI76 D<00000007FFC0000000000000FFFFFE000000000007FFFFFFC0000000001FFFFFFFF000 0000007FFE00FFFC00000001FFF0001FFF00000007FF800003FFC000000FFF000001FFE0 00001FFC0000007FF000003FF80000003FF800007FF00000001FFC0000FFF00000001FFE 0001FFE00000000FFF0003FFC000000007FF8003FFC000000007FF8007FF8000000003FF C007FF8000000003FFC00FFF0000000001FFE00FFF0000000001FFE01FFF0000000001FF F01FFE0000000000FFF03FFE0000000000FFF83FFE0000000000FFF83FFE0000000000FF F87FFE0000000000FFFC7FFC00000000007FFC7FFC00000000007FFC7FFC00000000007F FC7FFC00000000007FFCFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007F FEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007F FEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007F FEFFFC00000000007FFEFFFC00000000007FFE7FFC00000000007FFC7FFE0000000000FF FC7FFE0000000000FFFC7FFE0000000000FFFC3FFE0000000000FFF83FFE0000000000FF F83FFF0000000001FFF81FFF0000000001FFF01FFF0000000001FFF01FFF8000000003FF F00FFF8000000003FFE00FFF8000000003FFE007FFC000000007FFC003FFC000000007FF 8003FFE00000000FFF8001FFF00000001FFF0000FFF80000003FFE00007FFC0000007FFC 00003FFE000000FFF800001FFF000001FFF000000FFFC00007FFE0000007FFF0001FFFC0 000001FFFE00FFFF00000000FFFFFFFFFE000000003FFFFFFFF80000000007FFFFFFC000 00000000FFFFFE00000000000007FFC000000047467AC454>79 D<0000FFE0001C000007 FFFE003C00003FFFFF807C0000FFFFFFE0FC0001FFFFFFF9FC0003FF801FFFFC0007FC00 01FFFC000FF800007FFC001FF000003FFC003FE000000FFC003FC0000007FC007FC00000 03FC007F80000003FC007F80000001FC007F80000000FC00FF80000000FC00FF80000000 7C00FF800000007C00FFC00000007C00FFC00000007C00FFE00000003C00FFF00000003C 00FFF80000003C00FFFC00000000007FFE00000000007FFFE0000000007FFFFE00000000 3FFFFFF00000003FFFFFFF0000001FFFFFFFE000001FFFFFFFFC00000FFFFFFFFE000007 FFFFFFFF800003FFFFFFFFC00001FFFFFFFFE000007FFFFFFFF000001FFFFFFFF8000007 FFFFFFFC000000FFFFFFFC0000000FFFFFFE00000000FFFFFE0000000007FFFF00000000 007FFF00000000003FFF00000000000FFF800000000007FF800000000003FF80F0000000 03FF80F000000001FF80F000000001FF80F000000000FF80F000000000FF80F800000000 FF80F800000000FF80F800000000FF00FC00000000FF00FC00000000FF00FE00000001FF 00FF00000001FE00FF80000003FE00FFC0000003FC00FFE0000007FC00FFF800000FF800 FFFF00003FF000FFFFF800FFE000FE7FFFFFFFC000FC1FFFFFFF0000F807FFFFFC0000F0 00FFFFF00000E00007FF80000031467AC43E>83 D<3FFFFFFFFFFFFFFFE03FFFFFFFFFFF FFFFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFE000FFF80 03FFE07FE0000FFF80003FF07FC0000FFF80001FF07F00000FFF800007F07F00000FFF80 0007F07E00000FFF800003F07C00000FFF800001F07C00000FFF800001F07C00000FFF80 0001F07800000FFF800000F07800000FFF800000F07800000FFF800000F07800000FFF80 0000F0F800000FFF800000F8F000000FFF80000078F000000FFF80000078F000000FFF80 000078F000000FFF80000078F000000FFF800000780000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000007FFFFFFFFFF00000007FFFFFFFFFF00000007FFFFFFFFFF00000007FFFFFFFF FF00000007FFFFFFFFFF000045437CC24E>II<0001FFE0 000000001FFFFE000000007FFFFF80000001FFFFFFE0000003FE007FF8000007FC001FFC 000007FE000FFE00000FFF0007FF00000FFF0007FF00000FFF0003FF80000FFF0003FF80 000FFF0003FF80000FFF0001FFC00007FE0001FFC00003FC0001FFC00000F00001FFC000 00000001FFC00000000001FFC00000000001FFC00000000001FFC000000003FFFFC00000 00FFFFFFC0000007FFFFFFC000003FFFF1FFC00000FFFC01FFC00003FFE001FFC00007FF 8001FFC0001FFE0001FFC0003FFC0001FFC0003FF80001FFC0007FF80001FFC0007FF000 01FFC000FFF00001FFC000FFE00001FFC000FFE00001FFC000FFE00001FFC000FFE00003 FFC000FFE00003FFC000FFF00007FFC0007FF8000FFFC0007FF8001FFFF0003FFE003EFF FFC01FFF80FC7FFFC007FFFFF87FFFC003FFFFE01FFFC0007FFF8007FFC0000FFC000000 00322F7DAD36>97 D<00003FFC00000001FFFFC000000FFFFFF000003FFFFFFC00007FF0 03FE0000FFC001FF0003FF8003FF0007FF0007FF8007FE0007FF800FFE0007FF801FFC00 07FF801FFC0007FF803FF80007FF803FF80003FF007FF80001FE007FF8000078007FF000 0000007FF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000 000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000 000000FFF0000000007FF8000000007FF8000000007FF8000000003FF8000000003FFC00 0003C03FFC000003C01FFE000007C00FFE000007800FFF00000F8007FF80001F0003FFC0 003E0001FFF0007C00007FFC03F800003FFFFFF000000FFFFFC0000003FFFF000000003F F800002A2F7CAD32>99 D<0000000003FE0000000007FFFE0000000007FFFE0000000007 FFFE0000000007FFFE0000000007FFFE00000000001FFE00000000000FFE00000000000F FE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE 00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00 000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000 003FE00FFE000003FFFC0FFE00000FFFFF8FFE00003FFFFFCFFE0000FFF807FFFE0001FF C001FFFE0003FF80007FFE0007FF00003FFE000FFE00001FFE000FFC00000FFE001FFC00 000FFE003FF800000FFE003FF800000FFE003FF800000FFE007FF800000FFE007FF00000 0FFE007FF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000F FE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE 00FFF000000FFE00FFF000000FFE00FFF000000FFE007FF000000FFE007FF000000FFE00 7FF000000FFE007FF800000FFE003FF800000FFE003FF800000FFE001FFC00001FFE001F FC00001FFE000FFE00003FFE0007FE00007FFE0003FF0000FFFF0001FFC003FFFFFC00FF F01FEFFFFC007FFFFF8FFFFC001FFFFE0FFFFC0007FFF80FFFFC00007FC00FF80036467C C43E>I<00003FF800000003FFFF8000000FFFFFE000003FFFFFF000007FF83FF80000FF C007FC0001FF8003FE0003FF0001FF0007FE0000FF800FFC0000FF801FFC00007FC01FF8 00007FC03FF800003FE03FF800003FE07FF800003FE07FF000003FE07FF000003FF07FF0 00001FF0FFF000001FF0FFF000001FF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF0FFFF FFFFFFF0FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000007FF0 000000007FF0000000007FF8000000007FF8000000003FF8000000003FF8000000F01FFC 000000F01FFC000001F00FFE000001E007FF000003E003FF800007C001FFC0000F8000FF F0003F00007FFE01FE00001FFFFFFC000007FFFFF0000001FFFFC00000001FFE00002C2F 7DAD33>I<000000FF8000000FFFE000007FFFF00001FFFFF80003FF8FFC000FFE0FFE00 1FFC1FFE001FF81FFE003FF81FFE007FF01FFE007FF01FFE007FF00FFC00FFE00FFC00FF E003F000FFE000C000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0 000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000FFFFFFF800FFFFFFF8 00FFFFFFF800FFFFFFF800FFFFFFF80000FFE0000000FFE0000000FFE0000000FFE00000 00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF E0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0 000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000 0000FFE000007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE00027467DC522 >I<0000FFE0007E00000FFFFE03FF80003FFFFF8FFF8000FFFFFFFFFFC001FFC07FFF3F C003FF001FF83FC007FE000FFC3FC00FFC0007FE1F801FFC0007FF0F001FF80003FF0000 1FF80003FF00003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003F F80003FF80003FF80003FF80003FF80003FF80003FF80003FF80001FF80003FF00001FF8 0003FF00001FFC0007FF00000FFC0007FE000007FE000FFC000003FF001FF8000001FFC0 7FF0000003FFFFFFE0000003FFFFFF800000078FFFFE0000000780FFE00000000F800000 0000000F8000000000000F8000000000000F8000000000000FC000000000000FE0000000 00000FF000000000000FFFFFFFC000000FFFFFFFFC000007FFFFFFFF800007FFFFFFFFE0 0003FFFFFFFFF00001FFFFFFFFFC0000FFFFFFFFFC0003FFFFFFFFFE000FFFFFFFFFFF00 1FF000007FFF003FC0000007FF007F80000001FF807F80000000FF80FF00000000FF80FF 000000007F80FF000000007F80FF000000007F80FF000000007F80FF80000000FF807F80 000000FF007FC0000001FF003FE0000003FE001FF0000007FC000FFE00003FF80007FFC0 01FFF00001FFFFFFFFC000007FFFFFFF0000000FFFFFF8000000007FFF00000032427DAC 38>I<007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC00000 0000FFFFC00000000003FFC00000000001FFC00000000001FFC00000000001FFC0000000 0001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000000 01FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001 FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC007FE000001FF C03FFF800001FFC0FFFFE00001FFC1FFFFF80001FFC7F03FFC0001FFCF801FFC0001FFDF 000FFE0001FFDE000FFE0001FFFC000FFE0001FFF80007FF0001FFF00007FF0001FFF000 07FF0001FFE00007FF0001FFE00007FF0001FFE00007FF0001FFC00007FF0001FFC00007 FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF 0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF00 01FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001 FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF C00007FF0001FFC00007FF0001FFC00007FF00FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF 83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFE37457CC43E>I<007C0001FF0003FF8007FF C007FFC00FFFE00FFFE00FFFE00FFFE00FFFE007FFC007FFC003FF8001FF00007C000000 00000000000000000000000000000000000000000000000000000000007FC07FFFC07FFF C07FFFC07FFFC07FFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18467CC520>I<000003E000000FF80000 1FFC00003FFE00003FFE00007FFF00007FFF00007FFF00007FFF00007FFF00003FFE0000 3FFE00001FFC00000FF8000003E000000000000000000000000000000000000000000000 000000000000000000000000000000000000000001FF0003FFFF0003FFFF0003FFFF0003 FFFF0003FFFF00000FFF000007FF000007FF000007FF000007FF000007FF000007FF0000 07FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0000 07FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0000 07FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0000 07FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0000 07FF1F8007FF3FC007FF7FE007FFFFF007FFFFF00FFEFFF00FFEFFF00FFCFFF01FFCFFE0 1FF87FE03FF03FC0FFE01FFFFF800FFFFF0003FFFC0000FFC000205A86C522>I<007FC0 00FFFFC000FFFFC000FFFFC000FFFFC000FFFFC00003FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0 00FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF8019457CC420>108 D<007F8007FE00000FFC0000FFFF803FFFC0007FFF8000FFFF80FFFFF001FFFFE000FFFF 81FFFFF803FFFFF000FFFF87F01FFC0FE03FF800FFFF8FC00FFE1F801FFC0003FF9F000F FF3E001FFE0001FF9E0007FF3C000FFE0001FFBC0007FF78000FFE0001FFF80003FFF000 07FF0001FFF80003FFF00007FF0001FFF00003FFE00007FF0001FFE00003FFC00007FF00 01FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFC00003FF800007FF0001FFC0 0003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF 800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007 FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001 FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC000 03FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF80 0007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF 0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FF C00003FF800007FF00FFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FF FFFF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FFFFFE572D7CAC5E>I<00 7F8007FE0000FFFF803FFF8000FFFF80FFFFE000FFFF81FFFFF800FFFF87F03FFC00FFFF 8F801FFC0003FF9F000FFE0001FF9E000FFE0001FFBC000FFE0001FFF80007FF0001FFF0 0007FF0001FFF00007FF0001FFE00007FF0001FFE00007FF0001FFE00007FF0001FFC000 07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF 0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF00 01FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001 FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF00FFFFFF83FFFFFEFFFF FF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFE372D7CAC3E>I<00001F FC0000000001FFFFC000000007FFFFF00000001FFFFFFC0000007FF80FFF000000FFC001 FF800001FF8000FFC00003FE00003FE00007FE00003FF0000FFC00001FF8000FF800000F F8001FF800000FFC001FF800000FFC003FF800000FFE003FF0000007FE007FF0000007FF 007FF0000007FF007FF0000007FF007FF0000007FF00FFF0000007FF80FFF0000007FF80 FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FF F0000007FF80FFF0000007FF80FFF0000007FF807FF0000007FF007FF0000007FF007FF0 000007FF007FF0000007FF003FF800000FFE003FF800000FFE001FF800000FFC001FFC00 001FFC000FFC00001FF80007FE00003FF00007FE00003FF00003FF8000FFE00001FFC001 FFC000007FF80FFF0000003FFFFFFE0000000FFFFFF800000001FFFFC0000000001FFC00 0000312F7DAD38>I<007FC00FF80000FFFFC0FFFF8000FFFFC3FFFFE000FFFFCFFFFFF8 00FFFFDFC03FFC00FFFFFF001FFE0003FFFC0007FF0001FFF80003FF8001FFF00003FFC0 01FFE00001FFE001FFC00001FFE001FFC00000FFF001FFC00000FFF001FFC000007FF801 FFC000007FF801FFC000007FF801FFC000007FF801FFC000003FFC01FFC000003FFC01FF C000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC0 00003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000 007FF801FFC000007FF801FFC000007FF801FFC000007FF001FFC00000FFF001FFC00000 FFF001FFC00001FFE001FFE00001FFC001FFF00003FFC001FFF80007FF8001FFFC000FFF 0001FFFE001FFE0001FFDFC07FFC0001FFCFFFFFF00001FFC3FFFFC00001FFC0FFFF0000 01FFC01FF0000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001 FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF C00000000001FFC00000000001FFC00000000001FFC000000000FFFFFF80000000FFFFFF 80000000FFFFFF80000000FFFFFF80000000FFFFFF8000000036407DAC3E>I<007F807F 00FFFF81FFE0FFFF83FFF0FFFF8FFFF8FFFF8F8FFCFFFF9F1FFE03FFBE1FFE01FFBC1FFE 01FFF81FFE01FFF81FFE01FFF01FFE01FFF00FFC01FFE007F801FFE001E001FFE0000001 FFE0000001FFE0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FF C0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0 000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC000 0001FFC0000001FFC0000001FFC00000FFFFFFE000FFFFFFE000FFFFFFE000FFFFFFE000 FFFFFFE000272D7DAC2E>114 D<001FFC038000FFFF878003FFFFFF800FFFFFFF801FF0 03FF803FC000FF803F80003F807F00001F807E00001F80FE00000F80FE00000F80FE0000 0780FF00000780FF00000780FF80000780FFE0000000FFFE0000007FFFF000007FFFFF00 003FFFFFC0003FFFFFF0001FFFFFFC000FFFFFFE0003FFFFFF0001FFFFFF80007FFFFF80 000FFFFFC000003FFFC0000003FFE0000000FFE0F000003FE0F000003FE0F800001FE0F8 00000FE0F800000FE0FC00000FE0FC00000FE0FE00000FC0FF00001FC0FF00001FC0FF80 003F80FFE0007F00FFF803FE00FFFFFFFC00FCFFFFF800F03FFFE000E007FE0000232F7C AD2C>I<0001E000000001E000000001E000000001E000000001E000000003E000000003 E000000003E000000003E000000007E000000007E00000000FE00000000FE00000001FE0 0000001FE00000003FE00000007FE0000000FFE0000003FFE000000FFFFFFF80FFFFFFFF 80FFFFFFFF80FFFFFFFF80FFFFFFFF8000FFE0000000FFE0000000FFE0000000FFE00000 00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF E0000000FFE0000000FFE0000000FFE001E000FFE001E000FFE001E000FFE001E000FFE0 01E000FFE001E000FFE001E000FFE001E000FFE001E000FFE003E000FFF003C0007FF003 C0007FF007C0003FF80F80001FFC1F00000FFFFF000007FFFC000001FFF80000003FE000 23407EBE2C>I<007FC00001FF00FFFFC003FFFF00FFFFC003FFFF00FFFFC003FFFF00FF FFC003FFFF00FFFFC003FFFF0003FFC0000FFF0001FFC00007FF0001FFC00007FF0001FF C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF 0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0000FFF0001FFC0000FFF00 01FFC0001FFF0001FFC0001FFF0001FFC0003FFF0000FFC0003FFF0000FFE0007FFF8000 7FE001F7FFFE007FF807E7FFFE003FFFFFC7FFFE000FFFFF07FFFE0003FFFE07FFFE0000 7FF007FC00372E7CAC3E>III121 D<1FFFFFFFFF801FFFFFFFFF801FFFFFFFFF801FFFFFFFFF801FFC001FFF 001FE0003FFE001FC0003FFE001F80007FFC001F0000FFF8003F0001FFF0003E0001FFF0 003E0003FFE0003E0007FFC0003C000FFF80003C000FFF80003C001FFF00003C003FFE00 003C007FFC000000007FFC00000000FFF800000001FFF000000003FFE000000003FFE000 000007FFC00000000FFF800780001FFF000780001FFF000780003FFE000780007FFC000F 8000FFF8000F0000FFF8000F0001FFF0000F0003FFE0001F0007FFC0001F0007FFC0001F 000FFF80003F001FFF00007F003FFE0000FF003FFE0003FF007FFC001FFE00FFFFFFFFFE 00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE00292C7DAB32>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fd ecti1095 10.95 17 /Fd 17 119 df<000000018000000007800000000F000000001C00000000380000000070 00000000E000000001E000000003C000000007800000000F000000001E000000003E0000 00007C000000007800000000F000000001F000000003E000000003E000000007C0000000 07800000000F800000001F000000001F000000003E000000003E000000007C000000007C 00000000FC00000000F800000001F800000001F000000001F000000003F000000003E000 000007E000000007E000000007C00000000FC00000000FC00000000F800000000F800000 001F800000001F800000001F000000001F000000003F000000003F000000003E00000000 3E000000007E000000007E000000007C000000007C000000007C000000007C000000007C 000000007C00000000F800000000F800000000F800000000F800000000F800000000F800 000000F800000000F800000000F800000000F800000000F8000000007800000000780000 000078000000007800000000780000000078000000003C000000003C000000003C000000 003C000000001E000000001E000000000E000000000F0000000007000000000700000000 0380000000038000000001C000000000E00000000060000000215A73C325>40 D<000003000000038000000380000001C0000000E0000000E00000007000000070000000 78000000380000003C0000003C0000003C0000001E0000001E0000001E0000001E000000 1F0000001F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000 3F0000003F0000003E0000003E0000003E0000007E0000007E0000007C0000007C000000 FC000000FC000000F8000000F8000001F8000001F8000001F0000001F0000003F0000003 E0000003E0000007E0000007C0000007C000000F8000000F8000001F8000001F0000003F 0000003E0000003E0000007C0000007C000000F8000000F8000001F0000001E0000003E0 000007C00000078000000F8000001F0000001E0000003C0000007C000000F8000000F000 0001E0000003C00000078000000F0000001E0000003C00000070000000E0000000C00000 00205A7FC325>I<7FFFFC7FFFFC7FFFFCFFFFFCFFFFFC1605799520>45 D<000000FE00000007FF8000001F07C000007C01F00000F000F00001E000F80003C00078 0007C0007C000F80007C001F00007C001F00007E003E00007E007E00007E007E00007E00 FC00007E00FC00007E01F800007E01F800007E03F80000FE03F80000FE03F00000FE07F0 0000FC07F00000FC07E00001FC0FE00001FC0FE00001FC0FE00001FC1FC00003F81FC000 03F81FC00003F81FC00003F83F800007F03F800007F03F800007F03F800007F07F00000F E07F00000FE07F00000FE07F00000FC07E00001FC0FE00001FC0FE00001F80FE00003F80 FE00003F80FC00003F00FC00003F00FC00007E00FC00007E00FC0000FC00FC0000FC00FC 0000F800F80001F800F80001F000FC0003E0007C0003E0007C0007C0007C000F80003E00 1F00003E003E00001F007C00000FC1F0000003FFC0000000FE000000273F76BC2E>48 D<000000FE0000000003FFC00000000F01F00000003C00F800000078007C000000F0003E 000001E0003F000003C0001F00000380001F80000700001F80000F00001F80000E0C001F 80001E0C001FC0001C0E001FC0003C06001FC0003806001FC0007806001FC0007006001F C000700E003FC000F00C003F8000E00C003F8000E01C003F8000E018007F8001E018007F 0001C038007F0001C07000FE0001C06001FE0001C0E001FC0000E3C003F80000FF0007F0 00003C000FE0000000001FC0000000001F80000000007F0000000000FC0000000001F800 00000003F0000000000FC0000000001F00000000007E0000000000F80000000003E00000 000007C0000000001F00000000003E00000000007C0000180000F000003C0001E0000038 0003C00000380003C0000078000780000078000F000000F0000E000000F0001E000001E0 003FE00003E0003FFF0007C0007C3FF01FC000780FFFFF80007003FFFF0000F001FFFE00 00E0007FFC0000E0003FF80000E00007C000002A3F79BC2E>50 D<00703F0001C00070FF 8003C000F3FF80038000EFFFC0078000FFFFC00F0001FFFFC01E0001FF83C01E0003FE01 C03C0003F801C07C0007F000C0F80007E000E3F0000FC0007FF0000F80003FE0001F0000 01E0001E000003C0001E000007C0003C00000780003800000F80007800000F0000700000 1F0000F000003E0000E000003E0000E000007C00000000007C0000000000F80000000000 F80000000001F00000000001F00000000003F00000000003E00000000007E0000000000F C0000000000FC0000000001FC0000000001F80000000001F80000000003F00000000003F 00000000007F00000000007E0000000000FE0000000000FE0000000001FC0000000001FC 0000000001FC0000000003F80000000003F80000000003F80000000007F80000000007F0 000000000FF0000000000FF0000000000FE0000000001FE0000000001FE0000000001FE0 000000001FC0000000003FC0000000003FC0000000003FC0000000003F80000000003F00 000000001E000000002A3F73BC2E>55 D<0000007F8000000003FFE00000000FFFF00000 001FC0F80000007F007C000000FC003E000001F8003E000003F0003F000007E0001F0000 0FE0001F00000FC0001F00001F80001F80003F80001F80003F00001F80007F00001F8000 7F00001F8000FE00001F8000FE00003F8000FE00003F8001FE00003F8001FC00003F8001 FC00003F0001FC00007F0003FC00007F0003F800007F0003F80000FF0003F80000FF0003 F80000FE0003F80001FE0003F00001FE0001F00003FE0001F00003FC0001F80007FC0000 F8000FFC0000F8001FFC000078003BF800007C0073F800003E00E3F800001F03C7F00000 07FF07F0000001FC07F0000000000FE0000000000FE0000000000FC0000000001FC00000 00001F80000000003F00000000003F00000000007E00000000007E0000000000FC00003E 0001F800007F0003F000007F0003E000007F0007C00000FE000F800000FC001F00000070 003E0000007800FC0000007E03F80000003FFFE00000000FFF8000000003FC0000000029 3F78BC2E>57 D<0001FFFFFFFF80000001FFFFFFFFF0000001FFFFFFFFFC00000003FC00 01FE00000003FC00007F00000003F800003F80000003F800003FC0000003F800001FC000 0007F800001FC0000007F000001FE0000007F000001FE0000007F000000FE000000FF000 000FE000000FE000001FE000000FE000001FE000000FE000001FE000001FE000001FC000 001FC000003FC000001FC000003FC000001FC000003F8000003FC000007F0000003F8000 00FF0000003F800001FE0000003F800001FC0000007F800003F80000007F00000FF00000 007F00001FC00000007F00007F80000000FF0003FE00000000FFFFFFF000000000FFFFFF FE00000000FE00003F80000001FE00001FC0000001FC00000FE0000001FC000007F00000 01FC000003F8000003FC000003F8000003F8000001FC000003F8000001FC000003F80000 01FC000007F8000001FE000007F0000001FE000007F0000001FE000007F0000001FE0000 0FF0000001FC00000FE0000003FC00000FE0000003FC00000FE0000003F800001FE00000 07F800001FC0000007F800001FC000000FF000001FC000001FE000003FC000001FE00000 3F8000003FC000003F8000007F8000007F800000FF0000007F800003FE0000007F00000F F8000000FF00003FF000007FFFFFFFFFC00000FFFFFFFFFF000000FFFFFFFFF00000003B 3E7BBD3F>66 D<0001FFFFFFFF80000001FFFFFFFFF0000001FFFFFFFFFC00000003FC00 03FE00000003FC00007F80000003F800003F80000003F800000FC0000003F800000FE000 0007F8000007F0000007F0000003F0000007F0000003F8000007F0000001F800000FF000 0001F800000FE0000001FC00000FE0000000FC00000FE0000000FC00001FE0000000FC00 001FC0000000FE00001FC0000000FE00001FC0000000FE00003FC0000000FE00003F8000 0000FE00003F80000000FE00003F80000001FE00007F80000001FE00007F00000001FE00 007F00000001FE00007F00000001FC0000FF00000001FC0000FE00000003FC0000FE0000 0003FC0000FE00000003FC0001FE00000003F80001FC00000007F80001FC00000007F800 01FC00000007F00003FC0000000FF00003F80000000FF00003F80000000FE00003F80000 001FE00007F80000001FC00007F00000001FC00007F00000003F800007F00000003F8000 0FF00000007F00000FE00000007E00000FE0000000FE00000FE0000001FC00001FE00000 01F800001FC0000003F000001FC0000007F000001FC000000FE000003FC000001FC00000 3F8000003F8000003F8000007F0000007F800001FC0000007F800003F80000007F00000F E0000000FF00007FC000007FFFFFFFFF000000FFFFFFFFFC000000FFFFFFFFC00000003F 3E7BBD44>68 D<00007E00000001FF80000007C1C380001F80EFC0003F00FFC0007E007F C000FC007F8001F8003F8003F0003F8003F0003F8007E0003F000FE0003F000FC0003F00 1FC0007F001FC0007E003F80007E003F80007E003F8000FE007F8000FC007F0000FC007F 0000FC007F0001FC00FF0001F800FE0001F800FE0001F800FE0003F800FE0003F038FC00 03F038FC0003F038FC0007F038FC0007E078FC000FE0707C000FE0707C001FE0F07E003F E0E03E007FE0E03E00F3E1E01F01E3E1C00F8781E38003FF00FF0000FC003E00252977A7 2E>97 D<00001FC00000FFF00003F07C000FC01E001F000E003E000F007C001F00FC007F 01F8007F03F0007F07F0007E07E0007E0FE000381FC000001FC000003F8000003F800000 3F8000007F8000007F0000007F0000007F000000FF000000FE000000FE000000FE000000 FE000000FE000000FC000000FC000006FC00000E7E00001E7E00003C7E0000783E0000F0 3F0001E01F0007C00F800F0007C07E0001FFF000007F8000202977A729>99 D<00003F000001FFE00007C0F0001F0078007E007800FC003C01F8003C03F0003C07F000 3C0FE0007C0FC000781FC000783F8000F83F8001F07F8007E07F001FC07F01FF007FFFF8 00FFFF8000FE000000FE000000FE000000FE000000FC000000FC000000FC000000FC0000 00FC000000FC000000FC00000CFC00001CFC00003C7C0000787C0000F07E0001E03E0003 C01F000F800F001E000780FC0003FFE00000FF00001E2976A729>101 D<0000700001FC0001FC0001FC0001F80001F80000E00000000000000000000000000000 00000000000000000000000000000000000000000000000000007C0001FF00038F800707 800E07C01E07C01C07C03C0FC0380FC0380FC0781FC0701F80701F80F03F80F03F00003F 00007F00007E0000FE0000FC0000FC0001FC0001F80001F80003F80003F00003F03807F0 3807E0380FE0780FC0700FC0700FC0F00F80E00F80E00F81C00F83C00F838007870003FE 0000F800163D79BB1C>105 D<00000003800000000FC00000001FC00000001FC0000000 1FC00000001F800000000F00000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000007C00000003FF000000078F8000000E07C000001C07C000003C07C0000 03807E000007007E000007007E00000E00FE00000E00FC00001E00FC00001C00FC00003C 01FC00003C01FC00000001F800000001F800000003F800000003F800000003F000000003 F000000007F000000007F000000007E000000007E00000000FE00000000FE00000000FC0 0000000FC00000001FC00000001FC00000001F800000001F800000003F800000003F8000 00003F000000003F000000007F000000007F000000007E000000007E00000000FE000000 00FE00000000FC00000000FC00000001FC00000001F800000001F800000001F800003C03 F000007E03F00000FE07E00000FE07C00000FE0F800000FC1F000000F03E000000707C00 00003FF00000000FC0000000224F83BB1C>I<01F0003F80007F000007FC01FFE003FFC0 000F3E07C1F80F83F0000E1F0F00FC1E01F8001E1F1C007C3800F8001C1F38007E7000FC 003C1FF0007EE000FC00381FF0007FE000FC00381FE0007FC000FC00783FC0007F8000FC 00703FC0007F8000FC00703F80007F0000FC00703F00007E0000FC00F03F0000FE0001FC 00F07F0000FC0001F800007E0000FC0001F800007E0000FC0001F800007E0001FC0003F8 0000FE0001FC0003F00000FC0001F80003F00000FC0001F80003F00000FC0003F80007F0 0001FC0003F80007E00001F80003F00007E00001F80003F0000FE00001F80007F0000FC0 0003F80007F0001FC0E003F00007E0001F80E003F00007E0001F80E003F0000FE0003F81 E007F0000FE0003F01C007E0000FC0003F01C007E0000FC0003F01C007E0001FC0003E03 800FE0001FC0003E03800FC0001F80003E07000FC0001F80003E07000FC0003F80003E0E 001FC0003F80001E1C001F80003F00000FF8000700000E000003E000432979A74A>109 D<01F0003F800007FC01FFE0000F3E07C1F8000E1F0F00FC001E1F1C007C001C1F38007E 003C1FF0007E00381FF0007E00381FE0007E00783FC0007E00703FC0007E00703F80007E 00703F00007E00F03F0000FE00F07F0000FC00007E0000FC00007E0000FC00007E0001FC 0000FE0001F80000FC0001F80000FC0001F80000FC0003F80001FC0003F00001F80003F0 0001F80007F00001F80007E00003F8000FE07003F0000FC07003F0000FC07003F0001FC0 F007F0001F80E007E0001F80E007E0001F81E007E0001F01C00FE0001F01C00FC0001F03 800FC0001F03800FC0001F07001FC0000F0E001F800007FC0007000001F0002C2979A733 >I<007C00038001FF0007E0038F800FE00707800FE00E07C00FF01E07C00FF01C07C007 F03C0FC007F0380FC003F0380FC003E0781FC001E0701F8001E0701F8001E0F03F8001E0 F03F0001C0003F0001C0007F0001C0007E0003C0007E00038000FE00038000FC00038000 FC00078001FC00070001F800070001F800070001F8000E0003F8000E0003F0000E0003F0 001C0003F0001C0003F000380003F000380003F000700003F000700001F000E00001F001 C00001F803C00000F8078000007E0F0000001FFC00000007F00000242979A729>118 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe ectt1440 14.4 19 /Fe 19 119 df<00000007FE00000000000FFF00000000000FFF00000000001FFF000000 00001FFF00000000003FFF00000000007FBF00000000007F3F0000000000FF3F00000000 01FE3F0000000001FE3F0000000003FC3F0000000003F83F0000000007F83F000000000F F03F000000000FE03F000000001FE03F000000003FC03F000000003FC03F000000007F80 3F000000007F003F00000000FF003F00000001FE003F00000001FC003F00000003FC003F 00000007F8003F00000007F8003F0000000FF0003F0000000FE0003F0000001FE0003F00 00003FC0003F0000003F80003F0000007F80003F000000FF00003F000000FF00003F0000 01FE00003F000001FC00003F000003FC00003F000007F800003F000007F000003F00000F F000003F00001FE000003F00001FE000003F00003FC000003F00003F8000003F00007F80 00003F0000FF0000003F0000FFFFFFFFFFFFF8FFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFF FFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFC7FFFFFFFFFFFF8000000003F000000000000 3F0000000000003F0000000000003F0000000000003F0000000000003F0000000000003F 0000000000003F0000000000003F0000000000003F0000000000003F0000000000003F00 00000000003F0000000000003F0000000000FFFFFFC0000001FFFFFFE0000003FFFFFFF0 000003FFFFFFF0000003FFFFFFF0000001FFFFFFE0000000FFFFFFC0364B7DCA3D>52 D<0000007FF000000003FFFE0000000FFFFF8000003FFFFFC00000FFFFFFE00001FFFFFF F00007FFFFFFF8000FFFE01FF8001FFE0007FC003FF80003FC007FF00007FC007FC00007 FC00FF800007FC01FF000007FC03FE000003F803FC000001F007FC0000000007F8000000 000FF0000000000FF0000000001FE0000000001FC0000000003FC0000000003FC0000000 003F80000000003F80000000007F8007FF00007F007FFFC0007F01FFFFF0007F07FFFFFC 00FF1FFFFFFE00FE3FFFFFFF00FE7FFFFFFF80FEFFF807FFC0FFFF8000FFE0FFFE00007F F0FFFC00001FF0FFF800000FF8FFF0000007F8FFE0000007FCFFC0000003FCFF80000001 FEFF80000001FEFF80000000FEFF00000000FFFF00000000FFFF000000007FFF00000000 7F7F000000007F7F000000007F7F800000007F7F000000007F7F800000007F7F80000000 7F3F800000007F3F80000000FF3FC0000000FE1FC0000000FE1FE0000001FE1FE0000001 FE0FF0000003FC0FF0000007FC07F800000FF807FC00001FF003FE00003FF001FF00007F E001FFC001FFC000FFF80FFF80007FFFFFFF00003FFFFFFE00001FFFFFFC000007FFFFF8 000003FFFFE0000000FFFF800000001FFC0000304B7AC93D>54 D<7FFFFFFFC00000FFFF FFFFF80000FFFFFFFFFE0000FFFFFFFFFF8000FFFFFFFFFFC000FFFFFFFFFFE0007FFFFF FFFFF00001FC00007FF80001FC00000FFC0001FC000007FC0001FC000003FE0001FC0000 01FF0001FC000000FF0001FC0000007F0001FC0000007F8001FC0000003F8001FC000000 3F8001FC0000003F8001FC0000003F8001FC0000003F8001FC0000003F8001FC0000003F 8001FC0000007F8001FC0000007F0001FC000000FF0001FC000000FE0001FC000001FE00 01FC000003FC0001FC000007FC0001FC00001FF80001FC00007FF00001FC000FFFE00001 FFFFFFFFC00001FFFFFFFF000001FFFFFFFC000001FFFFFFFF000001FFFFFFFFC00001FF FFFFFFE00001FFFFFFFFF00001FC00000FFC0001FC000007FC0001FC000001FE0001FC00 0000FF0001FC0000007F8001FC0000003F8001FC0000003FC001FC0000001FC001FC0000 001FC001FC0000001FC001FC0000000FE001FC0000000FE001FC0000000FE001FC000000 0FE001FC0000000FE001FC0000000FE001FC0000000FE001FC0000001FE001FC0000001F C001FC0000001FC001FC0000003FC001FC0000007FC001FC000000FF8001FC000001FF80 01FC000003FF0001FC00000FFF0001FC00003FFE007FFFFFFFFFFC00FFFFFFFFFFF800FF FFFFFFFFF000FFFFFFFFFFE000FFFFFFFFFF8000FFFFFFFFFE00007FFFFFFFF000003349 7CC83D>66 D<3FFFFFFF0000007FFFFFFFE00000FFFFFFFFF80000FFFFFFFFFE0000FFFF FFFFFF00007FFFFFFFFF80003FFFFFFFFFC00001FC0003FFE00001FC0000FFF00001FC00 003FF80001FC00000FF80001FC000007FC0001FC000003FE0001FC000001FE0001FC0000 01FF0001FC000000FF0001FC0000007F8001FC0000007F8001FC0000003FC001FC000000 3FC001FC0000001FC001FC0000001FE001FC0000000FE001FC0000000FE001FC0000000F F001FC00000007F001FC00000007F001FC00000007F001FC00000007F001FC00000007F0 01FC00000003F801FC00000003F801FC00000003F801FC00000003F801FC00000003F801 FC00000003F801FC00000003F801FC00000003F801FC00000003F801FC00000003F801FC 00000003F801FC00000003F801FC00000003F801FC00000003F801FC00000007F001FC00 000007F001FC00000007F001FC00000007F001FC0000000FF001FC0000000FF001FC0000 000FE001FC0000001FE001FC0000001FE001FC0000001FC001FC0000003FC001FC000000 3FC001FC0000007F8001FC000000FF8001FC000000FF0001FC000001FF0001FC000003FE 0001FC000007FC0001FC00000FFC0001FC00003FF80001FC00007FF00001FC0003FFE000 3FFFFFFFFFC0007FFFFFFFFF8000FFFFFFFFFF0000FFFFFFFFFE0000FFFFFFFFF800007F FFFFFFE000003FFFFFFF00000035497DC83D>68 D<7FFFFFFC00000000FFFFFFFF800000 00FFFFFFFFF0000000FFFFFFFFF8000000FFFFFFFFFE000000FFFFFFFFFF0000007FFFFF FFFF80000001FC000FFFC0000001FC0001FFE0000001FC00007FF0000001FC00001FF000 0001FC00000FF8000001FC000007F8000001FC000003FC000001FC000003FC000001FC00 0001FC000001FC000001FE000001FC000000FE000001FC000000FE000001FC000000FE00 0001FC000000FE000001FC000000FE000001FC000000FE000001FC000001FE000001FC00 0001FC000001FC000003FC000001FC000003FC000001FC000007F8000001FC00000FF800 0001FC00001FF0000001FC00007FF0000001FC0001FFE0000001FC000FFFC0000001FFFF FFFF80000001FFFFFFFF00000001FFFFFFFE00000001FFFFFFF800000001FFFFFFFC0000 0001FFFFFFFE00000001FFFFFFFF00000001FC000FFF80000001FC0001FF80000001FC00 007FC0000001FC00003FE0000001FC00001FE0000001FC00000FE0000001FC00000FF000 0001FC000007F0000001FC000007F0000001FC000007F0000001FC000007F0000001FC00 0007F0000001FC000007F0000001FC000007F0000001FC000007F0000001FC000007F000 0001FC000007F0000001FC000007F0000001FC000007F0000001FC000007F01F0001FC00 0007F03F8001FC000007F03F8001FC000007F03F8001FC000007F03F8001FC000007F83F 8001FC000003F87F807FFFF00003FC7F00FFFFF80003FFFF00FFFFF80001FFFE00FFFFF8 0001FFFE00FFFFF80000FFFC00FFFFF800007FF8007FFFF000003FF00000000000000FC0 00394A7DC83D>82 D<0000FFE000F00007FFFC00F8001FFFFF81F8007FFFFFE1F801FFFF FFF1F803FFFFFFFBF807FFFFFFFFF80FFF803FFFF80FFC0007FFF81FF00001FFF83FE000 00FFF83FC000003FF87F8000003FF87F8000001FF87F0000000FF8FF0000000FF8FE0000 0007F8FE00000007F8FE00000007F8FE00000003F8FE00000003F8FE00000003F8FF0000 0003F87F00000001F07F00000000007F80000000003FC0000000003FE0000000001FF000 0000001FFC000000000FFF0000000007FFF000000003FFFF00000001FFFFF80000007FFF FF8000003FFFFFE000000FFFFFF8000001FFFFFE0000001FFFFF00000001FFFF80000000 1FFFC000000001FFE0000000003FF0000000001FF80000000007F80000000003FC000000 0003FC0000000001FE0000000000FE0000000000FE0000000000FF7C000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFF000000007FFF0000 0000FFFF00000000FEFF80000000FEFF80000001FEFFC0000003FCFFE0000007FCFFF800 000FF8FFFC00001FF8FFFF80007FF0FFFFF801FFE0FFFFFFFFFFC0FEFFFFFFFF80FC7FFF FFFF00FC1FFFFFFE00FC07FFFFF800F800FFFFE00078000FFF0000304B7AC93D>I<3FFF FFFFFFFFF87FFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFFFFFFFFFCFFFFFF FFFFFFFCFFFFFFFFFFFFFCFE0000FE0001FCFE0000FE0001FCFE0000FE0001FCFE0000FE 0001FCFE0000FE0001FCFE0000FE0001FCFE0000FE0001FCFE0000FE0001FCFE0000FE00 01FC7C0000FE0000F8000000FE000000000000FE000000000000FE000000000000FE0000 00000000FE000000000000FE000000000000FE000000000000FE000000000000FE000000 000000FE000000000000FE000000000000FE000000000000FE000000000000FE00000000 0000FE000000000000FE000000000000FE000000000000FE000000000000FE0000000000 00FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000 FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000FE 000000000000FE000000000000FE000000000000FE000000000000FE000000000000FE00 0000000000FE000000000000FE000000000000FE000000000000FE000000000000FE0000 00000000FE000000000000FE000000000000FE000000000000FE000000000000FE000000 000000FE000000000000FE000000000000FE000000000000FE0000000001FFFFFF000000 03FFFFFF80000003FFFFFF80000003FFFFFF80000003FFFFFF80000003FFFFFF80000001 FFFFFF000036497DC83D>I<1FFFE000FFFF803FFFF001FFFFC07FFFF801FFFFE07FFFF8 01FFFFE07FFFF801FFFFE03FFFF001FFFFC01FFFE000FFFF80007F80000FE000007F8000 1FE000003FC0001FC000003FC0003FC000001FE0003F8000001FE0007F8000000FF0007F 0000000FF000FF00000007F800FE00000007F801FE00000003FC01FC00000001FC03FC00 000001FE03F800000000FE07F800000000FF07F0000000007F0FF0000000007F8FE00000 00003F9FE0000000003FDFC0000000001FFFC0000000001FFF80000000000FFF80000000 000FFF000000000007FF000000000007FE000000000003FE000000000001FC0000000000 01FC000000000003FE000000000003FE000000000007FF000000000007FF00000000000F FF80000000000FFF80000000001FFFC0000000001FDFC0000000003F9FE0000000003F8F E0000000007F07F0000000007F07F000000000FE03F800000000FE03F800000001FE01FC 00000001FC01FE00000003FC00FE00000003F800FF00000007F8007F00000007F0007F80 00000FF0003F8000000FE0003FC000001FE0001FC000001FC0001FE000003FC0000FE000 003F80000FF000007F800007F000007F000007F80000FF000003F80000FE000003FC0001 FE000001FE007FFFC0000FFFF0FFFFE0001FFFF8FFFFF0003FFFFCFFFFF0003FFFFCFFFF F0003FFFFCFFFFE0001FFFF87FFFC0000FFFF036497DC83D>88 D<000FFFC000000000FF FFF800000003FFFFFE00000007FFFFFF8000000FFFFFFFC000000FFFFFFFE000001FFFFF FFF000001FF800FFF800001FF0001FFC00001FF00007FC00001FF00003FE00000FE00001 FE000007C00000FF0000000000007F0000000000007F8000000000003F8000000000003F 8000000000003F8000000000003F8000000000003F8000000000003F80000000007FFF80 0000001FFFFF80000001FFFFFF8000000FFFFFFF8000003FFFFFFF800000FFFFFFFF8000 03FFFFFC3F800007FFFC003F80000FFFC0003F80001FFE00003F80003FF000003F80003F E000003F80007F8000003F80007F0000003F8000FF0000003F8000FE0000003F8000FE00 00003F8000FE0000003F8000FE0000003F8000FE0000003F8000FF0000007F80007F0000 007F80007F800000FF80007FC00003FF80003FF0000FFFE0003FFE00FFFFFFF01FFFFFFF FFFFF80FFFFFFFFFFFF807FFFFFFCFFFF803FFFFFF07FFF801FFFFFC03FFF8007FFFE000 7FF0000FFE00000000353679B43D>97 D<00000FFFC0000000FFFFFC000003FFFFFF0000 07FFFFFF80001FFFFFFFC0003FFFFFFFC0007FFFFFFFE000FFF8007FE001FFC0003FE003 FF00003FE007FE00003FE007FC00001FC00FF800000F801FF0000000001FE0000000003F C0000000003FC0000000003F80000000007F80000000007F00000000007F00000000007F 0000000000FF0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE 0000000000FE0000000000FE0000000000FE0000000000FE0000000000FF00000000007F 00000000007F00000000007F80000000007F80000000003FC0000000003FE0000001F01F E0000003F81FF0000003F80FF8000007F80FFC000007F007FF00000FF003FF80001FE003 FFF0007FE001FFFE01FFC000FFFFFFFF80003FFFFFFF00001FFFFFFE00000FFFFFFC0000 03FFFFF0000000FFFFC00000001FFC00002D3677B43D>99 D<00001FF800000000FFFF80 000003FFFFE000000FFFFFF800001FFFFFFC00003FFFFFFE00007FFFFFFF0000FFF80FFF 8001FFC001FFC003FF00007FE007FC00001FE00FF800000FF00FF000000FF01FE0000007 F81FE0000003F83FC0000003F83F80000003FC3F80000001FC7F80000001FC7F00000001 FC7F00000001FEFF00000000FEFE00000000FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFF FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFE0000000000FF00000000 007F00000000007F00000000007F00000000007F80000000003F80000000003FC0000000 001FE00000007C1FE0000000FE0FF0000000FE0FF8000000FE07FC000001FE03FF000003 FC03FF800007FC01FFF0001FF800FFFE00FFF0007FFFFFFFE0003FFFFFFFC0000FFFFFFF 800007FFFFFF000001FFFFFC0000007FFFE000000007FF00002F3679B43D>101 D<00003C00000000007E0000000000FF0000000001FF8000000001FF8000000001FF8000 000001FF8000000000FF00000000007E00000000003C0000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000001FFFFF0000 003FFFFF8000007FFFFF8000007FFFFF8000007FFFFF8000003FFFFF8000001FFFFF8000 0000003F80000000003F80000000003F80000000003F80000000003F80000000003F8000 0000003F80000000003F80000000003F80000000003F80000000003F80000000003F8000 0000003F80000000003F80000000003F80000000003F80000000003F80000000003F8000 0000003F80000000003F80000000003F80000000003F80000000003F80000000003F8000 0000003F80000000003F80000000003F80000000003F80000000003F80000000003F8000 0000003F80000000003F80000000003F80000000003F80000000003F80000000003F8000 0000003F8000003FFFFFFFFE007FFFFFFFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF 807FFFFFFFFF003FFFFFFFFE00294A76C93D>105 D<3FFFFF8000007FFFFFC00000FFFF FFC00000FFFFFFC00000FFFFFFC000007FFFFFC000003FFFFFC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000000 1FC0000000001FC0000000001FC0000000001FC000003FFFFFFFFFE07FFFFFFFFFF0FFFF FFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF87FFFFFFFFFF03FFFFFFFFFE02D4978C83D>108 D<00001FC000FE00007FE0FFF007FF8000FFF1FFF80FFFC000FFF7FFFC3FFFE000FFFFFF FC7FFFE000FFFFFFFEFFFFF000FFFFFFFEFFFFF0007FFFE0FFFF07F80003FF807FFC03F8 0003FF003FF801F80003FE003FF001FC0003FC003FE001FC0003FC001FE000FC0003FC00 1FE000FC0003F8001FC000FC0003F8001FC000FC0003F8001FC000FC0003F0001F8000FC 0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F000 1F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC 0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F000 1F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC 0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F000 1F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC 007FFF81FFFC0FFFE0FFFFC3FFFE1FFFF0FFFFC7FFFE3FFFF0FFFFC7FFFE3FFFF0FFFFC7 FFFE3FFFF0FFFFC3FFFE1FFFF07FFF81FFFC0FFFE03C3480B33D>I<0000001FF000007F FE00FFFC0000FFFF03FFFF0000FFFF0FFFFFC000FFFF3FFFFFE000FFFF7FFFFFF000FFFF FFFFFFF8007FFFFFC07FFC00007FFF000FFE00007FFC0007FE00007FF80001FF00007FF0 0000FF00007FE00000FF80007FC000007F80007F8000003FC0007F8000003FC0007F8000 001FE0007F0000001FE0007F0000000FE0007F0000000FE0007F0000000FF0007F000000 0FF0007F00000007F0007F00000007F0007F00000007F0007F00000007F0007F00000007 F0007F00000007F0007F00000007F0007F00000007F0007F00000007F0007F0000000FF0 007F0000000FF0007F0000000FE0007F8000000FE0007F8000001FE0007F8000001FC000 7FC000003FC0007FC000003FC0007FE000007F80007FE00000FF80007FF00001FF00007F F80003FF00007FFC0007FE00007FFE001FFC00007FFFC0FFF800007FFFFFFFF800007F7F FFFFE000007F3FFFFFC000007F0FFFFF8000007F07FFFE0000007F01FFF80000007F003F E00000007F0000000000007F0000000000007F0000000000007F0000000000007F000000 0000007F0000000000007F0000000000007F0000000000007F0000000000007F00000000 00007F0000000000007F0000000000007F0000000000007F0000000000007F0000000000 007F0000000000007F0000000000007F0000000000007F00000000007FFFFF00000000FF FFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF800000007FFF FF00000000344F7DB33D>112 D<000000001FF8007FFFE000FFFF00FFFFF007FFFF80FF FFF01FFFFFC0FFFFF03FFFFFC0FFFFF07FFFFFE0FFFFF1FFFFFFE07FFFF3FFF03FE00007 F7FF803FE00007F7FE001FC00007FFF8000F800007FFF00000000007FFE00000000007FF C00000000007FF800000000007FF000000000007FE000000000007FE000000000007FC00 0000000007FC000000000007F8000000000007F8000000000007F8000000000007F80000 00000007F0000000000007F0000000000007F0000000000007F0000000000007F0000000 000007F0000000000007F0000000000007F0000000000007F0000000000007F000000000 0007F0000000000007F0000000000007F0000000000007F0000000000007F00000000000 07F0000000000007F0000000000007F0000000000007F0000000000007F0000000000007 F0000000007FFFFFFFE00000FFFFFFFFF00000FFFFFFFFF80000FFFFFFFFF80000FFFFFF FFF80000FFFFFFFFF000007FFFFFFFE0000033347BB33D>114 D<0001FFF00F00001FFF FE0F8000FFFFFF9F8003FFFFFFFF8007FFFFFFFF800FFFFFFFFF801FFFFFFFFF803FFF00 1FFF807FF00007FF807FC00001FF807F800000FF80FF0000007F80FE0000007F80FE0000 003F80FE0000003F80FE0000003F80FF0000003F807F0000003F807F8000001F007FE000 0000003FFC000000001FFFE00000000FFFFF00000007FFFFFC000001FFFFFF8000007FFF FFE000000FFFFFF8000000FFFFFE00000007FFFF000000001FFF8000000001FFC0000000 007FE07C0000001FE0FE0000000FF0FE00000007F0FE00000007F8FF00000003F8FF0000 0003F8FF00000003F8FF80000003F8FFC0000003F8FFC0000007F8FFE000000FF0FFF000 000FF0FFF800003FF0FFFE0000FFE0FFFFC007FFC0FFFFFFFFFFC0FFFFFFFFFF80FCFFFF FFFF00FC3FFFFFFC00FC0FFFFFF000F803FFFFC00078007FFC00002D3678B43D>I<0000 780000000000FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001 FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001 FC0000000001FC0000000001FC0000003FFFFFFFFFF87FFFFFFFFFFCFFFFFFFFFFFCFFFF FFFFFFFCFFFFFFFFFFFCFFFFFFFFFFFC7FFFFFFFFFF80001FC0000000001FC0000000001 FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001 FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001 FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001 FC0000000001FC0000000001FC0000000001FC0000000001FC00003E0001FC00007F0001 FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001 FC00007F0001FE0000FF0001FE0001FE0000FF0003FE0000FF8007FC00007FF01FFC0000 7FFFFFF800003FFFFFF000003FFFFFE000001FFFFF80000007FFFF00000003FFFC000000 007FC00030437DC13D>I<7FFFE0001FFFF8FFFFF0003FFFFCFFFFF8007FFFFCFFFFF800 7FFFFCFFFFF8007FFFFCFFFFF0003FFFFC7FFFE0001FFFF800FC000000FC0000FC000000 FC0000FE000001FC00007E000001F800007E000001F800007F000003F800003F000003F0 00003F000003F000003F800007F000001F800007E000001F800007E000001FC0000FE000 000FC0000FC000000FC0000FC000000FE0001FC0000007E0001F80000007E0001F800000 07F0003F80000003F0003F00000003F0003F00000003F8007F00000001F8007E00000001 F8007E00000001FC00FE00000000FC00FC00000000FC00FC00000000FE01FC000000007E 01F8000000007E01F8000000007F03F8000000003F03F0000000003F03F0000000003F87 F0000000001F87E0000000001F87E0000000001FCFE0000000000FCFC0000000000FCFC0 000000000FFFC00000000007FF800000000007FF800000000007FF800000000003FF0000 00000003FF000000000000FC00000036347DB23D>118 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff ecrm1095 10.95 75 /Ff 75 123 df<000003FF000FE000001FFFC07FF80000FE00F1F81C0001F8003BE07E00 07E0007FC0FF000FC001FFC0FF001F8001FF80FF003F0001FF00FF007F0001FF00FF007E 0001FF007E00FE0000FE000000FC00007E000000FC00007E000000FC00007E000000FC00 007E000000FC00007E000000FC00007E000000FC00007E000000FC00007E000000FC0000 7E000000FC00007E000000FC00007E000000FC00007E000000FC00007E000000FC00007E 0000FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF8000FC00007E000000FC00007E00 0000FC00007E000000FC00007E000000FC00007E000000FC00007E000000FC00007E0000 00FC00007E000000FC00007E000000FC00007E000000FC00007E000000FC00007E000000 FC00007E000000FC00007E000000FC00007E000000FC00007E000000FC00007E000000FC 00007E000000FC00007E000000FC00007E000000FC00007E000000FC00007E000000FC00 007E000000FC00007E000000FC00007E000000FC00007E000000FC00007E000000FC0000 7E000000FC00007E000000FC00007E000000FC00007E000000FC00007E000001FE0000FF 00007FFFF83FFFFF007FFFF83FFFFF007FFFF83FFFFF0038407FBF35>27 D<000003FE000000001FFFC0000000FE01E0000001F80078000007E0001C00000FC0007C 00001F8000FE00003F0001FE00007F0001FE00007E0001FE0000FE0001FE0000FC0000FC 0000FC0000780000FC0000000000FC0000000000FC0000000000FC0000000000FC000000 0000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC000000 0000FC00007E00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE0000FC0001FE0000FC0000FE 0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E 0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E 0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E 0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E 0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E 0001FE0000FF007FFFF83FFFFC7FFFF83FFFFC7FFFF83FFFFC2E407FBF32>I<000003FF 000000001FFFEE000000FE00FE000001F800FE000007E001FE00000FC001FE00001F8001 FE00003F0001FE00007F0001FE00007E0000FE0000FE00007E0000FC00007E0000FC0000 7E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC0000 7E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC0000 7E00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE0000FC00007E0000FC00007E0000FC0000 7E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC0000 7E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC0000 7E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC0000 7E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC0000 7E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0000FC00007E0001FE0000 FF007FFFF83FFFFC7FFFF83FFFFC7FFFF83FFFFC2E407FBF32>I<3E001F007F003F807F 003F80FF807FC07F003F807F003F807F003F807F003F807F003F807F003F807F003F807F 003F807F003F807E001F803E001F003E001F003E001F003E001F003E001F003E001F003E 001F003E001F003E001F001C000E001C000E001C000E001C000E001C000E001C000E001C 000E001C000E001C000E00180006001A2177BF2D>34 D<1C007F00FF80FF80FFC0FFC0FF C07FC01CC000C000C000C000C000C001C00180018003800300070006000E000C001C0038 00700060000A1B78BE19>39 D<0000300000700000E00001C0000380000700000F00001E 00003C00003C0000780000F00000F00001E00001E00003C00003C00007C0000780000F80 000F80000F00001F00001F00001E00003E00003E00003E00003C00007C00007C00007C00 007C00007C00007C0000780000F80000F80000F80000F80000F80000F80000F80000F800 00F80000F80000F80000F80000F80000F80000F80000F80000F80000F800007800007C00 007C00007C00007C00007C00007C00003C00003E00003E00003E00001E00001F00001F00 000F00000F80000F800007800007C00003C00003C00001E00001E00000F00000F0000078 00003C00003C00001E00000F000007000003800001C00000E0000070000030145A77C323 >II<000000060000000000 000006000000000000000600000000000000060000000000000006000000000000000600 000000000000060000000000000006000000000000000600000000000000060000000000 000006000000000000000600000000000000060000000000000006000000000000000600 000000000000060000000000000006000000000000000600000000000000060000000000 000006000000000000000600000000000000060000000000000006000000000000000600 000000000000060000000000000006000000000000000600000000000000060000000000 00000600000000FFFFFFFFFFFFFFE0FFFFFFFFFFFFFFE000000006000000000000000600 000000000000060000000000000006000000000000000600000000000000060000000000 000006000000000000000600000000000000060000000000000006000000000000000600 000000000000060000000000000006000000000000000600000000000000060000000000 000006000000000000000600000000000000060000000000000006000000000000000600 000000000000060000000000000006000000000000000600000000000000060000000000 000006000000000000000600000000000000060000000000000006000000000000000600 0000003B3C7BB446>43 D<1C007F00FF80FF80FFC0FFC0FFC07FC01CC000C000C000C000 C000C001C00180018003800300070006000E000C001C003800700060000A1B788819>I< FFFFFEFFFFFEFFFFFEFFFFFEFFFFFE17057F951E>I<1C007F00FF80FF80FF80FF80FF80 7F001C000909788819>I<00000000C000000000C000000001C000000001800000000180 000000038000000003000000000700000000060000000006000000000E000000000C0000 00000C000000001C00000000180000000018000000003800000000300000000030000000 0070000000006000000000E000000000C000000000C000000001C0000000018000000001 80000000038000000003000000000300000000070000000006000000000E000000000C00 0000000C000000001C000000001800000000180000000038000000003000000000300000 0000700000000060000000006000000000E000000000C000000001C00000000180000000 01800000000380000000030000000003000000000700000000060000000006000000000E 000000000C000000000C000000001C000000001800000000380000000030000000003000 000000700000000060000000006000000000E000000000C000000000C000000001C00000 000180000000038000000003000000000300000000070000000006000000000600000000 0E000000000C000000000C000000001C0000000018000000001800000000380000000030 00000000700000000060000000006000000000E000000000C000000000C000000000225B 7BC32D>I<0003FC0000001FFF8000003E07C00000F801F00001F000F80003E0007C0003 C0003C0007C0003E000F80001F000F80001F001F00000F801F00000F803F00000FC03F00 000FC03F00000FC03F00000FC07E000007E07E000007E07E000007E07E000007E07E0000 07E0FE000007F0FE000007F0FE000007F0FE000007F0FE000007F0FE000007F0FE000007 F0FE000007F0FE000007F0FE000007F0FE000007F0FE000007F0FE000007F0FE000007F0 FE000007F0FE000007F0FE000007F0FE000007F0FE000007F0FE000007F0FE000007F07E 000007E07E000007E07E000007E07E000007E07F00000FE03F00000FC03F00000FC03F00 000FC03F00000FC01F00000F801F80001F800F80001F000F80001F0007C0003E0007C000 3E0003E0007C0001F000F80000F801F000003E07C000001FFF80000003FC0000243F7CBC 2D>I<0000C0000003C0000007C000001FC000007FC00007FFC000FFFFC000FF9FC000F8 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000007FF000FFFFFFF8FFFFFFF8FFFFFFF81D3D78BC2D >I<0007FC0000003FFF800000FFFFE00001F00FF800078003FC000F0001FE000E0000FF 001C00007F803800003FC03000003FC07000001FE06000001FE06000001FE0FE00000FF0 FF00000FF0FF80000FF0FF80000FF0FF80000FF0FF80000FF0FF80000FF07F00000FF01C 00000FF00000000FE00000001FE00000001FE00000001FC00000003FC00000003F800000 007F800000007F00000000FE00000001FC00000001FC00000003F800000007F00000000F E00000000FC00000001F800000003E000000007C00000000F800000001F000000003E000 000003C000000007800000000F000030001E000030003C000030007800003000F0000060 01E000006003C0000060078000006007000000E00FFFFFFFE01FFFFFFFE03FFFFFFFE07F FFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0243D7CBC2D>I<0007FC0000003FFF8000 00FFFFE00001F807F80007C003FC000F0001FE000E0000FF001C00007F801F80007F803F C0003FC03FE0003FC03FE0003FC03FE0003FC03FE0003FC03FE0003FC01FC0003FC00700 003FC00000003F800000007F800000007F800000007F00000000FF00000000FE00000001 FC00000003F800000003F00000000FC00000003F0000001FFC0000001FFF800000000FE0 00000003F800000001FC00000000FE000000007F000000007F800000003FC00000003FC0 0000003FE00000003FE00000001FE00000001FF00000001FF00C00001FF03F00001FF07F 80001FF0FFC0001FF0FFC0001FF0FFC0001FF0FFC0001FF0FFC0003FE0FF80003FE07F00 003FC07000003FC07000007F803800007F801C0000FF000F0001FE0007C003FC0003F80F F00000FFFFE000003FFF80000007FC0000243F7CBC2D>I<0000000E000000000E000000 001E000000003E000000003E000000007E00000000FE00000000FE00000001FE00000003 FE00000003FE00000006FE0000000EFE0000000CFE00000018FE00000038FE00000030FE 00000060FE000000E0FE000000C0FE00000180FE00000380FE00000300FE00000600FE00 000E00FE00000C00FE00001800FE00003800FE00003000FE00006000FE0000E000FE0000 C000FE00018000FE00038000FE00030000FE00060000FE000E0000FE000C0000FE001800 00FE00380000FE00300000FE00600000FE00E00000FE00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE 00000000FE00000000FE00000000FE00000000FE00000000FE00000001FF000001FFFFFF 0001FFFFFF0001FFFFFF283E7EBD2D>I<060000030007C0000F0007F800FE0007FFFFFC 0007FFFFFC0007FFFFF00007FFFFE00007FFFFC00007FFFF0000063FF800000600000000 060000000006000000000600000000060000000006000000000600000000060000000006 0000000006000000000600000000060000000006000000000601FE0000060FFF8000063E 03E000067001F80006E000FC0007C0007E000780003F000700003F800600001F80000000 1FC00000001FC00000001FE00000000FE00000000FE00000000FE00000000FF00000000F F00000000FF00000000FF03E00000FF07F00000FF0FF80000FF0FF80000FF0FF80000FF0 FF80000FF0FF00000FE0FE00001FE0E000001FE06000001FC07000001FC03000003F8038 00003F801C00007F001E0000FE000F0001FC0007C003F80003F00FE00000FFFFC000003F FF00000007F80000243F7CBC2D>I<00001FE0000000FFF8000003FFFE00000FF01F0000 1F800780003F000380007E000FC000FC001FC001F8003FC003F0003FC003F0003FC007E0 003FC00FE0001F800FC0000F001FC00000001FC00000001F800000003F800000003F8000 00003F800000007F800000007F000000007F01FE00007F07FF8000FF0E03E000FF1C01F0 00FF3800FC00FF70007E00FF60003E00FFE0003F00FFC0001F80FFC0001FC0FF80001FC0 FF80001FE0FF80000FE0FF80000FE0FF00000FF0FF00000FF0FF00000FF0FF00000FF0FF 00000FF0FF00000FF07F00000FF07F00000FF07F00000FF07F00000FF07F00000FF03F80 000FF03F80000FE03F80000FE01F80000FE01F80001FC01FC0001FC00FC0001F800FC000 3F8007E0003F0003F0007E0001F800FC0000FC01F800007E07F000003FFFE000000FFF80 000003FC0000243F7CBC2D>I<300000000038000000003E000000003FFFFFFFFC3FFFFF FFFC3FFFFFFFFC3FFFFFFFF87FFFFFFFF87FFFFFFFF07FFFFFFFE070000000E060000001 C0600000038060000003006000000700C000000E00C000000C00C000001C00C000003800 00000030000000007000000000E000000001C00000000180000000038000000007000000 0007000000000E000000000E000000001C000000001C000000003C000000003800000000 78000000007800000000F800000000F000000001F000000001F000000001F000000003F0 00000003F000000003F000000007F000000007E000000007E000000007E00000000FE000 00000FE00000000FE00000000FE00000000FE00000001FE00000001FE00000001FE00000 001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0000000 0FC00000000780000026407BBD2D>I<0003FC0000001FFF8000007FFFE00000FC03F800 01E000FC0003C0003E000780001F000F00000F000E00000F801E000007801C000007C03C 000003C03C000003C03C000003C03E000003C03E000003C03F000003C03F000007C03F80 0007801FE0000F801FF0000F001FFC001E000FFE003C000FFF80780007FFC0F00003FFF1 E00001FFFF800000FFFF0000003FFF0000001FFFC000000FFFE000001FFFF8000078FFFC 0001F07FFE0003C01FFF0007800FFF800F0003FFC01F0001FFC01E00007FE03C00003FE0 7C00000FE078000007F078000003F0F8000003F0F0000001F0F0000001F0F0000000F0F0 000000F0F0000000F0F0000000F0F8000000E078000001E078000001E07C000001C03E00 0003C01E000007801F00000F000FC0001E0007E0007C0001FC03F80000FFFFE000001FFF 80000003FC0000243F7CBC2D>I<0003FC0000001FFF0000003FFFC00000FE07F00001F8 01F80003F000FC0007E0007C000FE0007E001FC0003F001F80003F003F80001F803F8000 1F807F80001F807F00001FC07F00001FC0FF00001FC0FF00000FE0FF00000FE0FF00000F E0FF00000FE0FF00000FE0FF00000FF0FF00000FF0FF00000FF0FF00000FF0FF00000FF0 FF00000FF07F00001FF07F00001FF07F80001FF03F80001FF03F80003FF01F80003FF00F C0007FF007C0006FF007E000EFF003F001CFF000F8038FF0007C070FF0001FFE0FE00007 F80FE00000000FE00000001FE00000001FE00000001FC00000001FC00000001FC0000000 3F800000003F800F00003F001F80007F003FC0007E003FC0007E003FC000FC003FC001F8 003F8001F8003F0003F0001C0007E0001E001FC0000FC07F000003FFFE000001FFF80000 003FC00000243F7CBC2D>I<1C007F00FF80FF80FF80FF80FF807F001C00000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 1C007F00FF80FF80FF80FF80FF807F001C00092778A619>I<1C007F00FF80FF80FF80FF 80FF807F001C000000000000000000000000000000000000000000000000000000000000 000000000000000000000000001C007F00FF80FF80FFC0FFC0FFC07FC01CC000C000C000 C000C000C001C00180018003800300070006000E000C001C003800700060000A3978A619 >I<000000FFE0000000000007FFFC00000000003F001F8000000000F80003E000000001 C0000070000000078000003C0000000E0000000E0000001C000000070000003800000003 8000007000000001C00000E000000000E00001C000000000700003800000000038000700 003F80001C00060001FFE0000C000E0007E078000E000C000F801C0006001C003F000F00 070018007E00070003003800FC00038003803000F80001FC01803001F80000FE01807003 F00000FE01C06003F000007E00C06007E000007E00C06007E000007E00C0E007E000007E 00E0C00FE000007E0060C00FC000007E0060C00FC000007E0060C00FC000007E0060C00F C000007E0060C00FC000007E0060C00FC000007E0060C00FC000007E0060C00FC000007E 0060C00FC000007E0060C00FE000007E0060E007E000007E00606007E000007E00606007 E000007E00606003F000007E00E07003F00000FE00C03001F80000FE00C03000F80001FE 00C03800FC0003FE01C018007E00077E01801C003F000F7F03800C000F801C3F03000E00 07E0781F8700060001FFE007FE000700003F8001F800038000000000000001C000000000 000000E000000000000000700000000000000038000000000000001C0000000003E0000E 000000000FE00007800000007F800001C0000003FC000000F800001FE00000003F0007FF 0000000007FFFFF00000000000FFFC0000003B417BBF46>64 D<00000007000000000000 00070000000000000007000000000000000F800000000000000F800000000000001FC000 00000000001FC00000000000001FC00000000000003FE00000000000003FE00000000000 003FE00000000000007FF00000000000006FF00000000000006FF0000000000000CFF800 0000000000C7F8000000000000C7F800000000000187FC00000000000183FC0000000000 0183FC00000000000301FE00000000000301FE00000000000301FE00000000000600FF00 000000000600FF00000000000E00FF80000000000C007F80000000000C007F8000000000 1C007FC00000000018003FC00000000018003FC00000000030003FE00000000030001FE0 0000000030001FE00000000060001FF00000000060000FF00000000060000FF000000000 C00007F800000000C00007F800000000C00007F800000001800003FC00000001FFFFFFFC 00000003FFFFFFFE00000003FFFFFFFE00000003000001FE00000007000001FF00000006 000000FF00000006000000FF0000000C000000FF8000000C0000007F8000000C0000007F 800000180000007FC00000180000003FC00000180000003FC00000300000001FE0000030 0000001FE00000700000001FE00000700000000FF00000F00000000FF00001F00000000F F80003F80000000FF8000FFE0000003FFE00FFFFC00007FFFFF8FFFFC00007FFFFF8FFFF C00007FFFFF83D417DC044>II<0000003FF0000C000003FFFE001C 00001FFFFF801C00007FE00FC03C0000FF0001F07C0003FC0000787C0007F000003CFC00 1FE000000FFC003FC0000007FC007F80000003FC00FF00000003FC01FE00000001FC01FC 00000000FC03FC00000000FC07F8000000007C07F8000000007C0FF0000000003C0FF000 0000003C1FE0000000001C1FE0000000001C3FE0000000001C3FC0000000001C3FC00000 00000C7FC0000000000C7FC0000000000C7FC0000000000C7F800000000000FF80000000 0000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000000 00FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000 FF8000000000007F8000000000007FC000000000007FC0000000000C7FC0000000000C3F C0000000000C3FC0000000000C3FE0000000000C1FE0000000001C1FE000000000180FF0 00000000180FF0000000001807F8000000003807F8000000003003FC000000007001FC00 0000006001FE00000000E000FF00000001C0007F8000000380003FC000000780001FE000 000F000007F000001E000003FC00003C000000FF0000F00000007FE007E00000001FFFFF 8000000003FFFE00000000003FF0000036427BBF41>IIII<0000003FF0000C00000003FFFE001C0000001FFFFF801C0000007FE00FC03C00 0000FF0001F07C000003FC0000787C000007F000003CFC00001FE000000FFC00003FC000 0007FC00007F80000003FC0000FF00000003FC0001FE00000001FC0001FC00000000FC00 03FC00000000FC0007F8000000007C0007F8000000007C000FF0000000003C000FF00000 00003C001FE0000000001C001FE0000000001C003FE0000000001C003FC0000000001C00 3FC0000000000C007FC0000000000C007FC0000000000C007FC0000000000C007F800000 00000000FF80000000000000FF80000000000000FF80000000000000FF80000000000000 FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF800000 00000000FF80000000000000FF80000000000000FF8000001FFFFFF07F8000001FFFFFF0 7FC000001FFFFFF07FC00000000FFE007FC000000003FC003FC000000003FC003FC00000 0003FC003FE000000003FC001FE000000003FC001FE000000003FC000FF000000003FC00 0FF000000003FC0007F800000003FC0007F800000003FC0003FC00000003FC0001FE0000 0003FC0001FE00000003FC0000FF00000003FC00007F80000007FC00003FC0000007FC00 001FE000000FFC000007F800001CFC000003FC0000387C000000FF0000F03C0000007FF0 07E01C0000001FFFFF800C00000003FFFE0000000000003FF00000003C427BBF47>II I76 DI< FFFF8000007FFFF8FFFFC000007FFFF8FFFFE000007FFFF8007FE0000003FF00007FF000 0000FC00006FF80000007800006FFC00000030000067FC00000030000063FE0000003000 0063FF00000030000061FF00000030000060FF800000300000607FC00000300000607FC0 0000300000603FE00000300000601FF00000300000601FF00000300000600FF800003000 006007FC00003000006007FC00003000006003FE00003000006001FF00003000006001FF 00003000006000FF800030000060007FC00030000060007FE00030000060003FE0003000 0060001FF00030000060001FF80030000060000FF800300000600007FC00300000600007 FE00300000600003FE00300000600001FF00300000600000FF80300000600000FF803000 006000007FC03000006000003FE03000006000003FE03000006000001FF0300000600000 0FF83000006000000FF830000060000007FC30000060000003FE30000060000003FE3000 0060000001FF30000060000000FFB0000060000000FFF00000600000007FF00000600000 003FF00000600000003FF00000600000001FF00000600000000FF000006000000007F000 006000000007F000006000000003F00000F000000001F00001F800000001F00007FE0000 0000F000FFFFF00000007000FFFFF00000007000FFFFF000000030003D3E7DBD44>I<00 0000FFE0000000000007FFFC00000000003FC07F8000000000FE000FE000000001F80003 F000000007E00000FC0000000FC000007E0000001F8000003F0000003F0000001F800000 7E0000000FC00000FE0000000FE00001FC00000007F00003F800000003F80003F8000000 03F80007F000000001FC0007F000000001FC000FE000000000FE001FE000000000FF001F E000000000FF001FC0000000007F003FC0000000007F803FC0000000007F803FC0000000 007F807FC0000000007FC07F80000000003FC07F80000000003FC07F80000000003FC0FF 80000000003FE0FF80000000003FE0FF80000000003FE0FF80000000003FE0FF80000000 003FE0FF80000000003FE0FF80000000003FE0FF80000000003FE0FF80000000003FE0FF 80000000003FE0FF80000000003FE0FF80000000003FE07F80000000003FC07FC0000000 007FC07FC0000000007FC07FC0000000007FC07FC0000000007FC03FC0000000007F803F E000000000FF801FE000000000FF001FE000000000FF001FE000000000FF000FF0000000 01FE000FF000000001FE0007F800000003FC0003F800000003F80003FC00000007F80001 FC00000007F00000FE0000000FE000007F0000001FC000003F8000003F8000001F800000 3F0000000FE00000FE00000007F00001FC00000001F80003F000000000FE000FE0000000 003FC07F800000000007FFFC000000000000FFE00000003B427BBF46>II82 D<0007FC0018003FFF803800FFFFE03801FC 03F87803F0007C7807C0001EF80F80000FF81F000007F83F000003F83E000001F87E0000 00F87E000000F87C00000078FC00000078FC00000078FC00000038FC00000038FC000000 38FE00000018FE00000018FF00000018FF000000187F800000007FC00000007FE0000000 3FF80000003FFF0000001FFFF000000FFFFF00000FFFFFF00007FFFFFC0001FFFFFE0000 FFFFFF80003FFFFFC00007FFFFE000007FFFE0000007FFF00000007FF80000001FF80000 000FFC00000007FC00000003FC00000001FE00000001FEC0000000FEC0000000FEC00000 00FEC00000007EC00000007EE00000007EE00000007EE00000007EE00000007CF0000000 7CF0000000FCF8000000F8FC000001F8FE000001F0FF000003F0FF800007E0FBE0000FC0 F1F8001F80F07F007F00E01FFFFC00E007FFF000C0007FC00027427BBF32>I<3FFFFFFF FFFFFF003FFFFFFFFFFFFF003FFFFFFFFFFFFF003FE000FFC001FF003F00007F80003F00 7E00007F80001F807C00007F80000F807800007F800007807000007F800003807000007F 800003807000007F800003806000007F800001806000007F800001806000007F80000180 6000007F800001806000007F80000180C000007F800000C0C000007F800000C0C000007F 800000C0C000007F800000C0C000007F800000C00000007F800000000000007F80000000 0000007F800000000000007F800000000000007F800000000000007F800000000000007F 800000000000007F800000000000007F800000000000007F800000000000007F80000000 0000007F800000000000007F800000000000007F800000000000007F800000000000007F 800000000000007F800000000000007F800000000000007F800000000000007F80000000 0000007F800000000000007F800000000000007F800000000000007F800000000000007F 800000000000007F800000000000007F800000000000007F800000000000007F80000000 0000007F800000000000007F800000000000007F800000000000007F800000000000007F 800000000000007F800000000000007F80000000000000FFC0000000000001FFE0000000 0007FFFFFFF800000007FFFFFFF800000007FFFFFFF800003A3E7DBD41>III<7FFFFF8001FFFFE07FFFFF 8001FFFFE07FFFFF8001FFFFE000FFFC00003FFC00003FF800001FE000001FF000000F80 00001FF000000F0000000FF800000E00000007FC00000C00000007FC00001C00000003FE 00003800000001FF00003000000001FF00006000000000FF8000E0000000007FC000C000 0000007FC00180000000003FE00380000000001FF00300000000001FF00600000000000F F80E000000000007FC0C000000000007FC18000000000003FE38000000000001FF300000 00000001FF60000000000000FFE00000000000007FC00000000000007FC0000000000000 3FE00000000000001FF00000000000001FF00000000000000FF80000000000001FFC0000 000000001FFC00000000000033FE00000000000071FF00000000000061FF000000000000 C0FF800000000001C07FC00000000001807FC00000000003003FE00000000007001FF000 00000006001FF0000000000C000FF8000000001C0007FC00000000380007FC0000000030 0003FE00000000700001FF00000000E00001FF00000000C00000FF800000018000007FC0 0000038000007FC00000030000003FE00000070000001FF000000E0000001FF000001E00 00000FF800003E0000000FFC0000FF0000000FFE0007FFC000003FFF00FFFFF00001FFFF FEFFFFF00001FFFFFEFFFFF00001FFFFFE3F3E7EBD44>88 DI<3FFFFFFFFFF03FFFFFFFFFF03FFFFFFFFFF03FFE0000 3FE03FF000003FE03FC000007FC03F0000007FC03E000000FF803C000001FF003C000001 FF0038000003FE0078000003FC0070000007FC007000000FF8007000000FF8007000001F F0006000003FE0006000003FE0006000007FC0006000007FC000600000FF8000000001FF 0000000001FF0000000003FE0000000003FC0000000007FC000000000FF8000000000FF8 000000001FF0000000003FE0000000003FE0000000007FC0000000007FC000000000FF80 00000001FF0000000001FF0000000003FE0000000003FC0000000007FC000018000FF800 0018000FF8000018001FF0000018003FE0000018003FE0000018007FC0000018007FC000 003800FF8000003801FF0000003801FF0000003803FE0000003803FC0000007007FC0000 00700FF8000000F00FF8000000F01FF0000001F03FE0000003F03FE000000FF07FC00000 3FF07FC00001FFF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF02D3E7BBD37>II93 D<001FF0000000FFFC000003E03F00000F000FC000 1C0007E0001F0003F0003F8001F8003FC000FC003FC000FC003FC000FC003FC0007E001F 80007E000F00007E000000007E000000007E000000007E000000007E0000001FFE000003 FFFE00001FF87E00007F807E0001FC007E0007F0007E000FE0007E001FC0007E003F8000 7E007F80007E007F00007E007F00007E03FE00007E03FE00007E03FE00007E03FE0000FE 03FE0000FE03FE0001FE037F0001BE037F0003BE033F80071F061FC00E1F8E0FF03C0FFC 03FFF007F8003FC003E0282A7CA82D>97 D<01F800000000FFF800000000FFF800000000 FFF80000000007F80000000003F80000000001F80000000001F80000000001F800000000 01F80000000001F80000000001F80000000001F80000000001F80000000001F800000000 01F80000000001F80000000001F80000000001F80000000001F80000000001F800000000 01F80000000001F80000000001F807F8000001F81FFF000001F8780FC00001F9E003F000 01FB8001F80001FF0000FC0001FE00007E0001FC00003F0001FC00001F8001F800001F80 01F800001FC001F800000FC001F800000FE001F800000FE001F8000007E001F8000007F0 01F8000007F001F8000007F001F8000007F001F8000007F001F8000007F001F8000007F0 01F8000007F001F8000007F001F8000007F001F8000007E001F800000FE001F800000FE0 01F800000FE001F800000FC001F800001FC001F800001F8001FC00003F0001FE00003F00 01F600007E0001F70000FC0001E38001F80001C1C003E00001C0F81F800001803FFE0000 000007F000002C407EBE32>I<0001FF0000000FFFE000003F00F800007C001E0001F800 070003F0001F0007E0003F800FC0007F800FC0007F801F80007F801F80007F803F00003F 003F00001E007F000000007F000000007E00000000FE00000000FE00000000FE00000000 FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE 000000007F000000007F000000007F000000003F000000C03F800000C01F800001C01FC0 0001800FC000038007E000070003F000060001F8001E0000FC003800003F01F000000FFF C0000001FE0000222A7DA828>I<00000001F800000000FFF800000000FFF800000000FF F80000000007F80000000003F80000000001F80000000001F80000000001F80000000001 F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001 F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001 F80000000001F8000000FF01F8000007FFC1F800001F80F1F800007C0039F80001F8001D F80003F0000FF80007E00007F8000FC00003F8000FC00003F8001F800001F8003F800001 F8003F000001F8007F000001F8007F000001F8007F000001F8007E000001F800FE000001 F800FE000001F800FE000001F800FE000001F800FE000001F800FE000001F800FE000001 F800FE000001F800FE000001F800FE000001F8007E000001F8007F000001F8007F000001 F8003F000001F8003F800001F8001F800003F8001F800003F8000FC00007F80007E0000F F80003F0000DFC0001F8003DFE0000FC0071FFF0003F01E1FFF0000FFF81FFF00001FE01 F8002C407DBE32>I<0003FC0000001FFF8000007E07E00000F801F00001F000F80003E0 007C0007C0003E000FC0003F001F80001F001F80001F803F00001F803F00000F807F0000 0F807F00000FC07E00000FC07E00000FC0FE00000FC0FE00000FC0FFFFFFFFC0FFFFFFFF C0FE00000000FE00000000FE00000000FE00000000FE00000000FE000000007E00000000 7F000000007F000000007F000000003F000000C03F800000C01F800001C00FC00001800F C000038007E000070003F0000E0001F8001C0000FC003800003F01F000000FFFC0000001 FE0000222A7DA828>I<00001FC00000FFF00003F0380007C0FC000F81FE001F81FE003F 01FE003E01FE007E01FE007E00FC00FC000000FC000000FC000000FC000000FC000000FC 000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC 0000FFFFFF00FFFFFF00FFFFFF0000FC000000FC000000FC000000FC000000FC000000FC 000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC 000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC 000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000001FE 00007FFFFE007FFFFE007FFFFE001F407FBF1C>I<000000007E000003FC01FF00000FFF 078780003E07CE0F8000FC03FC0F8001F801F80F8003F000FC070003E0007C000007E000 7E000007E0007E00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC000 3F00000FC0003F00000FC0003F00000FC0003F000007E0007E000007E0007E000003E000 7C000003F000FC000001F801F8000001FC03F0000001BE07C00000038FFF0000000303FC 000000070000000000070000000000070000000000070000000000078000000000078000 00000007C00000000003E00000000003FFFFF0000001FFFFFE000001FFFFFF8000007FFF FFE00001FFFFFFF80007C0001FF8001F800003FC003F000000FE003E0000007E007C0000 003E007C0000003F00F80000001F00F80000001F00F80000001F00F80000001F00F80000 001F00FC0000003F007C0000003E007E0000007E003F000000FC001F800001F8000FC000 03F00003F0000FC00000FE007F0000003FFFFC00000003FFC00000293D7EA82D>I<01F8 00000000FFF800000000FFF800000000FFF80000000007F80000000003F80000000001F8 0000000001F80000000001F80000000001F80000000001F80000000001F80000000001F8 0000000001F80000000001F80000000001F80000000001F80000000001F80000000001F8 0000000001F80000000001F80000000001F80000000001F80000000001F803FC000001F8 0FFF800001F83C0FC00001F8F003E00001F9C003F00001FB8001F80001FB0001F80001FF 0000FC0001FE0000FC0001FE0000FC0001FC0000FC0001FC0000FC0001F80000FC0001F8 0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8 0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8 0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8 0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0003FC0001FE00FFFF F07FFFF8FFFFF07FFFF8FFFFF07FFFF82D3F7EBE32>I<01C00007F0000FF8000FF8000F F8000FF8000FF80007F00001C00000000000000000000000000000000000000000000000 000000000000000000000000000001F8007FF8007FF8007FF80007F80003F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80003FC00FFFFE0FFFFE0FFFFE0133D7EBC19>I<000070 0001FC0003FE0003FE0003FE0003FE0003FE0001FC000070000000000000000000000000 0000000000000000000000000000000000000000000000000000FE003FFE003FFE003FFE 0001FE0000FE00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E 00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E 00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E 00007E00007E00007E00007E00007E00007E00007E00007E3C007E7E007CFF00FCFF00FC FF00F8FF01F8FE01F07803E03E07C00FFF0001FC00175084BC1C>I<01F800000000FFF8 00000000FFF800000000FFF80000000007F80000000003F80000000001F80000000001F8 0000000001F80000000001F80000000001F80000000001F80000000001F80000000001F8 0000000001F80000000001F80000000001F80000000001F80000000001F80000000001F8 0000000001F80000000001F80000000001F80000000001F80000000001F8007FFF8001F8 007FFF8001F8007FFF8001F8001FFC0001F8000FE00001F8000F800001F8001F000001F8 001C000001F80038000001F80070000001F800E0000001F803C0000001F80700000001F8 0E00000001F81E00000001F83E00000001F87F00000001F9FF80000001FB9FC0000001FF 0FC0000001FE07E0000001FC07F0000001F803F0000001F801F8000001F801FC000001F8 00FE000001F8007E000001F8003F000001F8003F800001F8001F800001F8000FC00001F8 000FE00001F80007F00001F80007F00001F80007F80003FC0007FE00FFFFF03FFFE0FFFF F03FFFE0FFFFF03FFFE02B3F7EBE30>I<01F800FFF800FFF800FFF80007F80003F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80003FC00FFFFF0FFFFF0FFFFF0143F7EBE19>I<01F803 FC0001FE0000FFF80FFF8007FFC000FFF83C0FC01E07E000FFF8F003E07801F00007F9C0 03F0E001F80003FB8001F9C000FC0001FB0001F98000FC0001FF0000FF80007E0001FE00 00FF00007E0001FE0000FF00007E0001FC0000FE00007E0001FC0000FE00007E0001F800 00FC00007E0001F80000FC00007E0001F80000FC00007E0001F80000FC00007E0001F800 00FC00007E0001F80000FC00007E0001F80000FC00007E0001F80000FC00007E0001F800 00FC00007E0001F80000FC00007E0001F80000FC00007E0001F80000FC00007E0001F800 00FC00007E0001F80000FC00007E0001F80000FC00007E0001F80000FC00007E0001F800 00FC00007E0001F80000FC00007E0001F80000FC00007E0001F80000FC00007E0001F800 00FC00007E0001F80000FC00007E0001F80000FC00007E0001F80000FC00007E0003FC00 01FE0000FF00FFFFF07FFFF83FFFFCFFFFF07FFFF83FFFFCFFFFF07FFFF83FFFFC46287E A74B>I<01F803FC0000FFF80FFF8000FFF83C0FC000FFF8F003E00007F9C003F00003FB 8001F80001FB0001F80001FF0000FC0001FE0000FC0001FE0000FC0001FC0000FC0001FC 0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8 0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8 0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8 0000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F8 0000FC0003FC0001FE00FFFFF07FFFF8FFFFF07FFFF8FFFFF07FFFF82D287EA732>I<00 01FE0000000FFFC000003F03F000007C00F80001F0003E0003E0001F0007C0000F8007C0 000F800F800007C01F800007E01F000003E03F000003F03F000003F07E000001F87E0000 01F87E000001F87E000001F8FE000001FCFE000001FCFE000001FCFE000001FCFE000001 FCFE000001FCFE000001FCFE000001FCFE000001FC7E000001F87E000001F87E000001F8 7F000003F83F000003F03F000003F01F800007E00F800007C00FC0000FC007C0000F8003 E0001F0001F0003E0000FC00FC00003F03F000000FFFC0000001FE0000262A7DA82D>I< 01F807F80000FFF81FFF0000FFF8780FC000FFF9E003F00003FB8001F80001FF0000FC00 01FE00007E0001FC00007F0001FC00003F8001F800001F8001F800001FC001F800001FC0 01F800000FE001F800000FE001F800000FE001F800000FF001F8000007F001F8000007F0 01F8000007F001F8000007F001F8000007F001F8000007F001F8000007F001F8000007F0 01F8000007F001F800000FE001F800000FE001F800000FE001F800000FE001F800001FC0 01F800001FC001F800003F8001FC00003F0001FE00007F0001FE0000FE0001FF0001FC00 01FB8003F80001F9C007E00001F8F81F800001F83FFE000001F807F0000001F800000000 01F80000000001F80000000001F80000000001F80000000001F80000000001F800000000 01F80000000001F80000000001F80000000001F80000000001F80000000001F800000000 03FC00000000FFFFF0000000FFFFF0000000FFFFF00000002C3A7EA732>I<0000FF000C 000007FFC01C00001F80F01C00007E00381C0000FC001C3C0003F8000E3C0007F000077C 0007E000037C000FC00003FC001FC00001FC003F800001FC003F800000FC007F000000FC 007F000000FC007F000000FC007F000000FC00FE000000FC00FE000000FC00FE000000FC 00FE000000FC00FE000000FC00FE000000FC00FE000000FC00FE000000FC00FE000000FC 00FF000000FC007F000000FC007F000000FC007F000000FC003F800000FC003F800001FC 001FC00001FC000FC00003FC000FE00003FC0007E00007FC0003F0000EFC0001F8001CFC 00007E0078FC00003F01E0FC00000FFFC0FC000001FE00FC0000000000FC0000000000FC 0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC 0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000001FE 000000007FFFF80000007FFFF80000007FFFF82D3A7DA730>I<03F00FC0FFF03FF0FFF0 F0F8FFF1C3FC07F183FC03F383FC01F703FC01F603FC01F601F801FE006001FC000001FC 000001FC000001FC000001F8000001F8000001F8000001F8000001F8000001F8000001F8 000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 000001F8000001F8000001F8000001F8000001F8000001F8000003FC0000FFFFF800FFFF F800FFFFF8001E287EA723>I<007FC06003FFF8E007C03DE01E000FE03C0003E0780001 E0780001E0700000E0F00000E0F0000060F0000060F8000060F8000060FC000060FF0000 007FC000007FFE00003FFFE0001FFFFC0007FFFE0003FFFF80007FFFC00007FFE000003F E000000FF0C00003F0C00001F8C00000F8E00000F8E0000078E0000078F0000078F00000 78F8000078F80000F0FC0000F0FC0001E0FE0001C0F7800780F1E01F00E0FFFC00C01FE0 001D2A7DA824>I<00180000001800000018000000180000001800000018000000380000 003800000038000000380000007800000078000000F8000000F8000001F8000003F80000 07F800001FFFFFC0FFFFFFC0FFFFFFC001F8000001F8000001F8000001F8000001F80000 01F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80000 01F8000001F8000001F8000001F8000001F8000001F8000001F8006001F8006001F80060 01F8006001F8006001F8006001F8006001F8006001F8006000FC00E000FC00C000FC00C0 007E01C0003F0380001F87000007FE000001F8001B397EB723>I<01F80000FC00FFF800 7FFC00FFF8007FFC00FFF8007FFC0007F80003FC0003F80001FC0001F80000FC0001F800 00FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F800 00FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F800 00FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F80000FC0001F800 00FC0001F80000FC0001F80000FC0001F80000FC0001F80001FC0001F80001FC0001F800 01FC0001F80003FC0000F80003FC0000FC0007FC0000FC000EFE00007C001CFF00003E00 38FFF8001F80F0FFF80007FFE0FFF80000FF00FC002D297EA732>III<7FFFC00FFFE07FFFC00F FFE07FFFC00FFFE003FF0007FE0000FF0003F800007F0003E000003F0003C000003F8003 8000001FC0070000000FC00E00000007E00C00000007F01800000003F83800000001F870 00000000FCE000000000FEC0000000007F80000000003F80000000001F80000000000FC0 000000000FE0000000001FE0000000003BF00000000071F800000000E1FC00000000C0FE 00000001807E00000003803F00000007003F8000000E001FC000000C000FC000001C0007 E00000380007F00000F80003F80001F80003FC000FFC0007FE00FFFF001FFFF8FFFF001F FFF8FFFF001FFFF82D277FA630>II<1FFFFFFF801FFFFFFF801FE0007F801F00007F001E0000FE001C 0001FC001C0003FC00180003F800380007F00038000FE00030001FE00030001FC0003000 3F800030007F000030007F00000000FE00000001FC00000003FC00000003F800000007F0 0000000FE00000001FE00000001FC00180003F800180007F000180007F00018000FE0001 8001FC00018003FC00038003F800038007F00003000FE00003001FE00007001FC0000F00 3F80000F007F00003F00FF0001FF00FFFFFFFF00FFFFFFFF0021277EA628>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg ectt1095 10.95 73 /Fg 73 125 df<1F003F807FC0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FF E0FFE0FFE0FFE0FFE0FFE0FFE07FC07FC07FC07FC07FC07FC07FC07FC07FC07FC07FC07F C07FC07FC07FC07FC03F80000000000000000000000000000000001F003F807FC0FFE0FF E0FFE0FFE0FFE07FC03F801F000B396EB82F>33 D<3C000F007E001F80FF003FC0FF003F C0FF003FC0FF003FC0FF003FC0FF003FC0FF003FC0FF003FC0FF003FC07F003F807F003F 807F003F807F003F807F003F807F003F807F003F807E001F807E001F807E001F807E001F 807E001F807E001F807E001F807E001F803C000F001A1B76B82F>I<0007800780000FC0 0FC0000FC00FC0000FC00FC0000FC00FC0000FC00FC0000FC00FC0000FC00FC0000FC00F C0000FC00FC0001FC01FC0001F801F80001F801F80001F801F80001F801F803FFFFFFFFC 7FFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFE003F003F00003F003F0000 7F007F00007E007E00007E007E00007E007E00007E007E00007E007E00007E007E00007E 007E00007E007E00007E007E0000FE00FE0000FC00FC0000FC00FC007FFFFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFE3FFFFFFFFC01F801F80001F801F80001F801F8 0003F803F80003F003F00003F003F00003F003F00003F003F00003F003F00003F003F000 03F003F00003F003F00003F003F00001E001E00028387DB72F>I<07C00FF01FF83FFC3F FC3FFE3FFE3FFF1FFF0FFF07FF003F003F003F003F007F007E007E00FE00FC01FC03F803 F80FF01FF03FE0FFC0FF80FF007C003800101F70B72F>39 D<00003C00007E0001FE0003 FE0007FC000FF8001FE0003FC0007F8000FF0000FE0001FC0003F80003F80007F00007E0 000FE0000FC0001FC0001F80001F80003F80003F00003F00007F00007E00007E00007E00 00FE0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC00 00FC0000FC0000FE00007E00007E00007E00007F00003F00003F00003F80001F80001F80 001FC0000FC0000FE00007E00007F00003F80003F80001FC0000FE0000FF00007F80003F C0001FE0000FF80007FC0003FE0001FE00007E00003C174771BE2F>I<780000FC0000FF 0000FF80007FC0003FE0000FF00007F80003FC0001FE0000FE00007F00003F80003F8000 1FC0000FC0000FE00007E00007F00003F00003F00003F80001F80001F80001FC0000FC00 00FC0000FC0000FE00007E00007E00007E00007E00007E00007E00007E00007E00007E00 007E00007E00007E00007E0000FE0000FC0000FC0000FC0001FC0001F80001F80003F800 03F00003F00007F00007E0000FE0000FC0001FC0003F80003F80007F0000FE0001FE0003 FC0007F8000FF0003FE0007FC000FF8000FF0000FC0000780000174778BE2F>I<0001E0 00000003F000000003F000000003F000000003F000000003F000000003F000000003F000 003003F003007C03F00F80FE03F01FC0FF83F07FC0FFE3F1FFC07FF3F3FF801FFFFFFE00 0FFFFFFC0003FFFFF00000FFFFC000003FFF0000000FFC0000003FFF000000FFFFC00003 FFFFF0000FFFFFFC001FFFFFFE007FF3F3FF80FFE3F1FFC0FF83F07FC0FE03F01FC07C03 F00F803003F003000003F000000003F000000003F000000003F000000003F000000003F0 00000003F000000001E0000022277AAE2F>I<07C00FF01FF83FF83FFC3FFC3FFE3FFE1F FE0FFE07FE007E00FE00FC01FC01FC03F80FF03FF0FFE0FFC0FF807E0038000F18708A2F >44 D<7FFFFFF8FFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC7FFFFFF81E0678962F>I<1F00 3F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B0B6E8A2F>I<00000000E000000001 F000000003F000000003F000000007F000000007E00000000FE00000000FC00000001FC0 0000001F800000003F800000003F000000007F000000007E00000000FE00000000FC0000 0000FC00000001FC00000001F800000003F800000003F000000007F000000007E0000000 0FE00000000FC00000001FC00000001F800000003F800000003F000000003F000000007F 000000007E00000000FE00000000FC00000001FC00000001F800000003F800000003F000 000007F000000007E00000000FE00000000FC00000000FC00000001FC00000001F800000 003F800000003F000000007F000000007E00000000FE00000000FC00000001FC00000001 F800000003F800000003F000000003F000000007F000000007E00000000FE00000000FC0 0000001FC00000001F800000003F800000003F000000007F000000007E00000000FE0000 0000FC00000000FC00000000F800000000780000000024477BBE2F>I<0001FE00000007 FF8000001FFFE000003FFFF000007FFFF80000FFFFFC0001FF03FE0003FC00FF0003F800 7F0007F0003F800FE0001FC00FC0000FC01FC0000FE01F800007E01F800007E03F000003 F03F000003F03F000003F07E000001F87E000001F87E000001F87E000001F8FC000000FC FC000000FCFC000000FCFC000000FCFC000000FCFC000000FCFC000000FCFC000000FCFC 000000FCFC000000FCFC000000FCFC000000FCFC000000FCFE000001FC7E000001F87E00 0001F87E000001F87F000003F83F000003F03F000003F03F800007F01F800007E01FC000 0FE01FC0000FE00FE0001FC00FE0001FC007F0003F8003F8007F0003FC00FF0001FF03FE 0000FFFFFC00007FFFF800003FFFF000001FFFE0000007FF80000001FE0000263A7CB82F >I<000380000007C0000007C000000FC000000FC000001FC000003FC000003FC000007F C00001FFC00003FFC0007FFFC000FFFFC000FFFFC000FFCFC000FF8FC0007E0FC000000F C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F C000000FC000000FC000000FC000000FC000000FC000000FC0003FFFFFF87FFFFFF87FFF FFFC7FFFFFFC7FFFFFF87FFFFFF81E3977B82F>I<000FFC0000003FFF800000FFFFE000 03FFFFF80007FFFFFC000FFFFFFE001FF80FFF003FE001FF803F80007F807F00003FC07E 00001FC07E00000FE0FE000007E0FE000007F0FF000007F0FF000003F0FF000003F0FF00 0003F07E000003F018000003F000000003F000000003F000000007F000000007E0000000 0FE00000000FC00000001FC00000001FC00000003F800000007F00000000FF00000001FE 00000003FC00000007F80000000FF00000001FE00000003FC00000007F80000000FF0000 0001FE00000007FC0000000FF80000001FF00000003FE00000007F80000000FF00000001 FE00000003FC0001E00FF80003F01FF00003F03FE00003F07FFFFFFFF0FFFFFFFFF0FFFF FFFFF0FFFFFFFFF0FFFFFFFFF07FFFFFFFE024397BB82F>I<0007FF0000003FFFE00001 FFFFF80003FFFFFE0007FFFFFF000FFFFFFF801FFC01FFC01FE0003FC03F80001FE03FC0 0007E03FC00007F03FC00003F03FC00003F01F800003F00F000003F000000003F0000000 07F000000007E00000000FE00000000FE00000001FC00000007FC0000000FF8000000FFF 00000FFFFE00001FFFFC00001FFFF800001FFFF800001FFFFE00000FFFFF00000001FF80 0000003FC00000001FE000000007F000000003F000000003F800000001F800000001FC00 000000FC00000000FC18000000FC7E000000FCFF000000FCFF000000FCFF000001FCFF00 0001F8FE000003F8FE000003F87F000007F07F80001FE03FE0003FE01FFE01FFC00FFFFF FF8007FFFFFF0003FFFFFE0000FFFFF800003FFFE0000003FF0000263A7CB82F>I<0000 07F80000000FFC0000000FFC0000001FFC0000003FFC0000003F7C0000007F7C0000007E 7C000000FE7C000001FC7C000001F87C000003F87C000003F07C000007F07C00000FE07C 00000FC07C00001FC07C00001F807C00003F807C00007F007C00007E007C0000FE007C00 00FC007C0001F8007C0003F8007C0003F0007C0007F0007C0007E0007C000FC0007C001F C0007C001F80007C003F80007C003F00007C007E00007C00FE00007C00FFFFFFFFFEFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFE0000007C000000007C00000000 7C000000007C000000007C000000007C000000007C000000007C000000007C000000007C 0000007FFFFC0000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE00007FFFFC28397DB82F >I<00001FE0000000FFFC000003FFFF00000FFFFF80001FFFFF80003FFFFFC0007FF03F C000FF800FE001FE001FE003FC001FE007F8001FE007F0001FE00FE0000FC00FC0000780 1FC00000001F800000003F800000003F000000007F000000007F000000007E001000007E 07FF80007E1FFFE000FE7FFFF800FCFFFFFC00FDFFFFFE00FFFFFFFF00FFFC01FF00FFF0 007F80FFC0003FC0FF80001FC0FF00000FE0FF00000FE0FE000007E0FE000007F0FE0000 03F0FE000003F0FE000003F07E000003F07E000003F07E000003F07E000003F07F000003 F03F000007F03F000007E03F800007E01F80000FE01FC0001FC00FE0003FC00FF0007F80 07F800FF0003FE03FF0003FFFFFE0001FFFFFC0000FFFFF800003FFFE000000FFF800000 03FE0000243A7BB82F>54 D<7800000000FFFFFFFFF8FFFFFFFFFCFFFFFFFFFCFFFFFFFF FCFFFFFFFFFCFFFFFFFFF8FC000007F0FC00000FE0FC00001FC07800003F800000003F80 0000007F00000000FE00000001FC00000001F800000003F800000007F000000007E00000 000FE00000000FC00000001FC00000001F800000003F800000003F000000007F00000000 7E00000000FE00000000FC00000000FC00000001FC00000001F800000001F800000003F0 00000003F000000003F000000007F000000007E000000007E000000007E00000000FE000 00000FC00000000FC00000000FC00000000FC00000000FC00000001FC00000001F800000 001F800000001F800000001F800000001F800000001F800000001F800000001F80000000 1F800000001F800000000F000000263A7CB82F>I<0003FF0000001FFFE000007FFFF800 01FFFFFE0003FFFFFF0007FFFFFF800FFE01FFC01FF0003FE01FE0001FE03F800007F03F 800007F07F000003F87E000001F87E000001F87E000001F87E000001F87E000001F87F00 0003F83F000003F03F800007F01FC0000FE00FE0001FC00FF8007FC003FF03FF0001FFFF FE00007FFFF800001FFFE000003FFFF00000FFFFFC0003FFFFFF0007FC00FF800FF0003F C01FC0000FE03F800007F03F000003F07F000003F87E000001F8FE000001FCFC000000FC FC000000FCFC000000FCFC000000FCFC000000FCFC000000FCFE000001FC7E000001F87F 000003F87F800007F83FC0000FF01FE0001FE01FF0003FE00FFE01FFC007FFFFFF8003FF FFFF0001FFFFFE00007FFFF800001FFFE0000003FF0000263A7CB82F>I<1F003F807FC0 FFE0FFE0FFE0FFE0FFE07FC03F801F000000000000000000000000000000000000000000 00000000000000000000000000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F00 0B276EA62F>58 D<07C00FE01FF03FF83FF83FF83FF83FF81FF00FE007C0000000000000 0000000000000000000000000000000000000000000000000000000007C00FF01FF83FF8 3FFC3FFC3FFE3FFE1FFE0FFE07FE007E00FE00FC01FC01FC03F80FF03FF0FFE0FFC0FF80 7E0038000F3470A62F>I<000000004000000001E000000007F00000000FF00000003FF0 0000007FE0000001FFC0000003FF0000000FFE0000001FF80000007FF0000000FFC00000 03FF80000007FE0000001FFC0000003FF0000000FFE0000001FF80000007FF0000000FFC 0000003FF80000007FE0000000FFC0000000FF00000000FFC00000007FE00000003FF800 00000FFC00000007FF00000001FF80000000FFE00000003FF00000001FFC00000007FE00 000003FF80000000FFC00000007FF00000001FF80000000FFE00000003FF00000001FFC0 0000007FE00000003FF00000000FF000000007F000000001E00000000040242F7BB22F> I<3FFFFFFFFC7FFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFE0000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000007FFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFE3FFFFFFFFC2815 7DA52F>I<30000000007800000000FE00000000FF00000000FFC00000007FE00000003F F80000000FFC00000007FF00000001FF80000000FFE00000003FF00000001FFC00000007 FE00000003FF80000000FFC00000007FF00000001FF80000000FFE00000003FF00000001 FFC00000007FE00000003FF00000000FF00000003FF00000007FE0000001FFC0000003FF 0000000FFE0000001FF80000007FF0000000FFC0000003FF80000007FE0000001FFC0000 003FF0000000FFE0000001FF80000007FF0000000FFC0000003FF80000007FE0000000FF C0000000FF00000000FE0000000078000000003000000000242F7BB22F>I<001FFF0000 00FFFFF00003FFFFFC000FFFFFFF001FFFFFFF803FFFFFFFC07FF001FFC07F80003FE0FE 00000FE0FE000007F0FF000003F0FF000003F0FF000003F07E000007F07E00000FE00000 001FE00000007FC0000001FFC0000003FF8000000FFF0000001FFC0000003FF00000007F E00000007F80000000FF00000001FE00000001FE00000003FC00000003F800000003F800 000007F800000007F000000007F000000007F000000007F000000007F000000007F00000 0007F000000003F000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000001C000000007F000000007F00000000F F80000000FF80000000FF800000007F000000007F000000001C0000024397BB82F>I<00 003F00000000007F80000000007F8000000000FFC000000000FFC000000000FFC0000000 00FFC000000001F3E000000001F3E000000001F3E000000001F3E000000001F3E0000000 03F3F000000003F3F000000003F3F000000003E1F000000007E1F800000007E1F8000000 07E1F800000007E1F800000007C0F80000000FC0FC0000000FC0FC0000000FC0FC000000 0FC0FC0000001F807E0000001F807E0000001F807E0000001F807E0000003F807F000000 3F003F0000003F003F0000003F003F0000003F003F0000007E001F8000007E001F800000 7FFFFF8000007FFFFF800000FFFFFFC00000FFFFFFC00000FFFFFFC00000FFFFFFC00000 FC000FC00001F80007E00001F80007E00001F80007E00001F80007E00003F80007F00003 F00003F00003F00003F00003F00003F0007FFF003FFF807FFF003FFF80FFFF807FFFC0FF FF807FFFC07FFF003FFF807FFF003FFF802A397EB82F>65 D<7FFFFFE000FFFFFFFC00FF FFFFFF00FFFFFFFF80FFFFFFFFC07FFFFFFFE003F0001FF003F0000FF003F00003F803F0 0003F803F00001F803F00001FC03F00000FC03F00000FC03F00000FC03F00000FC03F000 00FC03F00001FC03F00001F803F00003F803F00003F003F00007F003F0001FE003F0007F C003FFFFFF8003FFFFFF0003FFFFFC0003FFFFFF0003FFFFFFC003FFFFFFE003F0000FF0 03F00003F803F00001FC03F00000FC03F00000FE03F000007E03F000007E03F000003F03 F000003F03F000003F03F000003F03F000003F03F000003F03F000007F03F000007E03F0 0000FE03F00000FE03F00001FC03F00007FC03F0001FF87FFFFFFFF8FFFFFFFFF0FFFFFF FFE0FFFFFFFF80FFFFFFFF007FFFFFF80028387EB72F>I<00007F80380003FFE07C000F FFF8FC001FFFFCFC003FFFFFFC007FFFFFFC00FFC0FFFC01FF003FFC03FE000FFC07F800 0FFC07F00007FC0FE00003FC0FE00003FC1FC00001FC1F800001FC3F800001FC3F000000 FC3F000000FC7F000000FC7E000000FC7E000000787E00000000FE00000000FC00000000 FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC 00000000FC00000000FC00000000FC00000000FE000000007E000000007E000000007E00 0000787F000000FC3F000000FC3F000000FC3F800000FC1F800000FC1FC00001FC0FE000 01F80FF00003F807F00003F807F80007F003FE000FF001FF001FE000FFC07FC0007FFFFF 80003FFFFF00001FFFFE00000FFFFC000003FFF00000007F8000263A7CB82F>I<7FFFFF 800000FFFFFFF00000FFFFFFFC0000FFFFFFFE0000FFFFFFFF00007FFFFFFF800007E001 FFC00007E0003FE00007E0001FE00007E0000FF00007E00007F80007E00003F80007E000 01FC0007E00001FC0007E00000FE0007E00000FE0007E000007E0007E000007F0007E000 003F0007E000003F0007E000003F0007E000003F0007E000003F8007E000001F8007E000 001F8007E000001F8007E000001F8007E000001F8007E000001F8007E000001F8007E000 001F8007E000001F8007E000001F8007E000001F8007E000003F8007E000003F0007E000 003F0007E000003F0007E000007F0007E000007E0007E000007E0007E00000FE0007E000 01FC0007E00001FC0007E00003F80007E00007F80007E0000FF00007E0001FF00007E000 3FE00007E001FFC0007FFFFFFF8000FFFFFFFF0000FFFFFFFE0000FFFFFFFC0000FFFFFF F000007FFFFF80000029387EB72F>I<7FFFFFFFFC00FFFFFFFFFE00FFFFFFFFFE00FFFF FFFFFE00FFFFFFFFFE007FFFFFFFFE0003F000007E0003F000007E0003F000007E0003F0 00007E0003F000007E0003F000007E0003F000007E0003F000003C0003F00000000003F0 0000000003F00000000003F00000000003F00000000003F000F0000003F001F8000003F0 01F8000003F001F8000003F001F8000003FFFFF8000003FFFFF8000003FFFFF8000003FF FFF8000003FFFFF8000003FFFFF8000003F001F8000003F001F8000003F001F8000003F0 01F8000003F000F0000003F00000000003F00000000003F00000000003F00000000003F0 0000000003F000000F0003F000001F8003F000001F8003F000001F8003F000001F8003F0 00001F8003F000001F8003F000001F8003F000001F8003F000001F807FFFFFFFFF80FFFF FFFFFF80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF0029387DB72F>I<7F FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFF03F000003F03F0 00003F03F000003F03F000003F03F000003F03F000003F03F000003F03F000001E03F000 000003F000000003F000000003F000000003F000000003F000000003F000780003F000FC 0003F000FC0003F000FC0003F000FC0003FFFFFC0003FFFFFC0003FFFFFC0003FFFFFC00 03FFFFFC0003FFFFFC0003F000FC0003F000FC0003F000FC0003F000FC0003F000780003 F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0 00000003F000000003F000000003F000000003F000000003F000000003F00000007FFFE0 0000FFFFF00000FFFFF00000FFFFF00000FFFFF000007FFFE0000028387DB72F>I<7FFF 807FFF807FFF807FFF80FFFFC0FFFFC0FFFFC0FFFFC07FFF807FFF807FFF807FFF8003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003FF FFFFF00003FFFFFFF00003FFFFFFF00003FFFFFFF00003FFFFFFF00003FFFFFFF00003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00003F00003F0007FFF807FFF807FFF807FFF80FFFFC0FFFFC0FFFFC0FFFFC07FFF 807FFF807FFF807FFF802A387EB72F>72 D<7FFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF7FFFFFFE0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0007FFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFE203879B72F>I<7FFFF0 00007FFFF80000FFFFF80000FFFFF800007FFFF800007FFFF0000001F800000001F80000 0001F800000001F800000001F800000001F800000001F800000001F800000001F8000000 01F800000001F800000001F800000001F800000001F800000001F800000001F800000001 F800000001F800000001F800000001F800000001F800000001F800000001F800000001F8 00000001F800000001F800000001F800000001F800000001F800000001F800000001F800 000001F800000001F800000001F800000001F800001E01F800003F01F800003F01F80000 3F01F800003F01F800003F01F800003F01F800003F01F800003F01F800003F7FFFFFFFFF 7FFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFF7FFFFFFFFE28387DB72F>76 D<7FF00000FFE07FF80001FFE0FFF80001FFF0FFFC0003FFF07FFC0003FFE07FFC0003FF E007DE0007BE0007DE0007BE0007DE0007BE0007DF000FBE0007CF000F3E0007CF000F3E 0007CF801F3E0007CF801F3E0007C7801E3E0007C7801E3E0007C7C03E3E0007C7C03E3E 0007C3C03C3E0007C3E07C3E0007C3E07C3E0007C1E0783E0007C1F0F83E0007C1F0F83E 0007C1F0F83E0007C0F0F03E0007C0F9F03E0007C0F9F03E0007C079E03E0007C079E03E 0007C079E03E0007C03FC03E0007C03FC03E0007C03FC03E0007C01F803E0007C01F803E 0007C00F003E0007C000003E0007C000003E0007C000003E0007C000003E0007C000003E 0007C000003E0007C000003E0007C000003E0007C000003E0007C000003E0007C000003E 0007C000003E0007C000003E007FFC0003FFE07FFC0003FFE0FFFE0007FFF0FFFE0007FF F07FFC0003FFE07FFC0003FFE02C387FB72F>I<7FF8003FFF807FFC003FFF80FFFC007F FFC0FFFE007FFFC07FFE003FFF807FFE003FFF8003EF0001F00003EF0001F00003EF8001 F00003E78001F00003E78001F00003E7C001F00003E3C001F00003E3C001F00003E3E001 F00003E3E001F00003E1E001F00003E1F001F00003E1F001F00003E0F001F00003E0F801 F00003E0F801F00003E07801F00003E07C01F00003E07C01F00003E03E01F00003E03E01 F00003E03E01F00003E01F01F00003E01F01F00003E01F01F00003E00F81F00003E00F81 F00003E00781F00003E007C1F00003E007C1F00003E003C1F00003E003E1F00003E003E1 F00003E001E1F00003E001F1F00003E001F1F00003E000F1F00003E000F1F00003E000F9 F00003E00079F00003E00079F00003E0007DF00003E0003DF00003E0003DF0007FFF001F F0007FFF001FF000FFFF801FF000FFFF800FF0007FFF000FF0007FFF0007E0002A387EB7 2F>I<7FFFFFE000FFFFFFF800FFFFFFFE00FFFFFFFF80FFFFFFFFC07FFFFFFFE003F000 7FF003F0001FF003F00007F803F00003F803F00001FC03F00001FC03F00000FC03F00000 FE03F000007E03F000007E03F000007E03F000007E03F000007E03F000007E03F00000FE 03F00000FC03F00001FC03F00001FC03F00003F803F00007F803F0001FF003F0007FF003 FFFFFFE003FFFFFFC003FFFFFF8003FFFFFE0003FFFFF80003FFFFE00003F000000003F0 00000003F000000003F000000003F000000003F000000003F000000003F000000003F000 000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 007FFF800000FFFFC00000FFFFC00000FFFFC00000FFFFC000007FFF80000027387DB72F >80 D<7FFFFE0000007FFFFFC00000FFFFFFF00000FFFFFFFC00007FFFFFFE00007FFFFF FF000003F003FF800003F0007FC00003F0003FC00003F0001FE00003F0000FE00003F000 07E00003F00007F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 03F00003F00007F00003F00007E00003F0000FE00003F0001FE00003F0003FC00003F000 7FC00003F003FF800003FFFFFF000003FFFFFE000003FFFFFC000003FFFFF8000003FFFF FC000003FFFFFE000003F003FF000003F0007F800003F0003F800003F0001F800003F000 1FC00003F0000FC00003F0000FC00003F0000FC00003F0000FC00003F0000FC00003F000 0FC00003F0000FC00003F0000FC00003F0000FC00003F0000FC1E003F0000FC3F003F000 0FC3F003F0000FC3F003F0000FE3F07FFF8007E7F07FFF8007FFE0FFFFC007FFE0FFFFC0 03FFC07FFF8001FFC07FFF8000FF80000000003E002C397EB72F>82 D<001FF80380007FFF07C001FFFFC7C003FFFFEFC007FFFFFFC00FFFFFFFC01FF80FFFC0 3FC003FFC03F8000FFC07F00007FC07E00003FC0FE00003FC0FC00001FC0FC00001FC0FC 00000FC0FC00000FC0FC00000FC0FC00000FC0FE000007807E000000007F000000003F80 0000003FC00000001FF80000000FFF80000007FFF8000003FFFF800001FFFFE000007FFF F800000FFFFC000000FFFE0000000FFF00000000FF800000003FC00000001FC00000000F E000000007E000000007E000000007F078000003F0FC000003F0FC000003F0FC000003F0 FC000003F0FC000003F0FE000007F0FE000007E0FF00000FE0FF80000FE0FFC0001FC0FF F0007FC0FFFE01FF80FFFFFFFF00FFFFFFFE00FDFFFFFC00F87FFFF800F81FFFE0007003 FF0000243A7BB82F>I<7FFFFFFFFF80FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFF FFFFFFC0FFFFFFFFFFC0FC003F000FC0FC003F000FC0FC003F000FC0FC003F000FC0FC00 3F000FC0FC003F000FC0FC003F000FC078003F00078000003F00000000003F0000000000 3F00000000003F00000000003F00000000003F00000000003F00000000003F0000000000 3F00000000003F00000000003F00000000003F00000000003F00000000003F0000000000 3F00000000003F00000000003F00000000003F00000000003F00000000003F0000000000 3F00000000003F00000000003F00000000003F00000000003F00000000003F0000000000 3F00000000003F00000000003F00000000003F00000000003F00000000003F0000000000 3F00000000003F00000000003F00000000003F000000001FFFFE0000003FFFFF0000003F FFFF0000003FFFFF0000003FFFFF0000001FFFFE00002A387EB72F>I<7FFF801FFFE0FF FFC03FFFF0FFFFC03FFFF0FFFFC03FFFF0FFFFC03FFFF07FFF801FFFE003F00000FC0003 F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003 F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003 F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003 F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003 F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003F00000FC0003 F00000FC0003F00000FC0003F00000FC0003F00000FC0003F80001FC0003F80001FC0001 F80001F80001F80001F80001FC0003F80000FE0007F00000FE0007F000007F000FE00000 7F801FE000003FE07FC000001FFFFF8000000FFFFF00000007FFFE00000003FFFC000000 00FFF0000000003FC000002C397FB72F>I<3FFF00FFFC003FFF81FFFE007FFF81FFFE00 7FFF81FFFE003FFF81FFFE003FFF00FFFC0001FC001F800000FE003F800000FE003F0000 007F007F0000007F007E0000003F80FE0000003F80FC0000001FC1FC0000000FC1F80000 000FE3F800000007E3F000000007F7F000000003F7E000000003FFE000000001FFC00000 0001FFC000000000FF8000000000FF80000000007F00000000007F00000000007F000000 00007F0000000000FF8000000000FF8000000001FFC000000001FFC000000003FFE00000 0003F7E000000003F3F000000007E3F000000007E1F80000000FC1F80000000FC1FC0000 001F80FC0000001F80FE0000003F007E0000003F007F0000007E003F0000007E003F8000 00FE001F800000FC001FC00001FC000FC00001F8000FE00003F80007F0007FFE001FFF80 7FFF003FFF80FFFF003FFFC0FFFF003FFFC07FFF003FFF807FFE001FFF802A387EB72F> 88 D<7FFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC0000FC0000FC0000FC0000FC0000 FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000 FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000 FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000 FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000 FC0000FC0000FC0000FC0000FC0000FC0000FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7FFFFE 18476DBE2F>91 D<7FFFFEFFFFFFFFFFFFFFFFFFFFFFFF7FFFFF00003F00003F00003F00 003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00 003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00 003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00 003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00 003F00003F00003F00003F00003F00003F00003F00003F7FFFFFFFFFFFFFFFFFFFFFFFFF FFFF7FFFFE18477DBE2F>93 D<7FFFFFFFE07FFFFFFFE0FFFFFFFFF0FFFFFFFFF0FFFFFF FFF07FFFFFFFE07FFFFFFFE024077B7D2F>95 D<001C003E00FF01FF03FF07FC0FF80FF0 1FC01FC03F803F007F007E007E00FE00FC00FC00FC00FC00FFE0FFF0FFF8FFFC7FFC7FFC 3FFC3FFC1FF80FF003E0101F71BE2F>I<007FF000000003FFFE00000007FFFF8000000F FFFFC000001FFFFFE000003FFFFFF000003FC01FF800003FC003FC00003FC001FC00003F C000FE00001F80007E00000F00007F00000000003F00000000003F00000000003F000000 00003F000000007FFF00000007FFFF0000003FFFFF000001FFFFFF000007FFFFFF00000F FFF83F00001FFE003F00003FF0003F00007FC0003F00007F00003F0000FE00003F0000FC 00003F0000FC00003F0000FC00003F0000FC00003F0000FC00007F0000FE00007F00007F 0000FF00007F8003FF80003FE01FFFFF003FFFFFFFFF801FFFFFFFFF800FFFFFDFFF8007 FFFF0FFF8001FFFC01FF00007FE0000000292A7BA82F>I<7FF000000000FFF800000000 FFF800000000FFF800000000FFF8000000007FF80000000001F80000000001F800000000 01F80000000001F80000000001F80000000001F80000000001F80000000001F800000000 01F80000000001F80000000001F80FF0000001F83FFC000001F8FFFF000001FBFFFFC000 01FFFFFFE00001FFFFFFF00001FFF03FF00001FFC00FF80001FF8003FC0001FF0001FC00 01FE0000FE0001FC0000FE0001FC00007F0001F800003F0001F800003F0001F800003F80 01F800001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800001F80 01F800001F8001F800001F8001F800003F8001F800003F8001FC00003F0001FC00007F00 01FC00007F0001FE0000FE0001FE0000FE0001FF0001FC0001FF8007FC0001FFC00FF800 01FFF03FF00001FFFFFFE00001FFFFFFC00001FBFFFF800001F9FFFF000000F07FFC0000 00001FE0000029397EB72F>I<0003FFC000000FFFF800003FFFFC0000FFFFFE0001FFFF FF0003FFFFFF8007FF007F800FF8007F800FF0007F801FE0007F801FC0003F003F80001E 003F000000007F000000007E000000007E00000000FE00000000FC00000000FC00000000 FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FE000000007E 000000007E000000007F000000007F000007803F80000FC03FC0000FC01FE0001FC01FF0 001F800FFC007F8007FF81FF0003FFFFFF0001FFFFFE0000FFFFFC00003FFFF000000FFF C0000003FE0000222A79A82F>I<000003FF8000000007FFC000000007FFC000000007FF C000000007FFC000000003FFC0000000000FC0000000000FC0000000000FC0000000000F C0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000F C0000003FC0FC000001FFF0FC000007FFFCFC00000FFFFEFC00001FFFFFFC00003FFFFFF C00007FE07FFC0000FF801FFC0001FF0007FC0001FC0003FC0003F80003FC0003F80001F C0007F00001FC0007F00000FC0007E00000FC000FE00000FC000FE00000FC000FC00000F C000FC00000FC000FC00000FC000FC00000FC000FC00000FC000FC00000FC000FC00000F C000FC00000FC000FE00000FC0007E00001FC0007E00001FC0007F00001FC0003F80003F C0003F80007FC0001FC0007FC0001FE000FFC0000FF801FFC00007FE07FFFF0007FFFFFF FF8003FFFFEFFF8001FFFFCFFF80007FFF8FFF80001FFE07FF000007F800000029397DB7 2F>I<0003FE0000000FFF8000003FFFE00000FFFFF00001FFFFF80003FFFFFC0007FE07 FE000FF800FF000FF0007F001FC0003F803FC0001F803F80001FC03F00000FC07F00000F C07E00000FC07E00000FE0FE000007E0FC000007E0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0 FFFFFFFFE0FFFFFFFFE0FFFFFFFFC0FC00000000FE000000007E000000007E000000007F 000000003F800003C03F800007E01FC00007E01FE0000FE00FF8001FC007FE003FC007FF 80FF8003FFFFFF8001FFFFFF00007FFFFC00003FFFF800000FFFE0000001FF0000232A7B A82F>I<000001FF00000007FFC000001FFFE000007FFFE00000FFFFF00000FFFFF00001 FF0FF00003FC0FF00003F807E00007F001800007E000000007E000000007E000000007E0 00000007E000000007E000000007E000000007E000007FFFFFFF80FFFFFFFFC0FFFFFFFF C0FFFFFFFFC0FFFFFFFFC07FFFFFFF800007E000000007E000000007E000000007E00000 0007E000000007E000000007E000000007E000000007E000000007E000000007E0000000 07E000000007E000000007E000000007E000000007E000000007E000000007E000000007 E000000007E000000007E000000007E000000007E000000007E000000007E000000007E0 00000007E000003FFFFFFC007FFFFFFE007FFFFFFE007FFFFFFE007FFFFFFE003FFFFFFC 0024397DB82F>I<0003F801FE00001FFF07FF80007FFFDFFF8000FFFFFFFFC001FFFFFF FFC003FFFFFFFFC003FE0FFF0F8007F803FC07000FF001FE00000FE000FE00000FC0007E 00001FC0007F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F 00001F80003F00001FC0007F00000FC0007E00000FE000FE00000FF001FE000007F803FC 000003FE0FF8000003FFFFF8000007FFFFF0000007FFFFE000000FFFFFC000000F9FFF00 00000F83F80000000F80000000000F80000000000F80000000000FC00000000007E40000 000007FFFFF0000003FFFFFF000007FFFFFFC0000FFFFFFFE0001FFFFFFFF0003FC0001F F8003F000001FC007E000000FE007C0000007E00FC0000003E00F80000003F00F8000000 1F00F80000001F00F80000001F00F80000001F00FC0000003F007C0000003E007F000000 FE003F800001FC003FE00007FC001FFE007FF8000FFFFFFFF00007FFFFFFE00001FFFFFF 800000FFFFFF0000001FFFF800000003FFC000002A3E7DA72F>I<7FF000000000FFF800 000000FFF800000000FFF800000000FFF8000000007FF80000000001F80000000001F800 00000001F80000000001F80000000001F80000000001F80000000001F80000000001F800 00000001F80000000001F80000000001F80FF0000001F83FFC000001F8FFFE000001FBFF FF000001FFFFFF800001FFFFFF800001FFF03FC00001FFC01FC00001FF800FE00001FF00 0FE00001FE0007E00001FC0007E00001FC0007E00001FC0007E00001F80007E00001F800 07E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F800 07E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F800 07E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F800 07E0007FFFE07FFF80FFFFF0FFFFC0FFFFF0FFFFC0FFFFF0FFFFC0FFFFF0FFFFC07FFFE0 7FFF802A387EB72F>I<0003800000000FE00000000FE00000001FF00000001FF0000000 1FF00000000FE00000000FE0000000038000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000003FFFE000007FFFF0 00007FFFF000007FFFF000007FFFF000003FFFF000000003F000000003F000000003F000 000003F000000003F000000003F000000003F000000003F000000003F000000003F00000 0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000 03F000000003F000000003F000000003F000000003F000000003F000000003F000000003 F000000003F000000003F000007FFFFFFF00FFFFFFFF00FFFFFFFF80FFFFFFFF80FFFFFF FF007FFFFFFF00213979B82F>I<0000038000000FE000000FE000001FF000001FF00000 1FF000000FE000000FE00000038000000000000000000000000000000000000000000000 000000000000000000000000000000FFFFE000FFFFF001FFFFF001FFFFF000FFFFF000FF FFF0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000 03F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000 03F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000 03F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000 03F0000003F0000003F0000003F0000003F0000003F0000007F0000007E07E000FE07E00 0FC0FF001FC0FF003F80FF00FF80FFFFFF007FFFFE007FFFFC003FFFF8000FFFE00001FF 80001C4E7CB82F>I<7FF000000000FFF800000000FFF800000000FFF800000000FFF800 0000007FF80000000000F80000000000F80000000000F80000000000F80000000000F800 00000000F80000000000F80000000000F80000000000F80000000000F80000000000F800 00000000F807FFFF0000F80FFFFF0000F80FFFFF8000F80FFFFF8000F80FFFFF0000F807 FFFF0000F8003F800000F8007F000000F800FE000000F801FC000000F803F8000000F807 F0000000F80FE0000000F81FC0000000F83F80000000F87F00000000F8FF00000000F9FF 80000000FBFF80000000FFFFC0000000FFE7E0000000FFC7F0000000FF83F0000000FF01 F8000000FE00FC000000FC00FE000000F8007E000000F8003F000000F8001F800000F800 1F800000F8000FC00000F80007E00000F80007F0007FFFF03FFFC0FFFFF87FFFC0FFFFF8 7FFFE0FFFFF87FFFE0FFFFF87FFFC07FFFF03FFFC02B387EB72F>I<7FFFF000007FFFF8 0000FFFFF80000FFFFF800007FFFF800007FFFF800000001F800000001F800000001F800 000001F800000001F800000001F800000001F800000001F800000001F800000001F80000 0001F800000001F800000001F800000001F800000001F800000001F800000001F8000000 01F800000001F800000001F800000001F800000001F800000001F800000001F800000001 F800000001F800000001F800000001F800000001F800000001F800000001F800000001F8 00000001F800000001F800000001F800000001F800000001F800000001F800000001F800 000001F800000001F800000001F800000001F800000001F800007FFFFFFFE07FFFFFFFE0 FFFFFFFFF0FFFFFFFFF07FFFFFFFE07FFFFFFFE024387BB72F>I<0001F801F8007F8FFC 0FFC00FFDFFE1FFE00FFFFFF3FFF00FFFFFFFFFF80FFFFFFFFFF807FFE1FFE1F8007FC0F FC0FC007F80FF80FC007F007F007C007E007E007C007E007E007C007E007E007C007C007 C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007 C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007 C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007 C007C007C007C007C007C007C007C07FFC3FFC3FFCFFFE3FFE3FFEFFFE7FFE7FFEFFFE7F FE7FFEFFFE3FFE3FFE7FFC3FFC3FFC2F2880A72F>I<00000FF000007FF03FFC0000FFF8 FFFE0000FFFBFFFF0000FFFFFFFF8000FFFFFFFF80007FFFF03FC00001FFC01FC00001FF 800FE00001FF000FE00001FE0007E00001FC0007E00001FC0007E00001FC0007E00001F8 0007E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F8 0007E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F8 0007E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F8 0007E00001F80007E0007FFFE07FFF80FFFFF0FFFFC0FFFFF0FFFFC0FFFFF0FFFFC0FFFF F0FFFFC07FFFE07FFF802A287EA72F>I<0003FC0000001FFF8000003FFFC00000FFFFF0 0001FFFFF80003FFFFFC0007FE07FE000FF801FF000FE0007F001FC0003F801F80001F80 3F80001FC03F00000FC07F00000FE07E000007E07E000007E0FC000003F0FC000003F0FC 000003F0FC000003F0FC000003F0FC000003F0FC000003F0FC000003F0FC000003F0FE00 0007F07E000007E07E000007E07F00000FE07F00000FE03F80001FC03F80001FC01FC000 3F801FE0007F800FF801FF0007FE07FE0003FFFFFC0001FFFFF80000FFFFF000007FFFE0 00001FFF80000003FC0000242A7BA82F>I<00000FF000007FF03FFC0000FFF8FFFF0000 FFFBFFFFC000FFFFFFFFE000FFFFFFFFF0007FFFF03FF00001FFC00FF80001FF8003FC00 01FF0001FC0001FE0000FE0001FC0000FE0001FC00007F0001F800003F0001F800003F00 01F800003F8001F800001F8001F800001F8001F800001F8001F800001F8001F800001F80 01F800001F8001F800001F8001F800001F8001F800003F8001F800003F8001FC00003F00 01FC00007F0001FC00007F0001FE0000FE0001FE0000FE0001FF0001FC0001FF8007FC00 01FFC00FF80001FFF03FF00001FFFFFFE00001FFFFFFC00001FBFFFF800001F9FFFF0000 01F87FFC000001F81FE0000001F80000000001F80000000001F80000000001F800000000 01F80000000001F80000000001F80000000001F80000000001F80000000001F800000000 01F80000000001F80000000001F8000000007FFFE0000000FFFFF0000000FFFFF0000000 FFFFF0000000FFFFF00000007FFFE0000000293C7EA72F>I<0003FE01E000000FFF83F0 00003FFFE3F00000FFFFF3F00001FFFFFBF00003FFFFFFF00007FF03FFF0000FFC00FFF0 000FF0003FF0001FE0001FF0003FC0001FF0003F80000FF0007F000007F0007F000007F0 007E000007F0007E000003F000FE000003F000FC000003F000FC000003F000FC000003F0 00FC000003F000FC000003F000FC000003F000FC000003F000FE000003F000FE000007F0 007E000007F0007F000007F0007F00000FF0003F80000FF0003F80001FF0001FC0003FF0 001FF0007FF0000FF800FFF00007FE03FFF00003FFFFFFF00001FFFFFBF00000FFFFF3F0 00007FFFC3F000001FFF03F0000003FC03F00000000003F00000000003F00000000003F0 0000000003F00000000003F00000000003F00000000003F00000000003F00000000003F0 0000000003F00000000003F00000000003F00000000003F000000001FFFFE0000001FFFF E0000003FFFFF0000003FFFFF0000001FFFFE0000001FFFFE02C3C7DA72F>I<0000000F F0007FFF007FFE007FFF81FFFF00FFFF87FFFF00FFFF8FFFFF807FFF9FFFFF807FFFBFF8 7F80001FFFC07F80001FFF003F00001FFE001E00001FFC000000001FF8000000001FF000 0000001FF0000000001FE0000000001FC0000000001FC0000000001FC0000000001FC000 0000001F80000000001F80000000001F80000000001F80000000001F80000000001F8000 0000001F80000000001F80000000001F80000000001F80000000001F80000000001F8000 0000001F80000000001F80000000001F800000007FFFFFF800007FFFFFFC0000FFFFFFFC 0000FFFFFFFC00007FFFFFFC00007FFFFFF8000029287EA72F>I<001FFC0E0001FFFF9F 0007FFFFFF000FFFFFFF001FFFFFFF003FFFFFFF007FF007FF007F8000FF00FE00007F00 FE00007F00FC00003F00FC00003F00FC00003F00FE00003F007F00001E007FC00000003F FC0000001FFFF000000FFFFF800003FFFFE00000FFFFF800001FFFFE0000007FFF000000 01FF800000007F807800001FC0FC00000FC0FC000007E0FC000007E0FE000007E0FE0000 07E0FF000007E0FF80000FE0FFC0001FC0FFE0003FC0FFFC01FF80FFFFFFFF80FFFFFFFF 00FFFFFFFE00F8FFFFF800F83FFFE0007007FF0000232A7AA82F>I<000F000000001F80 0000001F800000001F800000001F800000001F800000001F800000001F800000001F8000 00001F800000001F8000007FFFFFFFC0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0 7FFFFFFFC0001F800000001F800000001F800000001F800000001F800000001F80000000 1F800000001F800000001F800000001F800000001F800000001F800000001F800000001F 800000001F800000001F800000001F800000001F800000001F8000F0001F8001F8001F80 01F8001F8001F8001F8001F8001F8001F8001FC003F8001FC007F0000FE00FF0000FF81F E00007FFFFC00007FFFFC00003FFFF800001FFFE0000007FF80000001FE00025337EB12F >I<7FF001FFC000FFF803FFE000FFF803FFE000FFF803FFE000FFF803FFE0007FF801FF E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007 E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007 E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007E00001F80007 E00001F80007E00001F80007E00001F80007E00001F80007E00001F8000FE00001F8000F E00001F8001FE00001F8003FE00001FC007FE00000FF01FFFF8000FFFFFFFFC0007FFFFF FFC0007FFFFFFFC0003FFFE7FFC0000FFF83FF800003FE0000002A287EA62F>I<7FFF00 3FFF80FFFF807FFFC0FFFF807FFFC0FFFF807FFFC0FFFF807FFFC07FFF003FFF8001F000 03E00001F00003E00001F80007E00000F80007C00000F80007C00000FC000FC000007C00 0F8000007C000F8000007C000F8000003E001F0000003E001F0000003E001F0000001F00 3E0000001F003E0000001F003E0000000F807C0000000F807C0000000F807C00000007C0 F800000007C0F800000007C0F800000003E1F000000003E1F000000003E1F000000001F3 E000000001F3E000000001F3E000000000FFC000000000FFC000000000FFC0000000007F 80000000007F80000000003F0000002A277EA62F>I<7FFF801FFFE07FFFC03FFFE0FFFF C03FFFF0FFFFC03FFFF07FFFC03FFFE07FFF801FFFE007C000003E0007C000003E0007C0 00003E0007E000007E0003E000007C0003E000007C0003E000007C0003E000007C0003E0 00007C0001F00000F80001F00F80F80001F01FC0F80001F03FE0F80001F03FE0F80001F0 3FE0F80000F87FF0F00000F87DF1F00000F87DF1F00000F8FDF1F00000F8FDF9F00000F8 F9F9F0000078F8F9E0000079F8F9E000007DF8F9E000007DF8F9E000007DF079E000007D F07BE000003FF07FC000003FE07FC000003FE03FC000003FE03FC000003FC01FC000001F 800F80002C277FA62F>I<3FFF80FFFE007FFFC1FFFF007FFFC1FFFF007FFFC1FFFF007F FFC1FFFF003FFF80FFFE00007E001F0000003F003F0000003F007E0000001F80FC000000 0FC0FC00000007C1F800000007E3F000000003F3E000000001FFE000000000FFC0000000 00FF80000000007F00000000003F00000000003F00000000007F0000000000FF80000000 00FFC000000001F3E000000003E3F000000007E1F000000007C0F80000000F80FC000000 1F807E0000003F003E0000003E001F0000007E001F800000FC000FC0007FFF807FFF807F FFC0FFFF80FFFFC0FFFFC0FFFFC0FFFFC07FFFC0FFFF807FFF807FFF802A277EA62F>I< 7FFF803FFF80FFFF807FFFC0FFFFC07FFFC0FFFFC07FFFC0FFFF807FFFC07FFF803FFF80 01F00003E00001F80003E00000F80003E00000F80007C00000FC0007C000007C0007C000 007E000F8000003E000F8000003E000F8000003F001F0000001F001F0000001F001F0000 000F803E0000000F803E0000000FC03E00000007C07C00000007C07C00000007E07C0000 0003E0F800000003E0F800000001F0F800000001F0F000000001F1F000000000F9F00000 0000F9E000000000F9E0000000007BE0000000007FC0000000003FC0000000003FC00000 00003F80000000001F80000000001F80000000001F00000000001F00000000001F000000 00003E00000000003E00000000003E00000000007C00000000007C0000000000FC000000 0F00F80000001F81F80000003FC1F80000003FC3F00000003F07E00000003F1FE0000000 3FFFC00000001FFF800000001FFF800000000FFE0000000007FC0000000003F000000000 2A3C7EA62F>I<3FFFFFFFF87FFFFFFFFC7FFFFFFFFC7FFFFFFFFC7FFFFFFFFC7FFFFFFF F87E00000FF07E00001FE07E00003FC07E00007F807E0000FF003C0001FE00000003FC00 000007F80000000FF00000001FE00000003FC00000007F80000000FF00000001FE000000 03FC00000007F80000000FF00000001FE00000003FC00000007F80000000FF00003C01FE 00007E03FC00007E07F800007E0FF000007E1FE000007E3FC000007E7FFFFFFFFEFFFFFF FFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC27277DA62F>I<7C7CFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE7C7C07476CBE2F>124 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh ecbx1095 10.95 32 /Fh 32 122 df<07801FE03FF07FF8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE007800E 0E798D1D>46 D<0000000006000000000E000000001E000000001C000000001C00000000 3C000000003800000000780000000070000000007000000000F000000000E000000001E0 00000001C000000003C000000003800000000380000000078000000007000000000F0000 00000E000000000E000000001E000000001C000000003C00000000380000000038000000 0078000000007000000000F000000000E000000000E000000001E000000001C000000003 C000000003800000000780000000070000000007000000000F000000000E000000001E00 0000001C000000001C000000003C00000000380000000078000000007000000000700000 0000F000000000E000000001E000000001C000000001C000000003C00000000380000000 078000000007000000000F000000000E000000000E000000001E000000001C000000003C 000000003800000000380000000078000000007000000000F000000000E000000000E000 000001E000000001C000000003C000000003800000000380000000078000000007000000 000F000000000E000000001E000000001C000000001C000000003C000000003800000000 780000000070000000007000000000F000000000E000000000E000000000275B7AC334> I<00000F000000001F000000007F00000001FF0000000FFF000001FFFF0000FFFFFF0000 FFFFFF0000FFF7FF0000FE07FF00000007FF00000007FF00000007FF00000007FF000000 07FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007 FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF 00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00 000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF0000 0007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF000000 07FF00000007FF00000007FF00000007FF00000007FF00000007FF00003FFFFFFFF83FFF FFFFF83FFFFFFFF83FFFFFFFF8253C79BB34>49 D<0003FF800000003FFFF8000000FFFF FE000003FFFFFF800007F80FFFC0000FC001FFF0001F8000FFF8003F00007FFC007FC000 3FFE007FE0003FFE00FFF0001FFF00FFF8001FFF00FFF8001FFF00FFF8000FFF80FFF800 0FFF80FFF8000FFF80FFF8000FFF807FF0000FFF807FF0000FFF801FC0000FFF80070000 0FFF800000000FFF000000001FFF000000001FFF000000001FFE000000003FFE00000000 3FFC000000007FF8000000007FF000000000FFE000000001FFC000000001FF8000000003 FF0000000007FE000000000FF8000000001FF0000000001FE0000000003F80000000007F 0000000000FE0000000001F80007800003F00007800007E0000780000FC0000F00001F80 000F00003E00000F00007C00000F0000F800001F0001F000001F0001FFFFFFFF0003FFFF FFFE0007FFFFFFFE000FFFFFFFFE001FFFFFFFFE003FFFFFFFFE007FFFFFFFFE00FFFFFF FFFE00FFFFFFFFFC00FFFFFFFFFC00FFFFFFFFFC00293C7BBB34>I<0000FFE00000000F FFFC0000003FFFFF800000FF01FFE00001F8007FF00003E0003FF80007C0003FFC000FF0 001FFE000FFC001FFE001FFE001FFF001FFE001FFF001FFE001FFF001FFE001FFF001FFF 001FFF001FFE001FFF001FFE001FFF000FFE001FFF0007FC001FFE0003F0003FFE000000 003FFC000000003FFC000000007FF8000000007FF000000000FFE000000001FFC0000000 03FF000000000FFC00000007FFF000000007FFE000000007FFFE0000000001FF80000000 007FE0000000003FF8000000001FFC000000001FFE000000000FFF000000000FFF800000 0007FFC000000007FFC000000007FFC007800007FFE01FE00007FFE07FF80007FFE07FF8 0007FFE0FFFC0007FFE0FFFC0007FFE0FFFC0007FFE0FFFC0007FFE0FFFC0007FFC0FFFC 0007FFC0FFF8000FFFC07FF8000FFF807FF0000FFF003FC0001FFF001FC0003FFE000FF0 007FFC0007FE01FFF00003FFFFFFE00000FFFFFF8000001FFFFC00000001FFC000002B3D 7CBB34>I<00000001F00000000001F00000000003F00000000007F0000000000FF00000 00001FF0000000001FF0000000003FF0000000007FF000000000FFF000000000FFF00000 0001FFF000000003FFF000000007FFF00000000FBFF00000000F3FF00000001E3FF00000 003C3FF00000007C3FF0000000783FF0000000F03FF0000001E03FF0000003E03FF00000 03C03FF0000007803FF000000F003FF000001F003FF000003E003FF000003C003FF00000 78003FF00000F0003FF00001F0003FF00001E0003FF00003C0003FF0000780003FF0000F 80003FF0001F00003FF0001E00003FF0003C00003FF0007800003FF000F800003FF000FF FFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF80000007FF0000000007FF00000 00007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000 00007FF0000000007FF0000000007FF0000001FFFFFFF80001FFFFFFF80001FFFFFFF800 01FFFFFFF82D3C7DBB34>I<000003FE000000003FFFC0000000FFFFF0000003FE01F800 000FF8007C00003FE0003E00007FC001FE0000FF8003FF0001FF8007FF0003FF0007FF00 03FE0007FF0007FE0007FF000FFE0007FF000FFC0007FF001FFC0003FE001FFC0001FC00 3FFC000000003FFC000000003FF8000000007FF8000000007FF8000000007FF800000000 7FF83FFC0000FFF87FFF8000FFF9FFFFC000FFFBC03FF000FFFB800FF800FFFF000FFC00 FFFF0007FE00FFFE0007FF00FFFE0003FF80FFFC0003FF80FFFC0003FFC0FFFC0003FFC0 FFFC0003FFC0FFF80003FFE0FFF80003FFE0FFF80003FFE0FFF80003FFE0FFF80003FFE0 7FF80003FFE07FF80003FFE07FF80003FFE07FF80003FFE07FF80003FFE03FF80003FFE0 3FF80003FFE03FF80003FFC01FF80003FFC01FFC0003FFC00FFC0003FF800FFC0007FF80 07FE0007FF0003FE0007FE0003FF000FFC0001FF801FF80000FFE07FF000003FFFFFE000 000FFFFF80000003FFFE000000007FE000002B3D7CBB34>54 D<0000FFE000000007FFFE 0000001FFFFF8000007F803FE00000FC000FF00001F00007F80003E00003FC0007E00001 FE0007C00000FE000FC00000FF000FC000007F000FC000007F001FE000007F001FE00000 7F001FF000007F001FF800007F001FFC00007F001FFF0000FE001FFFC000FE001FFFE001 FE000FFFF803FC000FFFFE03F8000FFFFF87F00007FFFFDFE00007FFFFFF800003FFFFFE 000001FFFFFF000000FFFFFF8000007FFFFFE000001FFFFFF000001FFFFFFC00007FFFFF FE0001FEFFFFFE0003F83FFFFF0007F00FFFFF800FE007FFFF801FC001FFFFC03FC0007F FFC07F80001FFFE07F00000FFFE07F000003FFE0FF000000FFE0FE0000007FE0FE000000 3FE0FE0000001FE0FE0000001FE0FE0000000FE0FE0000000FE0FE0000000FC0FF000000 0FC07F0000000FC07F8000001F803FC000001F003FC000003F001FF000007E000FF80001 FC0007FF801FF80001FFFFFFE000007FFFFF8000001FFFFE00000001FFE000002B3D7CBB 34>56 D<07801FE03FF07FF8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE0078000000000 000000000000000000000000000000000000000007801FE03FF07FF8FFFCFFFCFFFCFFFC FFFCFFFC7FF83FF01FE007800E2879A71D>58 D66 D68 D76 DI82 D<7FFFFFFF007FFFFFE07FFFFFFF007FFFFFE07FFFFFFF007FFFFFE07FFFFFFF 007FFFFFE0003FFF800001FFC000001FFFC000007E0000001FFFC00000FE0000000FFFE0 0000FC00000007FFF00001F800000003FFF00003F000000003FFF80007F000000001FFFC 0007E000000000FFFE000FC000000000FFFE001F80000000007FFF001F80000000003FFF 803F00000000001FFF807E00000000001FFFC0FE00000000000FFFE0FC000000000007FF E1F8000000000007FFF3F0000000000003FFFFF0000000000001FFFFE0000000000001FF FFC0000000000000FFFF800000000000007FFF800000000000003FFF000000000000003F FF800000000000001FFFC00000000000000FFFE00000000000000FFFE000000000000007 FFF000000000000007FFF80000000000000FFFF80000000000000FFFFC0000000000001F FFFE0000000000003F7FFE0000000000007F7FFF0000000000007E3FFF800000000000FC 1FFFC00000000001F80FFFC00000000003F80FFFE00000000003F007FFF00000000007E0 03FFF0000000000FC003FFF8000000000FC001FFFC000000001F8000FFFE000000003F00 00FFFE000000007F00007FFF000000007E00003FFF80000000FC00001FFF80000001F800 001FFFC0000003F800000FFFE0000003F0000007FFF0000007E0000007FFF000000FC000 0003FFF800001FC0000001FFFC00007FE0000000FFFC00FFFFFF80007FFFFFFEFFFFFF80 007FFFFFFEFFFFFF80007FFFFFFEFFFFFF80007FFFFFFE473E7DBD4E>88 D<0007FF800000003FFFF0000001FFFFFC000003FC03FF000007E000FFC0000FF8007FE0 001FF8003FF0001FFC003FF0001FFC001FF8001FFC001FF8001FFC000FFC001FFC000FFC 000FF8000FFC0007F0000FFC0001C0000FFC000000000FFC000000000FFC000000000FFC 00000003FFFC000001FFFFFC00000FFFFFFC00007FFF8FFC0001FFF00FFC0007FF800FFC 000FFF000FFC001FFC000FFC003FF8000FFC007FF8000FFC007FF0000FFC00FFF0000FFC 00FFE0000FFC00FFE0000FFC00FFE0000FFC00FFE0001FFC00FFE0001FFC00FFF0003FFC 007FF0003FFC007FF8007FFF003FFC01F7FFFC1FFE07E3FFFC07FFFF81FFFC01FFFE007F FC001FF80000002E2B7DA932>97 D<00007FF0000003FFFF00001FFFFFC0007FE01FE000 FF8003F001FF000FF803FE000FFC07FE001FFC0FFC001FFC1FFC001FFC1FF8001FFC3FF8 001FFC3FF8000FF87FF80007F07FF00001C07FF0000000FFF0000000FFF0000000FFF000 0000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF00000 00FFF00000007FF00000007FF00000007FF80000007FF80000003FF800001E3FFC00001E 1FFC00003E0FFC00003C0FFE00007C07FF0000F803FF8001F000FFC003E0007FF00FC000 1FFFFF000007FFFC0000007FE000272B7DA92E>99 D<0000000007F80000000007FFF800 00000007FFF80000000007FFF80000000007FFF800000000003FF800000000001FF80000 0000001FF800000000001FF800000000001FF800000000001FF800000000001FF8000000 00001FF800000000001FF800000000001FF800000000001FF800000000001FF800000000 001FF800000000001FF800000000001FF800000000001FF800000000001FF80000007FE0 1FF8000003FFFC1FF800001FFFFF1FF800007FF00FDFF80000FFC003FFF80003FF0000FF F80007FE00007FF8000FFE00003FF8000FFC00001FF8001FFC00001FF8003FF800001FF8 003FF800001FF8007FF800001FF8007FF000001FF8007FF000001FF8007FF000001FF800 FFF000001FF800FFF000001FF800FFF000001FF800FFF000001FF800FFF000001FF800FF F000001FF800FFF000001FF800FFF000001FF800FFF000001FF800FFF000001FF8007FF0 00001FF8007FF000001FF8007FF000001FF8007FF800001FF8003FF800001FF8003FF800 001FF8001FF800001FF8001FFC00003FF8000FFC00007FF80007FE0000FFF80003FF0001 FFFC0001FF8007FFFFE0007FE01F9FFFE0001FFFFE1FFFE00007FFF81FFFE000007FC01F E00033407DBE3A>I<0000FFE0000007FFFC00003FFFFF00007FE0FF8001FF803FC003FF 001FE007FE000FF00FFC000FF80FFC0007FC1FF80007FC3FF80003FE3FF80003FE3FF800 03FE7FF00003FE7FF00003FF7FF00003FFFFF00001FFFFF00001FFFFF00001FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0000000FFF0000000FFF0000000FFF0000000FFF0000000 7FF00000007FF00000007FF00000003FF80000003FF800000F1FF800000F1FFC00001F0F FC00001E07FE00003E03FE00007C01FF0000F800FFC003F0007FF01FE0001FFFFFC00007 FFFE0000007FF000282B7DA92F>I<0003FF8003F0003FFFF81FFC00FFFFFE7FFE03FF01 FFFCFE07FC007FE1FE0FFC007FE0FE1FF8003FF0FE3FF8003FF87C3FF0001FF8003FF000 1FF8007FF0001FFC007FF0001FFC007FF0001FFC007FF0001FFC007FF0001FFC007FF000 1FFC007FF0001FFC003FF0001FF8003FF0001FF8003FF8003FF8001FF8003FF0000FFC00 7FE00007FC007FC00007FF01FF800007FFFFFE00000F3FFFF800000F03FF8000001E0000 0000001E00000000001F00000000001F00000000001F00000000001F80000000001FC000 0000001FFFFFFF00000FFFFFFFF0000FFFFFFFFC0007FFFFFFFF0007FFFFFFFF8003FFFF FFFFC003FFFFFFFFE00FFFFFFFFFE01FC00001FFF03F8000001FF07F0000000FF87F0000 0007F8FE00000007F8FE00000003F8FE00000003F8FE00000003F8FE00000003F8FF0000 0007F87F00000007F07F8000000FF03FC000001FE01FE000003FC00FF80000FF8003FF80 0FFE0000FFFFFFF800001FFFFFC0000001FFFC00002F3D7DA834>103 D<00FF0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF0000000000 07FF000000000003FF000000000003FF000000000003FF000000000003FF000000000003 FF000000000003FF000000000003FF000000000003FF000000000003FF000000000003FF 000000000003FF000000000003FF000000000003FF000000000003FF000000000003FF00 0000000003FF000000000003FF003FF0000003FF00FFFE000003FF03FFFF800003FF0FC0 FFC00003FF1E007FE00003FF3C003FF00003FF78003FF00003FFF0003FF00003FFE0001F F80003FFC0001FF80003FFC0001FF80003FF80001FF80003FF80001FF80003FF80001FF8 0003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF800 03FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003 FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF 00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00 001FF80003FF00001FF80003FF00001FF800FFFFFC07FFFFE0FFFFFC07FFFFE0FFFFFC07 FFFFE0FFFFFC07FFFFE0333F7CBE3A>I<01F80003FC0007FE000FFF001FFF801FFF801F FF801FFF801FFF801FFF800FFF0007FE0003FC0001F80000000000000000000000000000 000000000000000000000000000000FF00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003 FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003 FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003 FF0003FF0003FF0003FF0003FF0003FF00FFFFF8FFFFF8FFFFF8FFFFF815407CBF1D>I< 00FF00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003FF0003FF0003FF0003FF0003FF00 03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00 03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00 03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00 03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00FFFFFC FFFFFCFFFFFCFFFFFC163F7CBE1D>108 D<01FE003FF00001FF8000FFFE00FFFE0007FF F000FFFE03FFFF801FFFFC00FFFE0FC0FFC07E07FE00FFFE1E007FE0F003FF0007FE3C00 3FF1E001FF8003FE78003FF3C001FF8003FEF0003FF78001FF8003FFE0001FFF0000FFC0 03FFC0001FFE0000FFC003FFC0001FFE0000FFC003FF80001FFC0000FFC003FF80001FFC 0000FFC003FF80001FFC0000FFC003FF00001FF80000FFC003FF00001FF80000FFC003FF 00001FF80000FFC003FF00001FF80000FFC003FF00001FF80000FFC003FF00001FF80000 FFC003FF00001FF80000FFC003FF00001FF80000FFC003FF00001FF80000FFC003FF0000 1FF80000FFC003FF00001FF80000FFC003FF00001FF80000FFC003FF00001FF80000FFC0 03FF00001FF80000FFC003FF00001FF80000FFC003FF00001FF80000FFC003FF00001FF8 0000FFC003FF00001FF80000FFC003FF00001FF80000FFC003FF00001FF80000FFC003FF 00001FF80000FFC003FF00001FF80000FFC003FF00001FF80000FFC0FFFFFC07FFFFE03F FFFFFFFFFC07FFFFE03FFFFFFFFFFC07FFFFE03FFFFFFFFFFC07FFFFE03FFFFF50297CA8 57>I<00007FF000000003FFFE0000001FFFFFC000007FE03FF00000FF800FF80001FF00 07FC0003FE0003FE0007FC0001FF000FF80000FF801FF80000FFC01FF80000FFC03FF800 00FFE03FF000007FE07FF000007FF07FF000007FF07FF000007FF07FF000007FF0FFF000 007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000 007FF8FFF000007FF8FFF000007FF8FFF000007FF87FF000007FF07FF000007FF07FF000 007FF07FF000007FF03FF80000FFE03FF80000FFE01FF80000FFC00FF80000FF800FFC00 01FF8007FE0003FF0003FF0007FE0001FF800FFC00007FE03FF000001FFFFFC0000007FF FF000000007FF000002D2B7DA934>111 D<00FF007FE00000FFFF07FFFC0000FFFF1FFF FF0000FFFF7F01FFC000FFFFF8007FF00007FFF0003FF80003FFE0001FFC0003FF80000F FE0003FF80000FFF0003FF000007FF0003FF000007FF8003FF000003FF8003FF000003FF C003FF000003FFC003FF000003FFC003FF000001FFC003FF000001FFE003FF000001FFE0 03FF000001FFE003FF000001FFE003FF000001FFE003FF000001FFE003FF000001FFE003 FF000001FFE003FF000001FFE003FF000001FFE003FF000001FFC003FF000003FFC003FF 000003FFC003FF000003FFC003FF000007FF8003FF000007FF8003FF000007FF0003FF80 000FFE0003FFC0001FFE0003FFE0001FFC0003FFF0003FF80003FFF800FFE00003FF7F03 FFC00003FF1FFFFF000003FF07FFF8000003FF00FFC0000003FF000000000003FF000000 000003FF000000000003FF000000000003FF000000000003FF000000000003FF00000000 0003FF000000000003FF000000000003FF000000000003FF000000000003FF0000000000 03FF0000000000FFFFFC00000000FFFFFC00000000FFFFFC00000000FFFFFC0000000033 3B7DA83A>I<01FE01FC00FFFE07FF80FFFE0FFFE0FFFE3F1FF0FFFE3C1FF007FE783FF8 03FEF03FF803FEE03FF803FFE03FF803FFC03FF803FFC01FF003FF800FE003FF80038003 FF80000003FF80000003FF00000003FF00000003FF00000003FF00000003FF00000003FF 00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00 000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000 0003FF00000003FF000000FFFFFF0000FFFFFF0000FFFFFF0000FFFFFF000025297DA82B >114 D<001FF80E0001FFFF3E0007FFFFFE000FE007FE001F8001FE003F0000FE007E00 007E007C00003E00FC00003E00FC00001E00FC00001E00FE00001E00FF00001E00FF8000 0000FFE0000000FFFF0000007FFFFC00007FFFFF80003FFFFFE0001FFFFFF8000FFFFFFC 0003FFFFFE0000FFFFFF00003FFFFF000003FFFF8000000FFF80000001FFC0F000007FC0 F000003FC0F800001FC0F800001FC0F800000FC0FC00000FC0FC00000FC0FE00000F80FE 00001F80FF00001F00FF80003F00FFE0007E00FFF803FC00FCFFFFF000F03FFFC000E007 FE0000222B7DA929>I<0007800000078000000780000007800000078000000F8000000F 8000000F8000000F8000001F8000001F8000001F8000003F8000007F8000007F800000FF 800001FF800007FF80001FFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC01FF800001FF800001FF 800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF 800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF 801E01FF801E01FF801E01FF801E01FF801E01FF801E01FF801E01FF801E01FF801E00FF 803C00FFC03C00FFC03C007FE078003FF0F0001FFFE00007FFC00000FF001F3B7EB928> I<00FF000007F800FFFF0007FFF800FFFF0007FFF800FFFF0007FFF800FFFF0007FFF800 07FF00003FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003 FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF 00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00 001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF0000 1FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00001FF80003FF00003F F80003FF00003FF80003FF00003FF80003FF00007FF80001FF0000FFF80001FF0000FFF8 0001FF8001FFFC0000FF8007DFFFE0007FE01F9FFFE0001FFFFE1FFFE00007FFF81FFFE0 0000FFE01FE000332A7CA83A>II 121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fi ecbx1440 14.4 33 /Fi 33 122 df<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1F F807E01010768F25>46 D<000000000000C0000000000001E0000000000003E000000000 0003E0000000000003C0000000000007C0000000000007C000000000000F800000000000 0F8000000000000F0000000000001F0000000000001F0000000000003E0000000000003E 0000000000003C0000000000007C0000000000007C000000000000F8000000000000F800 0000000000F0000000000001F0000000000001F0000000000003E0000000000003E00000 00000007C0000000000007C00000000000078000000000000F8000000000000F80000000 00001F0000000000001F0000000000001E0000000000003E0000000000003E0000000000 007C0000000000007C00000000000078000000000000F8000000000000F8000000000001 F0000000000001F0000000000001E0000000000003E0000000000003E0000000000007C0 000000000007C00000000000078000000000000F8000000000000F8000000000001F0000 000000001F0000000000001E0000000000003E0000000000003E0000000000007C000000 0000007C00000000000078000000000000F8000000000000F8000000000001F000000000 0001F0000000000003E0000000000003E0000000000003C0000000000007C00000000000 07C000000000000F8000000000000F8000000000000F0000000000001F0000000000001F 0000000000003E0000000000003E0000000000003C0000000000007C0000000000007C00 0000000000F8000000000000F8000000000000F0000000000001F0000000000001F00000 00000003E0000000000003E0000000000003C0000000000007C0000000000007C0000000 00000F8000000000000F8000000000000F0000000000001F0000000000001F0000000000 003E0000000000003E0000000000003C0000000000007C0000000000007C000000000000 F8000000000000F8000000000001F0000000000001F0000000000001E0000000000003E0 000000000003E0000000000007C0000000000007C00000000000078000000000000F8000 000000000F8000000000001F0000000000001F0000000000001E0000000000003E000000 0000003E0000000000007C0000000000007C00000000000078000000000000F800000000 0000F8000000000000F000000000000060000000000000337879D942>I<0000001E0000 0000003E0000000000FE0000000003FE000000000FFE000000007FFE00000007FFFE0000 03FFFFFE0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FFF87FFE0000FC007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 00007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE0000 7FFFFFFFFFFC7FFFFFFFFFFC7FFFFFFFFFFC7FFFFFFFFFFC7FFFFFFFFFFC2E4E76CD42> 49 D<00001FFE0000000001FFFFF00000000FFFFFFC0000003FFFFFFF8000007FFFFFFF E00001FF803FFFF00003FC0007FFFC0007F00001FFFE000FE00000FFFF001F8000007FFF 803F0000003FFF803F0000001FFFC07FE000001FFFE07FF800000FFFE07FFC00000FFFF0 FFFC000007FFF0FFFE000007FFF0FFFE000003FFF8FFFE000003FFF8FFFE000003FFF8FF FE000003FFF8FFFE000003FFF87FFC000003FFF87FFC000003FFF83FF8000003FFF81FF0 000003FFF80380000003FFF80000000003FFF00000000007FFF00000000007FFF0000000 0007FFE0000000000FFFE0000000000FFFC0000000001FFFC0000000001FFF8000000000 3FFF00000000003FFE00000000007FFC0000000000FFF80000000000FFF00000000001FF E00000000003FFC00000000007FF800000000007FF00000000000FFC00000000001FF800 000000003FF000000000007FC00000000000FF800000000001FF000000000003FC000000 000007F800000000000FF00000F800001FE00000F800003FC00000F800007F000000F800 00FE000001F00001FC000001F00003F8000001F00007F0000001F00007E0000001F0000F 80000003F0001F00000003F0003E00000007F0007FFFFFFFFFF000FFFFFFFFFFE001FFFF FFFFFFE003FFFFFFFFFFE007FFFFFFFFFFE00FFFFFFFFFFFE01FFFFFFFFFFFE03FFFFFFF FFFFE07FFFFFFFFFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFFFF FFC0FFFFFFFFFFFFC0354E7ACD42>I<000007FFC0000000007FFFFC00000003FFFFFF80 00000FFFFFFFE000001FF803FFF800007FC000FFFC0000FE00003FFE0001FC00003FFF00 03F800001FFF8003FE00001FFF8007FF80000FFFC007FFC0000FFFC00FFFC0000FFFE00F FFE0000FFFE00FFFE0000FFFE00FFFE0000FFFE00FFFE0000FFFE00FFFE0000FFFE00FFF E0000FFFE007FFC0000FFFE007FFC0000FFFC003FF80000FFFC001FF00001FFFC0003800 001FFF80000000001FFF80000000003FFF00000000003FFF00000000007FFE0000000000 7FFC0000000000FFF80000000001FFF00000000003FFC0000000000FFF80000000007FFE 000000007FFFF8000000007FFFC0000000007FFFFC000000007FFFFF800000000003FFE0 00000000007FF800000000003FFE00000000001FFF00000000000FFF80000000000FFFC0 0000000007FFE00000000007FFF00000000003FFF80000000003FFF80000000003FFFC00 00000001FFFC0000000001FFFC0000000001FFFE0000000001FFFE0000000001FFFE03C0 000001FFFE0FF0000001FFFE3FFC000001FFFE7FFE000001FFFE7FFE000001FFFEFFFF00 0001FFFEFFFF000001FFFEFFFF000001FFFCFFFF000001FFFCFFFF000003FFFCFFFF0000 03FFF8FFFF000003FFF87FFE000003FFF07FFC000007FFF07FF8000007FFE03FE000000F FFC01FC000001FFFC00FF000003FFF8007FE00007FFE0003FFE003FFFC0001FFFFFFFFF8 00007FFFFFFFE000000FFFFFFF00000001FFFFFC000000001FFF800000374F7BCD42>I< 0000000000FC00000000000001FC00000000000001FC00000000000003FC000000000000 07FC0000000000000FFC0000000000000FFC0000000000001FFC0000000000003FFC0000 000000007FFC0000000000007FFC000000000000FFFC000000000001FFFC000000000003 FFFC000000000003FFFC000000000007FFFC00000000000FFFFC00000000001FFFFC0000 0000001F7FFC00000000003E7FFC00000000007E7FFC0000000000FC7FFC0000000000F8 7FFC0000000001F07FFC0000000003F07FFC0000000007E07FFC0000000007C07FFC0000 00000F807FFC000000001F807FFC000000003F007FFC000000003E007FFC000000007C00 7FFC00000000FC007FFC00000001F8007FFC00000001F0007FFC00000003E0007FFC0000 0007E0007FFC0000000FC0007FFC0000000F80007FFC0000001F00007FFC0000003F0000 7FFC0000007E00007FFC0000007C00007FFC000000F800007FFC000001F800007FFC0000 03F000007FFC000003E000007FFC000007C000007FFC00000FC000007FFC00001F800000 7FFC00001F0000007FFC00003E0000007FFC00007E0000007FFC0000FC0000007FFC0000 FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FFFFFFFF FFFFFF8000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC0000 00000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC000000000000 FFFC000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC0000 00000000FFFC000000000000FFFC000000001FFFFFFFFF8000001FFFFFFFFF8000001FFF FFFFFF8000001FFFFFFFFF8000001FFFFFFFFF80394F7CCE42>I<00000007FE00000000 00FFFFC000000003FFFFF00000001FFFFFFC0000007FFC01FE000000FFE0007F000003FF 80003F800007FF00001F80000FFE00007FC0001FFC0000FFC0003FF80003FFE0007FF000 03FFE000FFE00007FFE001FFE00007FFE003FFC00007FFE003FFC00007FFE007FF800007 FFE007FF800007FFE00FFF800003FFC00FFF000003FFC01FFF000000FF001FFF0000007E 001FFF00000000003FFF00000000003FFF00000000003FFE00000000007FFE0000000000 7FFE00000000007FFE003FF000007FFE01FFFF00007FFE07FFFFC000FFFE0FFFFFF000FF FE1F807FF800FFFE3E001FFE00FFFE78000FFF00FFFEF00007FF80FFFEF00003FFC0FFFF E00003FFC0FFFFC00001FFE0FFFFC00001FFF0FFFF800001FFF0FFFF800000FFF8FFFF80 0000FFF8FFFF000000FFFCFFFF000000FFFCFFFF000000FFFCFFFF000000FFFCFFFE0000 00FFFEFFFE000000FFFEFFFE000000FFFE7FFE000000FFFE7FFE000000FFFE7FFE000000 FFFE7FFE000000FFFE7FFE000000FFFE7FFE000000FFFE3FFE000000FFFE3FFE000000FF FE3FFE000000FFFE3FFF000000FFFE1FFF000000FFFC1FFF000000FFFC1FFF000000FFFC 0FFF000000FFF80FFF000001FFF807FF000001FFF807FF800001FFF003FF800001FFE001 FFC00003FFE001FFE00003FFC000FFE00007FF80007FF0000FFF00003FFC001FFE00001F FF00FFFC000007FFFFFFF0000003FFFFFFE0000000FFFFFF800000001FFFFC0000000003 FFC00000374F7BCD42>54 D<07E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE 7FFE3FFC1FF807E000000000000000000000000000000000000000000000000000000000 000000000000000000000000000007E01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF 7FFE7FFE3FFC1FF807E0103576B425>58 D66 D<0000000003FFF0000007000000007FFFFF00 000F00000007FFFFFFE0001F0000003FFFFFFFF8003F000000FFFFFFFFFE007F000003FF FFC003FF00FF00000FFFF800003FC1FF00003FFFC000000FE3FF0000FFFF00000003FFFF 0001FFFC00000001FFFF0003FFF800000000FFFF0007FFE0000000007FFF001FFFC00000 00003FFF003FFF80000000001FFF003FFF00000000000FFF007FFE000000000007FF00FF FC000000000003FF01FFFC000000000003FF01FFF8000000000001FF03FFF00000000000 01FF07FFF0000000000000FF07FFF0000000000000FF0FFFE00000000000007F0FFFE000 00000000007F1FFFC00000000000007F1FFFC00000000000003F1FFFC00000000000003F 3FFF800000000000003F3FFF800000000000001F3FFF800000000000001F7FFF80000000 0000001F7FFF800000000000001F7FFF80000000000000007FFF00000000000000007FFF 0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF000000000000 0000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF0000 000000000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000 FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF00000000 000000007FFF00000000000000007FFF00000000000000007FFF80000000000000007FFF 80000000000000007FFF80000000000000003FFF800000000000001F3FFF800000000000 001F3FFF800000000000001F1FFFC00000000000001F1FFFC00000000000001F1FFFC000 00000000003F0FFFE00000000000003F0FFFE00000000000003E07FFF00000000000003E 07FFF00000000000007E03FFF80000000000007C01FFF8000000000000FC01FFFC000000 000000F800FFFC000000000001F8007FFE000000000003F0003FFF000000000003F0003F FF800000000007E0001FFFC0000000000FC00007FFE0000000001F800003FFF800000000 3F000001FFFC00000000FE000000FFFF00000001FC0000003FFFC0000007F80000000FFF FC00003FF000000003FFFFC001FFC000000000FFFFFFFFFF00000000003FFFFFFFFC0000 00000007FFFFFFF00000000000007FFFFF8000000000000003FFF0000000505479D25F> II76 DI82 D<3FFFFFFFFF0001FFFFFFFC003FFFFFFFFF 0001FFFFFFFC003FFFFFFFFF0001FFFFFFFC003FFFFFFFFF0001FFFFFFFC003FFFFFFFFF 0001FFFFFFFC000003FFFE00000003FFE000000003FFFF000000007E0000000001FFFF00 0000007E0000000000FFFF80000000FC00000000007FFFC0000001F800000000007FFFC0 000003F800000000003FFFE0000003F000000000001FFFF0000007E000000000001FFFF0 00000FC000000000000FFFF800001FC0000000000007FFFC00001F80000000000007FFFC 00003F00000000000003FFFE00007E00000000000001FFFF00007E00000000000001FFFF 8000FC00000000000000FFFF8001F8000000000000007FFFC003F8000000000000003FFF E003F0000000000000003FFFE007E0000000000000001FFFF00FC0000000000000000FFF F81FC0000000000000000FFFF81F800000000000000007FFFC3F000000000000000003FF FE7E000000000000000003FFFE7E000000000000000001FFFFFC000000000000000000FF FFF8000000000000000000FFFFF80000000000000000007FFFF00000000000000000003F FFE00000000000000000001FFFF00000000000000000001FFFF00000000000000000000F FFF800000000000000000007FFFC00000000000000000007FFFC00000000000000000003 FFFE00000000000000000001FFFF00000000000000000001FFFF00000000000000000003 FFFF80000000000000000003FFFFC0000000000000000007FFFFE000000000000000000F FFFFE000000000000000001FDFFFF000000000000000001F8FFFF800000000000000003F 0FFFF800000000000000007E07FFFC00000000000000007E03FFFE0000000000000000FC 03FFFE0000000000000001F801FFFF0000000000000003F800FFFF8000000000000003F0 00FFFF8000000000000007E0007FFFC00000000000000FC0003FFFE00000000000001FC0 003FFFF00000000000001F80001FFFF00000000000003F00000FFFF80000000000007E00 0007FFFC0000000000007E000007FFFC000000000000FC000003FFFE000000000001F800 0001FFFF000000000003F8000001FFFF000000000003F0000000FFFF800000000007E000 00007FFFC0000000000FC00000007FFFC0000000001FC00000003FFFE0000000001F8000 00001FFFF0000000003F000000001FFFF8000000007E000000000FFFF8000000007E0000 000007FFFC00000000FC0000000003FFFE00000001F80000000003FFFE0000000FFF0000 000001FFFF0000FFFFFFFF000003FFFFFFFFF0FFFFFFFF000003FFFFFFFFF0FFFFFFFF00 0003FFFFFFFFF0FFFFFFFF000003FFFFFFFFF0FFFFFFFF000003FFFFFFFFF05C527DD163 >88 D<00003FFE000000000007FFFFE0000000001FFFFFFC000000007FFFFFFF00000001 FFC00FFFC0000003FE0003FFE0000007FF0000FFF0000007FF80007FF800000FFFC0007F FC00000FFFC0003FFE00000FFFC0003FFE00000FFFC0001FFF00000FFFC0001FFF00000F FFC0001FFF00000FFFC0000FFF800007FF80000FFF800003FF00000FFF800001FE00000F FF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800000 0000000FFF8000000000000FFF800000000007FFFF8000000003FFFFFF800000007FFFFF FF80000003FFFFFFFF8000001FFFF00FFF8000007FFF000FFF800000FFFC000FFF800003 FFF0000FFF800007FFC0000FFF80000FFF80000FFF80001FFF00000FFF80003FFF00000F FF80003FFE00000FFF80007FFC00000FFF80007FFC00000FFF81F0FFFC00000FFF81F0FF F800000FFF81F0FFF800000FFF81F0FFF800000FFF81F0FFF800001FFF81F0FFF800001F FF81F0FFFC00003FFF81F07FFC00003FFF81F07FFE00007FFF81F03FFE0000F7FFC3F03F FF0001E3FFC3E01FFFC007E3FFFFE007FFF01F81FFFFC003FFFFFF00FFFF8000FFFFFC00 7FFF00001FFFF0003FFC000001FF800007F0003C387CB642>97 D<000003FFE000000000 3FFFFE00000000FFFFFF80000003FFFFFFE000000FFF003FF800003FFC0007FC00007FF8 000FFE0000FFF0001FFE0001FFE0003FFF0003FFC0003FFF0007FF80003FFF0007FF8000 3FFF000FFF00003FFF001FFF00003FFF001FFE00003FFF003FFE00001FFE003FFE00000F FC003FFE000007F8007FFE00000000007FFC00000000007FFC00000000007FFC00000000 00FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000 FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FF FC0000000000FFFC0000000000FFFC00000000007FFC00000000007FFE00000000007FFE 00000000007FFE00000000003FFE00000000003FFF00000000001FFF0000000F801FFF00 00000F800FFF8000001F800FFF8000001F0007FFC000003F0003FFE000003E0001FFF000 007E0000FFF80000FC00007FFC0001F800003FFF0007F000000FFFC01FE0000007FFFFFF 80000001FFFFFE000000003FFFF80000000003FF80000031387CB63A>99 D<000000000003FF8000000000000FFFFF8000000000000FFFFF8000000000000FFFFF80 00000000000FFFFF8000000000000FFFFF800000000000003FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80 0000000000000FFF8000000003FF800FFF800000003FFFF80FFF80000001FFFFFE0FFF80 000007FFFFFF8FFF8000001FFFC03FEFFF8000003FFE0007FFFF8000007FF80001FFFF80 0000FFF00000FFFF800001FFE000007FFF800003FFC000003FFF800007FF8000001FFF80 000FFF8000000FFF80000FFF0000000FFF80001FFF0000000FFF80001FFE0000000FFF80 003FFE0000000FFF80003FFE0000000FFF80007FFE0000000FFF80007FFC0000000FFF80 007FFC0000000FFF80007FFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF80 00FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF80 00FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF80 00FFFC0000000FFF8000FFFC0000000FFF8000FFFC0000000FFF80007FFC0000000FFF80 007FFC0000000FFF80007FFC0000000FFF80007FFE0000000FFF80003FFE0000000FFF80 003FFE0000000FFF80003FFE0000000FFF80001FFE0000000FFF80001FFF0000000FFF80 000FFF0000001FFF800007FF8000003FFF800007FF8000007FFF800003FFC00000FFFF80 0001FFE00001FFFF800000FFF00003FFFFE000007FFC000FEFFFFF80001FFF007F8FFFFF 800007FFFFFF0FFFFF800001FFFFFC0FFFFF8000007FFFE00FFFFF80000007FF000FFE00 0041547CD249>I<000007FF80000000007FFFF800000001FFFFFE00000007FFFFFF8000 001FFF03FFE000003FFC007FF000007FF0003FF80000FFE0001FFC0001FFC0000FFC0003 FF800007FE0007FF800007FF000FFF000003FF000FFF000003FF801FFE000003FF801FFE 000001FF803FFE000001FFC03FFE000001FFC03FFE000001FFC07FFC000001FFC07FFC00 0001FFE07FFC000000FFE07FFC000000FFE0FFFC000000FFE0FFFC000000FFE0FFFFFFFF FFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFC0000000000FFFC000000 0000FFFC0000000000FFFC0000000000FFFC0000000000FFFC00000000007FFC00000000 007FFC00000000007FFC00000000007FFE00000000003FFE00000000003FFE0000000000 3FFE00000003E01FFF00000003E01FFF00000007E00FFF00000007C007FF8000000FC007 FF8000000F8003FFC000001F8001FFE000003F0000FFF000007E00007FFC0001FC00001F FF0007F800000FFFE03FF0000003FFFFFFC0000000FFFFFF800000003FFFFC0000000001 FFE0000033387CB63C>I<00001FFE0000FE000001FFFFE007FF80000FFFFFFC1FFFC000 3FFFFFFF7FFFE0007FF807FFFF07E001FFE001FFF07FE003FFC000FFF07FE007FF80007F F83FE007FF00003FF83FC00FFF00003FFC1FC01FFF00003FFE07001FFE00001FFE00001F FE00001FFE00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001F FF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003F FE00001FFF00001FFE00001FFE00001FFE00001FFE00001FFF00003FFE00000FFF00003F FC000007FF00003FF8000007FF80007FF8000003FFC000FFF0000001FFE001FFE0000000 FFF807FF80000001FFFFFFFF00000003EFFFFFFC00000003C1FFFFE000000007C01FFE00 000000078000000000000007800000000000000FC00000000000000FC00000000000000F C00000000000000FE00000000000000FE00000000000000FF00000000000000FFC000000 0000000FFFFFFFFE00000007FFFFFFFFF0000007FFFFFFFFFC000007FFFFFFFFFF800003 FFFFFFFFFFC00003FFFFFFFFFFF00001FFFFFFFFFFF80000FFFFFFFFFFFC00007FFFFFFF FFFC0001FFFFFFFFFFFE0007FFFFFFFFFFFE000FFC000003FFFF001FF80000003FFF003F F00000000FFF007FE000000007FF807FE000000003FF80FFC000000003FF80FFC0000000 01FF80FFC000000001FF80FFC000000001FF80FFC000000001FF80FFC000000001FF80FF E000000003FF807FE000000003FF007FF000000007FF003FF000000007FE001FF8000000 0FFC001FFE0000003FFC0007FF0000007FF00003FFC00001FFE00000FFFC001FFF800000 3FFFFFFFFE0000000FFFFFFFF800000001FFFFFFC0000000000FFFF80000003B4F7CB542 >103 D<003FF8000000000000FFFFF8000000000000FFFFF8000000000000FFFFF80000 00000000FFFFF8000000000000FFFFF800000000000003FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF8001FFC00000000FFF800FFFF80000000FFF803FF FFE0000000FFF80FFFFFF8000000FFF81FC07FFC000000FFF87E003FFE000000FFF8F800 1FFF000000FFF9F0001FFF000000FFF9E0000FFF800000FFFBC0000FFF800000FFFF8000 0FFF800000FFFF000007FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE0000 07FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC0000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807 FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042537CD249 >I<003F000000FFC00001FFE00003FFF00003FFF00007FFF80007FFF80007FFF80007FF F80007FFF80007FFF80003FFF00003FFF00001FFE00000FFC000003F0000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000001FF800FFFFF800FFFFF800FFFFF800FFFFF800FFFF F80001FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FF F80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FF F80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FF F80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FF F80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF800FFFFFFF0FFFF FFF0FFFFFFF0FFFFFFF0FFFFFFF01C547CD324>I<003FF800FFFFF800FFFFF800FFFFF8 00FFFFF800FFFFF80003FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF8 0000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF8 0000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF8 0000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF8 0000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF8 0000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF8 0000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF8 0000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF8 0000FFF80000FFF800FFFFFFF8FFFFFFF8FFFFFFF8FFFFFFF8FFFFFFF81D537CD224> 108 D<003FF0001FF8000001FF800000FFFFF000FFFF80000FFFF80000FFFFF003FFFFE0 003FFFFE0000FFFFF00FFFFFF000FFFFFF0000FFFFF03F80FFF803F80FFF8000FFFFF07E 007FFC07E007FFC00003FFF0F8003FFE0F8003FFE00000FFF1F0001FFE1F0001FFE00000 FFF3E0001FFF3E0001FFF00000FFF3C0001FFF3C0001FFF00000FFF780001FFF780001FF F00000FFF700000FFFF00000FFF80000FFFF00000FFFF00000FFF80000FFFE00000FFFE0 0000FFF80000FFFE00000FFFE00000FFF80000FFFC00000FFFC00000FFF80000FFFC0000 0FFFC00000FFF80000FFFC00000FFFC00000FFF80000FFF800000FFF800000FFF80000FF F800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF8 0000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF8000 00FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000F FF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF8 00000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF800 00FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000 FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF 800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800 000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000 FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FF F80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF800FFFFFFF80FFFFFFF 80FFFFFFF8FFFFFFF80FFFFFFF80FFFFFFF8FFFFFFF80FFFFFFF80FFFFFFF8FFFFFFF80F FFFFFF80FFFFFFF8FFFFFFF80FFFFFFF80FFFFFFF865367BB56E>I<003FF0001FFC0000 00FFFFF000FFFF800000FFFFF003FFFFE00000FFFFF00FFFFFF80000FFFFF01FC07FFC00 00FFFFF07E003FFE000003FFF0F8001FFF000000FFF1F0001FFF000000FFF1E0000FFF80 0000FFF3C0000FFF800000FFF780000FFF800000FFF7000007FFC00000FFFF000007FFC0 0000FFFE000007FFC00000FFFE000007FFC00000FFFC000007FFC00000FFFC000007FFC0 0000FFFC000007FFC00000FFFC000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 00FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFF C0FFFFFFF807FFFFFFC042367CB549>I<000001FFC000000000003FFFFE0000000000FF FFFF8000000003FFFFFFE00000000FFF80FFF80000003FFC001FFE0000007FF00007FF00 0000FFE00003FF800001FFC00001FFC00003FF800000FFE00003FF0000007FE00007FF00 00007FF0000FFF0000007FF8000FFE0000003FF8001FFE0000003FFC001FFE0000003FFC 003FFE0000003FFE003FFC0000001FFE003FFC0000001FFE007FFC0000001FFF007FFC00 00001FFF007FFC0000001FFF007FFC0000001FFF00FFFC0000001FFF80FFFC0000001FFF 80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC00 00001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF 80FFFC0000001FFF807FFC0000001FFF007FFC0000001FFF007FFC0000001FFF003FFC00 00001FFE003FFE0000003FFE003FFE0000003FFE001FFE0000003FFC001FFE0000003FFC 000FFF0000007FF8000FFF0000007FF80007FF800000FFF00003FF800000FFE00001FFC0 0001FFC00000FFE00003FF8000007FF00007FF0000003FFC001FFE0000001FFF80FFFC00 000007FFFFFFF000000001FFFFFFC0000000003FFFFE000000000003FFE000000039387C B642>I<003FF8007FF0000000FFFFF807FFFF000000FFFFF81FFFFFC00000FFFFF87FFF FFF00000FFFFF9FF00FFFC0000FFFFFFF8003FFF000003FFFFE0000FFF800000FFFF8000 07FFC00000FFFF000003FFE00000FFFE000003FFF00000FFFC000001FFF00000FFF80000 00FFF80000FFF8000000FFFC0000FFF80000007FFC0000FFF80000007FFE0000FFF80000 007FFE0000FFF80000003FFE0000FFF80000003FFF0000FFF80000003FFF0000FFF80000 003FFF0000FFF80000003FFF0000FFF80000001FFF8000FFF80000001FFF8000FFF80000 001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000 001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000 001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000003FFF0000FFF80000 003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000007FFE0000FFF80000 007FFE0000FFF80000007FFC0000FFF8000000FFFC0000FFF8000000FFF80000FFFC0000 01FFF80000FFFC000001FFF00000FFFE000003FFE00000FFFF000007FFC00000FFFF8000 0FFF800000FFFFE0001FFF000000FFFFF0007FFE000000FFF9FE01FFF8000000FFF8FFFF FFF0000000FFF83FFFFFC0000000FFF807FFFE00000000FFF800FFE000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 00000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF800 00000000FFFFFFF80000000000414D7DB549>I<003FF001FC00FFFFF00FFF80FFFFF01F FFE0FFFFF07FFFF0FFFFF0FE1FF8FFFFF1F83FF801FFF1F07FFC00FFF3E07FFC00FFF3C0 7FFC00FFF7807FFC00FFF7807FFC00FFFF007FFC00FFFF003FF800FFFE001FF000FFFE00 0FE000FFFE00000000FFFC00000000FFFC00000000FFFC00000000FFFC00000000FFF800 000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800 000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800 000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800 000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800 000000FFF800000000FFF800000000FFF800000000FFF8000000FFFFFFFE0000FFFFFFFE 0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE00002E367DB535>114 D<0003FFC00E00001FFFFC1E0000FFFFFF7E0003FFFFFFFE0007FE003FFE000FF0000FFE 001FE00003FE003FC00001FE003F800000FE007F800000FE007F0000007E007F0000007E 00FF0000003E00FF0000003E00FF8000003E00FF8000003E00FFC000003E00FFF0000000 00FFFC00000000FFFF800000007FFFFE0000007FFFFFF000003FFFFFFE00003FFFFFFF80 001FFFFFFFE0000FFFFFFFF00007FFFFFFFC0003FFFFFFFE0000FFFFFFFF00003FFFFFFF 00000FFFFFFF800001FFFFFF8000000FFFFFC00000003FFFC000000007FFE000000001FF E0F8000000FFE0F80000007FE0FC0000003FE0FC0000003FE0FC0000001FE0FE0000001F E0FE0000001FE0FE0000001FC0FF0000001FC0FF8000003FC0FF8000003F80FFC000003F 80FFE000007F00FFF80000FF00FFFC0003FE00FFFF801FFC00FE7FFFFFF000F81FFFFFC0 00F007FFFF0000E0007FF000002B387CB634>I<00007C00000000007C00000000007C00 000000007C00000000007C00000000007C0000000000FC0000000000FC0000000000FC00 00000000FC0000000001FC0000000001FC0000000001FC0000000003FC0000000003FC00 00000007FC0000000007FC000000000FFC000000001FFC000000003FFC000000007FFC00 000000FFFC00000003FFFC0000000FFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFF FE00FFFFFFFFFE00007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000F80007FFC00 0F80007FFC000F80007FFC000F80007FFC000F80007FFC000F80007FFC000F80007FFC00 0F80007FFC000F80007FFC000F80007FFC000F80007FFC001F00003FFE001F00003FFE00 1F00001FFE003E00001FFF003E00000FFF807C000007FFC1F8000003FFFFF0000000FFFF E00000003FFF8000000003FE0000294D7ECB33>I<003FF8000001FFC000FFFFF80007FF FFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FF FFC00003FFF800001FFFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007 FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007 FFC00000FFF8000007FFC00000FFF800000FFFC00000FFF800000FFFC00000FFF800000F FFC00000FFF800001FFFC00000FFF800001FFFC00000FFF800003FFFC000007FF800003F FFC000007FF800007FFFC000003FFC0000F7FFC000003FFC0001E7FFF000001FFE0007C7 FFFFC0000FFF801F87FFFFC00007FFFFFF07FFFFC00001FFFFFC07FFFFC000007FFFF007 FFFFC0000007FFC007FF000042377CB549>II 121 D E %EndDVIPSBitmapFont end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: a4 /setpagedevice where { pop << /PageSize [595 842] >> setpagedevice } { /a4 where { pop a4 } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 91 a Fi(Con)l(ten)l(ts)0 295 y Fh(1)84 b(Mo)s(dule)34 b Fg(XmlRpc)h Fh(:)46 b(XmlRp)s(c)33 b(Ligh)m(t.)2262 b(1)136 408 y Ff(1.1)92 b(High-lev)m(el)32 b(in)m(terface)49 b(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) h(.)f(.)h(.)g(.)f(.)h(.)137 b(1)136 520 y(1.2)92 b(Utilit)m(y)31 b(functions)90 b(.)46 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h (.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)h(.)137 b(6)136 633 y(1.3)92 b(Lo)m(w-lev)m(el)33 b(in)m(terface)73 b(.)46 b(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)137 b(6)136 746 y(1.4)92 b(Serv)m(er)32 b(to)s(ols)61 b(.)45 b(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)137 b(7)0 950 y Fh(2)84 b(Mo)s(dule)34 b Fg(XmlRpcServer)h Fh(:)46 b(XmlRp)s(c)33 b(Ligh)m(t)i(serv)m(er.)1672 b(8)136 1062 y Ff(2.1)92 b(Base)31 b(classes)53 b(.)45 b(.)h(.)f(.)h(.)g(.)f(.) h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)137 b(8)136 1175 y(2.2)92 b(Serv)m(er)32 b(implemen)m(tations)96 b(.)45 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)92 b(10)136 1288 y(2.3)g(Utilit)m(y)31 b(functions)90 b(.)46 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) f(.)h(.)92 b(10)0 1492 y Fh(3)84 b(Mo)s(dule)34 b Fg(XmlRpcDateTime)h Fh(:)46 b(Date/time)35 b(t)m(yp)s(e.)1777 b(11)136 1605 y Ff(3.1)92 b(T)m(yp)s(es)76 b(.)45 b(.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f (.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)92 b(11)136 1717 y(3.2)g(Comparison)56 b(.)45 b(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h (.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)92 b(11)136 1830 y(3.3)g(Curren)m(t)32 b(date)f(and)g(time)59 b(.)46 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h (.)92 b(11)136 1943 y(3.4)g(Time)32 b(zone)e(adjustmen)m(ts)h(.)46 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f (.)h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)92 b(11)136 2056 y(3.5)g(Con)m(v)m(ersion)i(.)45 b(.)h(.)f(.)h(.)g(.)f(.)h (.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) h(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)92 b(12)136 2169 y(3.6)g(ISO-8601)32 b(parsing)f(and)f(generation)77 b(.)45 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)92 b(12)0 2372 y Fh(4)84 b(Mo)s(dule)34 b Fg(XmlRpcBase64)h Fh(:)46 b(Base64)35 b(co)s(dec.)1975 b(12)0 2659 y Fi(1)131 b(Mo)t(dule)44 b Fe(XmlRpc)d Fi(:)58 b(XmlRp)t(c)44 b(Ligh)l(t.)0 2862 y Ff(XmlRp)s(c)30 b(Ligh)m(t)i(is)d(a)i(minimal)g(XmlRp)s(c)f(library)h (based)g(on)f(Xml)g(Ligh)m(t)i(and)f(Ocamlnet.)141 2975 y(It)k(pro)m(vides)i(a)e(t)m(yp)s(e)h(for)f(v)-5 b(alues,)37 b(a)f(clien)m(t)h(class)e(with)h(a)g(simple)g(calling)g(in)m(terface,)j (and)d(lo)m(w-lev)m(el)h(to)s(ols)0 3088 y(that)31 b(can)g(b)s(e)f (used)g(to)h(implemen)m(t)h(a)e(serv)m(er.)141 3200 y Fd(\(c\))j(2007-2009)g(Dave)g(Benjamin)0 3456 y Fg(val)47 b(version)g(:)g(string)227 3594 y Ff(V)-8 b(ersion)31 b(of)f(XmlRp)s(c-Ligh)m(t)i(as)e(a)g(string.)0 3912 y Fc(1.1)112 b(High-lev)m(el)35 b(in)m(terface)0 4084 y Ff(Example:)188 4335 y Fg(let)47 b(rpc)g(=)g(new)g(XmlRpc.client)f ("http://localhost:8000")h(in)188 4448 y(let)g(result)g(=)g(rpc#call)f ("echo")h([`String)g("hello!"])g(in)188 4560 y(print_endline)g (\(XmlRpc.dump)f(result\))0 4698 y(exception)h(Error)g(of)g(\(int)f(*)h (string\))227 4836 y Ff(Raised)30 b(for)g(all)h(errors)g(including)g (XmlRp)s(c)f(faults)g(\(co)s(de,)h(string\).)1927 5400 y(1)p eop end %%Page: 2 2 TeXDict begin 2 1 bop 0 91 a Fg(type)47 b(value)g(=)g([)g(`Array)f(of)h (value)g(list)94 204 y(|)g(`Binary)g(of)g(string)94 317 y(|)g(`Boolean)g(of)g(bool)94 430 y(|)g(`DateTime)g(of)g (XmlRpcDateTime.t)94 543 y(|)g(`Double)g(of)g(float)94 656 y(|)g(`Int)g(of)g(int)94 769 y(|)g(`Int32)g(of)g(int32)94 882 y(|)g(`Nil)94 995 y(|)g(`String)g(of)g(string)94 1108 y(|)g(`Struct)g(of)g(\(string)f(*)h(value\))g(list)g(])227 1245 y Ff(P)m(olymorphic)33 b(v)-5 b(arian)m(t)31 b(t)m(yp)s(e)g(for)f (XmlRp)s(c)f(v)-5 b(alues:)336 1433 y Fb(\017)46 b Fg(`Array)p Ff(:)40 b(An)31 b(ordered)g(list)f(of)g(v)-5 b(alues)336 1579 y Fb(\017)46 b Fg(`Binary)p Ff(:)40 b(A)30 b(string)h(con)m (taining)h(binary)f(data)336 1725 y Fb(\017)46 b Fg(`Boolean)p Ff(:)40 b(A)30 b(b)s(o)s(olean)336 1871 y Fb(\017)46 b Fg(`DateTime)p Ff(:)40 b(A)30 b(date/time)i(v)-5 b(alue)336 2017 y Fb(\017)46 b Fg(`Double)p Ff(:)40 b(A)30 b(\035oating-p)s(oin)m (t)j(v)-5 b(alue)336 2164 y Fb(\017)46 b Fg(`Int)p Ff(:)40 b(An)31 b(in)m(teger)336 2310 y Fb(\017)46 b Fg(`Int32)p Ff(:)40 b(A)30 b(32-bit)i(in)m(teger)336 2456 y Fb(\017)46 b Fg(`Nil)p Ff(:)40 b(A)30 b(n)m(ull)i(v)-5 b(alue)336 2602 y Fb(\017)46 b Fg(`String)p Ff(:)40 b(A)30 b(string)336 2748 y Fb(\017)46 b Fg(`Struct)p Ff(:)40 b(An)31 b(asso)s(ciation)f (list)g(of)g(\(name,)i(v)-5 b(alue\))30 b(pairs)227 2936 y(Note)h(that)g(base64-enco)s(ding)h(of)e Fg(`Binary)f Ff(v)-5 b(alues)31 b(is)f(done)h(automatically)-8 b(.)42 b(Y)-8 b(ou)31 b(do)g(not)f(need)h(to)g(do)227 3049 y(the)g(enco)s (ding)g(y)m(ourself.)0 3261 y Fg(class)47 b(client)g(:)g(?debug:bool)f (->)h(?headers:\(string)g(*)g(string\))g(list)g(->)g (?insecure_ssl:bool)f(->)h(?timeout:float)g(->)g(?useragent:string)f (->)h(string)g(->)90 3374 y(object)227 3549 y(val)g(url)g(:)g(string) 427 3724 y Ff(Url)30 b(of)g(the)h(remote)g(XmlRp)s(c)f(serv)m(er.)227 3937 y Fg(val)47 b(mutable)g(debug)g(:)g(bool)427 4112 y Ff(If)30 b(true,)h(Xml)f(messages)g(will)h(b)s(e)f(prin)m(ted)i(to)e (standard)i(error.)227 4325 y Fg(val)47 b(mutable)g(headers)g(:)g (\(string)g(*)g(string\))f(list)427 4500 y Ff(List)31 b(of)f(custom)h(HTTP)g(headers)g(to)f(send)g(with)h(eac)m(h)h(request.) 227 4712 y Fg(val)47 b(mutable)g(insecure_ssl)g(:)g(bool)427 4888 y Ff(If)30 b(true,)h(SSL)g(will)f(b)s(e)h(allo)m(w)m(ed)h(ev)m(en) f(if)f(the)g(certi\034cate)i(is)e(self-signed.)227 5100 y Fg(val)47 b(mutable)g(timeout)g(:)g(float)1927 5400 y Ff(2)p eop end %%Page: 3 3 TeXDict begin 3 2 bop 427 91 a Ff(Maxim)m(um)32 b(time)e(to)h(w)m(ait)g (for)f(a)h(request)f(to)h(complete,)h(in)e(seconds.)227 304 y Fg(val)47 b(mutable)g(useragent)g(:)g(string)427 479 y Ff(User-agen)m(t)32 b(to)e(send)h(in)f(request)h(headers.)227 692 y Fg(method)47 b(url)g(:)g(string)427 867 y Ff(Gets)30 b Fg(url)p Ff(.)227 1079 y Fg(method)47 b(debug)g(:)g(bool)427 1254 y Ff(Gets)30 b Fg(debug)p Ff(.)227 1467 y Fg(method)47 b(set_debug)g(:)g(bool)g(->)g(unit)427 1642 y Ff(Sets)31 b Fg(debug)p Ff(.)227 1855 y Fg(method)47 b(headers)g(:)g(\(string)g(*) g(string\))f(list)427 2030 y Ff(Gets)30 b Fg(headers)p Ff(.)227 2242 y Fg(method)47 b(set_headers)g(:)g(\(string)g(*)g (string\))f(list)h(->)g(unit)427 2418 y Ff(Sets)31 b Fg(headers)p Ff(.)227 2630 y Fg(method)47 b(insecure_ssl)g(:)g(bool)427 2805 y Ff(Gets)30 b Fg(insecure_ssl)p Ff(.)227 3018 y Fg(method)47 b(set_insecure_ssl)g(:)g(bool)g(->)f(unit)427 3193 y Ff(Sets)31 b Fg(insecure_ssl)p Ff(.)227 3406 y Fg(method)47 b(timeout)g(:)g(float)427 3581 y Ff(Gets)30 b Fg(timeout)p Ff(.)227 3793 y Fg(method)47 b(set_timeout)g(:)g(float)g (->)g(unit)427 3968 y Ff(Sets)31 b Fg(timeout)p Ff(.)227 4181 y Fg(method)47 b(useragent)g(:)g(string)427 4356 y Ff(Gets)30 b Fg(useragent)p Ff(.)227 4569 y Fg(method)47 b(set_useragent)g(:)g(string)g(->)g(unit)427 4744 y Ff(Sets)31 b Fg(useragent)p Ff(.)227 4956 y Fg(method)47 b(set_base64_encoder)g(:) g(\(string)f(->)h(string\))g(->)g(unit)427 5132 y Ff(Sets)31 b(an)f(alternate)i(Base-64)f(binary)f(enco)s(ding)i(function.)1927 5400 y(3)p eop end %%Page: 4 4 TeXDict begin 4 3 bop 227 91 a Fg(method)47 b(set_base64_decoder)g(:)g (\(string)f(->)h(string\))g(->)g(unit)427 262 y Ff(Sets)31 b(an)f(alternate)i(Base-64)f(binary)f(deco)s(ding)i(function.)227 467 y Fg(method)47 b(set_datetime_encoder)g(:)g(\(XmlRpcDateTime.t)f (->)h(string\))g(->)g(unit)427 638 y Ff(Sets)31 b(an)f(alternate)i (ISO-8601)f(date/time)h(enco)s(ding)f(function.)227 842 y Fg(method)47 b(set_datetime_decoder)g(:)g(\(string)f(->)h (XmlRpcDateTime.t\))g(->)g(unit)427 1013 y Ff(Sets)31 b(an)f(alternate)i(ISO-8601)f(date/time)h(deco)s(ding)f(function.)227 1217 y Fg(method)47 b(call)g(:)g(string)g(->)g(XmlRpc.value)f(list)h (->)g(XmlRpc.value)427 1389 y(call)g(name)g(params)30 b Ff(in)m(v)m(ok)m(es)h(an)g(XmlRp)s(c)f(metho)s(d)h(and)f(returns)h (the)g(result,)g(or)f(raises)427 1501 y Fg(XmlRpc.Error)p Ff([1.1])h(on)f(error.)90 1718 y Fg(end)227 1900 y Ff(Class)g(for)g (XmlRp)s(c)g(clien)m(ts.)42 b(T)-8 b(ak)m(es)31 b(a)f(single)h (mandatory)g(argumen)m(t,)i Fg(url)p Ff(.)227 2048 y(If)d Fg(url)g Ff(is)g(of)g(the)g(form)h("h)m(ttp://username:passw)m(ord@)p Fa(:)15 b(:)g(:)5 b Ff(",)31 b(basic)f(authen)m(tication)k(will)c(b)s (e)g(used.)227 2196 y(If)g Fg(url)g Ff(starts)g(with)h("h)m(ttps",)g (Curl)g(will)g(b)s(e)f(used)h(instead)f(of)g(Ocamlnet.)42 b(The)31 b("curl")g(command-line)227 2309 y(program)h(m)m(ust)f(b)s(e)f (in)g(y)m(our)h(path)g(for)f(this)h(to)f(w)m(ork.)41 b(Y)-8 b(ou)31 b(can)g(use)f(the)h Fg(insecure_ssl)f Ff(setting)g(to)227 2422 y(allo)m(w)i(connections)f(to)g(serv)m(ers)f (with)h(self-signed)g(certi\034cates;)g(b)m(y)g(default)g(this)f(is)g (false)g(and)227 2535 y(certi\034cates)i(m)m(ust)f(b)s(e)f(v)-5 b(alid.)227 2683 y Fg(timeout)30 b Ff(can)h(b)s(e)f(used)g(to)h(sp)s (ecify)e(the)i(maxim)m(um)h(amoun)m(t)g(of)e(time)h(elapsed)f(b)s (efore)h(a)f(connection)i(is)227 2796 y(cancelled.)42 b(It)30 b(defaults)h(to)f(300.0)h(seconds.)227 2944 y Fg(headers)f Ff(ma)m(y)g(con)m(tain)h(an)f(arra)m(y)g(of)g(\(name,)g(v) -5 b(alue\))30 b(pairs)g(of)f(additional)j(headers)e(to)g(send)g(with)g (eac)m(h)227 3057 y(request.)227 3205 y(The)h Fg(useragent)f Ff(setting)h(pro)m(vides)g(a)f(con)m(v)m(enien)m(t)j(w)m(a)m(y)f(to)e (c)m(hange)i(the)f(User-Agen)m(t)g(header,)g(whic)m(h)227 3318 y(defaults)g(to)f("XmlRp)s(c-Ligh)m(t/)p Fa(<)p Ff(v)m(ersion)p Fa(>)p Ff(".)227 3466 y(The)h Fg(debug)f Ff(setting,)h(if)f(true,)h(will)g(enable)g(v)m(erb)s(ose)f(debugging)i (output)g(to)e(the)h(standard)g(error)227 3579 y(stream.)0 3784 y Fg(class)47 b(multicall)g(:)g(client)f(->)90 3897 y(object)227 4061 y(method)h(call)g(:)g(string)g(->)g(XmlRpc.value)f (list)h(->)g(XmlRpc.value)g(Lazy.t)427 4233 y Ff(A)m(dds)31 b(a)f(call)h(to)f(this)h Fg(multicall)f Ff(instance.)41 b(If)29 b(the)i(call)g(has)f(already)h(executed,)g(the)g(follo)m(wing) 427 4345 y(exception)h(will)e(b)s(e)g(raised:)41 b(F)-8 b(ailure)32 b("m)m(ulticall)p Fg(#)p Ff(call:)43 b(already)31 b(executed".)227 4550 y Fg(method)47 b(execute)g(:)g(unit)g(->)g(unit) 427 4721 y Ff(F)-8 b(orces)31 b(the)g(call)g(to)f(execute)h (immediately)-8 b(.)43 b(If)29 b(the)i(call)f(has)h(already)g(executed) g(and)f(completed)427 4834 y(successfully)-8 b(,)31 b(the)f(follo)m (wing)i(exception)f(will)g(b)s(e)f(raised:)41 b(F)-8 b(ailure)31 b("m)m(ulticall)p Fg(#)p Ff(execute:)44 b(already)427 4947 y(completed".)227 5151 y Fg(method)j(result)g(:)g(int)g(->)g (XmlRpc.value)1927 5400 y Ff(4)p eop end %%Page: 5 5 TeXDict begin 5 4 bop 427 91 a Ff(Returns)31 b(a)f Fg(multicall)g Ff(result,)h(executing)g(the)g(call)f(if)g(necessary)-8 b(.)41 b(The)31 b(results)f(are)h(n)m(um)m(b)s(ered)427 204 y(starting)g(with)g(zero.)227 409 y Fg(method)47 b(executed)g(:)g(bool)427 581 y Ff(T)-8 b(rue)32 b(if)e(the)g(call)h (has)f(executed,)i(whether)f(or)g(not)f(it)h(succeeded.)227 786 y Fg(method)47 b(completed)g(:)g(bool)427 958 y Ff(T)-8 b(rue)32 b(of)e(the)g(call)h(has)f(executed)i(and)e(completed)i (successfully)-8 b(.)90 1175 y Fg(end)227 1358 y Ff(Con)m(v)m(enience) 33 b(class)d(for)g Fg(system.multicall)g Ff(calls.)455 1506 y(Instances)g(tak)m(e)h(an)f Fg(XmlRpc.client)p Ff([1.1])h(as)f(an)g(argumen)m(t:)603 1755 y Fg(#)47 b(let)g(mc)g(=)g(new)g(XmlRpc.multicall)f(client;;)603 1868 y(val)h(mc)g(:)g(XmlRpc.multicall)f(=)h()455 2129 y Ff(The)30 b("call")i(metho)s(d)e(w)m(orks)h(lik)m(e)g Fg(client#call)p Ff(,)f(but)h(it)f(returns)h(a)f(lazy)h(v)-5 b(alue:)603 2378 y Fg(#)47 b(let)g(a)g(=)g(mc#call)g ("demo.addTwoNumbers")f([`Int)h(3;)g(`Int)g(4];;)603 2491 y(val)g(a)g(:)g(XmlRpc.value)g(Lazy.t)f(=)h()603 2604 y(#)g(let)g(b)g(=)g(mc#call)g("demo.addTwoNumbers")f([`Int)h(42;)g (`String)g("oh)g(noes!"];;)603 2717 y(val)g(b)g(:)g(XmlRpc.value)g (Lazy.t)f(=)h()603 2830 y(#)g(let)g(c)g(=)g(mc#call)g ("demo.addTwoNumbers")f([`Double)h(3.0;)g(`Double)g(4.0];;)603 2943 y(val)g(c)g(:)g(XmlRpc.value)g(Lazy.t)f(=)h()455 3204 y Ff(A)m(t)30 b(this)g(p)s(oin)m(t,)i(the)e(call)h(has)f(not)h(b)s (een)f(executed)i(y)m(et:)603 3453 y Fg(#)47 b(mc#executed;;)603 3566 y(--)g(:)g(bool)g(=)g(false)455 3827 y Ff(As)29 b(so)s(on)h(as)g(one)h(of)f(the)g(return)i(v)-5 b(alues)30 b(is)g(forced,)h(the)f(call)h(is)f(executed:)603 4076 y Fg(#)47 b(Lazy.force)g(a;;)603 4189 y(--)g(:)g(XmlRpc.value)g(=)g (`Int)g(7)603 4302 y(#)g(mc#executed;;)603 4415 y(--)g(:)g(bool)g(=)g (true)455 4676 y Ff(Once)32 b(a)h(call)f(has)g(b)s(een)g(executed,)i (this)e(instance)h(cannot)g(b)s(e)f(used)g(to)h(mak)m(e)f(an)m(y)h (further)g(calls;)455 4789 y(instead,)e(a)f(new)h Fg(multicall)f Ff(instance)h(m)m(ust)g(b)s(e)f(created:)603 5038 y Fg(#)47 b(mc#call)g("demo.addTwoNumbers")f([`Int)h(2;)g(`Int)g(2];;)603 5151 y(Exception:)g(Failure)g("multicall#call:)f(already)h(executed".) 1927 5400 y Ff(5)p eop end %%Page: 6 6 TeXDict begin 6 5 bop 455 242 a Ff(If)24 b(an)i(XmlRp)s(c)g(fault)g(o)s (ccurred,)h(the)f(exception)h(will)g(b)s(e)e(thro)m(wn)i(when)g(the)f (lazy)g(v)-5 b(alue)26 b(is)f(forced:)603 492 y Fg(#)47 b(Lazy.force)g(b;;)603 605 y(Exception:)g(XmlRpc.Error)g(\(-32602,)f ("server)h(error.)g(invalid)g(method)g(parameters"\).)455 868 y Ff(This)30 b(will)h(not)f(prev)m(en)m(t)i(further)f(metho)s(ds)g (from)f(executing)i(successfully:)603 1119 y Fg(#)47 b(Lazy.force)g(c;;)603 1232 y(--)g(:)g(XmlRpc.value)g(=)g(`Double)f(7.) 455 1495 y Ff(It)28 b(is)g(p)s(ossible)h(for)g(a)g Fg(multicall)f Ff(to)h(b)s(e)g(executed)g(but)h(not)f(completed,)i(for)e(example)g(if) g(a)f(trans-)455 1608 y(p)s(ort)g(error)h(o)s(ccurs.)40 b(Aside)28 b(from)g(catc)m(hing)i(the)f(exception,)h(the)f Fg(completed)f Ff(prop)s(ert)m(y)h(indicates)455 1721 y(if)g(the)i(call)g(actually)g(w)m(en)m(t)h(through)f(or)g(not:)603 1972 y Fg(#)47 b(mc#completed;;)603 2085 y(--)g(:)g(bool)g(=)g(true)455 2348 y Ff(It)32 b(is)h(not)h(necessary)f(to)h(use)f(lazy)g(v)-5 b(alues.)50 b(Instead,)34 b(the)g(call)f(can)h(b)s(e)f(executed)h (explicitly)-8 b(,)35 b(and)455 2461 y(the)30 b(results)h(can)f(b)s(e)g (retriev)m(ed)i(b)m(y)f(n)m(um)m(b)s(er:)603 2711 y Fg(#)47 b(let)g(mc)g(=)g(new)g(XmlRpc.multicall)f(client;;)603 2824 y(val)h(mc)g(:)g(XmlRpc.multicall)f(=)h()603 2937 y(#)g(ignore)g(\(mc#call)g("demo.addTwoNumbers")f([`Int)h(2;)g (`Int)g(2]\);;)603 3050 y(--)g(:)g(unit)g(=)g(\(\))603 3163 y(#)g(ignore)g(\(mc#call)g("demo.addTwoNumbers")f([`Int)h(3;)g (`Int)g(3]\);;)603 3276 y(--)g(:)g(unit)g(=)g(\(\))603 3389 y(#)g(mc#result)g(1;;)603 3502 y(--)g(:)g(XmlRpc.value)g(=)g(`Int) g(6)0 3933 y Fc(1.2)112 b(Utilit)m(y)34 b(functions)0 4129 y Fg(val)47 b(dump)g(:)g(value)g(->)g(string)227 4267 y Ff(Con)m(v)m(erts)32 b(an)e(XmlRp)s(c)g(v)-5 b(alue)31 b(to)f(a)h(h)m(uman-readable)i(string.)0 4585 y Fc(1.3)112 b(Lo)m(w-lev)m(el)37 b(in)m(terface)0 4782 y Fg(type)47 b(message)g(=)94 4895 y(|)g(MethodCall)g(of)g(\(string)f(*)h(value)g (list\))94 5008 y(|)g(MethodResponse)g(of)f(value)94 5121 y(|)h(Fault)g(of)g(\(int)g(*)g(string\))1927 5400 y Ff(6)p eop end %%Page: 7 7 TeXDict begin 7 6 bop 227 91 a Ff(T)m(yp)s(e)31 b(for)f(XmlRp)s(c)g (messages.)0 298 y Fg(val)47 b(message_of_xml_element)f(:)94 411 y(?base64_decoder:\(string)g(->)h(string\))g(->)94 524 y(?datetime_decoder:\(string)f(->)h(XmlRpcDateTime.t\))g(->)g (Xml.xml)g(->)g(message)227 660 y Ff(Con)m(v)m(erts)32 b(an)e(Xml)h(Ligh)m(t)h(elemen)m(t)g(to)e(an)h(XmlRp)s(c)e(message.)0 867 y Fg(val)47 b(xml_element_of_message)f(:)94 980 y (?base64_encoder:\(string)g(->)h(string\))g(->)94 1093 y(?datetime_encoder:\(XmlRpcDateTime.t)f(->)h(string\))g(->)g(message)g (->)g(Xml.xml)227 1229 y Ff(Con)m(v)m(erts)32 b(an)e(XmlRp)s(c)g (message)h(to)f(an)h(Xml)f(Ligh)m(t)i(elemen)m(t.)0 1436 y Fg(val)47 b(value_of_xml_element)f(:)94 1549 y (?base64_decoder:\(string)g(->)h(string\))g(->)94 1662 y(?datetime_decoder:\(string)f(->)h(XmlRpcDateTime.t\))g(->)g(Xml.xml)g (->)g(value)227 1798 y Ff(Con)m(v)m(erts)32 b(an)e(Xml)h(Ligh)m(t)h (elemen)m(t)g(to)e(an)h(XmlRp)s(c)e(v)-5 b(alue.)0 2005 y Fg(val)47 b(xml_element_of_value)f(:)94 2118 y (?base64_encoder:\(string)g(->)h(string\))g(->)94 2231 y(?datetime_encoder:\(XmlRpcDateTime.t)f(->)h(string\))g(->)g(value)g (->)g(Xml.xml)227 2367 y Ff(Con)m(v)m(erts)32 b(an)e(XmlRp)s(c)g(v)-5 b(alue)31 b(to)f(an)h(Xml)f(Ligh)m(t)i(elemen)m(t.)0 2679 y Fc(1.4)112 b(Serv)m(er)38 b(to)s(ols)0 2874 y Fg(val)47 b(serve)g(:)94 2987 y(?base64_encoder:\(string)f(->)h (string\))g(->)94 3100 y(?base64_decoder:\(string)f(->)h(string\))g(->) 94 3213 y(?datetime_encoder:\(XmlRpcDateTime.t)f(->)h(string\))g(->)94 3326 y(?datetime_decoder:\(string)f(->)h(XmlRpcDateTime.t\))g(->)94 3439 y(?error_handler:\(exn)f(->)h(message\))g(->)94 3552 y(\(string)g(->)g(value)g(list)f(->)h(value\))g(->)g(string)g(->)g (string)227 3688 y Ff(Creates)31 b(a)g(function)g(from)f(string)h (\(Xml)f(represen)m(ting)i(a)f Fg(MethodCall)p Ff(\))f(to)g(string)h (\(Xml)g(represen)m(ting)227 3801 y(a)g Fg(MethodResult)e Ff(or)i Fg(Fault)p Ff(\))f(giv)m(en)h(a)g(function)g(of)f(the)g(form:) 41 b(\()p Fg(name)30 b Fb(!)g Fg(params)g Fb(!)g Fg(result)p Ff(\),)g(where)227 3914 y Fg(name)g Ff(is)g(the)h(name)g(of)f(the)h (metho)s(d,)g Fg(params)f Ff(is)g(a)g(list)g(of)g(parameter)i(v)-5 b(alues,)30 b(and)h Fg(result)f Ff(is)g(the)227 4027 y(result)h(v)-5 b(alue.)227 4176 y(This)30 b(function)h(can)g(b)s(e)f (used)g(to)g(build)h(man)m(y)g(di\033eren)m(t)g(kinds)f(of)g(XmlRp)s(c) f(serv)m(ers)i(since)f(it)g(mak)m(es)h(no)227 4289 y(assumptions)g(ab)s (out)g(the)f(net)m(w)m(ork)i(library)f(or)g(other)g(comm)m(unications)i (metho)s(d)e(used.)227 4438 y(If)f(an)g(exception)i(other)f(than)f Fg(XmlRpc.Error)p Ff([1.1])h(o)s(ccurs,)f(the)h(exception)g(is)f (passed)h(to)227 4550 y Fg(error_handler)p Ff(.)40 b(If)28 b Fg(error_handler)h Ff(returns)h(a)g(message,)g(the)f(message)h(will)g (b)s(e)f(used)h(as)f(the)g(result.)227 4663 y(If)h(an)g Fg(XmlRpc.Error)p Ff([1.1])h(is)f(raised)g(b)m(y)h(either)g(the)g(main) g(function)g(or)f Fg(error_handler)p Ff(,)g(it)h(will)g(b)s(e)227 4776 y(con)m(v)m(erted)i(to)d(an)h(XmlRp)s(c)e Fg(Fault)p Ff(.)41 b(An)m(y)30 b(other)h(exception)g(raised)g(b)m(y)f Fg(error_handler)g Ff(is)g(allo)m(w)m(ed)j(to)227 4889 y(escap)s(e.)227 5038 y(F)-8 b(or)31 b(a)g(full-featured,)g (easy-to-use,)g(net)m(w)m(ork-capable)i(serv)m(er)e(implemen)m(tation,) i(see)d(the)227 5151 y Fg(XmlRpcServer)p Ff([2])h(mo)s(dule.)1927 5400 y(7)p eop end %%Page: 8 8 TeXDict begin 8 7 bop 0 91 a Fg(val)47 b(serve_message)g(:)94 204 y(?error_handler:\(exn)f(->)h(message\))g(->)94 317 y(\(string)g(->)g(value)g(list)f(->)h(value\))g(->)94 430 y(message)g(->)g(message)227 568 y Ff(P)m(erforms)32 b(the)e(same)h(function)g(as)f Fg(serve)p Ff(,)g(but)h(op)s(erates)f (on)h(t)m(yp)s(ed)g(messages)f(instead)h(of)f(strings.)0 780 y Fg(val)47 b(default_error_handler)f(:)h(exn)g(->)g(message)227 918 y Ff(The)31 b(default)g(error)g(handler)g(for)g Fg(serve)p Ff(.)227 1068 y(This)g(error)g(handler)g(catc)m(hes)h(all)e(exceptions) h(and)g(con)m(v)m(erts)g(them)g(in)m(to)h(faults)e(b)m(y)g(wrapping)i (them)f(in)227 1181 y Fg(XmlRpc.Error)p Ff(.)0 1394 y Fg(val)47 b(quiet_error_handler)f(:)h(exn)g(->)g(message)227 1532 y Ff(A)30 b("quiet")h(error)g(handler)h(for)e Fg(serve)p Ff(.)227 1682 y(This)h(error)g(handler)g(simply)f(re-raises)h(the)g (exception.)41 b(Use)30 b(this)g(if)g(y)m(ou)h(w)m(an)m(t)h(exceptions) f(to)f(remain)227 1795 y(unhandled)i(so)e(that)h(they)f(will)h(escap)s (e)g(to)f(the)h(error)g(log.)41 b(The)30 b(clien)m(t)i(will)f(receiv)m (e)g(a)f(generic)227 1908 y("transp)s(ort)h(error",)h(whic)m(h)f(is)f (more)h(secure)g(since)f(it)h(do)s(es)f(not)g(rev)m(eal)i(an)m(y)e (information)i(ab)s(out)f(the)227 2021 y(sp)s(eci\034c)g(exception)g (that)g(o)s(ccurred.)0 2382 y Fi(2)131 b(Mo)t(dule)44 b Fe(XmlRpcServer)39 b Fi(:)58 b(XmlRp)t(c)44 b(Ligh)l(t)h(serv)l(er.)0 2703 y Ff(Example:)188 2954 y Fg(let)i(server)g(=)g(new)g (XmlRpcServer.cgi)f(\(\))h(in)188 3067 y(server#register)g ("demo.sayHello")282 3179 y(\(fun)g(_)g(->)g(`String)f("Hello!"\);)188 3292 y(server#run)h(\(\))141 3405 y Ff(By)25 b(inheriting)h(from)g Fg(XmlRpcServer.base)p Ff([2.1],)g(all)g(serv)m(ers)f(pro)m(vide)h(the) f(follo)m(wing)i(in)m(trosp)s(ection)g(func-)0 3518 y(tions)49 b(b)m(y)g(default:)79 b Fg(system.listMethods)p Ff(,)53 b Fg(system.getCapabilities)p Ff(.)96 b(T)-8 b(o)50 b(prev)m(en)m(t)h (their)e(use,)54 b(use)0 3631 y Fg(server#unregister)p Ff(.)141 3744 y(A)m(dditionally)-8 b(,)52 b(the)46 b(metho)s(ds)g Fg(system.methodHelp)g Ff(and)g Fg(system.methodSignature)f Ff(will)i(b)s(e)e(made)0 3857 y(a)m(v)-5 b(ailable)32 b(if)e(at)g(least)h(one)f(metho)s(d)h(help)g(or)g(metho)s(d)f (signature)i(is)e(pro)m(vided.)0 3995 y Fg(type)47 b(param_type)g(=)g ([)g(`Array)94 4108 y(|)g(`Binary)94 4221 y(|)g(`Boolean)94 4333 y(|)g(`DateTime)94 4446 y(|)g(`Double)94 4559 y(|)g(`Int)94 4672 y(|)g(`String)94 4785 y(|)g(`Struct)94 4898 y(|)g(`Undefined)g(]) 227 5036 y Ff(T)m(yp)s(e)31 b(of)f(parameters)h(used)g(in)f(metho)s(d)h (signatures.)1927 5400 y(8)p eop end %%Page: 9 9 TeXDict begin 9 8 bop 0 91 a Fc(2.1)112 b(Base)38 b(classes)0 287 y Fg(class)47 b(virtual)g(base)g(:)90 400 y(object)227 574 y(val)g(methods)g(:)g(\(string,)g(XmlRpc.value)f(list)h(->)g (XmlRpc.value\))g(Hashtbl.t)427 748 y Ff(Hash)m(table)32 b(mapping)f(metho)s(d)g(names)g(to)f(implemen)m(tation)k(functions.)227 959 y Fg(val)47 b(mutable)g(base64_encoder)g(:)g(string)f(->)h(string) 427 1133 y Ff(Base-64)31 b(binary)g(enco)s(ding)g(function.)227 1344 y Fg(val)47 b(mutable)g(base64_decoder)g(:)g(string)f(->)h(string) 427 1519 y Ff(Base-64)31 b(binary)g(deco)s(ding)g(function.)227 1730 y Fg(val)47 b(mutable)g(datetime_encoder)g(:)g(XmlRpcDateTime.t)f (->)h(string)427 1904 y Ff(ISO-8601)31 b(date/time)h(enco)s(ding)f (function.)227 2115 y Fg(val)47 b(mutable)g(datetime_decoder)g(:)g (string)f(->)h(XmlRpcDateTime.t)427 2289 y Ff(ISO-8601)31 b(date/time)h(deco)s(ding)f(function.)227 2500 y Fg(val)47 b(mutable)g(error_handler)g(:)g(exn)g(->)f(XmlRpc.message)427 2675 y Ff(Handler)31 b(for)f(unhandled)i(exceptions.)227 2886 y Fg(method)47 b(set_base64_encoder)g(:)g(\(string)f(->)h (string\))g(->)g(unit)427 3060 y Ff(Sets)31 b(an)f(alternate)i(Base-64) f(binary)f(enco)s(ding)i(function.)227 3271 y Fg(method)47 b(set_base64_decoder)g(:)g(\(string)f(->)h(string\))g(->)g(unit)427 3445 y Ff(Sets)31 b(an)f(alternate)i(Base-64)f(binary)f(deco)s(ding)i (function.)227 3656 y Fg(method)47 b(set_datetime_encoder)g(:)g (\(XmlRpcDateTime.t)f(->)h(string\))g(->)g(unit)427 3831 y Ff(Sets)31 b(an)f(alternate)i(ISO-8601)f(date/time)h(enco)s(ding)f (function.)227 4042 y Fg(method)47 b(set_datetime_decoder)g(:)g (\(string)f(->)h(XmlRpcDateTime.t\))g(->)g(unit)427 4216 y Ff(Sets)31 b(an)f(alternate)i(ISO-8601)f(date/time)h(deco)s(ding)f (function.)227 4427 y Fg(method)47 b(set_error_handler)g(:)g(\(exn)g (->)f(XmlRpc.message\))h(->)g(unit)427 4601 y Ff(Sets)31 b(an)f(alternate)i(handler)f(for)f(unhandled)i(exceptions.)42 b(See)427 4714 y Fg(XmlRpc.default_error_handler)p Ff([1.4])31 b(and)f Fg(XmlRpc.quiet_error_handler)p Ff([1.4])h(for)427 4827 y(examples.)227 5038 y Fg(method)47 b(serve)g(:)321 5151 y(\(string)g(->)g(XmlRpc.value)g(list)g(->)f(XmlRpc.value\))h(->)g (string)g(->)g(string)1927 5400 y Ff(9)p eop end %%Page: 10 10 TeXDict begin 10 9 bop 427 91 a Ff(F)-8 b(or)31 b(use)f(in)h(sub)s (classes;)e(calls)i Fg(XmlRpc.serve)p Ff([1.4])f(with)h(the)g(curren)m (t)h(enco)s(ders,)f(deco)s(ders,)g(and)427 204 y(error)g(handler.)227 401 y Fg(method)47 b(serve_message)g(:)321 514 y(\(string)g(->)g (XmlRpc.value)g(list)g(->)f(XmlRpc.value\))h(->)321 627 y(XmlRpc.message)g(->)g(XmlRpc.message)427 795 y Ff(Lik)m(e)31 b Fg(serve)p Ff(,)g(but)f(op)s(erates)h(on)f(messages)h(instead)f(of)g (strings.)227 992 y Fg(method)47 b(register)g(:)321 1104 y(string)g(->)321 1217 y(?help:string)g(->)321 1330 y (?signature:XmlRpcServer.param_type)f(list)h(->)321 1443 y(?signatures:XmlRpcServer.param_type)f(list)h(list)g(->)321 1556 y(\(XmlRpc.value)g(list)g(->)g(XmlRpc.value\))f(->)h(unit)427 1724 y Ff(Registers)30 b(a)h(metho)s(d)g(with)f(the)h(serv)m(er.)427 1849 y(If)f(a)g Fg(help)g Ff(string)h(is)f(sp)s(eci\034ed,)g(its)h(con) m(ten)m(ts)h(will)e(b)s(e)g(returned)i(for)e(calls)h(to)427 1962 y Fg(system.methodHelp)f Ff(for)g(this)g(metho)s(d.)427 2088 y(If)g Fg(signature)g Ff(is)g(sp)s(eci\034ed,)g(this)h(metho)s (d's)f(signature)i(will)e(b)s(e)g(published)i(b)m(y)427 2201 y Fg(system.methodSignature)e Ff(and)h(\(shallo)m(w\))g(t)m(yp)s (e-c)m(hec)m(king)i(will)e(b)s(e)f(enabled)h(for)f(parameters)427 2314 y(passed)h(in)m(to)g(this)f(metho)s(d.)427 2439 y(Multiple)h(signatures)g(can)g(b)s(e)f(supplied)h(via)f Fg(signatures)g Ff(if)g(desired)h(to)f(pro)m(vide)i(for)e(o)m(v)m (erloaded)427 2552 y(metho)s(ds.)427 2678 y(Signatures)i(are)e(of)g (the)h(form)g Fg(return-type;)46 b(param1-type;)h(param2-type;)g(...)40 b Ff(where)427 2791 y(eac)m(h)32 b(t)m(yp)s(e)e(is)g(an)h(instance)g (of)f(the)g Fg(XmlRpcServer.param_type)p Ff([2])g(v)-5 b(arian)m(t.)227 2988 y Fg(method)47 b(unregister)g(:)g(string)g(->)g (unit)427 3155 y Ff(Remo)m(v)m(es)31 b(a)f(metho)s(d)h(from)g(the)g (serv)m(er.)227 3352 y Fg(method)47 b(virtual)g(run)g(:)g(unit)g(->)g (unit)427 3520 y Ff(Starts)31 b(the)g(main)g(serv)m(er)f(pro)s(cess.)90 3729 y Fg(end)227 3905 y Ff(Abstract)h(base)f(class)g(for)g(XmlRp)s(c)g (serv)m(ers.)0 4102 y Fg(class)47 b(type)g(server)g(=)90 4215 y(object)227 4383 y(inherit)g(XmlRpcServer.base)30 b Ff([2.1])227 4517 y Fg(method)47 b(run)g(:)g(unit)g(->)g(unit)427 4685 y Ff(Starts)31 b(the)g(main)g(serv)m(er)f(pro)s(cess.)90 4894 y Fg(end)227 5070 y Ff(T)m(yp)s(e)h(of)f(concrete)h(XmlRp)s(c)f (serv)m(er)h(classes.)1905 5400 y(10)p eop end %%Page: 11 11 TeXDict begin 11 10 bop 0 91 a Fc(2.2)112 b(Serv)m(er)38 b(implemen)m(tations)0 288 y Fg(class)47 b(cgi)g(:)g(unit)g(->)g (server)227 426 y Ff(CGI)30 b(XmlRp)s(c)g(serv)m(er)h(based)f(on)h (Netcgi2.)0 638 y Fg(class)47 b(netplex)g(:)g (?parallelizer:Netplex_types.parallelizer)f(->)h(?handler:string)f(->)h (unit)g(->)g(server)227 776 y Ff(Stand-alone)32 b(XmlRp)s(c)e(serv)m (er)h(based)f(on)h(Netplex.)0 1094 y Fc(2.3)112 b(Utilit)m(y)34 b(functions)0 1291 y Fg(val)47 b(invalid_method)g(:)g(string)f(->)h('a) 227 1428 y Ff(Raise)30 b(an)h Fg(XmlRpc.Error)p Ff([1.1])f(indicating)i (a)e(metho)s(d)h(name)g(not)g(found.)0 1641 y Fg(val)47 b(invalid_params)g(:)g(unit)f(->)h('a)227 1779 y Ff(Raise)30 b(an)h Fg(XmlRpc.Error)p Ff([1.1])f(indicating)i(in)m(v)-5 b(alid)31 b(metho)s(d)g(parameters.)0 2140 y Fi(3)131 b(Mo)t(dule)44 b Fe(XmlRpcDateTime)39 b Fi(:)58 b(Date/time)43 b(t)l(yp)t(e.)0 2464 y Fc(3.1)112 b(T)m(yp)s(es)0 2661 y Fg(exception)47 b(Parse_error)f(of)h(string)227 2799 y Ff(Raised)30 b(b)m(y)h Fg(XmlRpcDateTime.of_string)p Ff([3.6])f(if)g(a)g(string)h(could)g(not)g(b)s(e)f(parsed.)41 b(The)31 b(exception)227 2912 y(con)m(tains)h(the)f(input)g(string.)0 3124 y Fg(type)47 b(t)g(=)g(int)g(*)g(int)g(*)g(int)f(*)h(int)g(*)g (int)g(*)g(int)g(*)g(int)227 3262 y Ff(T)m(yp)s(e)31 b(of)f(XmlRp)s(c-compatible)i(date/time)f(v)-5 b(alues.)41 b(\(y)m(ear,)31 b(mon)m(th,)h(da)m(y)-8 b(,)31 b(hour,)g(min)m(ute,)h (second,)227 3375 y(time)f(zone)g(o\033set)f(in)h(min)m(utes\))0 3693 y Fc(3.2)112 b(Comparison)0 3889 y Fg(val)47 b(compare)g(:)g(t)g (->)g(t)g(->)f(int)227 4027 y Ff(Standard)32 b(comparator)g(for)e (date/time)i(v)-5 b(alues.)40 b(Con)m(v)m(erts)32 b(all)f(v)-5 b(alues)30 b(to)g(UTC)h(b)s(efore)f(comparing)i(to)227 4140 y(ensure)f(correct)g(b)s(eha)m(vior)h(with)e(v)-5 b(alues)31 b(of)f(di\033ering)h(time)g(zones.)0 4353 y Fg(val)47 b(equal)g(:)g(t)g(->)g(t)g(->)f(bool)227 4491 y Ff(Standard)32 b(equalit)m(y)f(function)g(for)f(date/time)i(v)-5 b(alues.)40 b(Con)m(v)m(erts)32 b(all)f(v)-5 b(alues)30 b(to)g(UTC)h(b)s(efore)227 4603 y(comparing.)0 4816 y Fg(val)47 b(hash)g(:)g(t)g(->)g(int)227 4954 y Ff(Standard)32 b(hash)e(function)h(for)g(date/time)g(v)-5 b(alues.)41 b(Con)m(v)m(erts)32 b(v)-5 b(alues)30 b(to)g(UTC)h(b)s(efore)f (hashing.)1905 5400 y(11)p eop end %%Page: 12 12 TeXDict begin 12 11 bop 0 91 a Fc(3.3)112 b(Curren)m(t)37 b(date)h(and)g(time)0 287 y Fg(val)47 b(now)g(:)g(unit)g(->)g(t)227 424 y Ff(Returns)31 b(the)f(curren)m(t)i(date)f(and)g(time)g(in)f(the)h (lo)s(cal)f(time)h(zone.)0 633 y Fg(val)47 b(now_utc)g(:)g(unit)g(->)f (t)227 770 y Ff(Returns)31 b(the)f(curren)m(t)i(date)f(and)g(time)g(in) f(UTC.)0 1084 y Fc(3.4)112 b(Time)36 b(zone)i(adjustmen)m(ts)0 1280 y Fg(val)47 b(set_tz_offset)g(:)g(int)f(->)h(t)g(->)g(t)227 1417 y Ff(A)m(djusts)30 b(the)h(time)g(zone)g(o\033set,)f(preserving)h (equalit)m(y)-8 b(.)0 1626 y Fg(val)47 b(fix_tz_offset)g(:)g(int)f(->)h (t)g(->)g(t)227 1763 y Ff(F)-8 b(orces)31 b(the)g(time)g(zone)g (o\033set)f(to)g(a)h(di\033eren)m(t)g(v)-5 b(alue,)31 b(ignoring)h(all)e(other)h(\034elds.)41 b(Use)30 b(this)g(to)g(correct) 227 1875 y(the)h(time)g(zone)g(of)f(a)g(date/time)i(v)-5 b(alue)30 b(that)h(w)m(as)g(receiv)m(ed)h(without)f(a)f(time)h(zone)g (o\033set)f(and)h(is)227 1988 y(kno)m(wn)h(not)e(to)h(b)s(e)f(UTC.)0 2303 y Fc(3.5)112 b(Con)m(v)m(ersion)0 2499 y Fg(val)47 b(from_unixfloat)g(:)g(float)f(->)h(t)227 2635 y Ff(Builds)31 b(a)f(date/time)i(v)-5 b(alue)30 b(from)h(ep)s(o)s(c)m(h)g(seconds)f (in)g(the)h(lo)s(cal)g(time)g(zone.)0 2844 y Fg(val)47 b(from_unixfloat_utc)f(:)h(float)g(->)g(t)227 2981 y Ff(Builds)31 b(a)f(date/time)i(v)-5 b(alue)30 b(from)h(ep)s(o)s(c)m(h)g (seconds)f(in)g(UTC.)0 3190 y Fg(val)47 b(to_unixfloat)g(:)g(t)g(->)f (float)227 3327 y Ff(Con)m(v)m(erts)32 b(a)e(date/time)i(v)-5 b(alue)31 b(to)f(ep)s(o)s(c)m(h)h(seconds)f(in)h(the)f(lo)s(cal)h(time) g(zone.)0 3536 y Fg(val)47 b(to_unixfloat_utc)g(:)f(t)h(->)g(float)227 3673 y Ff(Con)m(v)m(erts)32 b(a)e(date/time)i(v)-5 b(alue)31 b(to)f(ep)s(o)s(c)m(h)h(seconds)f(in)h(UTC.)0 3882 y Fg(val)47 b(from_unixtm)g(:)g(Unix.tm)f(->)h(t)227 4019 y Ff(Builds)31 b(a)f(date/time)i(v)-5 b(alue)30 b(from)h(a)f(Unix.tm)h (v)-5 b(alue)30 b(in)h(the)g(lo)s(cal)f(time)h(zone.)0 4228 y Fg(val)47 b(from_unixtm_utc)g(:)f(Unix.tm)h(->)g(t)227 4365 y Ff(Builds)31 b(a)f(date/time)i(v)-5 b(alue)30 b(from)h(a)f(Unix.tm)h(v)-5 b(alue)30 b(in)h(UTC.)0 4573 y Fg(val)47 b(to_unixtm)g(:)g(t)g(->)g(Unix.tm)227 4710 y Ff(Con)m(v)m(erts)32 b(a)e(date/time)i(v)-5 b(alue)31 b(to)f(a)h(Unix.tm)f(v)-5 b(alue)31 b(in)f(the)h(lo)s(cal)f(time)h (zone.)0 4919 y Fg(val)47 b(to_unixtm_utc)g(:)g(t)f(->)h(Unix.tm)227 5056 y Ff(Con)m(v)m(erts)32 b(a)e(date/time)i(v)-5 b(alue)31 b(to)f(a)h(Unix.tm)f(v)-5 b(alue)31 b(in)f(UTC.)1905 5400 y(12)p eop end %%Page: 13 13 TeXDict begin 13 12 bop 0 91 a Fc(3.6)112 b(ISO-8601)38 b(parsing)g(and)g(generation)0 288 y Fg(val)47 b(of_string)g(:)g (string)f(->)h(t)227 426 y Ff(P)m(arses)31 b(an)g(\(XmlRp)s(c-\035a)m (v)m(or\))g(ISO-8601)h(date/time)g(v)-5 b(alue)30 b(from)h(a)f(string.) 0 638 y Fg(val)47 b(to_string)g(:)g(t)g(->)g(string)227 776 y Ff(Generates)31 b(an)g(ISO-8601)g(string)g(from)f(a)g(date/time)i (v)-5 b(alue.)0 1137 y Fi(4)131 b(Mo)t(dule)44 b Fe(XmlRpcBase64)39 b Fi(:)58 b(Base64)44 b(co)t(dec.)0 1340 y Ff(8-bit)33 b(c)m(haracters)h(are)f(enco)s(ded)h(in)m(to)f(6-bit)g(ones)g(using)g (ASCI)s(I)e(lo)s(okup)i(tables.)48 b(Default)32 b(tables)h(maps)g (0..63)0 1453 y(v)-5 b(alues)30 b(on)h(c)m(haracters)h(A-Z,)e(a-z,)h (0-9,)g('+')f(and)h('/')g(\(in)f(that)h(order\).)0 1709 y Fg(exception)47 b(Invalid_char)227 1847 y Ff(This)31 b(exception)g(is)f(raised)h(when)g(reading)g(an)g(in)m(v)-5 b(alid)31 b(c)m(haracter)h(from)f(a)f(base64)h(input.)0 2059 y Fg(exception)47 b(Invalid_table)227 2197 y Ff(This)31 b(exception)g(is)f(raised)h(if)e(the)i(enco)s(ding)g(or)g(deco)s(ding)g (table)g(size)f(is)g(not)h(correct.)0 2410 y Fg(type)47 b(encoding_table)g(=)f(char)h(array)227 2547 y Ff(An)30 b(enco)s(ding)i(table)f(maps)f(in)m(tegers)i(0..63)f(to)f(the)h (corresp)s(onding)g(c)m(har.)0 2760 y Fg(type)47 b(decoding_table)g(=)f (int)h(array)227 2898 y Ff(A)30 b(deco)s(ding)h(table)g(maps)g(c)m (hars)g(0..255)g(to)g(the)f(corresp)s(onding)i(0..63)f(v)-5 b(alue)30 b(or)h(-1)f(if)g(the)h(c)m(har)g(is)f(not)227 3011 y(accepted.)0 3223 y Fg(val)47 b(str_encode)g(:)g (?tbl:encoding_table)f(->)h(string)g(->)g(string)227 3361 y Ff(Enco)s(de)31 b(a)g(string)f(in)m(to)i(Base64.)0 3574 y Fg(val)47 b(str_decode)g(:)g(?tbl:decoding_table)f(->)h(string)g (->)g(string)227 3711 y Ff(Deco)s(de)30 b(a)f(string)g(enco)s(ded)h(in) m(to)g(Base64,)g(raise)f Fg(Invalid_char)g Ff(if)g(a)g(c)m(haracter)i (in)e(the)h(input)g(string)f(is)227 3824 y(not)i(a)f(v)-5 b(alid)31 b(one.)0 4037 y Fg(val)47 b(encode)g(:)g(?tbl:encoding_table) f(->)h(char)g(Stream.t)g(->)g(char)g(Stream.t)227 4175 y Ff(Generic)31 b(base64)g(enco)s(ding)g(o)m(v)m(er)h(a)e(c)m(haracter) i(stream.)0 4387 y Fg(val)47 b(decode)g(:)g(?tbl:decoding_table)f(->)h (char)g(Stream.t)g(->)g(char)g(Stream.t)227 4525 y Ff(Generic)31 b(base64)g(deco)s(ding)g(o)m(v)m(er)h(a)e(c)m(haracter)i(stream.)0 4738 y Fg(val)47 b(make_decoding_table)f(:)h(encoding_table)g(->)g (decoding_table)227 4875 y Ff(Create)32 b(a)e(v)-5 b(alid)30 b(deco)s(ding)i(table)f(from)f(an)h(enco)s(ding)g(one.)1905 5400 y(13)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF xmlrpc-light-0.6.1/doc/xmlrpc-light/latex/doc.toc0000664000175000017500000000230111140336574020670 0ustar ramenramen\contentsline {section}{\numberline {1}Module {\tt {XmlRpc}} : XmlRpc Light.}{1} \contentsline {subsection}{\numberline {1.1}High-level interface}{1} \contentsline {subsection}{\numberline {1.2}Utility functions}{6} \contentsline {subsection}{\numberline {1.3}Low-level interface}{6} \contentsline {subsection}{\numberline {1.4}Server tools}{7} \contentsline {section}{\numberline {2}Module {\tt {XmlRpcServer}} : XmlRpc Light server.}{8} \contentsline {subsection}{\numberline {2.1}Base classes}{9} \contentsline {subsection}{\numberline {2.2}Server implementations}{11} \contentsline {subsection}{\numberline {2.3}Utility functions}{11} \contentsline {section}{\numberline {3}Module {\tt {XmlRpcDateTime}} : Date/time type.}{11} \contentsline {subsection}{\numberline {3.1}Types}{11} \contentsline {subsection}{\numberline {3.2}Comparison}{11} \contentsline {subsection}{\numberline {3.3}Current date and time}{12} \contentsline {subsection}{\numberline {3.4}Time zone adjustments}{12} \contentsline {subsection}{\numberline {3.5}Conversion}{12} \contentsline {subsection}{\numberline {3.6}ISO-8601 parsing and generation}{13} \contentsline {section}{\numberline {4}Module {\tt {XmlRpcBase64}} : Base64 codec.}{13} xmlrpc-light-0.6.1/doc/xmlrpc-light/latex/doc.pdf0000664000175000017500000035155011140336574020671 0ustar ramenramen%PDF-1.4 %Çì¢ 5 0 obj <> stream xœíÙnÛFð]_¡º/rQ­¹/}É6EŠ ‰Z°ƒ–¡h›uD¤œ¤_ßÙÙ]rVdì¤H ) _ËáÎÎ}­ÞŒÆÇþ²¿óÅèìy<¾®GÁøGø¾½qÛ_ùbü`@œë—Äxv52¯Nù8ã8LXšŒg‹Ñäájy:{=1‹àñl>š4…YáÝJ­`·¨ÝmªR&ÆB1•¸†á“tz|;ˆví€Ù·ƒ§+ëúã.¼uQ@]€mC»'D¨€DÚCdìñ¡ÓsŸi„mˆP}ÓxQlŒ-žbƒ» v1i …”Aæ5YU5fw2Ø òˆ÷ ñ!Ñã[N¬—vª«H0m>´ÀÂ&MýÚd¶×ˆ‰žOPþ~þ¬SSÒ—ø{µtzîf]Ùüõ¶n\W!a1Qu¬Ç¸ˆ%ûæ#âC§ç^EÛÄ'J|PsyB±›’fZ]0yl44=;Ö"î QßZž¼x6M¢mLÅ-2(êry’ÐýÛÈþ],‹ 6›Ñ¼à²ïœÛkćDÏ ~°&÷Æ$åsôÂôH1R=¤f^[P¯Ö½¡Éå/&ùªëyÍ‹Üv½â€ÜAuÔqJ]ÈB1–Ê \ ­D’2ç‚ `¢Ôq!Ú­€M±¤G^ŸÂÐRÂ8wBêfÁiš°HØapäUú î6¹Ÿ¼Þ˜[jހﶜ›q9äód\n9ÑsIô÷Ã]V£ßœî|µ2“F0Øî 6‚ÞÖ Õ¶¨¿·\L»&­=BL„˜We{g]ôênzï dD]ÊÛ²1\ˆ¥˜j‰â¡ EyVU.ž)zñàŽ[|†¶”ž¸*©ŠªU_úw\"¤ÕÓàõ)¼J!¹¼››¬±Úv¨ǫ́lJHº˜¼j·4ò5#ººµº'£¥Ñ1Iù{Çxy@ß©u7I¸W>Ú›$àËqž SL ¯¡y9É/O­’Oˆ ˆ§ð#EeäTée·¦ŽixxP,_g #b/ŠL9ðþÍÅó¡Š/#„aºÕû®RKv^—x•ºÙXóý(œ}:„ºVœ¿k°¸’z„Sµ]]õÜAÏñMÑ%¡—4x ɨî Ù—’à¤I°Xh)A2È»kƒÜZ¿Ópú ^¨»­du_QŸbä#¹@ë3‘¡ŽBc𻑋±ßeZCÏ{âu2„£q'Þªhúâݘèê/þÐí²xÛ‡3Ñ™¡sýc¯ä<¹išõùÙYµçs³ª›óbÿ‰‘yl—,9^y;|ä¢ÞVuMD×N Ô}«šK@ãÿI‘߬Nú›\üõ¢UbxƒØÞÉMQU«oN^⣨M Ýéc­Ú†pÖ°Oóg±œƒß-,wˆÁ^:öÍ·‹5>–Ì'ÑxP<¥“/m<Ž/Å»¼X·%Gw–Ç›‰]RRAX#Ѝž]ÂÁ>I×ö»Yµ9ÌŽJ‚Û‰gÖϳÒe!UuS#*I+îù•BÓP[»¢W}–yµ[ѨÈó÷÷gBW0ÔÄÕ”\¦¸Ðž–dÜòpè*†`rð‚èc¢˜EÞ'ËÏF¿Â×?¼•ì3endstream endobj 6 0 obj 1893 endobj 208 0 obj <> stream xœ­XmÛ6 þž/û¾aV-Y~;`+ZlØ:E×fÀ†´ØGɹpì;¿´8`?~Ô‹eéì‹ã¶8דiŠ|H>$}·ö^{üGýÎN«'o¢õ±Yyë_áßqu·ÂB`­~e§õó ‘„¿DÖ›ÃJ¾êâuDÖQ£$^oN+§½¿eW›+#Ï7û•ó1-:qæû(öANÿÈ0F$ö°:ÚŽþ}V×é½x;A~ ß®B6D N’óyÓòS‡>¢~²Æ> Bˆ‡ÿM\ùò‘ÏpõÜÐGÕWUÁÒ’? <qK׿a© æ¢sÆÿœ¶l“ŸAˆèÝŠ7·Yÿ’ Å…ó—TÝ®`—!t(ª´]Ћ²}BSzs)å 'ç •>QYD‡óGôJQ7ŒPÈeçì}•ËõÇsƼÕ9óÙù5£¾ËÚËÔ¿3. :ü~¬T”Ö»«1‚}qÁzÏÿ~ò†RÍ.Ž1ò!wC^È×\*ä9ÃÞÀâþTÕ·7y¦’70j[!lˆ§u.«ˆø(Ê]˜ '‰y$9AÕÃÖ¹¿½rI’$ˆD»z¿ù}EØic|мáþ}Ú¦”,À¡·ú‹…ƒÍ³8lNôjøŸP­Ì9ïÜçÇ <Ðòv³|°æ|,mö¤íÛ¡UàdéE±!pi¸À5-o¶Î/IÒ­ótUHqw¹ìDX¶Á¯áT¡\Pdƒ¼[„d씜b-Û»¢Óäd ` [Plƒ¼9i}¥Ž0k,…;4ðAÞœÛ;®’­“6$l“å@•¢†@Oi—·ówN™žØªÅ‘Ù Ê1‘Dêè6ÍkÑú]B…Ï<ÇúqúUÕÊu14§ÍöFn €Ñ0B?JR—•Yï^˜8{î ÁCGlì-¯›`šK.e€Ô 0rqÆ3c0b_•Ò»À— ‰f®í S9qÑá]HÇÚ¹‘·÷H½ŽvuÊÉMÔVê]!+ ¥EþYœ›9“me¢Fìýåéžíºãu¿MÃfgМûÓx1zzÃR„›ksCJ³M¬IRT€=nMìI“׿eò®fÿ4M¡ÍÅ^„âT]{­—m±ÆŸy¡kX¾ëÁ= AÔœÔJu86 zŠà¦²Ú©ÙIq6²ý‘и ý8VÈê‰lÇ”åÉ®)qšSצ“_\D^Kcµ>™lÌâé ¼8Œ) z’¤~›ÃEÐF›<±¦œj”•"Ÿr9Ï&t £ÜÀ15ÕÝÖr4Í…K’ØƒÃžÄ†Ž–û´Þ+SŒ`³º®¦"A`òíèì] Eã±°?»˜Â³¤ò€Oìh^Á:ž/{ÎÁsu ô$‘F‘9›þ¶Ù¼V+l> stream xœµWKoœ0¾ó+8îVÅñ zè!R©RM·§¦ŠØ]ï†j†Gÿ¾¶Á`'„…¤Z±†™ù¾y™{äCuu÷]æ]\sÿXyп’¿£wï!­àw·]æ_n¤¥ê%ìo^ûj€|„ ÀÔçaâÈßdÞêSò'ÍÖ›Á€3ˆ¥Þfï­-CˆˆTleuš %Å0#*´Åq'û­DPù"íDIZk=fëв†ƒßD‰b€¤š•⾕6@8`DÎwEöó$jñV=¢Nøi®Õq|%vE¾¯€_\㸧+À<ÔÇa™Òý•œ4tl›5u²=iNh¨c6ìU¢LŽ"×A‡ ÞéÀˆª.Óü؆`e,@R0#­õU ”EíË¡Qûˆ´èî‰Á=Ò|ßenŠ—i£v'’½(ÇhBŒI-ES¨ªI1"ê»B»"1 ʦ¡o4Cbè¸uõ(ÀuÝ6` ˆ$ñE™¢]柂´ÛFGJˆMê¨mQ<Ž%`°xzwŽõ9Ãe»x^†*Qßö>¦KÖ౜ï»V¶ømò¶ëÔµz+2À¿Œ'ºš_<ØggòØ•÷ã&A~c¨«üæ©Z¾Y·Êð”Vc¤pb‘2£¬ K.´f¢¨M‘1w®$,G̾¯Êγ* SbÕRR GÅÌòz>“roÍe2Íå®iJq[Uºs¸³³f !€KÊä¡_Çœ›Ï±ñޏú;§‰T©*«†¥C“ïê´Èu2WÓS~g"S‹D=ù°ñ>ËëìúŠ¿endstream endobj 236 0 obj 847 endobj 242 0 obj <> stream xœÕZ[oÛF~×oèƒà¾(€9&‡w·(¶ívY(šj](E0&G2[^^âx}Ï\HžG’³H #pB‡gÎ÷}çÆ¼_»Ä[»âGÿΪÕÝ›x}èVîúŸðç°z¿ò䂵þ•Uëï¶°ˆ¦â!ºÞîWêQÇ[§)¡~š¬ã0!ðk[­6ï›üÕö·•Ÿ’ qÅÚm¾Út¼÷À:ïrž59oÅωé%÷òŠGèüÔÛM×·E}w‚P_t¾‘ #’zi:n/—½}¥o¾c[=ÔE/®Þ½ ‚éT c’$kê’P, á}'RŸ¸â êqVË-G{XÙó¶f=×/Oæ•ßÁ‰(7\âÏ<5kŸ¥›|’F.U×wáœWŽïºñ7¹8ú¯Û‰]G/í‡:닦&ê‡Ò˜ÄÑš°X,½„EööEÅßñzFÃKˆpÈy4þS•oŽÙßáÙ-;@+Ky¾„ÐópÌ`˜OŸG„|`å ûÓÎeÑõ'/{ÉRɘdÎØ]3åKtéÈZVu  ý˜3D…3‘Œ”ü A™"Bó»bŸárSb¨GR à°Sg™ ÌŽÔ–šm¹Ät3«%rtüwËû¡­¥ æQúGéW<»³åÝPö·:LÓyu£¤8ãÓ²¢ãÝ’O~HI§kX*_†@ú¡mÕ6†ƒ£ðšÌßyÄûU‹(œíjLq±“…Ì^ìkwŸ+¯ IÛ¨§0ë¾/Y×iJ /íõÁ#û ÃU¤6YYðZÝØwd±Ýf+.EÒ”‘DìE$—¦¤¢+%¢¾‹ßX!XߨÔ†ÄETiC¥¬„\©q»p-hÜ›-ÚÒæT¤KyLò?¼pí‰,­ñx½_îíáÖ²÷X¡hvÚ9è©f¯ýãÏVÎ f4+ Jˆ9w󨣊Ú}¼¿»:«+~r<©·ÎhÚüoú0ìqSo.½µïÑ’uÁÕ D±¸ƒ€éx%”úæ_)‰ãØ<2:ž~ ÃÚ¼ÕææVŸÕPo™<`Œ/³\!qö©qÈ"c"-h j<:dºc\Ûm&ÂsIx/P¨jØ:žkÐS`B$Aµ¸>è]ÏZ•^M~?½„ƒâØH;å4ØÉè{ýrsäÅèëNÐ[%8it=g¹ÁþeÒþ”±ª¬y/}ú(Õo¶ŠÏ”â=n20ÿFc‹ü•5•¾SµJŒ~ ‘Hæpã±mõ$þ>ŽÕ2Í *ƒš(ª>.ûC¥K8à(Àç“\9¨èšâ™F4ÄWm®bÁImNr•T®J~Ó›Û߉N3¨vù¯Z8 |Xdi(&jm2¦ogÉ¥:ü˜¬7V18ÀÇßuÝ’þ±YUñ¾˪ã¬ë`%$ÑUeO£}† }ÒÊ@ÄÊšºæ²@”Þ 8yañÃòÀ¼í–š]Ÿ/÷NWj¥—РtÆÛ¾øBï¾’wcŒîƒ¢¦¦d•¬‚ÜqUÎ÷ *é¯×Gˆ2Þ唲g¥‚UÔÆ‹ ôÍó‰žåÒÊ+û3iJ—›§9+‹ÜV ¹"iÙWôͰlg@ý..ô—ÿ„П²Ó ÏnÓ©Ò *ôtóbÿ¬ÊXè…0LEUìc!½è{Sa4Tz.Œªf¨õ:Ìd€‹Ã€­lÐ}–y^²£>"ñ3~ ¥|±X¶–Bm›¦â¶¢¡» )"/Kbpóº×ŠFhhúw:³ŸŒ`8quÕkè¬Ì;k… ^¡§!·ié_àT%œAYëÖGTÎÆJãÙ3•HÌÌwÚX·-[RÁò æoeG¨ŠƒqUhWSOÙªPg‡¦#´¤v„.ËóBàÎd°œ…œýœgQ°©-BCav4–³L»‘åQL^4(Öò÷ïTÝáo-‰Ì„BÔÉìÀëe`1C ™ÅYPˆhØ‘O>¹Š£PÍFg¤´$ËI;Îë±3”¦c×R%0µ—»Ì5Ñ9x¤Ïc—GV¸%ÙBÜ¿Á“ηÝ•¥XA½²O„j°æv”6Oº0I¦À‡š'ñÍÄõÂx±ÛÜœ´¾ÎÅáQ†¼h+&aúÉ;M{gDÁÐ#ˆš4ÖÑ×°)4C4ŠÎwATô© zlvÛéÀzþÕ1ÕÆ›¿yÉ›*.¡7ߨnǃIbt;×õ’ó‡á°Ð ÊjZ( Ù+¥Ø+¦ˆ¹};¨ØEC³ô²´0 ö >fžéɸrNlM§Óš+!yŠƒÖsèaBqTe†©ó…\¬"€^¯ÎY+Ã\`„>Ž?‰ˆŸš,îú–³Ê6äÔäô¡ §=¾Í®@Å8. #raê,<½Ž×(Ä©!¥ãù®œ| Û<üyä^ªÆòÕá¡kl4?²ÿ=ÛĂՕ‹X÷­ŠgSÅžwš¬xxn„{í ³÷²PªXÎ%Í@hà|!_‰Î]T^’RÑF©‘šÐY™l7ù‘uú".gJ oþ¬°å¡Iìy.ÄW«ä}3ö}édÜ“fÈ&§ãÙiDú1ãÇi4OË>}$‡ÂùýR÷ÿ—"Y×LEqQBë+—›jY(šp!X¡Î5úåK£×ÏßëBA|Õí7¶x’Š–ðúwG½‡Žc¨ª³HxüÌtE{ö¯QžŸq-þnÚlª¦è•*ä…JCÇß!^UÅóÚàR |Æb™,«®OÖQ²RåU4%¶õôƒIÖTǒ륎QÙCã,3dàÉn?”útÆ—Š[åùyÞ6‡>/Qññ%¼mÖíË'”ÿ·Byÿ,…jŒ¤qæ8Áêøq8•¯S{}-¯[¤Z¨Ä5]xšø/'JsÀˆy,è6UtÈÿ8ñÃvõ3üüC[mendstream endobj 243 0 obj 2345 endobj 258 0 obj <> stream xœÍXYoÛF~ׯ`•°6Ü‹‡Ýè‘)ŠuõPÀ0ŠZ[Šy8<ì(¿¾{’»âÚVÓ ÃÐj–3ó}sò}„â£ÿçåìåEÜ´³0ø…ÿÝÌÞÏ ô¿¼ ~Xq!BÄ%¬®gêêa€HÓ¤I°*g‹ ÖõMÕž¬ÞÍ( …ìj3[dâèåJ‡§¤ú—²/º]ž…’°ôPp"-×°–Kž )ÌÕb®QýÀ>°¼ïvÕÔš2jí¶LÂÄ05 .˜óˆÝµ8HA…0ÒgËYÛfÍ^>2jâ()¦±n¥4!ð¨I™,ÑÀÄ~@Ö»à(]‰# ".FôQ_J1"ÕÙåb}²Äa^°†mN®V¿Î–8áßi@ ¨€L\n»¬` mõ»n+­%6.YSƒ MË$ò«\8R„±n[o¤S© ¶âÉ_h⑺3é…뺞¾Œc@Qˆ*%²B,‰KÓø’Ñ)‡#ÿÑ”ütt}›µúÐbÏøsªâÊ`·åî³FG8ÅkyÆ °QÕ~®b§B[{Ûç9c¶ñ ¨dîyôóº¼+˜?äßbŸ`e{¢CèXìk‰=Dv¾~ì%ÌÔdM%¿#¿ËÐ6HBÚ¶×}QÈü¥Ø¦Êƒ3cÅç„&ò˜ÒçÖ¾H%‚"ÐJ?ÖÕ’{•Í6VíX•KDp¢€ÖNY+@ÔNÑkNŽ‘\7/¶û¶c%x¼|¦Ø¶Gˆ´Òñ%ŒC$ŒALµ«o*^-¸}ªrǃÙ]v+]3H‰%X™jÄÿ.‹‹»äw¾›;¹r ¼’@8\éèpD•ÊAKÖÜô%«¦u®;ó$oÜíñê/RBȽ˜æ+]Ï-ÈË\ Fvø~7½[±‡é] …CWJí*©P:?W%!O&èôû¬8Î&OÎ?¯ÞãÈ·õúÝ«i¥€1åÀCEŠÛÿÌóæBÍ\|h⥪`CS Œ×2«t<¨þJ¬²S7·­sTìnµÉÄŽN‡n7TÂ/¼Ù!•øJòT>S¹Ö½©ãÊC)7—šqøÁ±Óî%ÚÆììã^CPër­æ•=ópš K?)€³©œ‡ö2 "ÔžPæVÖ ÛlVõï}¹fM;W×€ŽË·oT®c§þàóiœI” QC®t ”—Sþ¦FyÃßãÑãÑ/ •±å”“ß8# Ó-?‚½W*C#ÎCâ$è±4¬ÿ?:ŸÚóö¯®1ƒ¢«©ÞN¥«šµßÌ O˜Æ<Áž%Êãó×OTþEˆú©î×›ŽÍ„çéaɺª=Œ<Ù9<Î}FºIÂLâv“ïUúøÁ×íNõh!p¹¸zJ½«dWá£ì0Èœj‹¬"ÿŸ&Ôq´Ç– ÖnÆ´ ÔÆÜ;×îFEïØr:‘,úq?Ä<3GèßíhX.Ìš`…Ÿ‡Öë¬h™g›àþˆ-ÂaUÁHÕä¬kÕ(À—ŽtQ…Ö›ÏXWlJÓqKˆjÒº0¢É¼~Ø€U Åvª©àsW8>®çzSÄÔ†çØó=ÔPé ÂHž›dvJÓä8ãL8™“ÏŸ O—O¬xú}¬¢”@§ƒ|¡Ýé]÷ùÈþC¯v:–ë¥ÍI3÷mÞ±/*¶˜)§¾÷m§ëò¿âSÈgQlXæ/ 0•úŽhŸ²DÇ øhð)æ CÕë9»ëvuu6­W?g»¢o<“Ï|àE:%¯º›mVpÀ6ûéU“DsàIóT¿³J,b¯W³?ù甉Ýendstream endobj 259 0 obj 1508 endobj 267 0 obj <> stream xœÅXkkÜFý¾¿B$_Ö%šH3z:M M“â’j¶Pð"K³^=6#Ék—þøÎSº³’]§Êb óºsÏ=÷Ü;úâxÈw<ñÓÿózõò2vnº•çüÌÿnV_V¾\àèyíü¸á‹‚@lÂÎf·R[]ßñq„"'<”DΦ^­/vg›Ïü„ù‚M±ZgPè§©»ZÿYW—‡3—xžÈ:?û¸ùe`$ž¯·í²¡êÅN"o¾Z·Ó®|`Œ/Ôæ%zg¿§Òb‚üÑâšÞåôЗ­¼L`–˪’6<ä‘416®GTÎ/ïGÏg­4¢`Ü´>*7cpÐú¸§rÇ(™FïWeÝË¥x»¾C¡0îGÎj z!™¶—FŒíZ–Óâ\L¼¼Äé;—D¥aêµî¹Üê#<ÙýÀoƒä~1aèÔõ«WbЉ2æ pÄÜ;ƒòù|Ÿ yŽÞ1Ö21kö«ÙíÚ%˜óBzì¡(ñ~ÖQvKåž ´b*ŽBbœ¤:es›Ue1ßPÓ~ßó ‡Œe|޲îÙö )ÀÙ]c”Fñ'O7{9P<|šØ¾nÚ^óŸt`ôV¯ Œ3Ž à”Ü–HͲÝÀ8$$>\)çFâJ 2¦Å޵µÎ§p"3½£ùЗÍÊ dhÖ yN»n7TÕý…pàqú(lÿ‡ò…|V̹®<+Bé„àùüxM§[“6^Ï7|ú©®+ªX¡Çâ…`û±È öE¯ 2.1˜$­íºRX“A€‹DZjA¤³Ä JÏ3ó5Ã2Ï»¬û†dx¯”‰X’¹ g ½¨J>2}0¼MfL"•·õ¡âÙS¨ÜµbÑYz—‰Ò Fxš(eíH¥X™Å@{–5d‰K, AVX/Æ|{ʆ̄ðã´²tHn%1ŒÝ]Y(õM!P µó¬ÏµÐõßë\ÃÆÁ©E˕”_ Ö:c‹½{ŒÈãláP±vB‹j´H0Æû^Ńx”MÁ‰ØÓNáû<4Vþ.qò1†ø(:s6TÏò~àÒr`%ðQ¦¹$ÒWЦ¨ØÃÍ^éAcš–tpŽ/žbäËšù¨èÕùó|­qf¬“OÔ¸ë¶Uå$+Ç‚°õl s㉈$_Ð1s––0ë°)Ãí*jAÆîu‘€d4‚–«hp€Ó48ªê îEÓõ4S"Ö&ĉ*ec)½[®ºQ>ˆH~# P C¨WôîP•yÙk¶bÌ ÅÖ© .T¤!vßʘ); Œv\ðexx6†³ûO’¼¨îF{VªfƒSל¯œñmµW¡ˆ@Þèô@!j櫆zv˜u+v.ïušOâ6w <ƒ4[€÷u>O›…„hèq¾W÷ V!å±PåUI›ÞdmÂ{éÈÎZÞk<íN·+˜_päûöúóu?!,Ò,`VÞ4-£óöv+eIå¸£Ï Z·(+ŠÍ±ým¨¯E ¬æYn]}ºhd4• ¿š{nVÅ·gTœ&Ú‹¯¡)O]€k»ÞžI;‘.ÚÐÒÿy^d ¯¯lŽ¿ ^%L—h|ºøúºð˜oÞÍÏ‹Tô#Þ)¢¶Go bSµù1'jøG_V /b½RîµYP?vC“‹¶¬›w±xj™NóA¹(†úprï8Fl¹oæ`v\ßUG9«ÿÒ,_=ã­úüa7¤º-Su[=§.;¡‘÷¾ß¤ÓŽÇ?]¤ O–Ñ–ª:¢Í2Cû¥ª“5.ã A¦u18+XÐ%"ñè&‰ «b9aćV—4cíèVcØÑêd]iRè e»,Ÿ÷ì®ï n ÎÈÊ)×Þè =jÑzÝèw+|ë½VI§) s÷ï9£~•Ÿ>ÞjQ³_ãínN«- Öø\þîÉL­Ê®×â¢*©% Þï’vž\òÀ$Ã1^09µÊ»kÌEçß¼o>&Ú·\v¼œ)Ë‚ß å¢ýeT<Å8¿ˆª(£0½Û¬~ç¿Zendstream endobj 268 0 obj 1577 endobj 285 0 obj <> stream xœåYÉnÜF½Ï/äÂÜ(@l³›»1Ç$‡(s02ŠÓ#1&‡ Éñò÷©^HVs™Ñ8±l lÍ^jyõêuëoË%ÔrÅþ•«gW‘u׬\ë'øw·ú{EåKÿÊJë‡5Lò}±ˆYëÝJ-u¨•$„yIlEALà׺\Ùë‹õ_«ˆø0 ¬õvµ±?>\8,É^dó‹7ë_VÌ%¡X('Ø»ª«hH‚Ðeݪ?Ëâ z®K‰ggrÏHÒO±KÞ4éoˆXýìŠ%½…¥>˜øæ‹ÙïÒBÌc ÒmqSín>”Å /xÉ÷­´†%$Ô³ž‹‡ú.‰c‹z$„·ðáÅmÚðпÙò¬ÚòúùµÝ´u¾¿“xa:¶óö0¡I¢ÇÔÔë ñž¨ÙM"ÂÔ¡vâÅ6my›—|þHBÈŽ)cšý{¬aÒªÃ)DøÔ2áY2Ôœ¬Cªr‚Pãx,‚ìY0Û³ÅÜ—Õ^n“x€Ã;1.t¼n™8€Á¸T-  å2äR=øk~w/G] +evcâµUÚŸÇä‡å©m¥rKƆ °,bWbÑˆÒ tY@Á\ ]OÃlº¯¾(ìG¡Û#IC—Ñc<ªlA‘Cã©Ãáxz2ú“a÷ ¦“NPÌ€#*´òßÇvcð=>]<Ì’.DÓc&t%˜çûÙI·gù¯Ÿte@–¹Þÿœrµ“4tiÇŽ"j³ :—‚û$œãÏNÀS?)÷Qñ< ¹óèæ…ñ£ßäh@ ¾:¦¡‡€Q[èñNSâ˵n¯þàµô$îã¦sÓ‹qp¬ PU42DfÉD 6—üåjià  ¨úèp4§®ŸN¢|99ÿ™KÒa¡/;ÁhkøìÞq^×U}sŸî·…<˜P•B™(ô“rNÅÒ…9v¡Ú O±_ŸLXEÞ¨\@= oqe¡—€::y°ìœ¹&=2¨ðˆ™ôXsÈL£÷eƒ©Jd ºÀíû¬ÍŸñ!#vuUjnÀ…<˜ìâ]÷Ôaö¬ùCÍÍY±Aozà d¡Á.¦¹¿ñö¾Ú¾L‹i£€¾Ý•¨ŠÔsÚ„šO{a$ú´Ž/ž5 ˜?Ε+ÞŠvâ p7NQo$Æ^p’7€ãu:· 8Á"r—¿Ó!éy_Õ O‚aÛ³ðRíä ·ÛöžëFÝuœ]U—’õA!íxmO<ô{ã÷i©õ-£Ð%\’¸ £¨å%‰ ܉äSÔÆþö¡ÄuY8iWý –ÎÂ…eXe?¤uZ6Gòá†Á8÷¨Àéã£êù¼›´s}q©xµÏÒû{^óI¨ŸRñä…á7 #"İʽ;V1}Æ¢a°Û …¦Oø°|Ä PïEÄörª!L(á<ààD˜*æ¬W€‘6C[-Ïã­’>੪Ë¿æR“ÚúÙ$3 >ÑŒ¥¤ŸôK‡Õ%'Éõ·aO°†4\*EÇ:™Fªŧõ½:®=(ïËÅžiq› +7ömŸcõÔ †¸òÐðíôŒ 7ßòb«; šWªf‘ðý¨ s»¡mþ ”ˆ¢jŸWËHÛó6ßoêð(=æ‚Ùh%m¯U2#lt“ï3UN!&Û¼Õz™¾Õ1î9ºÑ¶!€î+Ý’Nùô ¨iåƒÈŸ\R俯N‡dU‡VzäQÜô¦Ü½ç­îèÿ½Š,zô‡vÕÞE§Èoë´–ÙRE»ÖÙGͬ‚“k4œUe©aÜ?ìó,í} ò`Â;ÊICi Lê’ðc)Ta÷(‰äÇŸw3 c>„ðèKdÕ‚í½ZorDÐÇIéjòJä M„Æé˜å<ÁC(ÚØƒ¿Yv¨ŵ^ˆžåø±'hþ#=ºT9C•ãGI³;yaLdsêo¢Æ `*~ 8S¹¨¤˜mÖÅ9±wØïTóöP+Ü{ ]D_:$ßûò‡0¢X™¯µ¸Nr¥YÀú?ŽÍðeèŸàË´ñ嬪+(d q@ͦ±Œl3°Á…ËY ÕiÞaˆâøßªÖ"J™!zžw5/:¡`Ê4ßkò éoóŠ›=b|%pžz–Gq@ÐŽtSH$ÜJ¢Ä ù¬ê^™Ž>…ñ®£&ãRý”·Õ±tC}ðäM„L;ñ÷ûÑ]DgÛCÚeP°–.¤¯–Ð5ºªáÃORJrèp]U±±!3SÙkʦv©Áo@d©Ê 0`bƒ¸Ùq&öZáßáæšîìU¯(œO%ùVÁØÇöó´ùè´•<%¿Æíà ±à€émÁõ&Ȫ%U¥eˡþqÔ°n¥<¸ÔÚƒâ7I®ÅY0aq*ž¢Dñ€:‰%²73…U"er(tî(\˜ÕÝÅâH,}µ^ý?ÿµ©)÷endstream endobj 286 0 obj 1869 endobj 293 0 obj <> stream xœµXÛnÛF}×7ôAu_d ÚË%)¦h‹¤ zA´ŽgM®$¼($eG@?¾³7rV¤havÈݙٙ3sÎòãÜ#þÜ“?æwZΞ_Åó];óæ?ÿÝìãÌW ææWZÎ_­aMä&:_ogzëÒŸÇt‡+’¬æër¶¸ãÅåúï¥$Œ< +ÖÙlÑŠæNÜ”¢mùNÈ×1¬^¿–‰G(ƒg~ ·Ê7?ˆ¦©››=¯²B4/®âS%û>%ÑÊl_~¯E$ñ“Ä<3¾®/å«Ð#ñàM/_ú+‘òÊØáÍõ¢íš¼ÚÉ÷,$þ`nÊœô¨d$6š"o;•ñVžÿ9: !ì|1ŽÐæ¥ðó¢Åϯë+·d‘ –÷–ÿË"Y?2ûE³­›²5ñ!gÝ^õWÄ.my©јÐ!Ûc•vy­*Æ(>!ouTO  1£È!§¶ŠÏt¼6€Û£JºŸ lõárxžO8 ïD{ù~ýÛŒ¸2:<ßɦ²¥«Ê¬­Ø¢I’/D¦ Qð?œÖ¤»5ÅAøÎ«¶ø®5;QB/—¦sãÁ^®Ì­¼íþ®V. `UDm5!«!ç·Ú5Þ~’‰ô~ÀÜ7üp°ó6ƽôXTgMŽa‰3Çÿ*‹«CJ^Ûj9…b މ6K˜†:ôYáÉ>ûxÌÅT—anúº è6Žt—Ù3¿4ŽÑ]¨/,WNO1žãÓ=vNðOé1vý·=Öæå¡Pà ®l#– Ï[3;ðWßpÄ4²õ®Õ#ÌÃïløN'æ[sL¤'·ëã˜qî•*R­e—q£tˆ‡úB·¥‡–=8(ú~¥}FJ®[hÉ<`Wj+b5]Â{m­¥k®eN€«™=™’¢|ßçz¸AþBÄ΢M¹&hDÉB(N…"Ò‡0]·i¼õŽ˜ê ÅY›i‘‹jb,Ž=y Hj*ò;=«lDz¯\ÔOw óŸ¨D“+bX‘𒏛ÅE×ðªE©©›N%ÊÂð±/” B\¬û½6ížg¯Q£˜4z}Ï9ucun1‘õó€â)ÝæU*Ʃϻ‘áÍ"«)¦e`ñ~U[7ÀU¥DOf=…ýŸwªM&¸&¯¤˜åVŽÂ]ÙÐømZ}Ô‰|, î@€Qy&Ì5›®“Hó¯Rm îû°oP5ˆVøÐ“M²µ'…Ä7"#Êæó+ßG$.<6g¦+¥9jl %Ú,Þ€1&ÃóØ";ÂZ¢´7:$«Éó­èfê#¯ •ZbÉ­×ÈjïàO§"r0ó{¾SX <Üi`$ÄxkLG‘á.BÆ<h$ÌÝBêjáëOø@¼–åÛÀÓÐVCBtc*nû£»·²ïÆT^‰ûñ~œ@’îr…ÅóõBßú\º7£™zpIîHÐè¾iÄ.—:6y[²z‘‰²&-?ý"Š¢V”¿´wl©Ø˜ò×òN¦B¨ùf|®)5òá-º[·ÊÝ××—ßj~×Òg*tí°€ÚÔæÁ­ªh˜œ^L@H{æÕÆhgcrHaÛÔå!nj§L·¼Ë(¢û %þ{5oÁÊ‹îl ÁçTÕšc "=4µ‘¨žwyf‰*Í!Ðe}35ûñoòao‰êùÍ¢kê~x19¼ÔR<ãœP^ã—z2&£t ÜKÚÔå?  s·*srÑžó%‘ßUÞˆn_gí¨R> ËÐù2àØs™ÀØÛ‰îG~à·y6Ÿ<—x­ðŒ¿,jwBi5…bè)¬2ÜÈδ> stream xœíXËnÚ@Ýû+¼©Læå±ÝEQ«¦ÝTM¼¨”D‘Áqdb›¨ýûÎ <† „@ŦBÄsç>ιÏ<û Êùž”ÞÅuèÏú_ÅßÌ{öðÍפô/!„‘»°ŸL=½w„üûa8ò“Ò`€†É“G `b9ɼÁeÚpõH„”~:)Ò¦á\¸¸ÆñZíˆaÀ¤& @qÜ +DŽ—¼n—i!h”Ö ccG›Gåÿ£˜ˆýH(g«•ùø‰OZ¹Œ Ê4Q‘¶¡õc¬7he%oçY³mXYA`¹]?º4mW³r)€ ìÔü*‹ëÅKånHÖîyÓnD0úd|Œ;{¶†»¡Ò!˜è,\¥Íc;.@«q¦´Ã™@Ò TŠ*‹w­ MÇ…†2¸C¾L “€Zò·š¡Ð ƒlxŸ|÷H hH•–|E¦¥²«ð:òrQð’We[4móyerÊ‚zº¬&r¥Ûi…# D¦âUV¹©]®CÞÎ)Fx5™g¼–ë]縃wͺr2¤3ࢱ“ís„âD´G“¬¦£Ê?¨c1þåUZÿQö(€k?nÒãŽiGr"‚£ÛÈ9€CTÔ\t> stream xœÝXËnã6Ýûºð®0âˆõšA;h>¦hM¼(YfbÍȲG”äï{ù’HSV’袂 IÝ{î9÷¡¯Ëáe(~ôßr¿x{™.ïù"\þ¿÷‹¯ ,7,õŸr¿üq ›(‡Èr}·PG¼Ä$B„.Ó8Cy¶\﫟/ÖŸ Â8Ï ìYo«C+Öp„"XÔk=gr1Cé¸X5rXk×+Þo.‚( C”䫲.8güýÅíú·ELåkôᲨk.ο½$ù`)¡ˆD`šÚó×¾¾<–ˆ³ö©­–SIŠ’,Äzë5FôVì©^{¬º\¢¶ÕÝn•²o[&Ý!9JF :±”¡V¨ñ5åAºˆQ´Ú²–¿‘îÑ [¶ì™-«¢ÙŠ«ƒ(O„ÇK€;NB"Ÿ±¶U1 ŠGwp¦f-ò@ âPíߥíb÷žu»ƒ|G”#:%Áü´gœ÷ˆ¸ Þ¬¿“Vá0E8qŒºYñ®­š{ñœÆv$ƒï%ž ÊÇ5¹‡¢îÕK6Õ—À’ ‘ÓK²‰n.|CÕ€Ä9Šˆ´4Öžë“–‹EÉóÆZ¢YVø×`ñ{õEÞâÀÀ¼¸d2*Ä޻܂à’bjÙô'œX®W‡ã@,ÖãŠYÑpÍA©2Öÿj¯¤Ôh‚‘ UÃ;V(ФvxwZ×Ñ· >Ÿ ‰—p¯e÷y&¹ œMOig" ѤTc=²Î½KÇß,Úø°cõñÝxÐ%Ÿ>hmŽàÕ}St}ËÞ)N\‰˜µèX´ÅþS÷tT™#OÉž£r@H ¦¹ŸÏ½€„ ˜xÁÌ;}5ÜøZtt4§Å3‚䘉rêLßT¯&"r qôt©yaHjåõB,åv}ºVôÓ«€K+óáO¦}¡IUçØÇ©D3–«•*BÛÓ삾ØåsxÊìІ²âÞ‹ ¬ǪÊÊê¶Õ%ÅA«ê¸NLV-MF°_Ò©j‡©Sí¸/üǪ®)Çò¶S4n±´Ü2`xäþ)•µS?¹Ó­E¢$qÒ¸µ¿;ø©&Ó‡Ýü x³G*áü:…yîcÒ‚n§ 'ØÊçÍt5À‘*ûIYÌpLui2ÈÞ³z" ëyˇDχoùÄQÇ:šÚ}}ðý2ÊNGßÉ4™ö%ßLô4c’¢”œòÕY,1¡Û_9!=ÌØvК³l{T9 ¢jwŠrŸTÍàýDƒä@*’®XPJ€¸y<wÇJ_ƒ_´Ò‰Ó[ðÆVÄçfM±©™©®–¹“Ü–•…™ÜD1˜åÔ¤£èÐÕmÔ>¨šûÌ —Ò¤;¼JZŸVßÉ䚇êõvOrØ|f ’20ÅäÞªÌ\u>f0œ® ·Ê bjÄÉ̳ß3þ þçT} ùŸ `-k³\Ÿ¯É|}ƒ)·„^ÁTCû“ô?ׂ~Mz"B¦4-k‚,€‰|ˆC±üÓzñ'üü nÆ¿òendstream endobj 316 0 obj 1637 endobj 321 0 obj <> stream xœíXÛnÛF}×/ä…o•‹pͽð  P7 Aë(@'0hre± H…¤Ü8_ßÙ¹+R¶ºH Á0ÚËì™sÎÎú“ ì⣿óíâü2ön»Eཆ¿Ûŧ–<ý•o½ŸV0GTÌ"Þj½Ps}ìÅċ剷Ú.–‘³ÕŸ  ~^‹å;ÞÞ‰ Q¢C¼!¢åvWñ-¯E8Œu°Ïú²©;;¿$é°³I «Š"94¯²N¤%45û䷥ܙ 0 Ì^/äÞ‘$À:´¯Ë^L†ŒüuŠ)NSëà$*õóKÆÆ|’P­£ÃPàc/^ÿ"W„|†}®–l«ËÝ™Oƒ#ºÌÏ>®Þ,Aé˜]§Ñ ŠÇ5`ÄŽÝd/4Öx 7DÚ±·¼(š2P X†ˆ=‚eÍ{¨ÑgñsŸÁóå.k³ªâUù…·/Þª™×ýýŽwÈþI!„E2ÇQ¹Éꢂuº¾-ë[1 uN<7éV”E¹õ|×C~V55—$Ø|˺ du]muú$€ä‰G„#]X‚è4ß÷e¥p¢c­ïuIñ˜ÿz_çGäO¤©Æê.«¦²+k—Åõ–÷›Fž/aC"3«MSDÇuæÊø]6-!f1b‰¨áÀìˬìdõÀ?¬£eõäL.̲º9zÕ¶Í”+QŒ¢1ë+í£>N^”9x™:MXÌYÊÄSC#‰Í@£BÒNÏÆõëlË5¯­ó×," ÆàºÙ×ÅŒäi1…är?X0!Øm÷xÁ,ÉcôärÑH+.úïV«”{'2dÆKU‡"ClÀ°ÉU±•×)Õ•Póž·‘4¶@îÌcTYŒ§:wÛŠ~…-X(`Ëb_q¹ ¬DȰTÛ~£ðú9ëùªTäröÅAŒpxhöæôbÚy¯çÅ1"q:\ß  ««å½0É4…CÓ%G&5Ç·"na\òâ”ÇDøÀ¸VŽlî•õÂÏé’wzU‡ò¦_0Å?ç|'ìLæ Çù-k;~Í u€-– šõÌ2¸Ô±èN¦|VÆÚ„¾™à¤ü×9‚¤IÌ– 5ëë#y`ØŠЮ ¥ Û噄!XôµÀµm8pZ«f_§9ÑѰ^Ñ3h:vtåT4±å¶ÚpmK–­9¥ó© ‹`^–¥•mŸ•êæ"‘½s¯6pïä²ÞíûéÉs-–ÝB‰Nç û视ùÃ4TÖýÔˆ¿ŠqlãIÖ{Òq®vw6vÚ/)øXžÂ1"̄ƚWÄqk­Wbu“NÍÏ›íÜþFeš Ò(lkƒ{ ¹0ëù{®\úY ìJÌé`]œÍt½ÂïbÕõæÐɃôB”¼-»fÚIørøcHz¼5’¤iùIo¡áÏõD KR ’éC%k¥73‡9*ë¬Ww4Vu×y’[ÇFq¨endstream endobj 322 0 obj 1487 endobj 342 0 obj <> stream xœíXKoÛF¾ë/¤ Zï“ 4A[ ·Ê)( V¢l¦“”æ×wöE)J¢å…‚ai9Ü™ïûf†¼(aÕ÷µ›]]GÁm=£Áïðw;»Ÿ1c¸«]ðj F,ú.,73{ï‚"“$–»Ù\ñ|ùn&( áòr=›¿ÞWUVèEɈt‹þˆ% wKë´Éô*OHSæVÓbmIÀÖßïŒéÕ5OZ‡LDDñ€ ¢´©6|H·ænNTHýAEùx¸øR/1Fxwô¾È›<&Þjñ³1 {ÎXO¤ì<‰¤ÞG`(%¡Í®³f_µË:¦¹3±°¸ÍتÍä"YtRL(¬ÈaÒ$aK>i /ú¤iÔ­ææÆÛÃ;w:«·ómù|!(eDÌWÓ¿–hHPþÆwÿX9DŠG!* ` ªq ª›}³2IS8˜'ÂÇ* IÄ©0XéTOX½Y¾vÙÅÊ\p™ô‚BŸ^Aä@—Kw†˜Í1gwѤëwûºÙÙ@CJ$JI=¢D)—ç•XgÍMóñ¦Ülà›¾A9©É¼hÜ6²óî¨*û÷N/SBÅ|øÅøÖ²È$Ä-XG­ÝœPÅájù ’ðÂívn¿¯²:«òâV_S¼ewv¿O·–óÈ kÛŸcêS {qØóÛ¢¬/$Ǧ[ƒ'SÞoˆ¼r~‹nƒŸ²íº6 Ü”*_Wj;Ÿ¹Ëë‘J5 }UBA\™¸"19àr«¥OÇ`㪠è¸hóêì•ßQQ\•äÖ‘¶£IjAvõË®>Z¨$ªèií‚Gt‡à³üÁrÏ ÕTx&±'ysWîÍ1’bLz¡\€›£ýÅ"¹é4>F÷úÒ?E9hš¶íDØý¢´NZÜ["46üÝN ™™ Q‡Ú‘öŨ®3º{Å®u©áHY‡ø<Ø2€GʬªskÚ¯€¡kngÔ¦*w70X|ØlKˉX¶^ŒÀÖL ÍÔÚÃp ì„÷êÕ>‰îxYÂë0]yé˜óvž½oáCãŸþ–ßÝá4_g«²pž'¸4}ÒÀ‰kîSNÁC€iBËëáíGOó•ÓP'4¾ê¡$²7nü wÒïO&x}¦¦ì‹2ÂUg ¡SóF‘ Ùÿ¤8 Å1Q‡SlKocªRaêŒHú ˜k+Õ G„nÐ{„øŠ·ŽŠéÌ §¥úù^è¡`°3 GI4 äV­ÓjD­= ñ;ù‰1Ö¾ý(pa€$I”«Y§ê©u „{bê™XEQˆƒop+¥²Ì7\GÇžéûð!&ŸòU^¿jµN™†[2x­ž}ä9äû$N0Èw(¿›Þú…8á%½Ð/tu}õ/¥õEÆõ¥_—³?áógƒÀendstream endobj 343 0 obj 1216 endobj 351 0 obj <> stream xœÕXÛnÛF}×?à›i4¤¹Ë{€¶HÒ p¢­­‡¢raÐäÚf#‘ I¥M¾¾³7r(®(Ù-Š‚ai¹—ÙsfÎÌðƒå¹ÄòøGýÏ7‹‹«ØzhžõþDL°Ô¿|c½^Â$ù|µ–÷ ¹Ö!VL­8LÜ4±–›…í»Ñùò…ï¹<^ ûòú''‰<‡a^àÃLùd›5mY=ðAìÒÄ#êAV|†nJÒT >°Š5YWÖvqEÓÞ‡DÔ¥EáôÀ£búÇl-ö nÁÜ£¾¿m»FFn Æ_òß„`†y~êúÃηbn„Më¤EA€,")ìfÁ¼0äÐÀ¬Ÿù,XXhlÖ 3#7ÎÈÄIè’þŒ•}cÿºY_mÏßóˆëÛ¹óUvþûòª^øQÜ«¿VÝÜœ‹b7¬Å„îzr‘uì¢+7Lìü D©m ¶|½c _=뾩7жqɇÒ¨î”@LL –³võÉvÓ!wÃvcSXéyÁˆÁwÒ%eÑ·–O ı>ÚneÿXŸ;çy®ØÅnÍ„·ÁF”ö;…±š¿ÎZ“CSÊ0Ü#L8, ÇFäÒ`#² –»ÊLõΨE¨|¿Ä¹+;Yd€2\Ò'?fM–w¬i÷â!kÄ$AÑ¿²YÅ R!X°B˜põéÏ(…+$âAï·b/Ó™M¬+% `æà1;­”4Aѵ²_]¿¹ö€'¤ö¥0Ç÷¹Èô&¯ƒë÷»­œB¸ ¡’Ý­Y+üÄð©ß³ûl·FÆ“bœàhßdÛvb¥í¹v‚€‹±43n+÷‰q@Õ† ;Qî+ç· Ü˜óYŽzX'='•£Ÿwöõ™t‹½\5žtq6µôFy(Š^Ü=f –Úñ$öìr:ñ°œ6YÙ²B9Êõ>²J9†f³¬ÐB˜`LrjŠ+£ï”FfÜD<¡døP&»ëõ BÉ––Õv×™\ ¬Áîu"ȾîÊ{qs±s/hZcT£ŒÕ‘3+ä1Ä'×’B-e?º°‡c, mù™Mƒ×t¿ª–5AŠ]0¯›†åFÊd&²t26|Ú2åÆZ<ø¹Å]Iпߨ4‡S H´EÖ4Ù'C ÉUJð,ÈúU©z.>˜“xÑP´ŸX·Jмi÷¡J#£VbÄò“šVÞÙ\xE …®¯ d"wÙϹÿ#Ù§T__"Ùó‘½ÉÞ³Û# ˆŸí^L„MØãú0Q÷…ϸZÇ&D> /Contents 5 0 R >> endobj 207 0 obj <> /Contents 208 0 R >> endobj 234 0 obj <> /Contents 235 0 R >> endobj 241 0 obj <> /Contents 242 0 R >> endobj 257 0 obj <> /Contents 258 0 R >> endobj 266 0 obj <> /Contents 267 0 R >> endobj 284 0 obj <> /Contents 285 0 R >> endobj 292 0 obj <> /Contents 293 0 R >> endobj 307 0 obj <> /Contents 308 0 R >> endobj 314 0 obj <> /Contents 315 0 R >> endobj 320 0 obj <> /Contents 321 0 R >> endobj 341 0 obj <> /Contents 342 0 R >> endobj 350 0 obj <> /Contents 351 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 207 0 R 234 0 R 241 0 R 257 0 R 266 0 R 284 0 R 292 0 R 307 0 R 314 0 R 320 0 R 341 0 R 350 0 R ] /Count 13 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 205 0 obj <> endobj 206 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 264 0 obj <> endobj 265 0 obj <> endobj 282 0 obj <> endobj 283 0 obj <> endobj 290 0 obj <> endobj 291 0 obj <> endobj 305 0 obj <> endobj 306 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 318 0 obj <> endobj 319 0 obj <> endobj 339 0 obj <> endobj 340 0 obj <> endobj 348 0 obj <> endobj 349 0 obj <> endobj 369 0 obj <> endobj 370 0 obj <> endobj 336 0 obj <>stream xœ3·P0P0bsc3s…C®B3K ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶#þÿŸ6g–s$&$üÍ?tøÿ×ýÑÿÄÿÿj׉Ym)m‰ëÿc€Šéÿÿ08°p¹z*ru÷KK endstream endobj 333 0 obj <>stream xœ33S0P0QÐ5T03Q05UH1ä*T03PAS3=C HÎåròäÒ÷ôU()*MåÒ*âÒ÷ªáÒw pV0äÒw‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ô8ò§È Ø(|èbb_à¸×à~îËûÛÿoÿÿïÞõ­o+þÿÿ?á¬à„¼É îq7™v²j¡Ï¡ïX7}ýõ¥ÿ¼Ù_ÿÿõ?{rèßõ%¹¦·ü£yt*[„£E®Iø&JL1(Ht`apàrõTäÛrL% endstream endobj 330 0 obj <>stream xœ33T0P0bSssc…C®BS ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ë²ü|6þ¦ÿ ð)kÚ5‹ÿ8Àƒõþÿÿg1(0q¹z*r×@B° endstream endobj 327 0 obj <>stream xœ33T0P0bS3sc…C®BSßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶“™w Ÿâá¦þùÊŸ¸ÛîçýQŸûûïïßþû¤þ¿¿ÿÿÿÿÛÿ¡àËþÿÿãÿí­ÿõõÿ¥¯¿¾~Ù«ÏYÇ™®y©kEPVÓ †.WO…@.ÃÎS% endstream endobj 254 0 obj <>stream xœ3µT0P0bS3#…C®BSC ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(p?¹Tpñ–Bòßýüïÿïÿÿûÿÿ÷²Éÿÿÿðÿÿø¿µ5úòÿù?üû’ùÿÿñXðÈ…©ŸA€‘ËÕS! ˆ¦G# endstream endobj 251 0 obj <>stream xœ32U0P°PÐ5´P"cK…C®BC45W°Ð3IÉä\.'O.}O_…’¢ÒT.ýp *.} ".}§gC.}—hC.ƒX.}7}gg7 7ÀÆFߨKß9?§47¯¨ÅÎŽËÓEAmc;‡ÅþŸ¦Þ<:õÿà³›@aí“«‰3>þÿ·ëoÕõµU×½½W04pp¹z*r³u1™ endstream endobj 246 0 obj <>stream xœ32U0P0TÐ52V04S0³PH1ä*T0‰(X*ê%dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³r‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. 'WÌÿü)`dàrõT低<Ð endstream endobj 228 0 obj <>stream xœ31W0P0U0Q01T05TH1ä*T06Š(˜˜+˜ê*ëY*$çr9yré{ú*”•¦ré‡Õpé{•pé;8+ré»DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.OµYËÞÉÌZ¾áýÇ«ùyߨ˜#1·ós{sfè¨.Ø0­éP7‚É¥%깊;‹A‰ËÕS! ;µ5ï endstream endobj 225 0 obj <>stream xœ3³P0P0b333#…C®B3S ßÄ5Ô3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠ŰÿS–‘„‰ˆµcÓ½íë^WÝöÞzoÛõ×¹z׫nǽ.1«×^º¿vëíõÞ@æõ¼k¿íÿþŠ æÿap`árõTä+eH‡ endstream endobj 222 0 obj <>stream xœ31U0P0UÐ52V0¶T0³PH1ä*T06Š(X*˜ê‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³r‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j ®~½þúÚÞ:(̾þ1BH5¥X¸\=¹R‹I' endstream endobj 217 0 obj <>stream xœ31W0P0bS3…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶bÇîǾO®FýWmäIÿÿýÿ¿ÿþÿ¿ÿÿýßÿÿ ÔýÿÿßþQHbÿ¡*ÿ…­©?úûäªø­ Œ\®ž \`kY; endstream endobj 214 0 obj <>stream xœ31W0PacKS3…C®Bc# ßÄ5×3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ÒõSÖ4GëÿØÀ§†G?M½˜¸\=¹S&7‡ endstream endobj 211 0 obj <>stream xœ31W0P0bSs…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ÀñÒü—ÿÿõåÿÿÿ?úÿ¿ùÑÿÿÿªr.ñµ_õÿÿ{îÿñßÿÿÏu“ëÿÿÛ~ùÿ¿°%jû.?¹Ê·žA€‘ËÕS! P*HA endstream endobj 65 0 obj <>stream xœ31U0P0QÐ5R01P03TH1ä*T06 ¹Æ &z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]ÔÎ9ã¡ð¡ù±ô…{“_²|™îY²ÿËÞ¨—kÝ]ÿ·§¯N p13¿ç^5¹Éµ6å¾ßã«ÿÆÿÿ”µÿÿÿÛë÷¿,·»tÛ´[Ñ™¹-Û´yt ¸\=¹}yG› endstream endobj 62 0 obj <>stream xœ35P0P0RÐ5T01W01PH1ä*T01U ›*éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]ÔÛHžçI±¨ÿ”UÄã_~÷?:¸þÿoùïx7á»Ú·½œyßLç gãªH`bPàrõTäà(< endstream endobj 59 0 obj <>stream xœ31U0P0a3C…C®Bc3 Ì5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g åmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ô´5|pøÐ|ñ ó!éKù˾̾”¿>ì×ÿÎ7îýÿ¯¶²àÐã¨ÿQ_×GEÅ/]ºôÚ´¦K@ðÚÛCWoº÷’iÓ—¾¬Õk_·+ðƒ —«§B KûGË endstream endobj 56 0 obj <>stream xœ3²P0P0bc#3…C®BcßÄ5Ô3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-œóó {Kż&ΗêqÓ×íÏö¨ÿ²ä'ú3ËÿGþòX¸\=¹ØD>€ endstream endobj 53 0 obj <>stream xœ35P0P0bs…C®BS(k¤g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAm±âŒ„DæCfþ wfÍe­^rïëÇí×ÿÇÿ­ÿþÍ*´’þÇ ÀÄåê©Èfm<ý endstream endobj 50 0 obj <>stream xœ32U0P0a#3c…C®B#rô t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-¶1ü3k~íœàË£ÞŒ \®ž \bÖ<- endstream endobj 47 0 obj <>stream xœ31U0P0RÐ52P01V01TH1ä*Ñ@hf¨`¤g’’ɹ\Nž\úž¾ %E¥©\úá@U\ú@E\úNÎ @Ê%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-¸&æøLørî! ÇÓ„’vù–ÌÎ^.›ÿWí?üݲÿÞîØ-»½§û²®Hwl]ñÿý½û uäùyl>ô1˨ð¾dûU«þ»«þÿïHÓ¨·e—n{çêâæ‘PØpD§y"ƒ#—«§B R0Kÿ endstream endobj 43 0 obj <>stream xœ32U0P°bCsK…C®B e„– z† º@"9—ËÉ“KßÓW¡¤¨4•K?\Á’KßD88+ré»DrÄryº(È0Ô3üo€Áz.WO…@.|eÇ endstream endobj 40 0 obj <>stream xœ31P0P0RÐ5T06V0µPH1ä*T06T ›Z*éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³ãmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-h;øÿÿëÿ¿þ¿^ÿz8Ç矦’öÿaà“˜z7½þwfîÒÙl" ,\®ž \*= endstream endobj 37 0 obj <>stream xœ3²T0P0b#S3…C®B#C ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-¶Ñµµµµÿÿÿÿÿ_éœý“+¿ÿ£‚#¯¤?02p¹z*r•;; endstream endobj 34 0 obj <>stream xœ3µP0P0VÐ5´P05Q01TH1ä*T05Š(˜Z*ë‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³ãmÈeË¥ï¦ïìì䨨è{µsé;çç”ææµØÙqyº(¨-šÙáÇÝ3·Âñ¡¼D!‹DQVæÞe?|ÿ~ù_÷¿þÿûïÿÁ nÿÿ—õ_oÅ®/½Û"®îp(N¢õaÓ‡„=õ`éGY<÷°08p¹z*rÑHä endstream endobj 31 0 obj <>stream xœ3·P0P0bs3#…C®BsC ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨­èåðÜÿÿŸS–ã.³Ã¬¯·GgæMÏ’UÑu·¢—Þz{íeÙ´ã[¯]ûûöí¿ûUß—/>½ö˽ÉUþ òeüö%÷¦¯®5_ò+H.}i¾ºÂ÷Që ‰üÿ Œ\®ž \uOQž endstream endobj 27 0 obj <>stream xœ31W0P0RÐ52P01V01PH1ä*T01Š(˜¥ô A’@29—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYÈq‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j œ bâÓQøÐܽÓÔ%±È„íï—¿æ×ß~ùÿ÷û ø[¿ëëÿ-ûßêú6GõhéyÕ·‰ {êA’ÿ?M>ú_m¥ ƒ—«§B ûaG) endstream endobj 24 0 obj <>stream xœ31W0Cs…C®B,$ô t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-l>ÈÏ2ÕÀG¸Û×bË£Ÿ¦în5s¥òWýÊüµþÿÿUÿ±€OÍ,)-zïVÿÞi굊A‰ËÕS! )ìF` endstream endobj 21 0 obj <>stream xœ3²T0P0b#33c…C®B## ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶hæ„ÿ“ƒßÿÇ „ò°08p¹z*rD¨;š endstream endobj 18 0 obj <>stream xœ35R0P0VÐ5T0±P01RH1ä*T01 (˜+ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶à ƒ! ? ?ÇœÄ ÷&Wù¾4_roû¿í—_×ÿÿSþÿÿÿ“«®ÿÿ¿múïk_o½]ºmÚ­ˆÄ1‰Ö61Ç.WO…@.›í=Ý endstream endobj 366 0 obj <>stream xœ35U0Pc3#…C®BÌ5Õ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ëÿƒs;ô[¦s¿Ô›ôÉÖuÓ/ý¿ôRÿ¯þ_ ¿z[/ýÕÕã×[ö_zY¿ôëÒKÿ½/Eýòþ7é¥~ë%îå°08p¹z*r-¶F endstream endobj 363 0 obj <>stream xœ³4V0P0b S #…C®B rMõ t ô ,¨ 9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(h3$,mk(xxrEñ‰:ÞßuÒ¿¿ýÝÿwÿÿoÿÁà¯þÿ/ûöÖê¯÷>×ôÁ»#Fü“‡Ä¹†{ÅÙËÛä·?lÿþö÷ßßõ¿ëÿ«ý?~ý_ òx z¡Ž.!AÛx°08p¹z*rß[ endstream endobj 360 0 obj <>stream xœ33T0P°PÐ5T05¡C®BS  ‚©‰‚…ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j ›$–sêØ#Ýb[zÝÝa¯³œ@Ý<Í×÷ÿý4ß¶#yCµ)[èDÆM§61¨H|pø„ž°â†4g}Ÿf/ƒ{aìÝùu·ÿ}¿º´¶µM¨™eñÊ·‰­m¢l"³VI$08°p¹z*rÂøDç endstream endobj 357 0 obj <>stream xœ35S0P0QÐ5T05T03UH1ä*T01 (˜™)˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶ÀÑA…Ÿ…ŸÃV„÷…½&Þ—æk¿üºï¿öÿÚÿ—_×ÿÿÿÿ8ˆ‚¾aûÿÿÿvéÿß×_o½·;v˶K·½[¶ióèlbQbP`ârõTäwžGQ endstream endobj 354 0 obj <>stream xœ31R0P0a 3 …C®BcS ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇåé¢ðӔ˙û?ð(„탗«§B y:ö endstream endobj 324 0 obj <>stream xœ33R0P0VÐ5´T05W01UH1ä*T05Š(˜™(ë‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔΥSš›W ÔbgÇå颠¶HŠÅ„Ík‡æ‹cœò|=î]®÷ýú»þwýÿÿÛÿCÀÒÿÿãöÿнž}+vé­˜…ÌœÕ{ €Pràq°‚ªiÿ8¸\=¹çãI¸ endstream endobj 281 0 obj <>stream xœ31W0P0QÐ5T01R05WH1ä*T0¶ (˜Z(˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶ààŒn©‚æ¨Z¾-~Q¶ _Ä—/ù¿ä×ë—ÿãã³YýÿÿïÉÕú©ñ™÷ÿýþ]zëý·i‡c·l“ðNÚ¶mÛ†C›8¸\=¹eÄBµ endstream endobj 278 0 obj <>stream xœ33W0P0b3C3 …C®BS˜ˆk¢g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAiáæ?³ZÛ¦ÿG ëÿÿúõÿÿßúÿ×ÿ{ÿî‡5bJû01(p¹z*rÂXA× endstream endobj 275 0 obj <>stream xœ35S0P0VÐ5T05R01SH1ä*T0± (˜˜+ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶pÎã iŽ…Øä™«|_(ÜÛ¾ä¾ÿÚÿk¿üºÿÿ¿ìÿÿÿ?emýÿÿíÒ_o½Î¬ßp(:3±™Eìhbk3ë„s \®ž \ƒ@B& endstream endobj 272 0 obj <>stream xœ³0S0P0QÐ5T°0T0³PH1ä*T07 (˜Y*˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠ä8ÿÿ“+Š<¦çXþ»þ–ÿz»îë¶}ÓnE'–IEó6e‰ØpM" ’m¯ƒ—«§B Ü`O¢ endstream endobj 269 0 obj <>stream xœ31W0P04SÐ54V06T04TH1ä*T04 (™åô A²@29—ËÉ“KßÓW¡¤¨4•K?¨ŒKߨŠKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷jçÒwÎÏ)ÍÍ+j±³ãòtQP[VðÂÖ¶úßß÷•«×Ö{s&&­Zr•uÃ&.WO…@.OÂ'Ð endstream endobj 14 0 obj <>stream xœ35R0P0QÐ5T01W05UH1ä*T01 (˜š)˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶àIC›Œ D@bAû¢‚½LüKä=ÕÖÍÿqÿýï‡=–¦.§Ž6?|c»·}{Û‡ùì'2Ø'œZÍöð[ÜÛ¿÷¿Ö®¿píP@”ŠN>stream xœ37V0P0bsS…C®B33 Ì5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ó0+やƇì-rý½™ò|½šòù¦¹¿ôWüåšúø¿õÿÿÇÿÇ>ªUpÜÿ¿ƒ¡ËÕS! PŒH1 endstream endobj 302 0 obj <>stream xœ3³T0P0VÐ5T03U05VH1ä*T03 (˜š(ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠ÉXÿrà\f ë$b×}½ÿz{ÜîëÙ{Ëö¿½¾îë­÷`¡½e ¡ò_ Þñ­ÿ·þއ¸\=¹@õC endstream endobj 299 0 obj <>stream xœ33T0P0a3S#…C®BS˜ˆkªg¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ @ŽK´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[¸Ì/hr»çCÛ’‡ž«/L¾ (»Ã·Ä¶ôzl}üõÿ_ÿÃÁuñú ¬) ,\®ž \ƒ9b endstream endobj 296 0 obj <>stream xœ33S0PaSKs …C®BSc ßÄ5Ó3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶pÎÞ'ñ,r¶ì-~Ê_(Ü›\ŹWýÛ¾ùw}ûÿ§©÷ßu×Ù¸{³ÿf_Û›YºtéµiÓ¦Gq{{;fffèê*IM÷^°Ë3³*núõÓ½/Åò{Ç–^-íÛßÀÁÐÀåê©ÈD1JC endstream endobj 204 0 obj <>stream xœ36U0P0UÐ52R02U0³PH1ä*T02PAK ”ž!HH&çr9yré{ú*”•¦ré‡Uqé{qé;8+ré»DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.O= ¥Åùùù{÷î¿}ûïþÛÿ¾¿Áÿuÿÿƒ1üÛ Æ¯ã0n¿÷—ýÞÞ_¶ìºtéR× †.WO…@.ÊÿI$ endstream endobj 201 0 obj <>stream xœ31W0P0aKSs…C®Bc3 ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶`ÁÅCüœKþJÙ²¾\«pèEýÿÿÿ5òôšz+Ìý æ›ÿÿ­ ƒ—«§B Ú<- endstream endobj 198 0 obj <>stream xœ31W0P°PеP06T03VH1ä*T02 (˜*Xèå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j+nèÉž\U]‘µ{÷ß¾¿÷÷}ü¿û?ü-ý¿>£¾®›þ23{éÒ¥-[­™µ”A€‘ËÕS! PF?F endstream endobj 195 0 obj <>stream xœ31W0P0UеT01TÐ5RH1ä*T06 (˜+˜ê-Dr.—“'—¾§¯BIQi*—~8P —¾‡‚9—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+ê°³ãòtQP[Yçôƒ¡ƒËÕS! üÁp endstream endobj 192 0 obj <>stream xœ31W0P04U06R06T03VH1ä*T04Š€D Mõ ´ž¥Br.—“'—¾§¯BIQi*—~8P—¾P’Kß)ÀYH¹DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.Oµ…N—•®e]z­é¯ÞÖ××?e{÷äj}ý­[‡¸\=¹×Ð+ó endstream endobj 189 0 obj <>stream xœ31W0P0RÐ5T01Q0¶TH1ä*T01 (˜eô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[±@ÓaÑåÿ?MÃOühúû ¬ÿ·oïºÃË#vÿ6ý‘hÚ&p€…ÁËÕS! ÙQ=¥ endstream endobj 186 0 obj <>stream xœ31W0P0UеP01T03VH1ä*T06 (˜*˜êå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j ®lyýzmÕu0ú ¥¯¯¿ŽShÅ땦 \®ž \ò?i endstream endobj 183 0 obj <>stream xœ31W0P0´F– †† )†\… Ú$l”Ñ3TÐ5ɹ\Nž\úž¾ %E¥©\úá@i.}0éତ\¢ ¹ b¹<]äìêüƒõìä¸\=¹®á endstream endobj 347 0 obj <>stream xœ35S0P0UÐ5T05P03UH1ä*T01 ¹f ¦z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-KâžÇÓÔ÷”ažÝ®×ëvÄèíÐãžÃkÿžÿPŽPç°ç°SKæoâý0û¡ùÕ/¿Ãû·ÿ¿ÿ/® ùåãûÿV_ó Z·S÷ߥ™9&Ûx„n´¶m8t˜µYƒçƒ—«§B FùIÀ endstream endobj 344 0 obj <>stream xœ33R0P0QÐ5T0µP0³TH1ä*T05 (˜eô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[¸&Ã’çÊÿÿ?yÌÿCÁ A…¯Ô •kd¿Ä¿ä—ÿå×/ëÿ¯¿þ§¬âäªÿÿïïÿwëÿ¶ÝënUó(-0ßpPrmGŒÁŽÄ"ž  †.WO…@.>(Pj endstream endobj 317 0 obj <>stream xœ32U0P°P06S0´P03VH1ä*T04PA#s =CcS=K…ä\.'O.}O_…’¢ÒT.ýp ".} .}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶±Ãbß§¬ g*þÿ­Û›}moöÒ¥WX¸\=¹°>( endstream endobj 262 0 obj <>stream xœ31W0P0QÐ5T01R05WH1ä*T0¶ (˜Z(˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶â†i§¨ÿÊ[¶,¹ª²ñË–-»®{¯­ºF«þêÿ­ú}ý W04pp¹z*rô—; endstream endobj 180 0 obj <>stream xœ32U0P°bCscK…C®BK ×ijÐ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýpK.} B.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W¬`igÇå颠¶AGáÑŸYKÛÄìÿÁÏÅûÕV&¶20r¹z*r“( endstream endobj 177 0 obj <>stream xœ35P0P0QÐ5T01¡C®B#°°¹‚‰ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j l%t*_,P¾àûPõ’ÿúxïÿÞß¶fæ^øãÿÿÿ“CþÓXýwë޲ݙ¹K7\:Ì#tcÁ†C':8¸\=¹•õ<Ý endstream endobj 174 0 obj <>stream xœ31S0P0b#S…C®BcK ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶H²«&™Cnžðsõ%3Mµb_­¿~ëåz}ùûÿÃÁ#öÿ Œ\®ž \ô5 endstream endobj 171 0 obj <>stream xœ3µT0P0bS3…C®BS ßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠ŸÿŸ¯›+;{Õû»zÿc_o½·J쿞··|Ýõª· âñ­ÿ·þ®¡†.WO…@.)T>stream xœ ‹»‚@D-É|ÅüܽP¬› ‰c‚•…±R;Àø çÏõ6“œ93•§£R·¬KÏ»âÅ2X騅)_Þ&´ ’Žü¾—älÈží©î¢pWH/1ö†C]˹™ø—iþØ£i:þÖl³b—xÂoõÅ endstream endobj 165 0 obj <>stream xœ36R0P0b# s…C®B#ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶H†“ÃÖÖþòÿÿ·þ®]c°ñÿÿOªF«ÿÿ?)¸ÿ?*øã›¸¿ƒ¡ËÕS! Å[= endstream endobj 161 0 obj <>stream xœ35S0P°bs3S…C®Bc ßĵÔ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶àΪ‡;ôœBå?•O¨ÿüñj¸€…ÁËÕS! ‘ð> endstream endobj 158 0 obj <>stream xœ31W0P0´F– Æ– )†\… ††@¾ˆkh¡g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@µ\ú@¥\úNÎ @ŽK´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQPÛ kk±_mennò ˜mòåÑŸYK·ne`ärõTä¬*# endstream endobj 155 0 obj <>stream xœ3²P0P0WÐ5T0²T03PH1ä*T02 (˜*˜ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ôˆpü¿þFÄÿÿÿŸøâwS_ò+|ýõU_ÿ¯úl¯ç ¿½Ù×_á¤Þº½á«þ__õÿÒ×_wu»s1(0q¹z*rÚl@Û endstream endobj 152 0 obj <>stream xœ35T0P0WÐ5T05T01PH1ä*T01 (˜*˜ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ô[ðÕè(d_\Íñ°ýr†Ú× þצ¾ýú?nemýõ¯Ç×mU[¤ÿ?6{=_Êzµþ×Ú¬]ÿ¯¿ÚúoËþÿÞáÞË´yÙDX¸\=¹6pB endstream endobj 149 0 obj <>stream xœ31T0P0WÐ5T01V01PH1ä*T06 (˜*˜ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]ÔɰLdk¾Ø¹nò¯ðÒ¿ù¡_÷¿­[ý¿·n•¯SmÝô×ñë¯G½þéúë/ûAð®¾÷Ö»ºmÓ$ZÛDX¸\=¹²”> endstream endobj 146 0 obj <>stream xœ31S0P°PÐ5R0±T03TH1ä*T01 (˜+Xèå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³ãmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ô$œ‰Pø0¯ò!ν,÷¦/­ò_}ié×ëõ׿~ýõõúë¯ÿ__÷úë­wûv/æ,›¾mú6!o§‡>zÿº¾VÿÒ_ÓfÅÇM ™2kÁ¤7ª‡9sœsóˆ08°p¹z*rpN; endstream endobj 143 0 obj <>stream xœ31S0P04PÐ5R0±T03TH1ä*T0¶Š(˜¥ô ’@"9—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-ˆù±Áñ¡Œy‹@â õK{Õ¯}Ù«ÿnzü—ý—þ‡þÛuý¯Þþÿ/UÿÃq¬N}Ôßð—uÓ¿z_]ª¶úWÜ´[@Í£°áˆŽA#ƒ—«§B +¼I endstream endobj 139 0 obj <>stream xœ31T0P°TÐ5T0"…C®Bc#  HÄRÏ($’s¹œ<¹ô=}JŠJS¹ôʸô=€j¸ôœ€”K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶pÎOGö–ŠÃ‡8ÌÌ÷z©ëtée麽Qοâ}ý/[3[måú¥/ó¦gæ ÝvÌmŠHâæap`árõTä°Ý5 endstream endobj 136 0 obj <>stream xœ35P0P0RÐ5T01S03VH1ä*T01Q ›™(éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶Ø†Wù§©ÝïÿPðS¬NÀžãÆáM<öŽæGÍ/ך¿ýú÷÷ßÿï¿CÄíÿÿõõ×[±ý¦ßŠ5›î»`o3‹¸cGD3+ƒ#—«§B çAIŸ endstream endobj 133 0 obj <>stream xœ36W0P04Ff †f )†\… $¤ ô tADr.—“'—¾§¯BIQi*—~8PšKßL:8+ré»DrÄré»é;;»¹66úÞ º@çüœÒܼb b;;.OµeÙ—/ÿX¯¶²îÚ5‰F.WO…@.‡°" endstream endobj 289 0 obj <>stream xœ35V0P0bSs3…C®BS3 ßÄ5Ô3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶àÎËÏM<ÊØUq˜5q>diU÷Ð÷ÚzýëÖÕΗÿà)ÿÉË›-$ÿÇ–Í hJøÿA‰ËÕS! ´PTp endstream endobj 130 0 obj <>stream xœ36S0P0bc# …C®B# ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶Ÿ½EnÞü—ÿÿÿ»þ67±µÿÿÿÿ–÷ÿóu¿ÿ xäÂöA‰ËÕS! BÜBâ endstream endobj 127 0 obj <>stream xœ37V0P0VÐ52V0³P05QH1ä*T03Š(˜›+ë‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[ÈÅ<…íàD·Dö9Á $ž\É"}˜sßìW¿êfÿþþûÿý÷ÿÿûKÿÿÿÿ·êoÙþØ¥·b—öÞ0]ñÁ!îëyôÙ¸Na®³‡*ü¨z8øƒ —«§B %äUe endstream endobj 124 0 obj <>stream xœ³´T0P0bKS #…C®BK# ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶SœGpÑÿÿÿ'T0i¿a|pÓ¿[Ñ™Uo¯ÝŠ›vëíõ¥Û¦Ý¿½tÛîÒ—¹K·íÎÌ]úïhnݵk÷ß¾ýwïþËïË×õ/¿\7¹îÞô%÷Ö~}i¾äÞöË@òþ/ß—æë/Wù¾¬Ú~¹*|É¿{“«â8¤ •wŠóþÿÃàÀÂåê©È¥Þf endstream endobj 120 0 obj <>stream xœ33T0P0VÐ52W05U05RH1ä*Ñ@hn©`¬g’’ɹ\Nž\úž¾ %E¥©\úá@U\ú@E\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAmá´ îS Ù[ä„/wO í}âë¸Oø‹ôË_ûæ/ûÿí×ßÿ¿ÿ×ÿ‚û¿ÞýõÖÿ[q{—Þú6=QGèñó q×Ûö¶>l}pèã8Å)þ_m¥ ƒ—«§B %ÛWû endstream endobj 117 0 obj <>stream xœ33T0C3S#…C®B\=C]=K °0UHÎåròäÒ÷ôU()*MåÒ*åÒ÷ªäÒw pV0äÒw‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j çü°üàéÎ"¡ðè²?gËãhÿ'WEž©¥}òH´÷µ­ ÷ÿoøÿÿWëÿã?C…®LÛ˜¹<ôÿ»'WÕf5p04p¹z*rï.U endstream endobj 114 0 obj <>stream xœ37V0P0QÐ5T07P05QH1ä*T03 ¹¦ &z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-äbÖX8!fÿÿ?³¦4×<üÄÿÿúÿzýõ\éx/¹^Þmß$¼7ÆìH,’fžÂ ÀÈåê©ÈßÐH³ endstream endobj 111 0 obj <>stream xœ33S0P04¦f æ )†\… & A×Ð@ÏPA×@ÏÀ,L’s¹œ<¹ô=}JŠJS¹ôÃj¹ô=€J¹ôœ ¹ô]¢ ¹ b¹ôÝôÝ€Ü}o] Œs~Nin^1P‹—§‹‚ÚÂi9†1zâÜMOí>stream xœ31W0P0bcSs…C®Brõ t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-ÜpF×þz\e鯯_öí­Û[«¿>~}¼÷ëë¯/}ýõõ× PÝ^=;u—Ÿ¦Þ Éöÿ@á`­ýÿ[  \®ž \Z1?­ endstream endobj 105 0 obj <>stream xœ31W0P0b#S3…C®Brô t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨­˜Ì"PðîÉU›éGmÿ˜ÿßÿÿÿÿ×_–=ªGK=üðûycùÃýù÷ßßÿŸ”»~}ý¿é­¦¬ uZiê°€‰AËÕS! ô(Gt endstream endobj 102 0 obj <>stream xœ36V0Pa#K3#…C®B#3 ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇåé¢ðäJJãaîÿ8Á‡æN éL \®ž \[W;  endstream endobj 99 0 obj <>stream xœ31P0P0bcScK…C®Bcc(k¤g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAmû³„?¢%Ó=«¾F-}Y²?núÒš™ÙצMÛ˺ôÒï¥WK/­Õ}Y²WacÓñ, \®ž \í6s endstream endobj 96 0 obj <>stream xœ33U0P0b3C3#…C®BS ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶#þÏ9ÂMø—n¿ö7ÿÚÿÿóÿèöÿÿ&þGmmšxÿ`apàrõTä&¬D× endstream endobj 93 0 obj <>stream xœ35P0P0VÐ5T0±T01RH1ä*T01S ›+ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶ ¥á& ?‹\ÏQ~‡f~Çí«kÿÝÿwÿwÜõ6ñþÿòÜ bW=8úéË^Ö—U ¿þýmSÖþ Û }Êù9*ލ· Tr±ñ:°08p¹z*r2@I endstream endobj 90 0 obj <>stream xœ31W0P0bS3…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ÒõçƒçÍÿ@menrÿtðD£×þÿ­†.WO…@.ƒ;J endstream endobj 87 0 obj <>stream xœ31W0P0bcS3…C®BC ßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨­XÁzDÆz§©¿ú+éïßþî¯ÏÿŸÿ¿~ýÿÿï÷ÿƒë×ÿÿú[ÿúeý˪_qû¦7E:†,¹ÊÔÀÁÐÀåê©È8¼C endstream endobj 84 0 obj <>stream xœ35P0P0RÐ5´P01S01PH1ä*T01Q‰›Z(é‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔΥSš›W ÔbgÇå颠¶ØFsFB"ó!3ƒM<–¦Zœ{»ò—ýÚŸ¿ü÷ÿÛÿÿïûõÿÿ¿ôÿÒ»ÝñÞ[v(-ÔÏe}#áX‘$ÞÌú,ÿ¹ðñŒ \®ž \¹¿Fô endstream endobj 310 0 obj <>stream xœ³0P0P0bsc3 …C®B3K(k¢g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEA1qêf†‡‡'´4ü1¸?ÿöÿÛÿÿçÿ‚¿ú è}éËÕ'ë;ôÄ̰ó`fü‘¸îþöïoÿ¿ýÿÿ>PÝ¿ý_}ý²·VŸ³BUk¡£×&.WO…@.ãÇPG endstream endobj 229 0 obj <>stream xœ31W0P0QÐ52T06R05WH1ä*T0²Š(˜[(˜è‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[pGL ~ùßõ‡¹åÿÿé2Þõû'Ûßÿ¨ 6µè¯ëºibZ¾A¯³yt$¸\=¹¦É;û endstream endobj 226 0 obj <>stream xœ31W0P0bCSs…C®Bc3 ßÄ5Õ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶Ð#ñAGc"{‹Ü¼y]L?òÙoçÿ4õ¬ŠX'tèe¢.ë‚-;¢¢â—^}ýÿÿ?þÿb(áøoþ¿ë[¹\=¹’Ü<@ endstream endobj 223 0 obj <>stream xœ35P0P0bs3…C®B3(k¨g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAmÁ9r’Mv _Ä[„^VÅM_ùÕßúÿ0p¤^mÑ<žÿ8€¯ÍB–#õ˜¸\=¹5M» endstream endobj 218 0 obj <>stream xœ33T0P0bSS3#…C®BS# ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠´`§&ŸÌ¬.?îö-¼?×ý¯»ÿïþÿúÿ@pýßôÓ¯/}¨ï}õˆ÷̶ùÿà¯Å”‡S01(p¹z*rŒUE endstream endobj 215 0 obj <>stream xœ31W0P0QÐ5T01R05WH1ä*T0¶ (˜Z(˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶ •áƒÃǶ¶¶"?jYî'þûûÿÖ·=µU׿lØÉË’bqVoûö 5Ò·Wß_þÙžÃ&þõªøÉ!—Þ¨n¸žÒv477±µMÌñ<ƒ#—«§B êdCZ endstream endobj 212 0 obj <>stream xœ31W0P02PеP02W03VH1ä*T (˜eô r@"9—ËÉ“KßÓW¡¤¨4•K?\ÁœKߨ†Kß)ÀYH¹DrÄré»é;;»¹66úÞ º@çüœÒܼbs;;.Oµ•5ñÿ!àŸoІ.WO…@.kD%š endstream endobj 81 0 obj <>stream xœ33Q0P0bS 3#…C®BSS ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠ôà 6 Ÿ¯«:ó-Þù·¿ýû „ÿAàõu ¼ôeêCÖM¸›Ÿ%noûÛþöwÝýûûïïÿ_TóëëÿK¿¾~Ù«Ï™ÙÄ¥´`Á&.WO…@. õP‘ endstream endobj 78 0 obj <>stream xœ31V0Pa 2TH1ä*T06òÁ\c=C]=K °0UHÎåròäÒ÷ôU()*MåÒ*åÒ÷ªäÒw pVR.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAm±±Èc¶ì-U5z¾~“ʽ¿>þúmWöaîã¿þÃÁ)æ7p04p¹z*r'Û7N endstream endobj 75 0 obj <>stream xœ31W0P0bc…C®BC ßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-œ‘V´•…ÜĒ“«Ö»ò+–~˜õr]ûºýëöÿ_ÿ þ,–=~rÕWF.WO…@.)U6Z endstream endobj 72 0 obj <>stream xœ35R0P0b33…C®BC ßÄ5Õ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-xʰ§E²EN ÊXú‚BâKó%÷šó÷éîþŸÿÏ7è?žDLvüë¸-».]zííí˜Yº`Ë–-‚¬ï¦{/™6}Á^}Ï’}¶º¥×c“×7p04p¹z*r æ@@ endstream endobj 69 0 obj <>stream xœ31U0P0b#3#…C®Brô t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-œ‘à¿n?.z½þúÒ×__Vý­ŠÛ7 §ð£)ÛOS¦çGþƒÀ¯Jí? ,\®ž \6»F/ endstream endobj 66 0 obj <>stream xœ31U0P0QÐ5R01P03TH1ä*T06 ¹Æ &z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ô´5|pøÐ|ñ¡ó!–{Mù˾Ì~ð×ì÷ÿÿÿ¿í1Ø“ÿ:nË–]‡¸9tZÝÙ'\ü‘øöíÛïÛÿþûû3ÿÿòîÿ_VOY=ƒí¿wþmïÄ¥.Ý0h:,Ú&Æ#ÂàÀÂåê©ÈSGO endstream endobj 63 0 obj <>stream xœ31U0P0VÐ5T0£C®Bc   ‚‰‘‚±ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j › ŽØ(‘kâ}È"QåûÒüßäªûþkÿ/¹ÿÿ¿ìÿÿÿ'‡®ÿÿ¶|ý·K÷vǾÎÕݲM›Ǡé°À†„L \®ž \Oi;š endstream endobj 60 0 obj <>stream xœ3³P0P0VÐ5R03Q03RH1ä*T03 €DŒõ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÈq‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. *‡åO®Xòp†_Y3÷­oûÿã¯ïú½êmùoï’m×ó¶ŠÎÌ1˜&‘0M¢µMŒG„Á…ËÕS! yQNp endstream endobj 57 0 obj <>stream xœ31U0P0QÐ5T01Q01TH1ä*T01PA#=C HÎåròäÒ÷ôU()*MåÒ*âÒ÷ªáÒw pV0äÒw‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ôú2»T¸³É (¾àûáöåümÿÿß¾õmOýÿéÊ _tÞç8' Ï¡ï}éËÞºý‡ºþÿÛÿzrÈÓ믿]ÊÕݲ¶L³ë°À¬ž01(p¹z*rr{Dç endstream endobj 54 0 obj <>stream xœ36U0P0RÐ5T0²T05SH1ä*T02 (˜š+éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶Ð»ùÿÿ¿õÿ㯽£$È?9pûø'&oýúŸ[vé¶7O˜D#ƒ—«§B qÈ:Ñ endstream endobj 51 0 obj <>stream xœ31P0P0VÐ5T06W01TH1ä*T06Q ›)ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶àYâƒÆ‡r _ò=÷ª}™}íËü÷Þ߯ÿ¾þñOñÃéÿ'‡¾ÿ_°ûݶ××su·l»tÛ›ÇÀ›Çé`SC—«§B =H endstream endobj 48 0 obj <>stream xœ35P0P0bs3c…C®BS(k¤g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAm± ¯óOS»ßÿ¡à§P€=ÇM{…û Ö_Êý8ý¿ý¿þ£ƒ¿&JŒÌÿ08°p¹z*rBHF endstream endobj 45 0 obj <>stream xœ3³P0P0b33#…C®B3C ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨ùçëªÎÌòèVötðøÿ³Äé¢ÿÿÿ5yÜáÙö¿ƒ¡ËÕS! Ÿ¡MO endstream endobj 41 0 obj <>stream xœ3²T0P0b#CC…C®Bm„@Ê\ÏPA×H$çr9yré{ú*”•¦ré‡e¹ô=À¤S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+*¶³ãòtQP[–ó}ùrñOYÓ®]“`dàrõTä'S!] endstream endobj 38 0 obj <>stream xœ35R0P0VÐ52P05P01TH1ä*T01Š(˜*ë‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³r‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j ž24lHPøÐÌyH]b΄i»/å¯Ýz¹ÿ×ýÿ@ð>þÛîk·¢¯ó¨Ñ•>ôÉã’üûÿû~2ñDJs·oø}û=÷â‡_ œZ6¹îcÜÿÿÙj«c×ÝŠÎÌ1˜&é°áˆŽ„N›iC—«§B ¾eR endstream endobj 35 0 obj <>stream xœ31S0P0VÐ5T01¡C®BcK  ‚‰±‚±ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j :D(Í)p|(ÜõEÀ|‰ð¥½áÞ×__ÿ¶5{Á¡ýÿÿ?¹Z¿ÿNsõýÒ½e»3s—¶]º‘¨cÈÍ£ÓÌÞÀÁÐÀåê©ÈA; endstream endobj 367 0 obj <>stream xœ37P0P0UÐ5W03Q05VH1ä*T0µT ›eô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-œclÿilû”%¹ô°1Šè.WO…@.JÖ>stream xœ33S0P0UÐ5T03P0·PH1ä*T05 ¹– ¦z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-œåÇ}BÜ¿EŽÃFI¢ß¡¹ÂÑ|É/G[ÕKœ/«¼×/ý¿ôÿêØª6ñ­×]ÿ“«ž%›§ ¹—}ñ¡½,Uœ{ÕþîX7ûÝÞý«ÿÿÚrÕÿÿÿÿÿ÷ûúÿ÷q»ÿ^ûºmïµ—¹K7\º‘0M¢uk›Ïi.WO…@.£XÏ endstream endobj 361 0 obj <>stream xœ33T0P0SÐ5T05Q07QH1ä*T0± (˜›*˜éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶ a€Â‡y—UYu_T}¡~)N|éË*ß’k‹¯MYºþë¯ /^tÆ·È·È$Zùû»Æø2ó —ÈÍ^¾zù²ÿUûë|Ãÿý­þ_¿îuýÖÿ¹ú±[v{ç–]zزGèÆÚµkL7l8t°©ƒ¡ËÕS! »ŠR endstream endobj 358 0 obj <>stream xœ33S0P0b3CsK…C®BSs ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶àF…n}léßÒë_¯Ç_­>stream xœ³0Q0P0SÐ5T07W0³TH1ä*T07 (˜eô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÈq‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]ÔÎræ¹ÉôÐÀáCó!+9…ćLlr“«8Ì—Ü›\D¾ÿ—Üÿåûí—_÷ÿ¿®µÿÿ_ö?ü4z[ÿ¿êÿÖ{ûß–¯ÿvéÞîØ-Û.ÝöÎÕݲMÂ;±eÃÁ&î¤ ‡6l:‘ÖÎ ÀÈåê©È“ŠU‡ endstream endobj 337 0 obj <>stream xœ31W0P0b#S3…C®BcK ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶b2Ÿâáö¢¬yÞJ6ömÿîÿûï÷ÿÿÿýúúÿÒ×Ó[ízÝzèañÁéÿ!àÓªî¾A  \®ž \QcD# endstream endobj 334 0 obj <>stream xœ33S0P0WÐ56P0µP°4PH1ä*T05Š(åô A²@29—ËÉ“KßÓW¡¤¨4•K?¨ŒKߤŠKß)ÀYÈs‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@=vv\ž. j NlyýuýËú¨Ó¡2›,ù ¬) ,\®ž \XgWo endstream endobj 331 0 obj <>stream xœ33T0P04¦† æ& )†\… & A×Ð@ÏPA×@ÏÀ,L’s¹œ<¹ô=}JŠJS¹ôÃj¹ô=€J¹ôœ€—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ÀqÃyÿÿß¶mÛøÿÿÿ3ñþñ¿Ÿü~ÝòèSÖ´+ ,\®ž \&¯Bê endstream endobj 328 0 obj <>stream xœ33T0P0WÐ5T03P05VH1ä*Ñ@hj¢`®g”ɹ\Nž\úž¾ %E¥©\úá@E\ú@5\úNÎ †\ú.ц\±\únúÎÎn@n€¾7P7—¾s~Nin^1P‹—§‹‚ÚÂsÓ•¦âw|ù}ùÉCû÷ó¿}kw¹bõÿÿÿŽFò<ø$¡Þô°`‡«ó‹kò‹è_ÐwØ·—õëñëÿÿg«­þ¶·õF"ûÁ‰<9±o«9ߨ·qHœÂìÀÐÀÁåê©ÈcJ endstream endobj 325 0 obj <>stream xœ31W0P04S02U06R05SH1ä* ¡±!¥g¨`d¢g©œËåäÉ¥ïé«PRTšÊ¥”ãÒ÷*âÒw pVR.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAmYÁ [[û÷¿÷¾W´þ[·7{éïXU+MsX¸\=¹ÏP)- endstream endobj 279 0 obj <>stream xœ³0T0P0bs …C®Bs3 ßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠(É&üÿÿ“+© ;˜[ĽÞ[ž·ûzÙëÿ[cßí½÷úÿ–üu¯g¯ûr·üßK«øû·^ï5]ÿÞoú÷¯·Ü­©ö­ÿw9þ­éÿ½õ[®û30r¹z*r–$L endstream endobj 276 0 obj <>stream xœ31Q0P0QÐ5T0¶T01SH1ä*T06 …ÍLô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[èÅÊÍÂ[ÐÞzq_ÿ…Zõ×½ÿ«ÿýH¶jkÊê8p̉uÃjþ|Þ·?ä+¸F²=<<›íß½¿¯®¿p©ÓÕ?K 1À¨àƒ—«§B ƒB=ô endstream endobj 273 0 obj <>stream xœ3µT0P0RÐ52P05S01QH1ä*T05Š(˜™(é‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQÐbüÿÏ×̓•½êý]½ÿ±¯·ÞÛ %ö_ÏÛ[¾îzÕ[ñøÖÿ[׃QÕõ57v•.ÛXº>êePPÖB=ï¤mæbP`ârõTäš)I endstream endobj 252 0 obj <>stream xœ31W0P0bcS3…C®Brõ t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨­èá•îŸúZùý4ð‰÷ýe0cJàqµÕ+8¸\=¹ÈC;k endstream endobj 247 0 obj <>stream xœ31U0P°T06T06U03QH1ä*T02 (+Xê% ô,’s¹œ<¹ô=}JŠJS¹ôʸô=€j¸ôœ ¹ô]¢ ¹ b¹ôÝôÝ€Ü}o] Œs~Nin^1P‹—§‹‚ÚÎ3—ÿ‰J¹ª¶ÿ?üª} ¦ÿg®Sÿæ1(0q¹z*r•#6F endstream endobj 244 0 obj <>stream xœ3±P0P0bS3c…C®Bc ßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶Ø†—ù§©Ýïÿ00ákýÿ6îú­/kô½/}Ù£úBßûúõËæ/–~4Ù¯}óoÿþö÷ïþýõùïoÿï'ã×’ÍûŸA€‘ËÕS! +ÄI• endstream endobj 32 0 obj <>stream xœ³0W0P0b C…C®B rMô t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYH¹DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.OµÅÆ\~’'3sH8|hæ°Q>rÈÆßa¶ÃìÉÁKnù¾›6ýefM°ÈýÐÿ_ãÿÿý¹bÄ“"‘ÿÿƒ —«§B •Kã endstream endobj 28 0 obj <>stream xœ31W0P0WÐ5T0£C®Bc  ‚‰‘‚¹ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j ž4&2ªð÷÷we*á~}éW¶çºö¸}Vÿÿ=¹Z¿_qÓ·Ë÷sË£yô¶l³]»Æ`áì Œ\®ž \Š5` endstream endobj 25 0 obj <>stream xœ31W0P0bCS3…C®Bc3 ßÄ5Õ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶¢‡õ»¼ÚêŸ<åÿ±§œbf-ýÀÈ Àåê©Èš9` endstream endobj 22 0 obj <>stream xœ31W0P0VÐ5T01V01RH1ä*T01PA ˆ±ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j v:¨ØT©›·ä{îUû²þö¥¯ùÿ¿ìßßû_΃çü§¬ý¿ë]ïߺ·ízɶK7uÛ8»³NH`dàrõTäÆï9 endstream endobj 19 0 obj <>stream xœ3µP0P0VÐ5T05Q03VH1ä*T05 (˜™(ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³ãmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-\•$¹µþŸ³§ôøçØüC¡ŽÃžcAÀ_‰MüK~í÷_¿ôÿúëÿ?‚¨­þÿ¿îÿï¿ë^oÛù¶Å±íÃaŽïmЇžH,9ÀÈ Àåê©ÈLJMý endstream endobj 15 0 obj <>stream xœ35R0P0b3…C®BcßÄ5×3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶pÁ Õ‚1âÊëì<"?\¡þ+øÜU€…ÁËÕS! ý>stream xœ35T0P0RÐ5T01V07SH1ä*T0 (˜›+éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³ãmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-8xàüÿÿ_ÿÿ­ÿú·>¶ôzŒž Èñ?³:œyþ#ƒ?ÍÏ!ŒK·ÿßÕû»eÛ¡hѶ ‡N˜/ap`árõTäËK endstream endobj 8 0 obj <>stream xœ³4U0P0WÐ5T°0W°0VH1ä*T°0PA s=C HÎåròäÒ÷ôU()*MåÒ*âÒ÷ªáÒw pV0äÒw‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ô®)a–dÛЭ8‹mƒã…k‚²k”#rx™x×(4˲|™×TáùÒnÞäKU¿ªbã¿Ìÿ²ïÿÒïë?ñ<Ûõãÿÿÿ?Mãßÿ/â¶üûÿµû¯ó¿Þ^{}×ݲK·{çê˜M;죺áÒaÕ¶à¶Ö6&Ö6ÅÄÖfn…k‹×.ap`árõTäñC[ endstream endobj 303 0 obj <>stream xœ31W0P0bS3…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶âŠÖ?];ß ì?Ó”÷ÿGÿÿÿWÁñü Ì‚(ÿÁÐÀÁåê©ÈýjEæ endstream endobj 300 0 obj <>stream xœ33T0P0VÐ5T05W05TH1ä*T05 (˜)ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶b9땨Üz?ß l¥<ëþo½·ÿmùúß±¯ÿ]¯ÂÃéÏþŸýáPC—«§B ËdD¶ endstream endobj 297 0 obj <>stream xœ33T0P0SÐ5T05Q07QH1ä*T0± (˜›*˜éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶`§ƒâv¾ëê„¿\w¾ÈãÏ¿ ù¥½ã—ýuóìæÿ¯ÿýäjÔÇ÷ù{÷ɾyÅXg9Ó7ǶŠT‡¤Ã‡ùÙäœ-kšZ~òì-âUI¸wO>ÿÛ÷O“»ÿÿýzõ×­° —¶6sztiÕjeó&¶:šªØ¤ÀÄ Àåê©ÈÒóT§ endstream endobj 270 0 obj <>stream xœ31W0P°bcKSs…C®Bcr-õ t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-xƨùoÿºýëÄcV=~òo§©cÅt0Wmïß.WO…@.£o: endstream endobj 202 0 obj <>stream xœ31W0P0S°P01P01WH1ä*T06Š([*˜é*˜ëY*$çr9yré{ú*”•¦ré‡Õpé{•pé;8+ré»DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.Oµ…͉]õÿÿÿ¼¯(ïøÐb¯Á‡…=WUE$)æ&¶¶‰ID$&²·È T8¾|(’¾áѶC‡[ÛÕVææè˜öÙÿÿÿ;€‘A€ËÕS! {Õ9p endstream endobj 199 0 obj <>stream xœ31W0P0bcK…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶óJ–Ëÿÿ›ubÏïì—¹K·¿›ž™{íøÖk×þ¯›_e¹Wûê¯|¯¯ùž¿ò£/åk-p[ºµï§iÔËL \®ž \”)?é endstream endobj 237 0 obj <>stream xœ³0V0PasK3#…C®Bs3 ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇåé¢`Úvu½Ú¢'n–\,Ùÿ?Wÿÿÿ¿[öÿ¿íýÿ?ˆóíF瀀9¸TChÿÿ¶ÿ¯ýåìCü~ê%ŽWÿ?`bPàrõTä$“lK endstream endobj 196 0 obj <>stream xœ31W0P0VÐ5T01Q05SH1ä*T01 (˜š+ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³ãmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-¸³ ªþÿ>gãýÿ@áóÇŽ¿êÚ×už^Ðü’ý¡Ýô÷K=þ·(Y3kÕÿûÛöí®ÏÞp=±ÅM'vÒë춉¦mX¸\=¹dG] endstream endobj 193 0 obj <>stream xœ31W0P0´F– ¦æ )†\… ††@¾ˆkh¡g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@µ\ú@¥\úNÎ @ŽK´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQPÛ kk±ÿÿOSïÿðmãÿÿf™/E²³˜¸\=¹ —/“ endstream endobj 190 0 obj <>stream xœ31W0P0bcS3…C®Brõ t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-h;<[Öä?|[ýÿÿ9íåâ“C6 wøý}µ&þgaÅžYK·NüÈyÿÿª¯ñ`áß¾, \®ž \ G/ endstream endobj 187 0 obj <>stream xœ31W0P0QÐ5T01R05WH1ä*T0¶ (˜Z(˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶àɃšñûû»2íebûUË"ýßsßüÿÿÿo½·;v˶K[³qèvææÑµQøÐ|qû‚æ*ó%÷ý×~ùx«þÿ[ÏU׳o½]ºmzö†„iGss[ÛÄxDX¸\=¹biJb endstream endobj 184 0 obj <>stream xœ31W0P04P0"3Ss…C®B#3 ¨‚‘9PJÏPÁÈRÏR!9—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨íÜP°år·ÿÿÿf­­ÿþ âÿ[SF.WO…@.Å. endstream endobj 181 0 obj <>stream xœ31W0P0V04W01V0¶PH1ä*T01PA#Cc=CC3=K…ä\.'O.}O_…’¢ÒT.ýp ".} .}§g åmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]ÔvDVšzËÿÿ³°bϬ¥[¹\=¹r)"œ endstream endobj 178 0 obj <>stream xœ33T0P0bS 3#…C®BSS ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠•þäJPÁÍ[ŠSÿÝoÿÿþÿ¿ÿÿÿÏ?a$ÿ?þ¿þß¾}âýÿg¶ÿ¨¯¯ÿûÿþÿÿÞÇÿÿÿ[·ÿëÿëÿ½¯_¿~èå„2®5 ,\®ž \FÍOš endstream endobj 175 0 obj <>stream xœ36Q0P0b#s…C®BcK ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ æÂ“ì¦ WáC\/õv}ÙÿmË~}}ùÿ@ðcÒCû“+–2.þž ÿÿßÀÁÐÀåê©ÈÂ-D• endstream endobj 172 0 obj <>stream xœ33R0P0bSKS…C®BSS ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶H²]õ‡Â9ÁOU,Ÿ²BfßÛïýhöëÿëÿÿúÏ “þÿƒ¡ƒËÕS! KÁAm endstream endobj 169 0 obj <>stream xœ36R0P0b#K3K…C®B#S ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶HЧþSVì<àQpÛ?&.WO…@.¡Ú= endstream endobj 166 0 obj <>stream xœ35S0P0VÐ52T05V01UH1ä*T05PA33c=C$LÎåròäÒ÷ôU()*MåÒªâÒ÷*âÒw pV0äÒw‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j v:Xè´KpØ(zȽ¨qn-‹„ÞäZµ[×n½<þ7ÿ?ÜÛÿ¶|í–m—n$êr≠#>qqàÿ¿ßO0ˆWJ|#ÏŸŸø¾åü^ætGÓnòïißÿÿ6åjöÖÛÞ¹ºÍ,Ûx„ l8t°é„á.WO…@.áñU5 endstream endobj 162 0 obj <>stream xœ36T0P°b#cCS…C®Bm„@ÊBÏPA×H$çr9yré{ú*”•¦ré‡e¹ô=À¤S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+*¶³ãòtQP[Vð}ùrñŸ¦ÞÙÙ< \®ž \n X endstream endobj 159 0 obj <>stream xœ31W0P0VÐ52R01U01PH1ä*T01Š(˜)ë‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[ðüÓAf…C/b³gI*®e‘ðÍ4³µ÷_ûå?|Û}=ûÖÛ¥ÅTÅfψãïÿ_.ßyEî¤Á¹yóz¶RXüeöËÇU{ÿÿ»æ¶#±ìÒÃÖ› J7Ö®1ض!aCÂ&.WO…@.[—P~ endstream endobj 156 0 obj <>stream xœ31W0P0UÐ5T0£C®Bc3  ‚‰‘‚©ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j ž%|pøò¡ùòå‹–¶,ÒÙ/å/¿ö«6ù?Íýÿÿ[r5ûßõ¿[ößöÞz#Q·MèÆÚµk×lHXÀÄ Àåê©Èß=G endstream endobj 153 0 obj <>stream xœ3²P0PÐ5VÐ5´T06T03PH1ä*T06 (˜[*èéY‚dõ ’s¹œ<¹ô=}JŠJS¹ôÃʸô=€ª¸ôœ ¹ô]¢ ¹ b¹ôÝôÝ€Ü}o v.}çüœÒܼb ;;.Oµ6Ì­¿vÍþÿÿŸ¼3›øÝž/˜}é믽úU]}µþØþø×_ÿ¡¯ÿÛ.]~lzTÈ•%Wƒn´¶‰08°p¹z*rìÚIŽ endstream endobj 150 0 obj <>stream xœ31T0P04PÐ5T01¡C®Bc41Jé%Dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³r‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ô8>jbo)˜'àûPßsW¬Þ^Õ«Ù/õ—®ð^0}âåYüMý×ÿ·®õ\µôeÙ´—¹-Ûs›¢"01(p¹z*r Ë7Ê endstream endobj 345 0 obj <>stream xœ35P0P0bJ1ä*T01T0€ˆë*èèX…©Br.—“'—¾§¯BIQi*—~8P)—¾P%—¾S€³ãmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ô¶ÿŸÂ¤Ç©·oÒKÝ ×_öêMúéË^Z]]ýK—ßMÿ«º4þe•÷ÒÿKvy/Ù'î!Ôñ¿ƒ¡ËÕS! '×7× endstream endobj 287 0 obj <>stream xœ35S0P0bS#3S…C®BK ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶pI…ÿº]¯½^·Ý.‹]qûã¦/}Yõ· H½þúDý_ ¢Ö_R15 ÷O®Hbù?ÙØþÿap`árõTä’E¥ endstream endobj 263 0 obj <>stream xœ31W0P0bcS3…C®Brõ t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨­tý”µ)Æqýÿÿÿo} Ó_þÿÿÈ=Ïþÿÿ¿ëýÿÁà©z÷?ß †.WO…@. p>c endstream endobj 260 0 obj <>stream xœ31W0P04SÐ54V06T0¶TH1ä*T04 (˜åô A²@29—ËÉ“KßÓW¡¤¨4•K?¨ŒKߨŠKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷jçÒwÎÏ)ÍÍ+j±³ãòtQP[VðòåËÿÿßææ&ÿ‚ÉgÙ—¯¯¿¿÷½Riéú—‰::¡!³lap`árõTä…˜2õ endstream endobj 147 0 obj <>stream xœ3³P0P0b3 3#…C®B3c ßÄ5Õ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶°I¿ùáé3M_>$~ù'ýûê¾ùïïǯþþ?~õÿׯÿGýúÿ:~éÿ¿ÙKÿ¿}ýëëµ]õ¿z¯úúeëºI@Â{É^]'îK/¶²lêRélË`hààrõTä#ñQ= endstream endobj 144 0 obj <>stream xœ31S0P04VÐ5R05U03TH1ä*T01Š(˜¥ô ’@"9—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-’P>ØÏ¹Ö麣écï–Y^l½T²kôÉò¾™µª¯—Æêm½tljU@Üô—u{³—þúú+~}Ô¿é@¸7ûoöÿkûÿ–ne`ärõTä}‹Cð endstream endobj 140 0 obj <>stream xœ36W0P0TÐ52R06V0³PH1ä*T06Š(X¥ôÀ’@29—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-¸³c÷ß½ûoÿûþþþÿßßÿÿýÿÿÿøõë×_ÿ"€ðÒß*¡éu¬ÞÖK¯½cõ¶@€H¨ ƒ—«§B If endstream endobj 137 0 obj <>stream xœ32U0P°PÐ5´P"K…C®BC42W°Ð3ÉÉä\.'O.}O_…’¢ÒT.ýp *.} ".}§gC.}—hC.ƒX.}7}gg7 7ÀÆFߨKß9?§47¯¨ÅÎŽËÓEAmc;‡Å¾OYÎTüÿ[·7ûÚÞì¥K¯08°p¹z*rÆ!(A endstream endobj 134 0 obj <>stream xœ3³P0P0b3S3#…C®B3c ßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶b»’üÿ»˜U8y ¢}ô×>v˶חnÇîú²ízÞ^Ý­·×{ç–½¾tãÛþüüo_þ»~_][åûê~Üäªí×—Ü[û²Ö|uU¼ïKóõ—«¶/}uo{Ë{ ?Å&-æú, \®ž \PEQ endstream endobj 131 0 obj <>stream xœ33S0P0QÐ52U03V05QH1ä*T0µŠ(˜[*˜è‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[8g|‘„‡€Á>stream xœ3µP0P0QÐ5T05V05UH1ä*T0± (˜š)˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶àN¿‚c‡æC*,ü ùž¶ª—ü½/ý¿ôõ××ì[ß¶ÊíüÿÿÿÉ¡ïÿ×}Wœ9Û¾m×ó¶]ÏÕݲM›Ç`Úƒ ‰)Ò‹˜¸\=¹K[@é endstream endobj 125 0 obj <>stream xœ344P0P0bC3S…C®B ÛP,n¢`ªg¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá µ\ú@¥\úNÎ @ŽK´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+é±³ãòtQP[Èy˜åá?)6Žk’gö(âçlùÐßÛR“ïhÖ”çëÕ”ËrOVÝó¯¶×¿]uõ_vå÷ÿZÿÕÿÿ@ø§²ã„À üÿÿ01(p¹z*rà}]s endstream endobj 121 0 obj <>stream xœ33T0P°TÐ5T05Q05VH1ä*T01 €D,õ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[¸à…˜cA…ãˇ¶%_œù/¨_ˆ›~9Ê7“?*þÚÞúãñÿ¿«­þûï~бqÉ÷Û±×ÇnÙa°›MèÆÓ­[ÛÄ$"Œ04pp¹z*rþ¢=Ø endstream endobj 118 0 obj <>stream xœ33T0P°bScsc…C®BS ßĵÐ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶“CJ󸧬ÝOŒÿãÿŠÖZ왵t+ƒ#—«§B «÷BG endstream endobj 115 0 obj <>stream xœ36S0P0bcc c…C®B#K ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶‹UþϬéüÿ ¡óŒ \®ž \¶Bä endstream endobj 112 0 obj <>stream xœ342U0P0bC# #…C®BCC3 ˜o¢g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá µ\ú@¥\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¤ÇÎŽËÓEAaÝÕõO®.2þó(ãÑÿ·âÿÿÿYÿÛt{»C &¤þãPŽMêMøÿ·õÿÿ]’?·é`RáÐü»þÛF.WO…@.ƒGƒÃ endstream endobj 109 0 obj <>stream xœ37Q0P0b3s3#…C®B3˜ˆk¬g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEA¡qÎJ6ÆÃ“Z.ü1û»¾îýïúÿ@ð²þÿÒ¯/«â¦7qwĈ«&~rÈ`pøÛßýù·ÿ¿ýÿ=Hͯÿ×__úúe¯>Ë"E§VÅ„ \®ž \}?Nµ endstream endobj 106 0 obj <>stream xœ31W0P0SÐ5T0£C®BcS  ‚‰‘‚™ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j ½8O\îÏQõz]ˇœÿæÿûiê»NâÍik›bT >>Ø>!9¦©ùá§5æb¿kÿ¾ Û0¥4xBD¢ç*‡ƒ, \®ž \  =z endstream endobj 103 0 obj <>stream xœ37P0P0UÐ5R03¡C®BSK°™™‚©ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.Oµ1 ¸2”ì‘PH|¡pOÀ±}ɽÉU¾/Í×¾4_rÿ—ïÿ%÷¶ÿ÷_ûÿßöËÿÿ”ÿµÕ±ëÿÿß[¶ûúÿ·KÿÝŠ¾ž½7wé¶i·¢¯æÌ]Úv!šGµG µ™•A€‘ËÕS! Ã>P“ endstream endobj 100 0 obj <>stream xœ3²P0PÐ5QÐ5´T"3C…C®B#c °‚PÎXÏ$«g¨œËåäÉ¥ïé«PRTšÊ¥TÆ¥ïTÅ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{µsé;çç”ææµØÙqyº(¨-8 £ðåÿ¿kÿÿÿŸÿD¡þDRùþÿ¨`Þ¯R±ý×¶e5y'.mSL8ÔÀÁÐÀåê©ÈÿµAa endstream endobj 311 0 obj <>stream xœ31U0P0QÐ5R01P03TH1ä*T06 ¹Æ &z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ô>stream xœ3±P0P0VÐ5´P0"…C®BS ¨‚©…‚±ž!HH&çr9yré{ú*”•¦ré‡Uqé{qé;8+ré»DrÄré»é;;»¹66úÞ@í\úÎù9¥¹yÅ@-vv\ž. j vÎ(zÜÄ[ÐÏcÏ¡pÉ­‡jÕ®/ÿ²øê—ýµúÿÿwý‚÷“CÿÿÏÿzû{Üßë¹±[öŠ»áX‘´GB_þ?ø+$¸?`bPàrõT䘪ID endstream endobj 227 0 obj <>stream xœ31W0P°P04W0¶P02VH1ä*T06PA3 =CC3=K…ä\.'O.}O_…’¢ÒT.ýp .}3.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔagÇå颠¶ÒõSÖ.WO…@.åù endstream endobj 224 0 obj <>stream xœ3³P0P0b33#…C®B3C ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(˜6Vßóu™pÚ>±õô²ë·ãþoÿûïÿößõèøþ{Þþ ÿ©û÷ÿ÷ïßÿß/ûU'/¼"íC—«§B 3ß\Æ endstream endobj 221 0 obj <>stream xœ3³P0P0b33S…C®B3C ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-œ•`\ÿòß|ÔÛÿ2~ÿ¯ð÷ÿ&×ÿ_rÿ×}ÿÛ/ÿ_Z÷$êûÿß䚪úÓM}Èbëß¾~]U'È.b¼âƒ —«§B ‚«NŒ endstream endobj 216 0 obj <>stream xœ31W0P0bCSs…C®Bc3 ßÄ5Õ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶ðäÁ‡Ì‡ø9lmm…{_(ä·È{î›»÷wíµ•‡ÿz·õ¯®nÉ(Ø0 š.]º¤pô¡ÊË’]?M½˜¸\=¹øA. endstream endobj 213 0 obj <>stream xœ31W0P0RÐ5T01V05SH1ä*T01 (˜š+éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³ãmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨­X`ìú_mõÄïÿà§Ìü±ï'Ï…ûŽûæ/ûõwßüÿû@’ÿ×Ûÿmúߥ7â.=lÙ±n瓽k:bÀÈ Àåê©È»-Hê endstream endobj 97 0 obj <>stream xœ33U0P0UÐ5R0µT03QH1ä*T05 (˜™)˜êå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[8Åû‰ôµ Ž:d;4¶mhâý"œÍÉfåïù²d¾Üä ¸oß×ÿÙìÿÿrµúÃþý¿ÇG×ÿÎþºm÷õìmÓnE iïÄ¥mŽ9ªmŠ ‡N¤Ê1(0q¹z*r¡ÊK^ endstream endobj 94 0 obj <>stream xœ35R0P0SÐ52V01U0³PH1ä*T0¶Š(X*˜é‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³r‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j W¯-ýõu}üú(ñ N!³qJË02p¹z*rˆÆGˆ endstream endobj 91 0 obj <>stream xœ31W0PaSs…C®Bcc Ì5×3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶àc…ã¿ùÿ®?líÿÿ¯êËÿÿ5Íßÿ#Wʃ²602p¹z*r•¦:` endstream endobj 88 0 obj <>stream xœ31W0P0UÐ5T01S01TH1ä*Ñ@hb¤`ªg”ɹ\Nž\úž¾ %E¥©\úá@E\ú@5\úNÎ @ŽK´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶H„í„B¿¿¿ÿÌŽ?Òß¿}›Ÿõ±þÿ ÃuŽl ;ôÄÝ6¿˜ ¾ ®éGLxüÿ×5³–ímù&¡›ô>Eê†?B6À.WO…@.CQ:F endstream endobj 85 0 obj <>stream xœ31U0P0QÐ5R01P03TH1ä*T06 ¹Æ &z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ô>stream xœ31U0P0QÐ5R01P03TH1ä*T06 ¹Æ &z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ô>stream xœ35U0P0bS#…C®BSrô t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨üÿ)Ë•qÃÏ»­·ÞÇþ^zÿõÞ²Ý׳áDÝËò_ïcªã·þ#F.WO…@.“«:/ endstream endobj 76 0 obj <>stream xœ31W0P0bcK…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶â• ëòÿj+M'>d2þw½êÿÖ{ûÿçêÿ¿íýÿÛ¥ÿ·À9Úÿ³¿-`bPàrõTäjT: endstream endobj 73 0 obj <>stream xœ31W0P0UÐ5T01T05WH1ä*T06 …-Lõ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[èy„µ…×Fá¯é…¯-~±È/øåùøåÿÿçz®ê¯®}#w"qÞYÇne¦‰î9ÖIqœ_&}?¿þ]èŽýÿo½ºöÛK"Â`J¨¿ªãƒ%W01(p¹z*r°€FW endstream endobj 70 0 obj <>stream xœ35P0P0UÐ5R01Q03QH1ä*T0¶T ›™)˜êå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[ÐÖИиN ®¿Kê…BþÇ­—’/ÕÆ/¿úÿåãÿõ¿ë÷?¹jø~oûÁ7×$ßtð¤:Dóó¾±1o®d~b–=ÁÀM>¿öÛü¿¿ÿ_ýu7ênÔ­à“•mÓ$ ¦²)&¶ºz04pp¹z*rÆzM endstream endobj 67 0 obj <>stream xœ35S0P0bSC3#…C®B ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠Æì>9ЋÙìÐtÀýÿÿßÚúÿÿöÿýýúõK–L²oà`hàrõTä;>Ê endstream endobj 64 0 obj <>stream xœ36S0P0VÐ5T06R01TH1ä*T0² (˜)ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶HŠGGÀôâÁ¨‡L>stream xœ3±P0P0RÐ5´T01U0¶TH1ä*T01Š(˜Z(é‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔΥSš›W ÔbgÇå颠yè¿Ú² ¦[<º¯_ï¯zWÿÛ¥ÿ[ïí¿íýïzÕÿ\ýß±¯÷—€x¶ëoý¿õoÜ~ï/›/ÛXº>*(kÒ‡I·9sÂ$¸\=¹þ‚E= endstream endobj 58 0 obj <>stream xœ31P0P0VÐ5T06W01TH1ä*T06Q ›)ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶°Ùa‚Ç~.¹&69!Þ—¬—ü=ë/ý¿”}ëJýŠÿÿÿùÿ¿£÷{ÝëÒÛÞyÛ½]°á0ˆ#: \®ž \ð§8– endstream endobj 55 0 obj <>stream xœ36U0P0bc#…C®Bcrô t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-©>“ÈÞ’»—EXmùº×wõ¯Ûq˜{áÿûÿßz  ƒ —«§B ¼ç4é endstream endobj 52 0 obj <>stream xœ3±P0P0RÐ5T01U0¶TH1ä*T01 (˜eô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQÐ<ô_mYÓ-ýµ¯÷WýÏÕÿûúï–ýoË×»ôë½ý·½ÿ] ÿø¶?ûö&.WO…@.Éf9 endstream endobj 338 0 obj <>stream xœ³0T0P0SÐ5T07Q0³TH1ä*T0³ (˜eô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[pŃw&Ï¦× âMhŽpI(Û’Åó6‘‰§Dø‚¿çK[õ%_æí›7ýÞô{ûö_ýÿWÀÂTþÿÿÿj«ïOHÝÿßïõk÷_ÏÛûw˶K·c·l“ŠÎÌ1˜&a0íDÃÂÄ®ƒ­mbÎ:rŽ+,8¸\=¹HQ‚ endstream endobj 335 0 obj <>stream xœ3³T0P0VÐ52Q03U05VH1ä*T03Š(˜›+ë‚$dr.—“'—¾§¯BIQi*—~8P—¾P—¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQÐd¬ÿ?9p.³Æ…u±ë¾Þzûowéë½e»¯gï-ÿõö:ºÐÇ·u×èˆøõu}Ô³_—¿\ÓÛúÚ;VÓÔSoÒ˲&î¤mfe`ärõT䯰S™ endstream endobj 332 0 obj <>stream xœ340T0P0bKc #…C®B K ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠­pͧÙ@FÆÒ”Ū©áO[l=ïüÛßþîÏ¿ýýÛ¿¿@øÿÛÿÿïïÿßÿÿ?ƒÁßz~ýõÿ¿é¸ôë˪Þâ„>LoŠstèèX°`iŠÔ.WO…@.zÞ]Ó endstream endobj 329 0 obj <>stream xœ33T0P0VÐ5T05T03SH1ä*T0± (˜™+ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶àà†ÓË×ÿEg-þOÙ$ñ |’2¾ ¢ÇM»õmÚÁÖGÛv݈ÈNL8Ëx€…ÁËÕS! 8øF¨ endstream endobj 326 0 obj <>stream xœ33S0P0UÐ5T03P0·PH1ä*T05 ¹– ¦z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-ÜÐ&­"¡ßÄÞ"×y„ŸC ß¡¹*|É}þ ¹ß_×þ‚·õÑq— ³›þ²téÒ¦qè43Yèy7KØ4;T|“»w¿ºöíÿêÿõ'ã9ìjíý_}ýäÕK_mŠöÞp醉؉İ£‰­Í¬ÍÜŠó=8¸\=¹NàSl endstream endobj 323 0 obj <>stream xœ³4Q0PaKCS…C®B s ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶H²]·åÁƒÌ,üÍ—ý9~Üp?öE8Cíɕڎq_¾ü›6ý¨¡ïÿ¯ñ¡ÿÄìàW‘Ö‰Õ¼@ƒ —«§B ´×R/ endstream endobj 253 0 obj <>stream xœ31W0P0b#cK…C®BmµT0Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp .}0éà¬`È¥ïmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠŠíì¸<]ÔvDÕÿ¿n#-¾ôeUÜ´KKQÀ‡îK~Ó½—^zYbø)k ƒ —«§B œ“5 endstream endobj 248 0 obj <>stream xœ37P0P0UÐ5T03¡C®BSK°™©‚©ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j bpd>(ÇÅÏ!`ð…Cú-‹ô¥|Ͻj_fƒ(%–êZ&Þ¯ÙkšóWx¶×ª¼_å{?ä|ç×ü«z¿îþÕÿÿø·÷¾ýÿ! îþA‘ÿÿW½º»ÿ{üîл[³·]»^p‹óõ6 Ï­w 9 c›9 ¶)û'ÌR7l“PØpC!šCLˆ£Gb>ã\æ†.WO…@.&•ge endstream endobj 245 0 obj <>stream xœ32U0P°PÐ52V"3 …C®BC¨‚¥¡‚…ž!HH&çr9yré{ú*”•¦ré‡Uqé{qé;8+)—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇåé¢pžó?6ð<àƒ—«§B 0ð2h endstream endobj 210 0 obj <>stream xœ31W0P0RÐ52T01Q0¶TH1ä*T01Š(˜¥ô A’@29—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨­¸¢Ôkþurh¶ò!–ôºÿKïï¿ýÿÛ´ÿ¿3ëïïŠÿþnúïúëëîý÷úhþßü¿õ/ë_Öí,Ê^þ+Fe¾èÖßÜÙ‰, \®ž \²…E endstream endobj 49 0 obj <>stream xœMŠ»@@ûóç ܽË-+±…„J!*” Âï{u’©f&64TjF›ÐZΊ6æ§5zSåœVû¹@ú÷Ôt¢-©?(̈àyß×TÝŒ ³ endstream endobj 46 0 obj <>stream xœ32U0P0aC3C…C®BCK ßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g åmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ô¨(|ùÿÿÛ†CÇÿÿÿÓ¿©ãÿÉóµÿQŸŠÁ}F.WO…@.“":Ð endstream endobj 42 0 obj <>stream xœ31U0P°bcs3C…C®B#K ßĵÐ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g åmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]Ôì,ذëaÁNƒÇ³*\ÿ;xÈ.¤`~€…ÁËÕS! ïÛ>‰ endstream endobj 39 0 obj <>stream xœ3µP0P0bSS3c…C®BSC ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-šÙ6ãÿäà÷ÿ!àŸ“ü!ö‡ìåÔ_×M®›~´Öüúÿøÿ_ÿ£?¾Î ‡ë04pp¹z*r<ßHÆ endstream endobj 36 0 obj <>stream xœ33R0P0bSs3#…C®BSc ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠”8ÿS–"TýTð“g÷ÿÿ—þÿÿ[ÿÿúïÿñññÜkÄ”ö7p04p¹z*r > endstream endobj 33 0 obj <>stream xœ3·P0P0VÐ5T07W03RH1ä*T07 (˜+ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠špÅÑÙ@FfV‹bÓÃæoä¿¿ýÿöÿ÷ÿàßþ/û¿ìÛ£°W_±×¢õ`½bûÃö‡ûóßßB‚ý@|Pÿò÷ïÿ¿]úßÉÁqéFbÁÑÄVµ" ,\®ž \Æ¢S© endstream endobj 30 0 obj <>stream xœ3²T0P0b#C…C®BC ßÄ5×3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶,ç!ûòå⟲¦]»&ñÿÿÿÉ{¾|yôÏ7èÖ­Ã\ L\®ž \à . endstream endobj 26 0 obj <>stream xœ31W0P0RÐ5T01S05SH1ä*T01 (˜š+éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶¢™w†E;Ÿoð{Õ#J6Òß¿ýýûïïÿÿÿÿÖí­­ÕgÙ±n×ë}?ôÜ__¿¿þ?œ¼ÿòÿÿ÷Sƒ×wu[rUýÛF †.WO…@.HsIk endstream endobj 23 0 obj <>stream xœ31W0P0bS3…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶óBðâ[Uÿß¹æþàmáx±mã}µÕ±6 ,\®ž \!‰L0 endstream endobj 20 0 obj <>stream xœ3µP0P0QÐ5T05U01TH1ä*T05 …Lô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÈq‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]ÔÍl;l$ɲúÿ“+O8ÜÞÿG¿þÿ_÷úæ;Á#Y¼o ¦ó8=l=Øj,ÂàÀÂåê©ÈX@Î endstream endobj 17 0 obj <>stream xœ³´P0P0bK3#…C®BKC ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº((2]ߪ¶Ð8Àÿsæâìÿ¿3ëÿo›¦þ¿]úÿß­x…,¤¥€Ô$©ß¢@Åñÿ·‰³cü|â3ÿ»†Á…ËÕS! |ðg endstream endobj 13 0 obj <>stream xœ33P0P0QÐ5T05¡C®BSC°©™‚‰ž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+9.ц\±\únúÎÎn@n€¾7P7—¾s~Nin^1P‹—§‹‚Ú X< ”9l>t¤È5±}®ò}i7¹êÞä¿/ë~Ýÿÿ²¾öŸ}ÿ\æðÿj«ÿßûÿDªèþµ¯ÛöGgo›v+šGµMÂ;á Ž!7obÓ %&.WO…@.U§A, endstream endobj 9 0 obj <>stream xœ33S0P0QÐ5T03T05UH1ä*T05 (˜š)˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶`Áx…Éü_ò=÷ª}™ýòëÞüå×þ_ûUÿuÿÿÖÿ`rèúÿ÷vÇ_ÿíÒÿ\Ý×¹º[¶]º‘¨Û̲ሎÁ†„M¼‡8¸\=¹H endstream endobj 368 0 obj <>stream xœ31W0P0bSS3…C®Bc ßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶b”ëµÕ‹ÿƒÀ‰Å¶uÿ}ÿÄùoúÒ—Uqbýò×G?õ~­µ÷ýr?üòïºûÿîoÿ>Å@p%wÜ¿%WÕ8¸\=¹IŒGQ endstream endobj 365 0 obj <>stream xœ3³T0P0b3c3#…C®B3rõ t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº((=¸#ci*2G‚?C¢NúÃýío×Ýßþû÷÷@øÿÝÿÿÿïÿƒ×ÿÿýõÿõõÿë½ÿ{_úúe¯¾÷!îCQ M+448¸\=¹€\Le endstream endobj 362 0 obj <>stream xœ33T0P0bSssS…C®BS ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶p–ŸÄò_ÿvÇí­Õÿ«¿>ÞûõõKÿ/ýúúe8íN‰ù“C6IÅþƒŸLO¾|ùÿmÛ&.WO…@.yÀM endstream endobj 359 0 obj <>stream xœ33T0P0bSSsc…C®BS˜ˆk¢g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ @ŽK´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[ÑÉÌÄ'c½ÓÔ_ù“ä‰ù÷oûû÷ßßÿ pý5^úúazËžæ×G vÄØÉ×~~pǾž÷wÝýý÷÷ÿÿ]Tõõëÿõë—¾~YÏ™ÊäêÔª¶B„Á…ËÕS! 35RÀ endstream endobj 356 0 obj <>stream xœ35S0P0UÐ5T05P03UH1ä*T01 ¹f ¦z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-8è`ÈÜäÄÏa+ÙÂÏ!`¾ä¾ÿ’ûû¦þ_ýÿþÿúzÞêuR^'®ÏÌ1Ù‘™ãtëF4>݇y—}hâ}Éö¥ù˽…@â>Ÿ¹õï¯|ÿ¾Ûv}˶K7u›Y¶ióèl8tBÏ…Á…ËÕS! ±~O§ endstream endobj 353 0 obj <>stream xœ35S0P0UÐ5T05P03UH1ä*T01 ¹f ¦z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-X0Ǧ­êCó!~Ž Ú~8ÆMˆUù2=~½÷õÿžë³sþÛú_éò!v Ƕ2Òw,û½ìõí_ûÿ]ÿ¯¶úÿÿ¿ÿ½¿ÿ¿dÿíu—n¯Ý²íP´hÛ†C‡¹Ùüx8¸\=¹i/O¡ endstream endobj 304 0 obj <>stream xœ31W0P0TÐ5T01U05SH1ä*T01 (˜š+êä€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶âŠ ëòÿj+M'=’²þ üŽÿ¾þwì–ý·½·ÞHÔíºuëÖan †.WO…@.JÿG endstream endobj 301 0 obj <>stream xœ35V0PaKS…C®B3 ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶óÐ|‘„Æ6ê‹ß¾PøÒzé¯_ñÂo½\Ÿ}|ýÿ×ÿ‘Á?…ä? ,\®ž \u­>¡ endstream endobj 280 0 obj <>stream xœ31W0P0bSS3…C®B ßÄ5Ô3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶b‰Þ5ë,ß°ý'†õ.nÿÿÿßõïëÿÿŽÿ#ßÖÿ¿·ëÿÿ² ȸ±þÿÿ[ÿÿ®?þNñ4=ü/6_m¥é.WO…@.EYy endstream endobj 277 0 obj <>stream xœ35S0P0UÐ5T05P03UH1ä*T01 ¹f ¦z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-Ø© Ѥ̨ÈÞ"×s¤ÂaFçþZ¶ûü×~ÿ‚[ßVg®­ºY'¸üÑãoŸ ç&Q‘ß¾ï~ýö¿ÿõw8~ùßýoÜ’«úKv}Šf›v°)Z`Ã5‰ˆ„MJ L\®ž \ׇJ¤ endstream endobj 274 0 obj <>stream xœ33R0P0QÐ5T0µT01UH1ä*T05 …ÍLô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[$Åvر§Ýÿÿµ¥ ŽÒûÿc€ûý½ÿVuK¡ÈÃ}Þc vd7³š08°p¹z*r^@ endstream endobj 271 0 obj <>stream xœ35S0P0a3S…C®BÌ5Õ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶`§ƒ â±Dö9*[&¶/ÂUŽ{ãÛkÌ{wÿÞÿgÖÒ[o ¿®ÿº>**~Á–]—.]ˆŠŠâövÌHzY²ËÛ1lúÒ—Uœ%Ó/]-½fõA‰ËÕS! *ÇB‰ endstream endobj 298 0 obj <>stream xœ33T0P0WÐ5T05Q05VH1ä*T01 €DÌõ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[8gG“ió!~[ 8ö…Cú‚ã^yÏ}{Õþ~Ù·þ~üú7yÿú7'Oýÿ¾îÛ “ôåù÷ssLvÇ6sæH¨nŒŽÈÎæÑ1ˆäíhà`hàrõTäŒq> endstream endobj 295 0 obj <>stream xœ31W0P0VÐ52P01W01PH1ä*T01Š(˜¥ô A’@29—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-xÖ4[H ó!ûC{ÿ _bYä[ä=¿ì›ïùÿõ÷þõÿÿÿû›rµîìþë¹ÙÛvóèßÄ[¶·õaëƒCÿƒÁ'.–ºù[?02p¹z*r1|Fá endstream endobj 238 0 obj <>stream xœ37T0P0UÐ5R03U03QH1ä*T03PA33S=C HÎåròäÒ÷ôU()*MåÒ*âÒ÷ªáÒw pV0äÒw‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j §øqO×dûºŽÃžcŽÛ.ÓCæ/Ô®s²Ùª_ªÕ÷üU[«þßóÿ¥ú¯¿þ~ýÿaÿÿÿŸ$½N®úý“W¥"»þßßÿß@ðïþ¿ûsËþn=Ì+ñ;ÓN"Qý¦Cç‡#ê[,y`apàrõTänJRD endstream endobj 203 0 obj <>stream xœ36U0P°TÐ52R0²T0³PH1ä*T02PAK Ò3IÉä\.'O.}O_…’¢ÒT.ýp *.} ".}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶Àm l½t鯮þ¥¿ú××Öƒà¯ëÿÿÿêÿ“Cßÿÿÿýýÿ:üþwÿí¿{÷ß¾}????«§B Q×G- endstream endobj 200 0 obj <>stream xœ31W0P0bS3…C®BC ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§g Ç%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨­‰ÿ”µSOqóþÿ@pëãÿÿŸäþÚÿÿßÿÿÿÏû¡"¬ï/ƒdÿO ²ó jà`hàrõTäT A± endstream endobj 197 0 obj <>stream xœ31W0P04UеP0¶P03VH1ä*T02Š(˜¥ô ’@"9—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYH¹DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.OµN—[×êê².]ºôÚ´é/K×G}ý„ÿeëÿÿ¿3kýÿjü¾¿º~ûö{@pøöí=¶+8¸\=¹ÑP?j endstream endobj 194 0 obj <>stream xœ31W0P0VеP02W03VH1ä*T02 (˜*ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\ž. j+]?emb)ÿ |j⟲€‰AËÕS! ™ñ5½ endstream endobj 191 0 obj <>stream xœ31W0P0´TеP01V03VH1ä*T02Š(˜¥ô ’@"9—ËÉ“KßÓW¡¤¨4•K?¨ŠKߨˆKß)ÀYH¹DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.Oµ•®_mXêÿ#ƒŸóÕV:°08p¹z*r¹^-# endstream endobj 188 0 obj <>stream xœ31W0P0QÐ5T01R05WH1ä*T0¶ (˜Z(˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶°ÙàˆÂ‡æË—/_\hË"ýòËìKù˯ýªÿ2ûÿ_µÿÿ,ûWšFýÿw½êÿÖ{»ã¿]úŸ«»ewl›Ðµk×®1Øp¨ƒ¡ËÕS! >IO endstream endobj 185 0 obj <>stream xœ31W0P0bS3…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶bëµÕ¿ÿ‚Ÿ2þ¨?´ÓÿÉ3ŸóWþúå¯ÿÿÛÿhZj-ºürȬ†.WO…@.ÎD2 endstream endobj 182 0 obj <>stream xœ31W0P0bScK…C®B ßÄ5Ô3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶âŠ`ÙÆûj«cíü9ÄÏÿ[¾þÿÿ¿[ötÏ_þ«þÿ¿[¥Ÿ»öÿ_ÿ¿þúû½Uÿëÿÿ÷ÿ¿î¸èõ÷ÿý·\ap`árõTäšÕC7 endstream endobj 179 0 obj <>stream xœ3±P0P0b3cK…C®BS ßÄ5Ô3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶âš€þÿ“²“§XsWD_/Ý6íeîõÌÜu/s—ÞÍ ûýöûºõ%÷¦~¹7ùÕ½©/Í/ɇÑ×>øZ´ úIÿcP`ârõTäÝÂ@) endstream endobj 176 0 obj <>stream xœ35Q0P0VÐ5T05V01SH1ä*T05PAsc=C HÎåròäÒ÷ôU()*MåÒ*âÒ÷ªáÒw pV0äÒw‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ô69hLXdÐ|ˆß­‘ùï·{³ë×ÿû¶:N"ÎþÿéŽzþ¬E¾s¼Pç_°Ga¯þúøuvûÿÖ]ó Žw|cR(òpo›PEÒn ÇΘ20r¹z*rQA/ endstream endobj 173 0 obj <>stream xœ31Q0P0RÐ5T06W03VH1ä*T06 (˜™(éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶°9aÿÿ¿õÿã¯ý[z»ÅaãµES˜þÃÁŸöý êßîµÿc·l»t㛘ÔÁVF.WO…@.I]A¼ endstream endobj 170 0 obj <>stream xœ35T0P0VÐ5T01W01SH1ä*T01 €DŒõ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[àèäx,‘½å‹‡ù‡{“«|_š/}u?níÿõ׿ߩ—Waÿiÿþû'Éòü×yÛ®çênÙ&ápPÇ0"1±uÂ9.WO…@.Vj;í endstream endobj 167 0 obj <>stream xœ33R0P0bSK3K…C®BSS ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶HŠmÅÿ'Wvÿ‡‚Ÿ\õ,ò-ò þ(?ùËTï¹}ׯüõÿöÿýtú¥FäÿÀÄ Àåê©ÈŸÔL• endstream endobj 346 0 obj <>stream xœ36Q0PÐ5SÐ52P02S07PH1ä*T06 (XåLõ,A²z† ɹ\Nž\úž¾ %E¥©\úá@e\ú@U\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAmÁ‡‡øýý¿üÿwýmnbkÿÿÿ=Ùýÿ’âØÿ|.÷_Þý²>êªçª¥[„n´nm“´°`hààrõT䜒F% endstream endobj 261 0 obj <>stream xœ31W0P0U0Q01T05TH1ä*T06Š(˜˜+˜ê*ëY*$çr9yré{ú*”•¦ré‡Õpé{•pé;8+ré»DrÄré»é;;»¹66úÞ º@çüœÒܼb ;;.Oµ×Ä„•¶.mÙ"&t!ÂÛ1Q—‰)Ê%3kù†÷®æç}ccŽÄÜÎ_‘ÍëÀÂàÀåê©È¡44Ø endstream endobj 164 0 obj <>stream xœ³°P0P0b c3 …C®BsK ßÄ5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠ä0ÿ¿ÚBŽ„kΜÿ1@ÿÿÿ®ÇÿÿÿH ‹’ãþÿ  \®ž \E»N endstream endobj 160 0 obj <>stream xœ3³P0P0RÐ5R03U03RH1ä*T03 (˜™(éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQPdtÿ”åÒ©^Ö̵;»êÿÖ{»¿{ÿ»^õ?Wÿ7˜ñþ®þïØ×·ì‡0ö—ì[¾þÛ¥ÿ`ƺ¿—þ÷gÛ„û˜¸\=¹ŽKü endstream endobj 157 0 obj <>stream xœ31W0P0b…C®BßÄ5Ò3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶pÁ¹ &>õ–G?M]mzù/×ÖÚÇÿÿúüô<*6ÿϬ%WX¸\=¹µá:Û endstream endobj 154 0 obj <>stream xœ37Q0P0WÐ5T07Q01PH1ä*T03 (˜õ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYH¹DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j‹-øjÄíÄšYäzß(·I¸óØÍv4kÊey¡þÚëÒÞ¤-ûvü_õÕkßþ_ë_íø›µäŠëÿ«×džÿµëëÕúõk³Wè­Úÿ?4ê+Pèß–iû¿FÅÿ_7m÷Ò«†&Œ \®ž \`«Oï endstream endobj 151 0 obj <>stream xœ33V0P0b33#…C®BSK ßÄ5Õ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶°IM˜ýð ó™lê÷Íþýýú«ÿ÷öMÿ¿¶dÿ߬éÞ/k³¦;ê;Vx8²üüpŽmôËýù·¯¿ÜÿÿÚ¯ÿÿ£^ÖÿºZõWß;~É^Ý ÓYWxk¬RôX¡Á ÀÈåê©È^ÊM endstream endobj 148 0 obj <>stream xœ31S0P°TÐ5T01S01PH1ä*T06 (˜*Xêå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ô|PáøPÆ,&QíPUàK»©™vÓÿMÍþújTü¿]×ãÿm¼Z¿Þaõÿxï¨É¡ÿCßf—þ•~½mzt"ËËÄ®¤ ‡xX¸\=¹>ú endstream endobj 145 0 obj <>stream xœ%Š»@@ûóç ܽ+l´‰-$T Q¡Tj?.ñÌL2Í„–†ŽêhZËQ±¼5] Ô8H8ÌH=ÄWÜÖ}‚´Ï)AÒ:£BòNazøœÇuþ^Ÿ(<ÜÈ7: endstream endobj 142 0 obj <>stream xœ31S0P0WÐ5R0±T03TH1ä*T01 (˜+˜ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQP[ó#ÂáCoÂìKùž{µ/Õ­÷¾þbö¯ï«_ýÛ·ý«­«^ÿ­_z}Ýô/“~ÅGÝæT=¢²á·È®CQÜÞÞº¬-[Ä¢"33nüâ´Õºô·d¯Ê®¯ÞnóÏ5t»KZüeÓ^p%7 ;›‹A‰ËÕS! ™†Qn endstream endobj 138 0 obj <>stream xœ36W0P04VÐ52R01S0³PH1ä*T06 (X‚äô A²@29—ËÉ“KßÓW¡¤¨4•K?¨ŒKߨŠKß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-¸ÜºtÁ–-[¶^‚ëÞkuKö{¯â/ûã¶¾þú:¿þÛ&þÿÓþÿÿÉÕúÿÿóÿû_÷ýïþÛ·ï1(0q¹z*ršbJd endstream endobj 135 0 obj <>stream xœ33W0P0VÐ5R03S03RH1ä*T03 (˜™(ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQPJœåzà€¥©È¹ æÛßþ®»¿ýÿýý÷ÿÁߪ¿µU¿âš¾ìQØÓ¦yD<æŒÿaþÃ@ßßþ RñDüoýþýÿßÌíš»Þ.Ý6eVÓŽ5Œ \®ž \TÙU‘ endstream endobj 132 0 obj <>stream xœ37V0P0bs c…C®B33 Ì5Ñ3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶‹1¤þSVŒý8øÉîÞÄþ_ü¸ß¹ßÑüe½ï¯xÑ/÷ÿÖýÿÿoýlàÈt‘F¶ÿÿ˜¸\=¹\¤TË endstream endobj 129 0 obj <>stream xœ3·T0P0bsc #…C®B3˜ˆk¢g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAµqê?_ç¹ÎÙÿ±‚ WÏÿÿ[[ÿÿÿ¯ÿÿ×ÿÛ·ÿüˆgýÑõ¿ƒ¡ËÕS! ÆÛLi endstream endobj 126 0 obj <>stream xœ³´P0P0QÐ5T°4W°0RH1ä*T°4 (X+˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠ո%Ì9dis„EQG)/ãO¦¯‰?òoûûïïþÿÿþÿöýõëë¯/{õ½Å Ä9»Ö8=ØcWÊÆü¢xþÿüÿõûÁŠßƒI…#µËÿïÿúöúÿmÕ˜­½[6M\#59À&`ƒ—«§B |Îe endstream endobj 123 0 obj <>stream xœ36W0P04Ff ¦Æ )†\… †f  ×Ð@ÏPA×@ÏÀ,L’s¹œ<¹ô=}JŠJS¹ôÃj¹ô=€J¹ôœ ¹ô]¢ ¹ b¹ôÝôÝ€Ü}o] Œs~Nin^1P‹—§‹‚Ú²Š‡ìË—¬W[YwíšDÄxò›ÃÖÖ¾û§©÷·m5p04p¹z*r 41 endstream endobj 119 0 obj <>stream xœ33T0P0VÐ5T03P07VH1ä*T05 ¹& Æz†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨­hd‹hnÞQ®¶òIã—ù‡ëäoÿöÿûïïÿàúëëÿ½¯_ú°Oèƒw×ëuâµßÏ7ïgÿpûû÷ßßÿ‡‚îó—©úÒ)F¯ôl×ߺ59dÖƒL \®ž \–çY€ endstream endobj 116 0 obj <>stream xœ33T0P0bSssc…C®BS ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶q…Àµ’Ë—÷ÿ¿µvÙ&•éÿcw}½½JÜ­^{BÜøuí¯ûÙ_þûÑüXíï—òÿªý¿ºo}ø«¯u¨D¾Ö·5Qeó_®4õ\ÁÐÀÁåê©È5[8 endstream endobj 288 0 obj <>stream xœ33R0P0SÐ5T05U0³TH1ä*T0± (˜eô r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[°ÓA›%¸õAsŒÂuÇu]Lü†ë&Ôª_â¿üêoÝ¿¿ÿþϯýf”5_óàb…ÃZ' nN0H:ø¡ºš??Ÿ÷áóæ'&*'Ä9'œ•œ}½Æ¼z6¯îßßÿÖÿŽ^½:"Ó±eÉŽPû®‡€01‰£ƒ¡ËÕS! Å*Rì endstream endobj 231 0 obj <>stream xœ35P0P0bs3…C®B3(k¨g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEAmÁ †,ü,5á šù9îMˆUù2=~}ü²½ëåÿƒ€âüEö“ý™åëëÿc_.ŸðqÿÇ ÀÄåê©ÈcÃIR endstream endobj 113 0 obj <>stream xœ37V0P0QÐ5T0³T°0VH1ä*T03 (X˜(˜èå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶`M€NÛÂúÿÚ®í¨ÿ'ÌÝ'(¤7ñâ?dÕ%¿Àáø‚æ—v“èÕߪ¿Uÿ_ýÿ¢úϬõÿÿþþÿÿý]oׯ»õvÝ-þÄ–Z¡‡{ ²=ÌÝÆ=áF§ƒ#ƒ—«§B (/]û endstream endobj 110 0 obj <>stream xœ35R0P0QÐ5T01W03PH1ä*T01 (˜õ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYH¹DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j î\°iMdoÉÐ>ÄaÞ"\å°ËóÕ®ø¸}ûãÖVGõ]ÿ²’ ?ç‹ ¿Hwíݵw×ïÿ«ÿÊÚÿÿÿýÿkÿý}}=oûºK·½[6Mlmã™#Î ÀÈåê©ÈD¨If endstream endobj 107 0 obj <>stream xœ31W0P0UÐ5T01T05WH1ä*T06 …-Lõ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷êæÒwÎÏ)ÍÍ+j±³ãòtQP[8猇B…ãCÛ’/±L¼/T/}Ù·WmWvà븭ÿ: ÿL”(l‘U_.nÅÙ"Ýr×ÖüËßûŸ²öÿÿû=>ö÷úÌ\ ZºáÐÇèèˆÄÄÖ6.WO…@.únCÅ endstream endobj 104 0 obj <>stream xœ35R0P0b 3…C®BS ßÄ5Ö3TÐ5Ð3° S…ä\.'O.}O_…’¢ÒT.ýp R.} J.}§gC.}—hC.ƒX.}7}gg7 7ÀÆFß[A(㜟Sš›W ÔbgÇå颠¶àRÿº]¯½^ÿzÝ.‹½UqÓ×__ú²ê/ˆ±ôë˪¸ýqÓ—¾~Y äË ˜?¹Â#Âùì04pp¹z*r9þA endstream endobj 101 0 obj <>stream xœ31U0P0QÐ5R01P03TH1ä*T06 ¹Æ &z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{+èeœósJsóŠZìì¸<]ԖňˆWì‘äþþa×ëÖÓöÔÿ?Ýö,ò-‰¿X™ýhöË}ë—û¿÷ÿïÿççÚÄÿõ6`ýàj[þnzÝ­Ø¥Û¦öNl“Xc°!aƒ—«§B µ|IK endstream endobj 98 0 obj <>stream xœ35P0P0VÐ5T01W03VH1ä*T01Q ›™(ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶àREëáÿ'ÒÎ×þ‡‚OÜç²?”“¨P¸ß2ûËŒ/ó=ÿ_ª­Û[ÿÿu?Hþ§iüþ¿ÿþ^ÿ»õvìÎ’o‡îÝâræ}Ø&ô°#F"ø0ƒ#—«§B –Oq endstream endobj 95 0 obj <>stream xœ35U0P0RÐ5´T05R01PH1ä*T05PASK#=C$LÎåròäÒ÷ôU()*MåÒªâÒ÷*âÒw pV0äÒw‰6ä2ˆåÒwÓwvvrllô½Ú¹ôósJsóŠZìì¸<]Tþÿ”åʸáçÝÖ[ïc/½ÿzoÙîëÙp¢îeù¯÷1Õñ[ƒÑ¯¯ë#óv8^›uôÚÞÌlµ•ª—¢u»nD$:°08p¹z*r7ùG« endstream endobj 92 0 obj <>stream xœ³0P0P0bsc3#…C®Bs˜ˆk¬g¨ k g` ¦ ɹ\Nž\úž¾ %E¥©\úá@¥\ú@•\úNÎ †\ú.ц\±\únúÎÎn@n€¾·‚.PÆ9?§47¯¨ÅÎŽËÓEA¡!a%Û‚'Wy8ø¶?ÜÏû#ÿö·÷×ïÿ»ÿßßÿ¿ÿÿÿ÷ ®ÿÿÿõÿúëÿ¦ÿ›~}ýÒ—Þâ8+T¹DDš¸\=¹ K< endstream endobj 89 0 obj <>stream xœ31W0P0RÐ5T0¶T05PH1ä*T0 (˜*éå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³r‰6ä2ˆåÒwÓwvvrllô½º¹ôósJsóŠZìì¸<]Ôžm;Uÿ¦¨Šÿ™µtÂÞÿPðÏYü%¼¾tÛ“mÚß¶‰ID$:°08p¹z*r*=: endstream endobj 86 0 obj <>stream xœ35R0P0QÐ5T01W03PH1ä*T01 (˜õ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYH¹DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j v:è+^~È|ÈX¢ŠEú‚ï˸æüö—÷ÿÿ¿ýß¿«9ªÇö{¯ÕÕems4}=åáyÛöí÷îW×ÿ´Þáø¡ùŸþÿ×/S®f¯ºá½+šW·™C·ë07·b‹ ƒ—«§B ð2Gk endstream endobj 83 0 obj <>stream xœ37U0P0bs#…C®Bsrô t ô ,ÀÂT!9—ËÉ“KßÓW¡¤¨4•K?¨”Kߨ’Kß)ÀYÁKß%ÚË –KßMßÙÙ È °±Ñ÷VÐÊ8çç”ææµØÙqyº(¨-¶Qœa&!ápˆ½%g†Ûɇ,Ò wfÍeÍо«v)¿êõãäüUÿ­ÿ¿ê?vð岟º³OïÿŒ \®ž \ªFKŒ endstream endobj 80 0 obj <>stream xœ35R0P0QÐ5T01W03PH1ä*T01 (˜õ r@"9—ËÉ“KßÓW¡¤¨4•K?¨ˆKߨ†Kß)ÀYH¹DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. j v:è³··È Îh|!ïh¾äÞÚ/¿îïÿUÿ÷ïß?&;ê³7\zxWwÃtmb÷î>\c£Þ’¶‹Ã|‰ô¥Z…{ ¿4WÕÉ$^¾÷ïøÉU—nÛ T;í$£˜Dk›˜D$ ƒ#—«§B È6Là endstream endobj 77 0 obj <>stream xœ31T0P0VÐ5T06W01RH1ä*T06 (˜+ëå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï ÔͥSš›W ÔbgÇå颠¶Ðó·ò=/5êŽì—jÕ_>þþûýÆvSF–«B?Tó'¾}¸Ç¼ý„Å™¶†97rîîßý{mÞÚÄ¥>stream xœ31W0P0UÐ5T01P01TH1ä*T06 ¹F ¦z†@9 ‘œËåäÉ¥ïé«PRTšÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïìì䨨è{usé;çç”ææµØÙqyº(¨-xÖø½ENøòå‹–¶,¼_~qî_ýòë¯Ç^˯|p¶(kÿ½›¼Ó_Þþ¶M*š·"Q·?›GwÁ†„L \®ž \¹9I endstream endobj 71 0 obj <>stream xœ31U0P0UÐ5R01V03RH1ä*T0¶ (˜™(˜êå€Dr.—“'—¾§¯BIQi*—~8P—¾P —¾S€³‚!—¾K´!—A,—¾›¾³³`c£ï­  ”qÎÏ)ÍÍ+j±³ãòtQPÛYpé>ÿÄ€û³¯ÇH«ò¾ôëk—÷Ú’…a»¢b³—þŠ_úëëú××öÿúÿúú¿ýÿý‚×®08°p¹z*rÐÔA endstream endobj 68 0 obj <>stream xœ33U0P0RÐ5T03R0¶TH1ä*T03PA Œž!PH$çr9yré{ú*”•¦ré‡qé{Õpé;8+ré»DrÄré»é;;»¹66úÞ@Ý\úÎù9¥¹yÅ@-vv\ž. ¦›#öÿ™µÁÅ–±uìļËñ¥Ûÿ}ýþvUüß[ïºýÿý¶Üóõÿ÷[絛ÿŸ›«¿üÿß­[öÍÿ÷wë¥_õ¿¿i^úÿãÛ¬ÿ—íÿŸ¹‚¡ƒËÕS! €=N  endstream endobj 249 0 obj <> endobj 373 0 obj <> endobj 219 0 obj <> endobj 374 0 obj <> endobj 375 0 obj <>stream xœ]O1Â0 Üó ÿ )°T]ÊÒ„€¤ŽSe¨¥éÀï!iËÀp–Îw'Ÿe×_zv ä=z|RëØDšý‘` Ñ±¨`¦•‰“BvW^ï@ð5]ùMO$õùXVÕBoh)jI4Jµµ­ 6Òìæ<ÕmRÊÿ®äh.±ß\b$N¥ii’ 8¦ß3Á‡œ‚/Ä?ˆSc endstream endobj 163 0 obj <>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 45/LastChar 122/Widths[ 37 31 0 56 56 56 56 56 56 56 0 56 0 0 0 0 0 0 0 0 0 80 81 0 0 0 0 88 42 0 0 67 0 0 84 0 0 0 62 78 86 0 0 0 0 0 0 0 0 0 0 0 54 0 50 62 51 34 56 62 32 34 0 32 94 62 56 62 0 46 44 44 62 59 81 0 59 50] /Subtype/Type3>> endobj 376 0 obj <> endobj 377 0 obj <>stream xœ]O1ƒ0 Üó ÿ ¡•Ê‚XèÂЪjûà8(NÂÐß—èÐá,ïN>Ë®¿öìÈGôø¢Ö±‰4û%"Á@£cQÀ8L;+'„ìn:¼?`5Ýø]O$Ÿçº.«j ¡745$¥ÚÆÚV›?i vw^ÎmRÊÿ¡äh.qÜ\b$N¥ii’ 8¦ß3Á‡œ‚â @ÄSe endstream endobj 141 0 obj <>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 40/LastChar 118/Widths[ 37 37 0 0 0 32 0 0 46 0 46 0 0 0 0 46 0 46 0 0 0 0 0 0 0 0 63 0 68 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 41 0 41 0 0 0 28 28 0 0 74 51 0 0 0 0 0 0 0 41] /Subtype/Type3>> endobj 378 0 obj <> endobj 379 0 obj <>stream xœ]O1Â0 Üó ÿ )•@HU—²t!à©ãTêDi:ð{HÚ20œ¥óÝÉgÙõ—ž]yŸ”À:6‘f¿D$ht,ª‡ice⤃ÝU‡×;| dW~ÓÉG}:—Uµ†ÐšƒFŠšGRmcm+ˆÍŸ´»9u[ ”2Å¿+9šKì7—‰SiZšäŽé÷Lð!§à ñBSg endstream endobj 122 0 obj <>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 52/LastChar 118/Widths[ 61 0 61 0 0 0 0 0 0 0 0 0 0 0 61 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 61 61 61 0 0 0 61 0 0 0 0 0 0 0 0 61 0 61 0 61 0 0 0 61 0 0 61 61 0 0 61 0 61 61 61 0 61] /Subtype/Type3>> endobj 380 0 obj <> endobj 381 0 obj <>stream xœ]OAƒ ¼ó ~¨m<.öâÁ¦iû„Åpâ¡¿/ öÐÃl2»3“YÒ·ÁšˆÉ#8ù‚ˆµ±*Àê¶ O0‹X…•‘ñ`eÊExDúQø÷ÇNÐ;¿‹ȳnYY±Ý$‚Õ AØPG)ï´æ¬ú;Õ»aÒ‡²IÊ JiËQwQ¼ b´IôZó‚tU%íôåà\ñl„åØXþ(=s=cá÷ªw>»pú,YÛ endstream endobj 44 0 obj <>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 27/LastChar 122/Widths[ 53 50 50 0 0 0 0 45 0 0 0 0 25 35 35 0 70 25 30 25 45 45 45 45 45 45 45 45 45 45 45 25 25 0 0 0 0 70 68 64 65 69 61 59 71 68 33 0 0 56 83 68 70 61 0 67 50 65 68 68 0 68 68 55 25 0 25 0 0 0 45 50 40 50 40 28 45 50 25 28 48 25 75 50 45 50 48 35 36 35 50 48 65 48 48 40] /Subtype/Type3>> endobj 382 0 obj <> endobj 383 0 obj <>stream xœ]1Â0 E÷œ"7HÚb¨²”¥H§Ê€¥éÀíiÒ–á[²ý¿õ,ºþÒ“K\Ü£‡'&n™ˆ“Ÿ# ptĪšiëJ…·LtW^Ÿ€|1 ]û›~£x4禌ª5Þà4`Ô4"k¥T­µŠ!™¿U½»9FÕ•<(ÖžU$¥4%¾ó¥Ì´#p˜cDJ¼€eGøû-øS|û³½VÔ endstream endobj 29 0 obj <>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 33/LastChar 124/Widths[ 47 47 47 0 0 0 47 47 47 47 0 47 47 47 47 47 47 47 47 47 0 47 47 47 0 47 47 47 47 47 47 0 47 47 47 47 47 47 0 47 47 0 0 47 47 47 0 47 0 47 47 47 47 0 0 47 0 0 47 0 47 0 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 0 47] /Subtype/Type3>> endobj 384 0 obj <> endobj 385 0 obj <>stream xœ]O1Â0 Üó ÿ )ˆ¡êR– | uœ*C(M~I[†³t¾;ù,»þÒ³K ïÑã“XÇ&Òì—ˆŽEuã0m¬Lœt²»êðz‚¯ìÊoz"ù¨ÏDzªÖzCsÐHQóH¢Qªm¬m±ù“¶À`7ç©n ”R¦øw%Gs‰ý&à#q*MK“\À1ýž >ä|!>@'Sd endstream endobj 16 0 obj <>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 46/LastChar 121/Widths[ 29 52 0 52 52 52 52 0 52 0 52 0 29 0 0 0 0 0 0 0 74 0 80 0 0 0 0 0 0 0 62 98 0 0 0 0 78 0 0 0 0 0 78 0 0 0 0 0 0 0 0 50 0 46 58 47 0 52 58 29 0 0 29 87 0 52 58 0 43 41 40 58 55 0 0 55] /Subtype/Type3>> endobj 386 0 obj <> endobj 387 0 obj <>stream xœ]O1Â0 Üó ÿ )•€¡êR– | uœ*C(M~I[†³t¾;ù,»þÒ³K ïÑã“XÇ&Òì—ˆŽEuã0m¬Lœt²»êðz‚¯ìÊoz"ù¨Ï§²ªÖzCsÐHQóH¢Qªm¬m±ù“¶À`7ç±n ”R¦øw%Gs‰ý&à#q*MK“\À1ýž >ä|!>AcSf endstream endobj 11 0 obj <>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 46/LastChar 121/Widths[ 37 66 0 66 66 66 66 0 66 0 0 0 37 0 0 0 0 0 0 0 93 95 101 0 0 0 0 0 0 0 79 125 0 0 0 0 98 0 0 0 0 0 99 0 0 0 0 0 0 0 0 66 0 58 73 60 0 66 73 36 0 0 36 110 73 66 73 0 53 52 51 73 69 0 0 69] /Subtype/Type3>> endobj 388 0 obj <> endobj 250 0 obj <> endobj 371 0 obj <>stream xœeNMKAi-­ûA©têE)¢!(ÚK‡è$º” »±»FÊe]eTV“QO%FXô ¤›Ðµ{ЈQ0£c‡ï=x؆„Ð丕å_:Og ¢s wvéë0fÌÚžèø´µ>e­NXK“€p{ï$(ž_IÑÓ3-ÑÊÚšâ¼ ‡Ä…”3>R"†Äp”W®–P Cû¿ íó2/]ð‘¿å ?O(¼„81ÂK€ÙØ\`øÀ° ?½÷!wœ}f´ "÷ôå~R‹éø©áªK&&¢•ÕLë7Þ^«[S”“œ¼5ˆA†»ªçq;H¹Lˆn&‹¾^ÝÊ ÿo´.]ļ5qWR¦jöZVÍ}SÊâ v¨š¦jfº¦ûh½›ë p­i¬yÔ²F y\ªz}èjü ¿¾ëðÍÕ”‚ ˂ЛÍF£éu&ê­z÷‘êH7DìÏcãÞ1›ÿŽ}(²,?ƨ endstream endobj 220 0 obj <> endobj 372 0 obj <>stream xœcd`ab`dddwö Ž441U~H3þaú!ËÜÝýËéGk7s7Ë’ïÇ„¾; ~·åÿn)ÀÀÂÈèæêœ_PY”™žQ¢ á¬©`hii®à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–Tê)8æä(t+¥§•¥¦@¬vÎÏ-(-I-RðÍOI-ÊK,*Ê/ÍÀÀÀįÈÀPÂØÅÀÌÈȤ^Ç÷£ãð‚ïïç3þ!ÎüÃÿ{Ÿè7ãGJ¿ÍŒ”›|ùÎøàÉ9¾_5—|—Ýü]n>ãÏwß«DB²,º›9š&wLšÞ;±¿WnÖÚÕWÞïš>±·§{Ǥ־.¹Ð%’ž·OéœÐÐÍÑÒÜÑÔ¼ÆâZˆüß©l5•Ýåås»gÉó•.üi¿í·ÀöÍ\¸å¸XÌçópnžÅÃÃÀ®Y€D endstream endobj 389 0 obj <>stream UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 390 0000000000 65535 f 0000024024 00000 n 0000111576 00000 n 0000023868 00000 n 0000021714 00000 n 0000000015 00000 n 0000001978 00000 n 0000024090 00000 n 0000059108 00000 n 0000081839 00000 n 0000035522 00000 n 0000107882 00000 n 0000058862 00000 n 0000081569 00000 n 0000035238 00000 n 0000058642 00000 n 0000106700 00000 n 0000081311 00000 n 0000032157 00000 n 0000058371 00000 n 0000081076 00000 n 0000031946 00000 n 0000058117 00000 n 0000080809 00000 n 0000031705 00000 n 0000057900 00000 n 0000080543 00000 n 0000031441 00000 n 0000057656 00000 n 0000104825 00000 n 0000080315 00000 n 0000031157 00000 n 0000057402 00000 n 0000080036 00000 n 0000030893 00000 n 0000053044 00000 n 0000079802 00000 n 0000030669 00000 n 0000052746 00000 n 0000079560 00000 n 0000030435 00000 n 0000052545 00000 n 0000079339 00000 n 0000030272 00000 n 0000102937 00000 n 0000052318 00000 n 0000079116 00000 n 0000029979 00000 n 0000052076 00000 n 0000078955 00000 n 0000029769 00000 n 0000051823 00000 n 0000076011 00000 n 0000029533 00000 n 0000051589 00000 n 0000075781 00000 n 0000029302 00000 n 0000051315 00000 n 0000075530 00000 n 0000029034 00000 n 0000051075 00000 n 0000075264 00000 n 0000028800 00000 n 0000050821 00000 n 0000075003 00000 n 0000028521 00000 n 0000050535 00000 n 0000074772 00000 n 0000098584 00000 n 0000050296 00000 n 0000074478 00000 n 0000098333 00000 n 0000050023 00000 n 0000074196 00000 n 0000098080 00000 n 0000049787 00000 n 0000073959 00000 n 0000097816 00000 n 0000049559 00000 n 0000073726 00000 n 0000097523 00000 n 0000049286 00000 n 0000073431 00000 n 0000097269 00000 n 0000047269 00000 n 0000073172 00000 n 0000096984 00000 n 0000047013 00000 n 0000072913 00000 n 0000096752 00000 n 0000046794 00000 n 0000072686 00000 n 0000096486 00000 n 0000046520 00000 n 0000072471 00000 n 0000096227 00000 n 0000046283 00000 n 0000072187 00000 n 0000095956 00000 n 0000046038 00000 n 0000070165 00000 n 0000095679 00000 n 0000045828 00000 n 0000069875 00000 n 0000095423 00000 n 0000045563 00000 n 0000069612 00000 n 0000095148 00000 n 0000045308 00000 n 0000069337 00000 n 0000094868 00000 n 0000045080 00000 n 0000069069 00000 n 0000094577 00000 n 0000044835 00000 n 0000068857 00000 n 0000093743 00000 n 0000044579 00000 n 0000068638 00000 n 0000093462 00000 n 0000044297 00000 n 0000068374 00000 n 0000101942 00000 n 0000093228 00000 n 0000043974 00000 n 0000068101 00000 n 0000092924 00000 n 0000043690 00000 n 0000067830 00000 n 0000092686 00000 n 0000043457 00000 n 0000067498 00000 n 0000092436 00000 n 0000042998 00000 n 0000067201 00000 n 0000092154 00000 n 0000042734 00000 n 0000066985 00000 n 0000091897 00000 n 0000042487 00000 n 0000066734 00000 n 0000100973 00000 n 0000091589 00000 n 0000042219 00000 n 0000066463 00000 n 0000091424 00000 n 0000041930 00000 n 0000066180 00000 n 0000091161 00000 n 0000041676 00000 n 0000064949 00000 n 0000090871 00000 n 0000041410 00000 n 0000064688 00000 n 0000090576 00000 n 0000041155 00000 n 0000064436 00000 n 0000090341 00000 n 0000040934 00000 n 0000064137 00000 n 0000090081 00000 n 0000040712 00000 n 0000063936 00000 n 0000099627 00000 n 0000089852 00000 n 0000040479 00000 n 0000063630 00000 n 0000089111 00000 n 0000040287 00000 n 0000063419 00000 n 0000088850 00000 n 0000040048 00000 n 0000063181 00000 n 0000088608 00000 n 0000039815 00000 n 0000062936 00000 n 0000088328 00000 n 0000039559 00000 n 0000062665 00000 n 0000088067 00000 n 0000039340 00000 n 0000062455 00000 n 0000087807 00000 n 0000038148 00000 n 0000062236 00000 n 0000087563 00000 n 0000037931 00000 n 0000061947 00000 n 0000087295 00000 n 0000037700 00000 n 0000061698 00000 n 0000087085 00000 n 0000037477 00000 n 0000061476 00000 n 0000086875 00000 n 0000037277 00000 n 0000061211 00000 n 0000086630 00000 n 0000037031 00000 n 0000060695 00000 n 0000086389 00000 n 0000036795 00000 n 0000060434 00000 n 0000086140 00000 n 0000036550 00000 n 0000024131 00000 n 0000024162 00000 n 0000021876 00000 n 0000001998 00000 n 0000003666 00000 n 0000078688 00000 n 0000028262 00000 n 0000049084 00000 n 0000071927 00000 n 0000028050 00000 n 0000048807 00000 n 0000071667 00000 n 0000027798 00000 n 0000048554 00000 n 0000099105 00000 n 0000109578 00000 n 0000071406 00000 n 0000027580 00000 n 0000048314 00000 n 0000071156 00000 n 0000027321 00000 n 0000048055 00000 n 0000070956 00000 n 0000027078 00000 n 0000047818 00000 n 0000070687 00000 n 0000094327 00000 n 0000024267 00000 n 0000024298 00000 n 0000022042 00000 n 0000003688 00000 n 0000004609 00000 n 0000060953 00000 n 0000085843 00000 n 0000024355 00000 n 0000024386 00000 n 0000022208 00000 n 0000004630 00000 n 0000007049 00000 n 0000057137 00000 n 0000078489 00000 n 0000026878 00000 n 0000056914 00000 n 0000078149 00000 n 0000098855 00000 n 0000108863 00000 n 0000026647 00000 n 0000056692 00000 n 0000077921 00000 n 0000026395 00000 n 0000024430 00000 n 0000024461 00000 n 0000022374 00000 n 0000007071 00000 n 0000008653 00000 n 0000065944 00000 n 0000089610 00000 n 0000039101 00000 n 0000065705 00000 n 0000024518 00000 n 0000024549 00000 n 0000022540 00000 n 0000008675 00000 n 0000010326 00000 n 0000035016 00000 n 0000060209 00000 n 0000085027 00000 n 0000034773 00000 n 0000056428 00000 n 0000084788 00000 n 0000034507 00000 n 0000056160 00000 n 0000084501 00000 n 0000034273 00000 n 0000055881 00000 n 0000084237 00000 n 0000034007 00000 n 0000024593 00000 n 0000024624 00000 n 0000022706 00000 n 0000010348 00000 n 0000012291 00000 n 0000065449 00000 n 0000094017 00000 n 0000043201 00000 n 0000024681 00000 n 0000024712 00000 n 0000022872 00000 n 0000012313 00000 n 0000014346 00000 n 0000085575 00000 n 0000036253 00000 n 0000059894 00000 n 0000085304 00000 n 0000036013 00000 n 0000059660 00000 n 0000083999 00000 n 0000035767 00000 n 0000059430 00000 n 0000083765 00000 n 0000024782 00000 n 0000024813 00000 n 0000023038 00000 n 0000014368 00000 n 0000015445 00000 n 0000047535 00000 n 0000070407 00000 n 0000024881 00000 n 0000024912 00000 n 0000023204 00000 n 0000015467 00000 n 0000017178 00000 n 0000038882 00000 n 0000024969 00000 n 0000025000 00000 n 0000023370 00000 n 0000017200 00000 n 0000018761 00000 n 0000077664 00000 n 0000033739 00000 n 0000055658 00000 n 0000077353 00000 n 0000026121 00000 n 0000055374 00000 n 0000077110 00000 n 0000025898 00000 n 0000055141 00000 n 0000076827 00000 n 0000025600 00000 n 0000054925 00000 n 0000076555 00000 n 0000025356 00000 n 0000054673 00000 n 0000076252 00000 n 0000025044 00000 n 0000025075 00000 n 0000023536 00000 n 0000018783 00000 n 0000020073 00000 n 0000038606 00000 n 0000065201 00000 n 0000089356 00000 n 0000038318 00000 n 0000025156 00000 n 0000025187 00000 n 0000023702 00000 n 0000020095 00000 n 0000021692 00000 n 0000083474 00000 n 0000033532 00000 n 0000054376 00000 n 0000083173 00000 n 0000033262 00000 n 0000054131 00000 n 0000082892 00000 n 0000032973 00000 n 0000053825 00000 n 0000082641 00000 n 0000032678 00000 n 0000053511 00000 n 0000082375 00000 n 0000032415 00000 n 0000053298 00000 n 0000082114 00000 n 0000025244 00000 n 0000025275 00000 n 0000109097 00000 n 0000109788 00000 n 0000099016 00000 n 0000099293 00000 n 0000099396 00000 n 0000100498 00000 n 0000100742 00000 n 0000101534 00000 n 0000101710 00000 n 0000102505 00000 n 0000102689 00000 n 0000104247 00000 n 0000104583 00000 n 0000106124 00000 n 0000106469 00000 n 0000107420 00000 n 0000107651 00000 n 0000108639 00000 n 0000110211 00000 n trailer << /Size 390 /Root 1 0 R /Info 2 0 R /ID [<8A7A448364594153C57CC8F16786D54F><8A7A448364594153C57CC8F16786D54F>] >> startxref 111699 %%EOF xmlrpc-light-0.6.1/examples/0000775000175000017500000000000011140336623014735 5ustar ramenramenxmlrpc-light-0.6.1/examples/adder/0000775000175000017500000000000011140336623016014 5ustar ramenramenxmlrpc-light-0.6.1/examples/adder/adder.conf0000664000175000017500000000205311140336574017747 0ustar ramenramennetplex { controller { max_level = "debug"; (* Log level *) logging { type = "stderr"; (* Log to stderr *) } }; service { name = "XmlRpc-Light Server"; protocol { (* This section creates the socket *) name = "http"; address { type = "internet"; bind = "0.0.0.0:8080"; (* Port 8080 on all interfaces *) }; }; processor { (* This section specifies how to process data of the socket *) type = "nethttpd"; host { (* Think of Apache's "virtual hosts" *) pref_name = "localhost"; pref_port = 8080; names = "*:0"; (* Which requests are matched here: all *) uri { path = "/"; service { type = "dynamic"; handler = "xmlrpc"; } }; }; }; workload_manager { type = "dynamic"; max_jobs_per_thread = 1; (* Everything else is senseless *) min_free_jobs_capacity = 1; max_free_jobs_capacity = 1; max_threads = 20; }; } } xmlrpc-light-0.6.1/examples/adder/adder.ml0000664000175000017500000000316211140336574017434 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let () = let server = new XmlRpcServer.netplex () in server#register "demo.addTwoNumbers" ~help:"Add two numbers together" ~signatures:[[`Int; `Int; `Int]; [`Double; `Int; `Double]; [`Double; `Double; `Int]; [`Double; `Double; `Double]; [`Double; `String; `String]] (function | [`Int x; `Int y] -> `Int (x + y) | [`Int x; `Double y] -> `Double (float_of_int x +. y) | [`Double x; `Int y] -> `Double (x +. float_of_int y) | [`Double x; `Double y] -> `Double (x +. y) | [`String x; `String y] -> `Double (float_of_string x +. float_of_string y) | _ -> XmlRpcServer.invalid_params ()); server#run () xmlrpc-light-0.6.1/examples/adder/OCamlMakefile0000664000175000017500000007346411140336574020413 0ustar ramenramen########################################################################### # OCamlMakefile # Copyright (C) 1999-2004 Markus Mottl # # For updates see: # http://www.ocaml.info/home/ocaml_sources.html # # $Id: OCamlMakefile,v 1.72 2005/12/09 15:30:50 mottl Exp $ # ########################################################################### # Modified by damien for .glade.ml compilation # Set these variables to the names of the sources to be processed and # the result variable. Order matters during linkage! ifndef SOURCES SOURCES := foo.ml endif export SOURCES ifndef RES_CLIB_SUF RES_CLIB_SUF := _stubs endif export RES_CLIB_SUF ifndef RESULT RESULT := foo endif export RESULT export LIB_PACK_NAME ifndef DOC_FILES DOC_FILES := $(filter %.mli, $(SOURCES)) endif export DOC_FILES export BCSUFFIX export NCSUFFIX ifndef TOPSUFFIX TOPSUFFIX := .top endif export TOPSUFFIX # Eventually set include- and library-paths, libraries to link, # additional compilation-, link- and ocamlyacc-flags # Path- and library information needs not be written with "-I" and such... # Define THREADS if you need it, otherwise leave it unset (same for # USE_CAMLP4)! export THREADS export VMTHREADS export ANNOTATE export USE_CAMLP4 export INCDIRS export LIBDIRS export EXTLIBDIRS export RESULTDEPS export OCAML_DEFAULT_DIRS export LIBS export CLIBS export OCAMLFLAGS export OCAMLNCFLAGS export OCAMLBCFLAGS export OCAMLLDFLAGS export OCAMLNLDFLAGS export OCAMLBLDFLAGS ifndef OCAMLCPFLAGS OCAMLCPFLAGS := a endif export OCAMLCPFLAGS export PPFLAGS export YFLAGS export IDLFLAGS export OCAMLDOCFLAGS export OCAMLFIND_INSTFLAGS export DVIPSFLAGS export STATIC # Add a list of optional trash files that should be deleted by "make clean" export TRASH #################### variables depending on your OCaml-installation ifdef MINGW export MINGW WIN32 := 1 CFLAGS_WIN32 := -mno-cygwin endif ifdef MSVC export MSVC WIN32 := 1 ifndef STATIC CPPFLAGS_WIN32 := -DCAML_DLL endif CFLAGS_WIN32 += -nologo EXT_OBJ := obj EXT_LIB := lib ifeq ($(CC),gcc) # work around GNU Make default value ifdef THREADS CC := cl -MT else CC := cl endif endif ifeq ($(CXX),g++) # work around GNU Make default value CXX := $(CC) endif CFLAG_O := -Fo endif ifdef WIN32 EXT_CXX := cpp EXE := .exe endif ifndef EXT_OBJ EXT_OBJ := o endif ifndef EXT_LIB EXT_LIB := a endif ifndef EXT_CXX EXT_CXX := cc endif ifndef EXE EXE := # empty endif ifndef CFLAG_O CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)! endif export CC export CXX export CFLAGS export CXXFLAGS export LDFLAGS export CPPFLAGS ifndef RPATH_FLAG RPATH_FLAG := -R endif export RPATH_FLAG ifndef MSVC ifndef PIC_CFLAGS PIC_CFLAGS := -fPIC endif ifndef PIC_CPPFLAGS PIC_CPPFLAGS := -DPIC endif endif export PIC_CFLAGS export PIC_CPPFLAGS BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT)) NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT)) TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT)) ifndef OCAMLFIND OCAMLFIND := ocamlfind endif export OCAMLFIND ifndef OCAMLC OCAMLC := ocamlc endif export OCAMLC ifndef OCAMLOPT OCAMLOPT := ocamlopt endif export OCAMLOPT ifndef OCAMLMKTOP OCAMLMKTOP := ocamlmktop endif export OCAMLMKTOP ifndef OCAMLCP OCAMLCP := ocamlcp endif export OCAMLCP ifndef OCAMLDEP OCAMLDEP := ocamldep endif export OCAMLDEP ifndef OCAMLLEX OCAMLLEX := ocamllex endif export OCAMLLEX ifndef OCAMLYACC OCAMLYACC := ocamlyacc endif export OCAMLYACC ifndef OCAMLMKLIB OCAMLMKLIB := ocamlmklib endif export OCAMLMKLIB ifndef OCAML_GLADECC OCAML_GLADECC := lablgladecc2 endif export OCAML_GLADECC ifndef OCAML_GLADECC_FLAGS OCAML_GLADECC_FLAGS := endif export OCAML_GLADECC_FLAGS ifndef CAMELEON_REPORT CAMELEON_REPORT := report endif export CAMELEON_REPORT ifndef CAMELEON_REPORT_FLAGS CAMELEON_REPORT_FLAGS := endif export CAMELEON_REPORT_FLAGS ifndef CAMELEON_ZOGGY CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo endif export CAMELEON_ZOGGY ifndef CAMELEON_ZOGGY_FLAGS CAMELEON_ZOGGY_FLAGS := endif export CAMELEON_ZOGGY_FLAGS ifndef OXRIDL OXRIDL := oxridl endif export OXRIDL ifndef CAMLIDL CAMLIDL := camlidl endif export CAMLIDL ifndef CAMLIDLDLL CAMLIDLDLL := camlidldll endif export CAMLIDLDLL ifndef NOIDLHEADER MAYBE_IDL_HEADER := -header endif export NOIDLHEADER export NO_CUSTOM ifndef CAMLP4 CAMLP4 := camlp4 endif export CAMLP4 ifndef REAL_OCAMLFIND ifdef PACKS ifndef CREATE_LIB ifdef THREADS PACKS += threads endif endif empty := space := $(empty) $(empty) comma := , ifdef PREDS PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS)) PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS)) OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES) # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES) OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) else OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS)) OCAML_DEP_PACKAGES := endif OCAML_FIND_LINKPKG := -linkpkg REAL_OCAMLFIND := $(OCAMLFIND) endif endif export OCAML_FIND_PACKAGES export OCAML_DEP_PACKAGES export OCAML_FIND_LINKPKG export REAL_OCAMLFIND ifndef OCAMLDOC OCAMLDOC := ocamldoc endif export OCAMLDOC ifndef LATEX LATEX := latex endif export LATEX ifndef DVIPS DVIPS := dvips endif export DVIPS ifndef PS2PDF PS2PDF := ps2pdf endif export PS2PDF ifndef OCAMLMAKEFILE OCAMLMAKEFILE := OCamlMakefile endif export OCAMLMAKEFILE ifndef OCAMLLIBPATH OCAMLLIBPATH := \ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := $(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).o \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx $(LIB_PACK_NAME).o ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif DINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-L%) endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-ccopt -L%) else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -dtypes else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).o \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: doc/$(RESULT)/html # generates Latex-documentation ladoc: doc/$(RESULT)/latex # generates PostScript-documentation psdoc: doc/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: doc/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ -Wl,--whole-archive $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ $(OCAMLLIBPATH)/ocamlrun.a \ -Wl,--export-all-symbols \ -Wl,--no-whole-archive else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ $(OCAMLLIBPATH)/ocamlrun.lib else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(REAL_IMPL) else ifdef BYTE_OCAML $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(REAL_IMPL) else $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmx $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif .mli.cmi: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi .ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi ifdef PACK_LIB $(REAL_RESULT).cmo $(REAL_RESULT).cmx $(REAL_RESULT).o: $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(REAL_IMPL) endif .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi .c.$(EXT_OBJ): $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< .$(EXT_CXX).$(EXT_OBJ): $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi doc/$(RESULT)/html: $(DOC_FILES) rm -rf $@ mkdir -p $@ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ fi doc/$(RESULT)/latex: $(DOC_FILES) rm -rf $@ mkdir -p $@ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) \ $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES) \ -o $@/doc.tex; \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ fi doc/$(RESULT)/latex/doc.ps: doc/$(RESULT)/latex cd doc/$(RESULT)/latex && \ $(LATEX) doc.tex && \ $(LATEX) doc.tex && \ $(DVIPS) $(DVIPSFLAGS) doc.dvi -o $(@F) doc/$(RESULT)/latex/doc.pdf: doc/$(RESULT)/latex/doc.ps cd doc/$(RESULT)/latex && $(PS2PDF) $( object method rpc : XmlRpc.client method ubigraph : < change_edge_style : int32 -> int32 -> int32; change_vertex_style : int32 -> int32 -> int32; clear : unit -> int32; new_edge : int32 -> int32 -> int32; new_edge_style : int32 -> int32; new_edge_style_w_id : int32 -> int32 -> int32; new_edge_w_id : int32 -> int32 -> int32 -> int32; new_vertex : unit -> int32; new_vertex_style : int32 -> int32; new_vertex_style_w_id : int32 -> int32 -> int32; new_vertex_w_id : int32 -> int32; remove_edge : int32 -> int32; remove_vertex : int32 -> int32; set_edge_attribute : int32 -> string -> string -> int32; set_edge_style_attribute : int32 -> string -> string -> int32; set_vertex_attribute : int32 -> string -> string -> int32; set_vertex_style_attribute : int32 -> string -> string -> int32 > method system : < listMethods : unit -> XmlRpc.value list; methodHelp : string -> string; methodSignature : string -> XmlRpc.value list; multicall : XmlRpc.value list -> XmlRpc.value list; shutdown : string -> int32 > end xmlrpc-light-0.6.1/examples/ubigraph/test.ml0000664000175000017500000000404511140336574020057 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2008 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) (* Based on Python example, "examples/Python/ubigraph_example.py", distributed with Ubigraph. For details, see the Ubigraph website: http://ubietylab.net/ubigraph/ *) let client = new Ubigraph.client "http://localhost:20738/RPC2" let u = client#ubigraph let _ = u#clear () let x = u#new_vertex () let _ = u#set_vertex_attribute x "shape" "sphere" let _ = u#set_vertex_attribute x "color" "#ffff00" let small_red = u#new_vertex_style 0l let _ = u#set_vertex_style_attribute small_red "shape" "sphere" let _ = u#set_vertex_style_attribute small_red "color" "#ff0000" let _ = u#set_vertex_style_attribute small_red "size" "0.2" let previous_r = ref None let () = for i = 0 to 9 do let r = u#new_vertex () in let _ = u#change_vertex_style r small_red in let _ = u#set_vertex_attribute r "label" (string_of_int i) in let e = u#new_edge x r in let _ = u#set_edge_attribute e "arrow" "true" in match !previous_r with | None -> previous_r := Some r | Some r' -> let e = u#new_edge r r' in let _ = u#set_edge_attribute e "spline" "true" in let _ = u#set_edge_attribute e "stroke" "dashed" in previous_r := Some r done xmlrpc-light-0.6.1/examples/ubigraph/Ubigraph.ml0000664000175000017500000001450411140336574020642 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2008 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) (* Automatically generated from an XML-RPC server by running the following command: ../genclient/genclient -i http://localhost:20738/RPC2 *) exception Type_error of string class client url = let rpc = new XmlRpc.client url in object (self) method rpc = rpc method system = object method shutdown _0 = let result = rpc#call "system.shutdown" [`String _0] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method multicall _0 = let result = rpc#call "system.multicall" [`Array _0] in match result with | `Array r -> r | other -> raise (Type_error (XmlRpc.dump other)) method methodHelp _0 = let result = rpc#call "system.methodHelp" [`String _0] in match result with | `String r -> r | other -> raise (Type_error (XmlRpc.dump other)) method methodSignature _0 = let result = rpc#call "system.methodSignature" [`String _0] in match result with | `Array r -> r | other -> raise (Type_error (XmlRpc.dump other)) method listMethods () = let result = rpc#call "system.listMethods" [] in match result with | `Array r -> r | other -> raise (Type_error (XmlRpc.dump other)) end method ubigraph = object method change_edge_style _0 _1 = let result = rpc#call "ubigraph.change_edge_style" [`Int32 _0; `Int32 _1] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method new_edge_style_w_id _0 _1 = let result = rpc#call "ubigraph.new_edge_style_w_id" [`Int32 _0; `Int32 _1] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method new_edge_style _0 = let result = rpc#call "ubigraph.new_edge_style" [`Int32 _0] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method set_edge_style_attribute _0 _1 _2 = let result = rpc#call "ubigraph.set_edge_style_attribute" [`Int32 _0; `String _1; `String _2] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method set_edge_attribute _0 _1 _2 = let result = rpc#call "ubigraph.set_edge_attribute" [`Int32 _0; `String _1; `String _2] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method change_vertex_style _0 _1 = let result = rpc#call "ubigraph.change_vertex_style" [`Int32 _0; `Int32 _1] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method new_vertex_style_w_id _0 _1 = let result = rpc#call "ubigraph.new_vertex_style_w_id" [`Int32 _0; `Int32 _1] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method new_vertex_style _0 = let result = rpc#call "ubigraph.new_vertex_style" [`Int32 _0] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method set_vertex_style_attribute _0 _1 _2 = let result = rpc#call "ubigraph.set_vertex_style_attribute" [`Int32 _0; `String _1; `String _2] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method set_vertex_attribute _0 _1 _2 = let result = rpc#call "ubigraph.set_vertex_attribute" [`Int32 _0; `String _1; `String _2] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method clear () = let result = rpc#call "ubigraph.clear" [] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method remove_edge _0 = let result = rpc#call "ubigraph.remove_edge" [`Int32 _0] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method remove_vertex _0 = let result = rpc#call "ubigraph.remove_vertex" [`Int32 _0] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method new_edge _0 _1 = let result = rpc#call "ubigraph.new_edge" [`Int32 _0; `Int32 _1] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method new_edge_w_id _0 _1 _2 = let result = rpc#call "ubigraph.new_edge_w_id" [`Int32 _0; `Int32 _1; `Int32 _2] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method new_vertex () = let result = rpc#call "ubigraph.new_vertex" [] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) method new_vertex_w_id _0 = let result = rpc#call "ubigraph.new_vertex_w_id" [`Int32 _0] in match result with | `Int r -> Int32.of_int r | `Int32 r -> r | other -> raise (Type_error (XmlRpc.dump other)) end end xmlrpc-light-0.6.1/examples/ubigraph/OCamlMakefile0000664000175000017500000007347011140336574021132 0ustar ramenramen########################################################################### # OCamlMakefile # Copyright (C) 1999-2004 Markus Mottl # # For updates see: # http://www.ocaml.info/home/ocaml_sources.html # # $Id: OCamlMakefile,v 1.72 2005/12/09 15:30:50 mottl Exp $ # ########################################################################### # Modified by damien for .glade.ml compilation # Set these variables to the names of the sources to be processed and # the result variable. Order matters during linkage! ifndef SOURCES SOURCES := foo.ml endif export SOURCES ifndef RES_CLIB_SUF RES_CLIB_SUF := _stubs endif export RES_CLIB_SUF ifndef RESULT RESULT := foo endif export RESULT export LIB_PACK_NAME ifndef DOC_FILES DOC_FILES := $(filter %.mli, $(SOURCES)) endif export DOC_FILES export BCSUFFIX export NCSUFFIX ifndef TOPSUFFIX TOPSUFFIX := .top endif export TOPSUFFIX # Eventually set include- and library-paths, libraries to link, # additional compilation-, link- and ocamlyacc-flags # Path- and library information needs not be written with "-I" and such... # Define THREADS if you need it, otherwise leave it unset (same for # USE_CAMLP4)! export THREADS export VMTHREADS export ANNOTATE export USE_CAMLP4 export INCDIRS export LIBDIRS export EXTLIBDIRS export RESULTDEPS export OCAML_DEFAULT_DIRS export LIBS export CLIBS export OCAMLFLAGS export OCAMLNCFLAGS export OCAMLBCFLAGS export OCAMLLDFLAGS export OCAMLNLDFLAGS export OCAMLBLDFLAGS ifndef OCAMLCPFLAGS OCAMLCPFLAGS := a endif export OCAMLCPFLAGS export PPFLAGS export YFLAGS export IDLFLAGS export OCAMLDOCFLAGS export OCAMLFIND_INSTFLAGS export DVIPSFLAGS export STATIC # Add a list of optional trash files that should be deleted by "make clean" export TRASH #################### variables depending on your OCaml-installation ifdef MINGW export MINGW WIN32 := 1 CFLAGS_WIN32 := -mno-cygwin endif ifdef MSVC export MSVC WIN32 := 1 ifndef STATIC CPPFLAGS_WIN32 := -DCAML_DLL endif CFLAGS_WIN32 += -nologo EXT_OBJ := obj EXT_LIB := lib ifeq ($(CC),gcc) # work around GNU Make default value ifdef THREADS CC := cl -MT else CC := cl endif endif ifeq ($(CXX),g++) # work around GNU Make default value CXX := $(CC) endif CFLAG_O := -Fo endif ifdef WIN32 EXT_CXX := cpp EXE := .exe endif ifndef EXT_OBJ EXT_OBJ := o endif ifndef EXT_LIB EXT_LIB := a endif ifndef EXT_CXX EXT_CXX := cc endif ifndef EXE EXE := # empty endif ifndef CFLAG_O CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)! endif export CC export CXX export CFLAGS export CXXFLAGS export LDFLAGS export CPPFLAGS ifndef RPATH_FLAG RPATH_FLAG := -R endif export RPATH_FLAG ifndef MSVC ifndef PIC_CFLAGS PIC_CFLAGS := -fPIC endif ifndef PIC_CPPFLAGS PIC_CPPFLAGS := -DPIC endif endif export PIC_CFLAGS export PIC_CPPFLAGS BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT)) NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT)) TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT)) ifndef OCAMLFIND OCAMLFIND := ocamlfind endif export OCAMLFIND ifndef OCAMLC OCAMLC := ocamlc endif export OCAMLC ifndef OCAMLOPT OCAMLOPT := ocamlopt endif export OCAMLOPT ifndef OCAMLMKTOP OCAMLMKTOP := ocamlmktop endif export OCAMLMKTOP ifndef OCAMLCP OCAMLCP := ocamlcp endif export OCAMLCP ifndef OCAMLDEP OCAMLDEP := ocamldep endif export OCAMLDEP ifndef OCAMLLEX OCAMLLEX := ocamllex endif export OCAMLLEX ifndef OCAMLYACC OCAMLYACC := ocamlyacc endif export OCAMLYACC ifndef OCAMLMKLIB OCAMLMKLIB := ocamlmklib endif export OCAMLMKLIB ifndef OCAML_GLADECC OCAML_GLADECC := lablgladecc2 endif export OCAML_GLADECC ifndef OCAML_GLADECC_FLAGS OCAML_GLADECC_FLAGS := endif export OCAML_GLADECC_FLAGS ifndef CAMELEON_REPORT CAMELEON_REPORT := report endif export CAMELEON_REPORT ifndef CAMELEON_REPORT_FLAGS CAMELEON_REPORT_FLAGS := endif export CAMELEON_REPORT_FLAGS ifndef CAMELEON_ZOGGY CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo endif export CAMELEON_ZOGGY ifndef CAMELEON_ZOGGY_FLAGS CAMELEON_ZOGGY_FLAGS := endif export CAMELEON_ZOGGY_FLAGS ifndef OXRIDL OXRIDL := oxridl endif export OXRIDL ifndef CAMLIDL CAMLIDL := camlidl endif export CAMLIDL ifndef CAMLIDLDLL CAMLIDLDLL := camlidldll endif export CAMLIDLDLL ifndef NOIDLHEADER MAYBE_IDL_HEADER := -header endif export NOIDLHEADER export NO_CUSTOM ifndef CAMLP4 CAMLP4 := camlp4 endif export CAMLP4 ifndef REAL_OCAMLFIND ifdef PACKS ifndef CREATE_LIB ifdef THREADS PACKS += threads endif endif empty := space := $(empty) $(empty) comma := , ifdef PREDS PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS)) PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS)) OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES) # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES) OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) else OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS)) OCAML_DEP_PACKAGES := endif OCAML_FIND_LINKPKG := -linkpkg REAL_OCAMLFIND := $(OCAMLFIND) endif endif export OCAML_FIND_PACKAGES export OCAML_DEP_PACKAGES export OCAML_FIND_LINKPKG export REAL_OCAMLFIND ifndef OCAMLDOC OCAMLDOC := ocamldoc endif export OCAMLDOC ifndef LATEX LATEX := latex endif export LATEX ifndef DVIPS DVIPS := dvips endif export DVIPS ifndef PS2PDF PS2PDF := ps2pdf endif export PS2PDF ifndef OCAMLMAKEFILE OCAMLMAKEFILE := OCamlMakefile endif export OCAMLMAKEFILE ifndef OCAMLLIBPATH OCAMLLIBPATH := \ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := $(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).o \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx $(LIB_PACK_NAME).o ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif DINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-L%) endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-ccopt -L%) else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -dtypes else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).o \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: doc/$(RESULT)/html # generates Latex-documentation ladoc: doc/$(RESULT)/latex # generates PostScript-documentation psdoc: doc/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: doc/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ -Wl,--whole-archive $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ $(OCAMLLIBPATH)/ocamlrun.a \ -Wl,--export-all-symbols \ -Wl,--no-whole-archive else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ $(OCAMLLIBPATH)/ocamlrun.lib else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(REAL_IMPL) else ifdef BYTE_OCAML $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(REAL_IMPL) else $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmx $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif .mli.cmi: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi .ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi ifdef PACK_LIB $(REAL_RESULT).cmo $(REAL_RESULT).cmx $(REAL_RESULT).o: $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(REAL_IMPL) endif .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi .c.$(EXT_OBJ): $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< .$(EXT_CXX).$(EXT_OBJ): $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi doc/$(RESULT)/html: $(DOC_FILES) #rm -rf $@ #mkdir -p $@ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ fi doc/$(RESULT)/latex: $(DOC_FILES) #rm -rf $@ #mkdir -p $@ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) \ $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES) \ -o $@/doc.tex; \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ fi doc/$(RESULT)/latex/doc.ps: doc/$(RESULT)/latex cd doc/$(RESULT)/latex && \ $(LATEX) doc.tex && \ $(LATEX) doc.tex && \ $(DVIPS) $(DVIPSFLAGS) doc.dvi -o $(@F) doc/$(RESULT)/latex/doc.pdf: doc/$(RESULT)/latex/doc.ps cd doc/$(RESULT)/latex && $(PS2PDF) $( List.map f items | other -> raise (Type_error (XmlRpc.dump other)) let iter_struct f = function | `Struct pairs -> List.iter f pairs | other -> raise (Type_error (XmlRpc.dump other)) let int_value = function | `Int n -> n | `String s -> int_of_string s | other -> raise (Type_error (XmlRpc.dump other)) module Blog = struct type t = { mutable is_admin : bool; mutable url : string; mutable blog_id : int; mutable blog_name : string; mutable xmlrpc : string; } let make () = {is_admin=false; url=""; blog_id=0; blog_name=""; xmlrpc=""} let of_xmlrpc value = let result = make () in iter_struct (function | ("isAdmin", `Boolean v) -> result.is_admin <- v | ("url", `String v) -> result.url <- v | ("blogid", `String v) -> result.blog_id <- int_of_string v | ("blogid", `Int v) -> result.blog_id <- v | ("blogName", `String v) -> result.blog_name <- v | ("xmlrpc", `String v) -> result.xmlrpc <- v | (field, _) -> warn (Unknown_field field)) value; result end module Category = struct type t = { mutable category_id : int; mutable parent_id : int; mutable description : string; mutable category_name : string; mutable html_url : string; mutable rss_url : string; } let make () = {category_id=0; parent_id=0; description=""; category_name=""; html_url=""; rss_url=""} let of_xmlrpc value = let result = make () in iter_struct (function | ("categoryId", `String v) -> result.category_id <- int_of_string v | ("categoryId", `Int v) -> result.category_id <- v | ("parentId", `String v) -> result.parent_id <- int_of_string v | ("parentId", `Int v) -> result.parent_id <- v | ("description", `String v) -> result.description <- v | ("categoryName", `String v) -> result.category_name <- v | ("htmlUrl", `String v) -> result.html_url <- v | ("rssUrl", `String v) -> result.rss_url <- v | (field, _) -> warn (Unknown_field field)) value; result end module CommentCount = struct type t = { mutable approved : int; mutable awaiting_moderation : int; mutable spam : int; mutable total_comments : int; } let make () = {approved=0; awaiting_moderation=0; spam=0; total_comments=0} let of_xmlrpc value = let result = make () in iter_struct (function | ("approved", `String v) -> result.approved <- int_of_string v | ("approved", `Int v) -> result.approved <- v | ("awaiting_moderation", `Int v) -> result.awaiting_moderation <- v | ("spam", `Int v) -> result.spam <- v | ("total_comments", `Int v) -> result.total_comments <- v | (field, _) -> warn (Unknown_field field)) value; result end module Comment = struct type t = { mutable date_created : XmlRpcDateTime.t; mutable user_id : int; mutable comment_id : int; mutable parent : int; mutable status : string; mutable content : string; mutable link : string; mutable post_id : int; mutable post_title : string; mutable author : string; mutable author_url : string; mutable author_email : string; mutable author_ip : string; mutable typ : string } let make () = {date_created=(0,0,0,0,0,0,0); user_id=0; comment_id=0; parent=0; status=""; content=""; link=""; post_id=0; post_title=""; author=""; author_url=""; author_email=""; author_ip=""; typ=""} let of_xmlrpc value = let result = make () in iter_struct (function | ("date_created_gmt", `DateTime v) -> result.date_created <- v | ("user_id", `String v) -> result.user_id <- int_of_string v | ("user_id", `Int v) -> result.user_id <- v | ("comment_id", `String v) -> result.comment_id <- int_of_string v | ("comment_id", `Int v) -> result.comment_id <- v | ("parent", `String v) -> result.parent <- int_of_string v | ("parent", `Int v) -> result.parent <- v | ("status", `String v) -> result.status <- v | ("content", `String v) -> result.content <- v | ("link", `String v) -> result.link <- v | ("post_id", `String v) -> result.post_id <- int_of_string v | ("post_id", `Int v) -> result.post_id <- v | ("post_title", `String v) -> result.post_title <- v | ("author", `String v) -> result.author <- v | ("author_url", `String v) -> result.author_url <- v | ("author_email", `String v) -> result.author_email <- v | ("author_ip", `String v) -> result.author_ip <- v | ("type", `String v) -> result.typ <- v | (field, _) -> warn (Unknown_field field)) value; result let to_xmlrpc comment = `Struct ["date_created_gmt", `DateTime (XmlRpcDateTime.set_tz_offset 0 comment.date_created); "user_id", `Int comment.user_id; "comment_id", `Int comment.comment_id; "parent", `Int comment.parent; "status", `String comment.status; "content", `String comment.content; "link", `String comment.link; "post_id", `Int comment.post_id; "post_title", `String comment.post_title; "author", `String comment.author; "author_url", `String comment.author_url; "author_email", `String comment.author_email; "author_ip", `String comment.author_ip; "type", `String comment.typ] end module CustomField = struct type t = { mutable id : int option; mutable key : string option; mutable value : string } let make () = {id=None; key=None; value=""} let of_xmlrpc value = let result = make () in iter_struct (function | ("id", `String v) -> result.id <- Some (int_of_string v) | ("id", `Int v) -> result.id <- Some v | ("key", `String v) -> result.key <- Some v | ("value", `String v) -> result.value <- v | (field, _) -> warn (Unknown_field field)) value; result let to_xmlrpc field = match field with | {id=None; key=None; value=value} -> `Struct ["value", `String value] | {id=Some id; key=None; value=value} -> `Struct ["id", `Int id; "value", `String value] | {id=None; key=Some key; value=value} -> `Struct ["key", `String key; "value", `String value] | {id=Some id; key=Some key; value=value} -> `Struct ["id", `Int id; "key", `String key; "value", `String value] end module Option = struct type t = { mutable desc : string; mutable readonly : bool; mutable value : string; } let make () = {desc=""; readonly=false; value=""} let of_xmlrpc value = let result = make () in iter_struct (function | ("desc", `String v) -> result.desc <- v | ("readonly", `Boolean v) -> result.readonly <- v | ("value", `String v) -> result.value <- v | (field, _) -> warn (Unknown_field field)) value; result end module User = struct type t = { mutable user_id : int; mutable user_login : string; mutable display_name : string; mutable user_email : string; mutable meta_value : string; } let make () = {user_id=0; user_login=""; display_name=""; user_email=""; meta_value=""} let of_xmlrpc value = let result = make () in iter_struct (function | ("user_id", `String v) -> result.user_id <- int_of_string v | ("user_id", `Int v) -> result.user_id <- v | ("user_login", `String v) -> result.user_login <- v | ("display_name", `String v) -> result.display_name <- v | ("user_email", `String v) -> result.user_email <- v | ("meta_value", `String v) -> result.meta_value <- v | (field, _) -> warn (Unknown_field field)) value; result end module PageListItem = struct type t = { mutable page_id : int; mutable page_title : string; mutable page_parent_id : int; mutable date_created : XmlRpcDateTime.t; } let make () = {page_id=0; page_title=""; page_parent_id=0; date_created=(0,0,0,0,0,0,0)} let of_xmlrpc value = let result = make () in iter_struct (function | ("page_id", `String v) -> result.page_id <- int_of_string v | ("page_id", `Int v) -> result.page_id <- v | ("page_title", `String v) -> result.page_title <- v | ("page_parent_id", `String v) -> result.page_parent_id <- int_of_string v | ("page_parent_id", `Int v) -> result.page_parent_id <- v | ("dateCreated", `DateTime v) -> result.date_created <- v | ("date_created_gmt", `DateTime v) -> result.date_created <- v | (field, _) -> warn (Unknown_field field)) value; result end module Page = struct type t = { mutable date_created : XmlRpcDateTime.t; mutable user_id : int; mutable page_id : int; mutable page_status : string; mutable description : string; mutable title : string; mutable link : string; mutable permalink : string; mutable categories : string list; mutable excerpt : string; mutable text_more : string; mutable mt_allow_comments : bool; mutable mt_allow_pings : bool; mutable wp_slug : string; mutable wp_password : string; mutable wp_author : string; mutable wp_page_parent_id : int; mutable wp_page_parent_title : string; mutable wp_page_order : int; mutable wp_author_id : int; mutable wp_author_display_name : string; mutable custom_fields : CustomField.t list; mutable wp_page_template : string; } let make () = {date_created=(0,0,0,0,0,0,0); user_id=0; page_id=0; page_status=""; description=""; title=""; link=""; permalink=""; categories=[]; excerpt=""; text_more=""; mt_allow_comments=false; mt_allow_pings=false; wp_slug=""; wp_password=""; wp_author=""; wp_page_parent_id=0; wp_page_parent_title=""; wp_page_order=0; wp_author_id=0; wp_author_display_name=""; custom_fields=[]; wp_page_template=""} let of_xmlrpc value = let result = make () in iter_struct (function | ("dateCreated", `DateTime v) -> result.date_created <- v | ("date_created_gmt", `DateTime v) -> result.date_created <- v | ("userid", `String v) -> result.user_id <- int_of_string v | ("userid", `Int v) -> result.user_id <- v | ("page_id", `String v) -> result.page_id <- int_of_string v | ("page_id", `Int v) -> result.page_id <- v | ("page_status", `String v) -> result.page_status <- v | ("description", `String v) -> result.description <- v | ("title", `String v) -> result.title <- v | ("link", `String v) -> result.link <- v | ("permaLink", `String v) -> result.permalink <- v | ("categories", `Array v) -> result.categories <- List.map XmlRpc.dump v | ("excerpt", `String v) -> result.excerpt <- v | ("text_more", `String v) -> result.text_more <- v | ("mt_excerpt", `String v) -> result.excerpt <- v | ("mt_text_more", `String v) -> result.text_more <- v | ("mt_allow_comments", `Int v) -> result.mt_allow_comments <- v<>0 | ("mt_allow_comments", `Boolean v) -> result.mt_allow_comments <- v | ("mt_allow_pings", `Int v) -> result.mt_allow_pings <- v<>0 | ("mt_allow_pings", `Boolean v) -> result.mt_allow_pings <- v | ("wp_slug", `String v) -> result.wp_slug <- v | ("wp_password", `String v) -> result.wp_password <- v | ("wp_author", `String v) -> result.wp_author <- v | ("wp_author_display_name", `String v) -> result.wp_author_display_name <- v | ("wp_page_parent_id", `String v) -> result.wp_page_parent_id <- int_of_string v | ("wp_page_parent_id", `Int v) -> result.wp_page_parent_id <- v | ("wp_page_parent_title", `String v) -> result.wp_page_parent_title <- v | ("wp_page_order", `String v) -> result.wp_page_order <- int_of_string v | ("wp_page_order", `Int v) -> result.wp_page_order <- v | ("wp_author_id", `String v) -> result.wp_author_id <- int_of_string v | ("wp_author_id", `Int v) -> result.wp_author_id <- v | ("custom_fields", `Array v) -> result.custom_fields <- List.map CustomField.of_xmlrpc v | ("wp_page_template", `String v) -> result.wp_page_template <- v | (field, _) -> warn (Unknown_field field)) value; result let to_xmlrpc page = `Struct ["userid", `Int page.user_id; "page_id", `Int page.page_id; "page_status", `String page.page_status; "wp_slug", `String page.wp_slug; "wp_password", `String page.wp_password; "wp_author", `String page.wp_author; "wp_author_display_name", `String page.wp_author_display_name; "wp_page_parent_id", `Int page.wp_page_parent_id; "wp_page_parent_title", `String page.wp_page_parent_title; "wp_page_order", `Int page.wp_page_order; "wp_author_id", `Int page.wp_author_id; "title", `String page.title; "description", `String page.description; "link", `String page.link; "permaLink", `String page.permalink; "mt_excerpt", `String page.excerpt; "mt_text_more", `String page.text_more; "mt_allow_comments", `Boolean page.mt_allow_comments; "mt_allow_pings", `Boolean page.mt_allow_pings; "dateCreated", `DateTime page.date_created; "date_created_gmt", `DateTime (XmlRpcDateTime.set_tz_offset 0 page.date_created); "categories", `Array (List.map (fun s -> `String s) page.categories); "custom_fields", `Array (List.map CustomField.to_xmlrpc page.custom_fields); "wp_page_template", `String page.wp_page_template] end module Post = struct type t = { mutable user_id : int; mutable post_id : int; mutable post_status : string; mutable date_created : XmlRpcDateTime.t; mutable description : string; mutable title : string; mutable link : string; mutable permalink : string; mutable categories : string list; mutable excerpt : string; mutable text_more : string; mutable mt_allow_comments : bool; mutable mt_allow_pings : bool; mutable mt_keywords : string; mutable wp_slug : string; mutable wp_password : string; mutable wp_author_id : int; mutable wp_author_display_name : string; mutable custom_fields : CustomField.t list; } let make () = {date_created=(0,0,0,0,0,0,0); user_id=0; post_id=0; post_status=""; description=""; title=""; link=""; permalink=""; categories=[]; excerpt=""; text_more=""; mt_allow_comments=false; mt_allow_pings=false; mt_keywords=""; wp_slug=""; wp_password=""; wp_author_id=0; wp_author_display_name=""; custom_fields=[]} let of_xmlrpc value = let result = make () in iter_struct (function | ("dateCreated", `DateTime v) -> result.date_created <- v | ("date_created_gmt", `DateTime v) -> result.date_created <- v | ("userid", `String v) -> result.user_id <- int_of_string v | ("userid", `Int v) -> result.user_id <- v | ("postid", `String v) -> result.post_id <- int_of_string v | ("postid", `Int v) -> result.post_id <- v | ("post_status", `String v) -> result.post_status <- v | ("description", `String v) -> result.description <- v | ("title", `String v) -> result.title <- v | ("link", `String v) -> result.link <- v | ("permaLink", `String v) -> result.permalink <- v | ("categories", `Array v) -> result.categories <- List.map XmlRpc.dump v | ("mt_excerpt", `String v) -> result.excerpt <- v | ("mt_text_more", `String v) -> result.text_more <- v | ("mt_allow_comments", `Int v) -> result.mt_allow_comments <- v<>0 | ("mt_allow_comments", `Boolean v) -> result.mt_allow_comments <- v | ("mt_allow_pings", `Int v) -> result.mt_allow_pings <- v<>0 | ("mt_allow_pings", `Boolean v) -> result.mt_allow_pings <- v | ("mt_keywords", `String v) -> result.mt_keywords <- v | ("wp_slug", `String v) -> result.wp_slug <- v | ("wp_password", `String v) -> result.wp_password <- v | ("wp_author_id", `String v) -> result.wp_author_id <- int_of_string v | ("wp_author_id", `Int v) -> result.wp_author_id <- v | ("wp_author_display_name", `String v) -> result.wp_author_display_name <- v | ("custom_fields", `Array v) -> result.custom_fields <- List.map CustomField.of_xmlrpc v | (field, _) -> warn (Unknown_field field)) value; result let to_xmlrpc post = `Struct ["dateCreated", `DateTime post.date_created; "date_created_gmt", `DateTime (XmlRpcDateTime.set_tz_offset 0 post.date_created); "userid", `Int post.user_id; "postid", `Int post.post_id; "post_status", `String post.post_status; "description", `String post.description; "title", `String post.title; "link", `String post.link; "permaLink", `String post.permalink; "categories", `Array (List.map (fun s -> `String s) post.categories); "mt_excerpt", `String post.excerpt; "mt_text_more", `String post.text_more; "mt_allow_comments", `Boolean post.mt_allow_comments; "mt_allow_pings", `Boolean post.mt_allow_pings; "mt_keywords", `String post.mt_keywords; "wp_slug", `String post.wp_slug; "wp_password", `String post.wp_password; "wp_author_id", `Int post.wp_author_id; "wp_author_display_name", `String post.wp_author_display_name; "custom_fields", `Array (List.map CustomField.to_xmlrpc post.custom_fields)]; end class api ~url ~blog_id ~username ~password = object (self) val rpc = new XmlRpc.client url val std_args = [`Int blog_id; `String username; `String password] val blog_id = blog_id val username = username val password = password method rpc = rpc method get_page page_id = Page.of_xmlrpc (rpc#call "wp.getPage" [`Int blog_id; `Int page_id; `String username; `String password]) method get_pages () = map_array Page.of_xmlrpc (rpc#call "wp.getPages" std_args) method get_page_list () = map_array PageListItem.of_xmlrpc (rpc#call "wp.getPageList" std_args) method get_page_status_list () = match rpc#call "wp.getPageStatusList" std_args with | `Struct pairs -> List.map (fun (k, v) -> (k, XmlRpc.dump v)) pairs | other -> raise (Type_error (XmlRpc.dump other)) method get_page_templates () = match rpc#call "wp.getPageTemplates" std_args with | `Struct pairs -> List.map (fun (k, v) -> (k, XmlRpc.dump v)) pairs | other -> raise (Type_error (XmlRpc.dump other)) method new_page content publish = int_value (rpc#call "wp.newPage" (std_args @ [Page.to_xmlrpc content; `Boolean publish])) method edit_page page_id content publish = ignore (rpc#call "wp.editPage" [`Int blog_id; `Int page_id; `String username; `String password; Page.to_xmlrpc content; `Boolean publish]) method delete_page page_id = ignore (rpc#call "wp.deletePage" (std_args @ [`Int page_id])) method get_post post_id = Post.of_xmlrpc (rpc#call "metaWeblog.getPost" [`Int post_id; `String username; `String password]) method get_recent_posts num_posts = map_array Post.of_xmlrpc (rpc#call "metaWeblog.getRecentPosts" (std_args @ [`Int num_posts])) method get_post_status_list () = match rpc#call "wp.getPostStatusList" std_args with | `Struct pairs -> List.map (fun (k, v) -> (k, XmlRpc.dump v)) pairs | other -> raise (Type_error (XmlRpc.dump other)) method new_post content publish = int_value (rpc#call "metaWeblog.newPost" (std_args @ [Post.to_xmlrpc content; `Boolean publish])) method edit_post post_id content publish = ignore (rpc#call "metaWeblog.editPost" [`Int post_id; `String username; `String password; Post.to_xmlrpc content; `Boolean publish]) method delete_post post_id = ignore (rpc#call "metaWeblog.deletePost" [`Int blog_id; `Int post_id; `String username; `String password; `Boolean false]) method get_authors () = map_array User.of_xmlrpc (rpc#call "wp.getAuthors" std_args) method get_blogs () = map_array Blog.of_xmlrpc (rpc#call "wp.getUsersBlogs" [`String username; `String password]) method get_comment_count post_id = CommentCount.of_xmlrpc (rpc#call "wp.getCommentCount" (std_args @ [`Int post_id])) method get_comment_status_list () = match rpc#call "wp.getCommentStatusList" std_args with | `Struct pairs -> List.map (fun (k, v) -> (k, XmlRpc.dump v)) pairs | other -> raise (Type_error (XmlRpc.dump other)) method get_comment comment_id = Comment.of_xmlrpc (rpc#call "wp.getComment" (std_args @ [`Int comment_id])) method get_comments ?(status="") ?(post_id=0) ?(offset=0) ?(number=10) () = map_array Comment.of_xmlrpc (rpc#call "wp.getComments" (std_args @ [`Struct ["status", `String status; "post_id", `Int post_id; "offset", `Int offset; "number", `Int number]])) method new_comment comment = int_value (rpc#call "wp.newComment" (std_args @ [`Int comment.Comment.post_id; Comment.to_xmlrpc comment])) method edit_comment comment_id comment = ignore (rpc#call "wp.editComment" (std_args @ [`Int comment_id; Comment.to_xmlrpc comment])) method delete_comment comment_id = ignore (rpc#call "wp.deleteComment" (std_args @ [`Int comment_id])) method get_categories () = map_array Category.of_xmlrpc (rpc#call "wp.getCategories" std_args) method new_category ~name ~slug ~parent_id ~description = int_value (rpc#call "wp.newCategory" (std_args @ [`Struct ["name", `String name; "slug", `String slug; "parent_id", `Int parent_id; "description", `String description]])) method suggest_categories category max_results = rpc#call "wp.suggestCategories" (std_args @ [`String category; `Int max_results]) method get_options names = let result = rpc#call "wp.getOptions" (std_args @ [`Array (List.map (fun s -> `String s) names)]) in match result with | `Struct pairs -> List.map (fun (name, opt) -> (name, Option.of_xmlrpc opt)) pairs | `Array [] -> [] | other -> raise (Type_error (XmlRpc.dump other)) method set_options options = let result = rpc#call "wp.setOptions" (std_args @ [`Struct (List.map (fun (name, value) -> (name, `String value)) options)]) in match result with | `Struct pairs -> List.map (fun (name, opt) -> (name, Option.of_xmlrpc opt)) pairs | `Array [] -> [] | other -> raise (Type_error (XmlRpc.dump other)) method upload_file ~name ~typ ~bits ~overwrite = let value = rpc#call "wp.uploadFile" (std_args @ [`Struct ["name", `String name; "type", `String typ; "bits", `Binary bits; "overwrite", `Boolean overwrite]]) in let file, url, typ = ref "", ref "", ref "" in iter_struct (function | ("file", `String v) -> file := v | ("url", `String v) -> url := v | ("type", `String v) -> typ := v | (field, _) -> warn (Unknown_field field)) value; (!file, !url, !typ) end xmlrpc-light-0.6.1/examples/wordpress/test.ml0000664000175000017500000000242411140336574020305 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let wp = new WordPress.api ~url:"http://localhost/wordpress/xmlrpc.php" ~blog_id:1 ~username:"admin" ~password:"secret" let () = List.iter (fun {WordPress.Category.category_id=category_id; category_name=name; description=description} -> Printf.printf "Category #%d\n Name: %s\n Description: %s\n\n" category_id name description) (wp#get_categories ()) xmlrpc-light-0.6.1/examples/wordpress/WordPress.mli0000664000175000017500000001677511140336574021445 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) exception Type_error of string exception Unknown_field of string val strict : bool ref module Blog : sig type t = { mutable is_admin : bool; mutable url : string; mutable blog_id : int; mutable blog_name : string; mutable xmlrpc : string; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t end module Category : sig type t = { mutable category_id : int; mutable parent_id : int; mutable description : string; mutable category_name : string; mutable html_url : string; mutable rss_url : string; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t end module CommentCount : sig type t = { mutable approved : int; mutable awaiting_moderation : int; mutable spam : int; mutable total_comments : int; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t end module Comment : sig type t = { mutable date_created : XmlRpcDateTime.t; mutable user_id : int; mutable comment_id : int; mutable parent : int; mutable status : string; mutable content : string; mutable link : string; mutable post_id : int; mutable post_title : string; mutable author : string; mutable author_url : string; mutable author_email : string; mutable author_ip : string; mutable typ : string; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t val to_xmlrpc : t -> XmlRpc.value end module CustomField : sig type t = { mutable id : int option; mutable key : string option; mutable value : string; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t val to_xmlrpc : t -> XmlRpc.value end module Option : sig type t = { mutable desc : string; mutable readonly : bool; mutable value : string; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t end module User : sig type t = { mutable user_id : int; mutable user_login : string; mutable display_name : string; mutable user_email : string; mutable meta_value : string; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t end module PageListItem : sig type t = { mutable page_id : int; mutable page_title : string; mutable page_parent_id : int; mutable date_created : XmlRpcDateTime.t; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t end module Page : sig type t = { mutable date_created : XmlRpcDateTime.t; mutable user_id : int; mutable page_id : int; mutable page_status : string; mutable description : string; mutable title : string; mutable link : string; mutable permalink : string; mutable categories : string list; mutable excerpt : string; mutable text_more : string; mutable mt_allow_comments : bool; mutable mt_allow_pings : bool; mutable wp_slug : string; mutable wp_password : string; mutable wp_author : string; mutable wp_page_parent_id : int; mutable wp_page_parent_title : string; mutable wp_page_order : int; mutable wp_author_id : int; mutable wp_author_display_name : string; mutable custom_fields : CustomField.t list; mutable wp_page_template : string; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t val to_xmlrpc : t -> XmlRpc.value end module Post : sig type t = { mutable user_id : int; mutable post_id : int; mutable post_status : string; mutable date_created : XmlRpcDateTime.t; mutable description : string; mutable title : string; mutable link : string; mutable permalink : string; mutable categories : string list; mutable excerpt : string; mutable text_more : string; mutable mt_allow_comments : bool; mutable mt_allow_pings : bool; mutable mt_keywords : string; mutable wp_slug : string; mutable wp_password : string; mutable wp_author_id : int; mutable wp_author_display_name : string; mutable custom_fields : CustomField.t list; } val make : unit -> t val of_xmlrpc : XmlRpc.value -> t val to_xmlrpc : t -> XmlRpc.value end class api : url:string -> blog_id:int -> username:string -> password:string -> object val blog_id : int val password : string val rpc : XmlRpc.client val std_args : XmlRpc.value list val username : string method rpc : XmlRpc.client method delete_comment : int -> unit method delete_page : int -> unit method delete_post : int -> unit method edit_comment : int -> Comment.t -> unit method edit_page : int -> Page.t -> bool -> unit method edit_post : int -> Post.t -> bool -> unit method get_authors : unit -> User.t list method get_blogs : unit -> Blog.t list method get_categories : unit -> Category.t list method get_comment : int -> Comment.t method get_comment_count : int -> CommentCount.t method get_comment_status_list : unit -> (string * string) list method get_comments : ?status:string -> ?post_id:int -> ?offset:int -> ?number:int -> unit -> Comment.t list method get_options : string list -> (string * Option.t) list method get_page : int -> Page.t method get_page_list : unit -> PageListItem.t list method get_page_status_list : unit -> (string * string) list method get_page_templates : unit -> (string * string) list method get_pages : unit -> Page.t list method get_post : int -> Post.t method get_post_status_list : unit -> (string * string) list method get_recent_posts : int -> Post.t list method new_category : name:string -> slug:string -> parent_id:int -> description:string -> int method new_comment : Comment.t -> int method new_page : Page.t -> bool -> int method new_post : Post.t -> bool -> int method set_options : (string * string) list -> (string * Option.t) list method suggest_categories : string -> int -> XmlRpc.value method upload_file : name:string -> typ:string -> bits:string -> overwrite:bool -> string * string * string end xmlrpc-light-0.6.1/examples/wordpress/OCamlMakefile0000664000175000017500000007347011140336574021361 0ustar ramenramen########################################################################### # OCamlMakefile # Copyright (C) 1999-2004 Markus Mottl # # For updates see: # http://www.ocaml.info/home/ocaml_sources.html # # $Id: OCamlMakefile,v 1.72 2005/12/09 15:30:50 mottl Exp $ # ########################################################################### # Modified by damien for .glade.ml compilation # Set these variables to the names of the sources to be processed and # the result variable. Order matters during linkage! ifndef SOURCES SOURCES := foo.ml endif export SOURCES ifndef RES_CLIB_SUF RES_CLIB_SUF := _stubs endif export RES_CLIB_SUF ifndef RESULT RESULT := foo endif export RESULT export LIB_PACK_NAME ifndef DOC_FILES DOC_FILES := $(filter %.mli, $(SOURCES)) endif export DOC_FILES export BCSUFFIX export NCSUFFIX ifndef TOPSUFFIX TOPSUFFIX := .top endif export TOPSUFFIX # Eventually set include- and library-paths, libraries to link, # additional compilation-, link- and ocamlyacc-flags # Path- and library information needs not be written with "-I" and such... # Define THREADS if you need it, otherwise leave it unset (same for # USE_CAMLP4)! export THREADS export VMTHREADS export ANNOTATE export USE_CAMLP4 export INCDIRS export LIBDIRS export EXTLIBDIRS export RESULTDEPS export OCAML_DEFAULT_DIRS export LIBS export CLIBS export OCAMLFLAGS export OCAMLNCFLAGS export OCAMLBCFLAGS export OCAMLLDFLAGS export OCAMLNLDFLAGS export OCAMLBLDFLAGS ifndef OCAMLCPFLAGS OCAMLCPFLAGS := a endif export OCAMLCPFLAGS export PPFLAGS export YFLAGS export IDLFLAGS export OCAMLDOCFLAGS export OCAMLFIND_INSTFLAGS export DVIPSFLAGS export STATIC # Add a list of optional trash files that should be deleted by "make clean" export TRASH #################### variables depending on your OCaml-installation ifdef MINGW export MINGW WIN32 := 1 CFLAGS_WIN32 := -mno-cygwin endif ifdef MSVC export MSVC WIN32 := 1 ifndef STATIC CPPFLAGS_WIN32 := -DCAML_DLL endif CFLAGS_WIN32 += -nologo EXT_OBJ := obj EXT_LIB := lib ifeq ($(CC),gcc) # work around GNU Make default value ifdef THREADS CC := cl -MT else CC := cl endif endif ifeq ($(CXX),g++) # work around GNU Make default value CXX := $(CC) endif CFLAG_O := -Fo endif ifdef WIN32 EXT_CXX := cpp EXE := .exe endif ifndef EXT_OBJ EXT_OBJ := o endif ifndef EXT_LIB EXT_LIB := a endif ifndef EXT_CXX EXT_CXX := cc endif ifndef EXE EXE := # empty endif ifndef CFLAG_O CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)! endif export CC export CXX export CFLAGS export CXXFLAGS export LDFLAGS export CPPFLAGS ifndef RPATH_FLAG RPATH_FLAG := -R endif export RPATH_FLAG ifndef MSVC ifndef PIC_CFLAGS PIC_CFLAGS := -fPIC endif ifndef PIC_CPPFLAGS PIC_CPPFLAGS := -DPIC endif endif export PIC_CFLAGS export PIC_CPPFLAGS BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT)) NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT)) TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT)) ifndef OCAMLFIND OCAMLFIND := ocamlfind endif export OCAMLFIND ifndef OCAMLC OCAMLC := ocamlc endif export OCAMLC ifndef OCAMLOPT OCAMLOPT := ocamlopt endif export OCAMLOPT ifndef OCAMLMKTOP OCAMLMKTOP := ocamlmktop endif export OCAMLMKTOP ifndef OCAMLCP OCAMLCP := ocamlcp endif export OCAMLCP ifndef OCAMLDEP OCAMLDEP := ocamldep endif export OCAMLDEP ifndef OCAMLLEX OCAMLLEX := ocamllex endif export OCAMLLEX ifndef OCAMLYACC OCAMLYACC := ocamlyacc endif export OCAMLYACC ifndef OCAMLMKLIB OCAMLMKLIB := ocamlmklib endif export OCAMLMKLIB ifndef OCAML_GLADECC OCAML_GLADECC := lablgladecc2 endif export OCAML_GLADECC ifndef OCAML_GLADECC_FLAGS OCAML_GLADECC_FLAGS := endif export OCAML_GLADECC_FLAGS ifndef CAMELEON_REPORT CAMELEON_REPORT := report endif export CAMELEON_REPORT ifndef CAMELEON_REPORT_FLAGS CAMELEON_REPORT_FLAGS := endif export CAMELEON_REPORT_FLAGS ifndef CAMELEON_ZOGGY CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo endif export CAMELEON_ZOGGY ifndef CAMELEON_ZOGGY_FLAGS CAMELEON_ZOGGY_FLAGS := endif export CAMELEON_ZOGGY_FLAGS ifndef OXRIDL OXRIDL := oxridl endif export OXRIDL ifndef CAMLIDL CAMLIDL := camlidl endif export CAMLIDL ifndef CAMLIDLDLL CAMLIDLDLL := camlidldll endif export CAMLIDLDLL ifndef NOIDLHEADER MAYBE_IDL_HEADER := -header endif export NOIDLHEADER export NO_CUSTOM ifndef CAMLP4 CAMLP4 := camlp4 endif export CAMLP4 ifndef REAL_OCAMLFIND ifdef PACKS ifndef CREATE_LIB ifdef THREADS PACKS += threads endif endif empty := space := $(empty) $(empty) comma := , ifdef PREDS PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS)) PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS)) OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES) # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES) OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) else OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS)) OCAML_DEP_PACKAGES := endif OCAML_FIND_LINKPKG := -linkpkg REAL_OCAMLFIND := $(OCAMLFIND) endif endif export OCAML_FIND_PACKAGES export OCAML_DEP_PACKAGES export OCAML_FIND_LINKPKG export REAL_OCAMLFIND ifndef OCAMLDOC OCAMLDOC := ocamldoc endif export OCAMLDOC ifndef LATEX LATEX := latex endif export LATEX ifndef DVIPS DVIPS := dvips endif export DVIPS ifndef PS2PDF PS2PDF := ps2pdf endif export PS2PDF ifndef OCAMLMAKEFILE OCAMLMAKEFILE := OCamlMakefile endif export OCAMLMAKEFILE ifndef OCAMLLIBPATH OCAMLLIBPATH := \ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := $(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).o \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx $(LIB_PACK_NAME).o ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif DINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-L%) endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-ccopt -L%) else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -dtypes else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).o \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: doc/$(RESULT)/html # generates Latex-documentation ladoc: doc/$(RESULT)/latex # generates PostScript-documentation psdoc: doc/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: doc/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ -Wl,--whole-archive $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ $(OCAMLLIBPATH)/ocamlrun.a \ -Wl,--export-all-symbols \ -Wl,--no-whole-archive else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ $(OCAMLLIBPATH)/ocamlrun.lib else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(REAL_IMPL) else ifdef BYTE_OCAML $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(REAL_IMPL) else $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmx $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif .mli.cmi: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi .ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi ifdef PACK_LIB $(REAL_RESULT).cmo $(REAL_RESULT).cmx $(REAL_RESULT).o: $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(REAL_IMPL) endif .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi .c.$(EXT_OBJ): $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< .$(EXT_CXX).$(EXT_OBJ): $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi doc/$(RESULT)/html: $(DOC_FILES) #rm -rf $@ #mkdir -p $@ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ fi doc/$(RESULT)/latex: $(DOC_FILES) #rm -rf $@ #mkdir -p $@ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) \ $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES) \ -o $@/doc.tex; \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ fi doc/$(RESULT)/latex/doc.ps: doc/$(RESULT)/latex cd doc/$(RESULT)/latex && \ $(LATEX) doc.tex && \ $(LATEX) doc.tex && \ $(DVIPS) $(DVIPSFLAGS) doc.dvi -o $(@F) doc/$(RESULT)/latex/doc.pdf: doc/$(RESULT)/latex/doc.ps cd doc/$(RESULT)/latex && $(PS2PDF) $( Some "`Array" | `String "base64" -> Some "`Binary" | `String "boolean" -> Some "`Boolean" | `String "dateTime.iso8601" -> Some "`DateTime" | `String "double" -> Some "`Double" | `String "int" -> Some (if !use_int32 then "`Int32" else "`Int") | `String "string" -> Some "`String" | `String "struct" -> Some "`Struct" | `String "undefined" -> None | _ as it -> failwith (XmlRpc.dump it) let dot_to_underscore s = let s = String.copy s in let len = String.length s in for i = 0 to len - 1 do match s.[i] with | '.' -> s.[i] <- '_' | _ -> () done; s let () = let specs = ["-i", Arg.Set use_int32, "Use int32 for all integers"; "-m", Arg.Set use_multicall, "Generate lazy interface using multicall"; "-v", Arg.Set verbose, "Display verbose debugging output"] in let usage = (sprintf "Usage: %s [-i] [-m] [-v] url" Sys.argv.(0)) in Arg.parse specs (fun url' -> url := url') usage; if !url = "" then (Arg.usage specs usage; exit 2) let rpc = new XmlRpc.client ~debug:!verbose !url let methods = rpc#call "system.listMethods" [] let mc = new XmlRpc.multicall rpc let signatures = match methods with | `Array methods -> List.map (function | `String meth -> (meth, mc#call "system.methodSignature" [`String meth]) | _ -> failwith "got non-string for method name") methods | _ -> failwith "got non-array from system.listMethods" let module_map = List.fold_left (fun acc (name, signature) -> let dot_index = String.index name '.' in let module_name = String.sub name 0 dot_index in let meth_name = String.sub name (dot_index + 1) (String.length name - dot_index - 1) in let acc = if StringMap.mem module_name acc then acc else StringMap.add module_name [] acc in try match Lazy.force signature with | `Array param_lists -> StringMap.add module_name ((meth_name, Some param_lists) :: StringMap.find module_name acc) acc | _ -> StringMap.add module_name ((meth_name, None) :: StringMap.find module_name acc) acc with | XmlRpc.Error _ -> StringMap.add module_name ((meth_name, None) :: StringMap.find module_name acc) acc | Xml.Error (msg, pos) -> prerr_endline (Xml.error_msg msg); acc) StringMap.empty signatures let values map = let result = ref [] in StringMap.iter (fun _ v -> result := v :: !result) map; List.rev !result let impl_with_signature module_name func_name name = function | `Array params -> let result = List.hd params in let params = Array.of_list (List.tl params) in let param_names = String.concat " " (Array.to_list (Array.mapi (fun i _ -> sprintf "_%d" i) params)) in let param_values = String.concat "; " (Array.to_list (Array.mapi (fun i param -> match variant_name param with | Some n -> sprintf "%s _%d" n i | None -> sprintf "_%d" i) params)) in let mc_init = if !use_multicall then "if mc#executed then mc <- new XmlRpc.multicall rpc;\n " else "" in let rpc_call = if !use_multicall then "mc#call" else "rpc#call" in let begin_lazy_force, lazy_force, end_lazy_force = if !use_multicall then "lazy (", "Lazy.force ", ")" else "", "", "" in (match variant_name result with | Some result_type -> sprintf " method %s %s = %slet result = %s \"%s.%s\" [%s] in %smatch %sresult with | %s r -> r | other -> raise (Type_error (XmlRpc.dump other))%s" func_name (if param_names = "" then "()" else param_names) mc_init rpc_call module_name name param_values begin_lazy_force lazy_force (if result_type = "`Int32" then "`Int r -> Int32.of_int r | `Int32" else result_type) end_lazy_force | None -> sprintf " method %s %s = %s%s \"%s.%s\" [%s]" func_name (if param_names = "" then "()" else param_names) mc_init rpc_call module_name name param_values) | _ -> failwith "method signature was not an array" let impl_without_signature module_name func_name name = let mc_init = if !use_multicall then "if mc#executed then mc <- new XmlRpc.multicall rpc;\n " else "" in let rpc_call = if !use_multicall then "mc#call" else "rpc#call" in sprintf " method %s params = %s%s \"%s.%s\" params" func_name mc_init rpc_call module_name name let impls module_name meths = let seen_names = Hashtbl.create 0 in let make_func_name name = let base_name = dot_to_underscore name in let func_name = ref base_name in let counter = ref 1 in while Hashtbl.mem seen_names !func_name do incr counter; func_name := base_name ^ (string_of_int !counter) done; Hashtbl.replace seen_names !func_name 0; !func_name in String.concat "\n\n" (List.flatten (List.map (function | (name, Some param_lists) -> List.map (fun signature -> impl_with_signature module_name (make_func_name name) name signature) param_lists | (name, None) -> [impl_without_signature module_name (make_func_name name) name]) meths)) let objects = String.concat "\n" (values (StringMap.mapi (fun module_name meths -> sprintf " method %s = object %s end " module_name (impls module_name meths)) module_map)) let multicall = if !use_multicall then " val mutable mc = new XmlRpc.multicall rpc method mc = mc " else "" let () = printf "(* Automatically generated from an XML-RPC server by running the following command: %s *) exception Type_error of string class client url = let rpc = new XmlRpc.client url in object (self) method rpc = rpc %s %s end " (String.concat " " (Array.to_list Sys.argv)) multicall objects xmlrpc-light-0.6.1/examples/genclient/OCamlMakefile0000664000175000017500000007347011140336575021302 0ustar ramenramen########################################################################### # OCamlMakefile # Copyright (C) 1999-2004 Markus Mottl # # For updates see: # http://www.ocaml.info/home/ocaml_sources.html # # $Id: OCamlMakefile,v 1.72 2005/12/09 15:30:50 mottl Exp $ # ########################################################################### # Modified by damien for .glade.ml compilation # Set these variables to the names of the sources to be processed and # the result variable. Order matters during linkage! ifndef SOURCES SOURCES := foo.ml endif export SOURCES ifndef RES_CLIB_SUF RES_CLIB_SUF := _stubs endif export RES_CLIB_SUF ifndef RESULT RESULT := foo endif export RESULT export LIB_PACK_NAME ifndef DOC_FILES DOC_FILES := $(filter %.mli, $(SOURCES)) endif export DOC_FILES export BCSUFFIX export NCSUFFIX ifndef TOPSUFFIX TOPSUFFIX := .top endif export TOPSUFFIX # Eventually set include- and library-paths, libraries to link, # additional compilation-, link- and ocamlyacc-flags # Path- and library information needs not be written with "-I" and such... # Define THREADS if you need it, otherwise leave it unset (same for # USE_CAMLP4)! export THREADS export VMTHREADS export ANNOTATE export USE_CAMLP4 export INCDIRS export LIBDIRS export EXTLIBDIRS export RESULTDEPS export OCAML_DEFAULT_DIRS export LIBS export CLIBS export OCAMLFLAGS export OCAMLNCFLAGS export OCAMLBCFLAGS export OCAMLLDFLAGS export OCAMLNLDFLAGS export OCAMLBLDFLAGS ifndef OCAMLCPFLAGS OCAMLCPFLAGS := a endif export OCAMLCPFLAGS export PPFLAGS export YFLAGS export IDLFLAGS export OCAMLDOCFLAGS export OCAMLFIND_INSTFLAGS export DVIPSFLAGS export STATIC # Add a list of optional trash files that should be deleted by "make clean" export TRASH #################### variables depending on your OCaml-installation ifdef MINGW export MINGW WIN32 := 1 CFLAGS_WIN32 := -mno-cygwin endif ifdef MSVC export MSVC WIN32 := 1 ifndef STATIC CPPFLAGS_WIN32 := -DCAML_DLL endif CFLAGS_WIN32 += -nologo EXT_OBJ := obj EXT_LIB := lib ifeq ($(CC),gcc) # work around GNU Make default value ifdef THREADS CC := cl -MT else CC := cl endif endif ifeq ($(CXX),g++) # work around GNU Make default value CXX := $(CC) endif CFLAG_O := -Fo endif ifdef WIN32 EXT_CXX := cpp EXE := .exe endif ifndef EXT_OBJ EXT_OBJ := o endif ifndef EXT_LIB EXT_LIB := a endif ifndef EXT_CXX EXT_CXX := cc endif ifndef EXE EXE := # empty endif ifndef CFLAG_O CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)! endif export CC export CXX export CFLAGS export CXXFLAGS export LDFLAGS export CPPFLAGS ifndef RPATH_FLAG RPATH_FLAG := -R endif export RPATH_FLAG ifndef MSVC ifndef PIC_CFLAGS PIC_CFLAGS := -fPIC endif ifndef PIC_CPPFLAGS PIC_CPPFLAGS := -DPIC endif endif export PIC_CFLAGS export PIC_CPPFLAGS BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT)) NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT)) TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT)) ifndef OCAMLFIND OCAMLFIND := ocamlfind endif export OCAMLFIND ifndef OCAMLC OCAMLC := ocamlc endif export OCAMLC ifndef OCAMLOPT OCAMLOPT := ocamlopt endif export OCAMLOPT ifndef OCAMLMKTOP OCAMLMKTOP := ocamlmktop endif export OCAMLMKTOP ifndef OCAMLCP OCAMLCP := ocamlcp endif export OCAMLCP ifndef OCAMLDEP OCAMLDEP := ocamldep endif export OCAMLDEP ifndef OCAMLLEX OCAMLLEX := ocamllex endif export OCAMLLEX ifndef OCAMLYACC OCAMLYACC := ocamlyacc endif export OCAMLYACC ifndef OCAMLMKLIB OCAMLMKLIB := ocamlmklib endif export OCAMLMKLIB ifndef OCAML_GLADECC OCAML_GLADECC := lablgladecc2 endif export OCAML_GLADECC ifndef OCAML_GLADECC_FLAGS OCAML_GLADECC_FLAGS := endif export OCAML_GLADECC_FLAGS ifndef CAMELEON_REPORT CAMELEON_REPORT := report endif export CAMELEON_REPORT ifndef CAMELEON_REPORT_FLAGS CAMELEON_REPORT_FLAGS := endif export CAMELEON_REPORT_FLAGS ifndef CAMELEON_ZOGGY CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo endif export CAMELEON_ZOGGY ifndef CAMELEON_ZOGGY_FLAGS CAMELEON_ZOGGY_FLAGS := endif export CAMELEON_ZOGGY_FLAGS ifndef OXRIDL OXRIDL := oxridl endif export OXRIDL ifndef CAMLIDL CAMLIDL := camlidl endif export CAMLIDL ifndef CAMLIDLDLL CAMLIDLDLL := camlidldll endif export CAMLIDLDLL ifndef NOIDLHEADER MAYBE_IDL_HEADER := -header endif export NOIDLHEADER export NO_CUSTOM ifndef CAMLP4 CAMLP4 := camlp4 endif export CAMLP4 ifndef REAL_OCAMLFIND ifdef PACKS ifndef CREATE_LIB ifdef THREADS PACKS += threads endif endif empty := space := $(empty) $(empty) comma := , ifdef PREDS PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS)) PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS)) OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES) # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES) OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES) else OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS)) OCAML_DEP_PACKAGES := endif OCAML_FIND_LINKPKG := -linkpkg REAL_OCAMLFIND := $(OCAMLFIND) endif endif export OCAML_FIND_PACKAGES export OCAML_DEP_PACKAGES export OCAML_FIND_LINKPKG export REAL_OCAMLFIND ifndef OCAMLDOC OCAMLDOC := ocamldoc endif export OCAMLDOC ifndef LATEX LATEX := latex endif export LATEX ifndef DVIPS DVIPS := dvips endif export DVIPS ifndef PS2PDF PS2PDF := ps2pdf endif export PS2PDF ifndef OCAMLMAKEFILE OCAMLMAKEFILE := OCamlMakefile endif export OCAMLMAKEFILE ifndef OCAMLLIBPATH OCAMLLIBPATH := \ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := $(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).o \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx $(LIB_PACK_NAME).o ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif DINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-L%) endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-ccopt -L%) else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -dtypes else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).o \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: doc/$(RESULT)/html # generates Latex-documentation ladoc: doc/$(RESULT)/latex # generates PostScript-documentation psdoc: doc/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: doc/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ -Wl,--whole-archive $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ $(OCAMLLIBPATH)/ocamlrun.a \ -Wl,--export-all-symbols \ -Wl,--no-whole-archive else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ $(OCAMLLIBPATH)/ocamlrun.lib else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(REAL_IMPL) else ifdef BYTE_OCAML $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(REAL_IMPL) else $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmx $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif .mli.cmi: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi .ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi ifdef PACK_LIB $(REAL_RESULT).cmo $(REAL_RESULT).cmx $(REAL_RESULT).o: $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(REAL_IMPL) endif .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi .c.$(EXT_OBJ): $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< .$(EXT_CXX).$(EXT_OBJ): $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi doc/$(RESULT)/html: $(DOC_FILES) #rm -rf $@ #mkdir -p $@ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ fi doc/$(RESULT)/latex: $(DOC_FILES) #rm -rf $@ #mkdir -p $@ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) \ $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES) \ -o $@/doc.tex; \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ fi doc/$(RESULT)/latex/doc.ps: doc/$(RESULT)/latex cd doc/$(RESULT)/latex && \ $(LATEX) doc.tex && \ $(LATEX) doc.tex && \ $(DVIPS) $(DVIPSFLAGS) doc.dvi -o $(@F) doc/$(RESULT)/latex/doc.pdf: doc/$(RESULT)/latex/doc.ps cd doc/$(RESULT)/latex && $(PS2PDF) $(/dev/null -where || echo /usr/lib/ocaml) endif export OCAMLLIBPATH ifndef OCAML_LIB_INSTALL OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib endif export OCAML_LIB_INSTALL ########################################################################### #################### change following sections only if #################### you know what you are doing! # delete target files when a build command fails .PHONY: .DELETE_ON_ERROR .DELETE_ON_ERROR: # for pedants using "--warn-undefined-variables" export MAYBE_IDL export REAL_RESULT export CAMLIDLFLAGS export THREAD_FLAG export RES_CLIB export MAKEDLL export ANNOT_FLAG export C_OXRIDL export SUBPROJS export CFLAGS_WIN32 export CPPFLAGS_WIN32 INCFLAGS := SHELL := /bin/sh MLDEPDIR := ._d BCDIDIR := ._bcdi NCDIDIR := ._ncdi FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.$(EXT_CXX) %.rep %.zog %.glade FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES)) SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED)))) FILTERED_REP := $(filter %.rep, $(FILTERED)) DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d) AUTO_REP := $(FILTERED_REP:.rep=.ml) FILTERED_ZOG := $(filter %.zog, $(FILTERED)) DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d) AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml) FILTERED_GLADE := $(filter %.glade, $(FILTERED)) DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d) AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml) FILTERED_ML := $(filter %.ml, $(FILTERED)) DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d) FILTERED_MLI := $(filter %.mli, $(FILTERED)) DEP_MLI := $(FILTERED_MLI:.mli=.di) FILTERED_MLL := $(filter %.mll, $(FILTERED)) DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d) AUTO_MLL := $(FILTERED_MLL:.mll=.ml) FILTERED_MLY := $(filter %.mly, $(FILTERED)) DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di) AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml) FILTERED_IDL := $(filter %.idl, $(FILTERED)) DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di) C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c) ifndef NOIDLHEADER C_IDL += $(FILTERED_IDL:.idl=.h) endif OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ)) AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL) FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED)) DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di) AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL) FILTERED_C_CXX := $(filter %.c %.$(EXT_CXX), $(FILTERED)) OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ)) OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ)) PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE) ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE) MLDEPS := $(filter %.d, $(ALL_DEPS)) MLIDEPS := $(filter %.di, $(ALL_DEPS)) BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di) NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di) ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED)) IMPLO_INTF := $(ALLML:%.mli=%.mli.__) IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \ $(basename $(file)).cmi $(basename $(file)).cmo) IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF)) IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi) IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx) INTF := $(filter %.cmi, $(IMPLO_INTF)) IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF)) IMPL_CMX := $(IMPL_CMO:.cmo=.cmx) IMPL_ASM := $(IMPL_CMO:.cmo=.asm) IMPL_S := $(IMPL_CMO:.cmo=.s) OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX) OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK) EXECS := $(addsuffix $(EXE), \ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT))) ifdef WIN32 EXECS += $(BCRESULT).dll $(NCRESULT).dll endif CLIB_BASE := $(RESULT)$(RES_CLIB_SUF) ifneq ($(strip $(OBJ_LINK)),) RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB) endif ifdef WIN32 DLLSONAME := $(CLIB_BASE).dll else DLLSONAME := dll$(CLIB_BASE).so endif NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).o \ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx $(LIB_PACK_NAME).o ifndef STATIC NONEXECS += $(DLLSONAME) endif ifndef LIBINSTALL_FILES LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) LIBINSTALL_FILES += $(DLLSONAME) endif endif endif export LIBINSTALL_FILES ifdef WIN32 # some extra stuff is created while linking DLLs NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib endif TARGETS := $(EXECS) $(NONEXECS) # If there are IDL-files ifneq ($(strip $(FILTERED_IDL)),) MAYBE_IDL := -cclib -lcamlidl endif ifdef USE_CAMLP4 CAMLP4PATH := \ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/lib/camlp4) INCFLAGS := -I $(CAMLP4PATH) CINCFLAGS := -I$(CAMLP4PATH) endif DINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-I %) CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%) ifndef MSVC CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \ $(EXTLIBDIRS:%=-L%) $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-L%) endif ifndef PROFILING INTF_OCAMLC := $(OCAMLC) else ifndef THREADS INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS) else # OCaml does not support profiling byte code # with threads (yet), therefore we force an error. ifndef REAL_OCAMLC $(error Profiling of multithreaded byte code not yet supported by OCaml) endif INTF_OCAMLC := $(OCAMLC) endif endif ifndef MSVC COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \ $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%) \ $(OCAML_DEFAULT_DIRS:%=-ccopt -L%) else COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) " endif CLIBS_OPTS := $(CLIBS:%=-cclib -l%) ifdef MSVC ifndef STATIC # MSVC libraries do not have 'lib' prefix CLIBS_OPTS := $(CLIBS:%=-cclib %.lib) endif endif ifneq ($(strip $(OBJ_LINK)),) ifdef CREATE_LIB OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL) else OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL) endif else OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL) endif # If we have to make byte-code ifndef REAL_OCAMLC BYTE_OCAML := y # EXTRADEPS is added dependencies we have to insert for all # executable files we generate. Ideally it should be all of the # libraries we use, but it's hard to find the ones that get searched on # the path since I don't know the paths built into the compiler, so # just include the ones with slashes in their names. EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) REAL_OCAMLC := $(INTF_OCAMLC) REAL_IMPL := $(IMPL_CMO) REAL_IMPL_INTF := $(IMPLO_INTF) IMPL_SUF := .cmo DEPFLAGS := MAKE_DEPS := $(MLDEPS) $(BCDEPIS) ifdef CREATE_LIB override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) ifndef STATIC ifneq ($(strip $(OBJ_LINK)),) MAKEDLL := $(DLLSONAME) ALL_LDFLAGS := -dllib $(DLLSONAME) endif endif endif ifndef NO_CUSTOM ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS))" "" ALL_LDFLAGS += -custom endif endif ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \ $(COMMON_LDFLAGS) $(LIBS:%=%.cma) CAMLIDLDLLFLAGS := ifdef THREADS ifdef VMTHREADS THREAD_FLAG := -vmthread else THREAD_FLAG := -thread endif ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS) endif endif endif # we have to make native-code else EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i)))) ifndef PROFILING SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS) PLDFLAGS := else SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS) PLDFLAGS := -p endif REAL_IMPL := $(IMPL_CMX) REAL_IMPL_INTF := $(IMPLX_INTF) IMPL_SUF := .cmx override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS) DEPFLAGS := -native MAKE_DEPS := $(MLDEPS) $(NCDEPIS) ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS) CAMLIDLDLLFLAGS := -opt ifndef CREATE_LIB ALL_LDFLAGS += $(LIBS:%=%.cmxa) else override CFLAGS := $(PIC_CFLAGS) $(CFLAGS) override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS) endif ifdef THREADS THREAD_FLAG := -thread ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS) ifndef CREATE_LIB ifndef REAL_OCAMLFIND ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS) endif endif endif endif export MAKE_DEPS ifdef ANNOTATE ANNOT_FLAG := -dtypes else endif ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS) ifdef make_deps -include $(MAKE_DEPS) PRE_TARGETS := endif ########################################################################### # USER RULES # Call "OCamlMakefile QUIET=" to get rid of all of the @'s. QUIET=@ # generates byte-code (default) byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes bc: byte-code byte-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes bcnl: byte-code-nolink top: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes # generates native-code native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes nc: native-code native-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncnl: native-code-nolink # generates byte-code libraries byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" \ CREATE_LIB=yes \ make_deps=yes bcl: byte-code-library # generates native-code libraries native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes ncl: native-code-library ifdef WIN32 # generates byte-code dll byte-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).dll \ REAL_RESULT="$(BCRESULT)" \ make_deps=yes bcd: byte-code-dll # generates native-code dll native-code-dll: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).dll \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ make_deps=yes ncd: native-code-dll endif # generates byte-code with debugging information debug-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dc: debug-code debug-code-nolink: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcnl: debug-code-nolink # generates byte-code libraries with debugging information debug-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" make_deps=yes \ CREATE_LIB=yes \ OCAMLFLAGS="-g $(OCAMLFLAGS)" \ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)" dcl: debug-code-library # generates byte-code for profiling profiling-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ make_deps=yes pbc: profiling-byte-code # generates native-code profiling-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PROFILING="y" \ make_deps=yes pnc: profiling-native-code # generates byte-code libraries profiling-byte-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(BCRESULT).cma \ REAL_RESULT="$(BCRESULT)" PROFILING="y" \ CREATE_LIB=yes \ make_deps=yes pbcl: profiling-byte-code-library # generates native-code libraries profiling-native-code-library: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(RES_CLIB) $(NCRESULT).cmxa \ REAL_RESULT="$(NCRESULT)" PROFILING="y" \ REAL_OCAMLC="$(OCAMLOPT)" \ CREATE_LIB=yes \ make_deps=yes pncl: profiling-native-code-library # packs byte-code objects pack-byte-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \ REAL_RESULT="$(BCRESULT)" \ PACK_LIB=yes make_deps=yes pabc: pack-byte-code # packs native-code objects pack-native-code: $(PRE_TARGETS) $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \ $(NCRESULT).cmx $(NCRESULT).o \ REAL_RESULT="$(NCRESULT)" \ REAL_OCAMLC="$(OCAMLOPT)" \ PACK_LIB=yes make_deps=yes panc: pack-native-code # generates HTML-documentation htdoc: doc/$(RESULT)/html # generates Latex-documentation ladoc: doc/$(RESULT)/latex # generates PostScript-documentation psdoc: doc/$(RESULT)/latex/doc.ps # generates PDF-documentation pdfdoc: doc/$(RESULT)/latex/doc.pdf # generates all supported forms of documentation doc: htdoc ladoc psdoc pdfdoc ########################################################################### # LOW LEVEL RULES $(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) nolink: $(REAL_IMPL_INTF) $(OBJ_LINK) ifdef WIN32 $(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK) $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \ -o $@ $(REAL_IMPL) endif %$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(OCAMLMKTOP) \ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \ $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \ $(REAL_IMPL) .SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .$(EXT_CXX) .h .so \ .rep .zog .glade ifndef STATIC ifdef MINGW $(DLLSONAME): $(OBJ_LINK) $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \ -Wl,--whole-archive $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \ $(OCAMLLIBPATH)/ocamlrun.a \ -Wl,--export-all-symbols \ -Wl,--no-whole-archive else ifdef MSVC $(DLLSONAME): $(OBJ_LINK) link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \ $(OCAMLLIBPATH)/ocamlrun.lib else $(DLLSONAME): $(OBJ_LINK) $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \ $(OCAMLMKLIB_FLAGS) endif endif endif ifndef LIB_PACK_NAME $(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(REAL_IMPL) $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(REAL_IMPL) else ifdef BYTE_OCAML $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(REAL_IMPL) else $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmx $(REAL_IMPL) endif $(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(OCAMLBLDFLAGS) $(LIB_PACK_NAME).cmo $(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS) $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) \ $(OCAMLNLDFLAGS) -o $@ $(LIB_PACK_NAME).cmx endif $(RES_CLIB): $(OBJ_LINK) ifndef MSVC ifneq ($(strip $(OBJ_LINK)),) $(AR) rcs $@ $(OBJ_LINK) endif else ifneq ($(strip $(OBJ_LINK)),) lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK) endif endif .mli.cmi: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \ $(OCAMLFLAGS) $(INCFLAGS) $<; \ fi .ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS) $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c $(ALL_OCAMLCFLAGS) $<; \ else \ echo $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \ fi ifdef PACK_LIB $(REAL_RESULT).cmo $(REAL_RESULT).cmx $(REAL_RESULT).o: $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack $(ALL_LDFLAGS) \ $(OBJS_LIBS) -o $@ $(REAL_IMPL) endif .PRECIOUS: %.ml %.ml: %.mll $(OCAMLLEX) $< .PRECIOUS: %.ml %.mli %.ml %.mli: %.mly $(OCAMLYACC) $(YFLAGS) $< $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \ if [ ! -z "$$pp" ]; then \ mv $*.ml $*.ml.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \ cat $*.ml.temporary >> $*.ml; \ rm $*.ml.temporary; \ mv $*.mli $*.mli.temporary; \ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \ cat $*.mli.temporary >> $*.mli; \ rm $*.mli.temporary; \ fi .PRECIOUS: %.ml %.ml: %.rep $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $< .PRECIOUS: %.ml %.ml: %.zog $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@ .PRECIOUS: %.ml %.ml: %.glade $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@ .PRECIOUS: %.ml %.mli %.ml %.mli: %.oxridl $(OXRIDL) $< .PRECIOUS: %.ml %.mli %_stubs.c %.h %.ml %.mli %_stubs.c %.h: %.idl $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \ $(CAMLIDLFLAGS) $< $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi .c.$(EXT_OBJ): $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \ $(CPPFLAGS) $(CPPFLAGS_WIN32) \ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $< .$(EXT_CXX).$(EXT_OBJ): $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \ -I'$(OCAMLLIBPATH)' \ $< $(CFLAG_O)$@ $(MLDEPDIR)/%.d: %.ml $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi $(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< > $@; \ else \ echo $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \ -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \ fi doc/$(RESULT)/html: $(DOC_FILES) mkdir -p $@ find $@ -maxdepth 1 -type f -delete $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -html -d $@ $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -html -d $@ $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES); \ fi doc/$(RESULT)/latex: $(DOC_FILES) mkdir -p $@ find $@ -maxdepth 1 -type f -delete $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ if [ -z "$$pp" ]; then \ echo $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) \ $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES) \ -o $@/doc.tex; \ else \ echo $(OCAMLDOC) -pp \"$$pp $(PPFLAGS)\" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ $(OCAMLDOC) -pp "$$pp $(PPFLAGS)" -latex $(OCAMLDOCFLAGS) \ $(INCFLAGS) $(DOC_FILES) -o $@/doc.tex; \ fi doc/$(RESULT)/latex/doc.ps: doc/$(RESULT)/latex cd doc/$(RESULT)/latex && \ $(LATEX) doc.tex && \ $(LATEX) doc.tex && \ $(DVIPS) $(DVIPSFLAGS) doc.dvi -o $(@F) doc/$(RESULT)/latex/doc.pdf: doc/$(RESULT)/latex/doc.ps cd doc/$(RESULT)/latex && $(PS2PDF) $( `String "Hello!"); server#run () See the Ocamldoc-generated documentation in the "doc" directory for more details. Contributors: ------------- Dave Benjamin (dave@ramenlabs.com) License: -------- See LICENSE xmlrpc-light-0.6.1/XmlRpcDateTime.ml0000664000175000017500000000673511140336575016314 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) exception Parse_error of string type t = (int * int * int * int * int * int * int) let local_tz_offset () = let time = Unix.time () in let utc = fst (Unix.mktime (Unix.gmtime time)) in int_of_float (time -. utc) / 60 let from_unixtm tm = (tm.Unix.tm_year + 1900, tm.Unix.tm_mon + 1, tm.Unix.tm_mday, tm.Unix.tm_hour, tm.Unix.tm_min, tm.Unix.tm_sec, local_tz_offset ()) let from_unixtm_utc tm = (tm.Unix.tm_year + 1900, tm.Unix.tm_mon + 1, tm.Unix.tm_mday, tm.Unix.tm_hour, tm.Unix.tm_min, tm.Unix.tm_sec, 0) let from_unixfloat time = from_unixtm (Unix.localtime time) let from_unixfloat_utc time = from_unixtm_utc (Unix.localtime time) let to_unixfloat_utc (y, m, d, h, m', s, tz) = fst (Unix.mktime {Unix.tm_year=y - 1900; tm_mon=m - 1; tm_mday=d; tm_hour=h; tm_min=m'; tm_sec=s; tm_wday=0; tm_yday=0; tm_isdst=false}) -. (float tz *. 60.0) let to_unixfloat dt = to_unixfloat_utc dt +. (float (local_tz_offset ()) *. 60.0) let to_unixtm dt = Unix.localtime (to_unixfloat dt) let to_unixtm_utc dt = Unix.localtime (to_unixfloat_utc dt) let now () = from_unixfloat (Unix.time ()) let now_utc () = from_unixfloat_utc (Unix.time () -. (float (local_tz_offset ()) *. 60.0)) let set_tz_offset offset dt = let time = to_unixfloat_utc dt +. (float offset *. 60.0) in match from_unixfloat_utc time with (y, m, d, h, m', s, _) -> (y, m, d, h, m', s, offset) let fix_tz_offset offset dt = match dt with (y, m, d, h, m', s, _) -> (y, m, d, h, m', s, offset) let compare a b = compare (to_unixfloat_utc a) (to_unixfloat_utc b) let equal a b = (to_unixfloat_utc a) = (to_unixfloat_utc b) let hash a = Hashtbl.hash (to_unixfloat_utc a) let string_of_tz_offset offset = if offset = 0 then "" else Printf.sprintf "%c%02d:%02d" (if offset >= 0 then '+' else '-') (abs (offset / 60)) (abs (offset mod 60)) let tz_offset_of_string = function | "" | "Z" -> 0 | string -> Scanf.sscanf string "%c%02d%_[:]%02d" (fun sign hour min -> min + hour * (if sign = '-' then -60 else 60)) let to_string (y, m, d, h, m', s, tz_offset) = Printf.sprintf "%04d%02d%02dT%02d:%02d:%02d%s" y m d h m' s (string_of_tz_offset tz_offset) let of_string string = try Scanf.sscanf string "%04d%_[-]%02d%_[-]%02d%_[T ]%02d:%02d:%02d%s" (fun y m d h m' s tz -> (y, m, d, h, m', s, (tz_offset_of_string tz))) with | Scanf.Scan_failure _ | End_of_file -> raise (Parse_error string) xmlrpc-light-0.6.1/XmlRpcDateTime.mli0000664000175000017500000000643111140336575016456 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) (** Date/time type. *) (** {2 Types} *) (** Raised by {!of_string} if a string could not be parsed. The exception contains the input string. *) exception Parse_error of string (** Type of XmlRpc-compatible date/time values. (year, month, day, hour, minute, second, time zone offset in minutes) *) type t = (int * int * int * int * int * int * int) (** {2 Comparison} *) (** Standard comparator for date/time values. Converts all values to UTC before comparing to ensure correct behavior with values of differing time zones. *) val compare : t -> t -> int (** Standard equality function for date/time values. Converts all values to UTC before comparing. *) val equal : t -> t -> bool (** Standard hash function for date/time values. Converts values to UTC before hashing. *) val hash : t -> int (** {2 Current date and time} *) (** Returns the current date and time in the local time zone. *) val now : unit -> t (** Returns the current date and time in UTC. *) val now_utc : unit -> t (** {2 Time zone adjustments} *) (** Adjusts the time zone offset, preserving equality. *) val set_tz_offset : int -> t -> t (** Forces the time zone offset to a different value, ignoring all other fields. Use this to correct the time zone of a date/time value that was received without a time zone offset and is known not to be UTC. *) val fix_tz_offset : int -> t -> t (** {2 Conversion} *) (** Builds a date/time value from epoch seconds in the local time zone. *) val from_unixfloat : float -> t (** Builds a date/time value from epoch seconds in UTC. *) val from_unixfloat_utc : float -> t (** Converts a date/time value to epoch seconds in the local time zone. *) val to_unixfloat : t -> float (** Converts a date/time value to epoch seconds in UTC. *) val to_unixfloat_utc : t -> float (** Builds a date/time value from a Unix.tm value in the local time zone. *) val from_unixtm : Unix.tm -> t (** Builds a date/time value from a Unix.tm value in UTC. *) val from_unixtm_utc : Unix.tm -> t (** Converts a date/time value to a Unix.tm value in the local time zone. *) val to_unixtm : t -> Unix.tm (** Converts a date/time value to a Unix.tm value in UTC. *) val to_unixtm_utc : t -> Unix.tm (** {2 ISO-8601 parsing and generation} *) (** Parses an (XmlRpc-flavor) ISO-8601 date/time value from a string. *) val of_string : string -> t (** Generates an ISO-8601 string from a date/time value. *) val to_string : t -> string xmlrpc-light-0.6.1/XmlRpc.mli0000664000175000017500000002720111140336575015037 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) (** XmlRpc Light. XmlRpc Light is a minimal XmlRpc library based on Xml Light and Ocamlnet. It provides a type for values, a client class with a simple calling interface, and low-level tools that can be used to implement a server. {i (c) 2007-2009 Dave Benjamin} *) (** Version of XmlRpc-Light as a string. *) val version : string (** {2 High-level interface} *) (** Example: {[ let rpc = new XmlRpc.client "http://localhost:8000" in let result = rpc#call "echo" [`String "hello!"] in print_endline (XmlRpc.dump result) ]} *) (** Raised for all errors including XmlRpc faults (code, string). *) exception Error of (int * string) (** Polymorphic variant type for XmlRpc values: - [`Array]: An ordered list of values - [`Binary]: A string containing binary data - [`Boolean]: A boolean - [`DateTime]: A date/time value - [`Double]: A floating-point value - [`Int]: An integer - [`Int32]: A 32-bit integer - [`Nil]: A null value - [`String]: A string - [`Struct]: An association list of (name, value) pairs Note that base64-encoding of [`Binary] values is done automatically. You do not need to do the encoding yourself. *) type value = [ `Array of value list | `Binary of string | `Boolean of bool | `DateTime of XmlRpcDateTime.t | `Double of float | `Int of int | `Int32 of int32 | `Nil | `String of string | `Struct of (string * value) list ] (** Class for XmlRpc clients. Takes a single mandatory argument, [url]. If [url] is of the form "http://username:password@...", basic authentication will be used. If [url] starts with "https", Curl will be used instead of Ocamlnet. The "curl" command-line program must be in your path for this to work. You can use the [insecure_ssl] setting to allow connections to servers with self-signed certificates; by default this is false and certificates must be valid. [timeout] can be used to specify the maximum amount of time elapsed before a connection is cancelled. It defaults to 300.0 seconds. [headers] may contain an array of (name, value) pairs of additional headers to send with each request. The [useragent] setting provides a convenient way to change the User-Agent header, which defaults to "XmlRpc-Light/". The [debug] setting, if true, will enable verbose debugging output to the standard error stream. *) class client : ?debug:bool -> ?headers:(string * string) list -> ?insecure_ssl:bool -> ?timeout:float -> ?useragent:string -> string -> object (** Url of the remote XmlRpc server. *) val url : string (** If true, Xml messages will be printed to standard error. *) val mutable debug : bool (** List of custom HTTP headers to send with each request. *) val mutable headers : (string * string) list (** If true, SSL will be allowed even if the certificate is self-signed. *) val mutable insecure_ssl : bool (** Maximum time to wait for a request to complete, in seconds. *) val mutable timeout : float (** User-agent to send in request headers. *) val mutable useragent : string (** Gets [url]. *) method url : string (** Gets [debug]. *) method debug : bool (** Sets [debug]. *) method set_debug : bool -> unit (** Gets [headers]. *) method headers : (string * string) list (** Sets [headers]. *) method set_headers : (string * string) list -> unit (** Gets [insecure_ssl]. *) method insecure_ssl : bool (** Sets [insecure_ssl]. *) method set_insecure_ssl : bool -> unit (** Gets [timeout]. *) method timeout : float (** Sets [timeout]. *) method set_timeout : float -> unit (** Gets [useragent]. *) method useragent : string (** Sets [useragent]. *) method set_useragent : string -> unit (** Sets an alternate Base-64 binary encoding function. *) method set_base64_encoder : (string -> string) -> unit (** Sets an alternate Base-64 binary decoding function. *) method set_base64_decoder : (string -> string) -> unit (** Sets an alternate ISO-8601 date/time encoding function. *) method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit (** Sets an alternate ISO-8601 date/time decoding function. *) method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit (** [call name params] invokes an XmlRpc method and returns the result, or raises {!XmlRpc.Error} on error. *) method call : string -> value list -> value end (** Convenience class for [system.multicall] calls. Instances take an {!XmlRpc.client} as an argument: {[ # let mc = new XmlRpc.multicall client;; val mc : XmlRpc.multicall = ]} The "call" method works like [client#call], but it returns a lazy value: {[ # let a = mc#call "demo.addTwoNumbers" [`Int 3; `Int 4];; val a : XmlRpc.value Lazy.t = # let b = mc#call "demo.addTwoNumbers" [`Int 42; `String "oh noes!"];; val b : XmlRpc.value Lazy.t = # let c = mc#call "demo.addTwoNumbers" [`Double 3.0; `Double 4.0];; val c : XmlRpc.value Lazy.t = ]} At this point, the call has not been executed yet: {[ # mc#executed;; -- : bool = false ]} As soon as one of the return values is forced, the call is executed: {[ # Lazy.force a;; -- : XmlRpc.value = `Int 7 # mc#executed;; -- : bool = true ]} Once a call has been executed, this instance cannot be used to make any further calls; instead, a new [multicall] instance must be created: {[ # mc#call "demo.addTwoNumbers" [`Int 2; `Int 2];; Exception: Failure "multicall#call: already executed". ]} If an XmlRpc fault occurred, the exception will be thrown when the lazy value is forced: {[ # Lazy.force b;; Exception: XmlRpc.Error (-32602, "server error. invalid method parameters"). ]} This will not prevent further methods from executing successfully: {[ # Lazy.force c;; -- : XmlRpc.value = `Double 7. ]} It is possible for a [multicall] to be executed but not completed, for example if a transport error occurs. Aside from catching the exception, the [completed] property indicates if the call actually went through or not: {[ # mc#completed;; -- : bool = true ]} It is not necessary to use lazy values. Instead, the call can be executed explicitly, and the results can be retrieved by number: {[ # let mc = new XmlRpc.multicall client;; val mc : XmlRpc.multicall = # ignore (mc#call "demo.addTwoNumbers" [`Int 2; `Int 2]);; -- : unit = () # ignore (mc#call "demo.addTwoNumbers" [`Int 3; `Int 3]);; -- : unit = () # mc#result 1;; -- : XmlRpc.value = `Int 6 ]} *) class multicall : client -> object (** Adds a call to this [multicall] instance. If the call has already executed, the following exception will be raised: Failure "multicall#call: already executed". *) method call : string -> value list -> value Lazy.t (** Forces the call to execute immediately. If the call has already executed and completed successfully, the following exception will be raised: Failure "multicall#execute: already completed". *) method execute : unit -> unit (** Returns a [multicall] result, executing the call if necessary. The results are numbered starting with zero. *) method result : int -> value (** True if the call has executed, whether or not it succeeded. *) method executed : bool (** True of the call has executed and completed successfully. *) method completed : bool end (** {2 Utility functions} *) (** Converts an XmlRpc value to a human-readable string. *) val dump : value -> string (** {2 Low-level interface} *) (** Type for XmlRpc messages. *) type message = | MethodCall of (string * value list) | MethodResponse of value | Fault of (int * string) (** Converts an Xml Light element to an XmlRpc message. *) val message_of_xml_element : ?base64_decoder:(string -> string) -> ?datetime_decoder:(string -> XmlRpcDateTime.t) -> Xml.xml -> message (** Converts an XmlRpc message to an Xml Light element. *) val xml_element_of_message : ?base64_encoder:(string -> string) -> ?datetime_encoder:(XmlRpcDateTime.t -> string) -> message -> Xml.xml (** Converts an Xml Light element to an XmlRpc value. *) val value_of_xml_element : ?base64_decoder:(string -> string) -> ?datetime_decoder:(string -> XmlRpcDateTime.t) -> Xml.xml -> value (** Converts an XmlRpc value to an Xml Light element. *) val xml_element_of_value : ?base64_encoder:(string -> string) -> ?datetime_encoder:(XmlRpcDateTime.t -> string) -> value -> Xml.xml (** {2 Server tools} *) (** Creates a function from string (Xml representing a [MethodCall]) to string (Xml representing a [MethodResult] or [Fault]) given a function of the form: ([name] -> [params] -> [result]), where [name] is the name of the method, [params] is a list of parameter values, and [result] is the result value. This function can be used to build many different kinds of XmlRpc servers since it makes no assumptions about the network library or other communications method used. If an exception other than {!XmlRpc.Error} occurs, the exception is passed to [error_handler]. If [error_handler] returns a message, the message will be used as the result. If an {!XmlRpc.Error} is raised by either the main function or [error_handler], it will be converted to an XmlRpc [Fault]. Any other exception raised by [error_handler] is allowed to escape. For a full-featured, easy-to-use, network-capable server implementation, see the {!XmlRpcServer} module. *) val serve : ?base64_encoder:(string -> string) -> ?base64_decoder:(string -> string) -> ?datetime_encoder:(XmlRpcDateTime.t -> string) -> ?datetime_decoder:(string -> XmlRpcDateTime.t) -> ?error_handler:(exn -> message) -> (string -> value list -> value) -> string -> string (** Performs the same function as [serve], but operates on typed messages instead of strings. *) val serve_message : ?error_handler:(exn -> message) -> (string -> value list -> value) -> message -> message (** The default error handler for [serve]. This error handler catches all exceptions and converts them into faults by wrapping them in [XmlRpc.Error]. *) val default_error_handler : exn -> message (** A "quiet" error handler for [serve]. This error handler simply re-raises the exception. Use this if you want exceptions to remain unhandled so that they will escape to the error log. The client will receive a generic "transport error", which is more secure since it does not reveal any information about the specific exception that occurred. *) val quiet_error_handler : exn -> message xmlrpc-light-0.6.1/XmlRpc.ml0000664000175000017500000005106011140336575014666 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let version = "0.6.1" exception Error of (int * string) type value = [ `Array of value list | `Binary of string | `Boolean of bool | `DateTime of XmlRpcDateTime.t | `Double of float | `Int of int | `Int32 of int32 | `Nil | `String of string | `Struct of (string * value) list ] type message = | MethodCall of (string * value list) | MethodResponse of value | Fault of (int * string) let safe_map f xs = List.rev (List.rev_map f xs) let invalid_xml () = raise (Error (-32700, "parse error. not well formed")) let invalid_xmlrpc () = raise (Error (-32600, "server error. invalid xml-rpc. not conforming to spec")) let rec dump = function | `String data -> data | `Int data -> string_of_int data | `Int32 data -> Int32.to_string data | `Nil -> "(nil)" | `Boolean data -> if data then "true" else "false" | `Double data -> string_of_float data | `Binary data -> data | `Array data -> "[" ^ (String.concat ", " (safe_map dump data)) ^ "]" | `Struct data -> "{" ^ (String.concat ", " (safe_map (fun (n, v) -> n ^ ": " ^ (dump v)) data)) ^ "}" | `DateTime data -> XmlRpcDateTime.to_string data let rec xml_element_of_value ?(base64_encoder=fun s -> XmlRpcBase64.str_encode s) ?(datetime_encoder=XmlRpcDateTime.to_string) value = Xml.Element (match value with | `String data -> ("string", [], [Xml.PCData data]) | `Int data -> ("int", [], [Xml.PCData (string_of_int data)]) | `Int32 data -> ("int", [], [Xml.PCData (Int32.to_string data)]) | `Nil -> ("nil", [], []) | `Boolean data -> ("boolean", [], [Xml.PCData (if data then "1" else "0")]) | `Double data -> ("double", [], [Xml.PCData (string_of_float data)]) | `Binary data -> ("base64", [], [Xml.PCData (base64_encoder data)]) | `Array data -> ("array", [], [Xml.Element ("data", [], safe_map (fun item -> Xml.Element ("value", [], [xml_element_of_value ~base64_encoder ~datetime_encoder item])) data)]) | `Struct data -> ("struct", [], safe_map (fun (name, value) -> Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData name]); Xml.Element ("value", [], [xml_element_of_value ~base64_encoder ~datetime_encoder value])])) data) | `DateTime data -> ("dateTime.iso8601", [], [Xml.PCData (datetime_encoder data)])) let rec value_of_xml_element ?(base64_decoder=fun s -> XmlRpcBase64.str_decode s) ?(datetime_decoder=XmlRpcDateTime.of_string) = function | Xml.Element ("string", [], []) -> `String "" | Xml.Element ("string", [], [Xml.PCData data]) -> `String data | Xml.Element ("int", [], [Xml.PCData data]) | Xml.Element ("i4", [], [Xml.PCData data]) -> (try `Int (int_of_string data) with Failure "int_of_string" -> `Int32 (Int32.of_string data)) | Xml.Element ("nil", [], []) -> `Nil | Xml.Element ("boolean", [], [Xml.PCData data]) -> `Boolean (data <> "0") | Xml.Element ("double", [], [Xml.PCData data]) -> `Double (float_of_string data) | Xml.Element ("base64", [], []) -> `Binary "" | Xml.Element ("base64", [], [Xml.PCData data]) -> `Binary (base64_decoder data) | Xml.Element ("array", [], [Xml.Element ("data", [], data)]) -> `Array (safe_map (function | Xml.Element ("value", [], []) -> (* Empty value is assumed to be an empty string. *) `String "" | Xml.Element ("value", [], [value]) -> value_of_xml_element ~base64_decoder ~datetime_decoder value | _ -> invalid_xmlrpc ()) data) | Xml.Element ("struct", [], members) -> `Struct (safe_map (function | Xml.Element ("member", [], [Xml.Element ("name", [], []); Xml.Element ("value", [], [])]) -> (* Empty value is assumed to be an empty string. *) ("", `String "") | Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData name]); Xml.Element ("value", [], [])]) -> (* Empty value is assumed to be an empty string. *) (name, `String "") | Xml.Element ("member", [], [Xml.Element ("name", [], []); Xml.Element ("value", [], [value])]) -> ("", value_of_xml_element ~base64_decoder ~datetime_decoder value) | Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData name]); Xml.Element ("value", [], [value])]) -> (name, value_of_xml_element ~base64_decoder ~datetime_decoder value) | _ -> invalid_xmlrpc ()) members) | Xml.Element ("dateTime.iso8601", [], [Xml.PCData data]) | Xml.Element ("dateTime:iso8601", [], [Xml.PCData data]) -> (* The colon above is intentional. (See fix_dotted_tags.) *) `DateTime (datetime_decoder data) | Xml.PCData data -> (* Untyped data is assumed to be a string. *) `String data | _ -> invalid_xmlrpc () let xml_element_of_message ?(base64_encoder=fun s -> XmlRpcBase64.str_encode s) ?(datetime_encoder=XmlRpcDateTime.to_string) message = let make_param param = Xml.Element ("param", [], [Xml.Element ("value", [], [xml_element_of_value ~base64_encoder ~datetime_encoder param])]) in let make_fault code string = Xml.Element ("value", [], [xml_element_of_value ~base64_encoder ~datetime_encoder (`Struct ["faultCode", `Int code; "faultString", `String string])]) in match message with | MethodCall (name, params) -> Xml.Element ("methodCall", [], [Xml.Element ("methodName", [], [Xml.PCData name]); Xml.Element ("params", [], safe_map make_param params)]) | MethodResponse value -> Xml.Element ("methodResponse", [], [Xml.Element ("params", [], [make_param value])]) | Fault (code, string) -> Xml.Element ("methodResponse", [], [Xml.Element ("fault", [], [make_fault code string])]) let message_of_xml_element ?(base64_decoder=fun s -> XmlRpcBase64.str_decode s) ?(datetime_decoder=XmlRpcDateTime.of_string) xml_element = let parse_params params = safe_map (function | Xml.Element ("param", [], [Xml.Element ("value", [], [])]) -> (* Empty value is assumed to be an empty string. *) `String "" | Xml.Element ("param", [], [Xml.Element ("value", [], [element])]) -> value_of_xml_element ~base64_decoder ~datetime_decoder element | _ -> invalid_xmlrpc ()) params in let parse_fault = function | [Xml.Element ("value", [], [element])] -> (match value_of_xml_element ~base64_decoder ~datetime_decoder element with | `Struct ["faultCode", `Int code; "faultString", `String string] | `Struct ["faultString", `String string; "faultCode", `Int code] -> (code, string) | _ -> invalid_xmlrpc ()) | _ -> invalid_xmlrpc () in match xml_element with | Xml.Element ("methodCall", [], [Xml.Element ("methodName", [], [Xml.PCData name]); Xml.Element ("params", [], params)]) -> MethodCall (name, parse_params params) | Xml.Element ("methodCall", [], [Xml.Element ("methodName", [], [Xml.PCData name])]) -> MethodCall (name, []) | Xml.Element ("methodResponse", [], [Xml.Element ("params", [], params)]) -> MethodResponse (List.hd (parse_params params)) | Xml.Element (_, [], [Xml.Element ("fault", [], fault)]) -> Fault (parse_fault fault) | _ -> invalid_xmlrpc () (* Workaround for Xml-Light, which doesn't like dots in tag names. *) let fix_dotted_tags s = let len = String.length s in let in_tag = ref false in for i = 0 to len - 1 do match s.[i] with | '<' -> in_tag := true | '>' -> in_tag := false | '.' when !in_tag -> s.[i] <- ':' | _ -> () done let pipe_process command data = let (in_channel, out_channel) = Unix.open_process command in try output_string out_channel data; close_out out_channel; let buffer_size = 2048 in let buffer = Buffer.create buffer_size in let string = String.create buffer_size in let chars_read = ref 1 in while !chars_read <> 0 do chars_read := input in_channel string 0 buffer_size; Buffer.add_substring buffer string 0 !chars_read done; let status = Unix.close_process (in_channel, out_channel) in (status, Buffer.contents buffer) with e -> ignore (Unix.close_process (in_channel, out_channel)); raise e let shell_escape = let unsafe = String.contains "\"$\\`" in fun arg -> let buf = Buffer.create 32 in Buffer.add_char buf '"'; String.iter (fun c -> if unsafe c then Buffer.add_char buf '\\'; Buffer.add_char buf c) arg; Buffer.add_char buf '"'; Buffer.contents buf class client ?(debug=false) ?(headers=[]) ?(insecure_ssl=false) ?(timeout=300.0) ?(useragent="XmlRpc-Light/" ^ version) url = object (self) val url = url val mutable debug = debug val mutable headers = headers val mutable insecure_ssl = insecure_ssl val mutable timeout = timeout val mutable useragent = useragent val mutable base64_encoder = fun s -> XmlRpcBase64.str_encode s val mutable base64_decoder = fun s -> XmlRpcBase64.str_decode s val mutable datetime_encoder = XmlRpcDateTime.to_string val mutable datetime_decoder = XmlRpcDateTime.of_string method url = let parsed_url = Neturl.parse_url url in try let password = Neturl.url_password parsed_url in Neturl.string_of_url (Neturl.modify_url ~password:(String.make (String.length password) '.') parsed_url) with Not_found -> url method debug = debug method headers = headers method insecure_ssl = insecure_ssl method timeout = timeout method useragent = useragent method set_debug debug' = debug <- debug' method set_headers headers' = headers <- headers' method set_insecure_ssl insecure_ssl' = insecure_ssl <- insecure_ssl' method set_timeout timeout' = timeout <- timeout' method set_useragent useragent' = useragent <- useragent' method set_base64_encoder f = base64_encoder <- f method set_base64_decoder f = base64_decoder <- f method set_datetime_encoder f = datetime_encoder <- f method set_datetime_decoder f = datetime_decoder <- f method call name params = let xml_element = xml_element_of_message ~base64_encoder ~datetime_encoder (MethodCall (name, params)) in let xml = "\n" ^ Xml.to_string_fmt xml_element in if String.length url >= 5 && String.sub url 0 5 = "https" then begin let command = String.concat " " (["curl"; "--user-agent"; shell_escape useragent; "--header"; "\"Content-Type: text/xml\""] @ (List.flatten (List.map (fun (n, v) -> ["--header"; shell_escape (n ^ ": " ^ v)]) headers)) @ ["--connect-timeout"; string_of_float timeout; "--fail"; if debug then "--verbose" else "--silent"; if insecure_ssl then "--insecure" else ""; "--data-binary"; "@-"; shell_escape url]) in if debug then (prerr_endline command; prerr_endline xml); let (status, contents) = pipe_process command xml in match status with | Unix.WEXITED 0 -> if debug then prerr_endline contents; fix_dotted_tags contents; (match (message_of_xml_element ~base64_decoder ~datetime_decoder (Xml.parse_string contents)) with | MethodResponse value -> value | Fault (code, string) -> raise (Error (code, string)) | _ -> invalid_xmlrpc ()) | Unix.WEXITED 22 -> raise (Error (-32300, "transport error. client error")) | Unix.WEXITED code -> (if debug then Printf.eprintf "Received exit code %d\n" code); raise (Error (-32300, "transport error. protocol error")) | Unix.WSIGNALED _ | Unix.WSTOPPED _ -> raise (Error (-32300, "transport error. client error")) end else begin let parsed_url = Neturl.parse_url url in let basic_auth = try Some (Neturl.url_user parsed_url, Neturl.url_password parsed_url) with Not_found -> None in let url = Neturl.string_of_url (Neturl.remove_from_url ~user:true ~password:true parsed_url) in let call = new Http_client.post_raw url xml in call#set_req_header "User-Agent" useragent; call#set_req_header "Content-Type" "text/xml"; List.iter (fun (n, v) -> call#set_req_header n v) headers; begin match basic_auth with | Some (user, password) -> call#set_req_header "Authorization" ("Basic " ^ Netencoding.Base64.encode (user ^ ":" ^ password)) | None -> () end; let pipeline = new Http_client.pipeline in pipeline#set_proxy_from_environment (); let opt = pipeline#get_options in pipeline#set_options {opt with Http_client. connection_timeout = timeout; }; if debug then begin let opt = pipeline#get_options in pipeline#set_options {opt with Http_client. verbose_status = true; verbose_request_header = true; verbose_response_header = true; verbose_request_contents = true; verbose_response_contents = true; verbose_connection = true; } end; pipeline#add call; pipeline#run (); match call#status with | `Successful -> let contents = call#get_resp_body () in fix_dotted_tags contents; (match (message_of_xml_element ~base64_decoder ~datetime_decoder (Xml.parse_string contents)) with | MethodResponse value -> value | Fault (code, string) -> raise (Error (code, string)) | _ -> invalid_xmlrpc ()) | `Client_error -> raise (Error (-32300, ("transport error. client error. " ^ (string_of_int (call#response_status_code)) ^ " " ^ call#response_status_text))) | `Http_protocol_error e -> raise (Error (-32300, "transport error. protocol error")) | `Redirection -> raise (Error (-32300, "transport error. redirected")) | `Server_error -> raise (Error (-32300, "transport error. server error")) | `Unserved -> assert false end end class multicall (client : client) = object (self) val client = client val mutable queue = [] val mutable executed = false val mutable results = None val counter = ref 0 method call name params = if self#executed then failwith "multicall#call: already executed"; let num = !counter in incr counter; queue <- (name, params) :: queue; lazy (self#result num) method execute () = if self#completed then failwith "multicall#execute: already completed"; executed <- true; let calls = List.rev queue in let args = [`Array (safe_map (fun (name, params) -> `Struct ["methodName", `String name; "params", `Array params]) calls)] in match client#call "system.multicall" args with | `Array values -> results <- Some (Array.of_list values) | _ -> invalid_xmlrpc () method result num = if not self#completed then self#execute (); match results with | Some values -> (match values.(num) with | `Array [v] -> v | `Struct ["faultCode", `Int code; "faultString", `String string] | `Struct ["faultString", `String string; "faultCode", `Int code] -> raise (Error (code, string)) | _ -> invalid_xmlrpc ()) | None -> assert false method executed = executed method completed = results <> None end let default_error_handler e = raise (Error (-32500, "application error. " ^ Printexc.to_string e)) let quiet_error_handler e = raise e let serve_message ?(error_handler=default_error_handler) f message = try match message with | MethodCall (name, params) -> (try MethodResponse (f name params) with | Error _ as e -> raise e | e -> error_handler e) | _ -> invalid_xmlrpc () with Error (code, string) -> Fault (code, string) let serve ?(base64_encoder=fun s -> XmlRpcBase64.str_encode s) ?(base64_decoder=fun s -> XmlRpcBase64.str_decode s) ?(datetime_encoder=XmlRpcDateTime.to_string) ?(datetime_decoder=XmlRpcDateTime.of_string) ?(error_handler=default_error_handler) f s = fix_dotted_tags s; try begin try let message = message_of_xml_element ~base64_decoder ~datetime_decoder (Xml.parse_string s) in let response = xml_element_of_message ~base64_encoder ~datetime_encoder (serve_message ~error_handler f message) in Xml.to_string_fmt response with Xml.Error _ -> invalid_xml () end with Error (code, string) -> Xml.to_string_fmt (xml_element_of_message (Fault (code, string))) xmlrpc-light-0.6.1/XmlRpcBase64.ml0000644000175000017500000001071511140336575015633 0ustar ramenramen(* * XmlRpcBase64 - Base64 codec for XmlRpc * Copyright (C) 2007-2009 Dave Benjamin * Copyright (C) 2003 Nicolas Cannasse * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * This module is based on the ExtLib Base64 codec, written by * Nicolas Cannasse, with the following modifications to enable * compatibility with various XmlRpc implementations: * * - For encoding, output is padded with '=' to a multiple of four characters. * - For decoding, the input characters '\r', '\n', and '=' are ignored. * * To avoid a dependency on ExtLib, this version uses OCaml's built-in Stream * type instead of ExtLib's IO type. * * Original copyright: * * Base64 - Base64 codec * Copyright (C) 2003 Nicolas Cannasse *) exception Invalid_char exception Invalid_table external unsafe_char_of_int : int -> char = "%identity" type encoding_table = char array type decoding_table = int array let chars = [| 'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P'; 'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';'a';'b';'c';'d';'e';'f'; 'g';'h';'i';'j';'k';'l';'m';'n';'o';'p';'q';'r';'s';'t';'u';'v'; 'w';'x';'y';'z';'0';'1';'2';'3';'4';'5';'6';'7';'8';'9';'+';'/' |] let make_decoding_table tbl = if Array.length tbl <> 64 then raise Invalid_table; let d = Array.make 256 (-1) in for i = 0 to 63 do Array.unsafe_set d (int_of_char (Array.unsafe_get tbl i)) i; done; d let inv_chars = make_decoding_table chars let encode ?(tbl=chars) strm = if Array.length tbl <> 64 then raise Invalid_table; let data = ref 0 in let count = ref 0 in let pad = ref None in let rec next i = if !count >= 6 then begin count := !count - 6; let d = (!data asr !count) land 63 in Some (Array.unsafe_get tbl d) end else begin try let c = int_of_char (Stream.next strm) in data := (!data lsl 8) lor c; count := !count + 2; let d = (!data asr !count) land 63 in Some (Array.unsafe_get tbl d) with Stream.Failure -> match !pad with | Some 0 -> None | Some n -> pad := Some (n - 1); Some '=' | None -> if !count > 0 then (pad := Some (3 - (i mod 4)); let d = (!data lsl (6 - !count)) land 63 in Some (Array.unsafe_get tbl d)) else None end in Stream.from next let decode ?(tbl=inv_chars) strm = if Array.length tbl <> 256 then raise Invalid_table; let data = ref 0 in let count = ref 0 in let rec next i = if !count >= 8 then begin count := !count - 8; let d = (!data asr !count) land 0xFF in Some (unsafe_char_of_int d) end else begin try match Stream.next strm with | '\r' | '\n' | '=' -> next i | c -> let c = int_of_char c in let c = Array.unsafe_get tbl c in if c = -1 then raise Invalid_char; data := (!data lsl 6) lor c; count := !count + 6; next i with Stream.Failure -> None end in Stream.from next let string_of_stream stream = let buffer = Buffer.create 16 in Stream.iter (Buffer.add_char buffer) stream; Buffer.contents buffer let str_encode ?(tbl=chars) s = string_of_stream (encode ~tbl (Stream.of_string s)) let str_decode ?(tbl=inv_chars) s = string_of_stream (decode ~tbl (Stream.of_string s)) xmlrpc-light-0.6.1/XmlRpcBase64.mli0000644000175000017500000000535011140336575016003 0ustar ramenramen(* * XmlRpcBase64 - Base64 codec for XmlRpc * Copyright (C) 2007-2009 Dave Benjamin * Copyright (C) 2003 Nicolas Cannasse * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * This module is based on the ExtLib Base64 codec, written by * Nicolas Cannasse, with the following modifications to enable * compatibility with various XmlRpc implementations: * * - For encoding, output is padded with '=' to a multiple of four characters. * - For decoding, the input characters '\r', '\n', and '=' are ignored. * * To avoid a dependency on ExtLib, this version uses OCaml's built-in Stream * type instead of ExtLib's IO type. * * Original copyright: * * Base64 - Base64 codec * Copyright (C) 2003 Nicolas Cannasse *) (** Base64 codec. 8-bit characters are encoded into 6-bit ones using ASCII lookup tables. Default tables maps 0..63 values on characters A-Z, a-z, 0-9, '+' and '/' (in that order). *) (** This exception is raised when reading an invalid character from a base64 input. *) exception Invalid_char (** This exception is raised if the encoding or decoding table size is not correct. *) exception Invalid_table (** An encoding table maps integers 0..63 to the corresponding char. *) type encoding_table = char array (** A decoding table maps chars 0..255 to the corresponding 0..63 value or -1 if the char is not accepted. *) type decoding_table = int array (** Encode a string into Base64. *) val str_encode : ?tbl:encoding_table -> string -> string (** Decode a string encoded into Base64, raise [Invalid_char] if a character in the input string is not a valid one. *) val str_decode : ?tbl:decoding_table -> string -> string (** Generic base64 encoding over a character stream. *) val encode : ?tbl:encoding_table -> char Stream.t -> char Stream.t (** Generic base64 decoding over a character stream. *) val decode : ?tbl:decoding_table -> char Stream.t -> char Stream.t (** Create a valid decoding table from an encoding one. *) val make_decoding_table : encoding_table -> decoding_table xmlrpc-light-0.6.1/XmlRpcServer.ml0000664000175000017500000003076711140336575016070 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) type param_type = [ `Array | `Binary | `Boolean | `DateTime | `Double | `Int | `String | `Struct | `Undefined ] let invalid_method name = raise (XmlRpc.Error (-32601, "server error. requested method " ^ name ^ " not found")) let invalid_params () = raise (XmlRpc.Error (-32602, "server error. invalid method parameters")) let wrong_num_params () = raise (XmlRpc.Error (-32602, "server error. wrong number of method parameters")) let system_get_capabilities introspection _ = let capabilities = [ "system.multicall", `Struct [ "specUrl", `String "http://www.xmlrpc.com/discuss/msgReader$1208"; "specVersion", `Int 1; ]; "xmlrpc", `Struct [ "specUrl", `String "http://www.xmlrpc.com/spec"; "specVersion", `Int 1; ]; "faults_interop", `Struct [ "specUrl", `String "http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php"; "specVersion", `Int 20010516; ]; "nil", `Struct [ "specUrl", `String "http://www.ontosys.com/xml-rpc/extensions.php"; "specVersion", `Int 20010518; ]; ] in let capabilities = if introspection then capabilities @ [ "introspection", `Struct [ "specUrl", `String "http://xmlrpc.usefulinc.com/doc/reserved.html"; "specVersion", `Int 1 ] ] else capabilities in `Struct capabilities let system_list_methods methods _ = let names = ref [] in Hashtbl.iter (fun n _ -> names := `String n :: !names) methods; `Array (List.sort compare !names) let system_method_help method_help = function | [`String name] -> (try `String (Hashtbl.find method_help name) with Not_found -> invalid_method name) | _ -> invalid_params () let system_method_signature method_signatures = function | [`String name] -> (try `Array (List.map (fun signature -> `Array (List.map (function | `Array -> `String "array" | `Binary -> `String "base64" | `Boolean -> `String "boolean" | `DateTime -> `String "dateTime.iso8601" | `Double -> `String "double" | `Int -> `String "int" | `String -> `String "string" | `Struct -> `String "struct" | `Undefined -> `String "undefined") signature)) (Hashtbl.find method_signatures name)) with Not_found -> invalid_method name) | _ -> invalid_params () let system_multicall methods = function | [`Array calls] -> `Array (List.map (function | `Struct ["methodName", `String name; "params", `Array params] | `Struct ["params", `Array params; "methodName", `String name] -> (try `Array [(try Hashtbl.find methods name with Not_found -> invalid_method name) params] with | XmlRpc.Error (code, string) -> `Struct ["faultCode", `Int code; "faultString", `String string] | e -> `Struct ["faultCode", `Int (-32500); "faultString", `String ("application error. " ^ Printexc.to_string e)]) | _ -> invalid_params ()) calls) | _ -> invalid_params () let check_signatures signatures f params = let num_params = List.length params in let valid_num_params signature = List.length signature - 1 = num_params in let valid_params signature = let passed = ref true in begin match signature with | [] -> () | _ :: param_types -> List.iter2 (fun expected actual -> match (expected, actual) with | (`Array, `Array _) | (`Binary, `Binary _) | (`Boolean, `Boolean _) | (`DateTime, `DateTime _) | (`Double, `Double _) | (`Int, `Int _) | (`Int, `Int32 _) | (`String, `String _) | (`Struct, `Struct _) | (`Undefined, _) | (_, `Nil) -> () | _ -> passed := false) param_types params end; !passed in if signatures = [] then () else if not (List.exists valid_num_params signatures) then wrong_num_params () else if not (List.exists valid_params signatures) then invalid_params (); f params let rec parse_version ver = try let i = String.index ver '.' in int_of_string (String.sub ver 0 i) :: parse_version (String.sub ver (i + 1) (String.length ver - i - 1)) with Not_found -> [int_of_string ver] let ocamlnet_version = parse_version Netconst.ocamlnet_version class virtual base = object (self) val methods = (Hashtbl.create 0 : (string, XmlRpc.value list -> XmlRpc.value) Hashtbl.t) val method_help = (Hashtbl.create 0 : (string, string) Hashtbl.t) val method_signatures = (Hashtbl.create 0 : (string, param_type list list) Hashtbl.t) val mutable base64_encoder = fun s -> XmlRpcBase64.str_encode s val mutable base64_decoder = fun s -> XmlRpcBase64.str_decode s val mutable datetime_encoder = XmlRpcDateTime.to_string val mutable datetime_decoder = XmlRpcDateTime.of_string val mutable error_handler = XmlRpc.default_error_handler method set_base64_encoder f = base64_encoder <- f method set_base64_decoder f = base64_decoder <- f method set_datetime_encoder f = datetime_encoder <- f method set_datetime_decoder f = datetime_decoder <- f method set_error_handler f = error_handler <- f method serve f input = XmlRpc.serve ~base64_encoder ~base64_decoder ~datetime_encoder ~datetime_decoder ~error_handler f input method serve_message f input = XmlRpc.serve_message ~error_handler f input method register name ?(help="") ?(signature=[]) ?(signatures=[]) f = if help <> "" then (Hashtbl.replace method_help name help; self#enable_introspection ()); let signatures = if signature <> [] then signature :: signatures else signatures in if signatures <> [] then (Hashtbl.replace method_signatures name signatures; self#enable_introspection ()); Hashtbl.replace methods name (if signatures <> [] then check_signatures signatures f else f) method unregister name = Hashtbl.remove methods name; Hashtbl.remove method_help name; Hashtbl.remove method_signatures name method virtual run : unit -> unit val mutable introspection = false method private enable_introspection () = if not introspection then begin introspection <- true; self#register "system.getCapabilities" ~help:"Returns a struct describing the XML-RPC specifications supported by this server" ~signature:[`Struct] (system_get_capabilities true); self#register "system.listMethods" ~help:"Returns an array of available methods on this server" ~signature:[`Array] (system_list_methods methods); self#register "system.methodHelp" ~help:"Returns a documentation string for the specified method" ~signature:[`String; `String] (system_method_help method_help); self#register "system.methodSignature" ~help:"Returns an array describing the return type and required parameters of a method" ~signature:[`Array; `String] (system_method_signature method_signatures); self#register "system.multicall" ~help:"Boxcar multiple RPC calls in one request" ~signature:[`Array; `Array] (system_multicall methods); end initializer self#register "system.getCapabilities" (system_get_capabilities false); self#register "system.listMethods" (system_list_methods methods); self#register "system.multicall" (system_multicall methods); end class type server = object inherit base method run : unit -> unit end class cgi () = object (self) inherit base method private process (cgi : Netcgi.cgi) = match cgi#request_method with | `POST -> let input = cgi#argument_value "BODY" in let output = self#serve (fun name -> try Hashtbl.find methods name with Not_found -> invalid_method name) input in cgi#set_header ~content_type:"text/xml" (); cgi#output#output_string "\n"; cgi#output#output_string output; cgi#output#commit_work () | _ -> cgi#output#output_string "XML-RPC server accepts POST requests only.\n"; cgi#output#commit_work () method run () = let config = { Netcgi.default_config with Netcgi_common.permitted_input_content_types = [ "text/xml" ] } in let buffered _ ch = new Netchannels.buffered_trans_channel ch in Netcgi_cgi.run ~config ~output_type:(`Transactional buffered) self#process end open Netcgi1_compat class netplex ?(parallelizer=Netplex_mp.mp()) ?(handler="xmlrpc") () = object (self) inherit base method private process env (cgi : Netcgi_types.cgi_activation) = match cgi#request_method with | `POST -> let input = cgi#argument_value "BODY" in let output = self#serve (fun name -> try Hashtbl.find methods name with Not_found -> invalid_method name) input in if ocamlnet_version < [2; 2; 8] then env#send_output_header () else (cgi#set_header ~content_type:"text/xml" (); cgi#output#output_string "\n"); cgi#output#output_string output; cgi#output#commit_work () | _ -> if ocamlnet_version < [2; 2; 8] then env#send_output_header (); cgi#output#output_string "XML-RPC server accepts POST requests only.\n"; cgi#output#commit_work () method run () = let (opt_list, cmdline_cfg) = Netplex_main.args () in Arg.parse opt_list (fun s -> raise (Arg.Bad ("Don't know what to do with: " ^ s))) ("usage: " ^ Sys.executable_name ^ " [options]"); let xmlrpc = { Nethttpd_services.dyn_handler = self#process; dyn_activation = Nethttpd_services.std_activation `Std_activation_buffered; dyn_uri = None; dyn_translator = (fun _ -> ""); dyn_accept_all_conditionals = false } in let config_cgi = { Netcgi_env.default_config with Netcgi_env.permitted_input_content_types = [ "text/xml" ] } in let handlers = [handler, xmlrpc] in Sys.set_signal Sys.sigpipe Sys.Signal_ignore; Netplex_main.startup parallelizer Netplex_log.logger_factories Netplex_workload.workload_manager_factories [ Nethttpd_plex.nethttpd_factory ~config_cgi ~handlers () ] cmdline_cfg end xmlrpc-light-0.6.1/XmlRpcServer.mli0000664000175000017500000001176611140336575016237 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) (** XmlRpc Light server. *) (** Example: {[ let server = new XmlRpcServer.cgi () in server#register "demo.sayHello" (fun _ -> `String "Hello!"); server#run () ]} By inheriting from {!XmlRpcServer.base}, all servers provide the following introspection functions by default: [system.listMethods], [system.getCapabilities]. To prevent their use, use [server#unregister]. Additionally, the methods [system.methodHelp] and [system.methodSignature] will be made available if at least one method help or method signature is provided. *) (** Type of parameters used in method signatures. *) type param_type = [ `Array | `Binary | `Boolean | `DateTime | `Double | `Int | `String | `Struct | `Undefined ] (** {2 Base classes} *) (** Abstract base class for XmlRpc servers. *) class virtual base : object (** Hashtable mapping method names to implementation functions. *) val methods : (string, XmlRpc.value list -> XmlRpc.value) Hashtbl.t (** Base-64 binary encoding function. *) val mutable base64_encoder : string -> string (** Base-64 binary decoding function. *) val mutable base64_decoder : string -> string (** ISO-8601 date/time encoding function. *) val mutable datetime_encoder : XmlRpcDateTime.t -> string (** ISO-8601 date/time decoding function. *) val mutable datetime_decoder : string -> XmlRpcDateTime.t (** Handler for unhandled exceptions. *) val mutable error_handler : exn -> XmlRpc.message (** Sets an alternate Base-64 binary encoding function. *) method set_base64_encoder : (string -> string) -> unit (** Sets an alternate Base-64 binary decoding function. *) method set_base64_decoder : (string -> string) -> unit (** Sets an alternate ISO-8601 date/time encoding function. *) method set_datetime_encoder : (XmlRpcDateTime.t -> string) -> unit (** Sets an alternate ISO-8601 date/time decoding function. *) method set_datetime_decoder : (string -> XmlRpcDateTime.t) -> unit (** Sets an alternate handler for unhandled exceptions. See {!XmlRpc.default_error_handler} and {!XmlRpc.quiet_error_handler} for examples. *) method set_error_handler : (exn -> XmlRpc.message) -> unit (** For use in subclasses; calls {!XmlRpc.serve} with the current encoders, decoders, and error handler. *) method serve : (string -> XmlRpc.value list -> XmlRpc.value) -> string -> string (** Like [serve], but operates on messages instead of strings. *) method serve_message : (string -> XmlRpc.value list -> XmlRpc.value) -> XmlRpc.message -> XmlRpc.message (** Registers a method with the server. If a [help] string is specified, its contents will be returned for calls to [system.methodHelp] for this method. If [signature] is specified, this method's signature will be published by [system.methodSignature] and (shallow) type-checking will be enabled for parameters passed into this method. Multiple signatures can be supplied via [signatures] if desired to provide for overloaded methods. Signatures are of the form [return-type; param1-type; param2-type; ...] where each type is an instance of the {!param_type} variant. *) method register : string -> ?help:string -> ?signature:param_type list -> ?signatures:param_type list list -> (XmlRpc.value list -> XmlRpc.value) -> unit (** Removes a method from the server. *) method unregister : string -> unit (** Starts the main server process. *) method virtual run : unit -> unit end (** Type of concrete XmlRpc server classes. *) class type server = object inherit base (** Starts the main server process. *) method run : unit -> unit end (** {2 Server implementations} *) (** CGI XmlRpc server based on Netcgi2. *) class cgi : unit -> server (** Stand-alone XmlRpc server based on Netplex. *) class netplex : ?parallelizer:Netplex_types.parallelizer -> ?handler:string -> unit -> server (** {2 Utility functions} *) (** Raise an {!XmlRpc.Error} indicating a method name not found. *) val invalid_method : string -> 'a (** Raise an {!XmlRpc.Error} indicating invalid method parameters. *) val invalid_params : unit -> 'a xmlrpc-light-0.6.1/test/0000775000175000017500000000000011140336623014076 5ustar ramenramenxmlrpc-light-0.6.1/test/test.ml0000664000175000017500000000235611140336575015423 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) #use "topfind";; #require "oUnit";; #require "netclient";; #require "nethttpd-for-netcgi2";; #require "xml-light";; #load "xmlrpc-light.cma";; open OUnit;; open Printf;; let tests = [];; #use "test/test_base64.ml";; #use "test/test_datetime.ml";; #use "test/test_value.ml";; #use "test/test_message.ml";; #use "test/test_serve.ml";; OUnit.run_test_tt_main (TestList tests);; xmlrpc-light-0.6.1/test/test_message.ml0000664000175000017500000002332211140336575017123 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let string_of_message = function | XmlRpc.MethodCall (name, params) -> sprintf "MethodCall (%s, [%s])" name (String.concat "; " (List.map XmlRpc.dump params)) | XmlRpc.MethodResponse value -> sprintf "MethodResponse (%s)" (XmlRpc.dump value) | XmlRpc.Fault (code, string) -> sprintf "Fault (%d, %s)" code string let test = "test_message" >::: [ "of_method_call" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("methodCall", [], [Xml.Element ("methodName", [], [Xml.PCData "demo.addTwoNumbers"]); Xml.Element ("params", [], [Xml.Element ("param", [], [Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "4"])])]); Xml.Element ("param", [], [Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "5"])])])])])) (XmlRpc.xml_element_of_message (XmlRpc.MethodCall ("demo.addTwoNumbers", [`Int 4; `Int 5])))); "to_method_call" >:: (fun () -> assert_equal ~printer:string_of_message (XmlRpc.MethodCall ("demo.addTwoNumbers", [`String "4"; `String "5"])) (XmlRpc.message_of_xml_element (Xml.Element ("methodCall", [], [Xml.Element ("methodName", [], [Xml.PCData "demo.addTwoNumbers"]); Xml.Element ("params", [], [Xml.Element ("param", [], [Xml.Element ("value", [], [Xml.Element ("string", [], [Xml.PCData "4"])])]); (* test untyped value - should be treated as string *) Xml.Element ("param", [], [Xml.Element ("value", [], [Xml.PCData "5"])])])])))); "to_method_call_no_params" >:: (fun () -> assert_equal ~printer:string_of_message (XmlRpc.MethodCall ("demo.helloWorld", [])) (XmlRpc.message_of_xml_element (Xml.Element ("methodCall", [], [Xml.Element ("methodName", [], [Xml.PCData "demo.helloWorld"])])))); "of_method_response" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("methodResponse", [], [Xml.Element ("params", [], [Xml.Element ("param", [], [Xml.Element ("value", [], [Xml.Element ("string", [], [Xml.PCData "test"])])])])])) (XmlRpc.xml_element_of_message (XmlRpc.MethodResponse (`String "test")))); "to_method_response" >:: (fun () -> assert_equal ~printer:string_of_message (XmlRpc.MethodResponse (`String "test")) (XmlRpc.message_of_xml_element (Xml.Element ("methodResponse", [], [Xml.Element ("params", [], [Xml.Element ("param", [], [Xml.Element ("value", [], [Xml.Element ("string", [], [Xml.PCData "test"])])])])]))); assert_equal ~printer:string_of_message (XmlRpc.MethodResponse (`String "test")) (XmlRpc.message_of_xml_element (Xml.Element ("methodResponse", [], [Xml.Element ("params", [], [Xml.Element ("param", [], (* test untyped value *) [Xml.Element ("value", [], [Xml.PCData "test"])])])])))); "of_fault" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("methodResponse", [], [Xml.Element ("fault", [], [Xml.Element ("value", [], [Xml.Element ("struct", [], [Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "faultCode"]); Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "12345"])])]); Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "faultString"]); Xml.Element ("value", [], [Xml.Element ("string", [], [Xml.PCData "something terrible happened" ])])])])])])])) (XmlRpc.xml_element_of_message (XmlRpc.Fault (12345, "something terrible happened")))); "to_fault" >:: (fun () -> assert_equal ~printer:string_of_message (XmlRpc.Fault (12345, "something terrible happened")) (XmlRpc.message_of_xml_element (Xml.Element ("methodResponse", [], [Xml.Element ("fault", [], [Xml.Element ("value", [], [Xml.Element ("struct", [], [Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "faultCode"]); Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "12345"])])]); Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "faultString"]); Xml.Element ("value", [], [Xml.Element ("string", [], [Xml.PCData "something terrible happened" ])])])])])])]))); assert_equal ~printer:string_of_message (XmlRpc.Fault (12345, "something terrible happened")) (XmlRpc.message_of_xml_element (Xml.Element ("methodResponse", [], [Xml.Element ("fault", [], [Xml.Element ("value", [], [Xml.Element ("struct", [], [Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "faultCode"]); Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "12345"])])]); Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "faultString"]); (* test untyped value *) Xml.Element ("value", [], [Xml.PCData "something terrible happened" ])])])])])])))); ] let tests = test :: tests xmlrpc-light-0.6.1/test/test_base64.ml0000664000175000017500000000427711140336575016573 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let test = "test_base64" >::: [ "encode" >:: (fun () -> assert_equal ~printer:(fun s -> s) "UnVsaW5nIHRoZSBjb3VudHJ5IGlzIGxpa2UgY29va2luZyBhIHNtYWxsIGZpc2guCkFwcHJvYWNoIHRoZSB1bml2ZXJzZSB3aXRoIFRhbywKQW5kIGV2aWwgaXMgbm90IHBvd2VyZnVsLApCdXQgaXRzIHBvd2VyIHdpbGwgbm90IGJlIHVzZWQgdG8gaGFybSBvdGhlcnMuCk5vdCBvbmx5IHdpbGwgaXQgZG8gbm8gaGFybSB0byBvdGhlcnMsCkJ1dCB0aGUgc2FnZSBoaW1zZWxmIHdpbGwgYWxzbyBiZSBwcm90ZWN0ZWQuClRoZXkgZG8gbm90IGh1cnQgZWFjaCBvdGhlciwKQW5kIHRoZSBWaXJ0dWUgaW4gZWFjaCBvbmUgcmVmcmVzaGVzIGJvdGguCg==" (XmlRpcBase64.str_encode "\ Ruling the country is like cooking a small fish. Approach the universe with Tao, And evil is not powerful, But its power will not be used to harm others. Not only will it do no harm to others, But the sage himself will also be protected. They do not hurt each other, And the Virtue in each one refreshes both. ")); "decode" >:: (fun () -> assert_equal ~printer:(fun s -> s) "When someone says \"I want a programming language in which I need only\nsay what I wish done,\" give him a lollipop.\n" (XmlRpcBase64.str_decode "V2hlbiBzb21lb25lIHNheXMgIkkgd2FudCBhIHByb2dyYW1taW5nIGxhbmd1YWdlIGluIHdoaWNo\nIEkgbmVlZCBvbmx5CnNheSB3aGF0IEkgd2lzaCBkb25lLCIgZ2l2ZSBoaW0gYSBsb2xsaXBvcC4K\n")); ] let tests = test :: tests xmlrpc-light-0.6.1/test/test_datetime.ml0000664000175000017500000001446411140336575017302 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let string_of_unixtm {Unix.tm_sec=tm_sec; tm_min=tm_min; tm_hour=tm_hour; tm_mday=tm_mday; tm_mon=tm_mon; tm_year=tm_year; tm_wday=tm_wday; tm_yday=tm_yday; tm_isdst=tm_isdst} = sprintf "{Unix.tm_year=%d; tm_mon=%d; tm_mday=%d; tm_hour=%d; tm_min=%d; tm_sec=%d; tm_yday=%d; tm_wday=%d; tm_isdst=%b}" tm_year tm_mon tm_mday tm_hour tm_min tm_sec tm_yday tm_wday tm_isdst let string_of_datetime (y, m, d, h, m', s, tz) = sprintf "(%d, %d, %d, %d, %d, %d, %d)" y m d h m' s tz let test = "test_datetime" >::: [ "unixfloat" >:: (fun () -> let unixfloat = Unix.time () in assert_equal ~printer:string_of_float unixfloat (XmlRpcDateTime.to_unixfloat (XmlRpcDateTime.from_unixfloat unixfloat))); "unixfloat_utc" >:: (fun () -> let unixfloat = Unix.time () in assert_equal ~printer:string_of_float unixfloat (XmlRpcDateTime.to_unixfloat_utc (XmlRpcDateTime.from_unixfloat_utc unixfloat))); "unix" >:: (fun () -> let time = Unix.localtime (Unix.time ()) in assert_equal ~printer:string_of_unixtm time (XmlRpcDateTime.to_unixtm (XmlRpcDateTime.from_unixtm time))); "unix_utc" >:: (fun () -> let time = Unix.gmtime (Unix.time ()) in assert_equal ~printer:string_of_unixtm time (XmlRpcDateTime.to_unixtm_utc (XmlRpcDateTime.from_unixtm_utc time))); "to_unixfloat" >:: (fun () -> let dt_local = (2007, 10, 14, 7, 16, 18, -420) in let dt_utc = (2007, 10, 14, 14, 16, 18, 0) in assert_equal ~printer:string_of_float (XmlRpcDateTime.to_unixfloat dt_local) (XmlRpcDateTime.to_unixfloat dt_utc)); "to_unixfloat_utc" >:: (fun () -> let dt_local = (2007, 10, 14, 7, 16, 18, -420) in let dt_utc = (2007, 10, 14, 14, 16, 18, 0) in assert_equal ~printer:string_of_float (XmlRpcDateTime.to_unixfloat_utc dt_local) (XmlRpcDateTime.to_unixfloat_utc dt_utc)); "to_unixtm" >:: (fun () -> let dt = (2007, 1, 1, 18, 34, 9, -420) in assert_equal ~printer:string_of_unixtm (snd (Unix.mktime {Unix.tm_year=107; tm_mon=0; tm_mday=1; tm_hour=18; tm_min=34; tm_sec=9; tm_yday=0; tm_wday=0; tm_isdst=false})) (XmlRpcDateTime.to_unixtm dt)); "to_unixtm_utc" >:: (fun () -> let dt = (2007, 1, 1, 14, 34, 9, -420) in assert_equal ~printer:string_of_unixtm (snd (Unix.mktime {Unix.tm_year=107; tm_mon=0; tm_mday=1; tm_hour=21; tm_min=34; tm_sec=9; tm_yday=0; tm_wday=0; tm_isdst=false})) (XmlRpcDateTime.to_unixtm_utc dt)); "to_string" >:: (fun () -> let dt = (2007, 1, 1, 14, 34, 9, 0) in assert_equal ~printer:(fun s -> s) "20070101T14:34:09" (XmlRpcDateTime.to_string dt)); "to_string_tz" >:: (fun () -> let dt = (2007, 1, 1, 14, 34, 9, -420) in assert_equal ~printer:(fun s -> s) "20070101T14:34:09-07:00" (XmlRpcDateTime.to_string dt)); "of_string" >:: (fun () -> let s = "20070101T14:34:09" in assert_equal ~printer:string_of_datetime (2007, 1, 1, 14, 34, 9, 0) (XmlRpcDateTime.of_string s)); "of_string_z" >:: (fun () -> let s = "20070101T14:34:09Z" in assert_equal ~printer:string_of_datetime (2007, 1, 1, 14, 34, 9, 0) (XmlRpcDateTime.of_string s)); "to_string_tz" >:: (fun () -> let s = "20070101T14:34:09-07:00" in assert_equal ~printer:string_of_datetime (2007, 1, 1, 14, 34, 9, -420) (XmlRpcDateTime.of_string s)); "optional_delimiters" >:: (fun () -> let s1 = "20071013T22:03:09-0700" in let s2 = "2007-10-13 22:03:09-07:00" in assert_equal ~printer:string_of_datetime (XmlRpcDateTime.of_string s1) (XmlRpcDateTime.of_string s2)); "set_tz_offset" >:: (fun () -> let offset = 360 in let dt1 = XmlRpcDateTime.now () in let dt2 = XmlRpcDateTime.set_tz_offset offset dt1 in assert_equal ~printer:string_of_int offset (match dt2 with (_, _, _, _, _, _, tz) -> tz); assert_equal ~printer:string_of_datetime ~cmp:XmlRpcDateTime.equal dt1 dt2); "fix_tz_offset" >:: (fun () -> let offset = -420 in let dt1 = XmlRpcDateTime.now_utc () in let dt2 = XmlRpcDateTime.fix_tz_offset offset dt1 in assert_equal ~printer:string_of_int offset (match dt2 with (_, _, _, _, _, _, tz) -> tz); assert_equal ~printer:string_of_int (int_of_float (XmlRpcDateTime.to_unixfloat dt1)) (int_of_float (XmlRpcDateTime.to_unixfloat dt2) + offset * 60)); ] let tests = test :: tests xmlrpc-light-0.6.1/test/test_value.ml0000664000175000017500000002446411140336575016623 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let test = "test_value" >::: [ "of_int" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("int", [], [Xml.PCData "42"])) (XmlRpc.xml_element_of_value (`Int 42))); "to_int" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`Int 42) (XmlRpc.value_of_xml_element (Xml.Element ("int", [], [Xml.PCData "42"])))); "to_int_i4" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`Int 42) (XmlRpc.value_of_xml_element (Xml.Element ("i4", [], [Xml.PCData "42"])))); "of_int32" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("int", [], [Xml.PCData "2000000000"])) (XmlRpc.xml_element_of_value (`Int32 2000000000l))); "to_int32" >:: (fun () -> if Sys.word_size = 32 then assert_equal ~printer:XmlRpc.dump (`Int32 2000000000l) (XmlRpc.value_of_xml_element (Xml.Element ("int", [], [Xml.PCData "2000000000"])))); "of_double" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("double", [], [Xml.PCData "42.000000001"])) (XmlRpc.xml_element_of_value (`Double 42.000000001))); "to_double" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`Double 42.000000001) (XmlRpc.value_of_xml_element (Xml.Element ("double", [], [Xml.PCData "42.000000001"])))); "of_nil" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("nil", [], [])) (XmlRpc.xml_element_of_value `Nil)); "to_nil" >:: (fun () -> assert_equal ~printer:XmlRpc.dump `Nil (XmlRpc.value_of_xml_element (Xml.Element ("nil", [], [])))); "of_boolean" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("boolean", [], [Xml.PCData "1"])) (XmlRpc.xml_element_of_value (`Boolean true))); "to_boolean" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`Boolean false) (XmlRpc.value_of_xml_element (Xml.Element ("boolean", [], [Xml.PCData "0"])))); "of_string" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("string", [], [Xml.PCData " <&>ABCDEFG012345 \r~!@#$%^&*()\t\r\n "])) (XmlRpc.xml_element_of_value (`String " <&>ABCDEFG012345 \r~!@#$%^&*()\t\r\n "))); "to_string" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`String " <&>ABCDEFG012345 \r~!@#$%^&*()\t\r\n ") (XmlRpc.value_of_xml_element (Xml.Element ("string", [], [Xml.PCData " <&>ABCDEFG012345 \r~!@#$%^&*()\t\r\n "])))); "of_binary" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("base64", [], [Xml.PCData "IDwmPkFCQ0RFRkcwMTIzNDUgDX4hQCMkJV4mKigpCQ0KIA=="])) (XmlRpc.xml_element_of_value (`Binary " <&>ABCDEFG012345 \r~!@#$%^&*()\t\r\n "))); "to_binary" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`Binary " <&>ABCDEFG012345 \r~!@#$%^&*()\t\r\n ") (XmlRpc.value_of_xml_element (Xml.Element ("base64", [], [Xml.PCData "IDwmPkFCQ0\r\nRFRkcwMTIzN\nDUgDX4hQCMkJV4mKigpCQ0KIA=="])))); "of_array" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("array", [], [Xml.Element ("data", [], [Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "5"])]); Xml.Element ("value", [], [Xml.Element ("string", [], [Xml.PCData "six"])]); Xml.Element ("value", [], [Xml.Element ("array", [], [Xml.Element ("data", [], [Xml.Element ("value", [], [Xml.Element ("boolean", [], [Xml.PCData "0"])]); Xml.Element ("value", [], [Xml.Element ("double", [], [Xml.PCData "-1."])])])])])])])) (XmlRpc.xml_element_of_value (`Array [`Int 5; `String "six"; `Array [`Boolean false; `Double (-1.0)]]))); "to_array" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`Array [`Int 5; `String "six"; `Array [`Boolean false; `Double (-1.0)]]) (XmlRpc.value_of_xml_element (Xml.Element ("array", [], [Xml.Element ("data", [], [Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "5"])]); (* test untyped value - should be treated as string *) Xml.Element ("value", [], [Xml.PCData "six"]); Xml.Element ("value", [], [Xml.Element ("array", [], [Xml.Element ("data", [], [Xml.Element ("value", [], [Xml.Element ("boolean", [], [Xml.PCData "0"])]); Xml.Element ("value", [], [Xml.Element ("double", [], [Xml.PCData "-1."])])])])])])])))); "of_struct" >:: (fun () -> assert_equal ~printer:Xml.to_string (Xml.Element ("struct", [], [Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "foo"]); Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "42"])])]); Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "bar"]); Xml.Element ("value", [], [Xml.Element ("struct", [], [Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "baz"]); Xml.Element ("value", [], [Xml.Element ("string", [], [Xml.PCData "rutabega"])])])])])])])) (XmlRpc.xml_element_of_value (`Struct ["foo", `Int 42; "bar", `Struct ["baz", `String "rutabega"]]))); "to_struct" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`Struct ["foo", `Int 42; "bar", `Struct ["baz", `String "rutabega"]]) (XmlRpc.value_of_xml_element (Xml.Element ("struct", [], [Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "foo"]); Xml.Element ("value", [], [Xml.Element ("int", [], [Xml.PCData "42"])])]); Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "bar"]); Xml.Element ("value", [], [Xml.Element ("struct", [], [Xml.Element ("member", [], [Xml.Element ("name", [], [Xml.PCData "baz"]); (* test untyped value *) Xml.Element ("value", [], [Xml.PCData "rutabega"])])])])])])))); "to_struct_empty_name" >:: (fun () -> assert_equal ~printer:XmlRpc.dump (`Struct ["", `String ""; "", `Int 42]) (XmlRpc.value_of_xml_element (Xml.parse_string " 42 "))); ] let tests = test :: tests xmlrpc-light-0.6.1/test/test_serve.ml0000664000175000017500000000632311140336575016625 0ustar ramenramen(* * XmlRpc Light, a small XmlRpc library based on Xml Light and Ocamlnet * Copyright (C) 2007-2009 Dave Benjamin (dave@ramenlabs.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let test = "test_serve" >::: [ "reverse" >:: (fun () -> let data = [`Int 1; `Int 2; `Int 3] in assert_equal ~printer:string_of_message (XmlRpc.MethodResponse (`Array (List.rev data))) (XmlRpc.message_of_xml_element (Xml.parse_string (XmlRpc.serve (function | "reverse" -> (function | [`Array items] -> `Array (List.rev items) | _ -> failwith "wrong parameters") | _ -> failwith "unknown method") (Xml.to_string (XmlRpc.xml_element_of_message (XmlRpc.MethodCall ("reverse", [`Array data])))))))); "error_normal" >:: (fun () -> let fault = (12345, "My fault") in assert_equal ~printer:string_of_message (XmlRpc.Fault fault) (XmlRpc.message_of_xml_element (Xml.parse_string (XmlRpc.serve (fun _ _ -> raise (XmlRpc.Error fault)) (Xml.to_string (XmlRpc.xml_element_of_message (XmlRpc.MethodCall ("dummy", [])))))))); "error_exception" >:: (fun () -> assert_equal ~printer:string_of_message (XmlRpc.Fault (-32500, "application error. Failure(\"WHAT HAPPEN ?\")")) (XmlRpc.message_of_xml_element (Xml.parse_string (XmlRpc.serve (fun _ _ -> failwith "WHAT HAPPEN ?") (Xml.to_string (XmlRpc.xml_element_of_message (XmlRpc.MethodCall ("dummy", [])))))))); "error_quiet" >:: (fun () -> assert_raises (Failure "SOMEONE SET UP US THE BOMB") (fun () -> (ignore (XmlRpc.serve ~error_handler:XmlRpc.quiet_error_handler (fun _ _ -> failwith "SOMEONE SET UP US THE BOMB") (Xml.to_string (XmlRpc.xml_element_of_message (XmlRpc.MethodCall ("dummy", [])))))))); ] let tests = test :: tests