summaryrefslogtreecommitdiffstats
path: root/sbin/atm
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2008-05-25 22:11:40 +0000
committerrwatson <rwatson@FreeBSD.org>2008-05-25 22:11:40 +0000
commita3623cb733d4a3ddcf8ba280724b8ce3f19a7a58 (patch)
treeafe56b8f23cfc7884850445d064a110b6ac85c9e /sbin/atm
parent2f956b205ca6c855f85983809448ddc387407d46 (diff)
downloadFreeBSD-src-a3623cb733d4a3ddcf8ba280724b8ce3f19a7a58.zip
FreeBSD-src-a3623cb733d4a3ddcf8ba280724b8ce3f19a7a58.tar.gz
Remove netatm from HEAD as it is not MPSAFE and relies on the now removed
NET_NEEDS_GIANT. netatm has been disconnected from the build for ten months in HEAD/RELENG_7. Specifics: - netatm include files - netatm command line management tools - libatm - ATM parts in rescue and sysinstall - sample configuration files and documents - kernel support as a module or in NOTES - netgraph wrapper nodes for netatm - ctags data for netatm. - netatm-specific device drivers. MFC after: 3 weeks Reviewed by: bz Discussed with: bms, bz, harti
Diffstat (limited to 'sbin/atm')
-rw-r--r--sbin/atm/Makefile5
-rw-r--r--sbin/atm/atm/Makefile42
-rw-r--r--sbin/atm/atm/atm.8993
-rw-r--r--sbin/atm/atm/atm.c1143
-rw-r--r--sbin/atm/atm/atm.h195
-rw-r--r--sbin/atm/atm/atm_fore200.c596
-rw-r--r--sbin/atm/atm/atm_inet.c154
-rw-r--r--sbin/atm/atm/atm_print.c891
-rw-r--r--sbin/atm/atm/atm_set.c528
-rw-r--r--sbin/atm/atm/atm_show.c1144
-rw-r--r--sbin/atm/atm/atm_subr.c626
-rw-r--r--sbin/atm/fore_dnld/COPYRIGHT38
-rw-r--r--sbin/atm/fore_dnld/Makefile36
-rw-r--r--sbin/atm/fore_dnld/fore_dnld.8114
-rw-r--r--sbin/atm/fore_dnld/fore_dnld.c1346
-rw-r--r--sbin/atm/fore_dnld/pca200e.c3796
-rw-r--r--sbin/atm/ilmid/Makefile40
-rw-r--r--sbin/atm/ilmid/ilmid.8110
-rw-r--r--sbin/atm/ilmid/ilmid.c2725
19 files changed, 0 insertions, 14522 deletions
diff --git a/sbin/atm/Makefile b/sbin/atm/Makefile
index 79fc6a3..4145d21 100644
--- a/sbin/atm/Makefile
+++ b/sbin/atm/Makefile
@@ -25,9 +25,4 @@
SUBDIR= atmconfig
-# Disabled in 7.0 as netatm is not MPSAFE.
-# atm \
-# fore_dnld \
-# ilmid
-
.include <bsd.subdir.mk>
diff --git a/sbin/atm/atm/Makefile b/sbin/atm/atm/Makefile
deleted file mode 100644
index 973e5cc..0000000
--- a/sbin/atm/atm/Makefile
+++ /dev/null
@@ -1,42 +0,0 @@
-# ===================================
-# HARP | Host ATM Research Platform
-# ===================================
-#
-# This Host ATM Research Platform ("HARP") file (the "Software") is
-# made available by Network Computing Services, Inc. ("NetworkCS")
-# "AS IS". NetworkCS does not provide maintenance, improvements or
-# support of any kind.
-#
-# NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
-# INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
-# SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
-# In no event shall NetworkCS be responsible for any damages, including
-# but not limited to consequential damages, arising from or relating to
-# any use of the Software or related support.
-#
-# Copyright 1994-1998 Network Computing Services, Inc.
-#
-# Copies of this Software may be made, however, the above copyright
-# notice must be reproduced on all copies.
-#
-# @(#) $Id: Makefile,v 1.5 1998/07/10 16:01:58 jpt Exp $
-# $FreeBSD$
-
-PROG= atm
-SRCS= atm.c atm_fore200.c atm_inet.c atm_print.c \
- atm_set.c atm_show.c atm_subr.c
-MAN= atm.8
-
-.if ${MACHINE_ARCH} == "arm"
-WARNS?= 3
-.else
-WARNS?= 6
-.endif
-
-CFLAGS+= -I${.CURDIR}/../../../sys
-
-DPADD= ${LIBATM}
-LDADD= -latm
-
-.include <bsd.prog.mk>
diff --git a/sbin/atm/atm/atm.8 b/sbin/atm/atm/atm.8
deleted file mode 100644
index 7cd6493..0000000
--- a/sbin/atm/atm/atm.8
+++ /dev/null
@@ -1,993 +0,0 @@
-.\"
-.\" ===================================
-.\" HARP | Host ATM Research Platform
-.\" ===================================
-.\"
-.\"
-.\" This Host ATM Research Platform ("HARP") file (the "Software") is
-.\" made available by Network Computing Services, Inc. ("NetworkCS")
-.\" "AS IS". NetworkCS does not provide maintenance, improvements or
-.\" support of any kind.
-.\"
-.\" NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
-.\" INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
-.\" AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
-.\" SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
-.\" In no event shall NetworkCS be responsible for any damages, including
-.\" but not limited to consequential damages, arising from or relating to
-.\" any use of the Software or related support.
-.\"
-.\" Copyright 1994-1998 Network Computing Services, Inc.
-.\"
-.\" Copies of this Software may be made, however, the above copyright
-.\" notice must be reproduced on all copies.
-.\"
-.\" @(#) $FreeBSD$
-.\"
-.\"
-.de EX \"Begin example
-.ne 5
-.if n .sp 1
-.if t .sp .5
-.nf
-.in +.5i
-..
-.de EE
-.fi
-.in -.5i
-.if n .sp 1
-.if t .sp .5
-..
-.TH ATM 8 "1998-08-20" "HARP"
-.SH NAME
-atm \- user configuration and display command for HARP ATM interface
-.SH SYNOPSIS
-Interface management subcommands:
-.in +10
-.ti -5
-.B atm attach
-<interface> <sigmgr>
-.ti -5
-.B atm detach
-<interface>
-.ti -5
-.B atm set MAC
-<interface> <MAC/ESI address>
-.ti -5
-.B atm set netif
-<interface> <prefix> <count>
-.ti -5
-.B atm set prefix
-<interface> <NSAP prefix>
-.ti -5
-.B atm show config
-[<interface>]
-.ti -5
-.B atm show interface
-[<interface>]
-.ti -5
-.B atm show netif
-[<netif>]
-.ti -5
-.B atm show stats interface
-[<interface> [phy | dev | atm | aal0 | aal4 | aal5 | driver]]
-.sp
-.ti -10
-VCC management subcommands:
-.ti -5
-.B atm add PVC
-<interface> <vpi> <vci> <aal> <encaps> <owner> ...
-.ti -5
-.B atm delete PVC
-<interface> <vpi> <vci>
-.ti -5
-.B atm delete SVC
-<interface> <vpi> <vci>
-.ti -5
-.B atm show stats VCC
-[<interface> [<vpi> [<vci>]]]
-.ti -5
-.B atm show VCC
-[<interface> [<vpi> [<vci>] | SVC | PVC]]
-.sp
-.ti -10
-IP management subcommands:
-.ti -5
-.B atm add ARP
-[<netif>] <host> <ATM address>
-.ti -5
-.B atm add PVC
-<interface> <vpi> <vci> <aal> <encaps> IP <netif> [<host> | dynamic] <traffic> <params> ...
-.ti -5
-.B atm delete ARP
-[<netif>] <host>
-.ti -5
-.B atm set arpserver
-<netif> <ATM address> | local [<IP prefix> ...]
-.ti -5
-.B atm show ARP
-[<host>]
-.ti -5
-.B atm show arpserver
-[<netif>]
-.ti -5
-.B atm show IPVCC
-[<host> | <netif>]
-.ti -5
-.sp
-.ti -10
-Miscellaneous subcommands:
-.ti -5
-.B atm help
-.ti -5
-.B atm show version
-.in -10
-.fi
-.SH DESCRIPTION
-.I atm
-configures and displays the status of the Host ATM Research Platform
-(HARP) networking software.
-The subcommands fall into several categories:
-.PP
-\fIInterface management\fP subcommands allow manipulation of the
-ATM interface.
-Functions include assigning a signalling manager to an interface,
-setting the ATM address, associating network interfaces with
-an interface, and displaying information about interfaces.
-.PP
-\fIVCC management\fP subcommands allow for managing ATM virtual
-channel connections (VCCs).
-Functions include opening and closing VCCs and displaying information
-about them.
-.PP
-\fIIP management\fP subcommands allow for managing the interface
-between IP and the ATM software.
-Functions include displaying and manipulating the ATMARP cache,
-opening a PVC connected to IP,
-assigning an ATMARP server to a network interface,
-and displaying information about IP VCCs.
-.PP
-\fIMiscellaneous\fP subcommands allow for displaying the version
-of the ATM software and for getting help with the \fIatm\fP command.
-.SS "Signalling Managers"
-The signalling manager is responsible for the opening and closing of
-VCCs.
-Four signalling managers are supported:
-.PP
-.in +10
-.ti -5
-PVC - for PVCs only,
-.ti -5
-SPANS - supports SPANS, FORE's proprietary signalling protocol,
-.ti -5
-UNI 3.0 - supports the signalling protocol from The ATM Forum's
-\fIATM User-Network Interface Specification, Version 3.0\fP.
-.ti -5
-UNI 3.1 - supports the signalling protocol from The ATM Forum's
-\fIATM User-Network Interface Specification, Version 3.1\fP.
-.in -10
-.PP
-All four signalling managers support the opening and closing of PVCs
-(see the \fIadd\fP and \fIdelete\fP subcommands).
-.PP
-A signalling manager must be attached to a physical interface
-(see the \fIattach\fP subcommand)
-before any VCCs can be created on the interface.
-.SS "Physical and Network Interfaces"
-Two types of interfaces are supported:
-physical interfaces and network interfaces.
-A physical interface represents a physical point of attachment to an
-ATM network.
-A physical interface has an ATM address associated with it, except
-when the PVC-only signalling manager is being used.
-.PP
-A network interface is a logical interface.
-One or more network interfaces are associated with a physical
-interface; each network interface has an IP address associated with it.
-For UNI-controlled interfaces, there can be up to 256 network
-interfaces associated with a physical interface.
-In this case, the correspondence between the network interface and
-the ATM address is determined by the selector field (the last
-byte) of the physical interface's ATM address.
-For PVC-only interfaces, there can be up to 256 logical interfaces
-associated with each physical interface.
-For interfaces controlled by the SPANS signalling manager,
-there must be one and
-only one network interface associated with each physical interface.
-.SS "Keyword and Documentation Conventions"
-Command and subcommand keywords can be abbreviated by simply giving
-enough of the first part of the keyword to make it unique.
-Thus, \fIatm sh v\fB gives the same result as \fIatm show vcc\fB.
-.PP
-All keywords are case-insensitive.
-.PP
-Where a host address needs to be given to the \fIatm\fP command,
-either a DNS name or an IP address in dotted decimal format can
-be used.
-.PP
-ATM addresses are specified as strings of hex digits, with an
-optional leading "0x".
-Fields within the address may be separated by periods, but periods
-are for readability only and are ignored.
-SPANS addresses are 8 bytes long, while NSAP-format addresses
-are 20 bytes long.
-The full address, including any leading zeroes, must be given.
-For example:
-.in +5
-0x47.0005.80.ffe100.0000.f21a.0170.0020481a0170.00 (NSAP format)
-.br
-0x00000010.f2050aa9 (SPANS format)
-.in -5
-.fi
-.SH SUBCOMMANDS
-.SS Interface Management Subcommands:
-.in +5
-.ti -5
-\fIatm add PVC <interface> <vpi> <vci> <aal> <encaps> <owner> ...\fP
-.in -5
-.PP
-the format of the \fIadd PVC\fP subcommand varies depending on the
-owner of the PVC.
-See the description under "IP Management Subcommands."
-.PP
-\fIatm attach <interface> <sigmgr>\fP
-.PP
-where:
-.in +10
-.ti -5
-\fI<interface>\fP specifies the physical interface to which the
-signalling manager is to be attached,
-.ti -5
-\fI<sigmgr>\fP specifies which signalling manager is to be attached.
-Valid choices are "SIGPVC", "SPANS", "UNI30", and "UNI31".
-.in -10
-.PP
-This command attaches a signalling manager to an interface.
-Until this is done, VCCs cannot be opened or closed.
-Only one signalling manager at a time can be attached to an interface.
-.PP
-\fIatm detach <interface>\fP
-.PP
-where:
-.in +10
-.ti -5
-\fI<interface>\fP specifies the physical interface whose signalling
-manager is to be detached.
-.in -10
-.PP
-This command detaches a signalling manager from an interface.
-All VCCs that the signalling manager has created will be closed,
-and no new VCCs can be created until a signalling manager (either
-the same or a different one) is attached again.
-.PP
-\fIatm set MAC <interface> <MAC/ESI address>\fP
-.PP
-where:
-.in +10
-.ti -5
-\fI<interface>\fP specifies the physical interface whose
-MAC address is to be set,
-.ti -5
-\fI<MAC/ESI address>\fP specifies the 6-byte MAC part of the NSAP
-address for the interface.
-The MAC address is specified as a string of 12 hexadecimal
-digits with an optional leading "0x".
-Fields in the address may be separated by periods.
-.in -10
-.PP
-This command sets the MAC address for a UNI-controlled interface.
-The first 13 bytes (the prefix) of the 20-byte NSAP-format address
-are set by the \fIatm set prefix\fP command or the ILMI daemon
-(\fIilmid\fP (8)),
-the next 6 bytes (the End System Identifier (ESI)) are set by
-this command,
-and the last byte (the selector) will be determined by which
-network interface is to be associated with the address.
-.PP
-The \fIatm set MAC\fP command can be used to override the MAC
-address in the interface hardware.
-.PP
-\fIatm set netif <interface> <prefix> <count>\fP
-.PP
-where:
-.in +10
-.ti -5
-\fI<interface>\fP specifies the physical interface that the network
-interface(s) are to be associated with,
-.ti -5
-\fI<prefix>\fP specifies the invariant part of the network
-interface name,
-.ti -5
-\fI<count>\fP specifies the number of network interface to be
-created.
-.in -10
-.PP
-This command creates one or more network interfaces and associates them
-with the specified physical interface.
-The network interface names are determined by the prefix and the count.
-The names will be of the form <prefix><nn>, where <prefix> is the
-prefix specified in the \fIset\fP subcommand and <nn> is a number
-in the range 0 - <count>-1. For example, the command:
-.PP
-.ti +5
-atm set netif hfa0 ni 2
-.PP
-would create two network interfaces, named ni0 and ni1, and associate
-them with physical interface hfa0.
-.PP
-\fIatm set prefix <interface> <NSAP prefix>\fP
-.PP
-where:
-.in +10
-.ti -5
-\fI<interface>\fP specifies the physical interface whose NSAP
-prefix is to be set,
-.ti -5
-\fI<NSAP prefix>\fP specifies the first 13 bytes of the NSAP address
-for the interface.
-The prefix is specified as a string of hexadecimal digits with an
-optional leading "0x".
-Fields in the prefix may be separated by periods.
-.in -10
-.PP
-This command sets the address for a UNI-controlled interface.
-The first 13 bytes (the prefix) of the 20-byte NSAP-format address
-are set by this command,
-the next 6 bytes (the End System Identifier (ESI)) will be the
-MAC address taken from the physical interface or set by the
-\fIset MAC\fP subcommand,
-and the last byte (the selector) will be determined by which
-network interface is to be associated with the address.
-.PP
-The NSAP prefix must be set before a UNI-controlled
-interface can become active.
-This can be accomplished either by the ILMI daemon (\fIilmid\fP (8))
-or the \fIset prefix\fP subcommand.
-.PP
-.I atm show config [<interface>]
-.PP
-displays the following information:
-.PP
-.B Interface
-\- the name of the physical interface.
-.PP
-.B Vendor
-\- the name of the adapter vendor.
-.PP
-.B Model
-\- the model of the adapter.
-.PP
-.B Media
-\- the communications medium used by the adapter.
-.PP
-.B Bus
-\- the type of bus the adapter is attached to.
-.PP
-.B Serial No.
-\- the adapter's serial number.
-.PP
-.B MAC address
-\- the MAC address of the interface.
-Note that this is the MAC address encoded in the hardware of
-the adapter, even if the \fIatm set MAC\fP command has been used
-to change the effective MAC address of the interface.
-.PP
-.B Hardware version
-\- the hardware revision level reported by the interface.
-.PP
-.B Firmware version
-\- the firmware revision level reported by the interface.
-.PP
-If no parameters are specified on the \fIshow config\fP subcommand,
-the configurations of all physical interfaces will be displayed.
-If an interface name is specified, only the configuration of the given
-interface is displayed.
-.PP
-.I atm show interface [<interface>]
-.PP
-displays the following information:
-.PP
-.B Interface
-\- the name of the physical interface.
-.PP
-.B Sigmgr
-\- the name of the signalling manager which has been attached to the
-interface.
-A dash (-) is shown if no signalling manager has been attached.
-.PP
-.B State
-\- the state of the signalling manager for the interface.
-Each signalling manager has its own set of states.
-They are:
-.in +21
-.ti -16
-PVC:
-.ti -11
-ACTIVE\ ---\ The signalling manager is active.
-.ti -11
-DETACH\ ---\ The signalling manager is being detached.
-.ti -16
-SPANS:
-.ti -11
-ACTIVE\ ---\ The signalling manager is active.
-.ti -11
-DETACH\ ---\ The signalling manager is being detached.
-.ti -11
-INIT\ -----\ The signalling manager's initial state.
-.ti -11
-PROBE\ ----\ The signalling manager is attempting to make
-contact with the ATM switch.
-.ti -16
-UNI 3.0 or UNI 3.1:
-.ti -11
-NULL\ -----\ The signalling manager's initial state.
-.ti -11
-ADR_WAIT\ -\ The signalling manager is waiting for the NSAP
-prefix to be set.
-.ti -11
-INIT\ -----\ The signalling manager is attempting to establish
-contact with the switch.
-.ti -11
-ACTIVE\ ---\ The signalling manager is active.
-.ti -11
-DETACH\ ---\ The signalling manager is being detached.
-.ti -21
-.PP
-.B ATM address
-\- the ATM address of the interface.
-.PP
-.B Network interfaces
-\- the names of network interfaces, if any, associated with the
-physical interface.
-.PP
-If no parameters are specified on the \fIshow interface\fP subcommand,
-information about all physical interfaces will be displayed.
-If an interface name is specified, only information about the given
-interface is displayed.
-.PP
-.I atm show netif [<netif>]
-.PP
-displays the following information:
-.PP
-.B Net Intf
-\- the name of the network interface.
-.PP
-.B IP Address
-\- the IP address of the network interface.
-.PP
-If no parameters are specified on the \fIshow netif\fP subcommand,
-information about all network interfaces will be displayed.
-If an interface name is specified, only information about the given
-network interface is displayed.
-.PP
-\fIatm show stats interface [<interface> [phy | dev | atm | aal0 |
-aal4 | aal5 | driver]]\fP
-.PP
-displays statistics associated with one or more interfaces.
-Subject-area keywords
-(\fIphy\fP, \fIdev\fP, \fIatm\fP, \fIaal0\fP,
-\fIaal4\fP, \fIaal5\fP, or \fIdriver\fP)
-can be specified to change the scope of the statistics displayed.
-.PP
-If no subject area keyword is specified, the following information is
-displayed:
-.PP
-.B Interface
-\- the name of the physical ATM interface.
-.PP
-.B Input PDUs
-\- the number of Protocol Data Units (PDUs) which have been received
-by the interface.
-.PP
-.B Input Bytes
-\- the number of bytes which have been received by the interface.
-.PP
-.B Input Errs
-\- the number of input errors which the interface has experienced.
-.PP
-.B Output PDUs
-\- the number of Protocol Data Units (PDUs) which have been transmitted
-by the interface.
-.PP
-.B Output Bytes
-\- the number of bytes which have been transmitted by the interface.
-.PP
-.B Output Errs
-\- the number of output errors which the interface has experienced.
-.PP
-.B Cmd Errs
-\- the number of command errors which the interface has experienced.
-.PP
-If a subject-area keyword is specified, then statistics for
-that subject are displayed.
-The statistics displayed depend on the adapter.
-If requested statistics are not available for an adapter,
-an error will be noted.
-.PP
-If no parameters are specified on the \fIshow stats interface\fP
-subcommand, statistics for all ATM interfaces are displayed.
-If an interface name is specified, only statistics for the given
-interface are displayed.
-.PP
-.SS VCC Management Subcommands:
-.PP
-\fIatm delete PVC <interface> <vpi> <vci>\fP
-.br
-\fIatm delete SVC <interface> <vpi> <vci>\fP
-.PP
-where:
-.in +10
-.ti -5
-\fIPVC\fP specifies that the VCC to be closed is a PVC,
-.ti -5
-\fISVC\fP specifies that the VCC to be closed is an SVC,
-.ti -5
-\fI<interface>\fP specifies the physical interface at which the
-VCC to be closed terminates,
-.ti -5
-\fI<vpi>\fP specifies the Virtual Path Identifier (VPI) of the VCC,
-.ti -5
-\fI<vci>\fP specifies the Virtual Channel Identifier (VCI) of the VCC.
-.in -10
-.PP
-This command closes a VCC.
-The two forms differ only in that the first specifies that the
-VCC is a PVC (that was created by the \fIadd PVC\fP subcommand) and
-the second specifies that the VCC is an SVC.
-Reserved VCCs (with VCI values less than 32) cannot be closed
-with this command.
-.PP
-\fIatm show stats VCC [<interface> [<vpi> [<vci>]]]\fP
-.PP
-displays the following information:
-.PP
-.B Interface
-\- the physical interface on which the VCC terminates.
-.PP
-.B VPI
-\- the Virtual Path Identifier (VPI) for the VCC.
-.PP
-.B VCI
-\- the Virtual Channel Identifier (VCI) for the VCC.
-.PP
-.B Input PDUs
-\- the number of Protocol Data Units (PDUs) which have been received
-on the VCC.
-.PP
-.B Input Bytes
-\- the number of bytes which have been received on the VCC.
-.PP
-.B Input Errs
-\- the number of input errors which the VCC has experienced.
-.PP
-.B Output PDUs
-\- the number of Protocol Data Units (PDUs) which have been transmitted
-on the VCC.
-.PP
-.B Output Bytes
-\- the number of bytes which have been transmitted on the VCC.
-.PP
-.B Output Errs
-\- the number of output errors which the VCC has experienced.
-.PP
-If no parameters are specified on the \fIshow VCC\fP subcommand, all
-active VCCs are displayed.
-If an interface name is specified, all active VCCs for the given
-interface are displayed.
-If an interface and VPI are specified, all active VCCs for the VPI
-on the given interface are displayed.
-If an interface, VPI, and VCI are specified, only the specified VCC on
-the given interface is displayed (note that this could actually be
-two VCCs, since SPANS considers SVCs to be unidirectional).
-.PP
-\fIatm show VCC [<interface> [<vpi> [<vci>] | SVC | PVC]]\fP
-.PP
-displays the following information:
-.PP
-.B Interface
-\- the physical interface on which the VCC terminates.
-.PP
-.B VPI
-\- the Virtual Path Identifier (VPI) for the VCC.
-.PP
-.B VCI
-\- the Virtual Channel Identifier (VCI) for the VCC.
-.PP
-.B AAL
-\- the ATM Adaptation Layer (AAL) in use on the VCC.
-Possible values are null and AAL 1-5.
-.PP
-.B Type
-\- specifies whether the VCC is an SVC or a PVC.
-.PP
-.B Dir
-\- the direction of information flow on the VCC.
-VCCs can be inbound, outbound, or both.
-.PP
-.B State
-\- the state of the VCC, as reported by the signalling manager.
-Each signalling manager has its own set of states.
-They are:
-.in +21
-.ti -16
-PVC:
-.ti -11
-NULL\ -----\ No state.
-.ti -11
-ACTIVE\ ---\ The VCC is active.
-.ti -11
-FREE\ -----\ The VCC is closed and the signalling manager is waiting for
-its resources to be freed.
-.ti -16
-SPANS:
-.ti -11
-NULL\ -----\ No state.
-.ti -11
-ACTIVE\ ---\ The VCC is a PVC and is active.
-.ti -11
-ACT_DOWN\ -\ The VCC is a PVC and the interface is down.
-.ti -11
-POPEN\ ----\ The VCC is being opened.
-.ti -11
-R_POPEN\ --\ The VCC is being opened by a remote host.
-.ti -11
-OPEN\ -----\ The VCC is active.
-.ti -11
-CLOSE\ ----\ The VCC is being closed.
-.ti -11
-ABORT\ ----\ The VCC is being aborted.
-.ti -11
-FREE\ -----\ The VCC is closed and the signalling manager is waiting for
-its resources to be freed.
-.ti -16
-UNI 3.0 or UNI 3.1:
-.ti -11
-NULL\ -----\ No state.
-.ti -11
-C_INIT\ ---\ A VCC is being initiated.
-.ti -11
-C_OUT_PR\ -\ An outgoing VCC request is proceeding.
-.ti -11
-C_PRES\ ---\ A VCC is being initiated by the network.
-.ti -11
-CONN_REQ\ -\ A VCC request has been accepted by a HARP user.
-.ti -11
-C_IN_PR\ --\ An incoming VCC request is proceeding.
-.ti -11
-ACTIVE\ ---\ The VCC is active.
-.ti -11
-REL_REQ\ --\ The VCC is being closed.
-.ti -11
-REL_IND\ --\ The network is clearing a VCC.
-.ti -11
-SSCF_REC\ -\ The SSCF session on the signalling channel is in
-recovery from an error.
-.ti -11
-FREE\ -----\ The VCC is closed and the signalling manager is waiting
-for its resources to be freed.
-.ti -11
-ACT_DOWN\ -\ The VCC is a PVC and the interface is down.
-.ti -21
-.PP
-.B Encaps
-\- the encapsulation in effect on the VCC.
-Possible encapsulations are null and LLC/SNAP.
-.PP
-.B Owner
-\- the owner or owners of the VCC.
-Shows the name(s) of the function(s) using the VCC.
-.PP
-.B Destination
-\- the ATM address of the host at the remote end of the VCC.
-.PP
-If no parameters are specified on the \fIshow VCC\fP subcommand, all
-active VCCs are displayed.
-If an interface name is specified, all active VCCs for the given
-interface are displayed.
-If an interface and VPI are specified, all active VCCs for the VPI
-on the given interface are displayed.
-If an interface, VPI, and VCI are specified, only the specified VCC on
-the given interface is displayed (note that this could actually be
-two VCCs, since SPANS considers SVCs to be unidirectional).
-.PP
-.SS IP Management Subcommands:
-\fIatm add ARP [<netif>] <host> <ATM address>\fP
-.PP
-where:
-.in +10
-.ti -5
-\fI<netif>\fP is the optional name of the network interface the
-ATMARP entry is to be associated with.
-If no name is specified, a network interface is chosen depending
-on the IP address of the host being added.
-.ti -5
-\fI<host>\fP is the host name or IP address of the host to
-be added to the ATMARP table,
-.ti -5
-\fI<ATM address>\fP is the ATM address of the host.
-.in -10
-.PP
-This command adds an entry to the ATMARP table for ATM.
-The given host's IP address is associated with the given ATM address.
-When IP needs to transmit data to the host, the specified ATM
-address will be used to open an SVC.
-.PP
-The entry will be marked as permanent in the ATMARP table and will not
-be subject to aging.
-.PP
-.in +5
-.ti -5
-\fIatm add PVC <interface> <vpi> <vci> <aal> <encaps> IP <netif> [<host> | dynamic] <traffic> <params...>\fP
-.in -5
-.PP
-where:
-.in +10
-.ti -5
-\fI<interface>\fP specifies the physical interface where the PVC
-is to terminate,
-.ti -5
-\fI<vpi>\fP specifies the Virtual Path Identifier (VPI) of the PVC,
-.ti -5
-\fI<vci>\fP specifies the Virtual Channel Identifier (VCI) of the PVC,
-.ti -5
-\fI<aal>\fP specifies the ATM Adaptation Layer (AAL) for the PVC.
-Valid choices are "null" or "AAL0" for the null AAL; "AAL1" for
-AAL 1; "AAL2" for AAL 2; "AAL3", "AAL4", or "AAL3/4" for AAL 3/4;
-and "AAL5" for AAL 5,
-.ti -5
-\fI<encaps>\fP specifies the encapsulation for the PVC.
-Valid choices are "null" or "none" for null encapsulation, and
-"LLC/SNAP", "LLC", or "SNAP" for LLC/SNAP encapsulation,
-.ti -5
-\fIIP\fP specifies that the owner of the PVC is IP.
-.ti -5
-\fI<netif>\fP specifies the network interface which the PVC is
-to be associated with.
-The network interface must exist and be associated with the
-specified physical interface,
-.ti -5
-\fI<host> | dynamic\fP gives the address of the host at
-the far end of the PVC, or the word "dynamic" if its address
-is to be determined with Inverse ARP.
-If "dynamic" is specified, LLC/SNAP encapsulation must also
-be specified.
-.ti -5
-\fI<traffic>\fP is the traffic type of the PVC and may be one of
-UBR, CBR or VBR.
-Following the traffic type the traffic parameters must be given.
-For UBR and CBR this is the peak cell rate and for VBR these
-are the peak and sustainable cell rate and the maximum burst size.
-.PP
-This command creates a PVC with the specified attributes and attaches
-it to IP.
-.PP
-\fIatm delete ARP [<netif>] <host>\fP
-.PP
-where:
-.in +10
-.ti -5
-\fI<netif>\fP is the optional name of the network interface the
-ATMARP entry is associated with.
-If no name is specified, the specified host is deleted from the
-cache regardless of what network interface it is associated with.
-.ti -5
-\fI<host>\fP is the host name or IP address of the host to
-be deleted from the ATMARP table.
-.PP
-This command deletes the specified host's entry from the ATMARP table.
-.PP
-\fIatm set arpserver <netif> <ATM address> | local [<IP prefix> ...]\fP
-.PP
-where:
-.in +10
-.ti -5
-\fI<netif>\fP specifies the network interface for which the
-ATMARP server address is to be set.
-.ti -5
-\fI<ATM address>\fP specifies the ATM address of the host which is to
-provide ATMARP service.
-If "local" is specified instead of an ATM address, the host on
-which the command is issued will become the ATMARP server.
-.ti -5
-\fI<IP prefix> ...\fP is an optional list of IP prefixes
-that the ATMARP server will provide information about.
-An IP prefix is specified as a dotted decimal IP address, followed by
-a slash, followed a number specifying how many bits of the IP address
-are significant.
-For example, 10.0.0.0/8 indicates that the ATMARP server will provide
-services for all addresses on IP network 10.
-The IP subnetwork which the network interface belongs to is
-automatically included.
-.in -10
-.PP
-This command sets the address of the ATMARP server for a network
-interface.
-.PP
-.I atm show ARP [<host>]
-.PP
-displays the following information:
-.PP
-.B Net Intf
-\- the network interface which traffic for the entry will use.
-.PP
-.B Flags
-\- flags showing whether the entry is valid and whether it is
-permanent.
-\- flags giving further information about the ATMARP entry.
-The meanings of the characters in the flags are:
-.PP
-.in +5
-P - the entry is permanent
-.br
-R - the entry has been refreshed
-.br
-V - the entry is valid
-.in -5
-.PP
-.B Age
-\- the number of minutes for which the entry will remain valid.
-.PP
-.B Origin
-\- the source of the ATMARP entry.
-Possible values are:
-.in +16
-.ti -11
-LOCAL\ ----\ The entry is for an interface on the host.
-.ti -11
-PERM\ -----\ The entry is permanent.
-This is used for entries that are created with the
-\fIadd ARP\fP command.
-.ti -11
-REG\ ------\ The entry was created as the result of a host
-registering with the ATMARP server.
-.ti -11
-SCSP\ -----\ The entry was learned via SCSP.
-.ti -11
-LOOKUP\ ---\ The entry was created as the result of a host
-performing an ATMARP lookup.
-.ti -11
-PEER_RSP\ -\ The entry was created as the result of a host
-answering an InARP Request.
-.ti -11
-PEER_REQ\ -\ The entry was created as the result of a host
-sending an InARP Request.
-.in -5
-.PP
-.B ATM address
-\- the ATM address of the host the entry refers to.
-.PP
-.B IP address
-\- the IP address or domain name of the host the entry refers to.
-.PP
-If no parameters are specified on the \fIshow ARP\fP subcommand,
-the whole ATMARP table will be displayed.
-If a host name or IP address is specified, only information about the
-given host is displayed.
-.PP
-This command displays both information that has been learned dynamically
-(through one form or another of ATMARP and via SCSP) and information
-which has been configured by the user (through the \fIadd ARP\fP
-subcommand).
-.PP
-.I atm show arpserver [<netif>]
-.PP
-displays the following information:
-.PP
-.B Net Intf
-\- the network interface for which information is being displayed.
-.PP
-.B State
-\- the state of the connection to the ATMARP server.
-Possible values are:
-.in +16
-.ti -11
-NOT_CONF\ -\ No ATMARP server has been configured for the interface.
-.ti -11
-SERVER\ ---\ The host is the ATMARP server.
-.ti -11
-PEND_ADR\ -\ No ATM address has been set for the interface.
-.ti -11
-POPEN\ ----\ The host is attempting to open a VCC to the ATMARP server.
-.ti -11
-REGISTER\ -\ The host has a VCC open to the ATMARP server and is in
-the process of registering with the server.
-.ti -11
-ACTIVE\ ---\ The ATMARP server connection is active.
-.in -16
-.PP
-.B ATM Address
-\- the ATM address of the ATMARP server.
-.PP
-If no parameters are specified on the \fIshow arpserver\fP subcommand,
-the ATMARP servers for all network interfaces will be displayed.
-If an interface name is specified, only information about the given
-network interface is displayed.
-.PP
-.I atm show IPVCC [<host> | <netif>]
-.PP
-displays the following information:
-.PP
-.B Net Intf
-\- the name of the network interface at which the VCC terminates.
-.PP
-.B VPI
-\- the Virtual Path Identifier (VPI) for the VCC.
-.PP
-.B VCI
-\- the Virtual Channel Identifier (VCI) for the VCC.
-.PP
-.B State
-\- the state of the VCC.
-Possible values are:
-.in +15
-.ti -10
-PMAP\ ----\ The host has an IP packet to send and is waiting for
-an ATMARP mapping.
-.ti -10
-POPEN\ ---\ The VCC is being opened.
-.ti -10
-PACCEPT\ -\ A VCC from a remote host is being accepted.
-.ti -10
-ACTPENT\ -\ A PVC is open, but no ATMARP information is
-available for it yet.
-.ti -10
-ACTIVE\ --\ The VCC is active.
-.in -15
-.PP
-.B Flags
-\- flags giving further information about the VCC.
-The meanings of the characters in the flags are:
-.PP
-.in +5
-S - the VCC is an SVC
-.br
-P - the VCC is a PVC
-.br
-L - the VCC uses LLC/SNAP encapsulation
-.br
-M - the IP-to-ATM address mapping for the VCC is valid
-.br
-N - there is no idle timeout for the VCC
-.in -5
-.PP
-.B IP Address
-\- the name and IP address of the host at the remote end of the VCC.
-.PP
-If no parameters are specified on the \fIshow IPVCC\fP subcommand, all
-active VCCs are displayed.
-If a host name is specified, the active VCC(s) for the given
-host are displayed.
-If a network interface name is specified, the active VCC(s) for the
-given network interface are displayed.
-.PP
-.SS Miscellaneous Subcommands:
-.I atm help
-.PP
-displays a synopsis of the atm command with its subcommands
-and their parameters.
-.PP
-.I atm show version
-displays the version of the running HARP software.
-.fi
-.SH "SEE ALSO"
-\fIilmid\fP (8); \fIscspd\fP (8); \fIatmarpd\fP (8).
-.fi
-.SH BUGS
-Care must be taken to avoid confusing physical interfaces and
-network interfaces.
-.PP
-Please report any bugs to harp-bugs@magic.net.
-.fi
-.SH COPYRIGHT
-Copyright (c) 1994-1998, Network Computing Services, Inc.
-.fi
-.SH AUTHORS
-John Cavanaugh, Network Computing Services, Inc.
-.br
-Mike Spengler, Network Computing Services, Inc.
-.br
-Joe Thomas, Network Computing Services, Inc.
-.fi
-.SH ACKNOWLEDGMENTS
-This software was developed with the support of the Defense
-Advanced Research Projects Agency (DARPA).
diff --git a/sbin/atm/atm/atm.c b/sbin/atm/atm/atm.c
deleted file mode 100644
index 94cde38..0000000
--- a/sbin/atm/atm/atm.c
+++ /dev/null
@@ -1,1143 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User configuration and display program
- * --------------------------------------
- *
- * Main routine
- *
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/sockio.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netatm/port.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_cm.h>
-#include <netatm/atm_sigmgr.h>
-#include <netatm/atm_ioctl.h>
-
-#include <errno.h>
-#include <libatm.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <err.h>
-
-#include "atm.h"
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-/*
- * Usage string
- */
-#define USAGE_STR "Interface management subcommands:\n\
- attach <intf> <protocol>\n\
- detach <intf>\n\
- set mac <intf> <MAC/ESI address>\n\
- set netif <intf> <prefix> <n>\n\
- set prefix <intf> <NSAP prefix>\n\
- show config [<intf>]\n\
- show interface [<intf>]\n\
- show netif [<netif>]\n\
- show stats interface [<intf> phy | dev | atm | aal0 | aal4 |\n\
- aal5 | driver]\n\
-\n\
-VC management subcommands:\n\
- add pvc <intf> <vpi> <vci> <aal> <encaps> <owner> ...\n\
- [UBR <pcr> | CBR <pcr> | VBR <pcr> <scr> <mbs>]\n\
- delete pvc <intf> <vpi> <vci>\n\
- delete svc <intf> <vpi> <vci>\n\
- show stats vcc [<intf> [vpi [vci]]]\n\
- show vcc [<intf> [<vpi> [<vci>] | SVC | PVC]]\n\
-\n\
-IP management subcommands:\n\
- add arp [<netif>] <IP addr> <ATM addr>\n\
- add pvc <intf> <vpi> <vci> <aal> <encaps> IP <netif> <IP addr> |\n\
- dynamic\n\
- delete arp [<netif>] <IP addr>\n\
- set arpserver <netif> <server> <IP prefix> ...\n\
- show arp [<host>]\n\
- show arpserver [<netif>]\n\
- show ipvcc [<IP addr> | <netif>]\n\
-\n\
-Miscellaneous subcommands:\n\
- help\n\
- show version\n"
-
-
-/*
- * Local definitions
- */
-static int do_cmd(const struct cmd *, int, char **);
-static void usage(const struct cmd *, const char *);
-
-static void attach(int, char **, const struct cmd *);
-static void detach(int, char **, const struct cmd *);
-static void help(int, char **, const struct cmd *);
-static void arp_add(int, char **, const struct cmd *);
-static void pvc_add(int, char **, const struct cmd *);
-static void pvc_dlt(int, char **, const struct cmd *);
-static void svc_dlt(int, char **, const struct cmd *);
-static void arp_dlt(int, char **, const struct cmd *);
-static void vcc_dlt(int, char **, const struct cmd *, struct atmdelreq *);
-
-static const struct cmd add_subcmd[];
-static const struct cmd dlt_subcmd[];
-static const struct cmd set_subcmd[];
-static const struct cmd show_subcmd[];
-static const struct cmd stats_subcmd[];
-
-static const struct cmd cmds[] = {
- { "add", 0, 0, NULL, (const char *)add_subcmd },
- { "attach", 2, 2, attach, "<intf> <protocol>" },
- { "delete", 0, 0, NULL, (const char *)dlt_subcmd },
- { "detach", 1, 1, detach, "<intf>" },
- { "set", 0, 0, NULL, (const char *)set_subcmd },
- { "show", 0, 0, NULL, (const char *)show_subcmd },
- { "help", 0, 99, help, "" },
- { 0, 0, 0, NULL, "" }
-};
-
-static const struct cmd add_subcmd[] = {
- { "arp", 2, 3, arp_add, "[<netif>] <IP addr> <ATM addr>" },
- { "pvc", 6, 16, pvc_add, "<intf> <vpi> <vci> <aal> <encaps> <owner> <netif> ... [UBR | CBR | VBR]" },
- { 0, 0, 0, NULL, "" }
-};
-
-static const struct cmd dlt_subcmd[] = {
- { "arp", 1, 2, arp_dlt, "[<netif>] <IP addr>" },
- { "pvc", 3, 3, pvc_dlt, "<intf> <vpi> <vci>" },
- { "svc", 3, 3, svc_dlt, "<intf> <vpi> <vci>" },
- { 0, 0, 0, NULL, "" }
-};
-
-static const struct cmd set_subcmd[] = {
- { "arpserver", 2, 18, set_arpserver, "<netif> <server>" },
- { "mac", 2, 2, set_macaddr, "<intf> <MAC/ESI address>" },
- { "netif", 3, 3, set_netif, "<intf> <prefix> <n>" },
- { "prefix", 2, 2, set_prefix, "<intf> <NSAP prefix>" },
- { 0, 0, 0, NULL, ""}
-};
-
-static const struct cmd show_subcmd[] = {
- { "arp", 0, 1, show_arp, "[<host>]" },
- { "arpserver", 0, 1, show_arpserv, "[<netif>]" },
- { "config", 0, 1, show_config, "[<intf>]" },
- { "interface", 0, 1, show_intf, "[<intf>]" },
- { "ipvcc", 0, 3, show_ip_vcc, "[<IP addr> | <netif>]" },
- { "netif", 0, 1, show_netif, "[<netif>]" },
- { "stats", 0, 3, NULL, (const char *)stats_subcmd },
- { "vcc", 0, 3, show_vcc, "[<intf>] [<vpi> [<vci>] | SVC | PVC]" },
- { "version", 0, 0, show_version, "" },
- { 0, 0, 0, NULL, "" }
-};
-
-static const struct cmd stats_subcmd[] = {
- { "interface", 0, 2, show_intf_stats, "[<intf> [cfg | phy | dev | atm | aal0 | aal4 | aal5 | driver]]" },
- { "vcc", 0, 3, show_vcc_stats, "[<intf> [vpi [vci]]]" },
- { 0, 0, 0, NULL, "" }
-};
-
-
-/*
- * Supported signalling protocols
- */
-static const struct proto protos[] = {
- { "SIGPVC", ATM_SIG_PVC },
- { "SPANS", ATM_SIG_SPANS },
- { "UNI30", ATM_SIG_UNI30 },
- { "UNI31", ATM_SIG_UNI31 },
- { "UNI40", ATM_SIG_UNI40 },
- { 0, 0 }
-};
-
-/*
- * Supported VCC owners
- */
-static const struct owner owners[] = {
- { "IP", ENDPT_IP, ip_pvcadd },
- { "SPANS", ENDPT_SPANS_SIG,0 },
- { "SPANS CLS", ENDPT_SPANS_CLS,0 },
- { "UNI SIG", ENDPT_UNI_SIG, 0 },
- { 0, 0, 0 }
-};
-
-/*
- * Supported AAL parameters
- */
-const struct aal aals[] = {
- { "Null", ATM_AAL0 },
- { "AAL0", ATM_AAL0 },
- { "AAL1", ATM_AAL1 },
- { "AAL2", ATM_AAL2 },
- { "AAL4", ATM_AAL3_4 },
- { "AAL3", ATM_AAL3_4 },
- { "AAL3/4", ATM_AAL3_4 },
- { "AAL5", ATM_AAL5 },
- { 0, 0 },
-};
-
-/*
- * Supported VCC encapsulations
- */
-const struct encaps encaps[] = {
- { "Null", ATM_ENC_NULL },
- { "None", ATM_ENC_NULL },
- { "LLC/SNAP", ATM_ENC_LLC },
- { "LLC", ATM_ENC_LLC },
- { "SNAP", ATM_ENC_LLC },
- { 0, 0 },
-};
-
-/*
- * Supported ATM traffic types
- */
-struct traffics traffics[] = {
- { "UBR", T_ATM_UBR, 1, "UBR <pcr>" },
- { "CBR", T_ATM_CBR, 1, "CBR <pcr>" },
- { "VBR", T_ATM_VBR, 3, "VBR <pcr> <scr> <mbs>" },
-#ifdef notyet
- { "ABR", T_ATM_ABR, 2, "ABR <arg1> <arg2>" },
-#endif
- { NULL, 0, 0, NULL }
-};
-
-char *prog;
-char prefix[128] = "";
-
-int
-main(int argc, char *argv[])
-{
- int error;
-
- /*
- * Save program name, ignoring any path components
- */
- if ((prog = (char *)strrchr(argv[0], '/')) != NULL)
- prog++;
- else
- prog = argv[0];
-
- if (argc < 2) {
- usage(cmds, "");
- exit(1);
- }
- argc--; argv++;
-
- /*
- * Validate and process command
- */
- if ((error = do_cmd(cmds, argc, argv)) != 0)
- usage(cmds, "");
-
- exit(error);
-}
-
-
-/*
- * Validate and process user command
- *
- * Arguments:
- * descp pointer to command description array
- * argc number of arguments left in command
- * argv pointer to argument strings
- *
- * Returns:
- * none
- *
- */
-static int
-do_cmd(const struct cmd *descp, int argc, char **argv)
-{
- const struct cmd *cmdp = NULL;
-
- /*
- * Make sure we have paramaters to process
- */
- if (!argc) {
- usage(cmds, "");
- exit(1);
- }
-
- /*
- * Figure out what command user wants
- */
- for (; descp->name; descp++) {
- /*
- * Use an exact match if there is one
- */
- if (!strcasecmp(descp->name, argv[0])) {
- cmdp = descp;
- break;
- }
- /*
- * Look for a match on the first part of keyword
- */
- if (!strncasecmp(descp->name, argv[0], strlen(argv[0]))) {
- if (cmdp) {
- fprintf(stderr, "%s: Ambiguous parameter \"%s\"\n",
- prog, argv[0]);
- exit(1);
- }
- cmdp = descp;
- }
- }
- if (!cmdp)
- return(1);
- argc--; argv++;
-
- /*
- * See if this command has subcommands
- */
- if (cmdp->func == NULL) {
- strcat(prefix, cmdp->name);
- strcat(prefix, " ");
- return (do_cmd((const struct cmd *)(const void *)cmdp->help,
- argc, argv));
- }
-
- /*
- * Minimal validation
- */
- if ((argc < cmdp->minp) || (argc > cmdp->maxp)) {
- fprintf(stderr, "%s: Invalid number of arguments\n",
- prog);
- fprintf(stderr, "\tformat is: %s%s %s\n",
- prefix, cmdp->name, cmdp->help);
- exit(1);
- }
-
- /*
- * Process command
- */
- (*cmdp->func)(argc, argv, cmdp);
- return(0);
-}
-
-
-/*
- * Print command usage information
- *
- * Arguments:
- * cmdp pointer to command description
- * pref pointer current command prefix
- *
- * Returns:
- * none
- *
- */
-static void
-usage(const struct cmd *cmdp __unused, const char *pref __unused)
-{
- fprintf(stderr, "usage: %s command [arg] [arg]...\n", prog);
- fprintf(stderr, USAGE_STR);
-}
-
-
-/*
- * Process interface attach command
- *
- * Command format:
- * atm attach <interface_name> <protocol_name>
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-static void
-attach(int argc __unused, char **argv, const struct cmd *cmdp __unused)
-{
- struct atmcfgreq aar;
- const struct proto *prp;
- int s;
-
- /*
- * Validate interface name
- */
- if (strlen(argv[0]) > sizeof(aar.acr_att_intf) - 1) {
- fprintf(stderr, "%s: Illegal interface name\n", prog);
- exit(1);
- }
-
- /*
- * Find/validate requested signalling protocol
- */
- for (prp = protos; prp->p_name; prp++) {
- if (strcasecmp(prp->p_name, argv[1]) == 0)
- break;
- }
- if (prp->p_name == NULL) {
- fprintf(stderr, "%s: Unknown signalling protocol\n", prog);
- exit(1);
- }
-
-
- /*
- * Build ioctl request
- */
- aar.acr_opcode = AIOCS_CFG_ATT;
- strncpy(aar.acr_att_intf, argv[0], sizeof(aar.acr_att_intf));
- aar.acr_att_proto = prp->p_id;
-
- /*
- * Tell the kernel to do the attach
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCCFG, (caddr_t)&aar) < 0) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case EINVAL:
- case EOPNOTSUPP:
- case EPROTONOSUPPORT:
- perror("Internal error");
- break;
- case ENOMEM:
- fprintf(stderr, "Kernel memory exhausted\n");
- break;
- case EEXIST:
- fprintf(stderr, "Signalling manager already attached to %s\n",
- argv[0]);
- break;
- case ENETDOWN:
- fprintf(stderr, "ATM network is inoperable\n");
- break;
- case EPERM:
- fprintf(stderr, "Must be super user to use attach subcommand\n");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- argv[0]);
- break;
- case ETOOMANYREFS:
- fprintf(stderr, "%s has too few or too many network interfaces\n",
- argv[0]);
- break;
- default:
- perror("Ioctl (AIOCCFG) attach");
- break;
- }
- exit(1);
- }
- (void)close(s);
-}
-
-
-/*
- * Process interface detach command
- *
- * Command format:
- * atm detach <interface_name>
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-static void
-detach(int argc __unused, char **argv, const struct cmd *cmdp __unused)
-{
- struct atmcfgreq adr;
- int s;
-
- /*
- * Validate interface name
- */
- if (strlen(argv[0]) > sizeof(adr.acr_det_intf) - 1) {
- fprintf(stderr, "%s: Illegal interface name\n", prog);
- exit(1);
- }
-
- /*
- * Build ioctl request
- */
- adr.acr_opcode = AIOCS_CFG_DET;
- strncpy(adr.acr_det_intf, argv[0], sizeof(adr.acr_det_intf));
-
- /*
- * Tell the kernel to do the detach
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCCFG, (caddr_t)&adr) < 0) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case EALREADY:
- fprintf(stderr, "Signalling manager already detaching from %s\n",
- argv[0]);
- break;
- case EINVAL:
- perror("Internal error");
- break;
- case EPERM:
- fprintf(stderr, "Must be super user to use detach subcommand\n");
- break;
- default:
- perror("ioctl (AIOCCFG) detach");
- break;
- }
- exit(1);
- }
- (void)close(s);
-}
-
-
-/*
- * Process PVC add command
- *
- * Command format:
- * atm add PVC <interface_name> <vpi> <vci> <aal> <encaps>
- * <owner_name> ...owner info...
- * [ubr <PCR> | cbr <PCR> | vbr <PCR> <SCR> <MBS>]
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-static void
-pvc_add(int argc, char **argv, const struct cmd *cmdp)
-{
- struct atmaddreq apr;
- struct atminfreq air;
- struct air_int_rsp *int_info;
- const struct owner *owp;
- const struct aal *alp;
- const struct encaps *enp;
- const struct traffics *trafp;
- char *cp;
- u_long v;
- ssize_t buf_len;
- int s;
-
- /*
- * Initialize opcode and flags
- */
- apr.aar_opcode = AIOCS_ADD_PVC;
- apr.aar_pvc_flags = 0;
-
- /*
- * Validate interface name and issue an information
- * request IOCTL for the interface
- */
- if (strlen(argv[0]) > sizeof(apr.aar_pvc_intf) - 1) {
- fprintf(stderr, "%s: Illegal interface name\n", prog);
- exit(1);
- }
- bzero(air.air_int_intf, sizeof(air.air_int_intf));
- strcpy(air.air_int_intf, argv[0]);
- air.air_opcode = AIOCS_INF_INT;
- buf_len = do_info_ioctl(&air, sizeof(struct air_int_rsp));
- if (buf_len == -1) {
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- err(1, "Internal error");
- case ENXIO:
- errx(1, "%s is not an ATM device", argv[0]);
- default:
- err(1, "ioctl (AIOCINFO)");
- }
- }
- int_info = (struct air_int_rsp *)(void *)air.air_buf_addr;
- strcpy(apr.aar_pvc_intf, argv[0]);
- argc--;
- argv++;
-
- /*
- * Validate vpi/vci values
- */
- errno = 0;
- v = strtoul(argv[0], &cp, 0);
- if (errno != 0 || *cp != '\0' || v >= 1 << 8)
- errx(1, "Invalid VPI value '%s'", argv[0]);
- apr.aar_pvc_vpi = (u_short)v;
- argc--;
- argv++;
-
- errno = 0;
- v = strtoul(argv[0], &cp, 0);
- if (errno != 0 || *cp != '\0' || v < MIN_VCI || v >= 1 << 16)
- errx(1, "Invalid VCI value '%s'", argv[0]);
- apr.aar_pvc_vci = (u_short)v;
- argc--;
- argv++;
-
- /*
- * Validate requested PVC AAL
- */
- for (alp = aals; alp->a_name; alp++) {
- if (strcasecmp(alp->a_name, argv[0]) == 0)
- break;
- }
- if (alp->a_name == NULL)
- errx(1, "Invalid PVC AAL '%s'", argv[0]);
- apr.aar_pvc_aal = alp->a_id;
- argc--;
- argv++;
-
- /*
- * Validate requested PVC encapsulation
- */
- for (enp = encaps; enp->e_name; enp++) {
- if (strcasecmp(enp->e_name, argv[0]) == 0)
- break;
- }
- if (enp->e_name == NULL)
- errx(1, "Invalid PVC encapsulation '%s'", argv[0]);
- apr.aar_pvc_encaps = enp->e_id;
- argc--;
- argv++;
-
- /*
- * Validate requested PVC owner
- */
- for (owp = owners; owp->o_name; owp++) {
- if (strcasecmp(owp->o_name, argv[0]) == 0)
- break;
- }
- if (owp->o_name == NULL)
- errx(1, "Unknown PVC owner '%s'", argv[0]);
- apr.aar_pvc_sap = owp->o_sap;
- if (owp->o_pvcadd == NULL)
- errx(1, "Unsupported PVC owner '%s'", argv[0]);
- argc--;
- argv++;
-
- /*
- * Perform service user processing
- */
- (*owp->o_pvcadd)(argc, argv, cmdp, &apr, int_info);
-
- argc -= 2;
- argv += 2;
-
- if (argc > 0) {
- /*
- * Validate requested traffic
- */
- for (trafp = traffics; trafp->t_name; trafp++) {
- if (strcasecmp(trafp->t_name, argv[0]) == 0)
- break;
- }
- if (trafp->t_name == NULL)
- errx(1, "Unknown traffic type '%s'", argv[0]);
- apr.aar_pvc_traffic_type = trafp->t_type;
- argc--;
- argv++;
-
- if (trafp->t_argc != argc)
- errx(1, "Invalid traffic parameters\n\t %s",
- trafp->help);
- switch (trafp->t_type) {
-
- case T_ATM_UBR:
- case T_ATM_CBR:
- errno = 0;
- v = strtoul(argv[0], &cp, 0);
- if (errno != 0 || *cp != '\0' || v >= 1 << 24)
- errx(1, "Invalid PCR value '%s'", argv[0]);
- apr.aar_pvc_traffic.forward.PCR_high_priority = (int32_t) v;
- apr.aar_pvc_traffic.forward.PCR_all_traffic = (int32_t) v;
- apr.aar_pvc_traffic.backward.PCR_high_priority = (int32_t) v;
- apr.aar_pvc_traffic.backward.PCR_all_traffic = (int32_t) v;
- argc--;
- argv++;
- apr.aar_pvc_traffic.forward.SCR_high_priority = T_ATM_ABSENT;
- apr.aar_pvc_traffic.forward.SCR_all_traffic = T_ATM_ABSENT;
- apr.aar_pvc_traffic.backward.SCR_high_priority = T_ATM_ABSENT;
- apr.aar_pvc_traffic.backward.SCR_all_traffic = T_ATM_ABSENT;
- apr.aar_pvc_traffic.forward.MBS_high_priority = T_ATM_ABSENT;
- apr.aar_pvc_traffic.forward.MBS_all_traffic = T_ATM_ABSENT;
- apr.aar_pvc_traffic.backward.MBS_high_priority = T_ATM_ABSENT;
- apr.aar_pvc_traffic.backward.MBS_all_traffic = T_ATM_ABSENT;
- break;
-
- case T_ATM_VBR: /* VBR pcr scr mbs */
- errno = 0;
- v = strtoul(argv[0], &cp, 0);
- if (errno != 0 || *cp != '\0' || v >= 1 << 24)
- errx(1, "Invalid PCR value '%s'", argv[0]);
- apr.aar_pvc_traffic.forward.PCR_high_priority = (int32_t)v;
- apr.aar_pvc_traffic.forward.PCR_all_traffic = (int32_t)v;
- apr.aar_pvc_traffic.backward.PCR_high_priority = (int32_t)v;
- apr.aar_pvc_traffic.backward.PCR_all_traffic = (int32_t)v;
- argc--;
- argv++;
-
- errno = 0;
- v = strtoul(argv[0], &cp, 0);
- if (errno != 0 || *cp != '\0' || v >= 1 << 24)
- errx(1, "Invalid SCR value '%s'", argv[0]);
- apr.aar_pvc_traffic.forward.SCR_high_priority = (int32_t)v;
- apr.aar_pvc_traffic.forward.SCR_all_traffic = (int32_t)v;
- apr.aar_pvc_traffic.backward.SCR_high_priority = (int32_t)v;
- apr.aar_pvc_traffic.backward.SCR_all_traffic = (int32_t)v;
- argc--;
- argv++;
-
- errno = 0;
- v = strtol(argv[0], &cp, 0);
- if (errno != 0 || *cp != '\0' || v >= 1 << 24)
- errx(1, "Invalid MBS value '%s'", argv[0]);
- apr.aar_pvc_traffic.forward.MBS_high_priority = (int32_t)v;
- apr.aar_pvc_traffic.forward.MBS_all_traffic = (int32_t)v;
- apr.aar_pvc_traffic.backward.MBS_high_priority = (int32_t)v;
- apr.aar_pvc_traffic.backward.MBS_all_traffic = (int32_t)v;
- argc--;
- argv++;
-
- break;
-
- case T_ATM_ABR:
- errx(1, "ABR not yet supported");
-
- default:
- errx(1, "Unsupported traffic type '%d'", trafp->t_type);
- }
- } else {
- /*
- * No PVC traffic type
- */
- apr.aar_pvc_traffic_type = T_ATM_NULL;
- }
- if (argc > 0)
- errx(1, "Too many parameters");
-
- /*
- * Tell the kernel to add the PVC
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCADD, (caddr_t)&apr) < 0) {
- switch (errno) {
- case EPROTONOSUPPORT:
- case ENOPROTOOPT:
- err(1, "Internal error");
- case EINVAL:
- errx(1, "Invalid parameter");
- case EEXIST:
- errx(1, "PVC already exists");
- break;
- case ENETDOWN:
- errx(1, "ATM network is inoperable");
- break;
- case ENOMEM:
- errx(1, "Kernel memory exhausted");
- break;
- case EPERM:
- errx(1, "Must be super user to use add subcommand");
- break;
- case ERANGE:
- errx(1, "Invalid VPI or VCI value");
- break;
- default:
- err(1, "ioctl (AIOCADD) add PVC");
- }
- }
- (void)close(s);
-}
-
-
-/*
- * Process ARP add command
- *
- * Command formats:
- * atm add arp [<netif>] <IP addr> <ATM addr>
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-static void
-arp_add(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- int len, s;
- struct atmaddreq apr;
- Atm_addr host_atm;
- struct sockaddr_in *sain;
- union {
- struct sockaddr_in sain;
- struct sockaddr sa;
- } host_ip;
-
- /*
- * Initialize add request structure
- */
- bzero(&apr, sizeof(apr));
-
- /*
- * Get network interface name if one is present
- */
- if (argc == 3) {
- check_netif_name(argv[0]);
- strcpy(apr.aar_arp_intf, argv[0]);
- argc--; argv++;
- }
-
- /*
- * Get IP address of specified host name
- */
- bzero(&host_ip, sizeof(host_ip));
- host_ip.sa.sa_family = AF_INET;
- sain = get_ip_addr(argv[0]);
- host_ip.sain.sin_addr.s_addr = sain->sin_addr.s_addr;
- argc--; argv++;
-
- /*
- * Get specified ATM address
- */
- len = get_hex_atm_addr(argv[0], (u_char *)host_atm.address,
- sizeof(Atm_addr_nsap));
- switch(len) {
- case sizeof(Atm_addr_nsap):
- host_atm.address_format = T_ATM_ENDSYS_ADDR;
- host_atm.address_length = sizeof(Atm_addr_nsap);
- break;
- case sizeof(Atm_addr_spans):
- host_atm.address_format = T_ATM_SPANS_ADDR;
- host_atm.address_length = sizeof(Atm_addr_spans);
- break;
- default:
- fprintf(stderr, "%s: Invalid ATM address\n", prog);
- exit(1);
- }
-
- /*
- * Build IOCTL request
- */
- apr.aar_opcode = AIOCS_ADD_ARP;
- apr.aar_arp_dst = host_ip.sa;
- ATM_ADDR_COPY(&host_atm, &apr.aar_arp_addr);
- apr.aar_arp_origin = ARP_ORIG_PERM;
-
- /*
- * Tell the kernel to add the ARP table entry
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCADD, (caddr_t)&apr) < 0) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case EINVAL:
- fprintf(stderr, "Invalid parameter\n");
- break;
- case EPERM:
- fprintf(stderr, "Must be super user to use add subcommand\n");
- break;
- case EADDRNOTAVAIL:
- fprintf(stderr, "IP address not valid for interface\n");
- break;
- default:
- perror("ioctl (AIOCADD) add");
- break;
- }
- exit(1);
- }
- (void)close(s);
-}
-
-
-/*
- * Process PVC delete command
- *
- * Command formats:
- * atm delete pvc <interface_name> <vpi> <vci>
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-static void
-pvc_dlt(int argc, char **argv, const struct cmd *cmdp)
-{
- struct atmdelreq apr;
-
- /*
- * Set opcode
- */
- apr.adr_opcode = AIOCS_DEL_PVC;
-
- /*
- * Complete request by calling subroutine
- */
- vcc_dlt(argc, argv, cmdp, &apr);
-}
-
-
-/*
- * Process SVC delete command
- *
- * Command formats:
- * atm delete svc <interface_name> <vpi> <vci>
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-static void
-svc_dlt(int argc, char **argv, const struct cmd *cmdp)
-{
- struct atmdelreq apr;
-
- /*
- * Set opcode
- */
- apr.adr_opcode = AIOCS_DEL_SVC;
-
- /*
- * Complete request by calling subroutine
- */
- vcc_dlt(argc, argv, cmdp, &apr);
-}
-
-
-/*
- * Complete an SVC or PVC delete command
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- * apr pointer to ATM delete IOCTL structure
- *
- * Returns:
- * none
- *
- */
-static void
-vcc_dlt(int argc, char **argv, const struct cmd *cmdp __unused,
- struct atmdelreq *apr)
-{
- char *cp;
- long v;
- int s;
-
- /*
- * Validate interface name
- */
- if (strlen(argv[0]) > sizeof(apr->adr_pvc_intf) - 1) {
- fprintf(stderr, "%s: Illegal interface name\n", prog);
- exit(1);
- }
- strcpy(apr->adr_pvc_intf, argv[0]);
- argc--; argv++;
-
- /*
- * Validate vpi/vci values
- */
- v = strtol(argv[0], &cp, 0);
- if ((*cp != '\0') || (v < 0) || (v >= 1 << 8)) {
- fprintf(stderr, "%s: Invalid VPI value\n", prog);
- exit(1);
- }
- apr->adr_pvc_vpi = (u_short) v;
- argc--; argv++;
-
- v = strtol(argv[0], &cp, 0);
- if ((*cp != '\0') || (v < MIN_VCI) || (v >= 1 << 16)) {
- fprintf(stderr, "%s: Invalid VCI value\n", prog);
- exit(1);
- }
- apr->adr_pvc_vci = (u_short) v;
- argc--; argv++;
-
- /*
- * Tell the kernel to delete the VCC
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCDEL, (caddr_t)apr) < 0) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case EINVAL:
- fprintf(stderr, "Invalid parameter\n");
- break;
- case ENOENT:
- fprintf(stderr, "VCC not found\n");
- break;
- case EALREADY:
- fprintf(stderr, "VCC already being closed\n");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- apr->adr_pvc_intf);
- break;
- case EPERM:
- fprintf(stderr, "Must be super user to use delete subcommand\n");
- break;
- default:
- perror("ioctl (AIOCDEL) delete");
- break;
- }
- exit(1);
- }
- (void)close(s);
-}
-
-
-/*
- * Process ARP delete command
- *
- * Command formats:
- * atm delete arp <IP addr>
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-static void
-arp_dlt(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- int s;
- struct atmdelreq apr;
- struct sockaddr_in *sain;
- union {
- struct sockaddr_in sain;
- struct sockaddr sa;
- } host_addr;
-
- /*
- * Set opcode
- */
- bzero(&apr, sizeof(apr));
- apr.adr_opcode = AIOCS_DEL_ARP;
-
- /*
- * Get network interface name if one is present
- */
- if (argc == 2) {
- check_netif_name(argv[0]);
- strcpy(apr.adr_arp_intf, argv[0]);
- argc--; argv++;
- }
-
- /*
- * Get IP address of specified host name
- */
- bzero(&host_addr, sizeof(host_addr));
- host_addr.sa.sa_family = AF_INET;
- sain = get_ip_addr(argv[0]);
- host_addr.sain.sin_addr.s_addr = sain->sin_addr.s_addr;
- apr.adr_arp_dst = host_addr.sa;
-
- /*
- * Tell the kernel to delete the ARP table entry
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCDEL, (caddr_t)&apr) < 0) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case EINVAL:
- fprintf(stderr, "Invalid parameter\n");
- break;
- case EPERM:
- fprintf(stderr, "Must be super user to use delete subcommand\n");
- break;
- default:
- perror("ioctl (AIOCDEL) delete");
- break;
- }
- exit(1);
- }
- (void)close(s);
-}
-
-
-/*
- * Process help command
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-static void
-help(int argc __unused, char **argv __unused, const struct cmd *cmdp __unused)
-{
- usage(cmds, "");
-}
diff --git a/sbin/atm/atm/atm.h b/sbin/atm/atm/atm.h
deleted file mode 100644
index 09f5c87..0000000
--- a/sbin/atm/atm/atm.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- *
- * @(#) $FreeBSD$
- *
- */
-
-/*
- * User configuration and display program
- * --------------------------------------
- *
- * Control blocks
- *
- */
-
-#define MAX_NIFS 256 /* Max network interfaces */
-#define MIN_VCI 32 /* Smallest non-reserved VCI */
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-
-/*
- * User commands
- */
-struct cmd {
- const char *name; /* Command name */
- int minp; /* Minimum number of parameters */
- int maxp; /* Maximum number of parameters */
- void (*func)(int, char **,
- const struct cmd *);/* Processing function */
- const char *help; /* User help string */
-};
-
-
-/*
- * Supported signalling protocols
- */
-struct proto {
- const char *p_name; /* Protocol name */
- u_char p_id; /* Protocol id */
-};
-
-
-/*
- * Table of state names
- */
-struct state {
- const char *s_name; /* State name */
- u_char s_id; /* State id */
-};
-
-
-/*
- * Supported signalling protocol states
- */
-struct proto_state {
- const char *p_name; /* Signalling manager name */
- const struct state *p_state; /* Protocol state table */
- const struct state *v_state; /* Protocol VCC state table */
- u_char p_id; /* Protocol ID */
-};
-
-
-/*
- * Supported VCC owners
- */
-struct owner {
- const char *o_name; /* Owner name */
- u_int o_sap; /* Owner's SAP */
- void (*o_pvcadd)(int, char **, const struct cmd *,
- struct atmaddreq *, struct air_int_rsp *);
- /* PVC ADD processing function */
-};
-
-
-/*
- * Supported AALs
- */
-struct aal {
- const char *a_name; /* AAL name */
- u_char a_id; /* AAL code */
-};
-
-
-/*
- * Supported encapsulations
- */
-struct encaps {
- const char *e_name; /* Encapsulation name */
- u_char e_id; /* Encapsulation code */
-};
-
-/*
- * Supported traffic type
- */
-struct traffics {
- const char *t_name; /* Traffic name: CBR, VBR, UBR, ... */
- uint8_t t_type; /* HARP code T_ATM_XXX */
- int t_argc; /* Number of args */
- const char *help; /* User help string */
-};
-
-/*
- * External variables
- */
-extern char *prog; /* Program invocation */
-extern char prefix[]; /* Current command prefix */
-
-/*
- * Global function declarations
- */
-
- /* atm_eni.c */
-void show_eni_stats(char *, int, char **);
-
- /* atm_fore200.c */
-void show_fore200_stats(char *, int, char **);
-
- /* atm_inet.c */
-void ip_pvcadd(int, char **, const struct cmd *, struct atmaddreq *,
- struct air_int_rsp *);
-
- /* atm_print.c */
-void print_arp_info(struct air_arp_rsp *);
-void print_asrv_info(struct air_asrv_rsp *);
-void print_cfg_info(struct air_cfg_rsp *);
-void print_intf_info(struct air_int_rsp *);
-void print_ip_vcc_info(struct air_ip_vcc_rsp *);
-void print_netif_info(struct air_netif_rsp *);
-void print_intf_stats(struct air_phy_stat_rsp *);
-void print_vcc_stats(struct air_vcc_rsp *);
-void print_vcc_info(struct air_vcc_rsp *);
-void print_version_info(struct air_version_rsp *);
-
- /* atm_set.c */
-void set_arpserver(int, char **, const struct cmd *);
-void set_macaddr(int, char **, const struct cmd *);
-void set_netif(int, char **, const struct cmd *);
-void set_prefix(int, char **, const struct cmd *);
-
- /* atm_show.c */
-void show_arp(int, char **, const struct cmd *);
-void show_arpserv(int, char **, const struct cmd *);
-void show_config(int, char **, const struct cmd *);
-void show_intf(int, char **, const struct cmd *);
-void show_ip_vcc(int, char **, const struct cmd *);
-void show_netif(int, char **, const struct cmd *);
-void show_vcc(int, char **, const struct cmd *);
-void show_version(int, char **, const struct cmd *);
-void show_intf_stats(int, char **, const struct cmd *);
-void show_vcc_stats(int, char **, const struct cmd *);
-
- /* atm_subr.c */
-const char * get_vendor(int);
-const char * get_adapter(int);
-const char * get_media_type(int);
-const char * get_bus_type(int);
-const char * get_bus_slot_info(int, u_long);
-const char * get_adapter_name(const char *);
-int get_hex_addr(char *, u_char *, int);
-const char * format_mac_addr(const Mac_addr *);
-int parse_ip_prefix(const char *, struct in_addr *);
-size_t compress_prefix_list(struct in_addr *, size_t);
-void check_netif_name(const char *);
-void sock_error(int);
-
-extern const struct aal aals[];
-extern const struct encaps encaps[];
diff --git a/sbin/atm/atm/atm_fore200.c b/sbin/atm/atm/atm_fore200.c
deleted file mode 100644
index d6da017..0000000
--- a/sbin/atm/atm/atm_fore200.c
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User configuration and display program
- * --------------------------------------
- *
- * Routines for Fore SBA-200-specific subcommands
- *
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netatm/port.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_ioctl.h>
-#include <dev/hfa/fore_aali.h>
-#include <dev/hfa/fore_slave.h>
-#include <dev/hfa/fore_stats.h>
-
-#include <errno.h>
-#include <libatm.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <err.h>
-
-#include "atm.h"
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-/*
- * Local constants
- */
-#define SHOW_PHY 1
-#define SHOW_DEV 2
-#define SHOW_ATM 4
-#define SHOW_AAL0 8
-#define SHOW_AAL4 16
-#define SHOW_AAL5 32
-#define SHOW_DRIVER 64
-
-
-/*
- * Headers for statistics
- */
-#define TAXI_STATS_HDR \
-"%s TAXI Statistics\n\
- CRC Errs Framing Errs\n"
-
-#define DEV_STATS_HDR \
-"%s Device Statistics\n\
-Type 1 Type 1 Type 2 Type 2\n\
-Small Buff Large Buff Small Buff Large Buff Receive Receive\n\
-Alloc Fail Alloc Fail Alloc Fail Alloc Fail Queue Full Carrier\n"
-
-#define ATM_STATS_HDR \
-"%s ATM Layer Statistics\n\
- Cells In Cells Out VPI Range VPI NoConn VCI Range VCI NoConn\n"
-
-#define AAL0_STATS_HDR \
-"%s AAL 0 Statistics\n\
- Cells In Cells Out Cell Drops\n"
-
-#define AAL4_STATS_HDR \
-"%s AAL 4 Statistics\n\
- CRC Proto Cell PDU PDU\n\
- Cells In Cells Out Errs Errs Drops PDUs In PDUs Out Errs Drops\n"
-
-#define AAL5_STATS_HDR \
-"%s AAL 5 Statistics\n\
- CRC/Len CRC Proto PDU\n\
- Cells In Cells Out Errs Drops PDUs In PDUs Out Errs Errs Drops\n"
-
-#define DRIVER_STATS_HDR \
-"%s Device Driver Statistics\n\
- No Xmit Max Seg No No No IQ No Cmd No\n\
- VCC Queue Seg Not Seg DMA VCC No Mbuf Full DMA Queue DMA\n\
- Out Full Size Align Pad Out In Buff In In Sup Full Cmd\n"
-
-#define OC3_STATS_HDR \
-"%s OC-3c Statistics\n\
-Section Path Line Line Path Corr Uncorr\n\
-BIP8 BIP8 BIP24 FEBE FEBE HCS HCS\n\
-Errs Errs Errs Errs Errs Errs Errs\n"
-
-static void print_fore200_taxi(struct air_vinfo_rsp *);
-static void print_fore200_oc3(struct air_vinfo_rsp *);
-static void print_fore200_dev(struct air_vinfo_rsp *);
-static void print_fore200_atm(struct air_vinfo_rsp *);
-static void print_fore200_aal0(struct air_vinfo_rsp *);
-static void print_fore200_aal4(struct air_vinfo_rsp *);
-static void print_fore200_aal5(struct air_vinfo_rsp *);
-static void print_fore200_driver(struct air_vinfo_rsp *);
-
-/*
- * Process show Fore SBA-200 statistics command
- *
- * The statistics printed are vendor-specific, depending on the brand of
- * the interface card.
- *
- * Command format:
- * atm show stats interface [<interface-name> [phy | dev | atm |
- * aal0 | aal4 | aal5 | driver]]
- *
- * Arguments:
- * intf interface statistics are for
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- *
- * Returns:
- * none
- *
- */
-void
-show_fore200_stats(intf, argc, argv)
- char *intf;
- int argc;
- char **argv;
-{
- int stats_type;
- ssize_t buf_len;
- struct air_cfg_rsp *cfg;
- struct air_vinfo_rsp *stats;
- struct atminfreq air;
-
- /*
- * Get statistics type qualifier
- */
- if (!strcasecmp("phy", argv[0])) {
- stats_type = SHOW_PHY;
- } else if (!strcasecmp("dev", argv[0])) {
- stats_type = SHOW_DEV;
- } else if (!strcasecmp("atm", argv[0])) {
- stats_type = SHOW_ATM;
- } else if (!strcasecmp("aal0", argv[0])) {
- stats_type = SHOW_AAL0;
- } else if (!strcasecmp("aal4", argv[0])) {
- stats_type = SHOW_AAL4;
- } else if (!strcasecmp("aal5", argv[0])) {
- stats_type = SHOW_AAL5;
- } else if (!strcasecmp("driver", argv[0])) {
- stats_type = SHOW_DRIVER;
- } else {
- errx(1, "Illegal statistics type");
- }
- argc--; argv++;
-
- /*
- * Get adapter configuration from the kernel
- */
- bzero(&air, sizeof(air));
- air.air_opcode = AIOCS_INF_CFG;
- strcpy(air.air_cfg_intf, intf);
- buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp));
- if (buf_len == -1) {
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- err(1, "Internal error");
- case ENXIO:
- errx(1, "%s is not an ATM device", intf);
- default:
- err(1, "ioctl (AIOCINFO)");
- }
- }
- cfg = (struct air_cfg_rsp *)(void *)air.air_buf_addr;
-
- /*
- * Get vendor-specific statistics from the kernel
- */
- bzero(&air, sizeof(air));
- air.air_opcode = AIOCS_INF_VST;
- strcpy(air.air_vinfo_intf, intf);
- buf_len = do_info_ioctl(&air, sizeof(struct air_vinfo_rsp) + 1024);
- if (buf_len == -1) {
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- err(1, "Internal error");
- case ENXIO:
- errx(1, "%s is not an ATM device", intf);
- default:
- err(1, "ioctl (AIOCINFO)");
- }
- }
- stats = (struct air_vinfo_rsp *)(void *)air.air_buf_addr;
-
- /*
- * Print the statistics
- */
- if ((size_t)buf_len < sizeof(struct air_vinfo_rsp) +
- sizeof(Fore_stats)) {
- free(stats);
- free(cfg);
- return;
- }
-
- switch (stats_type) {
- case SHOW_PHY:
- switch (cfg->acp_media) {
- case MEDIA_TAXI_100:
- case MEDIA_TAXI_140:
- print_fore200_taxi(stats);
- break;
- case MEDIA_OC3C:
- print_fore200_oc3(stats);
- break;
- case MEDIA_OC12C:
- break;
- default:
- break;
- }
- break;
- case SHOW_DEV:
- print_fore200_dev(stats);
- break;
- case SHOW_ATM:
- print_fore200_atm(stats);
- break;
- case SHOW_AAL0:
- print_fore200_aal0(stats);
- break;
- case SHOW_AAL4:
- print_fore200_aal4(stats);
- break;
- case SHOW_AAL5:
- print_fore200_aal5(stats);
- break;
- case SHOW_DRIVER:
- print_fore200_driver(stats);
- break;
- }
-
- free(stats);
- free(cfg);
-}
-
-
-/*
- * Print Fore ASX-200 TAXI statistics
- *
- * Arguments:
- * vi pointer to vendor-specific statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_fore200_taxi(vi)
- struct air_vinfo_rsp *vi;
-{
- Fore_stats *stats;
-
- /*
- * Bump stats pointer past header info
- */
- stats = (Fore_stats *)
- ((u_long) vi + sizeof(struct air_vinfo_rsp));
-
- /*
- * Print a header
- */
- printf(TAXI_STATS_HDR, get_adapter_name(vi->avsp_intf));
-
- /*
- * Print the physical layer info
- */
- printf("%10ld %12ld\n",
- stats->st_taxi.taxi_bad_crc,
- stats->st_taxi.taxi_framing);
-}
-
-
-/*
- * Print Fore ASX-200 OC-3c statistics
- *
- * Arguments:
- * vi pointer to vendor-specific statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_fore200_oc3(vi)
- struct air_vinfo_rsp *vi;
-{
- Fore_stats *stats;
-
- /*
- * Bump stats pointer past header info
- */
- stats = (Fore_stats *)
- ((u_long) vi + sizeof(struct air_vinfo_rsp));
-
- /*
- * Print a header
- */
- printf(OC3_STATS_HDR, get_adapter_name(vi->avsp_intf));
-
- /*
- * Print the OC-3c info
- */
- printf("%7ld %7ld %7ld %7ld %7ld %7ld %7ld\n",
- stats->st_oc3.oc3_sect_bip8,
- stats->st_oc3.oc3_path_bip8,
- stats->st_oc3.oc3_line_bip24,
- stats->st_oc3.oc3_line_febe,
- stats->st_oc3.oc3_path_febe,
- stats->st_oc3.oc3_hec_corr,
- stats->st_oc3.oc3_hec_uncorr);
-}
-
-
-/*
- * Print Fore ASX-200 device statistics
- *
- * Arguments:
- * vi pointer to vendor-specific statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_fore200_dev(vi)
- struct air_vinfo_rsp *vi;
-{
- Fore_stats *stats;
-
- /*
- * Bump stats pointer past header info
- */
- stats = (Fore_stats *)
- ((u_long) vi + sizeof(struct air_vinfo_rsp));
-
- /*
- * Print a header
- */
- printf(DEV_STATS_HDR, get_adapter_name(vi->avsp_intf));
-
- /*
- * Print the device info
- */
- printf("%10ld %10ld %10ld %10ld %10ld %s\n",
- stats->st_misc.buf1_sm_fail,
- stats->st_misc.buf1_lg_fail,
- stats->st_misc.buf2_sm_fail,
- stats->st_misc.buf2_lg_fail,
- stats->st_misc.rcvd_pdu_fail,
- (stats->st_misc.carrier_status ? "On" : "Off"));
-}
-
-
-/*
- * Print Fore ASX-200 ATM statistics
- *
- * Arguments:
- * vi pointer to vendor-specific statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_fore200_atm(vi)
- struct air_vinfo_rsp *vi;
-{
- Fore_stats *stats;
-
- /*
- * Bump stats pointer past header info
- */
- stats = (Fore_stats *)
- ((u_long) vi + sizeof(struct air_vinfo_rsp));
-
- /*
- * Print a header
- */
- printf(ATM_STATS_HDR, get_adapter_name(vi->avsp_intf));
-
- /*
- * Print the ATM layer info
- */
- printf("%10ld %10ld %10ld %10ld %10ld %10ld\n",
- stats->st_atm.atm_rcvd,
- stats->st_atm.atm_xmit,
- stats->st_atm.atm_vpi_range,
- stats->st_atm.atm_vpi_noconn,
- stats->st_atm.atm_vci_range,
- stats->st_atm.atm_vci_noconn);
-}
-
-
-/*
- * Print Fore ASX-200 AAL 0 statistics
- *
- * Arguments:
- * vi pointer to vendor-specific statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_fore200_aal0(vi)
- struct air_vinfo_rsp *vi;
-{
- Fore_stats *stats;
-
- /*
- * Bump stats pointer past header info
- */
- stats = (Fore_stats *)
- ((u_long) vi + sizeof(struct air_vinfo_rsp));
-
- /*
- * Print a header
- */
- printf(AAL0_STATS_HDR, get_adapter_name(vi->avsp_intf));
-
- /*
- * Print the AAL 0 info
- */
- printf("%10ld %10ld %10ld\n",
- stats->st_aal0.aal0_rcvd,
- stats->st_aal0.aal0_xmit,
- stats->st_aal0.aal0_drops);
-}
-
-
-/*
- * Print Fore ASX-200 AAL 4 statistics
- *
- * Arguments:
- * vi pointer to vendor-specific statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_fore200_aal4(vi)
- struct air_vinfo_rsp *vi;
-{
- Fore_stats *stats;
-
- /*
- * Bump stats pointer past header info
- */
- stats = (Fore_stats *)
- ((u_long) vi + sizeof(struct air_vinfo_rsp));
-
- /*
- * Print a header
- */
- printf(AAL4_STATS_HDR, get_adapter_name(vi->avsp_intf));
-
- /*
- * Print the AAL 4 info
- */
- printf("%10ld %10ld %5ld %5ld %5ld %9ld %9ld %5ld %5ld\n",
- stats->st_aal4.aal4_rcvd,
- stats->st_aal4.aal4_xmit,
- stats->st_aal4.aal4_crc,
- stats->st_aal4.aal4_sar_cs,
- stats->st_aal4.aal4_drops,
- stats->st_aal4.aal4_pdu_rcvd,
- stats->st_aal4.aal4_pdu_xmit,
- stats->st_aal4.aal4_pdu_errs,
- stats->st_aal4.aal4_pdu_drops);
-}
-
-
-/*
- * Print Fore ASX-200 AAL 5 statistics
- *
- * Arguments:
- * vi pointer to vendor-specific statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_fore200_aal5(vi)
- struct air_vinfo_rsp *vi;
-{
- Fore_stats *stats;
-
- /*
- * Bump stats pointer past header info
- */
- stats = (Fore_stats *)
- ((u_long) vi + sizeof(struct air_vinfo_rsp));
-
- /*
- * Print a header
- */
- printf(AAL5_STATS_HDR, get_adapter_name(vi->avsp_intf));
-
- /*
- * Print the AAL 5 info
- */
- printf("%10ld %10ld %5ld %5ld %9ld %9ld %5ld %5ld %5ld\n",
- stats->st_aal5.aal5_rcvd,
- stats->st_aal5.aal5_xmit,
- stats->st_aal5.aal5_crc_len,
- stats->st_aal5.aal5_drops,
- stats->st_aal5.aal5_pdu_rcvd,
- stats->st_aal5.aal5_pdu_xmit,
- stats->st_aal5.aal5_pdu_crc,
- stats->st_aal5.aal5_pdu_errs,
- stats->st_aal5.aal5_pdu_drops);
-}
-
-
-/*
- * Print Fore ASX-200 device driver statistics
- *
- * Arguments:
- * vi pointer to vendor-specific statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_fore200_driver(vi)
- struct air_vinfo_rsp *vi;
-{
- Fore_stats *stats;
-
- /*
- * Bump stats pointer past header info
- */
- stats = (Fore_stats *)
- ((u_long) vi + sizeof(struct air_vinfo_rsp));
-
- /*
- * Print a header
- */
- printf(DRIVER_STATS_HDR, get_adapter_name(vi->avsp_intf));
-
- /*
- * Print the driver info
- */
- printf("%4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld\n",
- stats->st_drv.drv_xm_notact,
- stats->st_drv.drv_xm_full,
- stats->st_drv.drv_xm_maxpdu,
- stats->st_drv.drv_xm_segnoal,
- stats->st_drv.drv_xm_seglen,
- stats->st_drv.drv_xm_segdma,
- stats->st_drv.drv_rv_novcc,
- stats->st_drv.drv_rv_nosbf,
- stats->st_drv.drv_rv_nomb,
- stats->st_drv.drv_rv_ifull,
- stats->st_drv.drv_bf_segdma,
- stats->st_drv.drv_cm_full,
- stats->st_drv.drv_cm_nodma);
-
-}
diff --git a/sbin/atm/atm/atm_inet.c b/sbin/atm/atm/atm_inet.c
deleted file mode 100644
index 2f916a0..0000000
--- a/sbin/atm/atm/atm_inet.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User configuration and display program
- * --------------------------------------
- *
- * IP support
- *
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netatm/port.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_ioctl.h>
-
-#include <errno.h>
-#include <libatm.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <err.h>
-
-#include "atm.h"
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-/*
- * Process add command for a TCP/IP PVC
- *
- * Command format:
- * atm add pvc <intf> <vpi> <vci> <aal> <encaps> IP <netif>
- * <IP addr> | dynamic
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- * app pointer to AIOCAPVC structure
- * intp pointer to air_int_rsp structure with information
- * about the physical interface that is the PVC is for.
- *
- * Returns:
- * none
- *
- */
-void
-ip_pvcadd(int argc, char **argv, const struct cmd *cmdp,
- struct atmaddreq *app, struct air_int_rsp *intp)
-{
- char *cp;
- char nhelp[128];
- u_int netif_no;
- u_int i, netif_pref_len;
-
- /*
- * Yet more validation
- */
- if (argc < 2) {
- strcpy(nhelp, cmdp->help);
- cp = strstr(nhelp, "<netif>");
- if (cp)
- strcpy(cp, "ip {dyn|<dst>}");
- fprintf(stderr, "%s: Invalid number of arguments:\n",
- prog);
- fprintf(stderr, "\tformat is: %s%s %s\n",
- prefix, cmdp->name, nhelp);
- exit(1);
- }
-
- /*
- * Validate and set network interface
- */
- bzero(app->aar_pvc_intf, sizeof(app->aar_pvc_intf));
- netif_pref_len = strlen(intp->anp_nif_pref);
- cp = &argv[0][netif_pref_len];
- netif_no = (u_int)strtoul(cp, NULL, 10);
- for (i = 0; i < strlen(cp); i++) {
- if (cp[i] < '0' || cp[i] > '9') {
- netif_no = -1;
- break;
- }
- }
- if (strlen(argv[0]) > sizeof(app->aar_pvc_intf) - 1)
- errx(1, "Illegal network interface name '%s'", argv[0]);
-
- if (strncasecmp(intp->anp_nif_pref, argv[0], netif_pref_len) ||
- strlen(argv[0]) <= netif_pref_len || netif_no >= intp->anp_nif_cnt)
- errx(1, "network interface %s is not associated with "
- "interface %s", argv[0], intp->anp_intf);
-
- strcpy(app->aar_pvc_intf, argv[0]);
- argc--;
- argv++;
-
- /*
- * Set PVC destination address
- */
- bzero(&app->aar_pvc_dst, sizeof(struct sockaddr));
- if (strcasecmp(argv[0], "dynamic") == 0 ||
- strcasecmp(argv[0], "dyn") == 0) {
-
- /*
- * Destination is dynamically determined
- */
- app->aar_pvc_flags |= PVC_DYN;
- } else {
-
- /*
- * Get destination IP address
- */
- struct sockaddr_in *sain, *ret;
-
- sain = (struct sockaddr_in *)(void *)&app->aar_pvc_dst;
- ret = get_ip_addr(argv[0]);
- if (ret == NULL)
- errx(1, "%s: bad ip address '%s'", argv[-1], argv[0]);
- sain->sin_addr.s_addr = ret->sin_addr.s_addr;
- }
- argc--; argv++;
-}
-
diff --git a/sbin/atm/atm/atm_print.c b/sbin/atm/atm/atm_print.c
deleted file mode 100644
index a3f0ce3..0000000
--- a/sbin/atm/atm/atm_print.c
+++ /dev/null
@@ -1,891 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User configuration and display program
- * --------------------------------------
- *
- * Print routines for "show" subcommand
- *
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netatm/port.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sigmgr.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_vc.h>
-#include <netatm/atm_ioctl.h>
-#include <netatm/ipatm/ipatm_var.h>
-#include <netatm/sigpvc/sigpvc_var.h>
-#include <netatm/spans/spans_var.h>
-#include <netatm/uni/uniip_var.h>
-#include <netatm/uni/unisig_var.h>
-
-#include <errno.h>
-#include <libatm.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "atm.h"
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-#define ARP_HDR \
-"Net Intf Flags Age Origin\n"
-
-#define ASRV_HDR \
-"Net Intf State ATM Address\n"
-
-#define CFG_HDR \
-"Intf Vendor Model Media Bus Serial No\n"
-
-#define IP_VCC_HDR \
-"Net Intf VPI VCI State Flags IP Address\n"
-
-#define INTF_HDR \
-"Interface Sigmgr State\n"
-
-#define NETIF_HDR \
-"Net Intf Phy Intf IP Address\n"
-
-#define VCC_HDR \
-"Interface VPI VCI AAL Type Dir State Encaps Owner\n"
-
-#define VCC_STATS_HDR \
-" Input Input Input Output Output Output\n\
-Interface VPI VCI PDUs Bytes Errs PDUs Bytes Errs\n"
-
-#define VERSION_HDR \
-"Version\n"
-
-#define PHY_STATS_HDR \
-" Input Input Input Output Output Output Cmd\n\
-Interface PDUs Bytes Errs PDUs Bytes Errs Errs\n"
-
-/*
- * Local variables
- */
-static int arp_hdr = 0;
-static int asrv_hdr = 0;
-static int cfg_hdr = 0;
-static int ip_vcc_hdr = 0;
-static int netif_hdr = 0;
-static int vcc_hdr = 0;
-static int vcc_stats_hdr = 0;
-static int phy_stats_hdr = 0;
-static int version_hdr = 0;
-
-/*
- * SIGPVC state definitions
- */
-static const struct state sigpvc_states[] = {
- { "ACTIVE", SIGPVC_ACTIVE },
- { "DETACH", SIGPVC_DETACH },
- { 0, 0 }
-};
-
-/*
- * SPANS state definitions
- */
-static const struct state spans_states[] = {
- { "ACTIVE", SPANS_ACTIVE },
- { "DETACH", SPANS_DETACH },
- { "INIT", SPANS_INIT },
- { "PROBE", SPANS_PROBE },
- { 0, 0 }
-};
-
-/*
- * UNISIG state definitions
- */
-static const struct state unisig_states[] = {
- { "NULL", UNISIG_NULL },
- { "ADR_WAIT", UNISIG_ADDR_WAIT },
- { "INIT", UNISIG_INIT },
- { "ACTIVE", UNISIG_ACTIVE },
- { "DETACH", UNISIG_DETACH },
- { 0, 0 }
-};
-
-/*
- * SIGPVC VCC state definitions
- */
-static const struct state sigpvc_vcc_states[] = {
- { "NULL", VCCS_NULL },
- { "ACTIVE", VCCS_ACTIVE },
- { "FREE", VCCS_FREE },
- { 0, 0 }
-};
-
-/*
- * SPANS VCC state definitions
- */
-static const struct state spans_vcc_states[] = {
- { "NULL", SPANS_VC_NULL },
- { "ACTIVE", SPANS_VC_ACTIVE },
- { "ACT_DOWN", SPANS_VC_ACT_DOWN },
- { "POPEN", SPANS_VC_POPEN },
- { "R_POPEN", SPANS_VC_R_POPEN },
- { "OPEN", SPANS_VC_OPEN },
- { "CLOSE", SPANS_VC_CLOSE },
- { "ABORT", SPANS_VC_ABORT },
- { "FREE", SPANS_VC_FREE },
- {0, 0 }
-};
-
-/*
- * UNISIG VCC state definitions
- */
-static const struct state unisig_vcc_states[] = {
- { "NULL", UNI_NULL },
- { "C_INIT", UNI_CALL_INITIATED },
- { "C_OUT_PR", UNI_CALL_OUT_PROC },
- { "C_DELIV", UNI_CALL_DELIVERED },
- { "C_PRES", UNI_CALL_PRESENT },
- { "C_REC", UNI_CALL_RECEIVED },
- { "CONN_REQ", UNI_CONNECT_REQUEST },
- { "C_IN_PR", UNI_CALL_IN_PROC },
- { "ACTIVE", UNI_ACTIVE },
- { "REL_REQ", UNI_RELEASE_REQUEST },
- { "REL_IND", UNI_RELEASE_IND },
- { "SSCF_REC", UNI_SSCF_RECOV },
- { "FREE", UNI_FREE },
- { "ACTIVE", UNI_PVC_ACTIVE },
- { "ACT_DOWN", UNI_PVC_ACT_DOWN },
- {0, 0 }
-};
-
-/*
- * IP VCC state definitions
- */
-static const struct state ip_vcc_states[] = {
- { "FREE", IPVCC_FREE },
- { "PMAP", IPVCC_PMAP },
- { "POPEN", IPVCC_POPEN },
- { "PACCEPT", IPVCC_PACCEPT },
- { "ACTPENT", IPVCC_ACTPENT },
- { "ACTIVE", IPVCC_ACTIVE },
- { "CLOSED", IPVCC_CLOSED },
- { 0, 0 }
-};
-
-/*
- * ARP server state definitions
- */
-static const struct state arpserver_states[] = {
- { "NOT_CONF", UIAS_NOTCONF },
- { "SERVER", UIAS_SERVER_ACTIVE },
- { "PEND_ADR", UIAS_CLIENT_PADDR },
- { "POPEN", UIAS_CLIENT_POPEN },
- { "REGISTER", UIAS_CLIENT_REGISTER },
- { "ACTIVE", UIAS_CLIENT_ACTIVE },
- { 0, 0 }
-};
-
-/*
- * Supported signalling managers
- */
-static const struct proto_state proto_states[] = {
- { "SIGPVC", sigpvc_states, sigpvc_vcc_states, ATM_SIG_PVC },
- { "SPANS", spans_states, spans_vcc_states, ATM_SIG_SPANS },
- { "UNI 3.0", unisig_states, unisig_vcc_states, ATM_SIG_UNI30 },
- { "UNI 3.1", unisig_states, unisig_vcc_states, ATM_SIG_UNI31 },
- { "UNI 4.0", unisig_states, unisig_vcc_states, ATM_SIG_UNI40 },
- { 0, 0, 0, 0 }
-};
-
-/*
- * ATMARP origin values
- */
-static const struct state arp_origins[] = {
- { "LOCAL", UAO_LOCAL },
- { "PERM", UAO_PERM },
- { "REG", UAO_REGISTER },
- { "SCSP", UAO_SCSP },
- { "LOOKUP", UAO_LOOKUP },
- { "PEER_RSP", UAO_PEER_RSP },
- { "PEER_REQ", UAO_PEER_REQ },
- { 0, 0 }
-};
-
-
-/*
- * Print ARP table information
- *
- * Arguments:
- * ai pointer to a struct air_arp_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_arp_info(ai)
- struct air_arp_rsp *ai;
-{
- int i;
- const char *atm_addr, *ip_addr, *origin;
- char age[8], flags[32];
- struct sockaddr_in *sain;
-
- /*
- * Print a header if it hasn't been done yet.
- */
- if (!arp_hdr) {
- printf(ARP_HDR);
- arp_hdr = 1;
- }
-
- /*
- * Format the addresses
- */
- atm_addr = format_atm_addr(&ai->aap_addr);
- sain = (struct sockaddr_in *)(void *)&ai->aap_arp_addr;
- ip_addr = format_ip_addr(&sain->sin_addr);
-
- /*
- * Decode the flags
- */
- bzero(flags, sizeof(flags));
- if (ai->aap_flags & ARPF_VALID) {
- strcat(flags, "V");
- }
- if (ai->aap_flags & ARPF_REFRESH) {
- strcat(flags, "R");
- }
-
- /*
- * Format the origin
- */
- for (i=0; arp_origins[i].s_name != NULL &&
- ai->aap_origin != arp_origins[i].s_id;
- i++);
- if (arp_origins[i].s_name) {
- origin = arp_origins[i].s_name;
- } else {
- origin = "-";
- }
-
- /*
- * Format the age
- */
- bzero(age, sizeof(age));
- if (!(ai->aap_flags & ARPF_VALID)) {
- strcpy(age, "-");
- } else {
- sprintf(age, "%d", ai->aap_age);
- }
-
- /*
- * Print the ARP information
- */
- printf("%-8s %-5s %3s %s\n ATM address = %s\n IP address = %s\n",
- ai->aap_intf,
- flags,
- age,
- origin,
- atm_addr,
- ip_addr);
-}
-
-
-/*
- * Print ARP server information
- *
- * Arguments:
- * si pointer to a struct air_asrv_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_asrv_info(si)
- struct air_asrv_rsp *si;
-{
- int i;
- const char *atm_addr, *state;
- struct in_addr *addr;
-
- /*
- * Print a header if it hasn't been done yet.
- */
- if (!asrv_hdr) {
- printf(ASRV_HDR);
- asrv_hdr = 1;
- }
-
- /*
- * Format the ATM address of the ARP server
- */
- atm_addr = format_atm_addr(&si->asp_addr);
-
- /*
- * Format the server state
- */
- for (i=0; arpserver_states[i].s_name != NULL &&
- si->asp_state != arpserver_states[i].s_id;
- i++);
- if (arpserver_states[i].s_name) {
- state = arpserver_states[i].s_name;
- } else {
- state = "-";
- }
-
- /*
- * Print the ARP server information
- */
- printf("%-8s %-8s %s\n",
- si->asp_intf,
- state,
- atm_addr);
-
- /*
- * Format and print the LIS prefixes
- */
- if (si->asp_nprefix) {
- addr = (struct in_addr *)((u_long)si +
- sizeof(struct air_asrv_rsp));
- printf(" LIS = ");
- for (i = 0; i < si->asp_nprefix; i++) {
- printf("%s", inet_ntoa(*addr));
- addr++;
- printf("/0x%0lx", (u_long)ntohl(addr->s_addr));
- addr++;
- if (i < si->asp_nprefix -1)
- printf(", ");
- }
- printf("\n");
- }
-}
-
-
-/*
- * Print adapter configuration information
- *
- * Arguments:
- * si pointer to a struct air_cfg_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_cfg_info(si)
- struct air_cfg_rsp *si;
-{
- const char *adapter, *bus, *media, *vendor;
-
- /*
- * Print a header if it hasn't been done yet.
- */
- if (!cfg_hdr) {
- printf(CFG_HDR);
- cfg_hdr = 1;
- }
-
- /*
- * Format the vendor name and adapter type
- */
- vendor = get_vendor(si->acp_vendor);
- adapter = get_adapter(si->acp_device);
-
- /*
- * Format the communications medium
- */
- media = get_media_type(si->acp_media);
- bus = get_bus_type(si->acp_bustype);
-
- /*
- * Print the ARP server information
- */
- printf("%-8s %-8s %-8s %-14s %-4s %ld\n",
- si->acp_intf,
- vendor,
- adapter,
- media,
- bus,
- si->acp_serial);
- printf(" MAC address = %s\n",
- format_mac_addr(&si->acp_macaddr));
- printf(" Hardware version = %s\n", si->acp_hard_vers);
- printf(" Firmware version = %s\n", si->acp_firm_vers);
-}
-
-
-/*
- * Print interface information
- *
- * Arguments:
- * ni pointer to a struct air_int_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_intf_info(ni)
- struct air_int_rsp *ni;
-{
- int i;
- char nif_names[(IFNAMSIZ *2)+4];
- char *atm_addr;
- const char *sigmgr = "-";
- const char *state_name = "-";
- const struct state *s_t;
-
- /*
- * Print a header
- */
- printf(INTF_HDR);
-
- /*
- * Translate signalling manager name
- */
- for (i=0; proto_states[i].p_state != NULL; i++)
- if (ni->anp_sig_proto == proto_states[i].p_id)
- break;
- if (proto_states[i].p_state != NULL)
- sigmgr = proto_states[i].p_name;
-
- /*
- * Get the signalling manager state
- */
- if (proto_states[i].p_state != NULL) {
- s_t = proto_states[i].p_state;
- for (i=0; s_t[i].s_name != NULL; i++)
- if (ni->anp_sig_state == s_t[i].s_id)
- break;
- if (s_t[i].s_name != NULL)
- state_name = s_t[i].s_name;
- }
-
- /*
- * Format the ATM address
- */
- atm_addr = format_atm_addr(&ni->anp_addr);
-
- /*
- * Get the range of NIFs on the physical interface
- */
- bzero(nif_names, sizeof(nif_names));
- if (strlen(ni->anp_nif_pref) == 0) {
- strcpy(nif_names, "-");
- } else {
- strcpy(nif_names, ni->anp_nif_pref);
- strcat(nif_names, "0");
- if (ni->anp_nif_cnt > 1) {
- strcat(nif_names, " - ");
- strcat(nif_names, ni->anp_nif_pref);
- sprintf(&nif_names[strlen(nif_names)], "%d",
- ni->anp_nif_cnt-1);
- }
- }
-
-
- /*
- * Print the interface information
- */
- printf("%-9s %-7s %s\n",
- ni->anp_intf,
- sigmgr,
- state_name);
- printf(" ATM address = %s\n", atm_addr);
- printf(" Network interfaces: %s\n", nif_names);
-}
-
-
-/*
- * Print IP address map information
- *
- * Arguments:
- * ai pointer to a struct air_arp_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_ip_vcc_info(ai)
- struct air_ip_vcc_rsp *ai;
-{
- int i;
- const char *ip_addr, *state;
- char flags[32], vpi_vci[16];
- struct sockaddr_in *sain;
-
- /*
- * Print a header if it hasn't been done yet.
- */
- if (!ip_vcc_hdr) {
- printf(IP_VCC_HDR);
- ip_vcc_hdr = 1;
- }
-
- /*
- * Format the IP address
- */
- sain = (struct sockaddr_in *)(void *)&ai->aip_dst_addr;
- ip_addr = format_ip_addr(&sain->sin_addr);
-
- /*
- * Format the VPI/VCI
- */
- if (ai->aip_vpi == 0 && ai->aip_vci == 0) {
- strcpy(vpi_vci, " - -");
- } else {
- sprintf(vpi_vci, "%3d %5d", ai->aip_vpi, ai->aip_vci);
- }
-
- /*
- * Decode VCC flags
- */
- bzero(flags, sizeof(flags));
- if (ai->aip_flags & IVF_PVC) {
- strcat(flags, "P");
- }
- if (ai->aip_flags & IVF_SVC) {
- strcat(flags, "S");
- }
- if (ai->aip_flags & IVF_LLC) {
- strcat(flags, "L");
- }
- if (ai->aip_flags & IVF_MAPOK) {
- strcat(flags, "M");
- }
- if (ai->aip_flags & IVF_NOIDLE) {
- strcat(flags, "N");
- }
-
- /*
- * Get the state of the VCC
- */
- for (i=0; ip_vcc_states[i].s_name != NULL &&
- ai->aip_state != ip_vcc_states[i].s_id;
- i++);
- if (ip_vcc_states[i].s_name) {
- state = ip_vcc_states[i].s_name;
- } else {
- state = "-";
- }
-
- /*
- * Print the IP VCC information
- */
- printf("%-8s %9s %-7s %-5s %s\n",
- ai->aip_intf,
- vpi_vci,
- state,
- flags,
- ip_addr);
-}
-
-
-/*
- * Print network interface information
- *
- * Arguments:
- * ni pointer to a struct air_int_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_netif_info(ni)
- struct air_netif_rsp *ni;
-{
- const char *ip_addr;
- struct sockaddr_in *sain;
-
- /*
- * Print a header
- */
- if (!netif_hdr) {
- netif_hdr++;
- printf(NETIF_HDR);
- }
-
- /*
- * Format the protocol address
- */
- sain = (struct sockaddr_in *)(void *)&ni->anp_proto_addr;
- ip_addr = format_ip_addr(&sain->sin_addr);
-
- /*
- * Print the network interface information
- */
- printf("%-8s %-8s %s\n",
- ni->anp_intf,
- ni->anp_phy_intf,
- ip_addr);
-}
-
-
-/*
- * Print physical interface statistics
- *
- * Arguments:
- * pi pointer to a struct air_phy_stat_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_intf_stats(pi)
- struct air_phy_stat_rsp *pi;
-{
- /*
- * Print a header if it hasn't already been done
- */
- if (!phy_stats_hdr) {
- printf(PHY_STATS_HDR);
- phy_stats_hdr = 1;
- }
-
- /*
- * Print the interface statistics
- */
- printf("%-9s %7lld %8lld %5lld %7lld %8lld %5lld %5lld\n",
- pi->app_intf,
- (unsigned long long)pi->app_ipdus,
- (unsigned long long)pi->app_ibytes,
- (unsigned long long)pi->app_ierrors,
- (unsigned long long)pi->app_opdus,
- (unsigned long long)pi->app_obytes,
- (unsigned long long)pi->app_oerrors,
- (unsigned long long)pi->app_cmderrors);
-}
-
-
-/*
- * Print VCC statistics
- *
- * Arguments:
- * vi pointer to VCC statistics to print
- *
- * Returns:
- * none
- *
- */
-void
-print_vcc_stats(vi)
- struct air_vcc_rsp *vi;
-{
-
- /*
- * Print a header if it hasn't already been done
- */
- if (!vcc_stats_hdr) {
- printf(VCC_STATS_HDR);
- vcc_stats_hdr = 1;
- }
-
- /*
- * Print the VCC statistics
- */
- printf("%-9s %3d %4d",
- vi->avp_intf,
- vi->avp_vpi,
- vi->avp_vci);
- if ( vi->avp_type & VCC_IN )
- printf ( " %7ld %8ld %5ld",
- vi->avp_ipdus,
- vi->avp_ibytes,
- vi->avp_ierrors);
- else
- printf ( " - - -" );
-
- if ( vi->avp_type & VCC_OUT )
- printf ( " %7ld %8ld %5ld\n",
- vi->avp_opdus,
- vi->avp_obytes,
- vi->avp_oerrors);
- else
- printf ( " - - -\n" );
-}
-
-
-/*
- * Print VCC information
- *
- * Arguments:
- * vi pointer to a struct air_vcc_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_vcc_info(vi)
- struct air_vcc_rsp *vi;
-{
- int i;
- const char *aal_name = "-" , *encaps_name = "-", *owner_name = "-";
- const char *state_name = "-", *type_name = "-";
- char dir_name[10];
- const struct state *s_t;
-
- /*
- * Print a header if it hasn't already been done
- */
- if (!vcc_hdr) {
- printf(VCC_HDR);
- vcc_hdr = 1;
- }
-
- /*
- * Translate AAL
- */
- for (i=0; aals[i].a_name != NULL; i++)
- if (vi->avp_aal == aals[i].a_id)
- break;
- if (aals[i].a_name)
- aal_name = aals[i].a_name;
-
- /*
- * Translate VCC type
- */
- if (vi->avp_type & VCC_PVC)
- type_name = "PVC";
- else if (vi->avp_type & VCC_SVC)
- type_name = "SVC";
- /*
- * Translate VCC direction
- */
- bzero(dir_name, sizeof(dir_name));
- if (vi->avp_type & VCC_IN)
- strcat(dir_name, "In");
- if (vi->avp_type & VCC_OUT)
- strcat(dir_name, "Out");
- if (strlen(dir_name) == 0)
- strcpy(dir_name, "-");
-
- /*
- * Translate state
- */
- for (i=0; proto_states[i].p_state != NULL; i++)
- if (vi->avp_sig_proto == proto_states[i].p_id)
- break;
- if (proto_states[i].p_state) {
- s_t = proto_states[i].v_state;
- for (i=0; s_t[i].s_name != NULL; i++)
- if (vi->avp_state == s_t[i].s_id)
- break;
- if (s_t[i].s_name)
- state_name = s_t[i].s_name;
- }
-
- /*
- * Translate encapsulation
- */
- for (i=0; encaps[i].e_name != NULL; i++)
- if (vi->avp_encaps == encaps[i].e_id)
- break;
- if (encaps[i].e_name)
- encaps_name = encaps[i].e_name;
-
- /*
- * Print the VCC information
- */
- printf("%-9s %3d %5d %-4s %-4s %-5s %-8s %-8s ",
- vi->avp_intf,
- vi->avp_vpi,
- vi->avp_vci,
- aal_name,
- type_name,
- dir_name,
- state_name,
- encaps_name);
-
- /*
- * Print VCC owners' names
- */
- for (i = 0, owner_name = vi->avp_owners;
- i < O_CNT - 1 && strlen(owner_name);
- i++, owner_name += (T_ATM_APP_NAME_LEN + 1)) {
- if (i > 0)
- printf(", ");
- printf("%s", owner_name);
- }
- if (i == 0)
- printf("-");
- printf("\n");
-
- /*
- * Print destination address if it's an SVC
- */
- if (vi->avp_type & VCC_SVC) {
- printf(" Dest = %s\n",
- format_atm_addr(&vi->avp_daddr));
- }
-}
-
-
-/*
- * Print network interface information
- *
- * Arguments:
- * ni pointer to a struct air_int_rsp
- *
- * Returns:
- * none
- *
- */
-void
-print_version_info(vi)
- struct air_version_rsp *vi;
-{
- char version_str[80];
-
- /*
- * Print a header
- */
- if (!version_hdr) {
- version_hdr++;
- printf(VERSION_HDR);
- }
-
- /*
- * Print the interface information
- */
- sprintf(version_str, "%d.%d",
- ATM_VERS_MAJ(vi->avp_version),
- ATM_VERS_MIN(vi->avp_version));
- printf("%7s\n", version_str);
-}
diff --git a/sbin/atm/atm/atm_set.c b/sbin/atm/atm/atm_set.c
deleted file mode 100644
index 790bfc1..0000000
--- a/sbin/atm/atm/atm_set.c
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User configuration and display program
- * --------------------------------------
- *
- * Routines for "set" subcommand
- *
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/sockio.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netatm/port.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_ioctl.h>
-
-#include <errno.h>
-#include <libatm.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "atm.h"
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-/*
- * Process ATM ARP server set command
- *
- * Command format:
- * atm set arpserver <interface_name> <atm-address> <IP prefix> ...
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-set_arpserver(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- int rc, s;
- u_int i;
- ssize_t len;
- size_t prefix_len = 0;
- char *intf;
- Atm_addr server;
- struct sockaddr_in *lis;
- struct sockaddr_in if_mask;
- struct atmsetreq asr;
- struct atminfreq air;
- struct air_netif_rsp *int_info;
- struct {
- struct in_addr ip_addr;
- struct in_addr ip_mask;
- } prefix_buf[64];;
-
- /*
- * Validate interface name
- */
- check_netif_name(argv[0]);
- intf = argv[0];
- argc--; argv++;
-
- /*
- * Get the ARP server's ATM address
- */
- bzero(&server, sizeof(server));
- if (strcasecmp(argv[0], "local")) {
- /*
- * ARP server NSAP address is provided
- */
- server.address_format = T_ATM_ENDSYS_ADDR;
- server.address_length = sizeof(Atm_addr_nsap);
- if (get_hex_atm_addr(argv[0],
- (u_char *)server.address,
- sizeof(Atm_addr_nsap)) !=
- sizeof(Atm_addr_nsap)) {
- fprintf(stderr, "%s: Invalid ARP server address\n",
- prog);
- exit(1);
- }
- if (argc > 1) {
- fprintf(stderr, "%s: Invalid number of arguments\n",
- prog);
- exit(1);
- }
- prefix_len = 0;
- } else {
- argc--; argv++;
-
- /*
- * This host is the ARP server
- */
- server.address_format = T_ATM_ABSENT;
- server.address_length = 0;
-
- /*
- * Get interface information from the kernel. We need
- * to get the IP address and the subnet mask associated
- * with the network interface and insert them into the
- * list of permitted LIS prefixes.
- */
- bzero(&air, sizeof(air));
- air.air_opcode = AIOCS_INF_NIF;
- strcpy(air.air_int_intf, intf);
- len = do_info_ioctl(&air, sizeof(struct air_netif_rsp));
- if (len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- intf);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
- int_info = (struct air_netif_rsp *) air.air_buf_addr;
- lis = (struct sockaddr_in *)(void *)&int_info->anp_proto_addr;
- prefix_buf[0].ip_addr = lis->sin_addr;
- free(int_info);
-
- rc = get_subnet_mask(intf, &if_mask);
- if (rc) {
- fprintf(stderr, "%s: Can't get subnet mask for %s\n",
- prog, intf);
- }
- prefix_buf[0].ip_mask = if_mask.sin_addr;
- prefix_buf[0].ip_addr.s_addr &=
- prefix_buf[0].ip_mask.s_addr;
-
- /*
- * Get the prefixes of the LISs that we'll support
- */
- for (i = 1; argc; i++, argc--, argv++) {
- rc = parse_ip_prefix(argv[0],
- (struct in_addr *)&prefix_buf[i]);
- if (rc != 0) {
- fprintf(stderr, "%s: Invalid IP prefix value \'%s\'\n",
- prog, argv[0]);
- exit(1);
- }
- }
-
- /*
- * Compress the prefix list
- */
- prefix_len = compress_prefix_list((struct in_addr *)prefix_buf,
- i * sizeof(struct in_addr) * 2);
- }
-
- /*
- * Build ioctl request
- */
- bzero(&asr, sizeof(asr));
- asr.asr_opcode = AIOCS_SET_ASV;
- strncpy(asr.asr_arp_intf, intf, sizeof(asr.asr_arp_intf));
- asr.asr_arp_addr = server;
- asr.asr_arp_subaddr.address_format = T_ATM_ABSENT;
- asr.asr_arp_subaddr.address_length = 0;
- if (prefix_len)
- asr.asr_arp_pbuf = (caddr_t)prefix_buf;
- else
- asr.asr_arp_pbuf = (caddr_t)0;
- asr.asr_arp_plen = prefix_len;
-
- /*
- * Pass the new ARP server address to the kernel
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCSET, (caddr_t)&asr) < 0) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case EOPNOTSUPP:
- case EPROTONOSUPPORT:
- perror("Internal error");
- break;
- case EINVAL:
- fprintf(stderr, "Invalid parameter\n");
- break;
- case ENOMEM:
- fprintf(stderr, "Kernel memory exhausted\n");
- break;
- case ENETDOWN:
- fprintf(stderr, "ATM network is inoperable\n");
- break;
- case EPERM:
- fprintf(stderr, "Must be super user to use set subcommand\n");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM interface\n", intf);
- break;
- case ENOENT:
- fprintf(stderr, "Signalling manager not attached\n");
- break;
- case ENOPROTOOPT:
- fprintf(stderr,
- "%s does not have an IP address configured\n",
- intf);
- break;
- default:
- perror("Ioctl (AIOCSET) ARPSERVER address");
- break;
- }
- exit(1);
- }
-
- (void)close(s);
-}
-
-
-/*
- * Process set MAC address command
- *
- * Command format:
- * atm set mac <interface_name> <MAC address>
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-set_macaddr(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- int s;
- char *intf;
- struct mac_addr mac;
- struct atmsetreq asr;
-
- /*
- * Validate interface name
- */
- if (strlen(argv[0]) > sizeof(asr.asr_mac_intf) - 1) {
- fprintf(stderr, "%s: Illegal interface name\n", prog);
- exit(1);
- }
- intf = argv[0];
- argc--; argv++;
-
- /*
- * Get the MAC address provided by the user
- */
- if (get_hex_atm_addr(argv[0], (u_char *)&mac, sizeof(mac)) !=
- sizeof(mac)) {
- fprintf(stderr, "%s: Invalid MAC address\n", prog);
- exit(1);
- }
-
- /*
- * Build ioctl request
- */
- asr.asr_opcode = AIOCS_SET_MAC;
- strncpy(asr.asr_mac_intf, intf, sizeof(asr.asr_mac_intf));
- bcopy(&mac, &asr.asr_mac_addr, sizeof(asr.asr_mac_addr));
-
- /*
- * Pass the new address to the kernel
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCSET, (caddr_t)&asr) < 0) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case EOPNOTSUPP:
- case EPROTONOSUPPORT:
- perror("Internal error");
- break;
- case EADDRINUSE:
- fprintf(stderr, "Interface must be detached to set MAC addres\n");
- break;
- case EINVAL:
- fprintf(stderr, "Invalid parameter\n");
- break;
- case ENOMEM:
- fprintf(stderr, "Kernel memory exhausted\n");
- break;
- case ENETDOWN:
- fprintf(stderr, "ATM network is inoperable\n");
- break;
- case EPERM:
- fprintf(stderr, "Must be super user to use set subcommand\n");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- argv[0]);
- break;
- default:
- perror("Ioctl (AIOCSET) MAC address");
- break;
- }
- exit(1);
- }
-
- (void)close(s);
-}
-
-
-/*
- * Process network interface set command
- *
- * Command format:
- * atm set netif <interface_name> <prefix_name> <count>
- *
- * Arguments:
- * argc number of arguments to command
- * argv pointer to argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-set_netif(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- struct atmsetreq anr;
- char str[16];
- char *cp;
- int s;
- u_long nifs;
-
- /*
- * Set IOCTL opcode
- */
- anr.asr_opcode = AIOCS_SET_NIF;
-
- /*
- * Validate interface name
- */
- if (strlen(argv[0]) > sizeof(anr.asr_nif_intf) - 1) {
- fprintf(stderr, "%s: Illegal interface name\n", prog);
- exit(1);
- }
- strcpy(anr.asr_nif_intf, argv[0]);
- argc--; argv++;
-
- /*
- * Validate network interface name prefix
- */
- if ((strlen(argv[0]) > sizeof(anr.asr_nif_pref) - 1) ||
- (strpbrk(argv[0], "0123456789"))) {
- fprintf(stderr, "%s: Illegal network interface prefix\n", prog);
- exit(1);
- }
- strcpy(anr.asr_nif_pref, argv[0]);
- argc--; argv++;
-
- /*
- * Validate interface count
- */
- errno = 0;
- nifs = strtoul(argv[0], &cp, 0);
- if (errno != 0 || *cp != '\0' || nifs > MAX_NIFS) {
- fprintf(stderr, "%s: Invalid interface count\n", prog);
- exit(1);
- }
- anr.asr_nif_cnt = nifs;
-
- /*
- * Make sure the resulting name won't be too long
- */
- sprintf(str, "%lu", nifs - 1);
- if ((strlen(str) + strlen(anr.asr_nif_pref)) >
- sizeof(anr.asr_nif_intf) - 1) {
- fprintf(stderr, "%s: Network interface prefix too long\n", prog);
- exit(1);
- }
-
- /*
- * Tell the kernel to do it
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCSET, (caddr_t)&anr) < 0) {
- fprintf(stderr, "%s: ", prog);
- perror("ioctl (AIOCSET) set NIF");
- exit(1);
- }
- (void)close(s);
-}
-
-
-/*
- * Process set NSAP prefix command
- *
- * Command format:
- * atm set nsap <interface_name> <NSAP prefix>
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-set_prefix(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- int s;
- char *intf;
- u_char pfx[13];
- struct atmsetreq asr;
-
- /*
- * Validate interface name
- */
- if (strlen(argv[0]) > sizeof(asr.asr_prf_intf) - 1) {
- fprintf(stderr, "%s: Illegal interface name\n", prog);
- exit(1);
- }
- intf = argv[0];
- argc--; argv++;
-
- /*
- * Get the prefix provided by the user
- */
- if (get_hex_atm_addr(argv[0], pfx, sizeof(pfx)) != sizeof(pfx)) {
- fprintf(stderr, "%s: Invalid NSAP prefix\n", prog);
- exit(1);
- }
-
- /*
- * Build ioctl request
- */
- asr.asr_opcode = AIOCS_SET_PRF;
- strncpy(asr.asr_prf_intf, intf, sizeof(asr.asr_prf_intf));
- bcopy(pfx, asr.asr_prf_pref, sizeof(asr.asr_prf_pref));
-
- /*
- * Pass the new prefix to the kernel
- */
- s = socket(AF_ATM, SOCK_DGRAM, 0);
- if (s < 0) {
- sock_error(errno);
- }
- if (ioctl(s, AIOCSET, (caddr_t)&asr) < 0) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case EOPNOTSUPP:
- case EPROTONOSUPPORT:
- perror("Internal error");
- break;
- case EALREADY:
- fprintf(stderr, "NSAP prefix is already set\n");
- break;
- case EINVAL:
- fprintf(stderr, "Invalid parameter\n");
- break;
- case ENOMEM:
- fprintf(stderr, "Kernel memory exhausted\n");
- break;
- case ENETDOWN:
- fprintf(stderr, "ATM network is inoperable\n");
- break;
- case EPERM:
- fprintf(stderr, "Must be super user to use set subcommand\n");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- argv[0]);
- break;
- default:
- perror("Ioctl (AIOCSET) NSAP prefix");
- break;
- }
- exit(1);
- }
-
- (void)close(s);
-}
diff --git a/sbin/atm/atm/atm_show.c b/sbin/atm/atm/atm_show.c
deleted file mode 100644
index e744c75..0000000
--- a/sbin/atm/atm/atm_show.c
+++ /dev/null
@@ -1,1144 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User configuration and display program
- * --------------------------------------
- *
- * Routines for "show" subcommand
- *
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netatm/port.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_vc.h>
-#include <netatm/atm_ioctl.h>
-
-#include <errno.h>
-#include <libatm.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "atm.h"
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-/*
- * Local functions
- */
-static int vcc_compare(const void *, const void *);
-static int ip_vcc_compare(const void *, const void *);
-static int arp_compare(const void *, const void *);
-
-
-/*
- * Process show ARP command
- *
- * Command format:
- * atm show ARP [<ip-addr>]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_arp(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- size_t arp_info_len;
- struct atminfreq air;
- struct air_arp_rsp *arp_info, *arp_info_base;
- struct sockaddr_in *sain;
- union {
- struct sockaddr_in sain;
- struct sockaddr sa;
- } host_addr;
-
- /*
- * Get IP address of specified host name
- */
- bzero(&host_addr, sizeof(host_addr));
- host_addr.sa.sa_family = AF_INET;
- if (argc) {
- sain = get_ip_addr(argv[0]);
- if (!sain) {
- fprintf(stderr, "%s: host \'%s\' not found\n",
- prog, argv[0]);
- exit(1);
- }
- host_addr.sain.sin_addr.s_addr = sain->sin_addr.s_addr;
- } else {
- host_addr.sain.sin_addr.s_addr = INADDR_ANY;
- }
-
- /*
- * Get ARP information from the kernel
- */
- bzero(&air, sizeof(air));
- air.air_opcode = AIOCS_INF_ARP;
- air.air_arp_addr = host_addr.sa;
- arp_info_len = do_info_ioctl(&air, sizeof(struct air_arp_rsp) * 10);
- if ((ssize_t)arp_info_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "not an ATM device\n");
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
- arp_info_base = arp_info =
- (struct air_arp_rsp *) air.air_buf_addr;
-
- /*
- * Sort the ARP table
- */
- qsort((void *) arp_info,
- arp_info_len / sizeof(struct air_arp_rsp),
- sizeof(struct air_arp_rsp),
- arp_compare);
-
- /*
- * Print the relevant information
- */
- while (arp_info_len >= sizeof(struct air_arp_rsp)) {
- print_arp_info(arp_info);
- arp_info++;
- arp_info_len -= sizeof(struct air_arp_rsp);
- }
-
- /*
- * Release the information from the kernel
- */
- free(arp_info_base);
-}
-
-
-/*
- * Process show ATM ARP server command
- *
- * Command format:
- * atm show arpserver [<interface-name>]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_arpserv(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- size_t buf_len, asrv_info_len;
- struct atminfreq air;
- struct air_asrv_rsp *asrv_info, *asrv_info_base;
-
- /*
- * Validate interface name
- */
- bzero(air.air_int_intf, sizeof(air.air_int_intf));
- if (argc) {
- if (strlen(argv[0]) > IFNAMSIZ - 1) {
- fprintf(stderr, "%s: Illegal interface name\n",
- prog);
- exit(1);
- }
- strcpy(air.air_int_intf, argv[0]);
- argc--; argv++;
- }
-
- /*
- * Get interface information from the kernel
- */
- air.air_opcode = AIOCS_INF_ASV;
- buf_len = do_info_ioctl(&air, sizeof(struct air_asrv_rsp) * 3);
- if ((ssize_t)buf_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- argv[0]);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
-
- /*
- * Print the interface information
- */
- asrv_info_base = asrv_info =
- (struct air_asrv_rsp *)(void *)air.air_buf_addr;
- while (buf_len >= sizeof(struct air_asrv_rsp)) {
- print_asrv_info(asrv_info);
- asrv_info_len = sizeof(struct air_asrv_rsp) +
- asrv_info->asp_nprefix * sizeof(struct in_addr) * 2;
- asrv_info = (struct air_asrv_rsp *)(void *)
- ((char *)asrv_info + asrv_info_len);
- buf_len -= asrv_info_len;
- }
- free(asrv_info_base);
-}
-
-
-/*
- * Process show ATM adapter configuration command
- *
- * Command format:
- * atm show config [<interface-name>]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_config(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- size_t buf_len;
- struct atminfreq air;
- struct air_cfg_rsp *cfg_info, *cfg_info_base;
-
- /*
- * Validate interface name
- */
- bzero(air.air_cfg_intf, sizeof(air.air_cfg_intf));
- if (argc) {
- if (strlen(argv[0]) > IFNAMSIZ - 1) {
- fprintf(stderr, "%s: Illegal interface name\n",
- prog);
- exit(1);
- }
- strcpy(air.air_cfg_intf, argv[0]);
- argc--; argv++;
- }
-
- /*
- * Get configuration information from the kernel
- */
- air.air_opcode = AIOCS_INF_CFG;
- buf_len = do_info_ioctl(&air, sizeof(struct air_asrv_rsp) * 3);
- if ((ssize_t)buf_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- argv[0]);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
-
- /*
- * Print the interface information
- */
- cfg_info_base = cfg_info =
- (struct air_cfg_rsp *)(void *)air.air_buf_addr;
- for (; buf_len >= sizeof(struct air_cfg_rsp); cfg_info++,
- buf_len -= sizeof(struct air_cfg_rsp)) {
- print_cfg_info(cfg_info);
- }
- free(cfg_info_base);
-}
-
-
-/*
- * Process show interface command
- *
- * Command format:
- * atm show interface [<interface-name>]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_intf(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- size_t buf_len;
- struct atminfreq air;
- struct air_int_rsp *int_info, *int_info_base;
-
- /*
- * Validate interface name
- */
- bzero(&air, sizeof(air));
- if (argc) {
- if (strlen(argv[0]) > IFNAMSIZ - 1) {
- fprintf(stderr, "%s: Illegal interface name\n",
- prog);
- exit(1);
- }
- strcpy(air.air_int_intf, argv[0]);
- argc--; argv++;
- }
-
- /*
- * Get interface information from the kernel
- */
- air.air_opcode = AIOCS_INF_INT;
- buf_len = do_info_ioctl(&air, sizeof(struct air_int_rsp) * 3);
- if ((ssize_t)buf_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- argv[0]);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
-
- /*
- * Print the interface information
- */
- int_info_base = int_info =
- (struct air_int_rsp *)(void *)air.air_buf_addr;
- for (; buf_len >= sizeof(struct air_int_rsp); int_info++,
- buf_len -= sizeof(struct air_int_rsp)) {
- print_intf_info(int_info);
- }
- free(int_info_base);
-}
-
-
-/*
- * Process show IP VCCs command
- *
- * Command format:
- * atm show ipvcc [<ip-addr>]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_ip_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- int rc;
- size_t ip_info_len;
- char *if_name = (char *)0;
- struct atminfreq air;
- struct air_ip_vcc_rsp *ip_info, *ip_info_base;
- struct sockaddr_in *sain;
- union {
- struct sockaddr_in sain;
- struct sockaddr sa;
- } host_addr;
-
- /*
- * First parameter can be a netif name, an IP host name, or
- * an IP address. Figure out which it is.
- */
- bzero(&host_addr, sizeof(host_addr));
- host_addr.sa.sa_family = AF_INET;
- if (argc) {
- rc = verify_nif_name(argv[0]);
- if (rc < 0) {
- /*
- * Error occured
- */
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- argv[0]);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- } else if (rc > 0) {
- /*
- * Parameter is a valid netif name
- */
- if_name = argv[0];
- } else {
- /*
- * Get IP address of specified host name
- */
- sain = get_ip_addr(argv[0]);
- host_addr.sain.sin_addr.s_addr =
- sain->sin_addr.s_addr;
- }
- } else {
- host_addr.sain.sin_addr.s_addr = INADDR_ANY;
- }
-
- /*
- * Get IP map information from the kernel
- */
- air.air_opcode = AIOCS_INF_IPM;
- air.air_ip_addr = host_addr.sa;
- ip_info_len = do_info_ioctl(&air, sizeof(struct air_ip_vcc_rsp) * 10);
- if ((ssize_t)ip_info_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "not an ATM device\n");
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
- ip_info_base = ip_info =
- (struct air_ip_vcc_rsp *)(void *)air.air_buf_addr;
-
- /*
- * Sort the information
- */
- qsort((void *) ip_info,
- ip_info_len / sizeof(struct air_ip_vcc_rsp),
- sizeof(struct air_ip_vcc_rsp),
- ip_vcc_compare);
-
- /*
- * Print the relevant information
- */
- while (ip_info_len >= sizeof(struct air_ip_vcc_rsp)) {
- if (!if_name || !strcmp(if_name, ip_info->aip_intf)) {
- print_ip_vcc_info(ip_info);
- }
- ip_info++;
- ip_info_len -= sizeof(struct air_ip_vcc_rsp);
- }
-
- /*
- * Release the information from the kernel
- */
- free(ip_info_base);
-}
-
-
-/*
- * Process show network interface command
- *
- * Command format:
- * atm show netif [<netif>]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_netif(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- size_t buf_len;
- struct atminfreq air;
- struct air_netif_rsp *int_info, *int_info_base;
-
- /*
- * Validate network interface name
- */
- bzero(air.air_int_intf, sizeof(air.air_int_intf));
- if (argc) {
- if (strlen(argv[0]) > IFNAMSIZ - 1) {
- fprintf(stderr, "%s: Illegal interface name\n", prog);
- exit(1);
- }
- strcpy(air.air_int_intf, argv[0]);
- argc--; argv++;
- }
-
- /*
- * Get network interface information from the kernel
- */
- air.air_opcode = AIOCS_INF_NIF;
- buf_len = do_info_ioctl(&air, sizeof(struct air_netif_rsp) * 3);
- if ((ssize_t)buf_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- argv[0]);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
-
- /*
- * Print the network interface information
- */
- int_info_base = int_info =
- (struct air_netif_rsp *) air.air_buf_addr;
- for (; buf_len >= sizeof(struct air_netif_rsp); int_info++,
- buf_len -= sizeof(struct air_netif_rsp)) {
- print_netif_info(int_info);
- }
- free(int_info_base);
-}
-
-
-/*
- * Process interface statistics command
- *
- * Command format:
- * atm show stats interface [<interface-name>]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_intf_stats(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- size_t buf_len;
- char intf[IFNAMSIZ];
- struct atminfreq air;
- struct air_phy_stat_rsp *pstat_info, *pstat_info_base;
- struct air_cfg_rsp *cfg_info;
-
- /*
- * Validate interface name
- */
- bzero(intf, sizeof(intf));
- if (argc) {
- if (strlen(argv[0]) > IFNAMSIZ - 1) {
- fprintf(stderr, "%s: Illegal interface name\n",
- prog);
- exit(1);
- }
- strcpy(intf, argv[0]);
- argc--; argv++;
- }
-
- /*
- * If there are parameters remaining, the request is for
- * vendor-specific adaptor statistics
- */
- if (argc) {
- /*
- * Get adapter configuration information
- */
- air.air_opcode = AIOCS_INF_CFG;
- strcpy(air.air_cfg_intf, intf);
- buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp));
- if ((ssize_t)buf_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- intf);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
- cfg_info = (struct air_cfg_rsp *)(void *)air.air_buf_addr;
-
- /*
- * Call the appropriate vendor-specific routine
- */
- switch(cfg_info->acp_vendor) {
- case VENDOR_FORE:
- show_fore200_stats(intf, argc, argv);
- break;
- default:
- fprintf(stderr, "%s: Unknown adapter vendor\n",
- prog);
- break;
- }
-
- free(cfg_info);
- } else {
- /*
- * Get generic interface statistics
- */
- air.air_opcode = AIOCS_INF_PIS;
- strcpy(air.air_physt_intf, intf);
- buf_len = do_info_ioctl(&air,
- sizeof(struct air_phy_stat_rsp) * 3);
- if ((ssize_t)buf_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- intf);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
-
- /*
- * Display the interface statistics
- */
- pstat_info_base = pstat_info = (struct air_phy_stat_rsp *)
- (void *)air.air_buf_addr;
- for (; buf_len >= sizeof(struct air_phy_stat_rsp);
- pstat_info++,
- buf_len-=sizeof(struct air_phy_stat_rsp)) {
- print_intf_stats(pstat_info);
- }
- free((caddr_t)pstat_info_base);
- }
-}
-
-
-/*
- * Process VCC statistics command
- *
- * Command format:
- * atm show stats VCC [<interface-name> [<vpi> [<vci>]]]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_vcc_stats(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- size_t vcc_info_len;
- int vpi = -1, vci = -1;
- char *cp, *intf = NULL;
- struct air_vcc_rsp *vcc_info, *vcc_info_base;
-
- /*
- * Validate interface name
- */
- if (argc) {
- if (strlen(argv[0]) > IFNAMSIZ - 1) {
- fprintf(stderr, "%s: Illegal interface name\n",
- prog);
- exit(1);
- }
- intf = argv[0];
- argc--; argv++;
- }
-
- /*
- * Validate VPI value
- */
- if (argc) {
- vpi = strtol(argv[0], &cp, 0);
- if ((*cp != '\0') || (vpi < 0) || (vpi >= 1 << 8)) {
- fprintf(stderr, "%s: Invalid VPI value\n", prog);
- exit(1);
- }
- argc--; argv++;
- }
-
- /*
- * Validate VCI value
- */
- if (argc) {
- vci = strtol(argv[0], &cp, 0);
- if ((*cp != '\0') || (vci <= 0) || (vci >= 1 << 16)) {
- fprintf(stderr, "%s: Invalid VCI value\n",
- prog);
- exit(1);
- }
- argc--; argv++;
- }
-
- /*
- * Get VCC information
- */
- vcc_info_len = get_vcc_info(intf, &vcc_info);
- if (vcc_info_len == 0)
- exit(1);
- else if ((ssize_t)vcc_info_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "Not an ATM device\n");
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
-
- /*
- * Sort the VCC information
- */
- qsort((void *) vcc_info,
- vcc_info_len / sizeof(struct air_vcc_rsp),
- sizeof(struct air_vcc_rsp),
- vcc_compare);
-
- /*
- * Display the VCC statistics
- */
- vcc_info_base = vcc_info;
- for (; vcc_info_len >= sizeof(struct air_vcc_rsp);
- vcc_info_len-=sizeof(struct air_vcc_rsp),
- vcc_info++) {
- if (vpi != -1 && vcc_info->avp_vpi != vpi)
- continue;
- if (vci != -1 && vcc_info->avp_vci != vci)
- continue;
- print_vcc_stats(vcc_info);
- }
- free(vcc_info_base);
-}
-
-
-/*
- * Process VCC information command
- *
- * Command format:
- * atm show VCC [<interface-name> [<vpi> [<vci>] | PVC | SVC]]
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_vcc(int argc, char **argv, const struct cmd *cmdp __unused)
-{
- size_t vcc_info_len;
- int vpi = -1, vci = -1, show_pvc = 0, show_svc = 0;
- char *cp, *intf = NULL;
- struct air_vcc_rsp *vcc_info, *vcc_info_base;
-
- /*
- * Validate interface name
- */
- if (argc) {
- if (strlen(argv[0]) > IFNAMSIZ - 1) {
- fprintf(stderr, "%s: Illegal interface name\n",
- prog);
- exit(1);
- }
- intf = argv[0];
- argc--; argv++;
- }
-
- /*
- * Validate VPI value
- */
- if (argc) {
- if (strcasecmp(argv[0], "pvc"))
- show_pvc = 1;
- else if (strcasecmp(argv[0], "svc"))
- show_svc = 1;
- else {
- vpi = strtol(argv[0], &cp, 0);
- if ((*cp != '\0') || (vpi < 0) ||
- (vpi >= 1 << 8)) {
- fprintf(stderr, "%s: Invalid VPI value\n", prog);
- exit(1);
- }
- }
- argc--; argv++;
- }
-
- /*
- * Validate VCI value
- */
- if (argc) {
- vci = strtol(argv[0], &cp, 0);
- if ((*cp != '\0') || (vci <= 0) || (vci >= 1 << 16)) {
- fprintf(stderr, "%s: Invalid VCI value\n",
- prog);
- exit(1);
- }
- argc--; argv++;
- }
-
- /*
- * Get VCC information
- */
- vcc_info_len = get_vcc_info(intf, &vcc_info);
- if (vcc_info_len == 0)
- exit(1);
- else if ((ssize_t)vcc_info_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "Not an ATM device\n");
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
-
- /*
- * Sort the VCC information
- */
- qsort((void *) vcc_info,
- vcc_info_len/sizeof(struct air_vcc_rsp),
- sizeof(struct air_vcc_rsp),
- vcc_compare);
-
- /*
- * Display the VCC information
- */
- vcc_info_base = vcc_info;
- for (; vcc_info_len >= sizeof(struct air_vcc_rsp);
- vcc_info_len-=sizeof(struct air_vcc_rsp),
- vcc_info++) {
- if (vpi != -1 && vcc_info->avp_vpi != vpi)
- continue;
- if (vci != -1 && vcc_info->avp_vci != vci)
- continue;
- if (show_pvc && vcc_info->avp_type & VCC_PVC)
- continue;
- if (show_svc && vcc_info->avp_type & VCC_SVC)
- continue;
- print_vcc_info(vcc_info);
- }
- free(vcc_info_base);
-}
-
-
-/*
- * Process version command
- *
- * Command format:
- * atm show version
- *
- * Arguments:
- * argc number of remaining arguments to command
- * argv pointer to remaining argument strings
- * cmdp pointer to command description
- *
- * Returns:
- * none
- *
- */
-void
-show_version(int argc __unused, char **argv __unused,
- const struct cmd *cmdp __unused)
-{
- size_t buf_len;
- struct atminfreq air;
- struct air_version_rsp *ver_info, *ver_info_base;
-
- /*
- * Get network interface information from the kernel
- */
- air.air_opcode = AIOCS_INF_VER;
- buf_len = do_info_ioctl(&air, sizeof(struct air_version_rsp));
- if ((ssize_t)buf_len == -1) {
- fprintf(stderr, "%s: ", prog);
- switch (errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "Not an ATM device\n");
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- exit(1);
- }
-
- /*
- * Print the network interface information
- */
- ver_info_base = ver_info =
- (struct air_version_rsp *)(void *)air.air_buf_addr;
- for (; buf_len >= sizeof(struct air_version_rsp); ver_info++,
- buf_len -= sizeof(struct air_version_rsp)) {
- print_version_info(ver_info);
- }
- free(ver_info_base);
-}
-
-
-/*
- * Comparison function for qsort
- *
- * Arguments:
- * p1 pointer to the first VCC response
- * p2 pointer to the second VCC response
- *
- * Returns:
- * int a number less than, greater than, or equal to zero,
- * depending on whether *p1 is less than, greater than, or
- * equal to *p2
- *
- */
-static int
-vcc_compare(p1, p2)
- const void *p1, *p2;
-{
- int rc;
- const struct air_vcc_rsp *c1, *c2;
-
- c1 = (const struct air_vcc_rsp *) p1;
- c2 = (const struct air_vcc_rsp *) p2;
-
- /*
- * Compare the interface names
- */
- rc = strcmp(c1->avp_intf, c2->avp_intf);
- if (rc)
- return(rc);
-
- /*
- * Compare the VPI values
- */
- rc = c1->avp_vpi - c2->avp_vpi;
- if (rc)
- return(rc);
-
- /*
- * Compare the VCI values
- */
- rc = c1->avp_vci - c2->avp_vci;
- if (rc)
- return(rc);
-
- /*
- * Compare the types
- */
- rc = c1->avp_type - c2->avp_type;
- return(rc);
-}
-
-
-/*
- * Comparison function for qsort
- *
- * Arguments:
- * p1 pointer to the first VCC response
- * p2 pointer to the second VCC response
- *
- * Returns:
- * int a number less than, greater than, or equal to zero,
- * depending on whether *p1 is less than, greater than, or
- * equal to *p2
- *
- */
-static int
-ip_vcc_compare(p1, p2)
- const void *p1, *p2;
-{
- int rc;
- const struct air_ip_vcc_rsp *c1, *c2;
-
- c1 = (const struct air_ip_vcc_rsp *) p1;
- c2 = (const struct air_ip_vcc_rsp *) p2;
-
- /*
- * Compare the interface names
- */
- rc = strcmp(c1->aip_intf, c2->aip_intf);
- if (rc)
- return(rc);
-
- /*
- * Compare the VPI values
- */
- rc = c1->aip_vpi - c2->aip_vpi;
- if (rc)
- return(rc);
-
- /*
- * Compare the VCI values
- */
- rc = c1->aip_vci - c2->aip_vci;
- return(rc);
-}
-
-
-/*
- * Comparison function for qsort
- *
- * Arguments:
- * p1 pointer to the first ARP or IP map entry
- * p2 pointer to the second ARP or IP map entry
- *
- * Returns:
- * int a number less than, greater than, or equal to zero,
- * depending on whether *p1 is less than, greater than, or
- * equal to *p2
- *
- */
-static int
-arp_compare(p1, p2)
- const void *p1, *p2;
-{
- int rc;
- const struct air_arp_rsp *c1, *c2;
- const struct sockaddr_in *sin1, *sin2;
-
- c1 = (const struct air_arp_rsp *)p1;
- c2 = (const struct air_arp_rsp *)p2;
- sin1 = (const struct sockaddr_in *)(const void *)&c1->aap_arp_addr;
- sin2 = (const struct sockaddr_in *)(const void *)&c2->aap_arp_addr;
-
- /*
- * Compare the IP addresses
- */
- if ((rc = sin1->sin_family - sin2->sin_family) != 0)
- return(rc);
- if ((rc = sin1->sin_addr.s_addr - sin2->sin_addr.s_addr) != 0)
- return(rc);
-
- /*
- * Compare the ATM addresses
- */
- if ((rc = c1->aap_addr.address_format - c2->aap_addr.address_format) != 0)
- return(rc);
- if ((rc = c1->aap_addr.address_length - c2->aap_addr.address_length) != 0)
- return(rc);
- switch(c1->aap_addr.address_format) {
- case T_ATM_ABSENT:
- rc = 0;
- break;
- case T_ATM_ENDSYS_ADDR:
- rc = bcmp(c1->aap_addr.address, c2->aap_addr.address,
- sizeof(Atm_addr_nsap));
- break;
- case T_ATM_E164_ADDR:
- rc = bcmp(c1->aap_addr.address, c2->aap_addr.address,
- sizeof(Atm_addr_e164));
- break;
- case T_ATM_SPANS_ADDR:
- rc = bcmp(c1->aap_addr.address, c2->aap_addr.address,
- sizeof(Atm_addr_spans));
- break;
- }
-
- return(rc);
-}
diff --git a/sbin/atm/atm/atm_subr.c b/sbin/atm/atm/atm_subr.c
deleted file mode 100644
index a612bee..0000000
--- a/sbin/atm/atm/atm_subr.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User configuration and display program
- * --------------------------------------
- *
- * General subroutines
- *
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netatm/port.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_ioctl.h>
-#include <arpa/inet.h>
-
-#include <errno.h>
-#include <libatm.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "atm.h"
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-/*
- * Table entry definition
- */
-typedef struct {
- int type;
- const char *name;
-} tbl_ent;
-
-
-/*
- * Table to translate vendor codes to ASCII
- */
-static const tbl_ent vendors[] = {
- { VENDOR_UNKNOWN, "Unknown" },
- { VENDOR_FORE, "Fore" },
- { VENDOR_ENI, "ENI" },
- { VENDOR_IDT, "IDT" },
- { VENDOR_PROSUM, "ProSum" },
- { VENDOR_NETGRAPH, "Netgraph" },
- { 0, 0 },
-};
-
-
-/*
- * Table to translate adapter codes to ASCII
- */
-static const tbl_ent adapter_types[] = {
- { DEV_UNKNOWN, "Unknown" },
- { DEV_FORE_SBA200E, "SBA-200E" },
- { DEV_FORE_SBA200, "SBA-200" },
- { DEV_FORE_PCA200E, "PCA-200E" },
- { DEV_FORE_ESA200E, "ESA-200E" },
- { DEV_ENI_155P, "ENI-155p" },
- { DEV_IDT_155, "IDT" },
- { DEV_PROATM_25, "PROATM-25" },
- { DEV_PROATM_155, "PROATM-155" },
- { DEV_VATMPIF, "VATMPIF" },
- { DEV_FORE_LE25, "ForeLE-25" },
- { DEV_FORE_LE155, "ForeLE-155" },
- { DEV_IDT_25, "NICStAR-25" },
- { DEV_IDTABR_25, "IDT77252-25" },
- { DEV_IDTABR_155, "IDT77252-155" },
- { DEV_FORE_HE155, "ForeHE-155" },
- { DEV_FORE_HE622, "ForeHE-622" },
- { 0, 0 },
-};
-
-/*
- * Table to translate medium types to ASCII
- */
-static const tbl_ent media_types[] = {
- { MEDIA_UNKNOWN, "Unknown" },
- { MEDIA_TAXI_100, "100 Mbps 4B/5B" },
- { MEDIA_TAXI_140, "140 Mbps 4B/5B" },
- { MEDIA_OC3C, "OC-3c" },
- { MEDIA_OC12C, "OC-12c" },
- { MEDIA_UTP155, "155 Mbps UTP" },
- { MEDIA_UTP25, "25.6 Mbps UTP" },
- { MEDIA_VIRTUAL, "Virtual Link" },
- { MEDIA_DSL, "xDSL" },
- { 0, 0 },
-};
-
-/*
- * Table to translate bus types to ASCII
- */
-static const tbl_ent bus_types[] = {
- { BUS_UNKNOWN, "Unknown" },
- { BUS_SBUS_B16, "SBus" },
- { BUS_SBUS_B32, "SBus" },
- { BUS_PCI, "PCI" },
- { BUS_EISA, "EISA" },
- { BUS_USB, "USB" },
- { BUS_VIRTUAL, "Virtual" },
- { 0, 0 },
-};
-
-
-/*
- * Get interface vendor name
- *
- * Return a character string with a vendor name, given a vendor code.
- *
- * Arguments:
- * vendor vendor ID
- *
- * Returns:
- * char * pointer to a string with the vendor name
- *
- */
-const char *
-get_vendor(int vendor)
-{
- int i;
-
- for(i=0; vendors[i].name; i++) {
- if (vendors[i].type == vendor)
- return(vendors[i].name);
- }
-
- return("-");
-}
-
-
-/*
- * Get adapter type
- *
- * Arguments:
- * dev adapter code
- *
- * Returns:
- * char * pointer to a string with the adapter type
- *
- */
-const char *
-get_adapter(int dev)
-{
- int i;
-
- for(i=0; adapter_types[i].name; i++) {
- if (adapter_types[i].type == dev)
- return(adapter_types[i].name);
- }
-
- return("-");
-}
-
-
-/*
- * Get communication medium type
- *
- * Arguments:
- * media medium code
- *
- * Returns:
- * char * pointer to a string with the name of the medium
- *
- */
-const char *
-get_media_type(int media)
-{
- int i;
-
- for(i=0; media_types[i].name; i++) {
- if (media_types[i].type == media)
- return(media_types[i].name);
- }
-
- return("-");
-}
-
-
-/*
- * Get bus type
- *
- * Arguments:
- * bus bus type code
- *
- * Returns:
- * char * pointer to a string with the bus type
- *
- */
-const char *
-get_bus_type(int bus)
-{
- int i;
-
- for(i=0; bus_types[i].name; i++) {
- if (bus_types[i].type == bus)
- return(bus_types[i].name);
- }
-
- return("-");
-}
-
-
-/*
- * Get adapter ID
- *
- * Get a string giving the adapter's vendor and type.
- *
- * Arguments:
- * intf interface name
- *
- * Returns:
- * char * pointer to a string identifying the adapter
- *
- */
-const char *
-get_adapter_name(const char *intf)
-{
- size_t buf_len;
- struct atminfreq air;
- struct air_cfg_rsp *cfg;
- static char name[256];
-
- /*
- * Initialize
- */
- bzero(&air, sizeof(air));
- bzero(name, sizeof(name));
-
- /*
- * Get configuration information from the kernel
- */
- air.air_opcode = AIOCS_INF_CFG;
- strcpy(air.air_cfg_intf, intf);
- buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp));
- if (buf_len < sizeof(struct air_cfg_rsp))
- return("-");
- cfg = (struct air_cfg_rsp *)(void *)air.air_buf_addr;
-
- /*
- * Build a string describing the adapter
- */
- strcpy(name, get_vendor(cfg->acp_vendor));
- strcat(name, " ");
- strcat(name, get_adapter(cfg->acp_device));
-
- free(cfg);
-
- return(name);
-}
-
-
-/*
- * Format a MAC address into a string
- *
- * Arguments:
- * addr pointer to a MAC address
- *
- * Returns:
- * the address of a string representing the MAC address
- *
- */
-const char *
-format_mac_addr(const Mac_addr *addr)
-{
- static char str[256];
-
- /*
- * Check for null pointer
- */
- if (!addr)
- return("-");
-
- /*
- * Clear the returned string
- */
- bzero(str, sizeof(str));
-
- /*
- * Format the address
- */
- sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x",
- addr->ma_data[0],
- addr->ma_data[1],
- addr->ma_data[2],
- addr->ma_data[3],
- addr->ma_data[4],
- addr->ma_data[5]);
-
- return(str);
-}
-
-
-/*
- * Parse an IP prefix designation in the form nnn.nnn.nnn.nnn/mm
- *
- * Arguments:
- * cp pointer to prefix designation string
- * op pointer to a pair of in_addrs for the result
- *
- * Returns:
- * 0 success
- * -1 prefix was invalid
- *
- */
-int
-parse_ip_prefix(const char *cp, struct in_addr *op)
-{
- int len;
- char *mp;
- struct in_addr ip_addr;
-
- static u_long masks[33] = {
- 0x0,
- 0x80000000,
- 0xc0000000,
- 0xe0000000,
- 0xf0000000,
- 0xf8000000,
- 0xfc000000,
- 0xfe000000,
- 0xff000000,
- 0xff800000,
- 0xffc00000,
- 0xffe00000,
- 0xfff00000,
- 0xfff80000,
- 0xfffc0000,
- 0xfffe0000,
- 0xffff0000,
- 0xffff8000,
- 0xffffc000,
- 0xffffe000,
- 0xfffff000,
- 0xfffff800,
- 0xfffffc00,
- 0xfffffe00,
- 0xffffff00,
- 0xffffff80,
- 0xffffffc0,
- 0xffffffe0,
- 0xfffffff0,
- 0xfffffff8,
- 0xfffffffc,
- 0xfffffffe,
- 0xffffffff
- };
-
- /*
- * Find the slash that marks the start of the mask
- */
- mp = strchr(cp, '/');
- if (mp) {
- *mp = '\0';
- mp++;
- }
-
- /*
- * Convert the IP-address part of the prefix
- */
- ip_addr.s_addr = inet_addr(cp);
- if (ip_addr.s_addr == INADDR_NONE)
- return(-1);
-
- /*
- * Set the default mask length
- */
- if (IN_CLASSA(ntohl(ip_addr.s_addr)))
- len = 8;
- else if (IN_CLASSB(ntohl(ip_addr.s_addr)))
- len = 16;
- else if (IN_CLASSC(ntohl(ip_addr.s_addr)))
- len = 24;
- else
- return(-1);
-
- /*
- * Get the mask length
- */
- if (mp) {
- len = atoi(mp);
- if (len < 1 || len > 32)
- return(-1);
- }
-
- /*
- * Select the mask and copy the IP address into the
- * result buffer, ANDing it with the mask
- */
- op[1].s_addr = htonl(masks[len]);
- op[0].s_addr = ip_addr.s_addr & op[1].s_addr;
-
- return(0);
-}
-
-
-/*
- * Compress a list of IP network prefixes
- *
- * Arguments:
- * ipp pointer to list of IP address/mask pairs
- * ipc length of list
- *
- * Returns:
- * length of compressed list
- *
- */
-size_t
-compress_prefix_list(struct in_addr *ipp, size_t ilen)
-{
- u_int i, j, n;
- struct in_addr *ip1, *ip2, *m1, *m2;
-
- /*
- * Figure out how many pairs there are
- */
- n = ilen / (sizeof(struct in_addr) * 2);
-
- /*
- * Check each pair of address/mask pairs to make sure
- * none contains the other
- */
- for (i = 0; i < n; i++) {
- ip1 = &ipp[i*2];
- m1 = &ipp[i*2+1];
-
- /*
- * If we've already eliminated this address,
- * skip the checks
- */
- if (ip1->s_addr == 0)
- continue;
-
- /*
- * Try all possible second members of the pair
- */
- for (j = i + 1; j < n; j++) {
- ip2 = &ipp[j*2];
- m2 = &ipp[j*2+1];
-
- /*
- * If we've already eliminated the second
- * address, just skip the checks
- */
- if (ip2->s_addr == 0)
- continue;
-
- /*
- * Compare the address/mask pairs
- */
- if (m1->s_addr == m2->s_addr) {
- /*
- * Masks are equal
- */
- if (ip1->s_addr == ip2->s_addr) {
- ip2->s_addr = 0;
- m2->s_addr = 0;
- }
- } else if (ntohl(m1->s_addr) <
- ntohl(m2->s_addr)) {
- /*
- * m1 is shorter
- */
- if ((ip2->s_addr & m1->s_addr) ==
- ip1->s_addr) {
- ip2->s_addr = 0;
- m2->s_addr = 0;
- }
- } else {
- /*
- * m1 is longer
- */
- if ((ip1->s_addr & m2->s_addr) ==
- ip2->s_addr) {
- ip1->s_addr = 0;
- m1->s_addr = 0;
- break;
- }
- }
- }
- }
-
- /*
- * Now pull up the list, eliminating zeroed entries
- */
- for (i = 0, j = 0; i < n; i++) {
- ip1 = &ipp[i*2];
- m1 = &ipp[i*2+1];
- ip2 = &ipp[j*2];
- m2 = &ipp[j*2+1];
- if (ip1->s_addr != 0) {
- if (i != j) {
- *ip2 = *ip1;
- *m2 = *m1;
- }
- j++;
- }
- }
-
- return(j * sizeof(struct in_addr) * 2);
-}
-
-
-/*
- * Make sure a user-supplied parameter is a valid network interface
- * name
- *
- * When a socket call fails, print an error message and exit
- *
- * Arguments:
- * nif pointer to network interface name
- *
- * Returns:
- * none exits if name is not valid
- *
- */
-void
-check_netif_name(const char *nif)
-{
- int rc;
-
- /*
- * Look up the name in the kernel
- */
- rc = verify_nif_name(nif);
-
- /*
- * Check the result
- */
- if (rc > 0) {
- /*
- * Name is OK
- */
- return;
- } else if (rc == 0) {
- /*
- * Name is not valid
- */
- fprintf(stderr, "%s: Invalid network interface name %s\n",
- prog, nif);
- } else {
- /*
- * Error performing IOCTL
- */
- fprintf(stderr, "%s: ", prog);
- switch(errno) {
- case ENOPROTOOPT:
- case EOPNOTSUPP:
- perror("Internal error");
- break;
- case ENXIO:
- fprintf(stderr, "%s is not an ATM device\n",
- nif);
- break;
- default:
- perror("ioctl (AIOCINFO)");
- break;
- }
- }
-
- exit(1);
-}
-
-
-/*
- * Socket error handler
- *
- * When a socket call fails, print an error message and exit
- *
- * Arguments:
- * err an errno describing the error
- *
- * Returns:
- * none
- *
- */
-void
-sock_error(int err)
-{
- fprintf(stderr, "%s: ", prog);
-
- switch (err) {
-
- case EPROTONOSUPPORT:
- fprintf(stderr, "ATM protocol support not loaded\n");
- break;
-
- default:
- perror("socket");
- break;
- }
-
- exit(1);
-}
diff --git a/sbin/atm/fore_dnld/COPYRIGHT b/sbin/atm/fore_dnld/COPYRIGHT
deleted file mode 100644
index f934d42..0000000
--- a/sbin/atm/fore_dnld/COPYRIGHT
+++ /dev/null
@@ -1,38 +0,0 @@
-$FreeBSD$
-
-This copyright applies to the microcode image in the file pca200e.c.
-
-(Copyright Notice)
-
-Copyright (c) 1995-2000 FORE Systems, Inc., as an unpublished work.
-
-This notice does not imply unrestricted or public access to these
-materials which are a trade secret of FORE Systems, Inc. or its
-subsidiaries or affiliates (together referred to as "FORE"), and
-which may not be reproduced, used, sold or transferred to any third
-party without FORE's prior written consent. All rights reserved.
-
-U.S. Government Restricted Rights.
-
-If you are licensing the Software on behalf of the U.S. Government
-("Government"), the following provisions apply to you. If the
-software is supplied to the Department of Defense ("DoD"), it is
-classified as "Commercial Computer Software" under paragraph
-252.227-7014 of the DoD Supplement to the Federal Acquisition
-Regulations ("DFARS") (or any successor regulations) and the
-Government is acquiring only the license rights granted herein (the
-license rights customarily provided to non-Government users). If
-the Software is supplied to any unit or agency of the Government
-other than the DoD, it is classified as "Restricted Computer
-Software" and the Government's rights in the Software are defined
-in paragraph 52.227-19 of the Federal Acquisition Regulations
-("FAR") (or any successor regulations) or, in the cases of NASA,
-in paragraph 18.52.227-86 of the NASA Supplement to the FAR (or
-any successor regulations).
-
-FORE Systems is a registered trademark, and ForeRunner, ForeRunnerLE,
-and ForeThought are trademarks of FORE Systems, Inc. All other
-brands or product names are trademarks or registered trademarks of
-their respective holders.
-
-(End Copyright Notice)
diff --git a/sbin/atm/fore_dnld/Makefile b/sbin/atm/fore_dnld/Makefile
deleted file mode 100644
index abcec31..0000000
--- a/sbin/atm/fore_dnld/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-# ===================================
-# HARP | Host ATM Research Platform
-# ===================================
-#
-# This Host ATM Research Platform ("HARP") file (the "Software") is
-# made available by Network Computing Services, Inc. ("NetworkCS")
-# "AS IS". NetworkCS does not provide maintenance, improvements or
-# support of any kind.
-#
-# NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
-# INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
-# SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
-# In no event shall NetworkCS be responsible for any damages, including
-# but not limited to consequential damages, arising from or relating to
-# any use of the Software or related support.
-#
-# Copyright 1994-1998 Network Computing Services, Inc.
-#
-# Copies of this Software may be made, however, the above copyright
-# notice must be reproduced on all copies.
-#
-# @(#) $Id: Makefile,v 1.5 1998/07/10 16:01:58 jpt Exp $
-# $FreeBSD$
-
-PROG= fore_dnld
-MAN= fore_dnld.8
-SRCS= fore_dnld.c pca200e.c
-
-WARNS?= 6
-CFLAGS+= -I${.CURDIR}/../../../sys
-
-DPADD= ${LIBATM}
-LDADD= -latm
-
-.include <bsd.prog.mk>
diff --git a/sbin/atm/fore_dnld/fore_dnld.8 b/sbin/atm/fore_dnld/fore_dnld.8
deleted file mode 100644
index c7afb78..0000000
--- a/sbin/atm/fore_dnld/fore_dnld.8
+++ /dev/null
@@ -1,114 +0,0 @@
-.\"
-.\" ===================================
-.\" HARP | Host ATM Research Platform
-.\" ===================================
-.\"
-.\"
-.\" This Host ATM Research Platform ("HARP") file (the "Software") is
-.\" made available by Network Computing Services, Inc. ("NetworkCS")
-.\" "AS IS". NetworkCS does not provide maintenance, improvements or
-.\" support of any kind.
-.\"
-.\" NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
-.\" INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
-.\" AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
-.\" SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
-.\" In no event shall NetworkCS be responsible for any damages, including
-.\" but not limited to consequential damages, arising from or relating to
-.\" any use of the Software or related support.
-.\"
-.\" Copyright 1994-1998 Network Computing Services, Inc.
-.\"
-.\" Copies of this Software may be made, however, the above copyright
-.\" notice must be reproduced on all copies.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd December 3, 1996
-.Dt FORE_DNLD 8
-.Os
-.Sh NAME
-.Nm fore_dnld
-.Nd "download FORE Systems' microcode into host ATM adapter"
-.Sh SYNOPSIS
-.Nm
-.Op Fl 3
-.Op Fl i Ar intf
-.Op Fl d Ar path
-.Op Fl f Ar objfile
-.Op Fl r
-.Sh DESCRIPTION
-The
-.Nm
-utility downloads FORE Systems' microcode into the host ATM adapter(s).
-.Sh OPTIONS
-.Bl -tag -width indent
-.It Fl i Ar intf
-Specify which ATM interface to download microcode to.
-Default is to load microcode into all FORE Systems host adapters.
-.It Fl d Ar path
-Specify the path to prepend to the
-.Ar objfile
-name.
-Default is to use current directory.
-.It Fl f Ar objfile
-Specify the microcode binary file.
-Defaults are:
-.Pa sba200.obj
-for SBA-200 adapters,
-.Pa sba200e.obj
-for SBA-200E adapters, and
-.Pa pca200e.bin
-for PCA-200E adapters.
-.El
-.Sh NOTES
-For the PCA200E adapter, if no file is specified on the command
-line a built-in copy of version 4.1.12 microcode is used.
-When the
-option
-.Fl 3
-is specified version 3.0.1 microcode is used instead.
-.Pp
-Microcode as distributed by FORE Systems is not ready for downloading
-directly into SBA host ATM adapters.
-Instead, the supplied microcode needs
-to be processed with the
-.Xr objcopy 1
-command to create an image suitable
-for downloading.
-Arguments to
-.Xr objcopy 1
-are
-.Dq Li "-S -l -Fcoff" .
-.Pp
-Microcode as
-distributed by FORE Systems for the PCA host ATM adapter does not need
-to be processed.
-.Sh FILES
-.Bl -tag -width indent
-.It Pa ~fore/etc/objcopy
-command to process FORE Systems supplied microcode.
-.It Pa ~fore/etc/sba200*.ucode*
-microcode as supplied by FORE Systems for SBA
-adapters.
-.It Pa ~fore/i386/pca200e.bin
-microcode as supplied by FORE Systems for PCA
-adapters.
-.It Pa ~harp/doc/Install
-HARP installation instructions.
-.El
-.Sh COPYRIGHT
-Copyright (c) 1994-1998, Network Computing Services, Inc.
-.Sh AUTHORS
-.An John Cavanaugh ,
-Minnesota Supercomputer Center, Inc.
-.An Mike Spengler ,
-Minnesota Supercomputer Center, Inc.
-.An Joe Thomas ,
-Minnesota Supercomputer Center, Inc.
-.Sh ACKNOWLEDGMENTS
-This software was developed under the sponsorship of the
-Defense Advanced Research Projects Agency (DARPA) under
-contract numbers F19628-92-C-0072 and F19628-95-C-0215.
-.Sh BUGS
-None known.
diff --git a/sbin/atm/fore_dnld/fore_dnld.c b/sbin/atm/fore_dnld/fore_dnld.c
deleted file mode 100644
index dc52eff..0000000
--- a/sbin/atm/fore_dnld/fore_dnld.c
+++ /dev/null
@@ -1,1346 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User utilities
- * --------------
- *
- * Download (pre)processed microcode into Fore Series-200 host adapter
- * Interact with i960 uart on Fore Series-200 host adapter
- *
- */
-
-#include <sys/param.h>
-#include <sys/mman.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <net/if.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_ioctl.h>
-#include <netinet/in.h>
-#include <dev/hfa/fore.h>
-#include <dev/hfa/fore_aali.h>
-#include <dev/hfa/fore_slave.h>
-
-#include <ctype.h>
-#include <fcntl.h>
-#include <paths.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#if (defined(BSD) && (BSD >= 199103))
-#include <termios.h>
-#else
-#include <termio.h>
-#endif /* !BSD */
-#include <unistd.h>
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-extern u_char pca200e_microcode_3[];
-extern int pca200e_microcode_size_3;
-extern u_char pca200e_microcode_4[];
-extern int pca200e_microcode_size_4;
-
-#ifdef sun
-#define DEV_NAME "/dev/sbus%d"
-#endif /* sun */
-#if (defined(BSD) && (BSD >= 199103))
-#define DEV_NAME _PATH_KMEM
-#endif /* BSD */
-
-#define MAX_CHECK 60
-
-static int comm_mode = 0;
-static const char *progname;
-
-static int tty;
-static cc_t vmin, vtime;
-#if (defined(BSD) && (BSD >= 199103))
-static struct termios sgtty;
-#define TCSETA TIOCSETA
-#define TCGETA TIOCGETA
-#else
-static struct termio sgtty;
-#endif /* !BSD */
-
-static int endian = 0;
-static int verbose = 0;
-static int reset = 0;
-
-static char line[132];
-static u_int lineptr;
-
-static Mon960 *Uart;
-
-static void
-delay(int cnt)
-{
- usleep(cnt);
-}
-
-static uint32_t
-CP_READ(uint32_t val)
-{
- if ( endian )
- return ( ntohl ( val ) );
- else
- return ( val );
-}
-
-static uint32_t
-CP_WRITE(uint32_t val)
-{
- if ( endian )
- return ( htonl ( val ) );
- else
- return ( val );
-}
-
-/*
- * Print an error message and exit.
- *
- * Arguments:
- * none
- *
- * Returns:
- * none
- */
-static void
-error(const char *msg)
-{
- printf ( "%s\n", msg );
- exit (1);
-}
-
-/*
- * Get a byte for the uart and if printing, display it.
- *
- * Returns:
- * c Character from uart
- */
-static char
-getbyte(void)
-{
- char c;
-
- while ( ! ( CP_READ(Uart->mon_xmithost) & UART_VALID ) )
- delay(10);
-
- c = CP_READ(Uart->mon_xmithost) & UART_DATAMASK;
- Uart->mon_xmithost = CP_WRITE(UART_READY);
-
- /*
- * We need to introduce a delay in here or things tend to hang...
- */
- delay(10000);
-
- if ( lineptr >= sizeof(line) )
- lineptr = 0;
-
- /*
- * Save character into line
- */
- line[lineptr++] = c;
-
- if (verbose) {
- if (isprint(c) || (c == '\n') || (c == '\r'))
- putc(c, stdout);
- }
- return (c);
-}
-
-/*
- * Loop getting characters from uart into static string until eol. If printing,
- * display the line retrieved.
- *
- * Arguments:
- * prn Are we displaying characters
- *
- * Returns:
- * none Line in global string 'line[]'
- */
-static void
-getline(int prn)
-{
- char c = '\0';
- u_int i = 0;
-
- while ( c != '>' && c != '\n' && c != '\r' )
- {
- c = getbyte();
- if ( ++i >= sizeof(line) )
- {
- if ( prn )
- printf ( "%s", line );
- i = 0;
- }
- }
-
- /*
- * Terminate line
- */
- line[lineptr] = 0;
- lineptr = 0;
-
-}
-
-/*
- * Send a byte to the i960
- *
- * Arguments:
- * c Character to send
- *
- * Returns:
- * none
- */
-static void
-xmit_byte(u_char c, int dn)
-{
- int val;
-
- while ( CP_READ(Uart->mon_xmitmon) != UART_READY )
- {
- if ( CP_READ(Uart->mon_xmithost) & UART_VALID )
- getbyte();
- if ( !dn ) delay ( 10000 );
- }
- val = (int)c | UART_VALID;
- Uart->mon_xmitmon = CP_WRITE( val );
- if ( !dn ) delay ( 10000 );
- if ( CP_READ(Uart->mon_xmithost) & UART_VALID )
- getbyte();
-
-}
-
-/*
- * Transmit a line to the i960. Eol must be included as part of text to transmit.
- *
- * Arguments:
- * msg Character string to transmit
- * len len of string. This allows us to include NULL's
- * in the string/block to be transmitted.
- *
- * Returns:
- * none
- */
-static void
-xmit_to_i960(const char *msg, int len, int dn)
-{
- int i;
-
- for (i = 0; i < len; i++)
- xmit_byte(msg[i], dn);
-}
-
-/*
- * Send autobaud sequence to i960 monitor
- *
- * Arguments:
- * none
- *
- * Returns:
- * none
- */
-static void
-autobaud(void)
-{
- if ( strncmp ( line, "Mon960", 6 ) == 0 )
- xmit_to_i960 ( "\r\n\r\n\r\n\r\n", 8, 0 );
-}
-
-/*
- * Reset tty to initial state
- *
- * Arguments:
- * ret error code for exit()
- *
- * Returns:
- * none
- *
- */
-static void
-finish(int ret)
-{
- sgtty.c_lflag |= ( ICANON | ECHO );
- sgtty.c_cc[VMIN] = vmin;
- sgtty.c_cc[VTIME] = vtime;
- ioctl ( tty, TCSETA, &sgtty );
- exit ( ret );
-}
-
-/*
- * Utility to strip off any leading path information from a filename
- *
- * Arguments:
- * path pathname to strip
- *
- * Returns:
- * fname striped filename
- *
- */
-static const char *
-basename(const char *path)
-{
- const char *fname;
-
- if ( ( fname = strrchr ( path, '/' ) ) != NULL )
- fname++;
- else
- fname = path;
-
- return ( fname );
-}
-
-/*
- * ASCII constants
- */
-#define SOH 001
-#define STX 002
-#define ETX 003
-#define EOT 004
-#define ENQ 005
-#define ACK 006
-#define LF 012
-#define CR 015
-#define NAK 025
-#define SYN 026
-#define CAN 030
-#define ESC 033
-
-#define NAKMAX 2
-#define ERRORMAX 10
-#define RETRYMAX 5
-
-#define CRCCHR 'C'
-#define CTRLZ 032
-
-#define BUFSIZE 128
-
-#define W 16
-#define B 8
-
-/*
- * crctab - CRC-16 constant array...
- * from Usenet contribution by Mark G. Mendel, Network Systems Corp.
- * (ihnp4!umn-cs!hyper!mark)
- */
-static unsigned short crctab[1<<B] = {
- 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
- 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
- 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
- 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
- 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
- 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
- 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
- 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
- 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
- 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
- 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
- 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
- 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
- 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
- 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
- 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
- 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
- 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
- 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
- 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
- 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
- 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
- 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
- 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
- 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
- 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
- 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
- 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
- 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
- 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
- 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
- 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
- };
-
-/*
- * Hacked up xmodem protocol. Transmits the file 'filename' down to the i960
- * using the xmodem protocol.
- *
- * Arguments:
- * filename name of file to transmit
- *
- * Returns:
- * 0 file transmitted
- * -1 unable to send file
- */
-static int
-xmitfile(const char *filename)
-{
- int fd;
- int numsect;
- int sectnum;
- struct stat stb;
- char c;
- char sendresp;
- int crcmode = 0;
- int attempts = 0;
- int errors;
- int sendfin;
- int extrachr;
- char buf[BUFSIZE + 6];
- char blockbuf[BUFSIZE + 6];
- int bufcntr;
- int bbufcntr;
- int bufsize = BUFSIZE;
- int checksum;
-
- /*
- * Try opening file
- */
- if ( ( fd = open ( filename, O_RDONLY ) ) < 0 )
- {
- return -1;
- }
- stat ( filename, &stb );
-
- /*
- * Determine number of 128 bytes sectors to transmit
- */
- numsect = ( stb.st_size / 128 ) + 1;
-
- if ( verbose )
- fprintf ( stderr, "Downloading %d sectors from %s\n",
- numsect, filename );
-
- /*
- * Send DO'wnload' command to i960
- */
- xmit_to_i960 ( "do\r\n", 4, 0 );
- /*
- * Wait for response from i960 indicating download in progress
- */
- while ( strncmp ( line, "Downloading", 11 ) != 0 )
- getline ( verbose );
-
-
- /*
- * Get startup character from i960
- */
- do {
- while ((c = getbyte()) != NAK && c != CRCCHR)
- if ( ++attempts > NAKMAX )
- error ( "Remote system not responding" );
-
- if ( c == CRCCHR )
- crcmode = 1;
-
- } while ( c != NAK && c != CRCCHR );
-
- sectnum = 1;
- attempts = errors = sendfin = extrachr = 0;
-
- /*
- * Loop over each sector to be sent
- */
- do {
- if ( extrachr >= 128 )
- {
- extrachr = 0;
- numsect++;
- }
-
- if ( sectnum > 0 )
- {
- /*
- * Read a sectors worth of data from the file into
- * an internal buffer.
- */
- for ( bufcntr = 0; bufcntr < bufsize; )
- {
- int n;
- /*
- * Check for EOF
- */
- if ( ( n = read ( fd, &c, 1 ) ) == 0 )
- {
- sendfin = 1;
- if ( !bufcntr )
- break;
- buf[bufcntr++] = CTRLZ;
- continue;
- }
- buf[bufcntr++] = c;
- }
- if ( !bufcntr )
- break;
- }
-
- /*
- * Fill in xmodem protocol values. Block size and sector number
- */
- bbufcntr = 0;
- blockbuf[bbufcntr++] = (bufsize == 1024) ? STX : SOH;
- blockbuf[bbufcntr++] = sectnum;
- blockbuf[bbufcntr++] = ~sectnum;
-
- checksum = 0;
-
- /*
- * Loop over the internal buffer computing the checksum of the
- * sector
- */
- for ( bufcntr = 0; bufcntr < bufsize; bufcntr++ )
- {
- blockbuf[bbufcntr++] = buf[bufcntr];
-
- if ( crcmode )
- checksum = (checksum<<B) ^ crctab[(checksum>>(W-B)) ^ buf[bufcntr]];
- else
- checksum = ((checksum + buf[bufcntr]) & 0xff);
-
- }
-
- /*
- * Place the checksum at the end of the transmit buffer
- */
- if ( crcmode )
- {
- checksum &= 0xffff;
- blockbuf[bbufcntr++] = ((checksum >> 8) & 0xff);
- blockbuf[bbufcntr++] = (checksum & 0xff);
- } else
- blockbuf[bbufcntr++] = checksum;
-
- attempts = 0;
-
- /*
- * Make several attempts to send the data to the i960
- */
- do
- {
- /*
- * Transmit the sector + protocol to the i960
- */
- xmit_to_i960 ( blockbuf, bbufcntr, 1 );
-
- /*
- * Inform user where we're at
- */
- if ( verbose )
- printf ( "Sector %3d %3dk\r",
- sectnum, (sectnum * bufsize) / 1024 );
-
- attempts++;
- /*
- * Get response from i960
- */
- sendresp = getbyte();
-
- /*
- * If i960 didn't like the sector
- */
- if ( sendresp != ACK )
- {
- errors++;
-
- /*
- * Are we supposed to cancel the transfer?
- */
- if ( ( sendresp & 0x7f ) == CAN )
- if (getbyte() == CAN)
- error ( "Send canceled at user's request" );
- }
-
- } while ( ( sendresp != ACK ) && ( attempts < RETRYMAX ) && ( errors < ERRORMAX ) );
-
- /*
- * Next sector
- */
- sectnum++;
-
- } while ( !sendfin && ( attempts < RETRYMAX ) && ( errors < ERRORMAX ) );
-
- /*
- * Did we expire all our allows attempts?
- */
- if ( attempts >= RETRYMAX )
- {
- xmit_byte ( CAN, 1 ), xmit_byte ( CAN, 1 ), xmit_byte ( CAN, 1 );
- error ( "Remote system not responding" );
- }
-
- /*
- * Check for too many transmission errors
- */
- if ( errors >= ERRORMAX )
- {
- xmit_byte ( CAN, 1 ), xmit_byte ( CAN, 1 ), xmit_byte ( CAN, 1 );
- error ( "Too many errors in transmission" );
- }
-
- attempts = 0;
-
- /*
- * Indicate the transfer is complete
- */
- xmit_byte ( EOT, 1 );
-
- /*
- * Wait until i960 acknowledges us
- */
- while ((c = getbyte()) != ACK && (++attempts < RETRYMAX))
- xmit_byte ( EOT, 1 );
-
- if ( attempts >= RETRYMAX )
- error ( "Remote system not responding on completion" );
-
- /*
- * After download, we'll see a few more command
- * prompts as the CP does its stuff. Ignore them.
- */
- while ( strncmp ( line, "=>", 2 ) != 0 )
- getline ( verbose );
-
- while ( strncmp ( line, "=>", 2 ) != 0 )
- getline ( verbose );
-
- while ( strncmp ( line, "=>", 2 ) != 0 )
- getline ( verbose );
-
- /*
- * Tell the i960 to start executing the downloaded code
- */
- xmit_to_i960 ( "go\r\n", 4, 0 );
-
- /*
- * Get the messages the CP will spit out
- * after the GO command.
- */
- getline ( verbose );
- getline ( verbose );
-
- close ( fd );
-
- return ( 0 );
-}
-
-
-static int
-loadmicrocode(u_char *ucode, int size, u_char *ram)
-{
- struct {
- uint32_t Id;
- uint32_t fver;
- uint32_t start;
- uint32_t entry;
- } binhdr;
-#ifdef sun
- union {
- uint32_t w;
- char c[4];
- } w1, w2;
- int n;
-#endif
- u_char *bufp;
- uint32_t *lp;
-
-
- /*
- * Check that we understand this header
- */
- memcpy(&binhdr, ucode, sizeof(binhdr));
- if ( strncmp ( (caddr_t)&binhdr.Id, "fore", 4 ) != 0 ) {
- fprintf ( stderr, "Unrecognized format in micorcode file." );
- return ( -1 );
- }
-
-#ifdef sun
- /*
- * We always swap the SunOS microcode file...
- */
- endian = 1;
-
- /*
- * We need to swap the header start/entry words...
- */
- w1.w = binhdr.start;
- for ( n = 0; n < sizeof(uint32_t); n++ )
- w2.c[3-n] = w1.c[n];
- binhdr.start = w2.w;
- w1.w = binhdr.entry;
- for ( n = 0; n < sizeof(uint32_t); n++ )
- w2.c[3-n] = w1.c[n];
- binhdr.entry = w2.w;
-#endif /* sun */
-
- /*
- * Set pointer to RAM load location
- */
- bufp = (ram + binhdr.start);
-
- /*
- * Load file
- */
- if ( endian ) {
- u_int i;
-
- lp = (uint32_t *)(void *)ucode;
- /* Swap buffer */
- for ( i = 0; i < size / sizeof(uint32_t); i++ )
-#ifndef sun
- lp[i] = CP_WRITE(lp[i]);
-#else
- {
- int j;
-
- w1.w = lp[i];
- for ( j = 0; j < 4; j++ )
- w2.c[3-j] = w1.c[j];
- lp[i] = w2.w;
- }
-#endif
- }
- bcopy ( (caddr_t)ucode, bufp, size );
-
- /*
- * With .bin extension, we need to specify start address on 'go'
- * command.
- */
- {
- char cmd[80];
-
- sprintf ( cmd, "go %x\r\n", binhdr.entry );
-
- xmit_to_i960 ( cmd, strlen ( cmd ), 0 );
-
- while ( strncmp ( line, cmd, strlen(cmd) - 3 ) != 0 )
- getline ( verbose );
-
- if ( verbose )
- printf("\n");
- }
- return ( 0 );
-}
-
-static int
-sendbinfile(const char *fname, u_char *ram)
-{
- struct {
- uint32_t Id;
- uint32_t fver;
- uint32_t start;
- uint32_t entry;
- } binhdr;
-#ifdef sun
- union {
- uint32_t w;
- char c[4];
- } w1, w2;
-#endif
- int fd;
- int n;
- int cnt = 0;
- u_char *bufp;
- uint32_t buffer[1024];
-
- /*
- * Try opening file
- */
- if ( ( fd = open ( fname, O_RDONLY ) ) < 0 )
- return ( -1 );
-
- /*
- * Read the .bin header from the file
- */
- if ( ( read ( fd, &binhdr, sizeof(binhdr) ) ) != sizeof(binhdr) )
- {
- close ( fd );
- return ( -1 );
- }
-
- /*
- * Check that we understand this header
- */
- if ( strncmp ( (caddr_t)&binhdr.Id, "fore", 4 ) != 0 ) {
- fprintf ( stderr, "Unrecognized format in micorcode file." );
- close ( fd );
- return ( -1 );
- }
-
-#ifdef sun
- /*
- * We always swap the SunOS microcode file...
- */
- endian = 1;
-
- /*
- * We need to swap the header start/entry words...
- */
- w1.w = binhdr.start;
- for ( n = 0; n < sizeof(uint32_t); n++ )
- w2.c[3-n] = w1.c[n];
- binhdr.start = w2.w;
- w1.w = binhdr.entry;
- for ( n = 0; n < sizeof(uint32_t); n++ )
- w2.c[3-n] = w1.c[n];
- binhdr.entry = w2.w;
-#endif /* sun */
-
- /*
- * Rewind the file
- */
- lseek ( fd, 0, 0 );
-
- /*
- * Set pointer to RAM load location
- */
- bufp = (ram + binhdr.start);
-
- /*
- * Load file
- */
- if ( endian ) {
- /*
- * Need to swap longs - copy file into temp buffer
- */
- while ( ( n = read ( fd, (char *)buffer, sizeof(buffer))) > 0 )
- {
- u_int i;
-
- /* Swap buffer */
- for (i = 0; i < sizeof(buffer) / sizeof(uint32_t); i++)
-#ifndef sun
- buffer[i] = CP_WRITE(buffer[i]);
-#else
- {
- int j;
-
- w1.w = buffer[i];
- for ( j = 0; j < 4; j++ )
- w2.c[3-j] = w1.c[j];
- buffer[i] = w2.w;
- }
-#endif
-
- /*
- * Copy swapped buffer into CP RAM
- */
- cnt++;
- bcopy ( (caddr_t)buffer, bufp, n );
- if ( verbose )
- printf ( "%d\r", cnt );
- bufp += n;
- }
- } else {
- while ( ( n = read ( fd, bufp, 128 ) ) > 0 )
- {
- cnt++;
- if ( verbose )
- printf ( "%d\r", cnt );
- bufp += n;
- }
- }
-
- /*
- * With .bin extension, we need to specify start address on 'go'
- * command.
- */
- {
- char cmd[80];
-
- sprintf ( cmd, "go %x\r\n", binhdr.entry );
-
- xmit_to_i960 ( cmd, strlen ( cmd ), 0 );
-
- while ( strncmp ( line, cmd, strlen(cmd) - 3 ) != 0 )
- getline ( verbose );
-
- if ( verbose )
- printf("\n");
- }
-
- close ( fd );
- return ( 0 );
-}
-
-
-/*
- * Program to download previously processed microcode to series-200 host adapter
- */
-int
-main(int argc, char *argv[])
-{
- int fd; /* mmap for Uart */
- u_char *ram; /* pointer to RAM */
- Mon960 *Mon; /* Uart */
- Aali *aap;
- int c, i, err;
- int binary = 0; /* Send binary file */
- caddr_t buf; /* Ioctl buffer */
- char bus_dev[80]; /* Bus device to mmap on */
- struct atminfreq req;
- struct air_cfg_rsp *air; /* Config info response structure */
- int buf_len; /* Size of ioctl buffer */
- const char *dev = "\0"; /* Device to download */
- char *dirname = NULL; /* Directory path to objd files */
- char *objfile = NULL; /* Command line object filename */
- u_char *ucode = NULL; /* Pointer to microcode */
- int ucode_size = 0; /* Length of microcode */
- char *sndfile = NULL; /* Object filename to download */
- char filename[64]; /* Constructed object filename */
- char base[64]; /* sba200/sba200e/pca200e basename */
- int ext = 0; /* 0 == bin 1 == objd */
- struct stat sbuf; /* Used to find if .bin or .objd */
- int pca_vers = 4;
-
- progname = basename(argv[0]);
- comm_mode = strcmp ( progname, "fore_comm" ) == 0;
-
- while ( ( c = getopt ( argc, argv, "3i:d:f:berv" ) ) != -1 )
- switch ( c ) {
- case '3':
- pca_vers = 3;
- break;
- case 'b':
- binary++;
- break;
- case 'd':
- dirname = (char *)strdup ( optarg );
- break;
- case 'e':
- endian++;
- break;
- case 'i':
- dev = (char *)strdup(optarg);
- break;
- case 'f':
- objfile = (char *)strdup ( optarg );
- break;
- case 'v':
- verbose++;
- break;
- case 'r':
- reset++;
- break;
- case '?':
- printf ( "usage: %s [-v] [-i intf] [-d dirname] [-f objfile]\n", argv[0] );
- exit ( 2 );
- }
-
- /*
- * Unbuffer stdout
- */
- setbuf ( stdout, NULL );
-
- if ( ( fd = socket ( AF_ATM, SOCK_DGRAM, 0 ) ) < 0 )
- {
- perror ( "Cannot create ATM socket" );
- exit ( 1 );
- }
- /*
- * Over allocate memory for returned data. This allows
- * space for IOCTL reply info as well as config info.
- */
- buf_len = 4 * sizeof(struct air_cfg_rsp);
- if ( ( buf = (caddr_t)malloc(buf_len) ) == NULL )
- {
- perror ( "Cannot allocate memory for reply" );
- exit ( 1 );
- }
- /*
- * Fill in request paramaters
- */
- req.air_opcode = AIOCS_INF_CFG;
- req.air_buf_addr = buf;
- req.air_buf_len = buf_len;
-
- /*
- * Copy interface name into ioctl request
- */
- strcpy(req.air_cfg_intf, dev);
-
- /*
- * Issue ioctl
- */
- if ( ( ioctl ( fd, AIOCINFO, (caddr_t)&req ) ) ) {
- perror ( "ioctl (AIOCSINFO)" );
- exit ( 1 );
- }
- /*
- * Reset buffer pointer
- */
- req.air_buf_addr = buf;
-
- /*
- * Close socket
- */
- close ( fd );
-
- /*
- * Loop through all attached adapters
- */
- for (; req.air_buf_len >= sizeof(struct air_cfg_rsp);
- buf += sizeof(struct air_cfg_rsp),
- req.air_buf_len -= sizeof(struct air_cfg_rsp)) {
-
- /*
- * Point to vendor info
- */
- air = (struct air_cfg_rsp *)(void *)buf;
-
- if (air->acp_vendapi == VENDAPI_FORE_1 && air->acp_ram != 0)
- {
- /*
- * Create /dev name
- */
-#ifdef sun
- sprintf ( bus_dev, DEV_NAME, air->acp_busslot );
-#else
- sprintf ( bus_dev, DEV_NAME );
-#endif
-
- /*
- * Setup signal handlers
- */
- signal ( SIGINT, SIG_IGN );
- signal ( SIGQUIT, SIG_IGN );
-
- /*
- * If comm_mode, setup terminal for single char I/O
- */
- if ( comm_mode ) {
- tty = open ( _PATH_TTY, O_RDWR );
- ioctl ( tty, TCGETA, &sgtty );
- sgtty.c_lflag &= ~( ICANON | ECHO );
- vmin = sgtty.c_cc[VMIN];
- vtime = sgtty.c_cc[VTIME];
- sgtty.c_cc[VMIN] = 0;
- sgtty.c_cc[VTIME] = 0;
- ioctl ( tty, TCSETA, &sgtty );
- }
-
- /*
- * Open bus for memory access
- */
- if ( ( fd = open ( bus_dev, O_RDWR ) ) < 0 )
- {
- perror ( "open bus_dev" );
- fprintf(stderr, "%s download failed (%s)\n",
- air->acp_intf, bus_dev);
- continue;
- }
-
- /*
- * Map in the RAM memory to get access to the Uart
- */
-#ifdef __FreeBSD__ /*XXX*/
- ram = (u_char *) mmap(0, PCA200E_MMAP_SIZE,
-#else
- ram = (u_char *) mmap(0, air->acp_ramsize,
-#endif
- PROT_READ | PROT_WRITE, MAP_SHARED | MAP_HASSEMAPHORE,
- fd, air->acp_ram);
- if (ram == (u_char *)-1) {
- perror ( "mmap ram" );
- fprintf(stderr, "%s download failed\n",
- air->acp_intf);
- (void) close(fd);
- continue;
- }
- Mon = (Mon960 *)(volatile void *)(ram + MON960_BASE);
- Uart = (Mon960 *)(volatile void *)&(Mon->mon_xmitmon);
-
- /*
- * Determine endianess
- */
- switch ( Mon->mon_bstat ) {
- case BOOT_COLDSTART:
- case BOOT_MONREADY:
- case BOOT_FAILTEST:
- case BOOT_RUNNING:
- break;
-
- default:
- switch (ntohl(Mon->mon_bstat)) {
- case BOOT_COLDSTART:
- case BOOT_MONREADY:
- case BOOT_FAILTEST:
- case BOOT_RUNNING:
- endian++;
- break;
-
- default:
- fprintf(stderr, "%s unknown status\n",
- air->acp_intf);
- (void) close(fd);
- continue;
- }
- break;
- }
-
-#ifdef __FreeBSD__
- if (reset) {
- u_int *hcr = (u_int *)(void *)(ram + PCA200E_HCR_OFFSET);
- PCA200E_HCR_INIT(*hcr, PCA200E_RESET_BD);
- delay(10000);
- PCA200E_HCR_CLR(*hcr, PCA200E_RESET_BD);
- delay(10000);
- }
-#endif
-
- if ( comm_mode ) {
- static struct timeval timeout = { 0, 0 };
- int esc_seen = 0;
-
- /*
- * We want to talk with the i960 monitor
- */
-
- /*
- * Loop forever accepting characters
- */
- for ( ; ; ) {
- fd_set fdr;
- int ns;
-
- /*
- * Check for data from the terminal
- */
- FD_ZERO ( &fdr );
- FD_SET ( fileno(stdin), &fdr );
-
- if ( ( ns = select ( FD_SETSIZE, &fdr, NULL, NULL,
- &timeout ) ) < 0 ) {
- perror ( "select" );
- finish( -1 );
- }
-
- if ( ns ) {
- char c1;
- int nr;
-
- nr = read ( fileno(stdin), &c1, 1 );
- c1 &= 0xff;
- if ( !esc_seen ) {
- if ( c1 == 27 )
- esc_seen++;
- else
- xmit_byte ( c1, 0 );
- } else {
- if ( c1 == 27 )
- finish( -1 );
- else {
- xmit_byte ( 27, 0 );
- esc_seen = 0;
- }
- xmit_byte ( c1, 0 );
- }
- }
-
- /*
- * Check for data from the i960
- */
- if ( CP_READ(Uart->mon_xmithost) & UART_VALID ) {
- c = getbyte();
- putchar ( c );
- }
- if ( strcmp ( line, "Mon960" ) == 0 )
- autobaud();
-
- }
- } else {
- /*
- * Make sure the driver is loaded and that the CP
- * is ready for commands
- */
- if ( CP_READ(Mon->mon_bstat) == BOOT_RUNNING )
- {
- fprintf ( stderr,
- "%s is up and running - no download allowed.\n",
- air->acp_intf );
- (void) close(fd);
- continue;
- }
-
- if ( CP_READ(Mon->mon_bstat) != BOOT_MONREADY )
- {
- fprintf ( stderr,
- "%s is not ready for downloading.\n",
- air->acp_intf );
- (void) close(fd);
- continue;
- }
-
- /*
- * Indicate who we're downloading
- */
- if ( verbose )
- printf ( "Downloading code for %s\n",
- air->acp_intf );
-
- /*
- * Look for the i960 monitor message.
- * We should see this after a board reset.
- */
- while ( strncmp ( line, "Mon960", 6 ) != 0 &&
- strncmp ( line, "=>", 2 ) != 0 )
- getline( verbose ); /* Verbose */
-
- /*
- * Autobaud fakery
- */
- if ( strncmp ( line, "Mon960", 6 ) == 0 ) {
- xmit_to_i960 ( "\r\n\r\n\r\n\r\n", 8, 0 );
- delay ( 10000 );
- }
-
- /*
- * Keep reading until we get a command prompt
- */
- while ( strncmp ( line, "=>", 2 ) != 0 )
- getline( verbose ); /* Verbose */
-
- /*
- * Choose the correct microcode file based on the
- * adapter type the card claims to be.
- */
- switch ( air->acp_device )
- {
- case DEV_FORE_SBA200:
- sprintf ( base, "sba200" );
- break;
-
- case DEV_FORE_SBA200E:
- sprintf ( base, "sba200e" );
- break;
-
- case DEV_FORE_PCA200E:
- sprintf ( base, "pca200e" );
- break;
-
- default:
- err = 1;
- fprintf(stderr, "Unknown adapter type: %d\n",
- air->acp_device );
- }
-
- sndfile = NULL;
-
- if ( objfile == NULL ) {
- switch ( air->acp_device ) {
- case DEV_FORE_SBA200:
- case DEV_FORE_SBA200E:
- sprintf ( filename, "%s.bin%d", base,
- air->acp_bustype );
- if ( stat ( filename, &sbuf ) == -1 ) {
- sprintf ( filename, "%s/%s.bin%d",
- dirname, base,
- air->acp_bustype );
- if ( stat ( filename, &sbuf ) == -1 ) {
- ext = 1;
- sprintf ( filename, "%s.objd%d",
- base, air->acp_bustype );
- if ( stat(filename, &sbuf) == -1 ) {
- sprintf ( filename,
- "%s/%s.objd%d", dirname,
- base,
- air->acp_bustype );
- if ( stat ( filename, &sbuf ) != -1 )
- sndfile = filename;
- } else
- sndfile = filename;
- } else
- sndfile = filename;
- } else
- sndfile = filename;
- break;
- case DEV_FORE_PCA200E:
- /* Use compiled in microcode */
- if (pca_vers == 3) {
- ucode = pca200e_microcode_3;
- ucode_size = pca200e_microcode_size_3;
- } else {
- ucode = pca200e_microcode_4;
- ucode_size = pca200e_microcode_size_4;
- }
- break;
- default:
- break;
- }
- } else
- sndfile = objfile;
-
- if ( ext && !binary )
- err = xmitfile ( sndfile );
- else if (sndfile != NULL)
- err = sendbinfile ( sndfile, ram );
- else
- err = loadmicrocode( ucode, ucode_size, ram );
-
- if ( err ) {
- fprintf(stderr, "%s download failed\n",
- air->acp_intf);
- (void) close(fd);
- continue;
- }
-
- /*
- * Download completed - wait around a while for
- * the driver to initialize the adapter
- */
- aap = (Aali *)(void *)(ram + CP_READ(Mon->mon_appl));
- for (i = 0; i < MAX_CHECK; i++, sleep(1)) {
- uint32_t hb1, hb2, hb3;
-
- hb3 = CP_READ(Mon->mon_bstat);
- if (hb3 != BOOT_RUNNING) {
- if (verbose)
- printf("bstat %x\n", hb3);
- continue;
- }
-
- hb1 = CP_READ(aap->aali_heartbeat);
- delay(1);
- hb2 = CP_READ(aap->aali_heartbeat);
- if (verbose)
- printf("hb %x %x\n", hb1, hb2);
- if (hb1 < hb2)
- break;
- }
- }
-
- close ( fd );
- }
- }
-
- /*
- * Exit
- */
- exit (0);
-}
diff --git a/sbin/atm/fore_dnld/pca200e.c b/sbin/atm/fore_dnld/pca200e.c
deleted file mode 100644
index c208a4d..0000000
--- a/sbin/atm/fore_dnld/pca200e.c
+++ /dev/null
@@ -1,3796 +0,0 @@
-/*
- * (Copyright Notice)
- *
- * Copyright (c) 1995-2000 FORE Systems, Inc., as an unpublished work.
- *
- * This notice does not imply unrestricted or public access to these
- * materials which are a trade secret of FORE Systems, Inc. or its
- * subsidiaries or affiliates (together referred to as "FORE"), and
- * which may not be reproduced, used, sold or transferred to any third
- * party without FORE's prior written consent. All rights reserved.
- *
- * U.S. Government Restricted Rights.
- * If you are licensing the Software on behalf of the U.S. Government
- * ("Government"), the following provisions apply to you. If the
- * software is supplied to the Department of Defense ("DoD"), it is
- * classified as "Commercial Computer Software" under paragraph
- * 252.227-7014 of the DoD Supplement to the Federal Acquisition
- * Regulations ("DFARS") (or any successor regulations) and the
- * Government is acquiring only the license rights granted herein (the
- * license rights customarily provided to non-Government users). If
- * the Software is supplied to any unit or agency of the Government
- * other than the DoD, it is classified as "Restricted Computer
- * Software" and the Government's rights in the Software are defined
- * in paragraph 52.227-19 of the Federal Acquisition Regulations
- * ("FAR") (or any successor regulations) or, in the cases of NASA,
- * in paragraph 18.52.227-86 of the NASA Supplement to the FAR (or
- * any successor regulations).
- *
- * FORE Systems is a registered trademark, and ForeRunner, ForeRunnerLE,
- * and ForeThought are trademarks of FORE Systems, Inc. All other
- * brands or product names are trademarks or registered trademarks of
- * their respective holders.
- *
- * (End Copyright Notice)
- *
- * This are binary copies of the PCA200E firmware versions 3.0.1 and
- * 4.1.12
- *
- * $FreeBSD$
- */
-
-#include <sys/types.h>
-
-u_char pca200e_microcode_3[] = {
-102,111,114,101,0,1,0,0,0,82,0,0,208,92,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,77,0,0,0,4,0,0,0,0,0,0,0,0,0,0,3,
-0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,96,244,0,0,0,0,0,0,1,255,128,255,
-0,0,0,0,1,255,255,255,113,0,0,0,1,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,0,
-0,0,0,0,0,1,231,167,167,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,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,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,1,223,111,223,0,0,0,0,1,
-127,0,0,0,0,0,0,1,255,0,0,0,0,0,0,1,255,0,0,0,0,0,0,1,127,65,127,0,0,0,
-0,1,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,251,0,251,0,0,0,0,1,
-255,240,240,0,0,0,0,1,255,0,0,0,0,0,0,1,255,0,0,0,0,0,0,1,15,0,0,0,0,0,
-0,1,255,0,0,0,0,0,0,1,255,0,0,0,0,0,0,1,15,0,0,0,0,0,0,1,127,1,127,0,0,
-0,0,1,1,1,1,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,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,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,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,0,0,0,0,1,173,0,129,0,0,0,0,1,175,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,1,255,175,255,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,1,255,0,0,0,0,0,0,1,255,255,0,0,0,0,0,1,255,0,0,0,0,0,0,1,255,0,
-0,0,0,0,0,1,255,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,
-0,0,0,0,0,0,0,0,0,0,1,135,3,135,0,0,0,0,1,63,62,63,0,0,0,0,1,127,127,127,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,255,255,255,0,0,0,0,1,255,255,
-255,144,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,255,255,255,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,191,63,63,4,0,0,0,1,255,224,224,0,0,0,0,1,255,255,
-255,0,0,0,0,1,255,255,255,0,0,0,0,1,255,0,0,0,0,0,0,1,255,255,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,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,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,0,1,255,159,159,4,0,0,0,1,255,255,255,0,0,0,0,1,255,255,255,
-106,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,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,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,1,5,31,5,0,0,0,0,0,0,0,0,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,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,0,0,0,130,0,1,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,0,130,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,144,86,0,0,176,
-86,0,0,208,86,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,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,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,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,0,
-0,0,0,0,160,0,0,0,0,0,0,0,200,0,0,0,0,0,0,0,250,0,0,0,0,0,0,64,156,0,0,
-0,0,0,0,80,195,0,0,0,0,0,0,36,244,0,0,0,0,0,128,150,152,0,0,0,0,0,32,188,
-190,0,0,0,0,0,40,107,238,0,0,0,0,0,249,2,149,0,0,0,0,64,183,67,186,0,0,
-0,0,16,165,212,232,0,0,0,0,42,231,132,145,0,0,0,128,244,32,230,181,0,0,
-0,160,49,169,95,227,0,0,0,0,4,0,0,0,7,0,0,0,10,0,0,0,14,0,0,0,17,0,0,0,
-20,0,0,0,24,0,0,0,27,0,0,0,30,0,0,0,34,0,0,0,37,0,0,0,40,0,0,0,44,0,0,0,
-47,0,0,0,50,0,0,0,255,255,255,255,255,255,255,255,0,0,0,4,191,201,27,142,
-157,181,112,43,168,173,197,157,214,149,67,14,5,141,41,175,213,166,207,255,
-73,31,120,194,251,247,218,135,143,122,231,215,162,20,155,197,22,171,179,
-239,158,50,35,153,192,173,15,133,223,140,233,128,201,71,186,147,231,166,
-211,168,197,185,2,164,170,23,230,127,43,161,22,182,147,191,155,133,145,
-162,40,202,106,85,39,57,141,247,112,224,69,97,130,55,53,12,46,249,47,201,
-60,227,255,150,82,138,101,23,191,214,243,166,145,153,141,222,249,157,251,
-235,126,170,130,188,157,167,74,209,73,189,140,47,106,92,25,252,38,210,253,
-131,124,36,32,223,80,233,0,0,0,0,54,0,0,0,107,0,0,0,160,0,0,0,213,0,0,0,
-10,1,0,0,63,1,0,0,117,1,0,0,170,1,0,0,223,1,0,0,20,2,0,0,73,2,0,0,126,2,
-0,0,179,2,0,0,233,2,0,0,30,3,0,0,83,3,0,0,136,3,0,0,189,3,0,0,242,3,0,0,
-255,255,255,255,255,255,255,255,204,204,204,204,204,204,204,204,10,215,
-163,112,61,10,215,163,59,223,79,141,151,110,18,131,43,101,25,226,88,23,
-183,209,35,132,71,27,71,172,197,167,181,105,108,175,5,189,55,134,188,66,
-122,229,213,148,191,214,252,206,97,132,17,119,204,171,151,165,180,54,65,
-95,112,137,190,213,237,189,206,254,230,219,254,170,36,203,11,255,235,175,
-203,136,80,111,9,204,188,140,19,14,180,75,66,19,46,225,15,216,92,9,53,220,
-36,180,217,172,176,58,247,124,29,144,0,0,0,0,253,255,255,255,250,255,255,
-255,247,255,255,255,243,255,255,255,240,255,255,255,237,255,255,255,233,
-255,255,255,230,255,255,255,227,255,255,255,223,255,255,255,220,255,255,
-255,217,255,255,255,213,255,255,255,210,255,255,255,207,255,255,255,255,
-255,255,255,255,255,255,255,91,225,77,196,190,148,149,230,186,148,57,69,
-173,30,177,207,89,193,126,177,83,124,18,187,165,233,57,165,39,234,127,168,
-165,25,9,107,186,96,197,151,155,83,117,253,247,2,180,136,125,211,101,240,
-188,53,67,246,160,228,188,100,124,70,208,221,200,130,83,124,110,186,202,
-199,147,160,115,219,147,224,244,179,47,0,203,56,219,39,23,162,6,204,35,
-84,119,131,255,145,96,188,164,61,169,222,128,131,189,78,49,74,236,60,229,
-236,214,225,50,207,205,95,96,213,57,25,122,99,37,67,49,192,102,59,228,94,
-171,142,28,173,119,197,106,131,98,206,236,155,37,73,11,186,217,220,113,
-140,0,0,0,0,203,255,255,255,150,255,255,255,97,255,255,255,44,255,255,255,
-247,254,255,255,194,254,255,255,140,254,255,255,87,254,255,255,34,254,255,
-255,237,253,255,255,184,253,255,255,131,253,255,255,78,253,255,255,24,253,
-255,255,227,252,255,255,174,252,255,255,121,252,255,255,68,252,255,255,
-15,252,255,255,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,
-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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,10,0,0,
-0,0,0,0,0,100,0,0,0,0,0,0,0,232,3,0,0,0,0,0,0,16,39,0,0,0,0,0,0,160,134,
-1,0,0,0,0,0,64,66,15,0,0,0,0,0,128,150,152,0,0,0,0,0,0,225,245,5,0,0,0,
-0,0,202,154,59,0,0,0,0,0,228,11,84,2,0,0,0,0,232,118,72,23,0,0,0,0,16,165,
-212,232,0,0,0,0,160,114,78,24,9,0,0,0,64,122,16,243,90,0,0,0,128,198,164,
-126,141,3,0,0,0,193,111,242,134,35,0,0,0,138,93,120,69,99,1,0,0,100,167,
-179,182,224,13,0,0,232,137,4,35,199,138,1,0,0,0,10,0,0,0,100,0,0,0,232,
-3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,202,
-154,59,0,0,0,0,0,0,0,0,0,48,128,140,112,218,3,0,12,192,135,50,16,22,8,92,
-4,0,0,9,128,62,0,102,0,0,0,140,0,30,240,92,0,48,128,140,32,242,0,0,0,48,
-136,140,112,202,3,0,0,16,244,146,4,8,132,89,248,95,132,52,0,48,128,140,
-0,16,0,59,204,129,0,9,252,148,0,9,20,128,0,9,112,98,0,9,140,119,0,9,0,48,
-48,144,32,242,0,0,40,160,1,50,16,22,32,93,0,20,128,140,0,0,0,0,0,48,136,
-140,64,93,0,0,17,1,132,89,16,128,49,89,0,144,1,134,4,22,128,93,72,0,0,9,
-228,97,0,8,84,65,88,73,45,49,48,48,0,0,0,0,0,0,0,0,84,65,88,73,45,49,52,
-48,0,0,0,0,0,0,0,0,83,79,78,69,84,95,79,67,51,0,0,0,0,0,0,0,85,78,75,78,
-79,87,78,0,0,0,0,0,0,0,0,0,32,96,8,140,188,46,0,9,104,43,0,9,0,48,160,144,
-68,20,0,80,63,0,40,140,64,224,47,130,8,222,40,89,148,64,33,88,65,224,247,
-130,4,22,128,92,4,42,0,9,136,25,40,88,78,64,33,58,18,64,33,49,30,32,1,58,
-16,1,0,8,0,0,0,0,137,25,40,88,102,64,33,58,0,1,0,8,0,0,0,0,0,48,160,144,
-84,82,0,0,13,30,40,92,64,224,135,140,0,48,40,130,80,243,0,0,0,48,136,140,
-96,93,0,0,5,30,40,92,40,0,0,8,0,48,160,144,84,82,0,0,9,30,40,92,64,224,
-135,140,0,48,40,130,80,243,0,0,0,48,136,140,112,93,0,0,4,30,40,92,176,32,
-45,146,16,106,0,11,180,0,0,8,0,48,160,136,2,4,0,136,8,30,40,92,0,48,40,
-130,80,243,0,0,148,208,169,88,26,96,13,55,0,48,160,144,84,82,0,0,6,30,40,
-92,92,0,0,8,0,0,0,0,149,16,161,88,46,32,21,48,26,96,5,48,0,48,160,144,84,
-82,0,0,22,30,40,92,60,0,0,8,0,0,0,0,0,48,160,144,84,82,0,0,31,216,41,89,
-40,0,0,8,26,96,5,48,0,48,160,144,84,82,0,0,31,216,45,89,20,0,0,8,0,0,0,
-0,0,48,160,144,84,82,0,0,70,0,40,140,176,32,45,146,64,224,135,140,0,48,
-136,140,128,93,0,0,116,105,0,11,24,0,0,8,0,0,0,0,64,224,135,140,0,48,136,
-140,144,93,0,0,92,105,0,11,32,44,0,9,44,50,0,9,168,39,0,9,108,41,0,11,137,
-25,40,88,54,64,33,61,0,30,128,92,80,224,143,140,136,89,0,11,38,32,4,58,
-80,224,167,144,0,48,168,144,84,82,0,0,127,0,40,140,148,64,161,88,180,96,
-165,146,24,0,0,8,0,0,0,0,0,48,160,144,84,82,0,0,1,25,40,89,180,32,45,146,
-0,48,40,140,80,242,0,0,0,48,40,146,48,242,0,0,152,42,0,9,0,48,48,140,255,
-255,0,0,31,88,62,89,0,48,64,140,96,0,0,32,0,48,72,140,112,243,0,0,0,48,
-80,140,128,243,0,0,0,48,88,140,144,243,0,0,0,48,96,140,160,243,0,0,0,48,
-104,140,176,243,0,0,0,48,112,140,192,243,0,0,0,48,120,140,208,243,0,0,0,
-48,24,140,224,243,0,0,0,48,168,144,64,244,0,0,0,80,165,144,20,80,160,89,
-0,80,165,146,0,48,160,144,48,242,0,0,0,16,133,144,0,13,0,9,0,48,160,144,
-48,242,0,0,0,48,168,144,32,20,0,80,4,32,165,144,149,48,0,90,0,48,160,146,
-48,242,0,0,42,0,0,21,0,48,160,144,36,20,0,80,30,32,5,61,0,48,160,144,40,
-20,0,80,18,32,5,61,0,48,160,144,44,20,0,80,8,32,5,58,148,56,0,9,0,48,128,
-144,16,82,0,0,18,32,4,58,36,13,0,9,0,48,240,146,16,82,0,0,0,48,136,144,
-128,180,3,0,0,80,164,144,102,33,5,58,0,80,132,144,0,80,140,144,0,48,144,
-144,52,242,0,0,31,29,40,88,144,208,131,88,145,64,137,88,220,28,0,9,0,48,
-168,144,52,242,0,0,4,96,165,144,24,222,43,89,6,96,141,128,148,128,145,88,
-148,64,161,88,24,12,165,89,74,32,37,58,14,32,37,60,18,32,5,58,140,0,0,8,
-98,32,45,58,132,0,0,8,0,48,176,144,52,242,0,0,0,30,152,92,0,144,41,140,
-8,160,165,144,0,144,133,144,22,16,180,89,148,64,169,88,16,12,165,89,28,
-78,0,9,88,0,0,8,0,0,0,0,0,48,176,144,52,242,0,0,0,30,152,92,8,160,165,144,
-0,144,133,144,22,16,180,89,148,128,169,88,16,12,165,89,192,79,0,9,44,0,
-0,8,0,48,176,144,52,242,0,0,0,30,152,92,0,144,41,140,8,160,165,144,0,144,
-133,144,22,16,180,89,148,64,169,88,16,12,165,89,196,72,0,9,0,48,160,144,
-128,180,3,0,4,32,181,144,0,16,245,146,0,48,168,144,132,180,3,0,20,16,162,
-89,0,48,160,146,128,180,3,0,22,64,165,54,0,48,160,144,136,180,3,0,0,48,
-160,146,128,180,3,0,0,48,160,144,52,242,0,0,0,48,176,146,56,0,0,32,2,30,
-40,92,0,48,40,146,96,0,0,48,4,32,165,144,28,12,165,89,46,32,5,58,0,48,168,
-144,40,82,0,0,255,0,40,140,21,80,168,89,149,64,161,88,136,9,165,88,0,48,
-168,146,40,82,0,0,0,48,160,146,4,0,0,32,0,48,160,144,56,242,0,0,0,16,165,
-144,127,0,40,140,148,64,161,88,246,61,5,58,2,9,165,89,102,34,61,52,20,57,
-160,144,232,97,0,0,0,16,5,132,0,0,0,0,8,98,0,0,108,100,0,0,32,98,0,0,108,
-100,0,0,56,98,0,0,144,99,0,0,176,99,0,0,216,99,0,0,0,48,128,144,56,242,
-0,0,80,47,0,9,16,22,232,92,88,2,0,8,0,0,0,0,0,48,128,144,56,242,0,0,168,
-49,0,9,16,22,232,92,64,2,0,8,0,0,0,0,0,48,160,144,68,20,0,80,2,30,232,92,
-30,32,157,48,147,9,165,88,0,48,240,146,52,244,0,0,0,48,160,146,68,20,0,
-80,16,0,0,8,1,30,40,92,0,48,40,146,52,244,0,0,0,48,160,144,56,242,0,0,4,
-32,165,144,0,48,184,140,96,243,0,0,0,48,160,146,84,0,0,32,0,48,56,146,96,
-0,0,32,0,208,133,176,0,16,130,178,0,80,130,176,0,16,130,178,0,144,130,176,
-0,16,130,178,0,208,130,176,0,16,130,178,0,16,131,176,0,16,130,178,0,80,
-131,176,0,16,130,178,0,144,131,176,0,16,130,178,0,208,131,176,0,16,130,
-178,0,208,128,176,0,16,130,178,0,48,160,140,240,243,0,0,0,16,133,176,0,
-16,130,178,0,48,160,140,0,244,0,0,0,16,133,176,0,16,130,178,0,48,160,140,
-16,244,0,0,0,16,133,176,0,48,184,140,32,244,0,0,0,16,130,178,0,208,165,
-144,0,48,160,146,96,0,0,32,23,16,169,89,0,80,165,144,0,48,160,146,96,0,
-0,32,23,16,170,89,0,80,165,144,23,16,171,89,0,48,160,146,96,0,0,32,0,80,
-165,144,0,48,160,146,96,0,0,32,23,16,172,89,0,80,165,144,0,48,160,146,96,
-0,0,32,23,16,173,89,0,80,165,144,0,48,160,146,96,0,0,32,23,16,174,89,0,
-80,165,144,23,16,175,89,0,48,160,146,96,0,0,32,0,80,165,144,0,48,160,146,
-96,0,0,32,228,0,0,8,0,48,128,144,56,242,0,0,80,89,0,11,2,30,232,92,210,
-32,4,61,10,30,232,92,200,0,0,8,0,0,0,0,128,90,0,9,0,48,160,144,56,242,0,
-0,4,32,141,144,16,30,128,92,0,48,144,140,240,193,3,0,228,25,0,9,2,30,232,
-92,156,0,0,8,0,48,160,144,56,242,0,0,4,32,165,144,0,48,160,146,64,0,0,32,
-0,48,160,144,0,225,1,240,0,48,160,146,96,0,0,48,0,48,160,144,4,225,1,240,
-0,48,160,146,96,0,0,48,0,48,160,144,100,224,1,240,0,48,160,146,96,0,0,48,
-0,48,160,144,104,224,1,240,2,30,232,92,0,48,160,146,96,0,0,48,64,0,0,8,
-0,0,0,0,0,48,160,144,56,242,0,0,0,16,165,144,0,48,40,140,94,208,94,208,
-34,64,161,61,0,48,160,144,64,244,0,0,0,30,128,92,0,48,40,140,13,0,173,222,
-0,16,45,146,216,90,0,9,8,30,232,92,0,48,176,144,56,242,0,0,0,144,165,144,
-118,32,61,48,16,160,189,144,0,144,245,146,0,48,168,144,60,242,0,0,32,160,
-165,140,0,48,160,146,56,242,0,0,22,64,165,54,0,48,160,144,64,242,0,0,0,
-48,160,146,56,242,0,0,0,48,168,144,40,82,0,0,0,48,184,146,56,0,0,32,255,
-0,40,140,0,48,232,146,96,0,0,48,21,80,168,89,149,64,161,88,136,9,165,88,
-0,48,168,146,40,82,0,0,0,48,160,146,4,0,0,32,80,0,0,8,0,0,0,0,0,48,160,
-144,56,242,0,0,16,32,181,144,0,16,245,146,0,48,168,144,60,242,0,0,32,32,
-165,140,0,48,160,146,56,242,0,0,22,64,165,54,0,48,160,144,64,242,0,0,0,
-48,160,146,56,242,0,0,0,48,176,146,56,0,0,32,0,48,232,146,96,0,0,48,0,48,
-160,144,56,242,0,0,0,16,165,144,127,0,40,140,148,64,161,88,132,60,5,61,
-112,250,255,8,0,0,0,0,0,0,0,0,0,0,0,0,16,22,32,93,44,27,0,9,132,208,163,
-88,255,0,144,140,148,128,164,88,62,32,5,61,133,48,0,90,0,48,232,140,0,0,
-0,48,42,0,0,22,0,80,167,176,0,16,161,178,0,80,167,176,4,73,41,89,16,32,
-33,140,133,48,0,90,0,16,161,178,4,16,36,89,224,255,255,17,0,0,0,10,0,48,
-160,140,0,0,0,48,0,16,165,152,4,73,41,89,133,48,0,90,0,16,161,154,4,16,
-34,89,0,48,152,140,0,0,0,48,42,0,0,22,0,208,164,176,0,16,161,178,0,208,
-164,176,4,73,41,89,16,32,33,140,133,48,0,90,0,16,161,178,4,16,36,89,224,
-255,255,17,0,48,160,140,0,0,0,48,0,16,165,176,0,16,161,178,0,48,160,140,
-0,0,0,48,0,16,165,152,4,16,36,89,0,16,161,154,0,0,0,10,0,0,0,0,0,0,0,0,
-0,0,0,0,28,32,180,144,12,32,172,144,0,48,160,144,40,82,0,0,0,144,181,144,
-20,80,160,89,0,48,160,146,40,82,0,0,145,48,0,90,255,0,184,140,149,56,168,
-140,0,0,0,0,0,48,176,146,48,0,0,32,0,48,168,146,96,0,0,32,148,192,165,88,
-0,48,160,146,4,0,0,32,10,0,0,18,224,6,0,8,0,48,128,146,16,82,0,0,0,0,0,
-10,0,48,160,144,16,82,0,0,16,22,40,92,16,32,36,144,22,32,5,58,20,22,128,
-92,184,6,0,9,0,48,240,146,16,82,0,0,12,96,161,144,0,48,168,144,112,180,
-3,0,20,1,161,89,14,64,165,52,1,30,128,92,0,0,0,10,0,48,160,144,112,242,
-0,0,154,32,5,58,0,48,128,176,112,242,0,0,0,48,48,152,136,242,0,0,1,9,164,
-89,0,16,133,140,0,48,160,146,112,242,0,0,148,160,4,90,148,157,185,140,6,
-1,0,19,0,208,161,144,254,32,5,58,0,208,177,144,0,48,168,144,124,242,0,0,
-0,48,160,144,40,82,0,0,0,48,176,146,48,0,0,32,0,48,232,140,112,242,0,0,
-0,48,232,146,16,82,0,0,255,0,232,140,149,56,168,140,0,0,0,0,20,80,160,89,
-0,48,168,146,96,0,0,32,148,64,183,88,0,48,160,146,40,82,0,0,0,48,176,146,
-4,0,0,32,160,0,0,8,0,0,0,0,0,48,160,144,32,244,0,0,0,48,176,144,140,242,
-0,0,20,80,160,89,0,48,160,146,32,244,0,0,0,144,165,144,146,32,5,58,0,144,
-181,144,0,48,168,144,40,82,0,0,0,48,160,144,124,242,0,0,0,48,176,146,48,
-0,0,32,148,56,160,140,0,0,0,0,0,48,160,146,96,0,0,32,21,80,168,89,255,0,
-232,140,0,48,168,146,40,82,0,0,149,64,175,88,0,48,128,140,112,242,0,0,0,
-48,168,146,4,0,0,32,124,5,0,9,0,48,160,144,112,242,0,0,0,48,168,144,136,
-242,0,0,1,9,165,89,0,48,160,146,112,242,0,0,148,93,189,140,0,208,165,144,
-0,16,161,146,4,16,34,89,16,96,33,146,4,224,133,144,0,0,0,10,168,254,255,
-8,0,0,0,0,0,0,0,0,0,0,0,0,0,48,160,144,16,82,0,0,16,22,40,92,16,32,36,144,
-22,32,5,58,20,22,128,92,24,5,0,9,0,48,240,146,16,82,0,0,12,96,161,144,0,
-48,168,144,112,180,3,0,20,1,161,89,14,64,165,52,1,30,128,92,0,0,0,10,0,
-48,160,144,160,242,0,0,146,32,5,58,0,48,128,176,160,242,0,0,0,48,48,152,
-184,242,0,0,1,9,164,89,0,16,133,140,0,48,160,146,160,242,0,0,148,160,4,
-90,148,157,185,140,250,0,0,19,0,208,161,144,242,32,5,58,0,208,177,144,0,
-48,168,144,172,242,0,0,0,48,160,144,40,82,0,0,0,48,176,146,48,0,0,32,0,
-48,232,140,160,242,0,0,0,48,232,146,16,82,0,0,255,0,232,140,1,78,173,89,
-1,32,165,140,0,48,168,146,96,0,0,32,148,64,183,88,0,48,160,146,40,82,0,
-0,0,48,176,146,4,0,0,32,152,0,0,8,0,48,160,144,36,244,0,0,0,48,176,144,
-188,242,0,0,20,80,160,89,0,48,160,146,36,244,0,0,0,144,165,144,146,32,5,
-58,0,144,181,144,0,48,168,144,40,82,0,0,0,48,160,144,172,242,0,0,0,48,176,
-146,48,0,0,32,1,14,165,89,0,48,160,146,96,0,0,32,21,80,168,89,255,0,232,
-140,0,48,168,146,40,82,0,0,149,64,175,88,0,48,128,140,160,242,0,0,0,48,
-168,146,4,0,0,32,232,3,0,9,0,48,160,144,160,242,0,0,0,48,168,144,184,242,
-0,0,1,9,165,89,0,48,160,146,160,242,0,0,148,93,189,140,0,208,165,144,0,
-16,161,146,4,16,34,89,16,96,33,146,4,224,133,144,0,0,0,10,0,0,0,0,176,254,
-255,8,0,0,0,0,0,48,160,144,16,82,0,0,16,22,40,92,16,32,36,144,22,32,5,58,
-20,22,128,92,136,3,0,9,0,48,240,146,16,82,0,0,12,96,161,144,0,48,168,144,
-112,180,3,0,20,1,161,89,14,64,165,52,1,30,128,92,0,0,0,10,0,48,160,144,
-208,242,0,0,146,32,5,58,0,48,128,176,208,242,0,0,0,48,48,152,232,242,0,
-0,1,9,164,89,0,16,133,140,0,48,160,146,208,242,0,0,148,160,4,90,148,157,
-185,140,250,0,0,19,0,208,161,144,242,32,5,58,0,208,177,144,0,48,168,144,
-220,242,0,0,0,48,160,144,40,82,0,0,0,48,176,146,48,0,0,32,0,48,232,140,
-208,242,0,0,0,48,232,146,16,82,0,0,255,0,232,140,1,78,173,89,1,32,165,140,
-0,48,168,146,96,0,0,32,148,64,183,88,0,48,160,146,40,82,0,0,0,48,176,146,
-4,0,0,32,152,0,0,8,0,48,160,144,40,244,0,0,0,48,176,144,236,242,0,0,20,
-80,160,89,0,48,160,146,40,244,0,0,0,144,165,144,146,32,5,58,0,144,181,144,
-0,48,168,144,40,82,0,0,0,48,160,144,220,242,0,0,0,48,176,146,48,0,0,32,
-1,14,165,89,0,48,160,146,96,0,0,32,21,80,168,89,255,0,232,140,0,48,168,
-146,40,82,0,0,149,64,175,88,0,48,128,140,208,242,0,0,0,48,168,146,4,0,0,
-32,88,2,0,9,0,48,160,144,208,242,0,0,0,48,168,144,232,242,0,0,1,9,165,89,
-0,48,160,146,208,242,0,0,148,93,189,140,0,208,165,144,0,16,161,146,4,16,
-34,89,16,96,33,146,4,224,133,144,0,0,0,10,0,0,0,0,176,254,255,8,0,0,0,0,
-0,48,160,144,16,82,0,0,16,22,40,92,16,32,36,144,22,32,5,58,20,22,128,92,
-248,1,0,9,0,48,240,146,16,82,0,0,12,96,161,144,0,48,168,144,112,180,3,0,
-20,1,161,89,14,64,165,52,1,30,128,92,0,0,0,10,0,48,160,144,0,243,0,0,146,
-32,5,58,0,48,128,176,0,243,0,0,0,48,48,152,24,243,0,0,1,9,164,89,0,16,133,
-140,0,48,160,146,0,243,0,0,148,160,4,90,148,157,185,140,250,0,0,19,0,208,
-161,144,242,32,5,58,0,208,177,144,0,48,168,144,12,243,0,0,0,48,160,144,
-40,82,0,0,0,48,176,146,48,0,0,32,0,48,232,140,0,243,0,0,0,48,232,146,16,
-82,0,0,255,0,232,140,1,78,173,89,1,32,165,140,0,48,168,146,96,0,0,32,148,
-64,183,88,0,48,160,146,40,82,0,0,0,48,176,146,4,0,0,32,152,0,0,8,0,48,160,
-144,44,244,0,0,0,48,176,144,28,243,0,0,20,80,160,89,0,48,160,146,44,244,
-0,0,0,144,165,144,146,32,5,58,0,144,181,144,0,48,168,144,40,82,0,0,0,48,
-160,144,12,243,0,0,0,48,176,146,48,0,0,32,1,14,165,89,0,48,160,146,96,0,
-0,32,21,80,168,89,255,0,232,140,0,48,168,146,40,82,0,0,149,64,175,88,0,
-48,128,140,0,243,0,0,0,48,168,146,4,0,0,32,200,0,0,9,0,48,160,144,0,243,
-0,0,0,48,168,144,24,243,0,0,1,9,165,89,0,48,160,146,0,243,0,0,148,93,189,
-140,0,208,165,144,0,16,161,146,4,16,34,89,16,96,33,146,4,224,133,144,0,
-0,0,10,0,0,0,0,176,254,255,8,0,0,0,0,16,22,32,92,0,48,128,144,16,82,0,0,
-18,32,4,58,112,0,0,9,0,48,240,146,16,82,0,0,28,32,177,144,0,144,165,144,
-86,32,5,58,0,16,161,152,78,64,165,57,0,144,181,144,12,32,169,144,0,48,160,
-144,40,82,0,0,0,48,32,146,16,82,0,0,0,48,176,146,48,0,0,32,255,0,184,140,
-1,78,173,89,1,32,165,140,0,48,168,146,96,0,0,32,148,192,181,88,0,48,160,
-146,40,82,0,0,0,48,176,146,4,0,0,32,0,0,0,10,0,0,0,0,0,16,68,176,24,32,
-164,144,16,22,40,92,136,29,37,140,32,19,0,9,255,0,136,140,132,208,163,88,
-148,64,164,88,148,48,0,90,0,208,130,140,66,0,0,21,139,48,0,90,0,48,152,
-140,0,0,0,48,162,0,0,22,0,208,164,176,0,16,161,178,0,208,164,176,4,9,132,
-89,16,32,33,140,144,48,0,90,0,16,161,178,4,16,36,89,224,255,255,17,120,
-0,0,8,0,0,0,0,0,48,160,140,0,0,0,48,0,16,165,152,4,201,130,89,144,48,0,
-90,0,16,161,154,4,16,34,89,0,48,144,140,0,0,0,48,42,0,0,22,0,144,164,176,
-0,16,161,178,0,144,164,176,4,9,132,89,16,32,33,140,144,48,0,90,0,16,161,
-178,4,16,36,89,224,255,255,17,0,48,160,140,0,0,0,48,0,16,165,176,0,16,161,
-178,0,48,160,140,0,0,0,48,0,16,165,152,4,16,36,89,0,16,161,154,5,16,175,
-89,0,80,165,144,4,32,133,144,0,16,245,146,0,80,165,144,32,96,177,152,20,
-16,162,89,10,192,165,54,22,22,160,92,0,80,165,146,0,48,128,146,56,0,0,32,
-2,30,136,92,0,48,136,146,96,0,0,48,0,80,161,176,20,192,165,89,0,80,161,
-146,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,64,96,8,140,0,116,192,178,240,255,
-255,255,120,32,164,144,0,48,160,146,128,242,0,0,136,32,172,144,0,48,168,
-146,176,242,0,0,152,32,180,144,0,48,176,146,224,242,0,0,16,22,104,92,168,
-32,188,144,64,32,132,140,148,48,0,90,0,48,184,146,16,243,0,0,34,0,0,21,
-30,96,5,61,26,160,5,61,22,224,5,61,8,30,128,92,0,116,192,176,240,255,255,
-255,0,0,0,10,52,32,180,144,0,48,176,146,132,242,0,0,68,32,164,144,0,48,
-160,146,180,242,0,0,84,32,164,144,0,48,160,146,228,242,0,0,0,48,160,144,
-128,242,0,0,100,32,172,144,148,48,0,90,0,48,168,146,20,243,0,0,14,0,0,18,
-63,0,24,140,174,223,176,62,0,48,160,144,176,242,0,0,22,32,5,58,0,48,160,
-144,180,242,0,0,63,0,24,140,146,223,160,62,0,48,160,144,224,242,0,0,22,
-32,5,58,0,48,160,144,228,242,0,0,63,0,24,140,118,223,160,62,0,48,160,144,
-16,243,0,0,22,32,5,58,0,48,160,144,20,243,0,0,63,0,24,140,90,223,160,62,
-0,48,160,144,128,242,0,0,38,32,5,58,0,48,160,144,176,242,0,0,26,32,5,58,
-0,48,168,144,132,242,0,0,0,48,160,144,180,242,0,0,46,31,173,57,0,48,160,
-144,224,242,0,0,38,32,5,58,0,48,160,144,16,243,0,0,26,32,5,58,0,48,168,
-144,228,242,0,0,0,48,160,144,20,243,0,0,2,31,173,57,0,48,160,144,128,242,
-0,0,46,32,5,61,0,48,160,144,180,242,0,0,0,48,24,140,48,104,0,0,0,48,24,
-146,48,243,0,0,0,48,160,146,132,242,0,0,24,0,0,8,0,0,0,0,0,48,24,140,144,
-102,0,0,0,48,24,146,48,243,0,0,0,48,160,144,224,242,0,0,42,32,5,61,0,48,
-160,144,20,243,0,0,0,48,24,140,80,107,0,0,0,48,24,146,52,243,0,0,0,48,160,
-146,228,242,0,0,20,0,0,8,0,48,24,140,192,105,0,0,0,48,24,146,52,243,0,0,
-60,32,180,144,0,48,176,146,124,242,0,0,76,32,164,144,0,48,160,146,172,242,
-0,0,92,32,164,144,0,48,160,146,220,242,0,0,0,48,160,144,128,242,0,0,108,
-32,172,144,148,48,0,90,0,48,168,146,12,243,0,0,10,0,0,18,58,190,5,59,0,
-48,160,144,124,242,0,0,31,216,31,89,42,222,160,49,0,48,160,128,124,242,
-0,0,255,0,24,140,148,208,160,88,148,192,160,88,18,62,5,61,0,48,160,144,
-176,242,0,0,18,32,5,58,0,48,160,144,172,242,0,0,250,61,5,59,0,48,160,144,
-172,242,0,0,31,216,31,89,234,221,160,49,0,48,160,128,172,242,0,0,255,0,
-24,140,148,208,160,88,148,192,160,88,210,61,5,61,0,48,160,144,224,242,0,
-0,18,32,5,58,0,48,160,144,220,242,0,0,186,61,5,59,0,48,160,144,220,242,
-0,0,31,216,31,89,170,221,160,49,0,48,160,128,220,242,0,0,255,0,24,140,148,
-208,160,88,148,192,160,88,146,61,5,61,0,48,160,144,16,243,0,0,18,32,5,58,
-0,48,160,144,12,243,0,0,122,61,5,59,0,48,160,144,12,243,0,0,31,216,31,89,
-106,221,160,49,0,48,160,128,12,243,0,0,255,0,24,140,148,208,160,88,148,
-192,160,88,82,61,5,61,0,48,168,144,128,242,0,0,18,96,5,58,0,48,160,144,
-124,242,0,0,58,29,173,60,0,48,168,144,176,242,0,0,18,96,5,58,0,48,160,144,
-172,242,0,0,34,29,173,60,0,48,168,144,224,242,0,0,18,96,5,58,0,48,160,144,
-220,242,0,0,10,29,173,60,0,48,168,144,16,243,0,0,18,96,5,58,0,48,160,144,
-12,243,0,0,242,28,173,60,0,48,176,144,176,242,0,0,0,48,32,176,160,242,0,
-0,0,48,96,144,128,242,0,0,0,48,128,176,112,242,0,0,0,48,232,144,16,243,
-0,0,0,48,192,176,0,243,0,0,0,48,184,144,224,242,0,0,0,48,64,176,208,242,
-0,0,19,1,163,89,1,13,171,89,0,16,141,140,21,22,144,92,0,48,128,146,112,
-242,0,0,0,48,168,146,120,242,0,0,0,48,160,146,116,242,0,0,7,129,165,89,
-0,48,152,146,124,242,0,0,1,141,181,89,0,16,45,140,22,22,48,92,0,48,32,146,
-160,242,0,0,0,48,160,146,164,242,0,0,11,193,165,89,0,48,176,146,168,242,
-0,0,1,205,189,89,0,16,77,140,23,22,80,92,0,48,64,146,208,242,0,0,0,48,184,
-146,216,242,0,0,0,48,160,146,212,242,0,0,27,65,167,89,0,48,88,146,220,242,
-0,0,1,77,239,89,0,16,205,140,29,22,208,92,0,48,192,146,0,243,0,0,0,48,56,
-146,172,242,0,0,0,30,32,92,0,48,160,146,4,243,0,0,0,48,232,146,8,243,0,
-0,0,48,216,146,12,243,0,0,98,32,3,58,112,96,139,144,0,48,112,140,112,242,
-0,0,0,48,120,140,88,242,0,0,0,48,112,154,80,242,0,0,0,48,128,140,112,242,
-0,0,8,37,0,9,1,30,32,92,184,59,68,58,0,48,160,144,140,242,0,0,12,96,163,
-146,0,48,128,144,128,242,0,0,144,57,128,140,0,0,0,0,48,67,0,9,0,48,128,
-146,136,242,0,0,140,59,4,58,0,48,160,144,176,242,0,0,126,32,5,58,0,48,24,
-140,160,242,0,0,132,57,160,140,0,0,0,0,96,224,31,146,0,52,173,140,80,242,
-0,0,0,52,165,140,88,242,0,0,128,96,139,144,100,224,167,146,96,224,31,144,
-4,96,165,146,0,48,128,140,160,242,0,0,0,80,29,146,132,36,0,9,4,80,32,89,
-52,59,68,58,0,48,160,144,188,242,0,0,16,96,163,146,0,48,128,144,176,242,
-0,0,144,57,128,140,0,0,0,0,172,66,0,9,0,48,128,146,184,242,0,0,8,59,4,58,
-0,48,160,144,224,242,0,0,126,32,5,58,0,48,24,140,208,242,0,0,132,57,160,
-140,0,0,0,0,80,224,31,146,0,52,173,140,80,242,0,0,0,52,165,140,88,242,0,
-0,144,96,139,144,84,224,167,146,80,224,31,144,4,96,165,146,0,48,128,140,
-208,242,0,0,0,80,29,146,0,36,0,9,4,80,32,89,176,58,68,58,0,48,160,144,236,
-242,0,0,20,96,163,146,0,48,128,144,224,242,0,0,144,57,128,140,0,0,0,0,40,
-66,0,9,0,48,128,146,232,242,0,0,132,58,4,58,0,48,160,144,16,243,0,0,126,
-32,5,58,0,48,24,140,0,243,0,0,132,57,160,140,0,0,0,0,64,224,31,146,0,52,
-173,140,80,242,0,0,0,52,165,140,88,242,0,0,160,96,139,144,68,224,167,146,
-64,224,31,144,4,96,165,146,0,48,128,140,0,243,0,0,0,80,29,146,124,35,0,
-9,4,80,32,89,44,58,68,58,0,48,160,144,28,243,0,0,24,96,163,146,0,48,128,
-144,16,243,0,0,144,57,128,140,0,0,0,0,164,65,0,9,0,48,128,146,24,243,0,
-0,0,58,4,58,0,48,24,140,80,242,0,0,2,30,128,92,132,57,24,146,76,242,0,0,
-0,116,192,176,240,255,255,255,0,0,0,10,0,0,0,0,0,48,128,146,76,243,0,0,
-16,22,32,92,144,64,132,112,0,80,44,140,92,65,0,9,0,48,128,146,64,243,0,
-0,18,32,4,61,8,30,128,92,0,0,0,10,0,0,0,0,4,57,128,140,0,0,0,0,56,65,0,
-9,0,48,128,146,68,243,0,0,14,32,4,61,8,30,128,92,0,0,0,10,0,48,160,144,
-64,243,0,0,132,48,0,90,0,48,168,144,68,243,0,0,0,30,176,92,82,0,0,22,0,
-47,1,90,0,80,189,140,0,32,165,140,28,0,0,16,1,30,176,92,0,80,165,146,150,
-32,1,90,20,64,161,89,4,96,189,140,42,0,0,19,23,22,168,92,0,80,165,146,20,
-64,161,89,2,160,181,140,4,96,165,146,150,32,1,90,20,64,161,89,8,96,173,
-140,228,255,255,20,4,57,128,140,0,0,0,0,176,64,0,9,0,48,128,146,72,243,
-0,0,14,32,4,61,8,30,128,92,0,0,0,10,132,48,0,90,0,48,160,144,72,243,0,0,
-0,30,176,92,66,0,0,22,0,47,1,90,0,16,173,140,24,0,0,16,1,30,176,92,150,
-32,1,90,0,16,245,146,20,16,169,89,34,0,0,19,21,22,160,92,0,16,245,146,22,
-144,176,89,4,32,245,146,150,32,1,90,8,32,165,140,236,255,255,20,2,30,128,
-92,0,0,0,10,0,48,184,144,24,82,0,0,0,48,160,144,68,243,0,0,23,29,173,140,
-0,80,181,144,16,22,32,93,62,160,5,58,0,48,160,144,76,243,0,0,0,144,141,
-146,0,80,245,146,22,16,170,89,16,32,172,146,23,80,168,89,12,32,180,146,
-1,9,165,89,148,64,165,88,1,0,128,140,0,48,160,146,24,82,0,0,0,0,0,10,0,
-48,160,144,20,82,0,0,98,32,5,59,188,1,0,9,0,48,168,144,24,82,0,0,0,48,160,
-144,68,243,0,0,21,29,189,140,0,208,181,144,66,160,5,58,0,48,160,144,76,
-243,0,0,0,208,245,146,21,80,168,89,1,9,165,89,148,64,165,88,0,48,160,146,
-24,82,0,0,0,144,45,146,22,16,162,89,16,32,161,146,1,30,128,92,12,32,177,
-146,0,0,0,10,0,0,0,0,0,48,160,144,48,244,0,0,20,80,160,89,0,0,128,140,0,
-48,160,146,48,244,0,0,0,0,0,10,0,0,0,0,0,48,136,144,112,180,3,0,16,22,32,
-92,116,57,0,9,0,48,160,144,96,180,3,0,0,48,184,144,28,82,0,0,20,58,160,
-140,16,0,0,0,0,16,161,146,0,48,168,144,68,243,0,0,0,48,160,144,76,243,0,
-0,23,80,176,89,23,93,37,146,1,9,165,89,148,128,165,88,0,48,160,146,28,82,
-0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,48,240,140,216,119,0,0,30,22,136,92,0,0,
-240,140,0,48,184,144,32,82,0,0,0,48,128,144,72,243,0,0,0,48,160,144,76,
-243,0,0,0,48,168,144,20,82,0,0,23,80,176,89,1,9,165,89,148,128,165,88,23,
-29,132,144,1,73,173,89,0,48,160,146,32,82,0,0,0,48,168,146,20,82,0,0,0,
-80,4,132,0,0,0,10,0,0,0,0,0,48,240,140,80,120,0,0,30,22,144,92,0,0,240,
-140,0,48,160,144,48,244,0,0,0,48,184,144,36,82,0,0,0,48,136,144,72,243,
-0,0,0,48,168,144,76,243,0,0,0,48,176,144,20,82,0,0,20,80,160,89,0,48,160,
-146,48,244,0,0,23,80,160,89,1,73,173,89,149,0,173,88,23,93,132,146,22,80,
-176,89,0,48,168,146,36,82,0,0,0,48,176,146,20,82,0,0,0,144,4,132,0,0,0,
-0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,255,0,48,140,0,48,56,140,255,255,0,0,
-0,48,160,144,140,180,3,0,0,16,165,144,74,33,5,58,0,48,168,144,32,82,0,0,
-0,48,184,144,72,243,0,0,0,48,160,144,76,243,0,0,0,48,176,144,20,82,0,0,
-21,221,37,144,1,137,181,89,0,48,176,146,20,82,0,0,21,80,168,89,1,9,165,
-89,148,64,165,88,0,48,160,146,32,82,0,0,4,16,161,89,0,16,181,144,0,48,168,
-144,140,180,3,0,150,192,129,88,0,16,133,146,0,80,141,144,4,22,144,92,144,
-141,45,89,144,56,128,140,9,0,0,0,3,12,132,89,192,4,0,9,0,48,168,144,140,
-180,3,0,0,48,160,144,144,180,3,0,4,96,181,144,0,80,245,146,21,16,170,89,
-14,0,173,54,0,48,168,144,148,180,3,0,0,48,168,146,140,180,3,0,0,48,168,
-144,40,82,0,0,0,48,136,144,112,180,3,0,0,48,176,146,56,0,0,32,129,73,161,
-88,0,48,160,146,96,0,0,48,21,80,168,89,0,48,168,146,40,82,0,0,149,128,169,
-88,136,73,173,88,0,16,129,140,0,48,168,146,4,0,0,32,56,55,0,9,0,48,160,
-144,96,180,3,0,0,48,128,144,68,243,0,0,20,58,160,140,16,0,0,0,0,16,161,
-146,0,48,176,144,28,82,0,0,0,48,160,144,76,243,0,0,0,48,184,144,20,82,0,
-0,22,80,168,89,1,9,165,89,148,64,165,88,22,29,36,146,0,48,160,146,28,82,
-0,0,180,254,5,60,0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,16,36,176,
-18,22,232,92,0,208,68,140,30,32,33,58,18,32,33,60,214,32,1,58,4,1,0,8,0,
-0,0,0,106,32,41,58,248,0,0,8,50,224,20,61,0,48,160,144,196,243,0,0,0,48,
-168,144,216,243,0,0,17,0,141,89,1,96,173,140,0,48,136,146,196,243,0,0,0,
-48,168,146,216,243,0,0,200,0,0,8,0,48,160,144,208,243,0,0,0,48,168,144,
-224,243,0,0,17,0,141,89,1,96,173,140,0,48,136,146,208,243,0,0,0,48,168,
-146,224,243,0,0,156,0,0,8,0,0,0,0,50,224,20,61,0,48,160,144,244,243,0,0,
-0,48,168,144,4,244,0,0,17,0,141,89,1,96,173,140,0,48,136,146,244,243,0,
-0,0,48,168,146,4,244,0,0,104,0,0,8,0,48,160,144,248,243,0,0,0,48,168,144,
-16,244,0,0,17,0,141,89,1,96,173,140,0,48,136,146,248,243,0,0,0,48,168,146,
-16,244,0,0,60,0,0,8,0,0,0,0,34,224,20,61,0,48,160,144,180,243,0,0,17,0,
-141,89,0,48,136,146,180,243,0,0,28,0,0,8,0,0,0,0,0,48,160,144,184,243,0,
-0,17,0,141,89,0,48,136,146,184,243,0,0,16,32,164,144,7,1,165,89,8,9,165,
-89,3,12,165,89,4,224,161,146,40,32,180,152,7,16,162,89,18,128,149,62,7,
-16,164,89,22,129,236,89,12,224,177,146,26,192,237,60,23,65,239,89,4,32,
-189,146,157,224,5,90,8,32,165,140,240,255,255,19,10,96,7,59,4,32,237,146,
-0,48,160,144,20,82,0,0,10,32,5,59,28,253,255,9,0,48,136,144,140,180,3,0,
-0,80,164,144,118,32,5,61,4,224,169,144,0,48,184,144,36,82,0,0,0,48,176,
-144,72,243,0,0,16,14,162,89,148,67,165,88,4,224,161,146,23,157,61,146,0,
-48,168,144,48,244,0,0,0,48,160,144,76,243,0,0,0,48,176,144,20,82,0,0,23,
-80,184,89,1,96,173,140,1,9,165,89,148,192,165,88,0,48,168,146,48,244,0,
-0,22,80,176,89,0,48,160,146,36,82,0,0,0,48,176,146,20,82,0,0,0,0,0,10,0,
-0,0,0,4,224,129,144,0,80,140,144,7,22,144,92,144,56,128,140,9,0,0,0,131,
-13,132,89,208,1,0,9,0,48,168,144,140,180,3,0,0,48,160,144,144,180,3,0,4,
-96,181,144,0,80,245,146,21,16,170,89,14,0,173,54,0,48,168,144,148,180,3,
-0,0,48,160,144,40,82,0,0,0,48,136,144,112,180,3,0,0,48,176,146,56,0,0,32,
-0,48,168,146,140,180,3,0,129,9,170,88,0,48,168,146,96,0,0,48,20,80,160,
-89,255,0,72,140,0,48,160,146,40,82,0,0,148,64,162,88,136,9,165,88,0,208,
-129,140,0,48,160,146,4,0,0,32,68,52,0,9,0,48,160,144,96,180,3,0,0,48,184,
-144,28,82,0,0,20,58,160,140,16,0,0,0,0,208,161,146,0,48,168,144,68,243,
-0,0,0,48,160,144,76,243,0,0,23,80,176,89,23,93,61,146,1,9,165,89,148,128,
-165,88,0,48,160,146,28,82,0,0,0,0,0,10,144,68,148,101,0,0,0,10,5,56,0,102,
-0,0,0,10,33,22,128,92,0,0,0,10,16,54,8,92,16,22,128,92,16,22,128,92,16,
-22,128,92,16,22,128,92,16,22,128,92,16,22,128,92,16,22,128,92,16,22,128,
-92,0,0,0,10,16,54,0,92,0,0,0,10,32,22,128,92,0,0,0,10,0,48,32,140,0,0,31,
-0,16,14,44,89,132,2,41,101,5,22,128,92,0,0,0,10,144,18,128,101,0,0,0,10,
-0,48,32,140,255,255,255,255,16,64,36,97,4,22,128,92,0,0,0,10,16,64,148,
-97,18,22,128,92,0,0,0,10,16,65,36,97,4,22,128,92,0,0,0,10,0,0,0,0,0,0,0,
-0,0,0,0,0,0,48,136,146,48,0,0,32,144,57,160,140,0,0,0,0,0,30,136,92,144,
-48,0,90,0,48,160,146,96,0,0,32,0,48,152,140,0,0,0,48,54,0,0,22,0,48,160,
-144,8,0,0,16,248,63,61,51,0,208,164,176,0,144,164,178,0,208,164,176,17,
-80,136,89,16,160,148,140,145,32,4,90,0,144,164,178,18,16,148,89,212,255,
-255,20,0,0,0,10,18,22,184,92,144,57,160,140,0,0,0,0,0,48,136,146,84,0,0,
-32,144,48,0,90,0,48,160,146,96,0,0,32,0,30,136,92,146,0,0,22,56,32,4,48,
-0,144,36,176,0,48,160,140,96,0,0,48,1,30,136,92,0,16,37,178,18,16,188,89,
-0,48,168,140,96,0,0,48,0,208,37,176,23,16,188,89,145,32,4,90,0,80,37,178,
-90,0,0,19,0,48,176,140,96,0,0,48,0,48,168,140,96,0,0,48,0,48,152,140,96,
-0,0,48,0,208,37,176,0,208,36,178,23,16,164,89,0,16,37,176,0,208,36,178,
-32,224,165,140,0,16,37,176,0,144,37,178,48,224,165,140,0,16,37,176,17,144,
-136,89,64,224,189,140,145,32,4,90,0,80,37,178,200,255,255,20,0,0,0,10,0,
-0,0,0,0,0,0,0,0,48,240,140,144,127,0,0,30,22,184,92,0,0,240,140,16,22,176,
-92,0,48,136,146,84,0,0,32,144,176,0,90,0,48,128,146,96,0,0,32,18,22,168,
-92,42,0,0,18,18,32,20,60,50,32,12,58,64,0,0,8,0,0,0,0,56,32,28,61,0,144,
-164,144,18,16,169,89,0,48,160,146,96,0,0,32,0,80,165,144,21,16,169,89,0,
-48,160,146,96,0,0,32,0,80,165,144,0,48,160,146,96,0,0,32,0,208,5,132,0,
-0,0,0,146,208,163,88,50,32,69,58,18,32,69,52,22,32,37,58,76,0,0,8,0,0,0,
-0,50,32,101,58,64,0,0,8,0,144,164,144,18,16,169,89,1,9,180,89,0,48,160,
-146,96,0,0,32,0,80,165,144,21,16,169,89,1,137,181,89,0,48,160,146,96,0,
-0,32,0,80,165,144,21,16,169,89,1,137,181,89,0,48,160,146,96,0,0,32,150,
-240,0,90,0,48,160,140,96,0,0,32,30,0,0,22,0,80,133,176,4,137,181,89,16,
-96,173,140,150,240,0,90,0,16,133,178,236,255,255,17,34,160,5,59,0,80,165,
-144,1,137,181,89,4,96,173,140,150,48,0,90,0,48,160,146,96,0,0,32,232,255,
-255,17,0,208,5,132,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,255,0,176,140,144,128,
-133,88,0,0,168,140,0,48,128,146,4,0,0,32,0,48,160,144,4,0,0,16,255,0,176,
-140,148,128,165,88,188,0,164,58,0,48,160,144,4,0,0,16,148,128,165,88,172,
-0,164,58,0,48,160,144,4,0,0,16,148,128,165,88,156,0,164,58,0,48,160,144,
-4,0,0,16,148,128,165,88,140,0,164,58,0,48,160,144,4,0,0,16,148,128,165,
-88,124,0,164,58,0,48,160,144,4,0,0,16,148,128,165,88,108,0,164,58,0,48,
-160,144,4,0,0,16,148,128,165,88,92,0,164,58,0,48,160,144,4,0,0,16,148,128,
-165,88,76,0,164,58,0,48,160,144,4,0,0,16,148,128,165,88,60,0,164,58,0,48,
-160,144,4,0,0,16,148,128,165,88,44,0,164,58,21,144,170,89,0,48,176,140,
-255,179,196,4,82,159,173,62,0,48,160,144,64,244,0,0,0,48,176,140,6,0,173,
-222,0,16,181,146,148,62,0,8,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,30,176,92,
-0,48,168,128,40,82,0,0,0,48,160,144,4,0,0,16,255,0,184,140,148,192,165,
-88,188,64,165,58,0,48,160,144,4,0,0,16,148,192,165,88,172,64,165,58,0,48,
-160,144,4,0,0,16,148,192,165,88,156,64,165,58,0,48,160,144,4,0,0,16,148,
-192,165,88,140,64,165,58,0,48,160,144,4,0,0,16,148,192,165,88,124,64,165,
-58,0,48,160,144,4,0,0,16,148,192,165,88,108,64,165,58,0,48,160,144,4,0,
-0,16,148,192,165,88,92,64,165,58,0,48,160,144,4,0,0,16,148,192,165,88,76,
-64,165,58,0,48,160,144,4,0,0,16,148,192,165,88,60,64,165,58,0,48,160,144,
-4,0,0,16,148,192,165,88,44,64,165,58,22,144,178,89,0,48,184,140,255,179,
-196,4,82,223,181,62,0,48,160,144,64,244,0,0,0,48,184,140,7,0,173,222,0,
-16,189,146,172,61,0,8,0,0,0,10,0,0,0,0,0,48,240,140,176,129,0,0,30,22,128,
-92,0,0,240,140,0,48,168,144,40,82,0,0,255,0,176,140,21,80,168,89,149,128,
-165,88,136,9,165,88,0,48,168,146,40,82,0,0,0,48,160,146,4,0,0,32,0,16,4,
-132,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,22,40,92,1,9,52,89,0,0,
-32,140,0,48,56,140,16,39,0,0,28,251,255,9,5,1,132,88,12,251,255,9,4,22,
-160,92,148,224,1,90,1,32,33,140,10,0,0,22,32,61,0,9,252,250,255,9,144,64,
-129,88,216,63,4,61,1,30,128,92,0,0,0,10,0,0,0,0,0,0,0,0,64,96,8,140,0,116,
-128,178,192,255,255,255,0,116,160,178,208,255,255,255,0,116,192,178,224,
-255,255,255,0,116,224,178,240,255,255,255,0,48,160,144,52,82,0,0,34,32,
-5,61,0,48,160,144,64,244,0,0,0,48,176,140,1,0,173,222,0,16,181,146,188,
-60,0,9,232,60,0,9,0,48,160,144,0,0,0,16,210,0,176,140,148,128,165,88,40,
-0,176,140,0,48,40,140,16,39,0,0,148,131,165,88,0,0,32,140,0,48,160,146,
-0,0,0,16,104,250,255,9,0,14,132,88,88,250,255,9,4,22,160,92,148,96,1,90,
-1,32,33,140,10,0,0,22,108,60,0,9,72,250,255,9,220,63,4,55,0,48,160,144,
-60,82,0,0,0,48,168,144,64,82,0,0,20,80,160,89,0,48,160,146,60,82,0,0,54,
-96,5,58,0,48,168,144,40,82,0,0,255,0,176,140,21,80,168,89,149,128,165,88,
-136,9,165,88,0,48,168,146,40,82,0,0,0,48,160,146,4,0,0,32,16,0,0,8,0,0,
-0,0,0,48,240,146,52,82,0,0,0,116,128,176,192,255,255,255,0,116,160,176,
-208,255,255,255,0,116,192,176,224,255,255,255,0,116,224,176,240,255,255,
-255,3,54,8,92,0,0,0,10,64,96,8,140,0,116,128,178,192,255,255,255,0,116,
-160,178,208,255,255,255,0,116,192,178,224,255,255,255,0,116,224,178,240,
-255,255,255,0,48,160,128,68,20,0,80,22,32,37,48,0,48,160,144,68,20,0,80,
-10,32,133,48,180,3,0,9,0,48,160,128,68,20,0,80,22,32,45,48,0,48,160,144,
-68,20,0,80,10,32,141,48,184,3,0,9,0,48,160,128,68,20,0,80,22,32,53,48,0,
-48,160,144,68,20,0,80,10,32,149,48,188,3,0,9,0,48,160,128,68,12,0,80,14,
-32,21,48,10,32,29,48,200,3,0,9,0,30,32,92,0,48,40,140,16,39,0,0,40,249,
-255,9,4,14,132,88,24,249,255,9,4,22,160,92,148,96,1,90,1,32,33,140,10,0,
-0,22,44,59,0,9,8,249,255,9,220,63,36,55,0,116,128,176,192,255,255,255,0,
-116,160,176,208,255,255,255,0,116,192,176,224,255,255,255,0,116,224,176,
-240,255,255,255,3,54,8,92,0,0,0,10,0,0,0,0,0,0,0,0,64,96,8,140,0,116,128,
-178,192,255,255,255,0,116,160,178,208,255,255,255,0,116,192,178,224,255,
-255,255,0,116,224,178,240,255,255,255,0,48,160,144,76,82,0,0,34,32,5,61,
-0,48,160,144,64,244,0,0,0,48,168,140,2,0,173,222,0,16,173,146,172,58,0,
-9,216,58,0,9,68,4,0,9,0,30,32,92,0,48,40,140,16,39,0,0,116,248,255,9,5,
-14,132,88,100,248,255,9,4,22,160,92,148,96,1,90,1,32,33,140,10,0,0,22,120,
-58,0,9,84,248,255,9,220,63,44,55,0,116,128,176,192,255,255,255,0,116,160,
-176,208,255,255,255,0,116,192,176,224,255,255,255,0,116,224,176,240,255,
-255,255,3,54,8,92,0,0,0,10,0,0,0,0,64,96,8,140,0,116,128,178,192,255,255,
-255,0,116,160,178,208,255,255,255,0,116,192,178,224,255,255,255,0,116,224,
-178,240,255,255,255,0,48,160,144,48,82,0,0,34,32,5,61,0,48,160,144,64,244,
-0,0,0,48,168,140,3,0,173,222,0,16,173,146,252,57,0,9,40,58,0,9,0,48,160,
-144,0,0,0,16,210,0,168,140,0,48,40,140,16,39,0,0,148,64,165,88,128,9,165,
-88,0,0,32,140,0,48,160,146,0,0,0,16,172,247,255,9,2,14,132,88,156,247,255,
-9,4,22,160,92,148,96,1,90,1,32,33,140,10,0,0,22,176,57,0,9,140,247,255,
-9,220,63,20,55,0,116,128,176,192,255,255,255,0,116,160,176,208,255,255,
-255,0,116,192,176,224,255,255,255,0,116,224,176,240,255,255,255,3,54,8,
-92,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,64,96,8,140,0,116,128,178,192,255,255,
-255,0,116,160,178,208,255,255,255,0,116,192,178,224,255,255,255,0,116,224,
-178,240,255,255,255,0,48,160,144,44,82,0,0,34,32,5,61,0,48,160,144,64,244,
-0,0,0,48,168,140,4,0,173,222,0,16,173,146,44,57,0,9,88,57,0,9,0,116,128,
-176,192,255,255,255,0,116,160,176,208,255,255,255,0,116,192,176,224,255,
-255,255,0,116,224,176,240,255,255,255,3,54,8,92,0,0,0,10,0,0,0,0,0,0,0,
-0,0,0,0,0,144,246,255,9,4,32,44,144,16,32,36,144,0,30,128,92,144,246,255,
-9,0,30,128,92,0,48,64,140,1,50,0,0,168,246,255,9,4,30,72,92,0,48,88,140,
-32,88,0,0,28,96,89,146,16,96,65,154,0,48,160,140,16,130,0,0,1,4,128,140,
-76,32,161,146,0,48,160,140,208,132,0,0,0,30,136,92,140,32,161,146,0,48,
-160,140,160,133,0,0,0,30,144,92,204,32,161,146,0,48,160,140,48,131,0,0,
-12,33,161,146,20,246,255,9,0,30,128,92,76,246,255,9,255,15,128,140,28,246,
-255,9,1,30,128,92,76,246,255,8,0,246,255,9,4,32,36,144,16,32,44,144,0,30,
-128,92,0,246,255,9,0,30,128,92,32,246,255,9,84,0,160,140,1,4,128,140,20,
-32,161,146,0,48,160,140,0,88,0,0,0,30,136,92,28,32,161,146,0,48,160,140,
-48,131,0,0,0,30,144,92,12,97,161,146,0,48,160,140,32,132,0,0,76,97,161,
-146,164,245,255,9,0,30,128,92,220,245,255,9,255,15,128,140,172,245,255,
-9,1,30,128,92,220,245,255,8,0,48,160,144,64,244,0,0,0,48,168,140,16,0,173,
-222,0,16,173,146,220,55,0,9,1,30,128,92,4,56,0,8,0,48,160,144,64,244,0,
-0,0,48,168,140,17,0,173,222,0,16,173,146,188,55,0,9,1,30,128,92,228,55,
-0,8,0,48,160,144,64,244,0,0,0,48,168,140,18,0,173,222,0,16,173,146,156,
-55,0,9,1,30,128,92,196,55,0,8,0,48,160,144,64,244,0,0,0,48,168,140,19,0,
-173,222,0,16,173,146,124,55,0,9,1,30,128,92,164,55,0,8,0,48,240,140,200,
-135,0,0,30,22,136,92,0,0,240,140,255,0,160,140,144,0,133,88,0,48,128,146,
-8,28,0,80,0,80,4,132,0,0,0,0,0,0,0,10,0,0,0,0,136,25,176,88,144,160,5,90,
-0,0,160,140,0,30,168,92,58,0,0,18,14,128,133,49,26,32,4,58,84,0,0,8,137,
-25,176,88,62,128,133,58,72,0,0,8,0,0,0,0,0,48,160,140,130,184,97,202,0,
-48,168,140,118,116,210,62,48,0,0,8,0,0,0,0,0,48,160,140,222,153,139,252,
-0,48,168,140,59,93,202,62,24,0,0,8,0,0,0,0,0,48,160,140,216,182,122,157,
-0,48,168,140,98,194,199,62,20,22,128,93,0,0,144,140,0,48,152,140,132,215,
-119,65,80,103,0,9,220,88,0,9,255,0,176,140,144,128,133,88,0,48,128,146,
-8,28,0,80,0,0,0,10,0,0,0,0,0,48,240,140,160,136,0,0,30,22,128,92,0,0,240,
-140,0,48,160,144,4,28,0,80,0,48,240,146,76,82,0,0,1,14,165,88,0,48,160,
-146,4,28,0,80,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,160,144,
-76,82,0,0,10,32,5,61,132,54,0,9,0,48,168,144,4,28,0,80,137,73,165,88,0,
-48,160,146,4,28,0,80,0,48,160,136,4,28,0,80,22,32,85,48,9,222,176,89,149,
-131,165,88,0,48,160,146,4,28,0,80,0,48,160,144,68,82,0,0,20,80,160,89,0,
-48,160,146,68,82,0,0,0,0,0,10,0,0,0,0,0,0,0,0,30,22,32,92,0,48,128,144,
-84,82,0,0,6,222,136,89,0,54,0,9,0,48,168,144,0,0,0,16,210,0,184,140,149,
-192,165,88,128,9,173,88,0,48,168,146,0,0,0,16,0,48,160,144,84,82,0,0,20,
-16,175,89,0,48,168,146,68,244,0,0,0,48,160,144,84,82,0,0,32,32,173,140,
-0,48,168,146,72,244,0,0,0,48,160,144,84,82,0,0,48,32,173,140,0,48,168,146,
-64,244,0,0,0,48,160,144,84,82,0,0,44,32,173,140,0,48,168,146,76,244,0,0,
-2,30,160,92,0,48,160,146,80,244,0,0,0,48,160,144,84,82,0,0,0,48,168,140,
-0,184,2,0,40,32,173,146,0,48,160,144,84,82,0,0,0,48,168,140,96,244,0,0,
-36,32,173,146,0,48,160,144,84,82,0,0,0,48,168,140,1,0,3,0,52,32,173,146,
-0,48,160,144,84,82,0,0,0,48,168,144,88,82,0,0,16,96,181,144,16,142,173,
-89,56,32,173,146,0,0,0,10,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,0,48,160,
-144,88,82,0,0,0,48,168,140,237,254,17,206,8,32,173,146,0,48,160,144,64,
-244,0,0,0,16,173,144,1,73,181,89,0,16,181,146,0,48,160,144,84,82,0,0,64,
-32,173,144,127,0,184,140,149,192,165,88,148,48,0,90,186,0,0,18,148,112,
-0,90,10,0,0,18,180,0,0,8,0,48,128,144,84,82,0,0,0,10,0,9,64,224,135,146,
-0,48,160,144,84,82,0,0,64,224,175,144,129,73,181,88,68,32,181,146,0,48,
-160,144,84,82,0,0,64,32,173,144,21,22,160,92,0,48,184,140,128,255,255,255,
-148,192,173,88,255,0,184,140,149,192,165,88,148,48,0,90,50,0,0,18,0,48,
-160,144,40,82,0,0,20,80,168,89,0,48,168,146,40,82,0,0,0,48,168,144,40,82,
-0,0,149,192,165,88,136,9,173,88,0,48,168,146,4,0,0,32,0,48,160,144,84,82,
-0,0,0,30,168,92,64,32,173,146,64,224,167,144,148,176,0,90,14,0,0,21,0,0,
-0,10,0,0,0,0,16,0,0,8,0,0,0,0,8,0,0,8,0,0,0,0,20,255,255,8,0,0,0,0,0,0,
-0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,89,30,22,160,92,0,48,168,144,68,12,
-0,80,128,73,181,88,0,48,176,146,68,12,0,80,0,48,168,144,68,12,0,80,0,78,
-181,88,0,48,176,146,68,12,0,80,0,48,168,144,68,12,0,80,2,78,181,88,0,48,
-176,146,68,12,0,80,0,30,168,92,0,48,168,146,72,16,0,80,1,30,168,92,0,48,
-168,146,68,16,0,80,0,30,168,92,64,224,175,146,64,224,175,144,21,240,0,90,
-78,0,0,17,64,224,175,144,21,57,176,140,0,0,0,0,0,160,173,140,15,30,176,
-92,0,116,181,146,16,16,0,80,64,224,175,144,21,57,176,140,0,0,0,0,0,160,
-173,140,0,30,176,92,0,116,181,146,0,16,0,80,64,224,175,144,21,80,176,89,
-64,224,183,146,176,255,255,8,0,48,168,144,4,28,0,80,2,78,181,88,0,48,176,
-146,4,28,0,80,0,48,168,144,68,20,0,80,1,78,181,88,0,48,176,146,68,20,0,
-80,244,1,168,140,0,48,168,146,48,20,0,80,0,48,168,144,68,20,0,80,135,73,
-181,88,0,48,176,146,68,20,0,80,0,48,168,144,68,20,0,80,134,73,181,88,0,
-48,176,146,68,20,0,80,0,48,168,144,68,20,0,80,4,78,181,88,0,48,176,146,
-68,20,0,80,0,48,168,144,68,20,0,80,5,78,181,88,0,48,176,146,68,20,0,80,
-0,0,0,10,16,72,8,89,30,22,32,92,0,0,160,140,0,48,160,146,0,0,0,16,0,48,
-168,144,0,0,0,16,210,0,184,140,149,192,165,88,129,9,173,88,0,48,168,146,
-0,0,0,16,0,48,160,144,0,0,0,16,208,0,184,140,148,192,173,88,0,48,168,146,
-0,0,0,16,0,48,168,144,0,0,0,16,210,0,184,140,149,192,165,88,128,9,173,88,
-0,48,168,146,0,0,0,16,0,48,168,144,0,0,0,16,149,192,165,88,40,0,184,140,
-148,195,173,88,0,48,168,146,0,0,0,16,10,30,128,92,4,50,0,11,0,48,160,144,
-4,28,0,80,131,9,173,88,0,48,168,146,4,28,0,80,31,216,132,89,232,49,0,11,
-0,48,168,144,4,28,0,80,11,222,184,89,149,195,165,88,0,48,184,140,56,24,
-0,0,148,224,5,90,14,0,0,18,1,30,128,92,24,50,0,9,0,48,160,144,68,12,0,80,
-148,48,0,90,14,0,0,18,1,30,128,92,0,50,0,9,0,48,168,144,68,20,0,80,8,222,
-184,89,149,195,165,88,148,224,5,90,14,0,0,18,1,30,128,92,224,49,0,9,0,48,
-160,144,68,12,0,80,129,9,173,88,0,48,168,146,68,12,0,80,0,48,160,144,68,
-12,0,80,128,9,173,88,0,48,168,146,68,12,0,80,0,48,160,144,68,20,0,80,130,
-9,173,88,0,48,168,146,68,20,0,80,0,48,160,144,68,20,0,80,128,9,173,88,0,
-48,168,146,68,20,0,80,0,48,160,144,68,20,0,80,10,14,173,88,0,48,168,146,
-68,20,0,80,0,48,160,144,4,28,0,80,133,9,173,88,0,48,168,146,4,28,0,80,0,
-48,160,144,4,28,0,80,132,9,173,88,0,48,168,146,4,28,0,80,0,48,160,144,4,
-28,0,80,3,14,173,88,0,48,168,146,4,28,0,80,10,30,128,92,224,48,0,11,0,30,
-160,92,64,224,167,146,64,224,167,144,20,240,0,90,110,0,0,17,64,224,167,
-144,20,57,168,140,0,0,0,0,0,96,165,140,64,224,175,144,10,78,181,89,0,48,
-168,144,80,82,0,0,21,128,181,89,0,52,181,146,0,12,0,144,64,224,167,144,
-20,57,168,140,0,0,0,0,0,96,165,140,64,224,175,144,10,78,181,89,0,48,168,
-144,80,82,0,0,21,128,181,89,0,52,181,146,16,12,0,144,64,224,167,144,20,
-80,168,89,64,224,175,146,144,255,255,8,0,48,160,144,80,244,0,0,148,112,
-0,90,110,0,0,21,0,48,160,144,80,82,0,0,0,52,173,140,0,32,0,0,0,48,168,146,
-0,20,0,144,0,48,160,144,80,82,0,0,0,52,173,140,0,32,0,0,0,48,168,146,16,
-20,0,144,0,48,160,144,80,82,0,0,0,52,173,140,0,16,0,0,0,48,168,146,0,24,
-0,144,0,48,160,144,80,82,0,0,0,52,173,140,0,16,0,0,0,48,168,146,16,24,0,
-144,24,1,0,8,0,0,0,0,0,30,160,92,64,224,167,146,64,224,167,144,20,240,0,
-90,2,1,0,17,64,224,167,144,20,57,168,140,0,0,0,0,0,96,165,140,64,224,183,
-144,150,56,168,140,0,0,0,0,21,128,173,89,11,78,173,89,0,116,181,140,0,32,
-0,0,0,48,168,144,80,82,0,0,21,128,181,89,0,52,181,146,0,20,0,144,64,224,
-167,144,20,57,168,140,0,0,0,0,0,96,165,140,64,224,183,144,150,56,168,140,
-0,0,0,0,21,128,173,89,11,78,173,89,0,116,181,140,0,32,0,0,0,48,168,144,
-80,82,0,0,21,128,181,89,0,52,181,146,16,20,0,144,64,224,167,144,20,57,168,
-140,0,0,0,0,0,96,165,140,64,224,175,144,10,78,181,89,0,180,173,140,0,16,
-0,0,0,48,176,144,80,82,0,0,22,64,173,89,0,52,173,146,0,24,0,144,64,224,
-167,144,20,57,168,140,0,0,0,0,0,96,165,140,64,224,175,144,10,78,181,89,
-0,180,173,140,0,16,0,0,0,48,176,144,80,82,0,0,22,64,173,89,0,52,173,146,
-16,24,0,144,64,224,167,144,20,80,168,89,64,224,175,146,0,255,255,8,0,0,
-0,0,1,30,160,92,0,48,160,146,68,16,0,80,0,30,160,92,64,224,167,146,64,224,
-167,144,20,240,0,90,78,0,0,17,64,224,167,144,20,57,168,140,0,0,0,0,0,96,
-165,140,15,30,168,92,0,52,173,146,16,16,0,80,64,224,167,144,20,57,168,140,
-0,0,0,0,0,96,165,140,0,30,168,92,0,52,173,146,0,16,0,80,64,224,167,144,
-20,80,168,89,64,224,175,146,176,255,255,8,0,48,160,144,68,12,0,80,1,14,
-173,88,0,48,168,146,68,12,0,80,0,48,160,144,68,12,0,80,0,14,173,88,0,48,
-168,146,68,12,0,80,0,48,160,144,68,20,0,80,2,14,173,88,0,48,168,146,68,
-20,0,80,0,48,160,144,68,20,0,80,0,14,173,88,0,48,168,146,68,20,0,80,0,48,
-160,144,68,20,0,80,138,9,173,88,0,48,168,146,68,20,0,80,0,48,160,144,4,
-28,0,80,5,14,173,88,0,48,168,146,4,28,0,80,0,48,160,144,4,28,0,80,4,14,
-173,88,0,48,168,146,4,28,0,80,0,48,160,144,68,20,0,80,147,9,173,88,0,48,
-168,146,68,20,0,80,0,30,128,92,0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,
-0,30,22,160,92,0,48,168,128,80,243,0,0,0,48,168,146,68,16,0,80,0,30,168,
-92,0,48,168,146,0,16,0,80,1,30,168,92,0,48,168,146,16,16,0,80,0,0,0,10,
-24,22,40,92,16,72,8,89,0,116,200,146,240,255,255,255,0,116,208,154,248,
-255,255,255,0,16,164,144,0,48,232,140,0,255,0,0,0,16,172,144,148,64,167,
-88,8,78,239,89,4,32,180,144,136,13,141,89,149,64,175,88,144,77,149,89,42,
-96,36,58,38,96,44,58,10,30,128,92,5,22,192,92,0,116,200,144,240,255,255,
-255,0,116,208,152,248,255,255,255,0,0,0,10,0,0,0,0,10,160,4,58,220,191,
-12,61,0,48,160,144,100,180,3,0,210,31,181,52,0,48,160,144,96,180,3,0,198,
-31,181,49,0,48,160,144,224,193,3,0,22,157,173,140,21,30,37,140,4,32,161,
-144,172,63,69,58,138,96,36,58,14,96,36,60,18,96,4,58,156,255,255,8,138,
-96,44,58,148,255,255,8,8,32,164,144,31,88,236,89,157,5,165,112,72,32,161,
-146,14,32,5,61,1,30,232,92,72,32,233,146,4,32,161,144,98,32,69,61,8,32,
-137,144,72,32,161,144,38,0,141,60,145,92,148,140,18,58,144,140,0,0,0,0,
-4,22,128,92,2,0,152,140,116,231,255,9,8,32,241,146,24,32,241,146,2,30,128,
-92,5,22,192,92,0,116,200,144,240,255,255,255,0,116,208,152,248,255,255,
-255,0,0,0,10,0,0,0,0,31,88,187,89,4,0,128,140,16,0,0,8,0,0,0,0,31,88,188,
-89,0,0,128,140,18,160,4,58,134,160,12,58,0,255,255,8,0,0,0,0,0,48,160,144,
-176,242,0,0,240,62,5,58,0,48,160,144,48,243,0,0,48,32,169,140,20,22,48,
-92,0,48,56,140,48,104,0,0,0,80,165,146,4,96,61,146,0,48,160,144,132,242,
-0,0,151,5,165,116,32,32,161,146,0,48,160,144,180,242,0,0,151,5,165,116,
-32,32,177,140,0,144,69,144,20,22,72,92,151,0,170,112,151,0,189,112,4,160,
-165,146,16,65,173,89,0,80,85,140,23,22,88,92,0,144,69,146,120,0,0,8,0,0,
-0,0,0,48,160,144,16,243,0,0,120,62,5,58,0,48,160,144,52,243,0,0,48,32,169,
-140,20,22,192,92,0,48,200,140,80,107,0,0,0,80,165,146,4,96,205,146,0,48,
-160,144,228,242,0,0,151,5,165,116,32,32,161,146,0,48,160,144,20,243,0,0,
-151,5,165,116,32,32,177,140,0,144,101,144,20,22,104,92,151,0,171,112,151,
-0,189,112,4,160,165,146,16,65,173,89,0,80,117,140,23,22,120,92,0,144,101,
-146,8,160,173,146,12,160,189,146,17,22,208,92,20,32,145,146,8,30,216,92,
-0,16,137,146,2,30,128,92,4,32,217,146,5,22,192,92,0,116,200,144,240,255,
-255,255,0,116,208,152,248,255,255,255,0,0,0,10,4,32,180,144,0,48,160,144,
-100,180,3,0,42,0,181,52,0,48,160,144,96,180,3,0,30,0,181,49,0,48,160,144,
-224,193,3,0,22,157,173,140,21,62,165,144,4,0,0,0,18,32,77,61,10,30,128,
-92,0,0,0,10,0,0,0,0,0,48,168,144,224,193,3,0,22,157,165,140,20,94,37,140,
-8,32,137,144,22,96,4,59,4,22,128,92,0,0,144,140,8,30,152,92,156,229,255,
-9,4,22,128,92,80,0,136,140,224,42,0,9,9,30,184,92,4,32,185,146,159,25,184,
-88,2,0,128,140,56,32,185,146,0,0,0,10,0,0,0,0,96,32,164,144,0,48,160,146,
-116,180,3,0,96,32,164,144,148,57,160,140,32,0,0,0,0,48,160,146,120,180,
-3,0,0,48,160,128,120,180,3,0,16,22,96,92,64,32,92,140,255,0,104,140,148,
-208,167,88,148,64,163,88,14,32,5,58,8,30,128,92,0,0,0,10,0,48,128,144,120,
-180,3,0,208,33,0,9,0,48,128,146,52,242,0,0,14,32,4,61,8,30,128,92,0,0,0,
-10,28,224,162,144,148,57,160,140,32,0,0,0,0,48,160,146,112,180,3,0,0,48,
-160,128,112,180,3,0,148,208,167,88,148,64,163,88,14,32,5,58,8,30,128,92,
-0,0,0,10,24,224,162,144,148,208,160,88,148,64,163,88,14,32,5,58,8,30,128,
-92,0,0,0,10,16,224,170,144,20,224,74,144,24,224,82,144,24,224,146,144,24,
-224,154,144,48,224,234,144,56,224,34,144,64,224,42,144,72,224,50,144,80,
-224,58,144,88,224,66,144,0,48,176,144,120,180,3,0,96,224,138,144,0,48,160,
-144,112,180,3,0,104,224,130,144,12,224,186,144,22,16,178,89,150,64,178,
-112,8,32,165,140,148,128,162,112,21,93,173,140,23,221,189,140,149,157,173,
-140,21,0,173,89,18,93,149,140,19,157,156,140,157,221,236,140,132,93,39,
-140,133,29,41,140,134,93,49,140,135,157,57,140,136,221,65,140,145,29,138,
-140,144,93,132,140,0,48,104,140,0,192,2,0,23,30,188,140,14,64,187,62,8,
-30,128,92,0,0,0,10,12,22,128,92,164,0,0,9,18,32,68,61,8,30,128,92,0,0,0,
-10,0,0,0,0,12,22,128,92,28,1,0,9,18,32,68,61,8,30,128,92,0,0,0,10,0,0,0,
-0,12,22,128,92,164,1,0,9,18,32,68,61,8,30,128,92,0,0,0,10,0,0,0,0,12,22,
-128,92,140,216,255,9,18,32,68,61,8,30,128,92,0,0,0,10,0,0,0,0,24,224,130,
-144,0,48,136,144,112,180,3,0,236,222,255,9,18,32,68,61,8,30,128,92,0,0,
-0,10,0,0,0,0,64,32,131,140,196,15,0,9,18,32,68,61,8,30,128,92,0,0,0,10,
-0,0,0,0,0,30,128,92,76,233,255,9,2,30,128,92,0,0,0,10,16,22,32,92,80,32,
-132,144,0,48,128,146,152,180,3,0,5,14,132,89,12,32,0,9,0,48,128,146,56,
-242,0,0,18,32,4,61,8,30,128,92,0,0,0,10,0,0,0,0,0,48,184,144,56,242,0,0,
-0,16,185,146,0,48,168,144,152,180,3,0,0,30,176,92,0,48,184,146,64,242,0,
-0,5,78,165,89,23,60,165,140,224,255,255,255,0,48,160,146,60,242,0,0,34,
-96,5,59,23,22,168,92,0,80,245,146,0,48,160,144,152,180,3,0,32,96,173,140,
-22,80,176,89,236,31,181,60,2,30,128,92,0,0,0,10,0,0,0,0,88,32,36,144,16,
-22,40,92,132,57,128,140,0,0,0,0,128,31,0,9,0,48,128,146,140,180,3,0,14,
-32,4,61,8,30,128,92,0,0,0,10,0,48,176,144,140,180,3,0,0,30,168,92,132,48,
-0,90,8,96,177,146,0,48,176,146,148,180,3,0,132,189,165,140,248,255,255,
-255,0,48,160,146,144,180,3,0,62,0,0,22,0,47,1,90,0,144,165,140,24,0,0,16,
-1,30,168,92,149,32,1,90,0,144,245,146,22,16,162,89,30,0,0,19,0,16,245,146,
-21,144,168,89,8,32,245,146,149,32,1,90,16,32,165,140,236,255,255,20,2,30,
-128,92,0,0,0,10,0,0,0,0,0,0,0,0,84,32,36,144,16,22,40,92,132,57,128,140,
-0,0,0,0,224,30,0,9,0,48,128,146,128,180,3,0,14,32,4,61,8,30,128,92,0,0,
-0,10,0,48,176,144,128,180,3,0,0,30,168,92,132,48,0,90,4,96,177,146,0,48,
-176,146,136,180,3,0,132,189,165,140,248,255,255,255,0,48,160,146,132,180,
-3,0,62,0,0,22,0,47,1,90,0,144,165,140,24,0,0,16,1,30,168,92,149,32,1,90,
-0,144,245,146,22,16,162,89,30,0,0,19,0,16,245,146,21,144,168,89,8,32,245,
-146,149,32,1,90,16,32,165,140,236,255,255,20,2,30,128,92,0,0,0,10,0,0,0,
-0,0,0,0,0,16,22,32,92,145,57,128,140,0,0,0,0,17,22,40,92,64,30,0,9,28,32,
-129,146,18,32,4,61,8,30,128,92,0,0,0,10,0,0,0,0,28,32,185,144,32,32,169,
-140,0,30,176,92,133,48,0,90,133,253,165,140,248,255,255,255,0,80,189,146,
-4,96,165,146,62,0,0,22,0,111,1,90,0,208,165,140,24,0,0,16,1,30,176,92,150,
-96,1,90,0,208,245,146,23,16,162,89,30,0,0,19,0,16,245,146,22,144,176,89,
-8,32,245,146,150,96,1,90,16,32,165,140,236,255,255,20,2,30,128,92,0,0,0,
-10,0,0,0,0,80,96,8,140,0,116,192,178,240,255,255,255,0,30,88,92,0,48,192,
-140,32,20,0,80,0,48,24,140,252,4,0,96,0,48,200,140,132,8,0,64,0,48,208,
-140,255,63,0,0,1,25,216,89,0,16,166,144,222,44,5,58,8,206,114,89,0,180,
-163,140,128,8,0,64,0,16,101,144,0,80,166,144,142,137,238,88,148,64,79,88,
-0,48,232,140,255,255,255,0,4,12,171,89,149,64,167,88,16,12,165,89,148,44,
-5,61,0,48,160,144,96,180,3,0,8,76,239,89,149,64,175,88,128,12,173,49,0,
-48,160,144,224,193,3,0,21,93,173,140,21,30,45,140,4,96,161,144,0,80,169,
-144,46,32,77,61,11,22,128,92,0,80,138,140,64,16,0,11,0,48,160,144,164,243,
-0,0,20,80,160,89,0,48,160,146,164,243,0,0,76,12,0,8,0,0,0,0,140,144,163,
-88,2,12,165,89,10,32,21,61,44,108,5,61,28,96,81,144,24,96,65,144,8,96,49,
-144,78,100,37,58,18,96,37,60,142,105,5,58,16,12,0,8,0,0,0,0,8,108,45,61,
-246,32,2,61,106,160,1,61,5,22,128,92,0,16,139,140,116,220,255,9,172,43,
-4,58,48,96,161,144,5,22,128,92,0,16,5,134,144,112,0,90,0,16,84,140,50,0,
-0,21,0,48,160,144,248,243,0,0,11,22,128,92,9,0,165,89,0,80,138,140,0,48,
-160,146,248,243,0,0,160,15,0,11,12,96,129,144,16,221,255,9,116,11,0,8,32,
-96,161,144,68,96,217,146,140,0,0,8,0,0,0,0,86,5,232,140,62,64,55,54,0,48,
-160,144,252,243,0,0,11,22,128,92,1,32,165,140,9,22,136,92,0,48,160,146,
-252,243,0,0,92,15,0,11,5,22,128,92,0,144,137,140,0,30,144,92,8,0,152,140,
-112,223,255,9,36,11,0,8,52,96,161,144,5,22,128,92,0,16,5,134,144,112,0,
-90,0,16,84,140,46,0,0,21,11,22,128,92,0,80,138,140,32,15,0,11,5,22,128,
-92,0,144,137,140,0,30,144,92,8,0,152,140,52,223,255,9,232,10,0,8,0,0,0,
-0,36,96,161,144,24,96,161,146,86,5,232,140,126,64,55,54,0,48,160,144,252,
-243,0,0,11,22,128,92,1,32,165,140,9,22,136,92,0,48,160,146,252,243,0,0,
-212,14,0,11,5,22,128,92,0,144,137,140,0,30,144,92,8,0,152,140,232,222,255,
-9,156,10,0,8,11,22,128,92,0,80,138,140,176,14,0,11,24,0,0,8,11,22,128,92,
-0,80,138,140,160,14,0,11,12,96,129,144,16,220,255,9,0,48,160,144,248,243,
-0,0,9,0,165,89,0,48,160,146,248,243,0,0,36,1,0,8,0,0,0,0,42,33,11,48,26,
-97,2,59,0,180,35,140,112,4,0,96,0,180,67,140,120,4,0,96,0,180,59,140,64,
-4,0,64,68,96,161,144,0,48,80,146,84,0,0,32,10,30,232,92,0,48,232,146,96,
-0,0,32,0,48,160,146,64,20,0,80,0,16,161,176,0,16,161,176,0,16,162,152,0,
-208,161,152,64,224,167,154,0,48,160,144,64,20,0,80,6,80,48,89,0,48,232,
-140,123,221,4,199,64,224,151,136,102,64,167,58,0,48,168,144,8,244,0,0,134,
-156,161,140,20,58,160,140,0,0,0,0,18,1,165,89,8,9,165,89,47,0,232,140,21,
-80,168,89,20,96,7,90,0,48,168,146,8,244,0,0,26,0,0,22,0,48,160,144,252,
-243,0,0,20,80,160,89,0,48,160,146,252,243,0,0,5,22,128,92,0,144,137,140,
-0,30,144,92,8,0,152,140,216,221,255,9,20,0,0,8,5,22,128,92,0,144,137,140,
-2,30,152,92,196,221,255,9,129,75,74,90,54,0,0,18,5,22,128,92,68,96,217,
-146,12,22,136,92,28,218,255,9,0,30,48,92,198,62,4,58,48,96,161,144,5,22,
-128,92,0,16,5,134,144,112,0,90,0,16,84,140,190,254,255,18,8,127,2,60,8,
-96,241,146,24,96,241,146,120,9,0,8,24,96,137,144,0,180,35,140,112,4,0,96,
-86,64,76,62,11,22,128,92,0,144,146,140,68,96,153,140,92,10,0,9,24,96,161,
-144,8,96,169,144,52,96,177,144,21,0,173,89,0,80,129,140,8,96,169,146,20,
-65,74,89,0,144,5,134,144,112,0,90,0,16,84,140,202,8,0,18,36,96,161,144,
-137,32,5,90,24,96,161,146,20,22,136,92,180,255,255,17,68,96,161,144,0,48,
-160,146,64,20,0,80,8,96,161,144,24,96,169,144,137,48,0,90,9,0,165,89,9,
-65,173,89,8,96,161,146,24,96,169,146,250,0,0,22,137,176,2,90,0,80,130,140,
-10,0,0,22,10,30,128,92,144,28,164,140,144,28,172,140,20,57,160,140,0,0,
-0,0,0,48,80,146,84,0,0,32,1,9,180,89,0,48,160,146,96,0,0,32,22,112,2,90,
-21,158,82,140,178,0,0,17,22,57,160,144,48,157,0,0,0,16,5,132,196,157,0,
-0,184,157,0,0,172,157,0,0,160,157,0,0,148,157,0,0,136,157,0,0,124,157,0,
-0,112,157,0,0,100,157,0,0,88,157,0,0,0,16,161,176,0,16,161,176,0,16,161,
-176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,
-16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,
-176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,
-16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,
-176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,0,16,161,176,16,
-65,74,89,16,127,2,60,0,48,160,144,64,20,0,80,28,96,81,146,68,96,161,146,
-228,7,0,8,0,0,0,0,0,180,123,140,192,4,0,64,137,48,0,90,56,96,33,144,0,30,
-104,92,34,5,0,18,0,208,163,144,0,48,232,140,255,255,0,0,148,64,63,88,146,
-0,57,61,74,32,2,61,210,5,232,140,22,64,55,54,11,22,128,92,140,16,0,11,44,
-2,0,8,0,0,0,0,52,96,161,144,5,22,128,92,0,16,5,134,144,112,0,90,0,16,84,
-140,22,0,0,21,11,22,128,92,100,16,0,11,4,2,0,8,0,0,0,0,36,96,65,144,0,48,
-80,146,68,0,0,32,0,180,163,140,240,4,0,96,0,16,133,176,0,16,165,176,1,9,
-66,89,44,160,82,140,6,80,48,89,138,48,0,90,0,208,160,144,0,208,160,144,
-0,208,160,144,196,1,0,18,0,36,161,140,148,128,38,88,120,4,0,8,14,204,161,
-89,102,32,13,58,18,32,13,49,254,33,21,58,234,34,29,58,68,4,0,8,11,22,128,
-92,244,15,0,11,34,160,1,58,5,22,128,92,0,144,137,140,0,30,144,92,8,0,152,
-140,244,218,255,9,28,0,0,8,0,0,0,0,0,48,160,144,208,243,0,0,20,80,160,89,
-0,48,160,146,208,243,0,0,159,25,32,88,0,0,64,140,0,30,48,92,20,4,0,8,0,
-0,0,0,42,160,1,61,11,22,128,92,160,15,0,11,0,48,160,144,208,243,0,0,159,
-25,32,88,1,32,165,140,0,30,64,92,228,3,0,8,0,0,0,0,142,9,161,88,135,32,
-5,90,1,160,49,140,46,0,0,18,5,22,128,92,0,144,137,140,0,30,144,92,8,0,152,
-140,120,218,255,9,11,22,128,92,0,0,48,140,84,15,0,11,20,2,0,8,0,0,0,0,11,
-22,128,92,80,224,143,140,128,14,0,11,0,48,128,144,76,20,0,80,28,12,164,
-89,20,253,151,144,76,0,0,0,60,96,169,144,0,48,232,140,0,0,255,0,26,12,36,
-89,146,64,167,88,54,0,173,58,0,48,160,144,204,243,0,0,5,22,128,92,0,144,
-137,140,0,30,144,92,8,0,152,140,20,80,160,89,0,0,48,140,0,48,160,146,204,
-243,0,0,0,218,255,9,168,1,0,8,146,208,160,88,44,0,232,140,20,57,160,144,
-96,82,0,0,134,64,175,112,0,48,232,140,255,255,0,0,146,64,63,88,4,9,33,89,
-7,0,165,89,4,124,173,140,208,255,255,255,58,64,165,58,0,48,160,144,204,
-243,0,0,5,22,128,92,0,144,137,140,0,30,144,92,8,0,152,140,20,80,160,89,
-0,0,48,140,0,48,160,146,204,243,0,0,156,217,255,9,68,1,0,8,0,0,0,0,66,32,
-2,61,48,96,161,144,5,22,128,92,0,16,5,134,144,112,0,90,0,16,84,140,42,0,
-0,21,5,22,128,92,0,144,137,140,0,30,144,92,8,0,152,140,100,217,255,9,0,
-30,48,92,159,25,32,88,164,2,0,8,0,0,0,0,26,32,1,58,4,208,128,89,2,12,132,
-89,0,144,138,140,80,224,151,140,228,221,255,11,5,22,128,92,0,144,137,140,
-7,22,144,92,2,0,152,140,204,0,0,8,0,0,0,0,26,160,1,58,11,22,128,92,0,14,
-0,11,5,22,128,92,0,144,137,140,168,0,0,8,5,22,128,92,0,16,139,140,112,213,
-255,9,38,32,4,61,11,22,128,92,220,13,0,11,0,48,160,144,208,243,0,0,20,80,
-160,89,159,25,32,88,36,2,0,8,0,0,0,0,48,96,161,144,5,22,128,92,0,16,5,134,
-144,112,0,90,0,16,84,140,46,0,0,21,12,96,129,144,12,214,255,9,11,22,128,
-92,156,13,0,11,0,48,160,144,208,243,0,0,20,80,160,89,159,25,32,88,228,1,
-0,8,0,0,0,0,0,208,163,144,11,22,128,92,0,48,232,140,0,0,255,0,148,64,167,
-88,0,144,138,140,60,96,161,146,60,12,0,9,144,48,0,90,0,16,84,140,42,0,0,
-21,5,22,128,92,0,0,136,140,0,30,144,92,8,0,152,140,0,30,48,92,88,216,255,
-9,0,30,64,92,159,25,32,88,152,1,0,8,32,96,169,144,0,228,161,140,148,128,
-38,88,1,0,48,140,1,73,69,89,128,1,0,8,38,160,1,58,5,22,128,92,0,144,137,
-140,0,30,144,92,8,0,152,140,28,216,255,9,0,30,48,92,0,0,64,140,159,25,32,
-88,11,22,128,92,80,224,143,140,140,12,0,11,0,48,128,144,76,20,0,80,26,12,
-60,89,64,225,1,58,28,12,164,89,20,253,151,144,76,0,0,0,80,224,167,144,0,
-48,232,140,0,0,255,0,146,64,175,88,148,64,167,88,40,0,173,61,146,208,160,
-88,20,57,176,144,96,82,0,0,0,48,232,140,255,255,0,0,146,64,55,88,8,201,
-169,89,6,128,165,89,46,64,165,58,0,48,160,144,204,243,0,0,0,30,48,92,0,
-0,64,140,20,80,160,89,159,25,32,88,0,48,160,146,204,243,0,0,212,0,0,8,0,
-0,0,0,22,16,162,89,20,193,57,89,0,80,129,140,12,22,136,92,224,211,255,9,
-38,32,4,61,0,48,160,144,208,243,0,0,0,30,48,92,0,0,64,140,20,80,160,89,
-159,25,32,88,148,0,0,8,0,0,0,0,48,96,161,144,5,22,128,92,0,16,5,134,144,
-112,0,90,0,16,84,140,54,0,0,21,0,48,160,144,208,243,0,0,20,80,160,89,0,
-48,160,146,208,243,0,0,12,96,129,144,0,30,48,92,0,0,64,140,159,25,32,88,
-92,212,255,9,84,0,0,8,0,0,0,0,7,208,128,89,2,12,132,89,0,144,138,140,84,
-224,151,140,152,219,255,11,5,22,128,92,1,0,136,140,6,22,144,92,2,0,152,
-140,220,214,255,9,0,30,48,92,32,0,0,8,11,22,128,92,180,11,0,11,0,48,160,
-144,208,243,0,0,20,80,160,89,0,48,160,146,208,243,0,0,13,80,104,89,232,
-90,106,52,8,96,49,146,28,96,81,146,24,96,65,146,56,96,33,146,152,2,0,8,
-76,96,161,144,50,0,101,58,42,160,1,59,8,96,137,144,134,156,145,140,18,58,
-144,140,0,0,0,0,5,22,128,92,2,0,152,140,116,214,255,9,8,96,241,146,24,96,
-241,146,76,96,97,146,98,98,2,59,24,96,161,144,230,32,5,61,8,96,161,144,
-134,32,5,61,5,22,128,92,0,16,139,140,184,210,255,9,14,34,4,58,72,96,169,
-144,32,96,161,144,26,0,173,62,52,96,161,144,5,22,128,92,0,16,5,134,36,96,
-161,144,20,0,0,8,48,96,161,144,5,22,128,92,0,16,5,134,32,96,161,144,24,
-96,161,146,16,22,80,92,146,32,12,61,0,48,160,144,184,243,0,0,9,0,165,89,
-0,48,160,146,184,243,0,0,12,96,129,144,60,211,255,9,11,22,128,92,0,80,138,
-140,184,5,0,11,24,96,241,146,212,1,0,8,0,0,0,0,52,96,161,144,5,22,128,92,
-0,16,5,134,144,112,0,90,0,16,84,140,62,0,0,21,0,48,160,144,184,243,0,0,
-11,22,128,92,9,0,165,89,0,80,138,140,0,48,160,146,184,243,0,0,116,5,0,11,
-8,96,137,144,5,22,128,92,0,0,144,140,2,30,152,92,136,213,255,9,8,96,241,
-146,36,96,161,144,24,96,161,146,8,96,177,144,72,96,169,144,9,22,32,92,9,
-128,165,89,10,64,165,60,22,65,37,89,24,96,137,144,4,65,74,89,130,64,36,
-62,11,22,128,92,0,144,146,140,68,96,153,140,72,2,0,9,24,96,161,144,8,96,
-169,144,52,96,177,144,21,0,173,89,0,80,129,140,8,96,169,146,20,1,33,89,
-0,144,5,134,144,112,0,90,0,16,84,140,54,0,0,21,8,96,137,144,5,22,128,92,
-0,0,144,140,8,30,152,92,8,213,255,9,11,22,128,92,0,16,137,140,212,4,0,11,
-24,96,241,146,8,96,241,146,16,0,0,8,0,0,0,0,36,96,161,144,24,96,161,146,
-24,96,137,144,136,95,36,57,30,32,1,58,11,22,128,92,0,16,137,140,10,22,144,
-92,68,96,153,140,196,1,0,9,16,22,80,92,8,96,161,144,72,96,169,144,4,0,141,
-89,8,96,137,146,46,64,141,61,145,92,148,140,18,58,144,140,0,0,0,0,5,22,
-128,92,2,0,152,140,148,212,255,9,8,96,241,146,24,96,241,146,24,0,0,8,0,
-0,0,0,24,96,161,144,28,96,81,146,4,1,165,89,24,96,161,146,16,126,2,60,104,
-0,0,8,8,96,137,144,5,22,128,92,0,0,144,140,8,30,152,92,88,212,255,9,11,
-22,128,92,0,80,138,140,36,4,0,11,24,96,241,146,8,96,241,146,60,0,0,8,0,
-0,0,0,0,48,160,144,184,243,0,0,11,22,128,92,9,0,165,89,0,80,138,140,0,48,
-160,146,184,243,0,0,244,3,0,11,20,0,0,8,0,0,0,0,11,22,128,92,0,80,138,140,
-224,3,0,11,0,16,166,144,48,51,5,61,11,80,88,89,11,240,0,90,4,32,198,140,
-0,225,24,140,0,97,206,140,12,243,255,22,0,116,192,176,240,255,255,255,0,
-0,0,10,0,0,0,0,0,0,0,0,12,32,36,144,4,29,129,140,16,58,128,140,0,0,0,0,
-112,16,0,9,0,48,128,146,224,193,3,0,14,32,4,61,8,30,128,92,0,0,0,10,0,48,
-128,144,224,193,3,0,4,29,41,140,5,58,40,140,0,0,0,0,5,22,136,92,224,24,
-0,9,1,9,161,89,0,48,240,146,100,180,3,0,0,48,160,146,96,180,3,0,110,32,
-1,59,0,47,1,90,0,0,176,140,40,0,0,16,0,48,168,144,224,193,3,0,80,0,176,
-140,150,96,1,90,9,0,184,140,4,96,189,146,159,25,184,88,56,96,189,146,62,
-0,0,19,9,30,144,92,159,25,152,88,0,48,168,144,224,193,3,0,22,64,165,89,
-4,32,149,146,56,32,157,146,21,188,165,140,80,0,0,0,160,160,181,140,150,
-96,1,90,4,32,149,146,56,32,157,146,212,255,255,20,2,30,128,92,0,0,0,10,
-0,0,0,0,0,208,172,144,17,58,160,140,0,0,0,0,17,57,136,140,0,0,0,0,17,1,
-237,89,127,0,64,140,29,32,2,90,0,48,168,146,64,20,0,80,190,0,0,22,8,14,
-164,89,0,52,141,140,112,4,0,96,135,25,72,88,127,0,80,140,0,48,144,146,84,
-0,0,32,0,48,72,146,96,0,0,32,0,80,164,176,0,80,164,176,0,80,164,176,0,80,
-164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,
-0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,
-176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,
-80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,
-176,0,80,164,176,0,80,164,176,0,80,164,176,0,116,239,140,128,255,255,255,
-0,162,148,140,29,160,2,90,0,80,164,176,0,80,164,176,0,80,164,176,96,255,
-255,17,63,0,64,140,114,0,234,54,0,48,144,146,84,0,0,32,134,25,64,88,0,48,
-64,146,96,0,0,32,8,14,164,89,0,52,165,140,112,4,0,96,0,16,37,176,0,16,37,
-176,0,16,37,176,0,16,37,176,0,16,37,176,0,16,37,176,0,16,37,176,0,16,37,
-176,0,16,37,176,0,16,37,176,0,16,37,176,0,16,37,176,0,16,37,176,0,161,148,
-140,0,116,239,140,192,255,255,255,0,16,37,176,0,16,37,176,0,16,165,176,
-82,96,255,51,0,48,144,146,84,0,0,32,31,88,64,89,0,48,64,146,96,0,0,32,8,
-14,164,89,0,52,165,140,112,4,0,96,0,16,37,176,0,16,37,176,0,16,37,176,0,
-16,37,176,0,16,37,176,128,160,148,140,0,116,239,140,224,255,255,255,0,16,
-37,176,0,16,37,176,0,16,165,176,58,96,191,51,0,48,144,146,80,0,0,32,8,14,
-164,89,0,52,165,140,112,4,0,96,0,16,37,176,0,16,37,176,0,16,37,176,96,160,
-148,140,24,73,239,89,0,16,37,176,0,16,37,176,0,16,165,176,46,96,95,51,8,
-14,164,89,0,48,144,146,72,0,0,32,0,52,165,140,112,4,0,96,48,160,148,140,
-12,73,239,89,0,16,37,176,0,16,37,176,0,16,165,176,46,96,31,51,8,14,164,
-89,0,52,141,140,112,4,0,96,0,48,144,146,64,0,0,32,4,73,239,89,16,160,148,
-140,29,240,0,90,0,80,164,176,232,255,255,17,46,96,7,58,8,14,132,89,0,52,
-132,140,124,4,0,96,0,48,144,146,56,0,0,32,1,73,239,89,4,160,148,140,157,
-48,0,90,0,16,164,144,232,255,255,21,0,48,160,144,64,20,0,80,18,22,128,92,
-0,208,164,146,0,0,0,10,0,0,0,0,0,0,0,0,0,48,240,140,144,169,0,0,30,22,144,
-92,0,0,240,140,8,78,140,89,0,116,140,140,64,4,0,64,0,80,164,176,0,16,164,
-178,0,80,164,176,16,16,132,89,0,16,164,178,0,80,164,176,16,16,132,89,0,
-16,164,178,0,144,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,240,140,224,
-169,0,0,30,22,152,92,0,0,240,140,8,14,132,89,145,48,0,90,0,80,148,140,0,
-52,132,140,64,4,0,64,26,0,0,18,0,16,164,176,0,16,164,176,1,137,148,89,0,
-16,164,176,240,191,4,61,0,208,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,55,
-160,172,140,31,88,76,89,137,69,173,116,1,25,72,89,0,48,72,146,64,12,0,80,
-0,48,160,144,0,244,0,0,8,206,236,89,0,48,184,144,240,243,0,0,17,22,56,92,
-0,144,53,140,20,80,160,89,145,48,0,90,0,48,160,146,0,244,0,0,21,192,173,
-89,0,48,168,146,240,243,0,0,0,116,135,146,64,8,0,64,0,116,71,140,64,0,0,
-112,0,30,232,92,2,222,87,89,255,0,88,140,146,0,0,22,4,160,161,144,0,144,
-41,144,6,16,50,89,1,201,57,89,130,13,37,89,118,32,1,58,29,129,170,89,4,
-96,5,90,0,16,161,140,10,0,0,22,21,22,160,92,29,0,237,89,0,48,40,146,48,
-0,0,32,20,1,33,89,0,48,160,146,96,0,0,32,29,240,2,90,20,93,41,140,202,255,
-255,22,0,48,160,128,8,0,0,16,148,192,138,88,34,96,92,51,0,16,162,176,12,
-73,140,89,0,16,162,176,17,240,2,90,0,16,162,176,12,73,239,89,232,255,255,
-17,212,127,95,52,148,255,255,8,0,0,0,0,120,255,1,60,255,0,72,140,0,48,160,
-128,8,0,0,16,148,64,162,88,244,95,167,52,18,98,95,52,29,57,160,144,16,171,
-0,0,0,16,5,132,96,171,0,0,208,172,0,0,176,172,0,0,136,172,0,0,104,172,0,
-0,64,172,0,0,24,172,0,0,240,171,0,0,200,171,0,0,160,171,0,0,128,171,0,0,
-64,171,0,0,0,16,162,176,0,16,162,176,0,16,162,152,8,206,164,89,0,16,170,
-144,0,52,165,140,64,0,0,64,0,16,245,146,8,206,164,89,129,9,132,88,0,52,
-133,146,64,8,0,64,0,52,165,140,64,0,0,64,0,16,245,146,112,1,0,8,8,206,164,
-89,129,9,132,88,0,52,133,146,64,8,0,64,0,16,162,176,0,16,162,176,0,16,162,
-152,116,1,0,8,8,206,164,89,129,9,132,88,0,52,133,146,64,8,0,64,0,16,34,
-176,0,52,165,140,64,0,0,64,0,16,34,176,0,16,170,144,72,1,0,8,8,206,164,
-89,129,9,132,88,0,52,133,146,64,8,0,64,0,16,34,176,0,52,165,140,64,0,0,
-64,0,16,34,176,32,1,0,8,0,0,0,0,8,206,164,89,129,9,132,88,0,52,133,146,
-64,8,0,64,0,16,34,176,0,16,178,152,0,16,170,144,0,52,165,140,64,0,0,64,
-240,0,0,8,8,206,164,89,129,9,132,88,0,52,133,146,64,8,0,64,0,16,34,176,
-0,16,178,152,0,52,165,140,64,0,0,64,200,0,0,8,0,0,0,0,8,206,164,89,129,
-9,132,88,0,52,133,146,64,8,0,64,0,16,34,176,0,16,170,144,0,52,165,140,64,
-0,0,64,156,0,0,8,0,0,0,0,8,206,164,89,129,9,132,88,0,52,133,146,64,8,0,
-64,0,16,34,176,0,52,165,140,64,0,0,64,116,0,0,8,8,206,164,89,129,9,132,
-88,0,52,133,146,64,8,0,64,0,16,178,152,0,16,170,144,0,52,165,140,64,0,0,
-64,76,0,0,8,0,0,0,0,8,206,164,89,129,9,132,88,0,52,133,146,64,8,0,64,0,
-16,178,152,0,52,165,140,64,0,0,64,36,0,0,8,8,206,164,89,129,9,132,88,0,
-52,133,146,64,8,0,64,0,16,170,144,0,52,165,140,64,0,0,64,0,16,245,146,0,
-16,245,146,0,16,245,146,0,16,245,146,0,16,245,146,0,16,245,146,0,16,245,
-146,0,16,245,146,0,16,245,146,8,206,156,89,0,244,156,140,64,0,0,64,0,208,
-148,146,0,48,160,144,64,12,0,80,20,21,160,88,0,208,164,146,0,0,0,10,0,0,
-0,0,0,0,0,0,0,0,0,0,0,48,240,140,136,173,0,0,30,22,144,92,0,0,240,140,1,
-9,132,89,1,25,168,89,42,64,133,58,8,78,140,89,0,116,164,140,80,8,0,64,0,
-116,140,140,96,8,0,64,0,16,245,146,1,9,132,89,0,80,244,146,244,95,133,61,
-0,144,4,132,0,0,0,0,0,0,0,10,0,0,0,0,0,48,136,146,64,0,0,32,8,14,172,89,
-0,116,181,140,240,4,0,96,0,144,37,176,17,16,164,89,0,48,160,146,64,0,0,
-32,0,144,37,176,32,96,132,140,0,48,128,146,56,0,0,32,0,116,173,140,252,
-4,0,96,16,16,129,89,0,80,165,144,0,48,128,146,56,0,0,32,16,16,129,89,0,
-80,165,144,0,0,0,10,0,0,0,0,0,0,0,0,0,48,240,140,64,174,0,0,30,22,144,92,
-0,0,240,140,8,14,132,89,0,52,132,140,192,4,0,64,0,16,164,144,1,30,176,92,
-4,96,172,140,0,80,164,146,0,16,164,144,0,80,165,146,0,16,164,144,22,144,
-176,89,150,176,2,90,4,96,165,146,21,16,170,89,228,255,255,22,0,144,4,132,
-0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,240,140,160,174,0,0,30,22,144,92,
-0,0,240,140,8,14,132,89,0,52,132,140,192,4,0,64,0,16,164,144,1,30,176,92,
-4,96,172,140,0,80,164,146,0,16,164,144,0,80,165,146,0,16,164,144,22,144,
-176,89,150,176,2,90,4,96,165,146,21,16,170,89,228,255,255,22,0,144,4,132,
-0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,240,140,232,174,0,0,30,22,136,92,
-0,0,240,140,8,14,132,89,0,52,132,140,192,4,0,64,0,16,164,176,0,16,164,176,
-0,16,164,144,0,16,164,144,0,16,164,144,0,80,4,132,0,0,0,0,0,0,0,10,0,0,
-0,0,21,22,80,92,48,0,232,140,0,48,184,144,176,243,0,0,157,133,172,116,0,
-208,92,140,8,206,156,89,3,160,148,140,21,192,173,89,130,141,68,89,0,48,
-168,146,176,243,0,0,0,244,132,146,64,8,0,64,22,22,72,92,148,48,0,90,0,144,
-181,152,20,22,96,92,0,0,32,140,0,244,52,140,64,0,0,112,0,30,128,92,130,
-205,45,89,0,144,61,140,162,0,0,21,136,48,0,90,2,222,119,89,255,0,24,140,
-138,0,0,22,22,96,1,61,9,16,74,89,0,80,162,152,130,77,45,89,0,16,61,140,
-4,129,171,89,133,96,5,90,0,80,161,140,10,0,0,22,21,22,160,92,4,0,37,89,
-20,1,66,89,0,48,56,146,48,0,0,32,20,65,41,89,0,48,160,146,96,0,0,32,132,
-240,2,90,20,221,57,140,54,0,0,22,0,48,160,128,8,0,0,16,28,0,0,8,0,144,161,
-176,0,144,161,176,0,144,161,176,0,48,160,128,8,0,0,16,12,9,33,89,148,192,
-160,88,228,63,93,52,212,63,89,60,128,63,2,60,0,0,0,10,0,0,0,0,136,48,0,
-90,2,222,111,89,255,0,120,140,158,0,0,22,22,96,1,61,9,16,74,89,0,80,162,
-152,130,77,45,89,0,16,61,140,4,65,171,89,133,96,5,90,0,80,161,140,10,0,
-0,22,21,22,160,92,4,0,37,89,20,1,66,89,0,48,56,146,48,0,0,32,20,65,41,89,
-0,48,160,146,96,0,0,32,132,240,2,90,20,221,57,140,74,0,0,22,48,0,0,8,0,
-0,0,0,0,144,161,176,16,80,128,89,0,144,161,176,144,32,3,90,0,144,161,176,
-12,9,33,89,18,0,0,21,10,22,128,93,208,252,255,11,0,30,128,92,0,48,160,128,
-8,0,0,16,148,192,163,88,204,63,93,52,240,63,89,60,108,63,2,60,10,22,128,
-93,164,252,255,8,0,30,32,92,0,16,36,146,132,73,140,89,16,16,129,89,244,
-127,36,62,0,0,0,10,0,0,0,0,0,0,0,0,16,72,8,89,0,116,192,178,240,255,255,
-255,18,208,136,89,4,25,216,89,145,192,142,88,51,96,188,140,31,88,219,89,
-155,197,189,112,0,80,197,140,0,48,168,144,212,243,0,0,0,48,232,144,192,
-243,0,0,18,22,208,92,1,96,173,140,19,22,120,92,0,48,168,146,212,243,0,0,
-23,64,191,89,0,48,184,146,192,243,0,0,20,22,24,92,130,77,84,89,0,144,37,
-152,22,22,104,92,0,0,232,140,17,16,114,89,2,222,223,89,130,77,73,89,137,
-224,6,90,0,80,138,140,10,0,0,22,2,222,143,89,18,208,144,89,4,25,216,89,
-146,192,150,88,0,48,184,144,112,82,0,0,17,22,64,92,44,0,216,140,14,224,
-6,90,0,48,168,144,116,82,0,0,255,3,216,140,23,80,184,89,151,192,190,88,
-0,48,216,140,0,0,255,255,149,192,174,88,0,48,216,140,255,255,255,0,0,48,
-32,146,48,0,0,32,149,131,172,88,0,116,173,140,0,0,1,0,149,192,182,88,0,
-48,216,140,0,0,255,0,0,48,136,146,96,0,0,32,17,129,82,89,17,29,97,140,17,
-65,74,89,0,48,184,146,112,82,0,0,0,48,176,146,116,82,0,0,149,192,206,88,
-250,0,0,17,42,160,2,59,13,16,106,89,0,80,163,152,130,77,77,89,0,48,160,
-146,48,0,0,32,9,129,82,89,0,48,72,146,96,0,0,32,224,191,2,60,8,206,36,89,
-0,52,161,140,64,8,0,64,0,16,133,146,0,48,160,144,112,82,0,0,0,48,176,144,
-116,82,0,0,14,222,216,89,148,195,166,88,0,52,169,140,192,0,0,64,0,48,160,
-146,76,12,0,80,0,80,181,146,80,206,255,9,0,48,160,128,8,0,0,16,30,32,5,
-58,0,52,153,140,192,0,0,112,0,208,164,144,0,48,160,128,8,0,0,16,244,63,
-5,61,8,206,163,89,153,131,182,88,44,0,216,140,14,193,174,89,0,52,165,140,
-192,0,0,64,2,76,173,89,0,16,181,146,149,48,0,90,0,0,176,140,34,0,0,18,12,
-96,5,48,1,30,176,92,12,0,0,8,0,16,245,146,22,144,176,89,0,16,245,146,244,
-95,181,52,8,206,163,89,26,142,171,89,0,52,165,140,192,0,0,64,0,16,173,146,
-0,116,192,176,240,255,255,255,0,0,0,10,145,112,2,90,2,222,223,89,78,0,0,
-17,13,16,106,89,0,80,35,152,8,193,190,89,130,77,73,89,137,224,5,90,0,80,
-138,140,10,0,0,22,23,22,136,92,8,64,68,89,17,65,74,89,0,48,32,146,48,0,
-0,32,17,129,82,89,0,48,136,146,96,0,0,32,136,112,2,90,17,29,97,140,188,
-255,255,22,0,48,184,144,112,82,0,0,8,206,180,89,0,180,173,140,64,8,0,64,
-0,80,133,146,0,48,168,144,116,82,0,0,255,0,216,140,143,201,93,88,0,180,
-181,140,192,0,0,64,0,48,88,146,76,12,0,80,0,144,173,146,0,48,168,128,8,
-0,0,16,149,192,174,88,244,127,77,51,8,206,180,89,0,180,173,140,192,0,0,
-112,0,80,37,176,0,80,37,176,148,48,0,90,0,80,165,152,0,180,181,140,192,
-0,0,64,0,48,216,140,0,0,0,176,10,9,66,89,0,144,221,146,0,180,115,140,212,
-255,255,255,230,1,0,21,14,160,2,61,31,88,219,89,252,193,118,54,82,160,2,
-59,22,96,2,61,13,16,106,89,0,80,163,152,130,77,77,89,0,16,101,140,2,222,
-223,89,8,193,166,89,137,32,5,90,0,80,138,140,10,0,0,22,20,22,136,92,8,64,
-68,89,0,48,96,146,48,0,0,32,17,65,74,89,17,29,99,140,17,129,82,89,0,48,
-136,146,96,0,0,32,134,32,82,59,8,206,164,89,0,52,133,140,192,0,0,112,0,
-52,141,140,192,0,0,64,0,48,160,128,8,0,0,16,255,0,216,140,84,0,0,8,0,0,
-0,0,0,228,162,140,0,48,216,140,255,63,0,0,148,192,94,88,0,48,88,146,76,
-12,0,80,0,16,164,176,0,16,164,176,0,16,164,152,0,16,164,144,0,48,216,140,
-0,0,0,176,0,80,220,146,0,48,160,128,8,0,0,16,255,0,216,140,11,9,66,89,0,
-180,115,140,212,255,255,255,148,192,166,88,176,63,85,52,152,63,82,60,46,
-191,2,61,31,88,219,89,36,223,118,49,24,1,0,8,82,160,2,59,22,96,2,61,13,
-16,106,89,0,80,163,152,130,77,77,89,0,16,101,140,2,222,223,89,8,193,166,
-89,137,32,5,90,0,80,138,140,10,0,0,22,20,22,136,92,8,64,68,89,0,48,96,146,
-48,0,0,32,17,65,74,89,17,29,99,140,17,129,82,89,0,48,136,146,96,0,0,32,
-162,32,82,59,8,206,163,89,0,52,37,140,192,0,0,112,0,52,53,140,192,0,0,64,
-0,48,160,128,8,0,0,16,255,0,216,140,148,192,166,88,118,32,85,51,0,160,41,
-140,29,80,232,89,22,192,232,61,24,22,128,92,0,208,139,140,24,248,255,11,
-0,30,232,92,0,228,162,140,0,48,216,140,255,63,0,0,148,192,94,88,0,48,88,
-146,76,12,0,80,0,16,161,176,0,16,161,176,0,16,161,152,0,16,161,144,0,48,
-216,140,0,0,0,176,0,80,217,146,0,48,160,128,8,0,0,16,255,0,216,140,11,9,
-66,89,0,180,115,140,212,255,255,255,148,192,166,88,152,63,85,52,124,63,
-82,60,18,191,2,61,31,88,219,89,8,223,118,49,29,80,232,89,22,192,232,61,
-24,22,128,92,0,208,139,140,156,247,255,11,0,30,232,92,0,228,162,140,0,48,
-216,140,255,63,0,0,148,192,166,88,142,9,165,88,0,48,160,146,76,12,0,80,
-255,0,216,140,0,48,160,128,8,0,0,16,148,192,166,88,244,31,162,60,0,48,160,
-128,8,0,0,16,34,32,5,58,8,206,163,89,0,52,173,140,192,0,0,112,0,80,165,
-144,0,48,160,128,8,0,0,16,244,63,5,61,8,206,163,89,153,131,182,88,44,0,
-216,140,14,193,174,89,2,76,173,89,0,52,165,140,192,0,0,64,1,73,173,89,1,
-25,216,89,0,16,181,146,18,192,174,58,1,73,173,89,0,16,245,146,248,223,174,
-61,8,206,163,89,26,142,171,89,0,52,165,140,192,0,0,64,0,16,173,146,26,224,
-0,58,29,80,232,89,18,192,232,61,24,22,128,92,0,208,139,140,220,246,255,
-11,0,116,192,176,240,255,255,255,0,0,0,10,0,0,0,0,0,48,160,144,124,82,0,
-0,16,16,180,89,0,48,184,140,0,192,2,0,0,48,32,144,120,82,0,0,22,0,165,89,
-18,192,165,62,0,30,128,92,0,0,0,10,0,0,0,0,0,48,168,144,120,82,0,0,0,48,
-160,144,124,82,0,0,4,22,128,92,0,144,141,140,21,188,173,140,0,0,0,0,22,
-0,165,89,0,48,168,146,120,82,0,0,0,48,160,146,124,82,0,0,60,8,0,9,4,208,
-131,89,16,25,184,89,144,192,133,88,0,32,132,140,0,0,0,10,0,0,0,0,0,48,160,
-140,128,82,0,0,20,16,153,89,3,32,149,140,0,48,136,140,0,4,0,136,0,30,128,
-92,0,0,232,140,255,0,104,140,135,25,112,88,0,16,173,128,36,96,5,58,0,80,
-172,144,0,144,180,128,0,208,188,128,8,76,173,89,149,128,173,88,149,64,171,
-88,8,192,173,58,16,80,128,89,8,32,173,128,36,96,5,58,4,96,172,144,8,160,
-180,128,8,224,188,128,8,76,173,89,149,128,173,88,149,64,171,88,8,192,173,
-58,16,80,128,89,16,32,173,128,36,96,5,58,8,96,172,144,16,160,180,128,16,
-224,188,128,8,76,173,89,149,128,173,88,149,64,171,88,8,192,173,58,16,80,
-128,89,29,208,232,89,157,160,3,90,12,96,140,140,20,16,166,89,24,224,156,
-140,18,16,150,89,112,255,255,22,14,32,4,58,0,30,128,92,0,0,0,10,0,30,80,
-92,0,0,72,140,0,30,32,92,0,0,40,140,0,30,48,92,52,1,0,9,0,30,64,92,0,0,
-56,140,0,48,64,154,128,243,0,0,0,48,32,178,112,243,0,0,1,30,128,92,0,48,
-240,146,136,243,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,48,240,140,152,184,0,0,30,
-22,152,92,0,0,240,140,135,25,184,88,14,192,133,54,0,30,128,92,0,208,4,132,
-144,57,168,140,128,82,0,0,0,80,165,128,14,32,5,61,0,30,128,92,0,208,4,132,
-2,96,165,128,255,0,184,140,16,57,176,140,0,4,0,136,145,0,141,88,145,192,
-141,88,8,78,164,89,146,48,0,90,0,144,165,146,38,0,0,18,0,144,165,144,1,
-96,173,128,8,12,165,89,148,64,165,88,148,192,165,88,14,64,164,58,0,30,128,
-92,0,208,4,132,1,30,128,92,0,208,4,132,0,0,0,10,0,0,0,0,0,48,240,140,0,
-185,0,0,30,22,144,92,0,0,240,140,135,25,176,88,14,128,133,54,0,30,128,92,
-0,144,4,132,144,57,168,140,128,82,0,0,0,80,165,128,14,32,5,61,0,30,128,
-92,0,144,4,132,16,57,128,140,0,4,0,136,0,16,164,144,1,96,173,128,8,12,165,
-89,148,64,165,88,1,0,128,140,0,80,164,130,0,144,4,132,0,0,0,0,0,0,0,10,
-0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,89,0,48,160,128,64,84,0,0,1,30,136,92,64,
-224,143,130,32,32,5,58,0,48,160,128,66,84,0,0,136,25,136,88,8,14,165,89,
-148,64,164,88,0,48,160,146,224,4,0,136,232,3,128,140,160,5,0,11,0,48,160,
-128,16,83,0,0,32,32,5,58,0,48,160,144,72,4,0,136,0,48,168,128,17,83,0,0,
-8,12,165,89,148,64,165,88,64,224,167,130,0,48,160,128,24,83,0,0,65,224,
-183,140,32,32,5,58,0,48,160,144,76,4,0,136,0,48,168,128,25,83,0,0,8,12,
-165,89,148,64,165,88,0,144,165,130,65,224,167,128,64,224,175,128,0,48,176,
-144,112,243,0,0,0,48,184,128,80,83,0,0,8,14,165,89,148,67,165,88,20,128,
-165,89,0,48,160,146,112,243,0,0,32,224,5,58,0,48,160,144,104,4,0,136,0,
-48,168,128,81,83,0,0,8,12,165,89,148,64,165,88,64,224,167,130,0,48,160,
-128,88,83,0,0,66,224,183,140,32,32,5,58,0,48,160,144,108,4,0,136,0,48,168,
-128,89,83,0,0,8,12,165,89,148,64,165,88,0,144,165,130,0,48,160,128,96,83,
-0,0,65,224,183,140,32,32,5,58,0,48,160,144,112,4,0,136,0,48,168,128,97,
-83,0,0,8,12,165,89,148,64,165,88,0,144,165,130,65,224,167,128,66,224,175,
-128,64,224,183,128,0,48,184,144,120,243,0,0,0,48,128,128,104,83,0,0,16,
-14,165,89,8,78,173,89,148,67,165,88,148,131,165,88,20,192,165,89,0,48,160,
-146,120,243,0,0,32,32,4,58,0,48,160,144,116,4,0,136,0,48,168,128,105,83,
-0,0,8,12,165,89,148,64,165,88,64,224,167,130,0,48,160,128,112,83,0,0,66,
-224,183,140,32,32,5,58,0,48,160,144,120,4,0,136,0,48,168,128,113,83,0,0,
-8,12,165,89,148,64,165,88,0,144,165,130,0,48,160,128,120,83,0,0,65,224,
-183,140,32,32,5,58,0,48,160,144,124,4,0,136,0,48,168,128,121,83,0,0,8,12,
-165,89,148,64,165,88,0,144,165,130,65,224,167,128,66,224,175,128,64,224,
-183,128,0,48,184,144,124,243,0,0,0,48,128,128,64,84,0,0,16,14,165,89,8,
-78,173,89,148,67,165,88,148,131,165,88,20,192,165,89,0,48,160,146,124,243,
-0,0,32,32,4,58,0,48,160,144,224,4,0,136,0,48,168,128,65,84,0,0,8,12,165,
-89,148,64,165,88,64,224,167,130,0,48,160,128,72,84,0,0,65,224,183,140,32,
-32,5,58,0,48,160,144,228,4,0,136,0,48,168,128,73,84,0,0,8,12,165,89,148,
-64,165,88,0,144,165,130,65,224,167,128,64,224,175,128,0,48,176,144,116,
-243,0,0,0,48,184,128,80,84,0,0,8,14,165,89,148,67,165,88,20,128,165,89,
-0,48,160,146,116,243,0,0,32,224,5,58,0,48,160,144,232,4,0,136,0,48,168,
-128,81,84,0,0,8,12,165,89,148,64,165,88,64,224,167,130,0,48,160,128,88,
-84,0,0,65,224,183,140,32,32,5,58,0,48,160,144,236,4,0,136,0,48,168,128,
-89,84,0,0,8,12,165,89,148,64,165,88,0,144,165,130,65,224,167,128,64,224,
-135,128,0,48,176,144,128,243,0,0,255,0,136,140,0,48,184,128,40,85,0,0,8,
-14,165,89,144,64,172,88,148,67,165,88,20,128,165,89,0,48,160,146,128,243,
-0,0,32,224,5,58,0,48,160,128,42,85,0,0,144,0,165,88,148,64,164,88,8,14,
-165,89,0,48,160,146,84,5,0,136,232,3,128,140,160,2,0,11,0,48,160,128,32,
-85,0,0,148,48,0,90,65,224,183,140,32,0,0,18,0,48,160,144,80,5,0,136,0,48,
-168,128,33,85,0,0,8,12,165,89,148,64,165,88,0,144,165,130,65,224,167,128,
-0,48,168,144,132,243,0,0,0,48,176,128,40,85,0,0,20,64,165,89,65,224,191,
-140,0,48,160,146,132,243,0,0,32,160,5,58,0,48,160,144,84,5,0,136,0,48,168,
-128,41,85,0,0,8,12,165,89,148,64,165,88,0,208,165,130,65,224,167,128,0,
-48,168,144,136,243,0,0,20,64,165,89,0,48,160,146,136,243,0,0,0,0,0,10,0,
-0,0,0,0,48,240,140,32,190,0,0,30,22,152,92,0,0,240,140,16,72,8,89,0,16,
-164,144,0,16,172,144,0,48,144,140,0,0,255,0,149,128,172,88,255,0,144,140,
-0,16,180,144,8,12,189,89,144,77,141,89,151,128,172,88,135,25,144,88,24,
-140,133,89,14,128,172,54,0,30,176,92,64,0,0,8,149,57,176,140,128,82,0,0,
-0,144,165,128,14,32,5,61,0,30,176,92,40,0,0,8,21,57,160,140,0,4,0,136,0,
-16,165,144,1,160,173,128,8,12,165,89,148,64,165,88,1,0,176,140,0,116,160,
-130,240,255,255,255,22,160,5,61,0,30,128,92,16,73,8,89,0,208,4,132,0,0,
-0,0,16,73,176,89,0,144,165,128,145,0,172,88,255,0,144,140,151,128,188,88,
-135,25,144,88,16,1,165,88,148,67,141,88,23,160,4,90,0,144,141,130,80,0,
-0,17,151,57,128,140,128,82,0,0,0,16,164,128,64,32,5,58,2,32,172,128,255,
-0,144,140,23,57,176,140,0,4,0,136,145,64,173,88,149,128,172,88,8,78,165,
-89,0,144,165,146,0,144,165,144,1,32,180,128,1,30,184,92,8,12,165,89,148,
-128,165,88,148,128,164,88,10,64,165,58,0,30,184,92,22,224,5,61,0,30,128,
-92,16,73,8,89,0,208,4,132,0,0,0,0,1,30,128,92,16,73,8,89,0,208,4,132,0,
-0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,160,140,240,193,3,0,20,22,128,
-92,0,48,184,140,0,4,0,136,0,48,176,140,128,82,0,0,0,30,136,92,255,0,152,
-140,1,25,232,89,135,25,144,88,0,144,173,128,18,96,5,61,0,16,237,146,24,
-0,0,8,0,0,0,0,0,208,173,144,8,76,173,89,149,192,172,88,0,16,172,146,8,160,
-173,128,14,96,5,61,4,32,237,146,20,0,0,8,4,224,173,144,8,76,173,89,149,
-192,172,88,4,32,172,146,16,160,173,128,14,96,5,61,8,32,237,146,20,0,0,8,
-8,224,173,144,8,76,173,89,149,192,172,88,8,32,172,146,17,208,136,89,145,
-160,4,90,12,32,132,140,20,16,163,89,12,224,189,140,22,16,182,89,132,255,
-255,22,0,0,0,10,0,48,240,140,8,191,0,0,30,22,136,92,0,0,240,140,16,22,160,
-92,148,48,0,90,1,9,132,89,244,255,255,19,0,80,4,132,0,0,0,0,0,0,0,10,0,
-0,0,0,3,30,128,92,188,5,0,8,0,0,0,0,0,0,0,0,17,22,144,92,0,0,136,140,136,
-0,0,8,0,0,0,0,1,30,128,92,12,30,0,9,12,32,244,146,0,0,0,10,16,22,48,92,
-108,1,0,9,88,30,0,9,12,32,36,144,4,22,160,92,1,9,33,89,38,32,5,59,4,29,
-44,140,16,96,161,144,0,16,5,134,4,22,160,92,148,48,0,90,4,73,41,89,1,9,
-33,89,232,255,255,17,132,10,0,9,6,22,128,92,92,24,0,8,0,0,0,0,0,0,0,0,160,
-255,255,9,76,6,0,9,16,9,0,11,1,30,128,92,192,4,0,8,0,0,0,0,0,0,0,0,0,0,
-0,0,144,208,163,88,255,0,152,140,148,192,164,88,148,48,0,90,0,16,180,140,
-18,22,184,92,42,0,0,18,38,160,4,58,0,144,141,130,22,80,176,89,150,208,163,
-88,148,192,164,88,148,48,0,90,1,201,189,89,10,0,0,18,228,255,5,61,10,224,
-5,61,0,0,0,10,58,224,125,51,145,192,164,88,8,14,173,89,149,3,173,88,16,
-78,165,89,148,67,165,88,0,144,165,146,4,160,165,146,8,160,165,146,16,201,
-189,89,12,160,165,146,23,240,3,90,16,160,181,140,228,255,255,17,26,224,
-5,58,1,201,189,89,0,144,141,130,151,48,0,90,1,160,181,140,240,255,255,21,
-0,0,0,10,0,0,0,0,0,48,240,140,112,192,0,0,30,22,136,92,0,0,240,140,0,16,
-164,144,20,80,160,89,0,16,164,146,0,80,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,
-0,0,0,100,101,102,97,117,108,116,46,112,102,0,0,0,0,0,0,112,114,111,102,
-105,108,101,32,99,111,108,108,101,99,116,105,111,110,32,101,114,114,111,
-114,46,10,0,0,0,0,0,0,0,48,160,144,136,86,0,0,10,32,5,61,0,0,0,10,0,48,
-160,144,200,92,0,0,0,48,48,140,200,92,0,0,0,30,32,92,0,0,64,140,34,32,5,
-58,8,160,169,144,6,16,51,89,0,144,161,144,8,80,64,89,148,48,0,90,4,64,37,
-89,232,255,255,21,0,48,128,140,128,192,0,0,182,1,136,140,28,25,0,9,144,
-48,0,90,0,16,44,140,224,2,0,20,136,13,161,89,0,48,160,130,241,195,3,0,144,
-13,169,89,0,48,32,130,240,195,3,0,152,13,161,89,0,48,168,130,242,195,3,
-0,0,48,136,140,240,195,3,0,0,48,160,130,243,195,3,0,4,30,144,92,36,27,0,
-9,18,32,36,58,158,98,1,57,144,2,0,8,0,0,0,0,0,48,160,144,200,92,0,0,0,48,
-48,140,200,92,0,0,162,32,5,58,0,144,161,144,8,160,57,144,0,32,37,140,4,
-192,137,89,4,96,4,90,0,16,185,140,66,0,0,19,4,208,128,89,0,208,165,144,
-0,208,165,130,23,16,185,89,23,96,4,90,136,13,173,89,144,13,181,89,0,52,
-172,130,254,255,255,255,152,13,165,89,0,52,180,130,255,255,255,255,0,16,
-164,130,16,16,129,89,204,255,255,20,5,22,128,92,0,16,137,140,7,22,144,92,
-152,26,0,9,14,192,129,58,18,98,1,57,4,2,0,8,4,192,145,89,4,160,4,90,0,16,
-185,140,18,0,0,19,0,208,245,146,23,16,185,89,248,159,188,52,6,16,51,89,
-0,144,161,144,104,63,5,61,0,48,72,144,136,86,0,0,8,80,64,89,136,28,170,
-140,2,78,173,89,21,65,74,89,136,93,178,140,0,48,176,146,136,86,0,0,0,116,
-85,140,200,92,0,0,0,48,168,128,136,86,0,0,5,22,128,92,0,48,136,140,240,
-195,3,0,136,141,165,89,4,0,144,140,0,48,160,130,241,195,3,0,144,141,165,
-89,152,141,181,89,0,48,160,130,242,195,3,0,0,48,176,130,243,195,3,0,0,48,
-168,130,240,195,3,0,240,25,0,9,14,32,36,58,106,97,1,57,92,1,0,8,0,48,160,
-144,200,92,0,0,0,48,48,140,200,92,0,0,0,30,32,92,210,32,5,58,6,16,58,89,
-0,244,169,144,252,255,255,255,2,14,162,89,20,65,173,89,0,80,129,140,0,48,
-168,130,240,195,3,0,0,48,136,140,240,195,3,0,4,30,144,92,136,77,165,89,
-144,77,181,89,0,48,160,130,241,195,3,0,152,77,173,89,0,48,176,130,242,195,
-3,0,0,48,168,130,243,195,3,0,120,25,0,9,14,32,36,58,242,96,1,57,228,0,0,
-8,136,13,161,89,0,48,160,130,241,195,3,0,5,22,128,92,144,13,169,89,0,48,
-32,130,240,195,3,0,152,13,161,89,0,48,168,130,242,195,3,0,0,48,136,140,
-240,195,3,0,0,48,160,130,243,195,3,0,4,30,144,92,44,25,0,9,18,32,36,58,
-166,96,1,57,152,0,0,8,0,0,0,0,6,16,51,89,0,144,161,144,0,208,169,144,7,
-16,59,89,148,48,0,90,4,64,37,89,60,255,255,21,0,48,240,130,240,195,3,0,
-0,48,240,130,241,195,3,0,5,22,128,92,0,48,240,130,242,195,3,0,0,48,136,
-140,240,195,3,0,0,48,240,130,243,195,3,0,4,30,144,92,204,24,0,9,30,32,36,
-61,5,22,128,92,0,48,136,140,240,195,3,0,4,30,144,92,180,24,0,9,16,32,36,
-58,46,96,1,57,32,0,0,8,0,0,0,0,5,22,128,92,0,144,138,140,9,22,144,92,148,
-24,0,9,38,64,130,58,14,96,1,57,5,22,128,92,164,21,0,9,2,30,128,92,0,48,
-136,140,144,192,0,0,26,30,144,92,112,24,0,8,5,22,128,92,136,21,0,8,0,0,
-0,0,0,48,240,140,88,196,0,0,30,22,144,92,0,0,240,140,0,48,136,144,140,86,
-0,0,0,48,168,140,101,139,88,93,21,64,180,103,31,175,5,90,23,192,165,91,
-20,128,165,89,31,14,165,88,0,16,133,140,0,48,160,146,140,86,0,0,0,144,4,
-132,0,0,0,0,0,0,0,10,0,0,0,0,0,48,240,140,128,196,0,0,30,22,136,92,0,0,
-240,140,0,48,128,146,140,86,0,0,0,80,4,132,0,0,0,0,0,0,0,10,0,0,0,0,0,0,
-0,0,0,0,0,0,10,32,4,59,28,32,52,59,104,25,0,9,31,216,168,89,0,16,172,146,
-0,48,128,140,255,255,255,255,0,0,0,10,16,57,128,140,252,195,3,0,0,16,164,
-144,0,16,140,146,20,22,128,92,0,0,0,10,0,0,0,0,0,0,0,0,144,48,0,90,0,16,
-44,140,10,0,0,22,12,32,52,59,1,25,128,89,0,0,0,10,16,57,32,144,252,195,
-3,0,18,32,1,61,1,30,128,92,232,18,0,9,32,0,0,8,1,0,160,140,14,0,37,61,0,
-30,128,92,0,0,0,10,16,57,240,146,252,195,3,0,0,16,1,134,0,30,128,92,5,57,
-32,146,252,195,3,0,0,0,0,10,0,0,0,0,0,48,240,140,112,197,0,0,30,22,128,
-92,0,0,240,140,0,48,160,140,16,196,3,0,8,32,245,146,0,16,245,146,4,32,245,
-146,0,48,160,140,0,196,3,0,0,16,245,146,4,32,245,146,8,32,245,146,12,32,
-245,146,0,16,4,132,0,0,0,10,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,129,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,
-0,0,0,130,0,1,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,0,
-130,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,32,96,8,140,0,116,192,178,240,255,255,
-255,0,48,128,176,128,197,0,0,0,48,32,176,144,197,0,0,0,48,64,176,160,197,
-0,0,0,48,128,178,144,86,0,0,0,48,128,176,192,197,0,0,0,48,192,176,176,197,
-0,0,0,48,128,178,208,86,0,0,0,48,136,140,144,86,0,0,0,116,136,146,224,255,
-255,255,0,48,96,176,208,197,0,0,0,48,144,140,176,86,0,0,0,116,144,146,228,
-255,255,255,0,48,152,140,208,86,0,0,0,116,152,146,232,255,255,255,0,48,
-160,140,240,86,0,0,0,116,128,144,232,255,255,255,12,32,245,146,8,32,133,
-146,0,116,144,152,224,255,255,255,0,48,32,178,160,86,0,0,4,30,168,92,0,
-16,149,154,0,48,160,140,0,87,0,0,0,48,64,178,176,86,0,0,0,48,192,178,192,
-86,0,0,0,48,96,178,224,86,0,0,0,16,245,146,4,32,245,146,8,32,245,146,21,
-16,169,89,12,32,245,146,149,240,4,90,16,32,165,140,228,255,255,22,0,116,
-192,176,240,255,255,255,0,0,0,10,0,0,0,0,0,0,0,0,0,16,164,152,30,0,173,
-51,4,32,172,144,21,80,160,89,4,32,164,146,0,80,133,128,12,0,0,8,0,0,0,0,
-192,1,0,8,0,0,0,10,0,0,0,0,0,0,0,0,0,48,128,144,240,86,0,0,0,16,164,152,
-30,0,173,51,4,32,172,144,21,80,160,89,4,32,164,146,0,80,133,128,12,0,0,
-8,0,0,0,0,136,1,0,8,0,0,0,10,0,80,164,152,38,0,173,51,4,96,164,144,16,22,
-168,92,255,0,184,140,20,80,176,89,149,192,173,88,4,96,180,146,0,16,133,
-130,12,0,0,8,248,2,0,9,16,22,168,92,21,22,128,92,0,0,0,10,0,0,0,0,0,0,0,
-0,0,48,136,144,244,86,0,0,0,80,164,152,38,0,173,51,4,96,164,144,16,22,168,
-92,255,0,184,140,20,80,176,89,149,192,173,88,4,96,180,146,0,16,133,130,
-12,0,0,8,176,2,0,9,16,22,168,92,21,22,128,92,0,0,0,10,0,48,240,140,232,
-199,0,0,30,22,136,92,0,0,240,140,16,32,164,136,0,48,168,140,207,255,255,
-255,148,64,165,88,16,32,164,138,0,80,4,132,0,0,0,10,0,0,0,0,0,48,240,140,
-24,200,0,0,30,22,136,92,0,0,240,140,16,32,164,128,14,32,37,48,1,30,128,
-92,0,80,4,132,0,30,128,92,0,80,4,132,0,0,0,10,0,0,0,0,0,48,240,140,72,200,
-0,0,30,22,136,92,0,0,240,140,16,32,164,128,14,32,45,48,1,30,128,92,0,80,
-4,132,0,30,128,92,0,80,4,132,0,0,0,10,0,0,0,0,0,48,240,140,152,200,0,0,
-30,22,144,92,0,0,240,140,144,48,0,90,0,80,180,140,10,0,0,18,14,96,4,61,
-0,30,128,92,0,144,4,132,1,9,172,89,0,144,165,128,21,80,168,89,1,160,181,
-140,0,80,165,130,240,63,5,61,0,144,4,132,0,0,0,0,0,0,0,10,0,0,0,0,0,48,
-240,140,184,200,0,0,30,22,128,92,0,0,240,140,0,16,4,132,0,0,0,0,0,0,0,10,
-0,0,0,0,16,16,180,89,0,144,173,136,16,22,32,92,3,1,152,140,149,192,164,
-88,136,25,152,88,10,192,164,61,128,73,173,88,113,0,152,140,149,192,164,
-88,0,144,173,138,14,32,13,58,1,25,128,89,0,0,0,10,8,32,164,144,30,32,5,
-61,144,10,0,9,22,32,4,62,16,32,161,136,133,9,165,88,168,0,0,8,0,0,0,0,0,
-48,128,152,240,86,0,0,22,0,36,61,16,96,164,128,14,32,61,48,17,22,128,92,
-96,3,0,9,204,20,0,9,4,16,50,89,1,25,56,89,0,16,44,140,16,32,161,128,18,
-32,129,128,1,30,144,92,0,144,177,152,10,32,21,55,23,22,144,92,22,22,136,
-92,80,18,0,9,14,192,129,61,0,80,161,144,216,63,37,58,8,32,81,144,1,25,152,
-89,144,224,4,90,0,144,74,140,10,22,64,92,10,0,0,18,10,0,68,89,0,16,65,146,
-4,32,81,146,14,192,132,58,26,32,4,58,44,0,0,8,16,32,161,136,133,9,165,88,
-16,0,0,8,0,0,0,0,16,32,161,136,132,9,165,88,1,25,128,89,16,32,161,138,0,
-0,0,10,0,0,0,0,4,32,169,144,21,80,160,89,4,32,161,146,0,80,133,128,0,0,
-0,10,0,0,0,0,0,48,240,140,248,201,0,0,30,22,128,92,0,0,240,140,0,16,4,132,
-0,0,0,0,0,0,0,10,0,0,0,0,0,48,32,140,240,86,0,0,0,30,40,92,0,16,129,144,
-10,32,4,58,252,1,0,9,4,32,129,144,10,32,4,58,240,1,0,9,8,32,129,144,10,
-32,4,58,228,1,0,9,12,32,129,144,10,32,4,58,216,1,0,9,16,32,129,144,10,32,
-4,58,204,1,0,9,5,80,41,89,133,240,4,90,20,32,33,140,184,255,255,22,0,0,
-0,10,0,0,0,0,16,96,180,128,16,22,56,92,0,80,36,140,38,160,53,48,4,96,164,
-144,255,0,232,140,20,80,168,89,135,64,183,88,4,96,172,146,0,16,133,130,
-22,22,128,92,0,0,0,10,17,16,188,89,0,208,173,136,2,1,232,140,149,64,167,
-88,136,25,232,88,30,64,167,61,18,160,5,55,129,73,173,88,16,0,0,8,0,0,0,
-0,10,160,37,48,21,211,172,88,31,216,232,89,149,64,167,88,0,208,173,138,
-14,32,21,58,1,25,128,89,0,0,0,10,8,96,164,144,30,32,5,61,17,22,128,92,172,
-8,0,9,18,32,4,62,1,25,128,89,0,0,0,10,0,0,0,0,16,32,161,128,132,0,232,140,
-148,64,167,88,92,32,5,58,16,32,161,128,30,32,21,48,4,32,169,144,21,80,160,
-89,0,0,48,140,4,32,161,146,0,80,61,130,64,0,0,8,0,16,129,176,18,192,164,
-89,50,0,141,51,4,32,161,144,255,0,232,140,135,64,175,88,1,32,181,140,149,
-176,2,90,4,32,177,146,0,16,61,130,174,0,0,21,0,30,48,92,12,0,0,8,0,0,0,
-0,1,30,48,92,0,16,161,176,22,65,45,89,70,96,1,58,18,32,129,128,8,32,137,
-144,5,22,144,92,244,16,0,9,50,64,129,58,16,32,161,136,8,32,113,144,1,25,
-128,89,133,9,165,88,0,144,107,140,14,22,96,92,16,32,161,138,0,16,113,146,
-4,32,113,146,0,0,0,10,0,0,0,0,16,32,161,128,8,32,81,152,132,0,232,140,148,
-64,167,88,148,48,0,90,0,144,74,140,10,22,160,92,10,0,0,21,10,192,162,89,
-20,22,64,92,0,16,161,146,255,0,232,140,134,64,167,88,4,32,81,146,22,32,
-5,58,4,32,169,144,21,80,160,89,4,32,161,146,0,80,61,130,135,64,135,88,0,
-0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,22,32,92,68,8,0,11,144,48,0,90,0,16,44,
-140,18,0,0,21,1,25,128,89,0,0,0,10,0,0,0,0,0,48,168,140,240,86,0,0,21,1,
-164,89,130,13,165,89,10,32,21,59,0,16,244,146,4,22,128,92,68,0,0,9,18,32,
-129,128,60,13,0,9,18,32,4,58,1,25,128,89,0,0,0,10,0,0,0,0,16,32,161,128,
-14,32,29,48,8,32,129,144,244,3,0,11,0,80,161,144,14,32,5,61,4,22,128,92,
-228,3,0,11,0,30,128,92,0,0,0,10,16,32,164,128,16,22,40,92,18,32,45,48,1,
-25,128,89,0,0,0,10,0,0,0,0,26,32,13,55,8,32,164,144,122,32,5,58,0,16,164,
-146,4,32,164,146,108,0,0,8,50,32,21,55,0,16,164,176,22,65,37,89,38,32,1,
-58,18,32,132,128,8,96,137,144,4,22,144,92,148,15,0,9,18,0,129,58,1,25,128,
-89,0,0,0,10,0,0,0,0,8,96,161,144,54,32,5,58,16,96,161,128,8,96,81,152,132,
-0,152,140,148,192,164,88,148,48,0,90,0,144,74,140,10,22,160,92,10,0,0,21,
-10,192,162,89,20,22,64,92,0,80,161,146,4,96,81,146,0,30,128,92,0,0,0,10,
-26,32,28,51,16,208,128,89,4,25,144,89,144,128,132,88,12,0,0,8,0,0,0,0,4,
-30,128,92,16,48,2,90,16,0,56,140,10,0,0,17,16,22,56,92,7,17,48,89,4,32,
-68,140,7,208,73,89,0,0,40,140,0,48,160,144,32,196,3,0,54,32,5,61,8,30,128,
-92,212,10,0,9,4,25,144,89,3,32,132,140,144,128,132,88,4,32,132,140,0,48,
-128,146,32,196,3,0,0,48,128,146,36,196,3,0,0,52,244,146,252,255,255,255,
-0,48,128,144,40,196,3,0,0,30,136,92,178,32,4,58,7,60,164,140,255,255,255,
-255,148,128,169,88,0,96,173,140,0,52,188,144,252,255,255,255,18,0,172,58,
-16,64,162,89,148,128,169,88,0,96,173,140,21,0,178,89,116,192,181,49,22,
-0,172,58,0,116,189,146,252,255,255,255,0,52,172,146,252,255,255,255,22,
-16,161,89,34,192,165,51,0,180,189,146,252,255,255,255,0,116,181,146,252,
-255,255,255,0,16,164,144,0,144,165,146,0,16,180,146,0,48,160,144,32,196,
-3,0,182,0,173,52,34,0,172,61,18,96,4,58,0,16,164,144,0,80,164,146,16,0,
-0,8,0,16,164,144,0,48,160,146,40,196,3,0,21,22,128,92,0,0,0,10,0,0,0,0,
-16,22,136,92,0,16,132,144,88,63,4,61,0,48,168,144,36,196,3,0,0,48,144,140,
-0,252,255,255,21,60,162,140,19,4,0,0,148,128,36,88,0,32,33,140,18,64,37,
-52,4,22,128,92,148,10,0,9,16,32,4,58,0,30,160,92,48,0,0,8,0,0,0,0,0,48,
-128,144,36,196,3,0,0,52,36,146,252,255,255,255,0,52,241,146,252,255,255,
-255,176,1,0,11,1,30,160,92,0,48,32,146,36,196,3,0,22,32,5,58,5,80,40,89,
-16,78,161,89,144,25,144,88,148,158,164,62,0,30,128,92,0,0,0,10,0,0,0,0,
-0,0,0,0,0,0,0,0,144,48,0,90,0,16,60,140,14,0,0,21,17,22,128,92,48,254,255,
-8,22,96,28,51,17,208,136,89,4,25,152,89,145,192,44,88,8,0,0,8,4,30,40,92,
-5,48,2,90,16,0,184,140,10,0,0,17,5,22,184,92,0,52,180,144,252,255,255,255,
-0,48,160,144,40,196,3,0,5,16,137,89,0,0,168,140,16,129,53,89,86,32,5,58,
-82,128,165,49,66,128,165,61,0,180,165,144,252,255,255,255,0,52,164,146,
-252,255,255,255,149,48,0,90,0,144,165,144,14,0,0,18,0,80,165,146,12,0,0,
-8,0,48,160,146,40,196,3,0,0,52,180,144,252,255,255,255,20,0,0,8,0,0,0,0,
-20,22,168,92,0,16,165,144,180,63,5,61,23,17,168,89,23,60,164,140,255,255,
-255,255,148,64,165,88,0,32,165,140,58,0,164,61,16,64,36,89,50,128,37,49,
-4,16,161,89,30,128,165,51,0,52,177,146,252,255,255,255,0,52,36,146,252,
-255,255,255,4,22,128,92,144,0,0,11,7,22,128,92,0,0,0,10,0,0,0,0,5,22,128,
-92,68,253,255,9,144,48,0,90,0,16,36,140,18,0,0,21,0,30,128,92,0,0,0,10,
-0,0,0,0,10,64,49,54,5,22,48,92,7,22,128,92,0,16,137,140,6,22,144,92,212,
-2,0,9,7,22,128,92,68,0,0,11,4,22,128,92,0,0,0,10,144,64,36,112,0,16,129,
-140,248,252,255,9,144,48,0,90,0,16,44,140,14,0,0,21,0,30,128,92,0,0,0,10,
-4,22,136,92,204,238,255,9,5,22,128,92,0,0,0,10,0,48,240,140,8,209,0,0,30,
-22,136,92,0,0,240,140,10,32,4,61,0,80,4,132,0,48,168,144,40,196,3,0,0,30,
-176,92,22,96,5,58,18,64,133,52,21,22,176,92,0,80,173,144,244,127,5,61,0,
-16,172,146,14,160,5,58,0,144,133,146,12,0,0,8,0,48,128,146,40,196,3,0,42,
-96,5,58,0,52,164,144,252,255,255,255,30,64,165,61,0,116,165,144,252,255,
-255,255,0,52,164,146,252,255,255,255,0,80,165,144,0,16,164,146,42,160,5,
-58,0,180,165,144,252,255,255,255,30,0,164,61,0,52,164,144,252,255,255,255,
-0,180,165,146,252,255,255,255,0,16,164,144,0,144,165,146,0,80,4,132,0,0,
-0,0,0,0,0,10,0,0,0,0,16,96,4,90,0,16,36,140,17,22,184,92,1,137,164,89,17,
-0,181,89,16,0,173,89,10,0,0,20,28,128,133,54,10,64,172,52,20,128,173,54,
-120,0,0,9,4,22,128,92,0,0,0,10,0,0,0,0,50,64,132,51,1,137,148,89,1,25,152,
-89,78,192,148,58,0,208,165,128,23,80,184,89,1,137,148,89,146,224,4,90,0,
-16,161,130,4,80,32,89,232,255,255,21,44,0,0,8,1,137,148,89,1,25,152,89,
-34,192,148,58,0,144,165,128,1,137,181,89,1,137,148,89,146,224,4,90,0,80,
-165,130,1,73,173,89,232,255,255,21,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,144,
-67,164,88,148,208,163,88,255,0,32,140,148,0,161,88,148,48,0,90,0,16,156,
-140,17,22,184,92,0,144,180,140,16,22,232,92,70,0,0,21,4,140,156,89,34,224,
-4,59,0,80,164,176,1,201,156,89,16,96,140,140,147,48,0,90,0,80,167,178,29,
-16,236,89,232,255,255,17,146,208,179,88,150,48,0,90,0,80,159,140,17,22,
-184,92,14,0,0,21,0,0,0,10,0,0,0,0,147,195,165,88,148,208,161,88,148,0,161,
-88,46,32,5,61,34,160,61,51,0,208,165,152,8,137,181,89,22,240,1,90,0,208,
-164,154,19,16,154,89,8,224,189,140,232,255,255,17,10,160,5,61,0,0,0,10,
-147,195,165,88,148,208,160,88,148,0,161,88,46,32,5,61,34,160,29,51,0,208,
-165,144,4,137,181,89,22,240,0,90,0,208,164,146,19,16,153,89,4,224,189,140,
-232,255,255,17,10,160,5,61,0,0,0,10,147,195,165,88,46,32,5,55,34,160,13,
-51,0,208,165,136,2,137,181,89,22,112,0,90,0,208,164,138,19,144,152,89,2,
-224,189,140,232,255,255,17,10,160,5,61,0,0,0,10,1,137,181,89,1,25,32,89,
-34,0,177,58,0,208,165,128,23,80,184,89,1,137,181,89,150,32,1,90,0,208,164,
-130,19,80,152,89,232,255,255,21,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,17,32,
-4,90,0,16,236,140,17,22,152,92,0,16,188,140,1,137,164,89,16,0,181,89,17,
-0,173,89,10,0,0,20,24,128,141,54,10,0,172,52,16,128,173,54,17,22,128,92,
-0,80,143,140,140,254,255,8,50,0,140,51,1,137,148,89,1,25,32,89,34,0,145,
-58,0,208,165,128,23,80,184,89,1,137,148,89,146,32,1,90,0,208,164,130,19,
-80,152,89,232,255,255,21,0,0,0,10,1,137,148,89,1,25,32,89,34,0,145,58,0,
-144,165,128,1,137,181,89,1,137,148,89,146,32,1,90,0,80,165,130,1,73,173,
-89,232,255,255,21,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,32,164,128,16,22,
-64,92,34,32,21,48,16,208,164,89,0,16,181,140,16,16,130,89,1,0,184,140,0,
-16,164,146,4,32,188,146,80,0,0,8,138,25,128,88,116,249,255,9,8,32,130,146,
-14,32,4,61,1,25,128,89,0,0,0,10,16,32,162,136,131,9,165,88,16,32,162,138,
-16,32,162,128,138,25,168,88,12,32,170,146,30,32,5,55,18,32,130,128,96,6,
-0,9,18,32,4,58,16,32,162,136,135,9,165,88,16,32,162,138,16,32,162,128,0,
-16,34,176,46,32,13,48,132,0,168,140,148,64,165,88,148,48,0,90,0,144,41,
-140,6,22,160,92,10,0,0,21,6,192,161,89,20,22,32,92,16,0,0,8,0,0,0,0,6,22,
-40,92,0,144,33,140,0,16,34,146,7,22,128,92,4,32,50,146,0,0,0,10,0,48,240,
-140,160,212,0,0,30,22,136,92,0,0,240,140,0,48,160,144,240,86,0,0,20,30,
-176,92,0,48,168,140,240,86,0,0,26,0,164,58,1,137,181,89,30,160,5,57,21,
-16,169,89,0,80,165,144,240,31,164,61,21,22,128,92,0,80,4,132,0,0,0,0,0,
-30,128,92,0,80,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,89,30,22,
-32,92,0,48,128,140,48,196,3,0,138,25,136,88,220,2,0,9,16,22,160,92,148,
-48,0,90,36,0,0,19,0,30,160,92,64,224,167,146,0,48,160,140,64,87,0,0,68,
-224,167,146,0,30,160,92,72,224,167,146,20,0,0,8,64,224,135,140,0,48,136,
-140,48,196,3,0,32,0,0,9,72,224,167,144,0,48,160,146,0,201,3,0,64,224,135,
-176,0,0,0,10,0,0,0,10,0,0,0,0,32,96,8,140,30,22,32,92,64,224,135,146,68,
-224,143,146,68,224,135,144,28,2,0,9,16,22,160,92,68,224,175,144,20,64,165,
-89,1,32,173,140,76,224,175,146,64,224,167,144,0,30,168,92,0,16,173,146,
-64,224,167,144,0,48,168,140,48,200,3,0,4,32,173,146,68,224,167,144,72,224,
-167,146,72,224,167,144,0,16,173,128,149,48,0,90,52,1,0,18,64,224,167,144,
-0,16,173,144,149,176,4,90,36,1,0,17,72,224,167,144,0,16,173,128,149,48,
-0,90,92,0,0,18,72,224,167,144,0,16,173,128,31,88,184,89,149,224,5,90,56,
-0,0,18,72,224,167,144,0,16,173,128,149,112,2,90,40,0,0,18,72,224,167,144,
-0,16,173,128,149,112,3,90,24,0,0,18,72,224,167,144,0,16,173,128,149,176,
-2,90,8,0,0,18,20,0,0,8,72,224,167,144,20,80,168,89,72,224,175,146,156,255,
-255,8,72,224,167,144,0,16,173,128,149,48,0,90,168,0,0,18,64,224,175,144,
-0,80,165,144,20,80,176,89,0,80,181,146,72,224,175,144,20,57,168,146,48,
-200,3,0,72,224,167,144,0,16,173,128,149,48,0,90,88,0,0,18,72,224,167,144,
-0,16,173,128,31,88,184,89,149,224,5,90,68,0,0,18,72,224,167,144,0,16,173,
-128,149,112,2,90,52,0,0,18,72,224,167,144,0,16,173,128,149,112,3,90,36,
-0,0,18,72,224,167,144,0,16,173,128,149,176,2,90,20,0,0,18,72,224,167,144,
-20,80,168,89,72,224,175,146,160,255,255,8,72,224,167,144,0,16,173,128,149,
-48,0,90,24,0,0,18,72,224,167,144,20,80,168,89,72,224,175,146,0,30,168,92,
-0,16,173,130,196,254,255,8,64,224,167,144,0,16,173,144,0,30,160,92,21,57,
-160,146,48,200,3,0,0,30,160,92,80,224,167,146,76,224,167,144,0,16,173,128,
-149,48,0,90,72,0,0,18,80,224,167,144,148,48,7,90,60,0,0,17,80,224,167,144,
-20,80,168,89,80,224,175,146,76,224,175,144,20,57,168,146,128,200,3,0,76,
-224,135,144,76,0,0,9,16,22,160,92,1,32,173,140,76,224,167,144,21,0,173,
-89,76,224,175,146,176,255,255,8,80,224,167,144,0,30,168,92,20,57,168,146,
-128,200,3,0,64,224,167,144,0,48,168,140,128,200,3,0,8,32,173,146,0,0,0,
-10,0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,89,30,22,160,92,64,224,135,146,0,30,
-168,92,68,224,175,146,64,224,175,144,21,80,176,89,64,224,183,146,0,80,173,
-128,149,48,0,90,20,0,0,18,68,224,175,144,21,80,176,89,68,224,183,146,220,
-255,255,8,68,224,135,144,0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,16,72,8,89,30,
-22,32,92,16,22,40,92,17,22,48,92,242,0,56,140,64,224,63,146,5,22,128,92,
-6,22,136,92,7,48,0,102,16,22,72,92,68,224,79,146,68,224,135,144,0,0,0,10,
-0,0,0,10,0,0,0,10,0,0,0,0,16,72,8,89,30,22,32,92,64,224,135,146,64,224,
-135,144,16,0,0,9,0,0,0,10,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,16,22,
-40,92,1,1,48,140,64,224,55,146,5,22,128,92,6,48,0,102,0,0,0,10,0,0,0,10,
-0,0,0,0,0,0,0,0,0,0,0,0,30,22,160,92,0,48,168,140,112,202,3,0,0,48,168,
-146,16,201,3,0,0,0,0,10,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,64,224,135,
-146,64,224,167,144,148,48,0,90,16,0,0,21,0,48,128,144,16,201,3,0,0,0,0,
-10,0,48,160,144,16,201,3,0,20,208,43,89,16,25,176,89,133,128,45,88,5,22,
-160,92,0,32,45,140,64,224,175,144,1,73,165,89,5,0,53,89,0,48,160,144,16,
-201,3,0,5,32,5,90,32,0,0,20,6,96,1,90,24,0,0,20,0,48,176,140,111,218,3,
-0,6,160,5,90,8,0,0,17,36,0,0,8,56,5,0,9,16,22,160,92,20,22,168,92,12,30,
-160,92,0,80,165,146,0,48,128,140,255,255,255,255,0,0,0,10,6,80,160,89,0,
-48,160,146,16,201,3,0,0,48,160,144,16,201,3,0,20,160,1,90,20,0,0,19,0,48,
-160,140,111,218,3,0,0,48,160,146,16,201,3,0,5,22,128,92,0,0,0,10,0,0,0,
-10,16,72,8,89,30,22,32,92,64,224,135,146,64,224,167,144,0,48,176,140,112,
-202,3,0,20,160,5,90,32,0,0,20,64,224,175,144,1,73,165,89,0,48,176,140,111,
-218,3,0,20,160,5,90,8,0,0,17,32,0,0,8,164,4,0,9,16,22,160,92,20,22,168,
-92,12,30,160,92,0,80,165,146,1,25,128,89,0,0,0,10,64,224,167,144,0,48,160,
-146,16,201,3,0,0,30,128,92,0,0,0,10,0,0,0,10,16,72,8,89,30,22,32,92,64,
-224,135,146,64,224,135,144,64,0,0,9,68,224,135,146,68,224,167,144,148,48,
-0,90,32,0,0,18,76,4,0,9,16,22,160,92,20,22,168,92,68,224,167,144,0,80,165,
-146,1,25,128,89,0,0,0,10,0,30,128,92,0,0,0,10,0,0,0,10,0,0,0,0,16,72,8,
-89,30,22,32,92,16,22,40,92,234,0,48,140,64,224,55,146,5,22,128,92,6,48,
-0,102,16,22,64,92,68,224,71,146,68,224,135,144,0,0,0,10,0,0,0,10,0,0,0,
-10,0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,64,224,135,146,68,224,
-143,146,64,224,135,144,1,3,136,140,68,224,151,144,180,0,0,9,0,0,0,10,0,
-0,0,10,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,64,224,135,146,68,224,167,
-140,64,224,135,144,20,22,136,92,72,0,0,9,72,224,135,146,72,224,167,144,
-148,48,0,90,32,0,0,18,132,3,0,9,16,22,160,92,20,22,168,92,72,224,167,144,
-0,80,165,146,1,25,128,89,0,0,0,10,68,224,135,144,0,0,0,10,0,0,0,10,0,0,
-0,0,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,16,22,40,92,17,22,48,92,235,
-0,56,140,64,224,63,146,5,22,128,92,6,22,136,92,7,48,0,102,16,22,72,92,68,
-224,79,146,68,224,135,144,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,0,32,96,8,140,
-30,22,32,92,64,224,135,146,68,224,143,146,72,224,151,146,76,224,167,140,
-64,224,135,144,68,224,143,144,72,224,151,144,20,22,152,92,72,0,0,9,80,224,
-135,146,80,224,167,144,148,48,0,90,32,0,0,18,212,2,0,9,16,22,160,92,20,
-22,168,92,80,224,167,144,0,80,165,146,1,25,128,89,0,0,0,10,76,224,135,144,
-0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,16,22,
-40,92,17,22,48,92,18,22,56,92,19,22,64,92,230,0,72,140,64,224,79,146,5,
-22,128,92,6,22,136,92,7,22,144,92,8,22,152,92,9,48,0,102,16,22,88,92,68,
-224,95,146,68,224,135,144,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,0,32,96,8,140,
-30,22,32,92,64,224,135,146,68,224,143,146,72,224,151,146,76,224,167,140,
-64,224,135,144,68,224,143,144,72,224,151,144,20,22,152,92,72,0,0,9,80,224,
-135,146,80,224,167,144,148,48,0,90,32,0,0,18,20,2,0,9,16,22,160,92,20,22,
-168,92,80,224,167,144,0,80,165,146,1,25,128,89,0,0,0,10,76,224,135,144,
-0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,16,22,
-40,92,17,22,48,92,18,22,56,92,19,22,64,92,231,0,72,140,64,224,79,146,5,
-22,128,92,6,22,136,92,7,22,144,92,8,22,152,92,9,48,0,102,16,22,88,92,68,
-224,95,146,68,224,135,144,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,0,32,96,8,140,
-30,22,32,92,64,224,135,146,68,224,143,146,72,224,151,146,76,224,167,140,
-64,224,135,144,68,224,143,144,72,224,151,144,20,22,152,92,72,0,0,9,80,224,
-135,146,80,224,167,144,148,48,0,90,32,0,0,18,84,1,0,9,16,22,160,92,20,22,
-168,92,80,224,167,144,0,80,165,146,1,25,128,89,0,0,0,10,76,224,135,144,
-0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,89,30,22,32,92,16,22,
-40,92,17,22,48,92,18,22,56,92,19,22,64,92,232,0,72,140,64,224,79,146,5,
-22,128,92,6,22,136,92,7,22,144,92,8,22,152,92,9,48,0,102,16,22,88,92,68,
-224,95,146,68,224,135,144,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,0,30,22,32,92,
-252,250,255,9,0,0,0,10,0,0,0,0,16,72,8,89,30,22,160,92,64,224,135,146,0,
-48,128,140,32,201,3,0,0,0,0,10,0,0,0,10,0,0,0,0,16,72,8,89,30,22,160,92,
-64,224,135,146,0,48,128,140,176,201,3,0,0,0,0,10,0,0,0,10,0,0,0,0,16,72,
-8,89,30,22,160,92,64,224,135,146,0,48,128,140,16,202,3,0,0,0,0,10,0,0,0,
-10,0,0,0,0,30,22,160,92,0,48,128,140,32,201,3,0,0,0,0,10,0,0,0,10,0,0,0,
-0,0,0,0,0,0,0,0,0,30,22,160,92,0,48,128,140,176,201,3,0,0,0,0,10,0,0,0,
-10,0,0,0,0,0,0,0,0,0,0,0,0,30,22,160,92,0,48,128,140,16,202,3,0,0,0,0,10,
-0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,30,22,160,92,0,48,128,140,16,202,3,0,0,
-0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,30,22,32,92,16,22,40,92,4,96,161,
-144,0,80,169,144,20,96,5,90,24,0,0,19,4,96,161,144,20,80,168,89,4,96,169,
-146,0,16,133,128,12,0,0,8,5,22,128,92,112,234,255,9,0,0,0,10,0,0,0,10,0,
-0,0,10,30,22,32,92,16,22,40,92,17,22,48,92,4,160,161,144,0,144,169,144,
-20,96,5,90,36,0,0,19,4,160,161,144,20,80,168,89,4,160,169,146,5,22,168,
-92,0,16,173,130,255,0,176,140,149,128,133,88,16,0,0,8,5,22,128,92,6,22,
-136,92,188,235,255,9,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,
-30,22,32,92,108,254,255,9,0,0,0,10,0,0,0,0,30,22,160,92,0,0,0,10,0,0,0,
-0,0,0,0,0,30,22,160,92,1,25,136,89,145,2,132,100,0,0,0,10,144,48,0,90,19,
-4,32,140,86,0,0,20,16,22,40,92,133,16,96,100,66,0,0,16,12,17,101,89,140,
-48,0,90,18,0,0,20,12,70,137,89,0,30,128,92,20,0,0,8,12,17,104,89,13,68,
-137,89,32,32,107,140,13,70,129,89,20,78,140,88,12,1,33,89,20,14,33,89,132,
-67,140,88,0,0,0,10,0,30,128,93,248,255,255,8,16,17,40,89,133,16,96,100,
-12,17,101,89,140,48,0,90,18,0,0,20,12,70,137,89,0,30,128,92,20,0,0,8,12,
-17,104,89,13,68,137,89,32,32,107,140,13,70,129,89,20,78,140,88,12,1,33,
-89,20,14,33,89,132,67,140,88,159,73,140,88,176,255,255,8,1,78,36,89,21,
-12,33,89,19,4,104,140,4,65,107,89,32,96,99,140,140,48,0,90,46,0,0,22,145,
-48,0,90,50,0,0,20,141,48,5,90,34,0,0,17,12,4,132,89,12,6,132,89,141,48,
-0,90,14,0,0,22,13,68,140,89,13,70,140,89,0,0,0,10,0,30,128,93,248,255,255,
-8,141,48,5,90,58,0,0,17,0,56,0,90,16,17,128,91,17,17,136,91,12,4,132,89,
-12,6,132,89,141,48,0,90,14,0,0,22,13,68,140,89,13,70,140,89,0,56,0,90,16,
-17,128,91,17,17,136,91,188,255,255,8,0,48,136,140,0,0,240,191,0,30,128,
-92,172,255,255,8,1,78,36,89,0,48,96,140,0,0,224,255,4,32,3,90,106,0,0,17,
-21,12,33,89,10,78,44,89,158,73,41,88,31,78,41,88,22,12,100,89,133,3,43,
-88,145,48,0,90,29,4,96,140,38,0,0,20,4,32,3,90,4,1,35,89,14,0,0,17,4,68,
-129,89,0,0,0,10,1,25,128,89,31,14,132,88,244,255,255,8,4,32,3,90,4,1,35,
-89,18,0,0,17,5,17,40,89,132,69,129,89,220,255,255,8,31,94,128,89,212,255,
-255,8,0,30,128,93,204,255,255,8,1,78,36,89,0,48,96,140,0,0,224,255,4,32,
-3,90,106,0,0,17,21,12,33,89,10,78,44,89,158,73,41,88,31,78,41,88,22,12,
-100,89,133,3,43,88,145,48,0,90,29,4,96,140,38,0,0,20,4,32,3,90,4,1,35,89,
-14,0,0,17,4,68,129,89,0,0,0,10,1,25,128,89,31,14,132,88,244,255,255,8,4,
-32,3,90,4,1,35,89,18,0,0,17,4,68,41,89,5,17,128,89,220,255,255,8,31,94,
-128,89,212,255,255,8,0,30,128,92,204,255,255,8,1,78,36,89,0,48,96,140,0,
-0,224,255,4,32,3,90,66,0,0,17,21,12,33,89,11,78,44,89,159,73,41,88,21,12,
-100,89,133,3,43,88,145,48,0,90,38,0,0,20,30,4,96,140,4,32,3,90,18,0,0,17,
-4,1,35,89,4,68,129,89,0,0,0,10,1,25,128,89,248,255,255,8,0,30,128,92,240,
-255,255,8,1,78,36,89,0,48,96,140,255,255,223,255,12,32,1,90,4,49,0,90,82,
-0,0,22,21,12,33,89,128,3,96,140,12,1,33,89,255,0,96,140,4,32,3,90,46,0,
-0,19,23,14,33,89,12,78,44,89,9,76,41,89,132,67,33,88,29,12,44,89,28,47,
-4,90,5,0,129,91,31,111,4,90,159,15,132,88,0,0,0,10,132,48,0,90,48,0,0,20,
-24,0,0,8,42,0,0,18,0,48,96,140,0,0,224,255,4,32,3,90,18,0,0,17,0,48,128,
-140,0,0,128,127,204,255,255,8,1,25,128,89,204,255,255,8,0,30,128,92,188,
-255,255,8,31,12,84,89,31,142,82,89,1,14,36,89,0,48,96,140,255,255,255,254,
-12,32,1,90,4,49,0,90,58,0,0,22,24,12,33,89,0,48,96,140,128,252,255,255,
-12,1,33,89,20,14,33,89,9,14,44,89,12,76,41,89,132,67,137,88,29,14,132,89,
-145,131,138,88,0,0,0,10,0,30,128,93,244,255,255,8,250,255,255,18,0,48,96,
-140,0,0,0,255,12,32,1,90,22,0,0,20,0,48,136,140,0,0,240,127,0,30,128,92,
-208,255,255,8,1,25,128,89,1,25,136,89,200,255,255,8,15,140,84,89,31,142,
-82,89,17,142,36,89,17,12,33,89,31,111,4,90,90,0,0,16,0,48,96,140,0,60,0,
-0,12,1,33,89,255,7,96,140,4,32,3,90,46,0,0,19,31,78,140,88,11,76,60,89,
-21,78,52,89,20,14,33,89,135,3,137,88,10,47,4,90,11,12,132,89,6,0,132,91,
-138,67,140,88,0,0,0,10,34,0,0,17,0,48,136,140,0,0,240,127,0,30,128,92,232,
-255,255,8,144,67,140,88,17,48,0,90,220,255,255,18,1,25,128,89,1,25,136,
-89,212,255,255,8,31,72,84,88,8,0,0,8,31,78,84,88,1,78,36,89,0,48,96,140,
-0,0,224,255,4,32,3,90,10,0,0,17,10,22,136,92,0,0,0,10,16,22,24,92,0,30,
-48,93,0,30,64,93,0,30,80,93,47,0,144,140,57,0,152,140,3,206,57,88,0,16,
-36,128,1,8,132,89,19,32,1,90,4,161,4,90,134,0,0,22,143,8,33,88,4,239,1,
-90,82,0,0,18,8,22,112,93,2,78,74,89,30,12,106,89,2,14,66,89,137,67,75,88,
-0,120,0,90,14,0,66,91,15,64,74,91,8,0,66,91,9,64,74,91,4,0,66,91,0,72,74,
-91,9,193,123,88,143,48,0,90,254,1,0,20,134,201,57,88,2,239,1,90,0,136,49,
-91,148,255,255,8,10,22,88,92,2,142,82,89,11,128,82,89,1,142,82,89,4,128,
-82,89,10,193,90,88,139,48,0,90,214,1,0,20,135,201,57,88,108,255,255,8,46,
-0,88,140,4,224,2,90,234,1,0,18,45,0,88,140,4,224,2,90,238,1,0,18,43,0,88,
-140,4,224,2,90,6,2,0,18,69,0,88,140,5,14,97,88,12,224,2,90,14,2,0,18,68,
-0,88,140,12,224,2,90,2,2,0,18,3,1,28,89,1,201,24,89,0,80,28,146,6,239,1,
-90,102,1,0,16,144,0,96,140,135,0,99,88,16,40,3,90,86,1,0,18,5,239,1,90,
-8,0,0,16,10,17,80,89,6,129,82,89,54,1,96,140,12,17,104,89,1,73,107,89,140,
-160,2,90,138,97,3,90,58,1,0,22,255,3,32,140,137,16,112,100,32,0,0,18,136,
-16,112,100,54,1,0,16,14,209,119,89,14,6,74,89,0,30,64,92,32,160,115,140,
-28,0,0,8,1,136,123,89,14,209,119,89,15,4,122,89,14,6,66,89,14,70,74,89,
-143,67,74,88,14,1,33,89,0,48,40,140,0,88,0,0,138,48,0,90,18,0,0,19,0,48,
-40,140,176,89,0,0,10,17,80,89,143,136,90,88,139,93,97,152,13,64,114,103,
-12,64,146,103,0,120,0,90,14,192,116,91,15,16,120,91,13,0,146,103,14,192,
-116,91,15,16,120,91,11,125,89,144,128,0,0,0,132,192,34,89,4,140,90,89,139,
-125,65,152,192,0,0,0,15,64,98,103,14,64,146,103,0,120,0,90,12,192,100,91,
-13,16,104,91,15,0,146,103,12,192,100,91,13,16,104,91,11,125,89,144,96,1,
-0,0,132,192,34,89,63,32,33,140,31,111,3,90,20,0,0,18,12,0,99,91,13,64,107,
-91,1,9,33,89,236,255,255,8,132,48,0,90,90,0,0,20,12,22,88,92,31,78,107,
-88,11,12,131,89,21,78,115,89,11,76,139,89,142,3,132,88,20,14,33,89,145,
-3,137,88,10,239,2,90,0,8,132,91,0,72,140,91,1,239,1,90,159,79,140,88,0,
-0,0,10,1,25,128,89,1,25,136,89,244,255,255,8,16,0,0,18,28,0,0,8,5,239,1,
-90,22,0,0,16,0,30,128,93,212,255,255,8,138,48,0,90,244,255,255,20,0,48,
-136,140,0,0,240,127,0,30,128,92,188,255,255,8,2,239,1,90,194,255,255,18,
-130,201,57,88,108,253,255,8,1,9,100,89,12,224,0,90,14,0,0,21,129,201,57,
-88,88,253,255,8,3,239,1,90,158,255,255,16,133,201,57,88,72,253,255,8,1,
-9,100,89,12,224,0,90,62,253,255,18,3,239,1,90,54,253,255,18,124,255,255,
-8,4,239,1,90,118,255,255,18,132,201,57,88,131,201,57,88,32,253,255,8,0,
-0,0,0,0,48,96,140,0,0,224,255,1,78,36,89,12,32,1,90,202,4,0,22,21,12,33,
-89,32,0,96,140,145,48,0,90,8,0,0,19,45,0,96,140,0,144,100,130,1,136,148,
-89,51,4,96,140,12,1,49,89,16,22,32,92,11,78,44,89,11,76,41,89,148,73,41,
-88,1,78,100,89,144,3,99,88,12,48,0,90,12,0,0,21,0,30,32,93,0,30,48,92,0,
-48,96,140,151,117,0,0,140,128,57,116,0,48,96,140,160,134,1,0,1,12,107,89,
-159,205,113,89,14,67,107,88,7,64,59,89,140,197,57,116,7,22,24,92,134,48,
-0,90,10,2,0,19,9,30,96,92,140,192,105,89,141,48,0,90,8,0,0,22,135,17,96,
-89,140,192,57,89,12,57,104,144,160,92,0,0,5,64,83,103,4,64,35,103,0,120,
-0,90,10,64,41,91,0,200,90,91,139,16,96,100,54,0,0,16,12,128,49,89,1,136,
-49,89,12,4,33,89,0,47,1,90,1,12,33,89,12,68,81,89,1,140,82,89,12,209,103,
-89,12,70,41,89,4,64,33,91,12,198,90,89,10,192,42,91,135,48,0,90,146,255,
-255,20,6,48,0,90,38,0,0,18,32,160,97,140,6,17,48,89,1,137,121,89,15,39,
-1,90,6,4,33,89,12,70,97,89,6,68,41,89,12,0,33,91,19,30,120,92,143,57,96,
-152,0,92,0,0,1,201,123,89,5,96,3,90,240,255,255,20,22,0,0,17,12,112,0,90,
-14,0,0,18,4,32,3,90,220,255,255,20,2,200,123,89,15,192,112,89,142,48,0,
-90,8,0,0,17,1,30,112,92,1,136,107,89,20,64,107,89,20,48,0,90,0,0,96,33,
-12,64,107,89,13,224,4,90,34,2,0,17,19,176,4,90,8,0,0,22,18,30,152,92,14,
-17,100,89,20,32,3,90,8,0,0,22,12,22,160,92,0,30,64,92,14,224,3,90,8,0,0,
-22,15,129,67,89,15,192,96,89,140,48,0,90,8,0,0,17,3,81,120,89,159,205,96,
-89,3,3,107,88,12,65,107,89,140,64,107,88,13,32,5,90,132,0,0,22,20,65,107,
-89,13,240,4,90,16,0,0,22,0,30,32,93,1,30,120,92,108,0,0,8,141,57,80,152,
-0,92,0,0,1,140,82,89,31,206,130,89,1,204,90,89,144,131,82,88,0,120,0,90,
-10,0,33,91,11,64,41,91,13,176,2,90,32,0,0,20,0,48,80,140,0,202,154,59,138,
-0,33,103,5,22,32,92,0,30,40,92,9,73,107,89,9,201,123,89,13,57,80,144,160,
-92,0,0,10,68,137,112,138,69,41,112,4,22,128,92,138,0,132,103,17,22,32,92,
-13,193,123,89,4,22,128,93,184,2,0,11,136,48,0,90,24,0,0,22,48,0,96,140,
-0,144,100,130,1,136,148,89,1,9,66,89,232,255,255,8,0,30,104,92,0,144,108,
-130,1,136,148,89,0,30,240,92,0,0,0,10,0,48,96,140,16,91,0,0,0,30,104,92,
-0,16,131,144,16,17,128,89,16,160,1,90,20,0,0,17,4,8,99,89,1,72,107,89,13,
-48,4,90,228,255,255,20,4,9,99,89,1,73,107,89,0,16,131,144,16,48,0,90,70,
-0,0,18,16,128,49,89,4,78,99,89,12,193,57,89,141,57,96,152,112,90,0,0,13,
-64,81,103,12,64,129,103,0,120,0,90,10,64,84,91,11,16,88,91,13,0,129,103,
-10,64,36,91,11,16,40,91,53,0,96,140,6,32,3,90,134,255,255,19,0,48,96,140,
-48,90,0,0,0,30,104,92,0,16,131,144,16,17,128,89,16,160,1,90,20,0,0,17,4,
-8,99,89,1,72,107,89,13,48,4,90,228,255,255,20,4,9,99,89,1,73,107,89,0,16,
-131,144,16,48,0,90,54,0,0,18,16,128,49,89,13,193,57,89,141,57,96,152,176,
-89,0,0,13,64,81,103,12,64,129,103,0,120,0,90,10,64,84,91,11,16,88,91,13,
-0,129,103,10,64,36,91,11,16,40,91,6,70,41,89,32,0,96,140,6,1,99,89,12,4,
-97,89,6,6,33,89,140,67,41,88,7,193,24,89,140,253,255,8,19,176,1,90,22,1,
-0,20,15,192,24,89,1,201,24,89,0,30,104,92,19,240,1,90,22,0,0,22,7,201,108,
-89,141,240,3,90,8,0,0,22,15,30,104,92,1,72,107,89,15,96,3,90,148,0,0,22,
-13,193,115,89,142,57,80,152,0,92,0,0,1,140,82,89,31,206,130,89,1,204,90,
-89,144,131,82,88,0,120,0,90,10,0,33,91,11,64,41,91,14,176,2,90,32,0,0,20,
-0,48,80,140,0,202,154,59,138,0,33,103,5,22,32,92,0,30,40,92,9,137,115,89,
-9,201,123,89,14,57,80,144,160,92,0,0,10,68,137,112,138,69,41,112,4,22,128,
-92,138,0,132,103,17,22,32,92,14,193,123,89,143,57,96,152,0,92,0,0,5,96,
-3,90,24,0,0,20,14,0,0,17,4,32,3,90,12,0,0,20,1,200,123,89,1,200,24,89,4,
-22,128,93,1,30,112,92,164,0,0,11,69,0,96,140,0,144,100,130,1,136,148,89,
-43,0,96,140,131,48,0,90,12,0,0,19,3,17,24,89,45,0,96,140,0,144,100,130,
-1,136,148,89,3,22,128,92,0,30,136,92,3,30,120,92,15,22,112,92,15,22,104,
-92,100,0,0,11,200,253,255,8,42,0,96,140,0,144,100,130,1,136,148,89,2,203,
-156,90,240,255,255,20,176,253,255,8,0,48,96,140,78,97,78,0,36,0,0,21,43,
-0,96,140,145,48,0,90,8,0,0,19,45,0,96,140,0,144,100,130,1,136,148,89,0,
-48,96,140,73,78,70,0,0,144,100,130,1,136,148,89,12,48,0,90,8,12,99,89,240,
-255,255,21,120,253,255,8,143,57,96,140,248,91,0,0,14,48,0,90,16,0,0,21,
-46,0,120,140,0,144,124,130,1,136,148,89,0,16,83,152,8,9,99,89,47,0,120,
-140,1,200,123,89,0,56,0,90,10,1,132,91,11,65,140,91,240,255,255,18,10,0,
-132,91,11,64,140,91,0,144,124,130,1,136,148,89,1,137,115,89,144,67,124,
-88,15,48,0,90,12,0,0,21,142,48,0,90,14,0,0,20,10,112,0,90,160,255,255,17,
-0,144,7,132,0,0,0,0,31,200,156,88,1,78,36,89,1,206,44,89,21,94,96,89,4,
-0,107,89,13,32,3,90,154,1,0,22,5,0,107,89,13,32,3,90,142,1,0,22,11,78,60,
-89,21,12,100,89,11,14,52,89,140,195,57,88,159,201,57,88,11,206,76,89,21,
-140,100,89,11,142,68,89,140,67,74,88,159,73,74,88,21,12,33,89,21,76,41,
-89,31,76,84,89,31,142,82,89,4,96,1,90,32,0,104,140,52,0,0,20,5,1,97,89,
-12,96,3,90,16,0,0,20,9,22,64,92,0,30,72,92,13,1,99,89,12,4,66,89,12,65,
-107,89,13,70,106,89,12,68,74,89,141,3,66,88,52,0,0,8,4,65,97,89,12,96,3,
-90,16,0,0,20,7,22,48,92,0,30,56,92,13,1,99,89,12,132,49,89,12,65,107,89,
-13,198,105,89,12,196,57,89,141,131,49,88,5,22,32,92,17,195,100,88,31,47,
-3,90,62,0,0,18,8,128,49,91,9,192,57,91,150,0,0,16,1,140,49,89,31,206,97,
-89,1,204,57,89,140,131,49,88,1,8,33,89,255,7,96,140,4,32,3,90,116,0,0,20,
-12,22,32,92,0,30,48,93,104,0,0,8,8,129,49,91,9,193,57,91,22,0,0,18,0,56,
-0,90,6,17,48,91,7,17,56,91,31,136,82,88,135,16,96,100,32,0,0,18,134,16,
-96,100,102,0,0,16,12,209,103,89,12,134,57,89,0,30,48,92,32,32,99,140,28,
-0,0,8,12,132,105,89,1,76,107,89,12,209,103,89,12,198,57,89,12,134,49,89,
-141,195,57,88,12,1,33,89,132,48,0,90,54,0,0,20,10,175,1,90,31,206,57,88,
-11,140,129,89,21,206,105,89,11,204,137,89,20,14,33,89,145,3,137,88,13,0,
-132,91,10,64,140,91,0,0,0,10,0,30,128,93,248,255,255,8,0,30,128,92,10,22,
-136,92,236,255,255,8,0,48,96,140,0,0,224,255,12,32,1,90,70,0,0,18,90,0,
-0,20,12,96,1,90,50,0,0,18,78,0,0,20,132,3,108,88,13,48,0,90,22,0,0,18,133,
-131,108,88,13,48,0,90,70,254,255,21,176,255,255,8,133,131,108,88,13,48,
-0,90,50,0,0,18,18,22,128,93,156,255,255,8,12,96,1,90,22,0,0,20,146,255,
-255,17,17,195,100,88,140,48,0,90,134,255,255,19,1,25,128,89,1,25,136,89,
-120,255,255,8,145,192,140,88,0,30,128,92,108,255,255,8,17,195,28,88,31,
-204,24,89,31,206,24,89,1,78,36,89,1,206,44,89,21,94,96,89,4,0,107,89,13,
-32,3,90,238,0,0,22,5,0,107,89,13,32,3,90,226,0,0,22,11,78,60,89,1,204,57,
-89,10,14,52,89,22,12,108,89,141,195,57,88,158,201,57,88,11,206,76,89,11,
-142,68,89,21,140,108,89,141,67,74,88,159,73,74,88,21,12,33,89,21,76,41,
-89,137,128,81,103,10,22,104,92,0,30,96,92,137,0,99,103,13,22,80,92,1,12,
-106,89,0,30,96,92,137,0,99,103,11,64,99,103,0,56,0,90,13,129,82,91,0,201,
-90,91,13,129,82,91,0,201,90,91,31,239,2,90,16,0,0,18,10,128,82,91,11,192,
-90,91,1,9,33,89,255,35,33,140,5,1,33,89,254,7,96,140,12,32,1,90,46,0,0,
-20,10,175,2,90,11,140,130,89,21,206,106,89,11,204,138,89,20,78,140,88,20,
-14,33,89,145,3,137,88,13,0,132,91,3,64,140,91,0,0,0,10,132,48,0,90,16,0,
-0,20,1,8,35,89,0,30,80,93,200,255,255,8,0,30,32,92,0,30,80,93,188,255,255,
-8,0,48,96,140,0,0,224,255,12,32,1,90,90,0,0,18,94,0,0,20,12,96,1,90,66,
-0,0,18,82,0,0,20,132,3,108,88,13,48,0,90,38,0,0,18,133,131,108,88,13,48,
-0,90,242,254,255,21,0,48,136,140,0,0,240,127,0,30,128,92,131,67,140,88,
-148,255,255,8,133,131,108,88,13,48,0,90,26,0,0,18,0,30,128,93,131,67,140,
-88,124,255,255,8,12,96,1,90,210,255,255,17,1,25,128,89,1,25,136,89,104,
-255,255,8,0,0,0,0,0,0,0,0,0,0,0,0,17,195,28,88,31,204,24,89,31,206,24,89,
-1,78,36,89,1,206,44,89,21,94,96,89,4,0,107,89,13,32,3,90,214,0,0,22,5,0,
-107,89,13,32,3,90,202,0,0,22,11,78,60,89,11,14,52,89,21,12,108,89,141,195,
-57,88,11,206,76,89,11,142,68,89,21,140,108,89,141,67,74,88,159,201,57,88,
-159,73,74,88,21,12,33,89,21,76,41,89,7,64,98,103,6,64,82,103,0,120,0,90,
-12,192,98,91,13,16,104,91,7,0,114,103,10,128,115,91,12,192,99,91,13,16,
-104,91,31,111,3,90,16,0,0,18,12,0,99,91,13,64,107,91,1,9,33,89,4,124,33,
-140,2,252,255,255,254,7,80,140,10,32,1,90,46,0,0,20,10,47,3,90,11,12,131,
-89,21,78,83,89,11,76,139,89,20,78,140,88,20,14,33,89,145,3,137,88,10,0,
-132,91,3,64,140,91,0,0,0,10,132,48,0,90,16,0,0,20,1,136,34,89,0,30,96,93,
-200,255,255,8,0,30,32,92,0,30,96,93,188,255,255,8,31,204,24,89,31,206,24,
-89,0,48,96,140,0,0,224,255,12,32,1,90,58,0,0,18,70,0,0,20,12,96,1,90,62,
-0,0,20,70,0,0,18,132,3,108,88,13,48,0,90,18,0,0,18,133,131,108,88,13,48,
-0,90,2,255,255,21,0,30,128,93,131,67,140,88,148,255,255,8,12,96,1,90,14,
-0,0,20,5,48,0,90,30,0,0,21,1,25,128,89,1,25,136,89,120,255,255,8,132,3,
-108,88,13,48,0,90,238,255,255,18,0,48,136,140,0,0,240,127,131,67,140,88,
-0,30,128,92,88,255,255,8,0,0,0,0,1,78,36,89,1,206,52,89,0,48,96,140,0,0,
-224,255,12,32,1,90,126,0,0,22,12,160,1,90,198,0,0,22,132,131,49,88,6,48,
-0,90,98,0,0,18,159,77,100,89,31,78,60,88,16,3,51,88,7,3,59,88,0,56,0,90,
-12,129,49,91,0,201,57,91,159,205,100,89,31,206,76,88,18,3,67,88,9,3,75,
-88,0,56,0,90,12,1,66,91,0,73,74,91,135,96,2,90,1,25,128,89,34,0,0,20,1,
-30,128,92,26,0,0,17,6,32,2,90,18,0,0,17,1,25,128,89,10,0,0,20,0,30,128,
-92,0,0,0,10,12,32,1,90,30,0,0,18,3,30,128,92,240,255,255,8,1,30,128,92,
-232,255,255,8,1,25,128,89,224,255,255,8,12,160,1,90,230,255,255,20,30,0,
-0,17,17,195,100,88,140,48,0,90,198,255,255,19,31,111,4,90,214,255,255,16,
-216,255,255,8,145,48,0,90,208,255,255,20,196,255,255,8,12,160,1,90,182,
-255,255,20,31,239,4,90,182,255,255,18,184,255,255,8,0,0,0,10
-};
-
-int pca200e_microcode_size_3 = sizeof(pca200e_microcode_3);
-
-u_char pca200e_microcode_4[] = {
-102,111,114,101,0,1,0,0,64,81,0,0,192,86,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,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,
-0,0,0,0,0,0,64,77,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,3,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-0,80,45,3,0,0,0,0,0,1,255,128,255,48,0,0,0,1,126,255,
-126,112,0,0,0,1,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-15,0,0,0,0,0,0,1,231,167,167,32,0,0,0,1,11,3,3,0,0,0,
-0,1,11,3,3,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,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,0,0,0,0,0,0,0,0,0,0,0,0,1,
-223,111,223,0,0,0,0,1,127,0,0,0,0,0,0,1,255,0,0,0,0,
-0,0,1,255,0,0,0,0,0,0,1,127,65,127,0,0,0,0,1,7,7,7,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,251,0,
-251,0,0,0,0,1,255,240,240,0,0,0,0,1,255,0,0,0,0,0,0,
-1,255,0,0,0,0,0,0,1,15,0,0,0,0,0,0,1,255,0,0,0,0,0,
-0,1,255,0,0,0,0,0,0,1,15,0,0,0,0,0,0,1,127,1,127,0,
-0,0,0,1,1,1,1,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,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,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,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,0,0,0,0,1,
-173,0,129,0,0,0,0,1,175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,255,175,255,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,1,255,0,0,0,0,0,0,1,255,255,0,0,0,
-0,0,1,255,0,0,0,0,0,0,1,255,0,0,0,0,0,0,1,255,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,
-0,0,0,0,0,0,0,0,0,0,1,7,3,7,0,0,0,0,1,127,126,127,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,1,255,255,255,0,0,0,0,1,255,255,255,144,0,0,0,0,0,
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,255,255,255,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,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,255,
-127,127,4,0,0,0,1,254,224,224,0,0,0,0,1,255,255,255,0,
-0,0,0,1,255,255,255,0,0,0,0,1,255,0,0,0,0,0,0,1,255,
-255,0,0,0,0,0,1,255,0,0,0,0,0,0,1,255,0,0,0,0,0,0,1,
-3,0,0,0,0,0,0,1,255,255,255,252,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,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,255,159,159,4,0,0,
-0,1,255,255,255,0,0,0,0,1,255,255,255,106,0,0,0,1,222,
-206,207,0,0,0,0,1,255,0,0,0,0,0,0,1,255,0,0,0,0,0,0,
-1,7,0,0,0,0,0,0,1,255,255,255,8,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,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,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,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,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,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,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,1,5,31,5,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,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,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,
-0,48,128,140,80,221,3,0,12,192,135,50,16,22,8,92,4,0,0,
-9,128,62,0,102,0,0,0,140,0,30,240,92,0,48,128,140,0,228,
-0,0,0,48,136,140,80,237,0,0,0,16,244,146,4,8,132,89,248,
-95,132,52,0,48,128,140,0,16,0,59,60,131,0,9,236,140,0,9,
-244,127,0,9,96,105,0,9,60,123,0,9,0,48,48,144,0,228,0,
-0,40,160,1,50,16,22,32,93,0,20,128,140,0,0,0,0,0,48,
-136,140,48,87,0,0,17,1,132,89,16,128,49,89,0,144,1,134,
-4,22,128,93,8,0,0,9,116,107,0,8,16,72,8,89,12,38,0,9,
-56,34,0,9,0,48,160,144,68,20,0,80,8,222,144,89,148,128,
-36,88,0,16,129,140,240,32,0,9,136,25,160,88,66,0,37,58,
-14,0,37,49,26,32,1,58,212,0,0,8,137,25,144,88,78,128,36,
-58,200,0,0,8,0,0,0,0,0,48,168,144,140,81,0,0,13,30,144,
-92,0,48,144,130,108,228,0,0,5,30,160,92,164,0,0,8,0,0,
-0,0,0,48,168,144,140,81,0,0,9,30,144,92,0,48,144,130,
-108,228,0,0,4,30,160,92,132,0,0,8,0,0,0,0,0,48,160,136,
-2,4,0,136,8,30,144,92,1,47,5,90,0,48,144,130,108,228,0,
-0,26,0,0,18,0,48,168,144,140,81,0,0,6,30,160,92,84,0,0,
-8,0,0,0,0,42,32,21,48,22,32,5,48,0,48,168,144,140,81,0,
-0,22,30,160,92,56,0,0,8,0,48,168,144,140,81,0,0,31,216,
-161,89,40,0,0,8,26,32,5,48,0,48,168,144,140,81,0,0,31,
-216,165,89,20,0,0,8,0,0,0,0,0,48,168,144,140,81,0,0,70,
-0,160,140,176,96,165,146,136,35,0,9,180,42,0,9,224,30,0,
-9,164,32,0,11,137,25,144,88,78,128,36,61,240,69,0,9,30,
-32,4,61,0,48,168,144,112,228,0,0,0,48,160,140,20,0,173,
-222,0,80,165,146,196,106,0,9,0,30,128,92,64,224,143,140,
-16,71,0,11,30,32,4,58,64,224,167,144,0,48,168,144,140,81,
-0,0,127,0,144,140,148,128,164,88,16,0,0,8,0,48,168,144,
-140,81,0,0,1,25,160,89,180,96,165,146,0,48,160,140,48,3,
-0,0,0,48,160,146,4,228,0,0,168,33,0,9,196,81,0,9,48,85,
-0,9,1,30,128,92,216,105,0,9,0,0,0,10,0,48,128,144,8,
-228,0,0,0,16,164,144,127,0,232,140,148,64,167,88,10,35,5,
-58,2,9,165,89,238,33,77,52,20,57,160,144,32,89,0,0,0,16,
-5,132,0,0,0,0,72,89,0,0,44,91,0,0,88,89,0,0,40,90,0,
-0,104,89,0,0,240,89,0,0,8,90,0,0,248,90,0,0,48,90,0,0,
-144,90,0,0,88,42,0,9,16,22,152,92,224,1,0,8,0,0,0,0,
-24,45,0,9,16,22,152,92,208,1,0,8,0,0,0,0,0,48,160,144,
-68,20,0,80,19,47,5,90,2,0,152,140,34,0,0,16,147,9,165,
-88,0,48,240,146,164,86,0,0,0,48,160,146,68,20,0,80,20,0,
-0,8,0,0,0,0,1,30,160,92,0,48,160,146,164,86,0,0,4,32,
-172,144,0,48,128,140,96,0,0,32,31,88,166,89,0,48,144,140,
-208,85,0,0,14,30,136,92,0,48,168,146,84,0,0,32,0,48,160,
-146,96,0,0,32,1,73,140,89,0,144,164,176,145,48,0,90,16,
-160,148,140,0,16,164,178,236,255,255,21,72,1,0,8,0,0,0,
-0,24,74,0,11,144,48,0,90,2,0,152,140,54,1,0,21,10,30,
-152,92,44,1,0,8,232,74,0,9,0,48,160,144,8,228,0,0,4,32,
-141,144,16,30,128,92,0,48,144,140,176,228,0,0,236,20,0,9,
-2,30,152,92,4,1,0,8,0,48,160,144,8,228,0,0,4,32,165,
-144,0,48,160,146,64,0,0,32,0,48,160,144,0,225,1,240,0,
-48,160,146,96,0,0,48,0,48,160,144,4,225,1,240,0,48,160,
-146,96,0,0,48,0,48,160,144,100,224,1,240,0,48,160,146,96,
-0,0,48,0,48,160,144,104,224,1,240,2,30,152,92,0,48,160,
-146,96,0,0,48,168,0,0,8,0,0,0,0,0,48,160,144,8,228,0,
-0,4,32,165,144,20,144,169,89,0,48,232,140,240,255,15,0,0,
-48,168,146,252,2,0,0,149,69,175,89,0,48,232,140,0,240,15,
-0,20,70,167,89,0,48,232,140,0,0,240,15,148,64,167,88,0,
-48,232,140,240,255,15,0,0,48,160,146,248,2,0,0,149,64,
-175,88,21,4,165,88,0,48,168,146,244,2,0,0,0,48,160,146,
-240,2,0,0,60,0,0,8,0,48,160,144,8,228,0,0,0,16,165,144,
-0,48,232,140,94,208,94,208,34,64,167,61,0,48,168,144,112,
-228,0,0,0,48,160,140,13,0,173,222,0,30,128,92,0,80,165,
-146,152,103,0,9,8,30,152,92,0,48,168,144,8,228,0,0,0,80,
-165,144,150,32,61,48,0,48,160,144,12,228,0,0,16,96,189,
-144,32,96,181,140,22,32,5,90,0,80,245,146,14,0,0,22,0,
-48,176,144,16,228,0,0,0,48,160,144,116,228,0,0,0,48,184,
-146,56,0,0,32,0,48,152,146,96,0,0,48,0,16,165,144,148,
-48,0,90,0,48,176,146,8,228,0,0,66,0,0,18,0,48,168,144,
-120,228,0,0,0,80,165,144,20,80,160,89,0,80,165,146,0,48,
-168,144,96,81,0,0,255,1,232,140,21,80,168,89,149,64,167,
-88,136,9,165,88,0,48,168,146,96,81,0,0,0,48,160,146,4,0,
-0,32,0,0,0,10,0,48,160,144,12,228,0,0,16,96,189,144,32,
-96,181,140,22,32,5,90,0,80,245,146,14,0,0,22,0,48,176,
-144,16,228,0,0,0,48,184,146,56,0,0,32,0,48,176,146,8,
-228,0,0,0,48,152,146,96,0,0,48,0,0,0,10,24,32,36,152,0,
-48,168,144,140,228,0,0,4,65,161,89,20,96,5,90,0,16,52,
-140,18,0,0,20,1,30,128,92,0,0,0,10,0,0,0,0,0,48,168,
-144,80,3,0,0,58,96,5,58,0,48,160,144,104,3,0,0,1,73,
-173,89,0,48,168,146,80,3,0,0,149,29,181,140,0,144,165,
-144,5,16,170,89,0,80,161,146,28,32,172,146,4,160,133,144,
-0,0,0,10,0,0,0,0,0,48,128,140,80,3,0,0,208,92,0,9,0,
-48,168,144,80,3,0,0,54,96,5,58,0,48,160,144,104,3,0,0,
-1,73,173,89,0,48,168,146,80,3,0,0,149,29,181,140,0,144,
-165,144,5,16,170,89,0,80,161,146,28,160,169,146,4,160,133,
-144,0,0,0,10,0,48,160,144,144,86,0,0,20,80,160,89,1,0,
-128,140,0,48,160,146,144,86,0,0,0,0,0,10,0,0,0,0,24,32,
-36,152,0,48,168,144,140,228,0,0,4,65,161,89,20,96,5,90,
-0,16,52,140,18,0,0,20,1,30,128,92,0,0,0,10,0,0,0,0,0,
-48,168,144,128,3,0,0,58,96,5,58,0,48,160,144,152,3,0,0,
-1,73,173,89,0,48,168,146,128,3,0,0,149,29,181,140,0,144,
-165,144,5,16,170,89,0,80,161,146,28,32,172,146,4,160,133,
-144,0,0,0,10,0,0,0,0,0,48,128,140,128,3,0,0,0,92,0,9,
-0,48,168,144,128,3,0,0,54,96,5,58,0,48,160,144,152,3,0,
-0,1,73,173,89,0,48,168,146,128,3,0,0,149,29,181,140,0,
-144,165,144,5,16,170,89,0,80,161,146,28,160,169,146,4,160,
-133,144,0,0,0,10,0,48,160,144,148,86,0,0,20,80,160,89,1,
-0,128,140,0,48,160,146,148,86,0,0,0,0,0,10,0,0,0,0,24,
-32,36,152,0,48,168,144,140,228,0,0,4,65,161,89,20,96,5,
-90,0,16,52,140,18,0,0,20,1,30,128,92,0,0,0,10,0,0,0,0,
-0,48,168,144,176,3,0,0,58,96,5,58,0,48,160,144,200,3,0,
-0,1,73,173,89,0,48,168,146,176,3,0,0,149,29,181,140,0,
-144,165,144,5,16,170,89,0,80,161,146,28,32,172,146,4,160,
-133,144,0,0,0,10,0,0,0,0,0,48,128,140,176,3,0,0,48,91,
-0,9,0,48,168,144,176,3,0,0,54,96,5,58,0,48,160,144,200,
-3,0,0,1,73,173,89,0,48,168,146,176,3,0,0,149,29,181,140,
-0,144,165,144,5,16,170,89,0,80,161,146,28,160,169,146,4,
-160,133,144,0,0,0,10,0,48,160,144,152,86,0,0,20,80,160,
-89,1,0,128,140,0,48,160,146,152,86,0,0,0,0,0,10,0,0,0,
-0,24,32,36,152,0,48,168,144,140,228,0,0,4,65,161,89,20,
-96,5,90,0,16,52,140,18,0,0,20,1,30,128,92,0,0,0,10,0,
-0,0,0,0,48,168,144,32,228,0,0,58,96,5,58,0,48,160,144,
-56,228,0,0,1,73,173,89,0,48,168,146,32,228,0,0,149,29,
-181,140,0,144,165,144,5,16,170,89,0,80,161,146,28,32,172,
-146,4,160,133,144,0,0,0,10,0,0,0,0,0,48,128,140,32,228,
-0,0,96,90,0,9,0,48,168,144,32,228,0,0,54,96,5,58,0,48,
-160,144,56,228,0,0,1,73,173,89,0,48,168,146,32,228,0,0,
-149,29,181,140,0,144,165,144,5,16,170,89,0,80,161,146,28,
-160,169,146,4,160,133,144,0,0,0,10,0,48,160,144,156,86,0,
-0,20,80,160,89,1,0,128,140,0,48,160,146,156,86,0,0,0,0,
-0,10,0,0,0,0,64,96,8,140,112,224,199,178,16,22,192,92,0,
-48,128,140,80,3,0,0,31,88,140,89,232,96,0,9,0,48,128,
-140,128,3,0,0,31,88,140,89,216,96,0,9,0,48,128,140,176,
-3,0,0,31,88,140,89,200,96,0,9,0,48,128,140,32,228,0,0,
-31,88,140,89,184,96,0,9,0,48,160,140,144,86,0,0,0,48,
-160,146,120,3,0,0,0,48,160,140,148,86,0,0,0,48,160,146,
-168,3,0,0,0,48,160,140,152,86,0,0,0,48,160,146,216,3,0,
-0,0,48,160,140,156,86,0,0,0,48,160,146,72,228,0,0,120,
-32,166,144,0,48,160,146,96,3,0,0,136,32,174,144,0,48,168,
-146,144,3,0,0,152,32,182,144,0,48,176,146,192,3,0,0,168,
-32,190,144,64,32,38,140,148,48,0,90,0,48,184,146,48,228,
-0,0,30,0,0,21,26,96,5,61,22,160,5,61,18,224,5,61,8,30,
-128,92,112,224,199,176,0,0,0,10,52,32,169,144,0,48,168,
-146,100,3,0,0,68,32,177,144,0,48,176,146,148,3,0,0,84,
-32,185,144,0,48,184,146,196,3,0,0,0,48,160,144,96,3,0,0,
-100,32,129,144,148,48,0,90,0,48,128,146,52,228,0,0,14,0,
-0,18,63,0,200,140,178,95,174,62,0,48,160,144,144,3,0,0,
-14,32,5,58,63,0,200,140,158,95,182,62,0,48,160,144,192,3,
-0,0,14,32,5,58,63,0,200,140,138,95,190,62,0,48,160,144,
-48,228,0,0,14,32,5,58,63,0,200,140,118,95,134,62,0,48,
-160,144,96,3,0,0,38,32,5,58,0,48,160,144,144,3,0,0,26,
-32,5,58,0,48,168,144,100,3,0,0,0,48,160,144,148,3,0,0,
-74,31,173,57,0,48,160,144,192,3,0,0,38,32,5,58,0,48,160,
-144,48,228,0,0,26,32,5,58,0,48,168,144,196,3,0,0,0,48,
-160,144,52,228,0,0,30,31,173,57,0,48,160,144,96,3,0,0,
-46,32,5,61,0,48,168,144,148,3,0,0,0,48,160,140,224,92,0,
-0,0,48,160,146,80,228,0,0,0,48,168,146,100,3,0,0,24,0,
-0,8,0,0,0,0,0,48,160,140,16,92,0,0,0,48,160,146,80,228,
-0,0,0,48,160,144,192,3,0,0,42,32,5,61,0,48,168,144,52,
-228,0,0,0,48,160,140,128,94,0,0,0,48,160,146,84,228,0,0,
-0,48,168,146,196,3,0,0,20,0,0,8,0,48,160,140,176,93,0,
-0,0,48,160,146,84,228,0,0,60,32,185,144,0,48,184,146,92,
-3,0,0,76,32,129,144,0,48,128,146,140,3,0,0,92,32,145,
-144,0,48,144,146,188,3,0,0,0,48,232,144,96,3,0,0,108,32,
-153,144,157,48,0,90,0,48,152,146,44,228,0,0,10,0,0,18,
-86,254,5,59,31,216,39,89,78,30,185,49,151,208,160,88,70,
-62,5,61,0,48,136,144,144,3,0,0,10,96,4,58,54,62,4,59,
-50,30,129,49,144,208,160,88,42,62,5,61,0,48,176,144,192,
-3,0,0,10,160,5,58,26,190,4,59,22,30,145,49,146,208,160,
-88,14,62,5,61,0,48,168,144,48,228,0,0,10,96,5,58,254,
-253,4,59,250,29,153,49,147,208,160,88,242,61,5,61,10,96,
-7,58,234,221,237,60,10,96,4,58,226,29,140,60,10,160,5,58,
-218,157,180,60,10,96,5,58,210,221,172,60,0,48,104,144,144,
-3,0,0,0,48,128,176,128,3,0,0,0,48,24,144,96,3,0,0,0,
-48,160,176,80,3,0,0,0,48,120,144,48,228,0,0,0,48,64,176,
-32,228,0,0,0,48,112,144,192,3,0,0,0,48,32,176,176,3,0,
-0,23,193,232,89,1,205,96,89,0,80,175,140,12,22,176,92,0,
-48,160,146,80,3,0,0,0,48,232,146,84,3,0,0,0,48,184,146,
-92,3,0,0,0,48,96,146,88,3,0,0,19,65,163,89,1,77,107,89,
-0,16,141,140,13,22,144,92,0,48,128,146,128,3,0,0,0,48,
-160,146,132,3,0,0,0,48,104,146,136,3,0,0,0,48,152,146,
-140,3,0,0,7,129,163,89,1,141,115,89,0,16,45,140,14,22,
-48,92,0,48,32,146,176,3,0,0,0,48,160,146,180,3,0,0,0,
-48,112,146,184,3,0,0,0,48,56,146,188,3,0,0,11,193,163,
-89,1,205,123,89,0,16,77,140,15,22,80,92,0,48,64,146,32,
-228,0,0,0,48,160,146,36,228,0,0,131,48,0,90,0,48,120,
-146,40,228,0,0,0,48,128,140,80,3,0,0,0,30,32,92,0,48,
-88,146,44,228,0,0,98,0,0,18,112,32,142,144,16,22,208,92,
-0,48,216,140,56,3,0,0,0,48,128,146,48,3,0,0,0,48,216,
-146,52,3,0,0,228,38,0,9,144,48,2,90,1,0,32,140,142,252,
-255,18,0,48,160,144,108,3,0,0,12,32,166,146,0,48,128,144,
-96,3,0,0,3,14,132,89,76,58,0,9,144,48,0,90,0,48,128,
-146,104,3,0,0,98,252,255,18,0,48,160,144,144,3,0,0,148,
-48,0,90,0,48,128,140,144,3,0,0,126,0,0,18,16,9,204,89,
-132,57,160,140,0,0,0,0,0,48,168,140,48,3,0,0,96,224,207,
-146,20,124,181,140,8,0,0,0,100,224,183,146,96,224,207,144,
-128,32,142,144,20,64,165,89,16,9,132,89,0,16,205,146,4,
-32,181,146,84,38,0,9,144,48,2,90,1,32,33,140,254,251,255,
-18,0,48,160,144,156,3,0,0,16,32,166,146,0,48,128,144,144,
-3,0,0,3,14,132,89,188,57,0,9,144,48,0,90,0,48,128,146,
-152,3,0,0,210,251,255,18,0,48,160,144,192,3,0,0,148,48,
-0,90,0,48,128,140,192,3,0,0,126,0,0,18,16,9,204,89,132,
-57,160,140,0,0,0,0,0,48,168,140,48,3,0,0,80,224,207,146,
-20,124,181,140,8,0,0,0,84,224,183,146,80,224,207,144,144,
-32,142,144,20,64,165,89,16,9,132,89,0,16,205,146,4,32,
-181,146,196,37,0,9,144,48,2,90,1,32,33,140,110,251,255,
-18,0,48,160,144,204,3,0,0,20,32,166,146,0,48,128,144,192,
-3,0,0,3,14,132,89,44,57,0,9,144,48,0,90,0,48,128,146,
-200,3,0,0,66,251,255,18,0,48,160,144,48,228,0,0,148,48,
-0,90,0,48,128,140,48,228,0,0,126,0,0,18,16,9,204,89,132,
-57,160,140,0,0,0,0,0,48,168,140,48,3,0,0,64,224,207,146,
-20,124,181,140,8,0,0,0,68,224,183,146,64,224,207,144,160,
-32,142,144,20,64,165,89,16,9,132,89,0,16,205,146,4,32,
-181,146,52,37,0,9,144,48,2,90,1,32,33,140,222,250,255,18,
-0,48,160,144,60,228,0,0,24,32,166,146,0,48,128,144,48,
-228,0,0,3,14,132,89,156,56,0,9,144,48,0,90,0,48,128,146,
-56,228,0,0,178,250,255,18,0,48,160,140,48,3,0,0,2,30,
-128,92,132,61,165,146,252,255,255,255,112,224,199,176,0,0,
-0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,22,32,92,0,48,128,
-146,104,228,0,0,1,9,164,89,0,80,44,140,144,64,129,112,0,
-48,240,146,8,3,0,0,0,48,240,146,4,3,0,0,0,48,160,146,
-12,3,0,0,48,56,0,9,144,48,0,90,0,48,128,146,96,228,0,0,
-18,0,0,21,8,30,128,92,0,0,0,10,0,0,0,0,4,57,128,140,0,
-0,0,0,8,56,0,9,144,48,0,90,0,48,128,146,0,3,0,0,18,0,
-0,21,8,30,128,92,0,0,0,10,0,0,0,0,0,0,176,140,150,32,
-1,90,0,48,184,144,96,228,0,0,98,0,0,19,0,47,1,90,0,0,
-136,140,30,0,0,16,1,30,176,92,150,32,1,90,23,64,164,89,
-23,64,185,89,0,16,164,146,62,0,0,19,0,48,168,144,0,3,0,
-0,23,64,164,89,22,93,165,146,0,48,168,144,0,3,0,0,23,64,
-185,89,23,64,164,89,22,125,165,146,4,0,0,0,22,144,176,89,
-150,32,1,90,23,64,185,89,204,255,255,20,2,14,129,89,116,
-55,0,9,144,48,0,90,0,48,128,146,100,228,0,0,14,0,0,21,
-8,30,128,92,0,0,0,10,0,0,176,140,62,0,177,59,22,32,1,
-48,1,30,176,92,150,32,1,90,0,16,244,146,42,0,0,19,0,48,
-160,144,100,228,0,0,22,29,245,146,0,48,160,144,100,228,0,
-0,22,61,245,146,4,0,0,0,22,144,176,89,224,31,177,60,2,
-30,128,92,0,0,0,10,0,48,168,144,4,3,0,0,0,48,160,144,0,
-3,0,0,21,29,165,140,0,16,149,144,146,48,0,90,0,16,44,
-140,17,22,32,92,54,0,0,18,0,16,245,146,0,48,160,144,4,3,
-0,0,0,48,168,144,104,228,0,0,0,144,140,146,16,16,134,89,
-8,160,180,140,0,16,148,146,4,32,180,146,92,0,0,8,0,0,0,
-0,0,48,160,144,84,81,0,0,106,32,5,59,188,1,0,9,0,48,
-168,144,4,3,0,0,0,48,160,144,0,3,0,0,21,29,165,140,0,
-16,149,144,74,160,4,58,0,16,245,146,0,48,160,144,4,3,0,
-0,0,48,168,144,104,228,0,0,0,144,36,146,5,16,182,89,8,
-160,188,140,0,144,149,146,4,160,189,146,1,73,173,89,1,32,
-165,140,148,64,165,88,1,0,128,140,0,48,160,146,4,3,0,0,
-0,0,0,10,0,48,160,144,160,86,0,0,20,80,160,89,0,0,128,
-140,0,48,160,146,160,86,0,0,0,0,0,10,0,0,0,0,0,0,0,0,
-0,0,0,0,0,48,136,144,140,228,0,0,16,22,32,92,16,47,0,9,
-0,48,176,144,132,228,0,0,0,48,128,144,8,3,0,0,0,48,160,
-144,8,3,0,0,0,48,168,144,104,228,0,0,0,48,184,144,0,3,
-0,0,20,80,160,89,22,58,176,140,16,0,0,0,1,73,173,89,0,
-16,177,146,148,64,165,88,16,221,37,146,0,48,160,146,8,3,
-0,0,0,0,0,10,0,48,240,140,152,104,0,0,30,22,136,92,0,0,
-240,140,0,48,168,144,88,81,0,0,0,48,184,144,100,228,0,0,
-0,48,160,144,104,228,0,0,0,48,176,144,84,81,0,0,21,221,
-133,144,1,9,165,89,1,96,173,140,149,0,173,88,1,137,181,
-89,0,48,168,146,88,81,0,0,0,48,176,146,84,81,0,0,0,80,
-4,132,0,0,0,10,0,0,0,0,0,48,240,140,12,105,0,0,30,22,
-144,92,0,0,240,140,0,48,160,144,160,86,0,0,0,48,184,144,
-92,81,0,0,0,48,136,144,100,228,0,0,0,48,168,144,104,228,
-0,0,0,48,176,144,84,81,0,0,20,80,160,89,0,48,160,146,
-160,86,0,0,1,73,173,89,1,224,165,140,148,64,165,88,23,93,
-132,146,22,80,176,89,0,48,160,146,92,81,0,0,0,48,176,146,
-84,81,0,0,0,144,4,132,0,0,0,10,0,48,64,140,88,81,0,0,
-0,48,56,140,16,3,0,0,0,48,72,140,4,0,0,32,0,48,48,140,
-8,3,0,0,0,48,136,144,16,3,0,0,0,80,164,144,110,33,5,58,
-0,16,162,144,0,48,176,144,100,228,0,0,0,48,168,144,104,
-228,0,0,20,157,37,144,1,73,173,89,1,32,165,140,148,64,
-165,88,0,16,162,146,4,16,169,89,0,80,181,144,0,48,160,
-144,84,81,0,0,0,48,128,140,255,255,0,0,150,0,132,88,0,
-80,133,146,0,80,140,144,1,9,165,89,0,48,160,146,84,81,0,
-0,4,22,144,92,144,56,128,140,9,0,0,0,3,12,132,89,144,
-141,45,89,100,5,0,9,0,208,161,144,0,48,168,144,20,3,0,0,
-20,16,178,89,4,32,189,144,22,96,5,90,0,16,245,146,14,0,
-0,22,0,48,176,144,24,3,0,0,0,48,160,144,116,228,0,0,0,
-48,184,146,56,0,0,32,129,73,169,88,0,48,168,146,96,0,0,
-48,0,16,165,144,148,48,0,90,0,208,177,146,62,0,0,18,0,
-48,168,144,120,228,0,0,0,80,165,144,20,80,160,89,0,80,
-165,146,0,48,168,144,96,81,0,0,255,1,152,140,21,80,168,
-89,149,192,164,88,0,48,168,146,96,81,0,0,136,9,165,88,0,
-80,162,146,0,48,136,144,140,228,0,0,4,22,128,92,180,44,0,
-9,0,48,160,144,132,228,0,0,0,48,128,144,8,3,0,0,0,48,
-184,144,0,3,0,0,0,48,176,144,104,228,0,0,0,48,168,144,
-84,81,0,0,20,58,160,140,16,0,0,0,0,16,161,146,0,144,161,
-144,149,48,0,90,16,221,37,146,1,137,181,89,1,32,165,140,
-148,128,165,88,0,144,161,146,148,254,255,17,0,0,0,10,0,0,
-0,0,0,0,0,10,0,0,0,0,88,32,164,144,148,48,1,90,0,144,
-236,140,19,22,48,92,26,0,0,18,14,32,37,52,210,32,5,58,0,
-1,0,8,106,32,45,58,248,0,0,8,50,224,20,61,0,48,160,144,
-52,86,0,0,0,48,168,144,72,86,0,0,17,0,141,89,1,96,173,
-140,0,48,136,146,52,86,0,0,0,48,168,146,72,86,0,0,200,0,
-0,8,0,48,160,144,64,86,0,0,0,48,168,144,80,86,0,0,17,0,
-141,89,1,96,173,140,0,48,136,146,64,86,0,0,0,48,168,146,
-80,86,0,0,156,0,0,8,0,0,0,0,50,224,20,61,0,48,160,144,
-100,86,0,0,0,48,168,144,116,86,0,0,17,0,141,89,1,96,173,
-140,0,48,136,146,100,86,0,0,0,48,168,146,116,86,0,0,104,
-0,0,8,0,48,160,144,104,86,0,0,0,48,168,144,128,86,0,0,
-17,0,141,89,1,96,173,140,0,48,136,146,104,86,0,0,0,48,
-168,146,128,86,0,0,60,0,0,8,0,0,0,0,34,224,20,61,0,48,
-160,144,36,86,0,0,17,0,141,89,0,48,136,146,36,86,0,0,28,
-0,0,8,0,0,0,0,0,48,160,144,40,86,0,0,17,0,141,89,0,48,
-136,146,40,86,0,0,24,32,36,152,4,65,161,89,8,9,165,89,3,
-12,165,89,4,32,161,146,88,32,164,144,4,16,138,89,148,48,
-0,90,48,32,164,176,22,0,0,18,18,64,149,62,4,16,140,89,
-21,129,236,89,12,32,169,146,26,128,237,60,22,65,239,89,4,
-96,180,146,157,160,5,90,8,96,140,140,240,255,255,19,10,96,
-7,59,4,96,236,146,0,48,160,144,84,81,0,0,10,32,5,59,224,
-252,255,9,0,48,136,144,16,3,0,0,0,80,164,144,122,32,5,
-61,4,32,129,144,0,48,144,144,92,81,0,0,0,48,136,144,100,
-228,0,0,0,48,168,144,92,81,0,0,0,48,176,144,104,228,0,0,
-0,48,184,144,84,81,0,0,16,142,161,89,148,3,164,88,4,32,
-161,146,18,93,36,146,0,48,160,144,160,86,0,0,1,137,181,
-89,1,96,173,140,149,128,173,88,1,224,189,140,0,48,168,146,
-92,81,0,0,0,48,184,146,84,81,0,0,20,80,160,89,0,48,160,
-146,160,86,0,0,0,0,0,10,4,32,129,144,0,80,140,144,4,22,
-144,92,144,56,128,140,9,0,0,0,131,13,132,89,64,2,0,9,0,
-48,160,144,16,3,0,0,0,48,168,144,20,3,0,0,20,16,178,89,
-4,32,189,144,22,96,5,90,0,16,245,146,14,0,0,22,0,48,176,
-144,24,3,0,0,134,48,2,90,0,48,184,146,56,0,0,32,129,137,
-161,88,0,48,176,146,16,3,0,0,0,48,160,146,96,0,0,48,34,
-0,0,21,0,144,165,144,102,32,5,61,0,48,160,144,116,228,0,
-0,0,16,165,144,86,32,5,58,20,0,0,8,0,48,160,144,116,228,
-0,0,0,16,165,144,66,32,5,58,0,48,168,144,120,228,0,0,0,
-80,165,144,20,80,160,89,0,80,165,146,0,48,168,144,96,81,
-0,0,255,1,56,140,21,80,168,89,149,192,161,88,136,9,165,
-88,0,48,168,146,96,81,0,0,0,48,160,146,4,0,0,32,0,48,
-136,144,140,228,0,0,4,22,128,92,100,41,0,9,0,48,176,144,
-132,228,0,0,0,48,128,144,8,3,0,0,0,48,160,144,8,3,0,0,
-0,48,168,144,104,228,0,0,0,48,184,144,0,3,0,0,20,80,160,
-89,22,58,176,140,16,0,0,0,1,73,173,89,0,16,177,146,148,
-64,165,88,16,221,37,146,0,48,160,146,8,3,0,0,0,0,0,10,
-144,68,148,101,0,0,0,10,5,56,0,102,0,0,0,10,33,22,128,
-92,0,0,0,10,16,54,8,92,16,22,128,92,16,22,128,92,16,22,
-128,92,16,22,128,92,16,22,128,92,16,22,128,92,16,22,128,
-92,16,22,128,92,0,0,0,10,16,54,0,92,0,0,0,10,32,22,128,
-92,0,0,0,10,0,48,32,140,0,0,31,0,16,14,44,89,132,2,41,
-101,5,22,128,92,0,0,0,10,144,18,128,101,0,0,0,10,0,48,
-32,140,255,255,255,255,16,64,36,97,4,22,128,92,0,0,0,10,
-16,64,148,97,18,22,128,92,0,0,0,10,16,65,36,97,4,22,128,
-92,0,0,0,10,0,0,0,0,0,0,0,0,0,30,152,92,0,48,136,146,
-48,0,0,32,147,32,4,90,144,57,160,140,0,0,0,0,0,48,160,
-146,96,0,0,32,82,0,0,19,0,48,232,140,8,0,0,16,0,48,136,
-140,0,0,0,48,0,80,167,144,22,32,61,52,0,48,168,140,8,0,
-0,16,0,80,165,144,252,63,61,51,0,80,164,176,0,144,164,
-178,0,80,164,176,19,80,152,89,16,160,148,140,147,32,4,90,
-0,144,164,178,18,16,148,89,200,255,255,20,0,0,0,10,0,0,
-0,0,0,0,0,0,0,0,0,0,0,30,152,92,0,48,136,146,84,0,0,
-32,147,32,4,90,144,57,160,140,0,0,0,0,0,48,160,146,96,0,
-0,32,50,0,0,19,0,48,136,140,96,0,0,48,0,144,164,176,18,
-16,148,89,1,224,156,140,147,32,4,90,0,80,164,178,0,144,
-164,176,18,16,148,89,0,80,164,178,224,255,255,20,0,0,0,
-10,0,0,0,0,0,0,0,0,0,0,0,0,144,176,0,90,0,48,136,146,
-84,0,0,32,16,22,152,92,0,144,140,140,0,48,128,146,96,0,
-0,32,42,0,0,18,18,32,20,60,50,32,12,58,64,0,0,8,0,0,0,
-0,58,32,28,61,0,144,164,144,18,16,137,89,0,48,160,146,96,
-0,0,32,0,80,164,144,17,16,137,89,0,48,160,146,96,0,0,32,
-0,80,164,144,0,48,160,146,96,0,0,32,0,0,0,10,0,0,0,0,
-146,208,163,88,50,32,69,58,18,32,69,52,22,32,37,58,76,0,
-0,8,0,0,0,0,50,32,101,58,64,0,0,8,0,144,164,144,18,16,
-137,89,1,9,156,89,0,48,160,146,96,0,0,32,0,80,164,144,
-17,16,137,89,1,201,156,89,0,48,160,146,96,0,0,32,0,80,
-164,144,17,16,137,89,1,201,156,89,0,48,160,146,96,0,0,32,
-38,224,28,59,0,48,128,140,96,0,0,32,4,201,156,89,0,80,
-164,176,147,240,0,90,16,96,140,140,0,16,164,178,236,255,
-255,17,38,224,4,59,0,48,168,140,96,0,0,32,1,201,156,89,
-0,80,164,144,147,48,0,90,4,96,140,140,0,80,165,146,236,
-255,255,17,0,0,0,10,255,0,176,140,144,128,133,88,0,0,168,
-140,0,48,136,140,255,179,196,4,0,48,184,140,4,0,0,16,0,
-48,128,146,4,0,0,32,0,208,165,144,148,128,165,88,38,0,
-164,58,21,80,168,89,240,95,172,62,0,48,168,144,112,228,0,
-0,0,48,160,140,6,0,173,222,0,80,165,146,132,82,0,8,0,0,
-0,10,0,0,0,0,0,0,0,0,0,0,0,0,255,0,184,140,0,30,168,
-92,0,48,136,140,255,179,196,4,0,48,128,140,4,0,0,16,0,
-48,176,128,96,81,0,0,0,16,164,144,148,192,165,88,42,128,
-165,58,21,80,168,89,240,95,172,62,0,48,168,144,112,228,0,
-0,0,48,160,140,7,0,173,222,0,80,165,146,40,82,0,8,0,0,
-0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,240,140,
-160,113,0,0,30,22,128,92,0,0,240,140,0,48,160,144,116,
-228,0,0,0,16,165,144,66,32,5,58,0,48,168,144,120,228,0,
-0,0,80,165,144,20,80,160,89,0,80,165,146,0,48,168,144,96,
-81,0,0,255,1,176,140,21,80,168,89,149,128,165,88,136,9,
-165,88,0,48,168,146,96,81,0,0,0,48,160,146,4,0,0,32,0,
-16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,22,40,
-92,1,73,49,89,0,0,32,140,0,48,64,140,16,39,0,0,2,142,
-57,89,108,252,255,9,5,1,132,88,92,252,255,9,4,22,160,92,
-148,32,2,90,1,32,33,140,158,0,0,22,150,160,249,52,0,244,
-161,144,248,113,0,0,0,16,5,132,0,0,0,0,120,114,0,0,120,
-114,0,0,120,114,0,0,120,114,0,0,120,114,0,0,120,114,0,0,
-120,114,0,0,120,114,0,0,120,114,0,0,120,114,0,0,120,114,
-0,0,120,114,0,0,120,114,0,0,120,114,0,0,120,114,0,0,120,
-114,0,0,120,114,0,0,120,114,0,0,120,114,0,0,120,114,0,0,
-120,114,0,0,120,114,0,0,120,114,0,0,120,114,0,0,120,114,
-0,0,120,114,0,0,120,114,0,0,120,114,0,0,120,114,0,0,120,
-114,0,0,120,114,0,0,120,114,0,0,216,80,0,9,184,251,255,
-9,144,64,129,88,68,63,4,61,1,30,128,92,0,0,0,10,64,96,
-8,140,0,116,128,178,192,255,255,255,0,116,160,178,208,255,
-255,255,0,116,192,178,224,255,255,255,0,116,224,178,240,
-255,255,255,0,48,160,144,108,81,0,0,34,32,5,61,0,48,168,
-144,112,228,0,0,0,48,160,140,1,0,173,222,0,80,165,146,
-124,80,0,9,232,79,0,9,0,48,160,144,0,0,0,16,210,0,136,
-140,148,64,164,88,40,0,136,140,148,67,164,88,0,0,32,140,
-0,48,40,140,16,39,0,0,0,48,160,146,0,0,0,16,44,251,255,
-9,0,14,132,88,28,251,255,9,4,22,160,92,148,96,1,90,1,32,
-33,140,10,0,0,22,44,80,0,9,12,251,255,9,220,63,4,55,0,
-48,168,144,120,81,0,0,0,48,160,144,116,81,0,0,149,48,0,
-90,1,32,165,140,0,48,160,146,116,81,0,0,90,0,0,18,0,48,
-160,144,116,228,0,0,0,16,165,144,82,32,5,58,0,48,168,144,
-120,228,0,0,0,80,165,144,20,80,160,89,0,80,165,146,0,48,
-168,144,96,81,0,0,255,1,136,140,21,80,168,89,149,64,164,
-88,136,9,165,88,0,48,168,146,96,81,0,0,0,48,160,146,4,0,
-0,32,16,0,0,8,0,0,0,0,0,48,240,146,108,81,0,0,0,116,
-128,176,192,255,255,255,0,116,160,176,208,255,255,255,0,
-116,192,176,224,255,255,255,0,116,224,176,240,255,255,255,
-3,54,8,92,0,0,0,10,0,0,0,0,0,0,0,0,64,96,8,140,0,116,
-128,178,192,255,255,255,0,116,160,178,208,255,255,255,0,
-116,192,178,224,255,255,255,0,116,224,178,240,255,255,255,
-0,48,160,144,68,20,0,80,14,32,37,48,10,32,133,48,156,3,
-0,9,0,48,160,144,68,20,0,80,14,32,45,48,10,32,141,48,
-168,3,0,9,0,48,160,144,68,20,0,80,14,32,53,48,10,32,149,
-48,180,3,0,9,0,48,160,144,68,12,0,80,14,32,21,48,10,32,
-29,48,192,3,0,9,0,30,32,92,0,48,40,140,16,39,0,0,212,
-249,255,9,4,14,132,88,196,249,255,9,4,22,160,92,148,96,1,
-90,1,32,33,140,10,0,0,22,212,78,0,9,180,249,255,9,220,
-63,36,55,0,116,128,176,192,255,255,255,0,116,160,176,208,
-255,255,255,0,116,192,176,224,255,255,255,0,116,224,176,
-240,255,255,255,3,54,8,92,0,0,0,10,64,96,8,140,0,116,
-128,178,192,255,255,255,0,116,160,178,208,255,255,255,0,
-116,192,178,224,255,255,255,0,116,224,178,240,255,255,255,
-0,48,160,144,132,81,0,0,34,32,5,61,0,48,168,144,112,228,
-0,0,0,48,160,140,2,0,173,222,0,80,165,146,92,78,0,9,200,
-77,0,9,0,30,32,92,0,48,40,140,16,39,0,0,56,4,0,9,40,
-249,255,9,5,14,132,88,24,249,255,9,4,22,160,92,148,96,1,
-90,1,32,33,140,10,0,0,22,40,78,0,9,8,249,255,9,220,63,
-44,55,0,116,128,176,192,255,255,255,0,116,160,176,208,255,
-255,255,0,116,192,176,224,255,255,255,0,116,224,176,240,
-255,255,255,3,54,8,92,0,0,0,10,0,0,0,0,64,96,8,140,0,
-116,128,178,192,255,255,255,0,116,160,178,208,255,255,255,
-0,116,192,178,224,255,255,255,0,116,224,178,240,255,255,
-255,0,48,160,144,104,81,0,0,34,32,5,61,0,48,168,144,112,
-228,0,0,0,48,160,140,3,0,173,222,0,80,165,146,172,77,0,
-9,24,77,0,9,0,48,160,144,0,0,0,16,210,0,136,140,148,64,
-164,88,128,9,165,88,0,0,32,140,0,48,40,140,16,39,0,0,0,
-48,160,146,0,0,0,16,96,248,255,9,2,14,132,88,80,248,255,
-9,4,22,160,92,148,96,1,90,1,32,33,140,10,0,0,22,96,77,
-0,9,64,248,255,9,220,63,20,55,0,116,128,176,192,255,255,
-255,0,116,160,176,208,255,255,255,0,116,192,176,224,255,
-255,255,0,116,224,176,240,255,255,255,3,54,8,92,0,0,0,10,
-0,0,0,0,0,0,0,0,0,0,0,0,64,96,8,140,0,116,128,178,192,
-255,255,255,0,116,160,178,208,255,255,255,0,116,192,178,
-224,255,255,255,0,116,224,178,240,255,255,255,0,48,160,144,
-100,81,0,0,34,32,5,61,0,48,168,144,112,228,0,0,0,48,160,
-140,4,0,173,222,0,80,165,146,220,76,0,9,72,76,0,9,0,116,
-128,176,192,255,255,255,0,116,160,176,208,255,255,255,0,
-116,192,176,224,255,255,255,0,116,224,176,240,255,255,255,
-3,54,8,92,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,68,247,
-255,9,4,32,36,144,16,32,44,144,0,30,128,92,0,48,64,140,
-1,50,0,0,60,247,255,9,0,30,128,92,4,0,72,140,88,247,255,
-9,0,48,88,140,32,88,0,0,28,32,89,146,16,32,65,154,0,48,
-160,140,144,114,0,0,76,96,161,146,0,48,160,140,96,117,0,
-0,0,48,168,140,48,118,0,0,0,48,176,140,224,115,0,0,1,4,
-128,140,0,30,136,92,0,0,144,140,140,96,161,146,204,96,169,
-146,12,97,177,146,200,246,255,9,0,30,128,92,0,247,255,9,
-255,15,128,140,208,246,255,9,1,30,128,92,0,247,255,8,180,
-246,255,9,4,32,36,144,16,32,44,144,0,30,128,92,180,246,
-255,9,0,30,128,92,212,246,255,9,84,0,160,140,20,32,161,
-146,0,48,160,140,0,88,0,0,0,48,168,140,224,115,0,0,0,48,
-176,140,176,116,0,0,1,4,128,140,0,30,136,92,0,0,144,140,
-28,32,161,146,12,97,169,146,76,97,177,146,88,246,255,9,0,
-30,128,92,144,246,255,9,255,15,128,140,96,246,255,9,1,30,
-128,92,144,246,255,8,0,48,168,144,112,228,0,0,0,48,160,
-140,16,0,173,222,0,80,165,146,140,75,0,9,1,30,128,92,244,
-74,0,8,0,48,168,144,112,228,0,0,0,48,160,140,17,0,173,
-222,0,80,165,146,108,75,0,9,1,30,128,92,212,74,0,8,0,48,
-168,144,112,228,0,0,0,48,160,140,18,0,173,222,0,80,165,
-146,76,75,0,9,1,30,128,92,180,74,0,8,0,48,168,144,112,
-228,0,0,0,48,160,140,19,0,173,222,0,80,165,146,44,75,0,
-9,1,30,128,92,148,74,0,8,0,48,240,140,84,120,0,0,30,22,
-136,92,0,0,240,140,255,0,160,140,144,0,133,88,0,48,128,
-146,8,28,0,80,0,80,4,132,0,0,0,10,0,0,0,0,0,0,0,0,
-136,25,176,88,144,160,5,90,0,30,160,93,62,0,0,18,18,128,
-133,49,30,32,4,58,88,0,0,8,0,0,0,0,137,25,232,88,62,64,
-135,58,72,0,0,8,0,0,0,0,0,48,160,140,130,184,97,202,0,
-48,168,140,118,116,210,62,48,0,0,8,0,0,0,0,0,48,160,140,
-222,153,139,252,0,48,168,140,59,93,202,62,24,0,0,8,0,0,
-0,0,0,48,160,140,216,182,122,157,0,48,168,140,98,194,199,
-62,0,30,144,92,0,48,152,140,132,215,119,65,20,22,128,93,
-160,104,0,9,192,98,0,9,255,0,160,140,144,0,133,88,0,48,
-128,146,8,28,0,80,0,0,0,10,0,0,0,0,0,48,240,140,48,121,
-0,0,30,22,128,92,0,0,240,140,0,48,160,144,4,28,0,80,0,
-48,240,146,132,81,0,0,1,14,165,88,0,48,160,146,4,28,0,
-80,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,
-160,144,132,81,0,0,10,32,5,61,116,73,0,9,0,48,168,144,4,
-28,0,80,137,73,173,88,10,96,85,48,138,73,173,88,0,48,160,
-144,124,81,0,0,0,48,168,146,4,28,0,80,20,80,160,89,0,48,
-160,146,124,81,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,
-30,22,32,92,0,48,128,144,140,81,0,0,6,222,136,89,176,70,
-0,9,16,22,160,92,0,48,160,144,0,0,0,16,210,0,168,140,
-148,64,165,88,128,9,173,88,0,48,168,146,0,0,0,16,0,48,
-160,144,140,81,0,0,20,16,175,89,0,48,168,146,116,228,0,0,
-0,48,160,144,140,81,0,0,32,32,173,140,0,48,168,146,120,
-228,0,0,0,48,160,144,140,81,0,0,48,32,173,140,0,48,168,
-146,112,228,0,0,0,48,160,144,140,81,0,0,44,32,173,140,0,
-48,168,146,124,228,0,0,1,30,160,92,0,48,160,146,128,228,
-0,0,0,48,160,144,140,81,0,0,0,48,168,140,0,184,0,0,40,
-32,173,146,0,48,160,144,140,81,0,0,0,48,168,140,80,45,3,
-0,36,32,173,146,0,48,160,144,140,81,0,0,0,48,168,140,12,
-1,4,0,52,32,173,146,0,48,160,144,140,81,0,0,0,48,168,
-144,144,81,0,0,16,96,181,144,16,142,173,89,56,32,173,146,
-0,0,0,10,0,0,0,0,16,72,8,89,0,144,39,140,0,48,160,144,
-144,81,0,0,0,48,168,140,237,254,17,206,8,32,173,146,0,48,
-168,144,112,228,0,0,0,48,160,144,112,228,0,0,0,48,168,
-144,112,228,0,0,0,80,181,144,1,137,173,89,0,16,173,146,0,
-16,165,144,0,48,160,144,140,81,0,0,64,32,173,144,127,0,
-176,140,149,128,165,88,148,48,0,90,222,0,0,18,148,112,0,
-90,14,0,0,18,216,0,0,8,0,0,0,0,0,48,128,144,140,81,0,
-0,40,12,0,9,16,22,160,92,64,224,167,146,0,48,160,144,140,
-81,0,0,64,224,175,144,129,73,181,88,68,32,181,146,0,48,
-160,144,140,81,0,0,64,32,173,144,135,25,136,88,149,64,164,
-88,148,48,0,90,96,0,0,18,0,48,160,144,116,228,0,0,0,16,
-173,144,149,48,0,90,76,0,0,18,0,48,160,144,120,228,0,0,
-0,48,168,144,120,228,0,0,0,80,181,144,22,80,168,89,0,16,
-173,146,0,48,160,144,96,81,0,0,20,80,168,89,0,80,165,140,
-0,48,160,146,96,81,0,0,255,0,168,140,148,64,165,88,136,9,
-173,88,0,48,168,146,4,0,0,32,0,48,160,144,140,81,0,0,0,
-30,168,92,64,32,173,146,64,224,167,144,148,176,0,90,8,0,
-0,21,0,0,0,10,16,0,0,8,0,0,0,0,8,0,0,8,0,0,0,0,16,
-0,0,8,0,0,0,0,16,0,0,8,0,0,0,0,204,254,255,8,0,0,0,
-0,0,0,0,10,0,0,0,0,16,72,8,89,0,144,167,140,0,48,168,
-144,68,12,0,80,128,73,181,88,0,48,176,146,68,12,0,80,0,
-48,168,144,68,12,0,80,0,78,181,88,0,48,176,146,68,12,0,
-80,0,48,168,144,68,12,0,80,2,78,181,88,0,48,176,146,68,
-12,0,80,0,30,168,92,0,48,168,146,72,16,0,80,1,30,168,92,
-0,48,168,146,68,16,0,80,0,30,168,92,64,224,175,146,64,
-224,175,144,21,240,0,90,14,0,0,22,128,0,0,8,0,0,0,0,64,
-224,175,144,21,22,176,92,22,57,168,140,0,0,0,0,0,48,176,
-140,16,16,0,80,21,128,173,89,0,0,176,140,21,128,173,89,0,
-80,181,140,15,30,168,92,0,144,173,146,64,224,175,144,21,
-22,176,92,22,57,168,140,0,0,0,0,0,48,176,140,0,16,0,80,
-21,128,173,89,0,0,176,140,21,128,173,89,0,80,181,140,0,
-30,168,92,0,144,173,146,64,224,183,144,22,80,168,89,0,80,
-181,140,64,224,183,146,124,255,255,8,0,0,0,0,0,48,168,
-144,4,28,0,80,130,73,181,88,0,48,176,146,4,28,0,80,0,48,
-168,144,68,20,0,80,1,78,181,88,0,48,176,146,68,20,0,80,
-244,1,168,140,0,48,168,146,48,20,0,80,0,48,168,144,68,20,
-0,80,135,73,181,88,0,48,176,146,68,20,0,80,0,48,168,144,
-68,20,0,80,134,73,181,88,0,48,176,146,68,20,0,80,0,48,
-168,144,68,20,0,80,4,78,181,88,0,48,176,146,68,20,0,80,
-0,48,168,144,68,20,0,80,5,78,181,88,0,48,176,146,68,20,
-0,80,0,0,0,10,0,0,0,0,0,0,0,0,16,72,8,89,0,144,39,
-140,0,30,160,92,0,48,160,146,0,0,0,16,0,48,160,144,0,0,
-0,16,210,0,168,140,148,64,165,88,129,9,173,88,0,48,168,
-146,0,0,0,16,0,48,160,144,0,0,0,16,208,0,168,140,148,64,
-165,88,0,48,160,146,0,0,0,16,0,48,160,144,0,0,0,16,210,
-0,168,140,148,64,165,88,128,9,173,88,0,48,168,146,0,0,0,
-16,0,48,160,144,0,0,0,16,210,0,168,140,148,64,165,88,40,
-0,168,140,148,67,165,88,0,48,160,146,0,0,0,16,10,30,128,
-92,128,39,0,11,16,22,160,92,0,48,160,144,4,28,0,80,131,
-9,173,88,0,48,168,146,4,28,0,80,31,216,132,89,96,39,0,
-11,16,22,160,92,0,48,160,144,4,28,0,80,11,222,168,89,148,
-67,165,88,0,48,168,140,56,24,0,0,148,96,5,90,16,0,0,18,
-1,30,128,92,140,68,0,9,16,22,160,92,0,48,160,144,68,12,
-0,80,148,48,0,90,16,0,0,18,1,30,128,92,112,68,0,9,16,
-22,160,92,0,48,160,144,68,20,0,80,8,222,168,89,148,67,
-165,88,8,222,168,89,148,96,5,90,16,0,0,18,1,30,128,92,
-72,68,0,9,16,22,160,92,0,48,160,144,68,12,0,80,129,9,
-173,88,0,48,168,146,68,12,0,80,0,48,160,144,68,12,0,80,
-128,9,173,88,0,48,168,146,68,12,0,80,0,48,160,144,68,20,
-0,80,130,9,173,88,0,48,168,146,68,20,0,80,0,48,160,144,
-68,20,0,80,128,9,173,88,0,48,168,146,68,20,0,80,0,48,
-160,144,68,20,0,80,10,14,173,88,0,48,168,146,68,20,0,80,
-0,48,160,144,4,28,0,80,133,9,173,88,0,48,168,146,4,28,0,
-80,0,48,160,144,4,28,0,80,132,9,173,88,0,48,168,146,4,
-28,0,80,0,48,160,144,4,28,0,80,3,14,173,88,0,48,168,146,
-4,28,0,80,0,48,128,140,176,30,4,0,64,38,0,11,16,22,160,
-92,0,0,160,140,64,224,167,146,64,224,167,144,20,240,0,90,
-10,0,0,22,164,0,0,8,64,224,167,144,20,22,168,92,21,57,
-160,140,0,0,0,0,0,48,168,140,0,12,0,144,20,64,165,89,0,
-0,176,140,20,128,173,89,0,80,165,140,64,224,175,144,21,22,
-176,92,10,142,173,89,0,48,176,144,136,81,0,0,22,64,173,
-89,0,16,173,146,64,224,167,144,20,22,168,92,21,57,160,140,
-0,0,0,0,0,48,168,140,16,12,0,144,20,64,165,89,0,0,176,
-140,20,128,173,89,0,80,165,140,64,224,175,144,21,22,176,
-92,10,142,173,89,0,48,176,144,136,81,0,0,22,64,173,89,0,
-16,173,146,64,224,175,144,21,80,160,89,0,16,173,140,64,
-224,175,146,88,255,255,8,0,0,0,0,0,48,160,144,128,228,0,
-0,148,112,0,90,108,0,0,21,0,48,160,144,136,81,0,0,141,
-25,168,88,20,64,165,89,0,48,160,146,0,20,0,144,0,48,160,
-144,136,81,0,0,141,25,168,88,20,64,165,89,0,48,160,146,
-16,20,0,144,0,48,160,144,136,81,0,0,140,25,168,88,20,64,
-165,89,0,48,160,146,0,24,0,144,0,48,160,144,136,81,0,0,
-140,25,168,88,20,64,165,89,0,48,160,146,16,24,0,144,104,
-1,0,8,0,0,0,0,0,30,160,92,64,224,167,146,64,224,167,144,
-20,240,0,90,10,0,0,22,76,1,0,8,64,224,167,144,20,22,168,
-92,21,57,160,140,0,0,0,0,0,48,168,140,0,20,0,144,20,64,
-165,89,0,0,176,140,20,128,173,89,0,80,165,140,64,224,175,
-144,11,222,176,89,149,128,173,112,141,25,176,88,21,128,173,
-89,0,48,176,144,136,81,0,0,22,64,173,89,0,16,173,146,64,
-224,167,144,20,22,168,92,21,57,160,140,0,0,0,0,0,48,168,
-140,16,20,0,144,20,64,165,89,0,0,176,140,20,128,173,89,0,
-80,165,140,64,224,175,144,11,222,176,89,149,128,173,112,
-141,25,176,88,21,128,173,89,0,48,176,144,136,81,0,0,22,
-64,173,89,0,16,173,146,64,224,167,144,20,22,168,92,21,57,
-160,140,0,0,0,0,0,48,168,140,0,24,0,144,20,64,165,89,0,
-0,176,140,20,128,173,89,0,80,165,140,64,224,175,144,21,22,
-176,92,10,142,173,89,140,25,176,88,21,128,173,89,0,48,176,
-144,136,81,0,0,22,64,173,89,0,16,173,146,64,224,167,144,
-20,22,168,92,21,57,160,140,0,0,0,0,0,48,168,140,16,24,0,
-144,20,64,165,89,0,0,176,140,20,128,173,89,0,80,165,140,
-64,224,175,144,21,22,176,92,10,142,173,89,140,25,176,88,
-21,128,173,89,0,48,176,144,136,81,0,0,22,64,173,89,0,16,
-173,146,64,224,175,144,21,80,160,89,0,16,173,140,64,224,
-175,146,176,254,255,8,0,0,0,0,1,30,160,92,0,48,160,146,
-68,16,0,80,0,30,160,92,64,224,167,146,64,224,167,144,20,
-240,0,90,14,0,0,22,128,0,0,8,0,0,0,0,64,224,167,144,20,
-22,168,92,21,57,160,140,0,0,0,0,0,48,168,140,16,16,0,80,
-20,64,165,89,0,0,168,140,20,64,165,89,0,16,173,140,15,30,
-160,92,0,80,165,146,64,224,167,144,20,22,168,92,21,57,160,
-140,0,0,0,0,0,48,168,140,0,16,0,80,20,64,165,89,0,0,
-168,140,20,64,165,89,0,16,173,140,0,30,160,92,0,80,165,
-146,64,224,175,144,21,80,160,89,0,16,173,140,64,224,175,
-146,124,255,255,8,0,0,0,0,0,48,160,144,68,12,0,80,1,14,
-173,88,0,48,168,146,68,12,0,80,0,48,160,144,68,12,0,80,
-0,14,173,88,0,48,168,146,68,12,0,80,0,48,160,144,68,20,
-0,80,2,14,173,88,0,48,168,146,68,20,0,80,0,48,160,144,
-68,20,0,80,0,14,173,88,0,48,168,146,68,20,0,80,0,48,160,
-144,68,20,0,80,138,9,173,88,0,48,168,146,68,20,0,80,0,
-48,160,144,4,28,0,80,5,14,173,88,0,48,168,146,4,28,0,80,
-0,48,160,144,4,28,0,80,4,14,173,88,0,48,168,146,4,28,0,
-80,0,48,160,144,68,20,0,80,147,9,173,88,0,48,168,146,68,
-20,0,80,0,30,128,92,0,0,0,10,0,0,0,10,0,0,0,0,30,22,
-160,92,0,0,168,140,0,48,168,146,68,16,0,80,31,30,168,92,
-0,48,168,146,72,16,0,80,0,48,168,128,108,228,0,0,0,48,
-168,146,0,16,0,80,1,30,168,92,0,48,168,146,16,16,0,80,0,
-48,168,128,108,228,0,0,0,48,168,146,4,16,0,80,1,30,168,
-92,0,48,168,146,20,16,0,80,0,48,168,128,108,228,0,0,0,
-48,168,146,8,16,0,80,1,30,168,92,0,48,168,146,24,16,0,
-80,0,48,168,128,108,228,0,0,0,48,168,146,12,16,0,80,1,
-30,168,92,0,48,168,146,28,16,0,80,0,0,0,10,0,16,188,144,
-0,16,140,144,4,32,164,144,0,48,176,144,244,2,0,0,0,48,
-144,144,248,2,0,0,0,48,152,144,252,2,0,0,0,48,168,144,
-240,2,0,0,0,48,48,140,0,255,0,0,4,14,165,89,148,128,181,
-88,148,128,164,88,19,4,165,89,150,3,181,88,150,64,173,88,
-149,48,0,90,151,128,185,88,8,204,237,89,0,48,48,140,0,0,
-255,0,145,128,137,88,16,76,140,89,18,0,0,18,10,30,128,92,
-0,0,0,10,0,0,0,0,145,48,0,90,4,140,181,89,18,0,0,18,
-118,96,12,58,228,255,255,8,0,0,0,0,0,48,160,144,144,3,0,
-0,214,63,5,58,0,48,160,144,96,3,0,0,26,32,5,58,0,48,
-160,144,144,228,0,0,34,32,5,61,10,160,253,52,26,160,117,
-61,0,48,136,140,224,92,0,0,0,48,184,140,128,3,0,0,20,0,
-0,8,0,48,184,140,80,3,0,0,0,48,136,144,80,228,0,0,0,48,
-144,140,224,92,0,0,0,48,152,140,128,3,0,0,104,0,0,8,0,
-0,0,0,0,48,160,144,48,228,0,0,110,63,5,58,0,48,160,144,
-192,3,0,0,26,32,5,58,0,48,160,144,144,228,0,0,34,32,13,
-61,10,160,253,52,26,160,117,61,0,48,136,140,128,94,0,0,0,
-48,184,140,32,228,0,0,20,0,0,8,0,48,184,140,176,3,0,0,
-0,48,136,144,84,228,0,0,0,48,144,140,128,94,0,0,0,48,
-152,140,32,228,0,0,0,48,168,144,160,228,0,0,157,48,1,90,
-7,142,165,89,20,64,37,89,166,0,0,18,18,96,39,60,22,96,7,
-58,244,254,255,8,0,0,0,0,210,96,47,58,232,254,255,8,8,
-32,164,144,31,88,132,89,144,5,173,112,10,96,5,61,1,30,
-168,92,16,32,161,144,0,48,48,140,0,183,0,0,148,160,1,90,
-84,32,169,146,50,0,0,18,4,16,45,89,0,80,137,144,30,64,
-141,60,145,0,148,112,0,16,129,140,2,30,152,92,68,229,255,
-9,0,80,241,146,36,32,241,146,2,30,128,92,0,0,0,10,60,32,
-137,146,64,32,145,146,20,224,165,144,144,5,165,116,44,32,
-161,146,0,48,168,140,176,183,0,0,20,224,164,144,16,32,169,
-146,144,5,165,116,0,16,148,140,132,0,0,8,16,32,161,144,0,
-48,48,140,0,183,0,0,82,158,161,61,60,32,137,146,64,32,
-145,146,20,224,165,144,31,88,147,89,146,5,165,116,44,32,
-161,146,20,224,164,144,146,5,165,116,0,48,168,140,128,183,
-0,0,4,30,40,92,64,0,0,8,16,32,161,144,0,48,48,140,0,
-183,0,0,18,158,161,61,64,32,153,146,60,32,185,146,20,224,
-165,144,31,88,148,89,146,5,165,116,44,32,161,146,20,224,
-164,144,146,5,165,116,0,48,168,140,80,178,0,0,0,30,40,92,
-16,32,169,146,48,32,161,146,44,32,129,144,48,32,137,140,0,
-80,164,176,146,0,132,112,88,32,233,146,5,1,132,89,0,16,
-172,140,146,0,149,112,4,96,132,146,18,22,176,92,2,0,128,
-140,0,80,164,146,8,96,148,146,12,96,188,146,0,0,0,10,4,
-32,164,144,0,48,176,144,244,2,0,0,0,48,184,144,248,2,0,
-0,0,48,128,144,252,2,0,0,0,48,168,144,240,2,0,0,4,14,
-165,89,148,128,181,88,148,192,165,88,16,4,165,89,150,3,
-181,88,150,64,173,88,14,96,5,58,10,30,128,92,0,0,0,10,0,
-48,160,144,160,228,0,0,4,140,181,89,7,142,173,89,21,0,37,
-89,16,32,161,144,0,48,40,140,0,183,0,0,18,64,161,61,10,
-30,128,92,0,0,0,10,0,0,0,0,20,32,137,144,22,96,4,59,4,
-22,128,92,0,0,144,140,8,30,152,92,180,227,255,9,4,22,128,
-92,135,25,136,88,72,57,0,9,159,25,160,88,16,32,41,146,2,
-30,128,92,68,32,161,146,0,0,0,10,96,32,180,144,96,32,172,
-144,64,32,84,140,16,22,72,92,149,57,168,140,32,0,0,0,149,
-208,167,88,148,48,0,90,0,48,176,146,148,228,0,0,0,48,168,
-146,152,228,0,0,18,0,0,18,8,30,128,92,0,0,0,10,0,0,0,
-0,92,32,164,144,3,14,189,89,32,224,173,140,149,208,167,88,
-148,48,0,90,0,48,168,146,140,228,0,0,14,0,0,18,8,30,128,
-92,0,0,0,10,88,32,164,144,148,208,160,88,18,32,5,58,8,
-30,128,92,0,0,0,10,0,0,0,0,80,32,148,144,84,32,172,144,
-88,32,180,144,88,32,156,144,88,32,236,144,112,32,36,144,
-120,32,44,144,128,32,52,144,136,32,60,144,144,32,68,144,
-31,88,98,89,146,0,147,112,40,224,165,140,148,128,165,112,
-152,32,180,144,160,32,188,144,168,32,140,144,149,157,172,
-140,21,0,173,89,19,93,157,140,29,221,236,140,132,93,39,
-140,133,29,41,140,134,93,49,140,135,157,57,140,136,221,65,
-140,150,29,178,140,0,48,88,140,79,205,3,0,0,48,96,140,80,
-45,3,0,151,157,189,140,12,193,162,89,145,221,141,140,18,0,
-141,54,8,30,128,92,0,0,0,10,0,0,0,0,184,0,0,9,14,32,
-68,61,8,30,128,92,0,0,0,10,0,80,130,140,36,1,0,9,18,32,
-68,61,8,30,128,92,0,0,0,10,0,0,0,0,0,80,130,140,140,1,
-0,9,18,32,68,61,8,30,128,92,0,0,0,10,0,0,0,0,0,80,130,
-140,212,214,255,9,18,32,68,61,8,30,128,92,0,0,0,10,0,0,
-0,0,88,96,130,144,0,48,136,144,140,228,0,0,4,221,255,9,
-18,32,68,61,8,30,128,92,0,0,0,10,0,0,0,0,0,144,130,140,
-252,10,0,9,18,32,68,61,8,30,128,92,0,0,0,10,0,0,0,0,0,
-0,128,140,180,231,255,9,36,160,162,144,2,30,128,92,0,48,
-160,146,144,228,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,
-16,22,32,92,80,32,161,144,5,14,133,89,0,48,160,146,156,
-228,0,0,252,20,0,9,144,48,0,90,0,48,128,146,8,228,0,0,
-14,0,0,21,8,30,128,92,0,0,0,10,0,48,176,144,156,228,0,
-0,0,16,129,146,0,48,128,146,16,228,0,0,0,30,168,92,5,
-142,165,89,149,160,5,90,16,60,165,140,224,255,255,255,0,
-48,160,146,12,228,0,0,26,0,0,19,21,80,168,89,0,16,244,
-146,149,160,5,90,32,32,132,140,240,255,255,20,2,30,128,92,
-0,0,0,10,16,22,40,92,88,96,33,144,3,14,49,89,0,144,129,
-140,128,20,0,9,144,48,0,90,0,48,128,146,16,3,0,0,18,0,
-0,21,8,30,128,92,0,0,0,10,0,0,0,0,8,96,129,146,0,30,
-168,92,0,48,128,146,24,3,0,0,149,32,1,90,16,188,161,140,
-248,255,255,255,0,48,160,146,20,3,0,0,26,0,0,19,21,80,
-168,89,0,16,244,146,149,32,1,90,8,32,132,140,240,255,255,
-20,2,30,128,92,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,
-22,40,92,84,96,33,144,3,14,49,89,0,144,129,140,0,20,0,9,
-144,48,0,90,0,48,128,146,32,3,0,0,18,0,0,21,8,30,128,
-92,0,0,0,10,0,0,0,0,4,96,129,146,0,30,168,92,0,48,128,
-146,28,3,0,0,149,32,1,90,16,188,161,140,248,255,255,255,
-0,48,160,146,36,3,0,0,26,0,0,19,21,80,168,89,0,16,244,
-146,149,32,1,90,8,32,132,140,240,255,255,20,2,30,128,92,
-0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,17,22,32,92,132,57,
-48,140,0,0,0,0,16,22,40,92,0,144,129,140,124,19,0,9,144,
-48,0,90,28,96,129,146,18,0,0,21,8,30,128,92,0,0,0,10,0,
-0,0,0,16,188,169,140,248,255,255,255,32,96,161,140,0,30,
-176,92,0,16,133,146,150,32,1,90,4,32,173,146,22,0,0,19,
-28,96,161,144,150,29,245,146,22,80,176,89,244,31,177,60,2,
-30,128,92,0,0,0,10,0,0,0,0,0,0,0,0,0,48,240,140,76,
-139,0,0,30,22,144,92,0,0,240,140,1,9,132,89,1,25,184,89,
-82,192,133,58,8,78,140,89,0,0,168,140,16,81,160,88,21,
-124,180,140,80,8,0,64,148,48,0,90,21,124,164,140,96,8,0,
-64,26,0,0,18,1,9,132,89,144,224,5,90,0,144,245,146,0,16,
-245,146,26,0,0,18,2,9,132,89,144,224,5,90,0,144,245,146,
-0,16,245,146,240,255,255,21,0,144,4,132,0,0,0,10,20,22,
-96,92,48,0,24,140,131,133,164,116,0,144,85,140,0,48,176,
-144,32,86,0,0,19,22,88,92,8,206,138,89,0,0,184,140,21,
-22,104,92,23,124,172,140,64,8,0,64,20,128,165,89,0,48,
-160,146,32,86,0,0,0,80,133,146,0,144,162,152,18,208,144,
-89,0,0,32,140,140,48,0,90,23,124,52,140,64,0,0,112,130,
-141,76,89,0,0,128,140,20,22,56,92,130,77,45,89,210,0,0,
-21,198,96,2,59,2,222,71,89,0,48,232,140,48,0,0,32,0,48,
-152,140,96,0,0,32,0,48,144,140,4,0,0,32,0,48,136,140,8,
-0,0,16,22,96,1,61,10,16,82,89,0,144,162,152,130,77,45,
-89,0,16,61,140,4,1,162,89,133,32,5,90,0,80,177,140,10,0,
-0,22,20,22,176,92,0,80,63,146,0,48,160,144,96,81,0,0,4,
-128,37,89,255,0,168,140,132,240,2,90,22,221,57,140,22,65,
-74,89,0,208,180,146,22,65,41,89,1,32,165,140,148,64,173,
-88,0,48,160,146,96,81,0,0,0,144,172,146,54,0,0,22,0,80,
-164,128,42,32,93,51,0,48,128,140,8,0,0,16,0,144,161,176,
-0,144,161,176,0,144,161,176,0,16,164,128,20,240,2,90,12,
-9,33,89,232,255,255,17,212,63,89,60,106,127,2,60,0,0,0,
-10,0,0,0,0,214,96,2,59,0,48,120,140,4,0,0,32,0,48,112,
-140,8,0,0,16,22,96,1,61,10,16,82,89,0,144,162,152,130,
-77,45,89,0,16,61,140,2,222,31,89,4,193,160,89,133,32,5,
-90,0,80,177,140,10,0,0,22,20,22,176,92,0,48,56,146,48,0,
-0,32,0,48,160,144,96,81,0,0,4,128,37,89,255,0,168,140,
-132,240,2,90,0,48,176,146,96,0,0,32,22,65,74,89,22,221,
-57,140,22,65,41,89,1,32,165,140,148,64,173,88,0,48,160,
-146,96,81,0,0,0,208,171,146,78,0,0,22,0,144,163,128,66,
-32,93,51,0,48,64,140,8,0,0,16,16,80,128,89,0,144,161,
-176,144,32,3,90,0,144,161,176,12,9,33,89,0,144,161,176,
-22,0,0,21,13,22,128,92,0,208,138,140,164,253,255,11,0,30,
-128,92,0,16,162,128,208,63,93,52,188,63,89,60,68,127,2,
-60,13,22,128,92,0,208,138,140,124,253,255,8,0,0,0,0,0,0,
-0,0,0,48,136,146,64,0,0,32,8,14,172,89,0,0,184,140,23,
-124,181,140,240,4,0,96,0,144,37,176,17,16,164,89,0,48,
-160,146,64,0,0,32,0,144,37,176,32,96,132,140,23,124,173,
-140,252,4,0,96,0,48,128,146,56,0,0,32,16,16,129,89,0,80,
-165,144,0,48,128,146,56,0,0,32,16,16,129,89,0,80,165,144,
-0,0,0,10,0,0,0,0,0,48,240,140,12,142,0,0,30,22,144,92,
-0,0,240,140,8,14,132,89,0,0,168,140,0,52,132,140,192,4,
-0,64,0,16,164,144,21,80,168,89,149,176,2,90,0,80,164,146,
-17,16,137,89,236,255,255,22,0,144,4,132,0,0,0,10,0,48,
-240,140,76,142,0,0,30,22,144,92,0,0,240,140,8,14,132,89,
-0,0,168,140,0,52,132,140,192,4,0,64,0,16,164,144,21,80,
-168,89,149,176,2,90,0,80,164,146,17,16,137,89,236,255,255,
-22,0,144,4,132,0,0,0,10,0,48,240,140,132,142,0,0,30,22,
-136,92,0,0,240,140,8,14,132,89,0,52,132,140,192,4,0,64,
-0,16,164,176,0,16,164,176,0,16,164,144,0,16,164,144,0,16,
-164,144,0,80,4,132,0,0,0,10,0,0,0,0,0,0,0,0,112,96,8,
-140,160,224,199,146,16,22,56,92,32,224,161,176,18,22,120,
-92,0,0,104,140,20,224,33,144,13,224,3,90,68,224,41,144,
-17,22,112,92,0,48,192,140,192,4,0,64,22,22,72,92,0,80,
-69,140,198,4,0,19,0,48,88,140,64,86,0,0,4,201,98,89,0,
-48,24,140,76,20,0,80,0,16,166,144,0,48,80,140,255,255,0,
-0,148,128,50,88,170,64,49,61,74,32,2,61,210,5,232,140,22,
-64,39,54,0,30,128,92,84,255,255,11,244,1,0,8,0,0,0,0,
-64,224,137,144,7,22,128,92,0,80,4,134,144,112,0,90,0,16,
-76,140,22,0,0,21,0,30,128,92,44,255,255,11,204,1,0,8,0,
-0,0,0,48,224,65,144,0,48,72,146,68,0,0,32,0,48,160,176,
-240,4,0,96,0,48,160,176,240,4,0,96,44,96,74,140,137,48,
-0,90,1,32,33,140,1,9,66,89,0,48,160,144,252,4,0,96,0,
-48,160,144,252,4,0,96,0,48,160,144,252,4,0,96,130,1,0,
-18,0,48,232,140,255,63,0,0,0,100,161,140,148,64,47,88,
-244,3,0,8,0,0,0,0,14,140,161,89,94,32,13,58,18,32,13,
-49,174,33,21,58,146,34,29,58,196,3,0,8,0,30,128,92,164,
-254,255,11,34,32,1,58,7,22,128,92,0,16,137,140,0,30,144,
-92,8,0,152,140,228,218,255,9,20,0,0,8,0,0,0,0,0,208,
-162,144,20,80,160,89,0,208,162,146,159,25,40,88,0,0,64,
-140,0,30,32,92,148,3,0,8,0,0,0,0,34,32,1,61,0,30,128,
-92,88,254,255,11,0,208,162,144,20,80,160,89,159,25,40,88,
-0,0,64,140,108,3,0,8,142,73,161,88,134,32,5,90,1,32,33,
-140,38,0,0,18,7,22,128,92,0,16,137,140,0,30,144,92,8,0,
-152,140,120,218,255,9,0,30,128,92,24,254,255,11,196,1,0,
-8,0,30,128,92,64,224,143,140,136,253,255,11,0,208,128,144,
-28,12,164,89,20,253,151,144,60,0,0,0,72,224,169,144,0,48,
-232,140,0,0,255,0,146,64,167,88,149,32,5,90,26,12,44,89,
-50,0,0,21,146,208,160,88,44,0,232,140,132,64,175,112,20,
-57,160,144,160,81,0,0,4,73,41,89,146,128,50,88,6,0,165,
-89,5,124,173,140,208,255,255,255,58,64,165,58,0,16,163,
-144,7,22,128,92,0,0,144,140,8,30,152,92,1,32,165,140,4,
-22,136,92,0,0,32,140,0,30,64,92,159,25,40,88,0,16,163,
-146,220,217,255,9,172,2,0,8,0,0,0,0,66,32,2,61,60,224,
-137,144,7,22,128,92,0,80,4,134,144,112,0,90,0,16,76,140,
-42,0,0,21,7,22,128,92,0,16,137,140,0,30,144,92,8,0,152,
-140,164,217,255,9,0,30,32,92,159,25,40,88,108,2,0,8,0,0,
-0,0,26,96,1,58,5,208,128,89,0,80,138,140,2,12,132,89,64,
-224,151,140,60,222,255,9,7,22,128,92,0,16,137,140,6,22,
-144,92,2,0,152,140,188,0,0,8,0,0,0,0,26,32,1,58,0,30,
-128,92,0,253,255,11,7,22,128,92,0,16,137,140,152,0,0,8,
-7,22,128,92,0,144,139,140,128,213,255,9,30,32,4,61,0,30,
-128,92,220,252,255,11,0,208,162,144,20,80,160,89,159,25,
-40,88,244,1,0,8,60,224,137,144,7,22,128,92,0,80,4,134,
-144,112,0,90,0,16,76,140,38,0,0,21,24,224,129,144,52,214,
-255,9,0,30,128,92,164,252,255,11,0,208,162,144,20,80,160,
-89,159,25,40,88,188,1,0,8,0,16,166,144,0,30,128,92,0,80,
-138,140,0,48,232,140,0,0,255,0,148,64,167,88,72,224,161,
-146,140,251,255,9,144,48,0,90,0,16,76,140,42,0,0,21,7,
-22,128,92,0,0,136,140,0,30,144,92,8,0,152,140,172,216,
-255,9,0,30,32,92,0,0,64,140,159,25,40,88,112,1,0,8,44,
-224,169,144,0,48,232,140,255,63,0,0,0,164,161,140,148,64,
-47,88,1,0,32,140,1,73,69,89,80,1,0,8,38,32,1,58,7,22,
-128,92,0,0,144,140,8,30,152,92,0,16,137,140,0,30,32,92,
-0,0,64,140,159,25,40,88,88,216,255,9,0,30,128,92,112,224,
-143,140,180,251,255,11,0,208,128,144,26,12,52,89,22,161,1,
-58,28,12,164,89,20,253,151,144,108,0,0,0,112,224,167,144,
-0,48,168,140,0,0,255,0,146,64,181,88,148,64,165,88,34,0,
-181,61,146,208,160,88,20,57,176,144,160,81,0,0,146,128,34,
-88,8,137,169,89,4,128,165,89,34,64,165,58,0,16,163,144,
-20,80,160,89,0,0,32,140,0,30,64,92,159,25,40,88,0,16,
-163,146,184,0,0,8,22,16,162,89,0,208,129,140,14,22,136,
-92,20,129,49,89,16,212,255,9,30,32,4,61,0,208,162,144,20,
-80,160,89,0,0,32,140,0,30,64,92,159,25,40,88,132,0,0,8,
-60,224,137,144,7,22,128,92,0,80,4,134,144,112,0,90,0,16,
-76,140,46,0,0,21,0,208,162,144,24,224,129,144,20,80,160,
-89,0,0,32,140,0,30,64,92,159,25,40,88,0,208,162,146,172,
-212,255,9,76,0,0,8,0,0,0,0,6,208,128,89,0,80,138,140,2,
-12,132,89,116,224,151,140,32,220,255,9,7,22,128,92,1,0,
-136,140,4,22,144,92,2,0,152,140,76,215,255,9,0,30,32,92,
-24,0,0,8,0,30,128,92,228,250,255,11,0,208,162,144,20,80,
-160,89,0,208,162,146,13,80,104,89,88,219,107,52,20,224,33,
-146,40,224,73,146,36,224,65,146,68,224,41,146,160,224,199,
-144,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,160,140,80,
-237,0,0,148,48,0,90,12,32,36,144,0,48,160,146,160,228,0,
-0,18,0,0,21,8,30,128,92,0,0,0,10,0,0,0,0,0,16,133,140,
-7,14,137,89,112,44,0,9,0,30,168,92,149,32,1,90,1,9,161,
-89,0,48,240,146,136,228,0,0,0,48,160,146,132,228,0,0,94,
-0,0,19,0,48,176,144,160,228,0,0,0,47,1,90,0,48,128,140,
-0,183,0,0,159,25,184,88,0,144,165,140,30,0,0,16,16,160,
-133,146,1,30,168,92,68,160,189,146,149,32,1,90,128,160,
-165,140,38,0,0,19,16,32,133,146,68,32,189,146,144,32,133,
-146,21,144,168,89,196,32,189,146,149,32,1,90,0,33,165,140,
-228,255,255,20,2,30,128,92,0,0,0,10,0,0,0,0,0,0,0,0,0,
-0,0,0,92,32,164,144,17,22,80,92,138,32,5,90,0,16,36,140,
-18,22,56,92,40,32,52,144,46,0,0,18,16,16,45,89,0,80,137,
-144,30,96,4,59,31,88,236,89,145,64,151,112,2,0,152,140,
-12,214,255,9,0,80,241,146,36,32,241,146,92,32,81,146,230,
-225,1,59,4,16,77,89,36,32,65,140,36,32,161,144,222,32,5,
-61,20,32,161,144,182,32,5,61,4,22,128,92,0,144,138,140,
-24,210,255,9,198,33,4,58,84,32,169,144,44,32,161,144,26,
-0,173,62,64,32,137,144,4,22,128,92,0,80,4,134,48,32,161,
-144,20,0,0,8,60,32,137,144,4,22,128,92,0,80,4,134,44,32,
-161,144,16,22,48,92,36,32,161,146,136,32,12,61,0,48,160,
-144,40,86,0,0,24,32,129,144,7,0,165,89,0,48,160,146,40,
-86,0,0,172,210,255,9,135,16,139,112,0,0,128,140,40,19,0,
-11,36,32,241,146,0,0,0,10,0,0,0,0,20,32,137,144,4,22,
-128,92,0,0,144,140,8,30,152,92,80,213,255,9,0,30,128,92,
-133,16,139,112,0,0,40,140,248,18,0,11,0,16,242,146,20,32,
-241,146,188,0,0,8,64,32,137,144,4,22,128,92,0,80,4,134,
-144,112,0,90,0,16,52,140,46,1,0,18,48,32,161,144,36,32,
-161,146,20,32,177,144,84,32,169,144,7,128,165,89,148,96,5,
-90,0,208,41,140,10,0,0,20,22,65,45,89,36,32,161,144,133,
-32,5,90,5,193,57,89,86,0,0,22,36,32,137,144,0,30,128,92,
-0,144,145,140,80,32,153,140,196,15,0,9,0,16,162,144,20,
-32,169,144,64,32,137,144,4,22,128,92,21,0,173,89,20,65,
-41,89,20,32,169,146,0,80,4,134,144,112,0,90,0,16,52,140,
-74,255,255,18,48,32,161,144,133,32,5,90,0,16,162,146,180,
-255,255,17,30,96,1,58,0,30,128,92,0,80,137,140,6,22,144,
-92,80,32,153,140,112,15,0,9,16,22,48,92,0,80,162,144,84,
-32,169,144,5,0,141,89,145,96,5,90,0,80,138,146,38,0,0,
-21,31,88,236,89,145,64,151,112,0,16,129,140,2,30,152,92,
-80,212,255,9,0,80,242,146,36,32,241,146,40,0,0,8,32,32,
-161,140,0,16,133,176,8,32,53,146,5,65,172,89,0,80,141,
-140,6,22,144,92,0,16,133,146,4,32,173,146,12,32,157,146,
-44,254,1,60,0,0,0,10,0,0,0,0,0,48,160,144,40,86,0,0,
-135,16,139,112,0,0,128,140,7,0,165,89,0,48,160,146,40,86,
-0,0,164,17,0,8,0,48,160,144,40,86,0,0,135,16,139,112,0,
-0,128,140,7,0,165,89,0,48,160,146,40,86,0,0,140,17,0,11,
-20,32,137,144,4,22,128,92,0,0,144,140,2,30,152,92,192,
-211,255,9,20,32,241,146,0,0,0,10,0,30,32,92,0,16,36,146,
-132,73,140,89,16,16,129,89,244,127,36,62,0,0,0,10,0,0,0,
-0,0,0,0,0,0,0,0,0,80,96,8,140,112,224,199,178,128,224,
-231,146,21,22,216,92,3,160,172,140,21,210,232,88,0,144,
-101,140,31,88,115,89,51,96,183,140,142,133,181,112,0,48,
-168,144,68,86,0,0,0,48,184,144,48,86,0,0,21,80,168,89,0,
-48,168,146,68,86,0,0,22,192,181,89,0,48,176,146,48,86,0,
-0,4,32,171,144,19,22,200,92,0,16,213,140,0,30,24,92,8,
-96,127,140,2,222,63,89,64,224,151,146,130,77,95,89,0,16,
-83,144,130,77,77,89,137,224,1,90,0,80,138,140,10,0,0,22,
-7,22,136,92,0,48,80,146,48,0,0,32,0,48,136,146,96,0,0,
-32,0,48,176,144,96,81,0,0,0,48,184,144,176,81,0,0,0,48,
-40,140,48,0,0,32,0,48,168,144,180,81,0,0,17,22,64,92,0,
-48,104,140,4,0,0,32,255,0,32,140,0,48,224,140,0,0,255,
-255,255,3,192,140,48,96,49,140,15,160,3,90,17,157,82,140,
-17,193,90,89,1,160,181,140,17,65,74,89,0,48,176,146,96,
-81,0,0,150,0,177,88,1,224,189,140,149,0,175,88,0,48,224,
-140,252,255,255,0,149,67,175,88,0,48,176,146,4,0,0,32,
-151,0,190,88,0,116,173,140,0,0,1,0,149,0,183,88,0,48,
-192,140,0,0,255,0,149,0,198,88,0,48,184,146,176,81,0,0,
-80,224,199,146,0,48,176,146,180,81,0,0,38,1,0,17,139,48,
-0,90,17,192,66,89,70,0,0,22,12,16,98,89,4,32,163,144,0,
-16,83,144,0,48,168,144,96,81,0,0,0,80,81,146,130,13,77,
-89,1,96,173,140,9,193,90,89,0,144,73,146,149,0,161,88,0,
-48,168,146,96,81,0,0,139,48,0,90,0,80,163,146,196,255,
-255,17,8,206,180,89,0,180,133,146,64,8,0,64,0,48,160,144,
-176,81,0,0,0,48,168,144,180,81,0,0,14,222,224,89,148,3,
-167,88,0,48,160,146,76,12,0,80,0,180,173,146,192,0,0,64,
-0,48,160,128,8,0,0,16,148,32,2,90,0,48,176,140,8,0,0,
-16,255,0,168,140,18,0,0,18,0,144,165,128,148,64,165,88,
-248,31,162,61,30,32,2,58,8,206,164,89,0,52,173,140,192,0,
-0,112,129,11,66,90,0,80,165,144,248,255,255,21,80,224,231,
-144,31,88,195,89,15,1,166,89,0,0,168,140,2,12,181,89,8,
-206,164,89,21,160,5,90,0,52,165,140,192,0,0,64,156,131,
-148,88,0,16,149,146,22,0,0,19,21,80,168,89,21,160,5,90,
-0,16,245,146,244,255,255,20,8,206,156,89,26,206,163,89,0,
-244,164,146,192,0,0,64,112,224,199,176,128,224,231,144,0,
-0,0,10,102,96,76,60,12,16,98,89,4,32,171,144,8,193,177,
-89,0,16,83,144,130,77,77,89,137,160,5,90,0,80,138,140,10,
-0,0,22,22,22,136,92,0,80,81,146,0,48,176,144,96,81,0,0,
-8,64,68,89,136,112,2,90,17,157,82,140,17,65,74,89,0,144,
-137,146,17,193,90,89,1,160,181,140,150,0,169,88,0,48,176,
-146,96,81,0,0,0,80,171,146,164,255,255,22,0,48,184,144,
-176,81,0,0,8,206,180,89,0,180,133,146,64,8,0,64,0,48,
-168,144,180,81,0,0,143,201,109,88,0,48,104,146,76,12,0,
-80,0,180,173,146,192,0,0,64,0,48,168,128,8,0,0,16,21,
-112,2,90,0,48,184,140,8,0,0,16,255,0,176,140,18,0,0,17,
-0,208,173,128,149,128,173,88,248,127,77,51,8,206,180,89,0,
-0,184,140,23,188,173,140,192,0,0,112,0,80,37,176,0,80,37,
-176,0,80,133,152,0,48,168,140,0,0,0,176,23,188,181,140,
-192,0,0,64,148,48,0,90,0,144,173,146,10,9,66,89,0,244,
-123,140,212,255,255,255,38,1,0,21,14,224,2,61,31,88,195,
-89,106,2,126,54,118,224,2,59,22,96,2,61,12,16,98,89,4,
-32,163,144,0,16,83,144,130,13,77,89,2,222,231,89,8,1,167,
-89,137,32,5,90,0,80,138,140,10,0,0,22,20,22,136,92,0,48,
-80,146,48,0,0,32,0,48,160,144,96,81,0,0,255,0,168,140,
-17,65,74,89,0,48,136,146,96,0,0,32,8,64,68,89,17,157,82,
-140,17,193,90,89,1,32,165,140,148,64,173,88,0,48,160,146,
-96,81,0,0,0,48,168,146,4,0,0,32,146,32,82,59,8,206,236,
-89,0,48,32,140,8,0,0,16,255,0,144,140,0,48,56,140,255,
-63,0,0,0,48,48,140,76,12,0,80,0,116,47,140,192,0,0,112,
-0,16,161,128,148,128,164,88,90,32,85,51,0,30,160,92,5,0,
-133,89,20,124,143,140,192,0,0,64,0,100,163,140,148,192,
-105,88,0,144,105,146,0,16,164,176,0,16,164,176,0,16,164,
-152,0,16,164,144,0,48,176,140,0,0,0,176,0,80,180,146,0,
-16,161,128,148,128,164,88,20,176,2,90,11,9,66,89,0,244,
-123,140,212,255,255,255,192,255,255,17,160,63,82,60,254,
-254,2,61,31,88,195,89,246,30,126,49,84,1,0,8,14,224,2,
-61,31,88,227,89,50,1,127,54,118,224,2,59,22,96,2,61,12,
-16,98,89,4,32,163,144,0,16,83,144,130,13,77,89,2,222,199,
-89,8,1,166,89,137,32,5,90,0,80,138,140,10,0,0,22,20,22,
-136,92,0,48,80,146,48,0,0,32,0,48,160,144,96,81,0,0,255,
-0,168,140,17,65,74,89,0,48,136,146,96,0,0,32,8,64,68,89,
-17,157,82,140,17,193,90,89,1,32,165,140,148,64,173,88,0,
-48,160,146,96,81,0,0,0,48,168,146,4,0,0,32,174,32,82,59,
-8,78,62,89,0,48,112,140,8,0,0,16,255,0,48,140,0,244,233,
-140,192,0,0,112,0,144,163,128,148,128,161,88,134,32,85,51,
-0,30,160,92,29,0,37,89,20,252,41,140,192,0,0,64,3,80,24,
-89,30,128,30,61,27,22,128,92,0,80,142,140,96,224,239,146,
-116,238,255,11,0,30,24,92,96,224,239,144,0,48,224,140,255,
-63,0,0,0,100,163,140,148,0,111,88,0,48,104,146,76,12,0,
-80,0,16,161,176,0,16,161,176,0,16,161,152,0,16,161,144,0,
-48,176,140,0,0,0,176,0,80,177,146,0,144,163,128,148,128,
-161,88,20,176,2,90,11,9,66,89,0,244,123,140,212,255,255,
-255,148,255,255,17,116,63,82,60,226,254,2,61,31,88,195,89,
-216,30,126,49,3,80,24,89,22,128,30,61,27,22,128,92,0,80,
-142,140,248,237,255,11,0,30,24,92,0,48,224,140,255,63,0,
-0,0,100,163,140,148,0,167,88,142,9,165,88,0,48,160,146,
-76,12,0,80,0,48,160,128,8,0,0,16,148,32,2,90,0,48,176,
-140,8,0,0,16,255,0,168,140,18,0,0,19,0,144,165,128,148,
-64,165,88,248,31,162,60,0,48,160,128,8,0,0,16,148,48,0,
-90,0,48,184,140,8,0,0,16,255,0,176,140,34,0,0,18,8,78,
-166,89,0,52,173,140,192,0,0,112,0,80,165,144,0,208,165,
-128,148,128,165,88,244,63,5,61,31,88,195,89,80,224,231,
-144,15,1,166,89,64,224,199,144,2,12,181,89,1,25,184,89,1,
-137,181,89,8,78,166,89,150,224,5,90,0,52,165,140,192,0,0,
-64,156,3,174,88,0,16,173,146,22,0,0,18,1,137,181,89,150,
-224,5,90,0,16,245,146,244,255,255,21,8,78,174,89,154,48,
-0,90,26,206,163,89,0,116,165,146,192,0,0,64,26,0,0,18,3,
-80,24,89,18,128,30,61,27,22,128,92,0,80,142,140,4,237,
-255,11,112,224,199,176,128,224,231,144,0,0,0,10,0,0,0,0,
-0,0,0,0,0,0,0,0,0,48,160,144,188,81,0,0,16,16,140,89,
-14,222,144,89,17,0,173,89,149,160,4,90,0,48,32,144,184,
-81,0,0,18,0,0,22,0,30,128,92,0,0,0,10,0,0,0,0,17,0,
-161,89,0,16,129,140,0,48,160,146,184,81,0,0,0,48,168,146,
-188,81,0,0,8,34,0,9,4,208,131,89,16,210,131,88,0,0,0,
-10,0,0,0,0,0,0,0,0,0,30,144,92,0,0,136,140,135,25,152,
-88,0,48,128,140,0,4,0,136,0,48,184,140,192,81,0,0,0,208,
-165,128,34,32,5,58,0,16,164,144,3,224,173,128,4,224,181,
-128,8,12,165,89,148,64,165,88,10,128,165,58,18,80,144,89,
-1,96,140,140,145,224,4,90,4,32,132,140,23,16,186,89,204,
-255,255,22,14,160,4,58,0,30,128,92,0,0,0,10,0,0,80,140,
-0,30,32,92,120,1,0,9,0,30,72,92,0,0,40,140,0,30,48,92,
-0,0,64,140,0,48,160,140,240,85,0,0,0,48,240,146,248,85,
-0,0,0,30,56,92,0,16,69,154,1,30,128,92,0,48,32,178,224,
-85,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,240,
-140,144,159,0,0,30,22,152,92,0,0,240,140,135,25,184,88,
-14,192,133,54,0,30,128,92,0,208,4,132,144,57,168,140,192,
-81,0,0,0,80,165,128,14,32,5,61,0,30,128,92,0,208,4,132,
-2,96,165,128,16,57,176,140,0,4,0,136,145,0,141,88,146,48,
-0,90,8,78,164,89,0,144,165,146,38,0,0,18,0,144,165,144,
-1,96,173,128,8,12,165,89,148,64,165,88,18,64,164,58,0,30,
-128,92,0,208,4,132,0,0,0,0,1,30,128,92,0,208,4,132,0,0,
-0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,240,140,248,159,0,
-0,30,22,144,92,0,0,240,140,135,25,176,88,14,128,133,54,0,
-30,128,92,0,144,4,132,144,57,168,140,192,81,0,0,0,80,165,
-128,14,32,5,61,0,30,128,92,0,144,4,132,16,57,160,144,0,
-4,0,136,1,96,173,128,8,12,165,89,148,64,165,88,1,0,128,
-140,0,80,164,130,0,144,4,132,0,0,0,10,0,0,0,0,0,30,160,
-92,0,0,176,140,0,30,184,92,0,0,168,140,0,30,136,92,0,0,
-144,140,0,48,160,178,224,85,0,0,0,30,128,92,0,48,160,140,
-240,85,0,0,0,48,240,146,248,85,0,0,0,16,133,154,0,0,0,
-10,0,0,0,0,16,72,8,89,0,48,160,128,128,83,0,0,1,30,144,
-92,148,48,0,90,64,224,151,130,30,0,0,18,0,48,160,128,130,
-83,0,0,148,80,160,88,8,14,165,89,0,48,160,146,224,4,0,
-136,232,3,128,140,240,4,0,11,0,48,160,128,80,82,0,0,148,
-48,0,90,64,224,143,140,34,0,0,18,0,48,160,144,72,4,0,
-136,0,48,168,128,81,82,0,0,8,12,165,89,148,64,165,88,0,
-80,164,130,0,48,160,128,88,82,0,0,34,32,5,58,0,48,160,
-144,76,4,0,136,0,48,168,128,89,82,0,0,8,12,165,89,148,
-64,165,88,65,224,167,130,65,224,167,128,0,48,168,128,144,
-82,0,0,64,224,183,128,0,48,184,144,224,85,0,0,149,48,0,
-90,8,14,165,89,148,131,165,88,20,192,165,89,0,48,160,146,
-224,85,0,0,34,0,0,18,0,48,160,144,104,4,0,136,0,48,168,
-128,145,82,0,0,8,12,165,89,148,64,165,88,0,80,164,130,0,
-48,160,128,152,82,0,0,34,32,5,58,0,48,160,144,108,4,0,
-136,0,48,168,128,153,82,0,0,8,12,165,89,148,64,165,88,66,
-224,167,130,0,48,160,128,160,82,0,0,34,32,5,58,0,48,160,
-144,112,4,0,136,0,48,168,128,161,82,0,0,8,12,165,89,148,
-64,165,88,65,224,167,130,65,224,167,128,66,224,175,128,0,
-48,176,128,168,82,0,0,64,224,191,128,0,48,128,144,232,85,
-0,0,16,14,165,89,150,48,0,90,8,78,173,89,148,67,165,88,
-148,195,165,88,20,0,164,89,0,48,160,146,232,85,0,0,34,0,
-0,18,0,48,160,144,116,4,0,136,0,48,168,128,169,82,0,0,8,
-12,165,89,148,64,165,88,0,80,164,130,0,48,160,128,176,82,
-0,0,34,32,5,58,0,48,160,144,120,4,0,136,0,48,168,128,
-177,82,0,0,8,12,165,89,148,64,165,88,66,224,167,130,0,48,
-160,128,184,82,0,0,34,32,5,58,0,48,160,144,124,4,0,136,
-0,48,168,128,185,82,0,0,8,12,165,89,148,64,165,88,65,224,
-167,130,65,224,167,128,66,224,175,128,0,48,176,128,128,83,
-0,0,64,224,191,128,0,48,128,144,236,85,0,0,16,14,165,89,
-150,48,0,90,8,78,173,89,148,67,165,88,148,195,165,88,20,
-0,164,89,0,48,160,146,236,85,0,0,34,0,0,18,0,48,160,144,
-224,4,0,136,0,48,168,128,129,83,0,0,8,12,165,89,148,64,
-165,88,0,80,164,130,0,48,160,128,136,83,0,0,34,32,5,58,
-0,48,160,144,228,4,0,136,0,48,168,128,137,83,0,0,8,12,
-165,89,148,64,165,88,65,224,167,130,65,224,167,128,0,48,
-168,128,144,83,0,0,64,224,183,128,0,48,184,144,228,85,0,
-0,149,48,0,90,8,14,165,89,148,131,165,88,20,192,165,89,0,
-48,160,146,228,85,0,0,34,0,0,18,0,48,160,144,232,4,0,
-136,0,48,168,128,145,83,0,0,8,12,165,89,148,64,165,88,0,
-80,164,130,0,48,160,128,152,83,0,0,34,32,5,58,0,48,160,
-144,236,4,0,136,0,48,168,128,153,83,0,0,8,12,165,89,148,
-64,165,88,65,224,167,130,65,224,167,128,0,48,168,128,104,
-84,0,0,0,80,188,128,0,48,176,144,240,85,0,0,149,48,0,90,
-8,14,165,89,148,195,165,88,20,128,165,89,0,48,160,146,240,
-85,0,0,30,0,0,18,0,48,160,128,106,84,0,0,151,0,165,88,
-8,14,165,89,0,48,160,146,84,5,0,136,232,3,128,140,252,1,
-0,11,0,48,160,128,96,84,0,0,34,32,5,58,0,48,160,144,80,
-5,0,136,0,48,168,128,97,84,0,0,8,12,165,89,148,64,165,
-88,65,224,167,130,65,224,167,128,0,48,168,128,104,84,0,0,
-0,48,176,144,244,85,0,0,149,48,0,90,20,128,165,89,0,48,
-160,146,244,85,0,0,34,0,0,18,0,48,160,144,84,5,0,136,0,
-48,168,128,105,84,0,0,8,12,165,89,148,64,165,88,65,224,
-167,130,65,224,167,128,0,48,168,144,248,85,0,0,20,64,165,
-89,0,48,160,146,248,85,0,0,0,0,0,10,0,0,0,0,0,0,0,0,
-0,48,240,140,228,164,0,0,30,22,152,92,0,0,240,140,16,72,
-8,89,0,16,164,144,0,16,172,144,0,48,144,140,0,255,0,0,0,
-16,180,144,148,128,164,88,8,12,133,89,135,25,144,88,16,
-160,4,90,16,76,189,89,24,140,181,89,142,0,0,17,144,57,
-168,140,192,81,0,0,0,80,165,128,126,32,5,58,16,57,160,
-144,0,4,0,136,1,96,173,128,8,12,165,89,148,64,165,88,135,
-25,144,88,16,160,4,90,22,1,165,88,151,128,173,88,148,67,
-165,88,255,0,168,140,148,64,141,88,0,116,160,130,240,255,
-255,255,66,0,0,17,144,57,184,140,192,81,0,0,0,208,165,
-128,50,32,5,58,2,224,173,128,16,57,176,140,0,4,0,136,145,
-64,173,88,8,78,165,89,0,144,165,146,0,144,165,144,1,224,
-181,128,8,12,165,89,148,128,165,88,18,64,165,58,0,30,128,
-92,16,73,8,89,0,208,4,132,1,30,128,92,16,73,8,89,0,208,
-4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,30,128,92,135,25,152,
-88,1,25,144,89,255,0,136,140,0,48,168,140,176,228,0,0,0,
-48,184,140,0,4,0,136,0,48,176,140,192,81,0,0,0,144,165,
-128,14,32,5,61,0,80,149,146,20,0,0,8,0,208,165,144,8,12,
-165,89,148,64,164,88,0,80,165,146,16,80,128,89,144,224,4,
-90,4,96,173,140,23,16,185,89,8,160,181,140,204,255,255,22,
-0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,48,240,140,144,
-165,0,0,30,22,136,92,0,0,240,140,144,48,0,90,1,9,132,89,
-22,0,0,20,16,22,160,92,148,48,0,90,1,9,132,89,244,255,
-255,19,0,80,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,
-0,208,172,144,4,78,164,89,17,57,136,140,0,0,0,0,17,1,
-237,89,127,0,64,140,29,32,2,90,0,48,168,146,64,20,0,80,
-198,0,0,22,8,14,164,89,0,48,48,140,84,0,0,32,0,48,40,
-140,96,0,0,32,135,25,32,88,0,52,141,140,112,4,0,96,0,
-144,145,146,0,80,33,146,0,80,164,176,0,80,164,176,0,80,
-164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,
-176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,
-0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,
-164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,
-176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,
-0,80,164,176,0,80,164,176,0,80,164,176,0,80,164,176,0,80,
-164,176,0,162,148,140,127,0,64,140,0,116,239,140,128,255,
-255,255,29,32,2,90,0,80,164,176,0,80,164,176,0,80,164,
-176,100,255,255,17,63,0,64,140,110,0,234,54,0,48,144,146,
-84,0,0,32,134,25,168,88,0,48,168,146,96,0,0,32,8,14,164,
-89,0,52,165,140,112,4,0,96,0,16,37,176,0,16,37,176,0,16,
-37,176,0,16,37,176,0,16,37,176,0,16,37,176,0,16,37,176,
-0,16,37,176,0,16,37,176,0,16,37,176,0,16,37,176,0,16,37,
-176,0,16,37,176,0,161,148,140,21,65,239,89,0,16,37,176,0,
-16,37,176,0,16,165,176,78,96,255,51,0,48,144,146,84,0,0,
-32,31,88,168,89,0,48,168,146,96,0,0,32,8,14,164,89,0,52,
-165,140,112,4,0,96,0,16,37,176,0,16,37,176,0,16,37,176,
-0,16,37,176,0,16,37,176,128,160,148,140,21,65,239,89,0,
-16,37,176,0,16,37,176,0,16,165,176,58,96,191,51,0,48,144,
-146,80,0,0,32,8,14,164,89,0,52,165,140,112,4,0,96,0,16,
-37,176,0,16,37,176,0,16,37,176,96,160,148,140,24,73,239,
-89,0,16,37,176,0,16,37,176,0,16,165,176,46,96,95,51,8,
-14,164,89,0,48,144,146,72,0,0,32,0,52,165,140,112,4,0,
-96,48,160,148,140,12,73,239,89,0,16,37,176,0,16,37,176,0,
-16,165,176,50,96,31,51,8,14,164,89,0,48,32,140,64,0,0,
-32,0,52,141,140,112,4,0,96,4,73,239,89,0,16,145,146,29,
-240,0,90,16,160,148,140,0,80,164,176,236,255,255,17,50,96,
-7,58,8,14,132,89,0,48,168,140,56,0,0,32,0,52,132,140,
-124,4,0,96,1,73,239,89,0,80,149,146,157,48,0,90,4,160,
-148,140,0,16,164,144,236,255,255,21,0,48,160,144,64,20,0,
-80,18,22,128,92,0,208,164,146,0,0,0,10,0,0,0,0,0,48,
-240,140,92,168,0,0,30,22,144,92,0,0,240,140,8,78,140,89,
-0,116,140,140,64,4,0,64,0,80,164,176,0,16,164,178,0,80,
-164,176,16,16,132,89,0,16,164,178,0,80,164,176,16,32,164,
-178,0,144,4,132,0,0,0,10,0,48,240,140,148,168,0,0,30,22,
-144,92,0,0,240,140,34,96,4,58,8,14,132,89,0,52,132,140,
-64,4,0,64,4,73,140,89,145,48,0,90,0,16,164,176,244,255,
-255,21,0,144,4,132,0,0,0,10,0,0,0,0,0,0,0,0,8,0,188,
-9,221,4,62,3,110,2,242,1,158,1,99,1,55,1,20,1,248,0,
-226,0,207,0,191,0,177,0,165,0,155,0,146,0,137,0,130,0,
-124,0,118,0,112,0,107,0,103,0,99,0,95,0,91,0,88,0,85,0,
-82,0,79,0,77,0,75,0,72,0,70,0,68,0,66,0,65,0,63,0,61,
-0,60,0,58,0,57,0,56,0,54,0,53,0,52,0,51,0,50,0,49,0,
-48,0,47,0,46,0,45,0,44,0,44,0,43,0,42,0,41,0,41,0,40,
-0,39,0,39,0,38,0,37,0,37,0,36,0,36,0,35,0,35,0,34,0,
-34,0,33,0,33,0,32,0,32,0,31,0,31,0,31,0,30,0,30,0,29,
-0,29,0,29,0,28,0,28,0,28,0,27,0,27,0,27,0,26,0,26,0,
-26,0,26,0,25,0,25,0,25,0,24,0,24,0,24,0,24,0,23,0,23,
-0,23,0,23,0,23,0,22,0,22,0,22,0,22,0,21,0,21,0,21,0,
-21,0,21,0,20,0,20,0,20,0,20,0,20,0,20,0,19,0,19,0,19,
-0,19,0,19,0,19,0,18,0,18,0,18,0,18,0,18,0,18,0,18,0,
-17,0,17,0,17,0,17,0,17,0,17,0,17,0,17,0,16,0,16,0,16,
-0,16,0,16,0,16,0,16,0,16,0,16,0,15,0,15,0,15,0,15,0,
-15,0,15,0,15,0,15,0,15,0,14,0,14,0,14,0,14,0,14,0,14,
-0,14,0,14,0,14,0,14,0,14,0,13,0,13,0,13,0,13,0,13,0,
-13,0,13,0,13,0,13,0,13,0,13,0,13,0,13,0,12,0,12,0,12,
-0,12,0,12,0,12,0,12,0,12,0,12,0,12,0,12,0,12,0,12,0,
-12,0,12,0,11,0,11,0,11,0,11,0,11,0,11,0,11,0,11,0,11,
-0,11,0,11,0,11,0,11,0,11,0,11,0,11,0,11,0,10,0,10,0,
-10,0,10,0,10,0,10,0,10,0,10,0,10,0,10,0,10,0,10,0,10,
-0,10,0,10,0,10,0,10,0,10,0,10,0,10,0,10,0,9,0,9,0,9,
-0,9,0,9,0,9,0,9,0,9,0,9,0,9,0,9,0,9,0,9,0,9,0,9,0,
-9,0,9,0,8,0,0,48,32,140,0,178,0,0,0,48,40,140,32,12,0,
-80,0,30,48,92,0,30,56,92,80,0,32,178,0,48,40,140,36,12,
-0,80,144,0,32,178,0,48,40,140,40,12,0,80,208,0,32,178,0,
-48,40,140,44,12,0,80,16,1,32,178,0,30,32,92,0,30,40,92,
-80,0,64,140,144,0,72,140,208,0,80,140,16,1,88,140,16,32,
-34,178,16,96,34,178,16,160,34,178,16,224,34,178,0,48,32,
-140,64,8,0,64,0,48,40,140,64,0,0,112,32,32,34,178,0,48,
-32,140,64,9,0,64,0,48,40,140,64,1,0,112,32,96,34,178,0,
-48,32,140,64,10,0,64,0,48,40,140,64,2,0,112,32,160,34,
-178,0,48,32,140,64,11,0,64,0,48,40,140,64,3,0,112,32,
-224,34,178,0,30,40,92,0,48,32,140,0,16,0,80,48,32,34,
-178,0,48,32,140,4,16,0,80,48,96,34,178,0,48,32,140,8,16,
-0,80,48,160,34,178,0,48,32,140,12,16,0,80,48,224,34,178,
-80,1,64,140,0,48,32,140,176,174,0,0,8,32,42,140,0,32,34,
-154,5,22,56,92,0,48,32,140,80,3,0,0,16,32,49,144,18,160,
-1,50,8,200,41,89,0,208,33,154,8,200,57,89,0,48,32,140,
-128,3,0,0,16,32,49,144,18,160,1,50,8,200,41,89,0,208,33,
-154,8,200,57,89,0,48,32,140,176,3,0,0,16,32,49,144,18,
-160,1,50,8,200,41,89,0,208,33,154,8,200,57,89,0,48,32,
-140,32,228,0,0,16,32,49,144,14,160,1,50,0,208,33,146,8,
-200,57,89,4,201,57,89,8,32,42,140,0,208,41,146,0,30,32,
-92,0,30,40,92,0,30,48,92,0,30,56,92,48,32,34,178,208,1,
-64,140,0,48,32,140,16,176,0,0,0,48,40,144,32,3,0,0,0,
-48,48,144,36,3,0,0,0,32,34,178,0,30,32,92,0,30,48,92,
-16,32,34,178,32,32,34,178,16,2,64,140,0,48,32,140,224,
-183,0,0,0,32,34,178,0,0,32,140,60,32,34,146,144,1,64,
-140,0,48,32,140,0,185,0,0,0,32,34,178,80,2,64,140,80,0,
-32,140,0,16,34,146,4,8,66,89,0,16,34,146,4,8,66,89,0,
-16,34,146,4,8,66,89,0,16,34,146,4,8,66,89,80,1,32,140,
-0,16,34,146,4,8,66,89,208,1,32,140,0,16,34,146,4,8,66,
-89,16,2,32,140,0,16,34,146,4,8,66,89,144,1,32,140,0,16,
-34,146,0,48,32,140,0,192,255,15,0,48,32,146,240,2,0,0,0,
-48,32,140,240,63,0,0,0,48,32,146,244,2,0,0,0,0,32,140,
-0,48,32,146,248,2,0,0,6,0,32,140,0,48,32,146,252,2,0,0,
-0,2,40,140,32,0,48,140,0,48,56,140,80,237,2,0,132,2,56,
-146,7,22,32,92,4,64,57,89,240,33,57,146,1,137,181,89,240,
-191,5,53,0,30,56,92,240,33,57,146,0,48,64,140,192,2,0,0,
-12,0,56,140,0,48,64,146,44,3,0,0,144,0,48,140,8,32,50,
-146,7,0,42,89,0,16,42,146,5,22,64,92,208,0,48,140,8,32,
-50,146,7,0,42,89,0,16,42,146,5,22,64,92,16,1,48,140,8,
-32,50,146,0,32,242,146,0,48,240,146,40,3,0,0,0,0,0,10,
-0,0,0,0,0,0,0,0,0,48,32,144,40,3,0,0,0,48,40,140,40,
-3,0,0,94,32,1,50,4,32,49,144,16,128,129,50,4,22,40,92,
-0,16,33,144,236,255,255,8,0,16,49,144,0,48,56,144,44,3,
-0,0,0,80,49,146,0,16,57,146,0,48,32,146,44,3,0,0,80,2,
-24,140,8,32,41,144,208,0,48,140,4,200,24,89,16,128,41,52,
-4,200,24,89,8,128,41,50,4,200,24,89,80,0,48,140,0,208,
-48,146,0,0,0,10,80,2,24,140,0,48,40,140,64,4,0,64,0,48,
-48,140,128,8,0,64,0,48,56,140,64,20,0,80,0,48,64,140,64,
-4,0,96,255,15,72,140,0,48,80,144,96,86,0,0,0,48,88,140,
-8,0,0,16,0,48,96,140,64,12,0,80,0,48,104,140,0,0,0,48,
-0,48,112,140,96,0,0,48,0,0,120,140,0,30,240,92,0,48,136,
-144,112,228,0,0,0,48,128,140,255,255,15,0,0,80,132,146,0,
-80,132,144,144,0,132,88,1,9,132,89,0,80,132,146,242,63,4,
-53,0,208,130,144,12,32,4,50,0,80,131,144,244,255,255,8,0,
-208,32,144,0,16,161,176,0,16,5,132,0,0,0,0,44,224,3,50,
-0,0,120,140,0,48,136,144,120,228,0,0,0,0,120,140,0,80,
-148,144,136,25,128,88,1,160,148,140,0,80,148,146,0,48,128,
-146,4,0,0,32,0,80,197,152,4,200,24,89,28,32,150,144,4,
-32,201,146,0,144,132,144,64,32,4,53,174,95,174,50,0,80,
-198,152,28,32,150,144,0,144,132,144,44,32,4,53,154,95,174,
-50,0,80,198,152,28,32,150,144,0,144,132,144,24,32,4,53,
-134,95,174,50,0,80,198,152,28,32,150,144,0,144,132,144,
-116,63,4,50,0,16,230,152,110,95,231,49,0,0,208,140,12,32,
-222,144,120,0,200,140,28,65,231,89,90,31,223,49,155,56,
-232,140,0,0,0,0,0,48,128,146,48,0,0,32,29,128,214,89,0,
-48,232,146,96,0,0,32,29,65,206,89,4,160,164,144,2,30,168,
-92,32,32,182,152,0,144,244,146,8,136,148,89,0,48,160,146,
-56,0,0,32,8,192,149,54,22,22,144,92,0,144,132,144,0,144,
-171,146,27,1,231,89,12,32,4,50,10,0,223,49,176,95,238,54,
-28,32,150,146,0,16,222,144,24,32,206,144,1,140,142,89,155,
-93,230,140,27,64,140,89,0,16,142,146,0,208,130,128,254,63,
-68,49,8,137,214,89,0,80,131,176,0,168,6,90,0,80,163,176,
-8,8,239,89,0,16,135,154,8,72,231,89,0,80,151,154,8,8,
-239,89,0,16,167,154,8,72,231,89,0,80,183,154,200,255,255,
-21,160,254,255,8,0,0,0,0,0,0,0,0,0,0,0,0,0,80,213,152,
-132,2,200,144,4,200,24,89,120,0,192,140,128,190,6,50,126,
-126,6,50,0,30,184,92,154,208,155,88,26,210,151,88,3,206,
-212,89,70,0,214,49,26,192,189,89,0,80,245,146,0,48,144,
-146,48,0,0,32,0,48,208,146,96,0,0,32,21,16,170,89,244,
-97,222,146,26,1,198,89,0,80,214,146,8,128,173,54,20,32,
-169,144,0,80,213,152,240,97,206,144,8,160,6,50,180,127,6,
-53,0,48,160,140,16,176,0,0,0,16,161,178,132,2,160,144,0,
-16,181,144,0,208,130,128,250,159,133,52,22,193,189,89,0,
-16,229,140,0,80,131,176,16,8,239,89,0,80,195,176,8,137,
-181,89,0,16,135,178,16,72,231,89,0,80,199,178,230,191,5,
-53,10,32,141,136,255,0,144,140,7,32,133,128,145,128,140,
-88,1,78,140,89,240,33,213,144,0,116,140,140,160,168,0,0,
-143,8,132,88,0,80,140,136,240,33,245,146,10,32,141,138,
-238,32,44,53,80,0,144,140,124,96,68,50,0,48,176,144,40,3,
-0,0,0,16,173,144,4,160,157,144,18,160,5,50,96,192,172,50,
-0,144,181,144,240,255,255,8,0,48,176,144,44,3,0,0,82,160,
-5,50,4,160,173,146,0,144,133,144,0,48,136,144,40,3,0,0,
-0,48,128,146,44,3,0,0,0,144,141,146,0,48,176,146,40,3,0,
-0,80,2,144,140,8,160,141,144,208,0,128,140,4,136,148,89,
-16,0,140,52,4,136,148,89,8,0,140,50,4,136,148,89,0,144,
-140,146,8,160,149,144,0,48,192,144,112,86,0,0,24,160,132,
-144,1,8,198,89,0,48,192,146,112,86,0,0,44,32,4,53,0,48,
-128,140,200,191,0,0,24,160,164,146,80,0,136,140,0,160,132,
-146,42,128,140,53,0,48,128,140,192,191,0,0,0,160,132,146,
-24,0,0,8,240,33,140,144,12,96,4,50,17,22,128,92,244,255,
-255,8,240,33,164,146,26,22,160,92,188,254,5,53,132,2,160,
-146,200,252,255,8,16,2,144,140,60,160,132,144,214,63,4,53,
-0,48,152,140,240,183,0,0,60,160,164,146,0,160,156,146,212,
-255,255,8,0,0,0,0,0,48,136,144,12,0,0,16,48,0,144,140,
-214,133,140,52,0,144,193,152,0,48,160,176,240,2,0,0,137,
-64,206,88,194,101,6,50,152,0,133,88,152,128,149,88,238,36,
-4,53,152,64,141,88,23,132,148,89,145,131,140,88,145,57,
-216,140,80,237,0,0,16,224,150,152,42,37,30,55,0,144,4,
-132,0,48,128,176,0,3,0,0,17,29,132,140,0,16,148,144,28,
-160,4,53,0,48,128,144,160,86,0,0,1,8,132,89,0,48,128,
-146,160,86,0,0,40,4,0,8,60,224,230,144,1,72,140,89,0,
-144,196,146,145,192,140,88,0,16,244,146,8,160,156,140,0,
-16,135,144,0,48,136,146,4,3,0,0,24,224,150,146,28,224,
-158,146,40,32,4,53,28,22,128,92,160,6,0,9,0,16,135,144,
-24,32,4,53,40,32,135,144,0,16,140,144,1,72,140,89,0,16,
-140,146,180,3,0,8,24,32,143,144,1,9,132,89,144,93,140,
-140,28,224,158,144,0,80,148,144,4,96,180,144,52,224,190,
-144,0,16,135,146,0,208,148,146,8,200,156,89,28,224,158,
-146,2,204,165,89,0,48,144,140,112,186,0,0,25,22,152,92,0,
-48,184,140,255,255,255,255,4,78,134,89,16,224,150,154,2,
-78,142,89,104,7,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,208,
-129,144,0,48,136,140,123,221,4,199,150,1,140,53,0,48,128,
-144,100,86,0,0,20,224,166,144,0,48,152,140,255,255,0,0,0,
-48,136,144,116,86,0,0,20,0,132,89,1,96,140,140,0,48,128,
-146,100,86,0,0,0,48,136,146,116,86,0,0,146,192,148,88,24,
-224,134,152,48,224,166,160,16,65,140,89,8,73,140,89,3,76,
-140,89,4,32,140,146,12,8,164,89,0,80,156,140,40,64,149,
-54,0,16,173,146,21,129,148,89,8,32,165,140,24,128,149,54,
-0,16,181,146,22,129,148,89,8,32,165,140,1,201,156,89,236,
-255,255,8,0,16,149,146,20,224,12,50,8,32,165,140,0,16,
-245,146,8,0,0,8,0,0,0,0,0,48,152,144,16,3,0,0,2,72,
-140,89,0,208,148,144,36,160,4,53,0,48,160,144,120,228,0,
-0,1,0,168,140,136,25,176,88,0,16,173,146,0,48,176,146,4,
-0,0,32,220,255,255,8,1,76,140,89,0,48,160,176,0,3,0,0,
-1,136,173,89,22,29,133,146,151,64,181,88,0,48,176,146,8,
-3,0,0,1,75,140,90,0,16,164,176,16,8,132,89,0,48,144,146,
-64,0,0,32,16,136,148,89,0,144,163,178,228,255,255,21,0,
-48,136,144,20,3,0,0,4,224,132,144,0,208,244,146,8,200,
-156,89,17,224,4,90,12,0,0,19,0,48,152,144,24,3,0,0,2,
-30,136,92,0,48,128,146,56,0,0,32,0,144,139,146,0,48,152,
-146,16,3,0,0,1,224,123,140,40,224,35,49,0,0,120,140,0,
-48,136,144,120,228,0,0,136,25,128,88,0,80,148,144,1,160,
-148,140,0,48,128,146,4,0,0,32,0,80,148,146,0,104,6,90,
-20,224,246,146,0,48,128,140,80,178,0,0,16,224,134,146,138,
-253,255,21,52,253,255,8,0,48,152,140,255,255,0,0,146,192,
-148,88,20,224,142,144,2,140,148,89,17,58,128,140,0,0,0,0,
-2,78,140,89,17,1,132,89,12,0,148,51,12,9,132,89,26,0,
-148,49,0,48,128,144,108,86,0,0,1,8,132,89,0,48,128,146,
-108,86,0,0,0,48,136,144,120,86,0,0,0,30,232,92,1,72,140,
-89,0,48,136,146,120,86,0,0,4,0,0,8,0,48,128,144,104,86,
-0,0,20,224,166,144,20,0,132,89,0,48,128,146,104,86,0,0,
-24,224,134,152,16,65,140,89,8,73,140,89,3,76,140,89,4,32,
-140,146,4,72,140,89,0,48,152,144,16,3,0,0,1,76,140,89,0,
-48,160,176,0,3,0,0,1,136,173,89,22,29,133,146,151,64,181,
-88,0,48,176,146,8,3,0,0,0,208,148,144,36,160,4,53,0,48,
-160,144,120,228,0,0,1,0,168,140,136,25,176,88,0,16,173,
-146,0,48,176,146,4,0,0,32,220,255,255,8,1,75,140,90,0,
-48,144,146,64,0,0,32,16,136,148,89,0,16,164,176,16,8,132,
-89,0,144,163,178,228,255,255,21,0,48,136,144,20,3,0,0,4,
-224,132,144,0,208,244,146,8,200,156,89,17,224,4,90,12,0,
-0,19,0,48,152,144,24,3,0,0,10,30,136,92,0,48,152,146,16,
-3,0,0,0,48,128,146,56,0,0,32,0,144,139,146,1,224,123,
-140,40,224,35,49,0,0,120,140,0,48,136,144,120,228,0,0,
-136,25,128,88,0,80,148,144,1,160,148,140,0,80,148,146,0,
-48,128,146,4,0,0,32,20,224,246,146,0,48,128,140,192,182,
-0,0,12,32,14,48,0,48,128,140,80,178,0,0,16,224,134,146,
-18,96,39,49,4,73,239,89,0,80,129,176,248,127,39,54,16,96,
-7,50,0,80,129,144,1,73,239,89,244,255,255,8,140,123,6,50,
-216,251,255,8,0,0,0,0,0,48,128,176,0,3,0,0,24,224,142,
-144,18,29,140,146,1,136,148,89,146,192,148,88,0,48,144,
-146,8,3,0,0,0,48,128,140,192,182,0,0,20,224,246,146,16,
-224,134,146,16,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,48,
-128,144,104,86,0,0,25,0,132,89,0,48,128,146,104,86,0,0,
-124,32,14,48,0,48,136,140,80,178,0,0,0,48,128,144,128,86,
-0,0,16,224,142,146,1,32,132,140,0,48,128,146,128,86,0,0,
-88,0,0,8,0,0,0,0,0,48,128,144,20,86,0,0,25,0,132,89,0,
-48,128,146,20,86,0,0,60,0,0,8,0,48,160,140,0,0,240,15,
-152,0,165,88,0,48,128,140,8,86,0,0,20,129,165,88,12,32,
-5,53,0,48,128,140,16,86,0,0,0,16,140,144,25,64,140,89,0,
-16,140,146,8,0,0,8,0,0,0,0,0,80,129,176,1,104,6,90,0,
-80,129,176,1,73,206,89,0,80,129,176,236,255,255,20,152,
-250,255,8,0,0,0,0,224,255,255,8,0,0,0,0,0,0,0,0,0,0,
-0,0,27,22,128,92,24,22,136,92,25,22,144,92,32,0,160,178,
-48,0,192,178,64,0,224,178,248,214,255,9,64,0,224,176,48,
-0,192,176,32,0,160,176,88,250,255,8,0,0,0,0,27,22,128,
-92,24,22,136,92,25,22,144,92,32,0,160,178,48,0,192,178,
-64,0,224,178,168,220,255,9,64,0,224,176,48,0,192,176,32,
-0,160,176,40,250,255,8,0,0,0,0,4,200,24,89,188,246,255,
-8,0,0,0,0,0,0,0,0,0,48,160,144,0,16,0,80,32,0,160,178,
-48,0,192,178,64,0,224,178,0,48,128,140,32,12,0,80,0,16,
-140,144,254,127,4,53,60,32,129,144,7,32,188,128,143,200,
-189,88,6,32,140,128,4,32,148,136,0,30,152,92,10,32,196,
-136,0,0,160,140,0,30,168,92,0,48,192,146,0,16,0,80,16,
-32,180,140,0,32,132,144,12,224,37,50,4,211,255,9,8,0,0,
-8,204,222,255,9,0,48,128,140,32,12,0,80,0,16,140,144,254,
-127,4,53,64,0,224,176,48,0,192,176,32,0,160,176,0,48,160,
-146,0,16,0,80,60,32,153,144,244,225,140,144,2,30,144,92,
-0,48,136,146,56,0,0,32,0,144,147,146,4,224,132,144,0,48,
-136,140,0,0,0,240,145,0,132,88,50,32,4,50,1,224,123,140,
-40,224,35,49,0,0,120,140,0,48,136,144,120,228,0,0,136,25,
-128,88,0,80,148,144,1,160,148,140,0,80,148,146,0,48,128,
-146,4,0,0,32,240,225,148,144,132,2,136,144,0,168,4,90,
-240,225,140,146,132,2,152,146,60,32,145,146,246,254,255,21,
-0,48,128,140,224,183,0,0,0,32,129,146,228,254,255,8,0,48,
-144,144,112,228,0,0,0,48,128,144,8,228,0,0,0,144,156,144,
-80,2,24,140,1,200,156,89,0,16,140,144,0,144,156,146,124,
-117,4,50,0,48,80,146,96,86,0,0,48,0,192,178,64,0,224,
-178,184,159,255,9,64,0,224,176,48,0,192,176,92,245,255,8,
-0,0,0,0,0,0,0,0,28,32,36,144,16,22,24,92,0,16,129,144,
-204,32,4,50,120,0,96,140,0,224,48,152,0,0,64,140,12,224,
-40,144,6,193,49,89,182,128,41,49,133,56,56,140,0,0,0,0,
-0,48,128,146,48,0,0,32,7,0,66,89,0,48,56,146,96,0,0,32,
-7,1,99,89,4,32,73,144,32,224,80,152,0,16,241,146,8,8,33,
-89,0,48,72,146,56,0,0,32,8,192,34,54,10,22,32,92,2,30,
-88,92,0,16,129,144,0,48,88,146,96,0,0,48,5,129,49,89,14,
-64,49,52,10,32,4,50,172,31,59,54,28,224,32,146,0,208,40,
-144,24,224,48,144,1,12,58,89,133,157,49,140,5,192,57,89,
-0,208,56,146,0,48,32,140,8,0,0,16,0,48,72,140,0,0,0,48,
-0,16,129,128,254,63,36,49,4,9,66,89,0,80,98,176,0,144,
-97,154,8,136,49,89,0,144,113,154,8,136,49,89,224,63,2,53,
-0,0,0,10,0,0,0,0,0,48,24,144,116,228,0,0,0,48,40,144,
-120,228,0,0,1,0,48,140,136,25,56,88,0,208,32,144,26,32,
-1,48,0,48,240,146,4,0,0,32,0,80,49,146,0,48,56,146,4,0,
-0,32,0,0,0,10,0,0,0,0,0,0,0,0,0,208,166,176,25,192,
-156,89,25,57,136,140,0,0,0,0,20,224,158,146,4,78,134,89,
-0,208,185,146,17,1,228,89,50,33,14,55,0,30,200,92,0,0,
-232,140,16,0,229,54,20,1,239,89,142,32,5,50,0,16,229,140,
-48,0,168,140,28,1,165,89,21,22,184,92,8,64,229,51,28,22,
-184,92,2,206,149,89,0,48,176,146,84,0,0,32,23,65,141,89,
-0,48,184,146,96,0,0,32,0,48,128,140,232,186,0,0,18,128,
-181,89,17,28,4,132,0,16,130,176,0,16,130,176,0,16,130,
-176,0,16,130,176,0,16,130,176,0,16,130,176,0,16,130,176,
-0,16,130,176,0,16,130,176,0,16,130,176,0,16,130,176,23,1,
-231,89,0,16,130,176,152,63,7,52,18,96,7,53,0,208,185,144,
-0,224,166,178,212,246,255,8,28,224,150,144,24,224,142,144,
-0,48,128,144,140,228,0,0,17,129,148,89,236,25,148,51,64,
-224,230,144,20,224,142,144,85,5,144,140,0,16,135,144,218,
-153,140,49,40,32,4,53,28,22,128,92,236,253,255,9,0,16,
-135,144,24,32,4,53,40,32,135,144,0,16,140,144,1,72,140,
-89,0,16,140,146,176,249,255,8,24,32,143,144,1,9,132,89,
-144,93,140,140,28,224,158,144,0,80,148,144,4,96,180,144,
-56,224,190,144,0,16,135,146,0,208,148,146,8,200,156,89,28,
-224,158,146,2,204,165,89,0,80,231,140,224,254,255,8,0,0,
-0,0,1,73,206,89,0,0,232,140,8,33,101,54,10,30,184,92,0,
-0,232,140,16,0,189,54,20,193,237,89,0,16,189,140,82,32,5,
-50,151,56,144,140,0,0,0,0,0,48,176,146,84,0,0,32,22,128,
-180,89,0,48,184,146,96,0,0,32,22,224,37,49,8,232,5,90,0,
-16,130,176,4,201,189,89,244,255,255,22,26,224,13,49,0,16,
-130,144,18,224,21,49,0,16,130,144,10,224,29,49,0,16,130,
-144,144,96,7,50,28,224,150,144,24,224,142,144,0,48,128,
-144,140,228,0,0,17,129,148,89,12,0,148,52,2,72,239,89,
-228,248,255,8,64,224,230,144,0,16,135,144,44,32,4,53,28,
-22,128,92,240,252,255,9,0,16,135,144,28,32,4,53,40,32,
-135,144,0,16,140,144,1,72,140,89,0,16,140,146,2,72,239,
-89,176,248,255,8,24,32,143,144,1,9,132,89,144,93,140,140,
-28,224,158,144,0,80,148,144,4,96,180,144,56,224,190,144,0,
-16,135,146,0,208,148,146,8,200,156,89,28,224,158,146,2,
-204,165,89,29,22,184,92,24,255,255,8,0,80,145,152,112,246,
-255,8,0,0,0,0,0,0,0,0,0,0,0,0,0,48,176,146,72,0,0,32,
-0,16,130,176,0,16,130,176,0,16,130,176,76,246,255,8,0,0,
-0,0,0,0,0,0,0,80,149,144,74,0,152,140,84,0,128,140,6,
-213,148,51,32,32,193,176,0,0,224,140,18,1,164,89,0,16,
-214,146,20,57,136,140,0,0,0,0,4,14,133,89,0,16,219,146,
-120,0,216,140,17,1,236,89,0,0,160,140,27,65,239,89,48,
-192,190,52,27,57,144,140,0,0,0,0,27,0,231,89,0,48,176,
-146,48,0,0,32,27,193,189,89,0,48,216,146,96,0,0,32,18,
-128,181,89,0,208,162,144,76,0,0,8,30,224,5,50,0,48,176,
-146,48,0,0,32,23,193,222,89,0,48,184,146,96,0,0,32,23,0,
-231,89,16,32,129,152,128,11,132,90,0,208,162,144,108,0,0,
-18,0,80,180,152,8,96,140,140,3,200,189,89,16,32,129,154,
-2,204,189,89,144,255,6,53,0,208,162,144,40,32,101,54,0,
-208,162,144,120,0,216,140,244,63,7,53,116,95,223,54,0,16,
-219,144,8,32,177,154,44,32,217,146,56,244,255,8,0,0,0,0,
-0,80,134,176,12,9,165,89,1,160,82,140,0,80,134,176,12,9,
-231,89,0,80,134,176,232,63,101,54,0,208,162,144,184,255,
-255,8,20,32,101,54,0,208,162,144,248,63,103,54,46,0,167,
-50,240,255,255,8,0,80,134,176,12,9,231,89,0,80,134,176,1,
-160,82,140,12,9,165,89,0,80,134,176,232,63,101,54,0,208,
-162,144,204,255,255,8,130,139,214,88,48,32,87,51,0,80,134,
-176,0,48,160,140,255,255,255,79,0,80,134,176,153,0,165,88,
-0,80,134,160,0,16,245,146,1,160,82,140,10,30,160,92,0,16,
-214,146,56,0,0,8,28,145,162,89,0,16,214,146,26,32,39,49,
-4,9,231,89,0,80,134,176,14,32,39,49,4,9,231,89,0,80,134,
-176,14,32,23,49,2,9,231,89,0,80,134,152,10,32,15,49,0,
-80,134,144,2,14,165,89,0,48,144,140,255,255,255,79,2,158,
-138,89,0,48,128,140,192,190,0,0,20,65,140,89,146,64,166,
-88,16,64,132,89,24,32,153,144,0,16,4,132,0,16,245,146,0,
-16,245,146,0,16,245,146,0,16,245,146,0,16,245,146,0,16,
-245,146,0,16,245,146,0,16,245,146,0,16,245,146,0,16,245,
-146,4,224,132,136,1,136,82,89,0,16,133,146,0,16,131,144,
-244,225,140,144,16,21,128,88,0,48,136,146,56,0,0,32,2,30,
-144,92,0,16,133,146,0,144,147,146,4,224,132,144,0,48,136,
-140,0,0,0,240,145,0,132,88,50,32,4,50,1,224,123,140,40,
-224,35,49,0,0,120,140,0,48,136,144,120,228,0,0,0,80,148,
-144,1,160,148,140,136,25,128,88,0,80,148,146,0,48,128,146,
-4,0,0,32,240,225,148,144,132,2,136,144,0,168,4,90,132,2,
-152,146,240,225,140,146,52,0,0,21,0,48,144,144,112,228,0,
-0,0,48,128,140,32,192,0,0,0,144,156,144,0,48,136,140,0,
-0,32,0,24,32,241,146,19,64,140,89,0,32,129,146,8,32,137,
-146,104,242,255,8,10,160,140,136,10,224,132,136,52,64,132,
-50,0,48,128,140,192,191,0,0,24,32,145,146,0,32,129,146,
-72,242,255,8,0,0,0,0,0,80,133,144,60,50,4,53,0,48,128,
-140,240,188,0,0,24,32,145,144,0,32,129,146,48,32,153,144,
-10,160,140,136,0,160,228,144,1,25,232,89,0,208,140,146,24,
-0,136,140,6,160,132,128,18,64,140,89,16,160,180,152,1,9,
-132,89,3,224,189,140,24,32,145,146,2,204,189,89,16,32,129,
-154,40,32,225,154,8,32,177,154,216,252,255,8,0,0,0,0,0,
-48,144,144,112,228,0,0,0,144,156,144,212,145,157,53,40,32,
-129,144,108,237,255,9,0,48,128,140,0,178,0,0,0,32,129,
-146,188,241,255,8,0,0,0,0,0,0,0,0,17,22,144,92,0,0,136,
-140,8,3,0,8,0,0,0,0,160,22,0,9,12,0,0,9,232,17,0,8,0,
-0,0,0,128,5,0,9,84,1,0,11,120,3,0,9,196,3,0,8,128,192,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,215,0,0,16,216,0,0,
-48,216,0,0,80,216,0,0,112,216,0,0,144,216,0,0,176,216,0,
-0,208,216,0,0,240,216,0,0,16,217,0,0,48,217,0,0,240,215,
-0,0,145,48,0,90,0,20,32,140,0,0,0,0,0,48,160,140,204,
-192,0,0,20,1,33,89,10,0,0,18,38,32,92,51,0,52,241,133,
-216,215,0,0,31,152,153,89,0,208,236,140,0,16,236,146,0,
-52,129,140,96,194,0,0,0,0,0,10,0,52,161,140,160,194,0,0,
-145,32,5,90,16,57,144,140,192,230,0,0,0,144,188,144,16,
-22,128,92,22,0,0,21,0,52,137,140,240,215,0,0,52,0,0,8,
-0,0,0,0,0,52,161,140,128,194,0,0,38,0,141,61,0,52,161,
-140,128,192,0,0,16,61,169,144,144,192,0,0,0,16,181,144,
-21,0,173,89,22,65,173,89,0,96,141,140,0,52,161,140,240,
-215,0,0,151,32,5,90,0,144,140,146,16,22,128,92,18,0,0,
-21,0,52,185,140,160,194,0,0,48,0,0,8,0,52,161,140,128,
-192,0,0,16,61,169,144,144,192,0,0,0,16,181,144,21,0,173,
-89,22,65,173,89,0,96,173,140,14,64,189,61,0,52,185,140,
-128,194,0,0,23,22,128,92,0,0,0,10,0,0,0,0,0,0,0,0,0,
-0,0,0,0,20,240,140,148,0,0,0,30,22,152,92,0,0,240,140,
-0,30,136,92,0,20,160,140,0,0,0,0,0,48,168,140,220,193,0,
-0,21,1,165,89,0,52,189,140,128,192,0,0,0,0,144,140,0,48,
-176,140,192,230,0,0,0,52,165,140,144,192,0,0,0,208,133,
-144,0,16,173,144,21,192,173,89,16,65,173,89,21,128,172,89,
-0,144,173,146,4,32,173,144,21,192,173,89,16,65,173,89,21,
-128,172,89,4,160,173,146,8,32,173,144,17,208,136,89,145,
-240,2,90,21,192,173,89,16,65,173,89,21,128,172,89,8,160,
-173,146,22,16,179,89,12,32,165,140,180,255,255,22,0,208,4,
-132,0,0,0,10,0,20,240,140,12,0,0,0,30,22,128,92,0,0,
-240,140,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,20,240,
-140,12,0,0,0,30,22,128,92,0,0,240,140,0,16,4,132,0,0,0,
-10,0,0,0,0,0,0,0,0,0,20,240,140,12,0,0,0,30,22,128,92,
-0,0,240,140,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,16,
-22,56,92,180,20,0,11,16,22,40,92,236,20,0,11,5,16,50,89,
-28,0,0,8,12,96,33,146,6,22,128,92,248,22,0,11,4,125,129,
-144,16,0,0,0,0,16,4,134,6,22,128,92,164,22,0,11,12,96,
-161,144,1,9,37,89,216,63,1,62,5,16,130,89,208,22,0,11,5,
-22,128,92,136,22,0,11,4,96,33,144,34,32,1,58,32,32,161,
-144,5,22,128,92,4,96,161,146,176,22,0,11,4,22,128,92,144,
-3,0,9,216,255,255,8,7,22,128,92,44,23,0,11,7,22,128,92,
-140,17,0,8,0,0,0,0,0,0,0,0,10,30,128,92,236,2,0,9,1,
-30,128,92,116,17,0,8,0,20,240,140,132,0,0,0,7,168,4,90,
-0,144,239,140,16,210,153,88,0,0,240,140,24,78,164,89,0,
-16,180,140,8,12,173,89,78,0,0,19,19,32,4,90,7,224,156,
-140,148,67,165,88,28,0,0,18,22,224,4,90,0,144,141,130,1,
-137,148,89,1,160,181,140,240,255,255,21,42,160,60,51,16,
-12,173,89,148,67,165,88,20,22,168,92,15,168,4,90,0,144,
-165,154,8,137,148,89,8,160,181,140,240,255,255,20,24,160,
-4,51,1,168,4,90,0,144,141,130,1,137,148,89,1,160,181,140,
-240,255,255,21,0,80,7,132,0,0,0,10,144,0,128,140,36,19,
-0,11,144,48,0,90,0,16,36,140,16,22,128,92,22,0,0,21,208,
-19,0,11,0,16,132,144,0,0,0,10,0,0,0,0,4,32,244,146,92,
-21,0,11,12,32,241,146,4,16,130,89,80,21,0,11,0,30,128,
-92,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,24,22,40,92,64,
-96,8,140,112,224,207,146,120,224,215,154,4,222,129,89,228,
-18,0,11,144,48,0,90,0,16,36,140,16,22,128,92,30,0,0,21,
-112,19,0,11,0,16,132,144,5,22,192,92,112,224,207,144,120,
-224,215,152,0,0,0,10,138,25,128,88,76,4,0,9,0,16,129,
-146,16,22,64,92,0,0,72,140,8,32,129,146,16,22,80,92,0,0,
-128,140,1,30,88,92,4,32,73,146,12,32,89,146,76,21,0,11,
-4,16,164,89,0,16,133,146,16,22,192,92,28,32,129,140,24,
-32,241,146,138,25,200,88,0,0,208,140,68,224,247,146,4,32,
-205,146,72,224,247,146,160,20,0,11,76,224,247,146,72,224,
-55,152,1,30,128,92,36,32,241,146,40,32,49,154,8,21,0,11,
-52,32,129,146,24,17,0,9,48,32,161,140,144,48,0,90,0,16,
-101,152,16,22,128,92,14,0,0,18,66,0,96,140,8,0,0,8,2,
-30,96,92,138,25,112,88,0,0,120,140,64,32,129,140,96,224,
-247,146,0,16,101,178,80,224,247,146,100,224,247,146,64,20,
-0,11,6,30,144,92,0,144,60,140,84,224,63,146,96,224,55,
-152,80,224,151,152,2,30,128,92,72,32,49,154,80,32,145,154,
-156,20,0,11,88,32,129,146,172,16,0,9,144,48,0,90,0,0,
-160,140,16,22,128,92,10,0,0,21,138,25,160,88,92,32,161,
-146,96,32,241,146,100,32,129,140,240,19,0,11,236,17,0,11,
-8,20,0,11,228,17,0,11,4,32,164,144,32,32,161,146,248,17,
-0,11,68,32,129,146,240,17,0,11,36,32,132,140,104,32,129,
-146,196,17,0,11,16,22,32,92,220,17,0,11,72,32,132,140,4,
-32,129,146,176,17,0,11,12,20,0,11,0,30,128,92,5,22,192,
-92,112,224,207,144,120,224,215,152,0,0,0,10,0,0,0,0,0,0,
-0,0,0,0,0,0,5,222,128,89,100,17,0,11,18,32,4,61,3,30,
-128,92,0,0,0,10,0,0,0,0,48,32,164,140,1,30,136,92,0,80,
-148,140,0,16,244,146,8,32,164,146,16,32,148,146,0,30,128,
-92,0,0,0,10,0,0,0,0,0,0,0,0,48,198,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,16,72,8,89,16,48,3,90,0,20,136,140,0,0,0,
-0,0,48,160,140,80,198,0,0,20,65,140,89,70,0,0,17,2,14,
-172,89,0,116,180,140,48,198,0,0,0,144,189,144,21,124,164,
-144,144,192,0,0,0,116,173,140,192,230,0,0,0,80,141,144,
-20,128,165,89,23,1,165,89,0,32,165,140,0,80,165,146,0,80,
-4,134,0,30,128,92,0,0,0,10,0,116,244,133,216,215,0,0,31,
-152,145,89,0,144,156,140,0,16,156,146,1,25,128,89,0,0,0,
-10,0,0,0,0,16,22,32,92,188,0,0,9,16,32,129,144,20,15,0,
-9,24,32,129,144,10,32,4,58,152,1,0,9,8,32,129,144,18,32,
-4,58,12,32,161,144,10,32,29,55,68,7,0,9,28,32,161,144,
-14,32,5,58,4,16,135,89,188,18,0,11,152,16,0,11,110,0,36,
-58,144,16,0,11,36,32,132,140,98,0,36,58,132,16,0,11,72,
-32,132,140,30,0,36,61,80,0,0,8,0,0,0,0,32,32,161,144,0,
-80,165,146,0,7,0,9,52,0,0,8,64,16,0,11,92,18,0,11,56,
-16,0,11,16,16,169,89,24,0,0,8,0,0,0,0,0,80,133,144,214,
-31,129,58,0,80,165,144,32,32,173,140,0,80,165,144,236,63,
-5,61,16,16,0,11,108,18,0,11,0,30,128,92,0,0,0,10,0,0,
-0,0,0,0,0,0,144,48,0,90,0,16,36,140,0,30,48,92,22,0,0,
-21,240,0,0,9,0,30,128,92,0,0,0,10,0,0,0,0,12,32,164,
-144,131,0,232,140,148,64,167,88,30,32,5,61,40,16,0,11,9,
-30,232,92,0,80,159,140,0,16,156,146,1,25,128,89,0,0,0,
-10,16,16,135,89,204,17,0,11,4,16,42,89,0,80,137,144,134,
-96,4,58,0,16,145,144,126,64,148,58,12,32,161,144,9,47,5,
-90,16,32,129,144,16,22,128,92,54,0,0,16,17,129,148,89,
-196,14,0,9,0,16,161,144,0,80,169,144,21,1,165,89,58,0,
-133,58,12,32,161,144,1,25,48,89,133,9,165,88,12,32,161,
-146,36,0,0,8,0,0,0,0,0,16,137,144,4,32,145,144,40,17,0,
-11,16,17,136,89,16,32,129,144,1,30,144,92,16,14,0,9,12,
-32,161,144,8,32,169,144,4,32,241,146,9,14,165,88,12,32,
-161,146,0,16,169,146,4,16,135,89,120,17,0,11,6,22,128,92,
-0,0,0,10,0,0,0,0,32,14,0,8,0,0,0,0,0,0,0,0,0,0,0,0,
-248,14,0,11,20,17,0,11,240,14,0,11,4,32,36,144,132,48,0,
-90,0,0,40,140,16,22,128,92,34,0,0,18,4,22,128,92,220,
-254,255,9,1,25,144,89,10,128,132,58,5,80,40,89,32,32,33,
-144,232,63,1,61,188,14,0,11,24,17,0,11,5,22,128,92,0,0,
-0,10,0,0,0,0,18,32,4,61,0,30,128,92,0,0,0,10,0,0,0,0,
-0,48,32,144,240,230,0,0,16,208,131,89,132,48,0,90,16,210,
-43,88,0,0,168,140,30,0,0,18,16,0,0,8,4,22,168,92,4,32,
-33,144,14,32,1,58,12,32,161,144,240,95,161,52,94,32,1,58,
-149,48,0,90,4,32,161,144,16,22,128,92,22,0,0,21,0,48,
-160,146,240,230,0,0,12,0,0,8,0,0,0,0,4,96,165,146,12,
-32,169,144,32,96,161,140,0,48,144,140,255,255,255,255,18,
-22,152,92,20,96,5,90,4,32,153,146,16,22,128,92,14,0,0,
-17,4,22,128,93,76,4,0,9,4,16,132,89,0,0,0,10,0,48,168,
-144,244,230,0,0,218,96,5,58,4,96,165,144,0,48,152,140,
-255,255,255,255,202,192,164,58,12,96,165,144,20,65,41,89,
-0,80,129,140,120,11,0,9,6,33,4,58,0,48,144,140,255,255,
-255,255,250,128,132,58,0,48,32,144,240,230,0,0,0,48,160,
-144,244,230,0,0,132,48,0,90,0,0,168,140,16,22,128,92,26,
-0,0,18,22,0,37,58,4,22,168,92,4,32,33,144,10,32,1,58,
-244,31,37,61,34,32,1,61,244,13,0,11,31,216,145,89,0,144,
-156,140,0,16,156,146,4,30,128,92,72,252,255,9,216,254,255,
-8,149,48,0,90,4,32,161,144,16,22,128,92,22,0,0,21,0,48,
-160,146,240,230,0,0,12,0,0,8,0,0,0,0,4,96,165,146,0,16,
-161,176,4,16,132,89,0,48,168,140,255,255,255,255,5,192,
-141,89,0,80,188,140,0,16,161,154,8,32,177,146,12,32,137,
-146,0,0,0,10,0,0,0,0,5,16,132,89,188,10,0,9,74,32,4,
-58,0,48,152,140,255,255,255,255,62,192,132,58,12,32,44,
-146,0,48,160,144,244,230,0,0,0,48,64,140,203,173,219,172,
-0,48,72,140,255,255,255,255,5,22,88,92,0,16,68,154,0,48,
-128,146,244,230,0,0,8,32,164,146,16,16,132,89,0,0,0,10,
-52,254,255,8,0,0,0,0,0,0,0,0,0,0,0,0,144,48,0,90,0,
-16,68,140,16,22,128,92,14,0,0,21,17,22,128,92,12,254,255,
-8,18,96,4,61,100,3,0,9,0,30,128,92,0,0,0,10,16,9,44,
-89,0,80,161,144,0,48,152,140,203,173,219,172,26,192,164,
-61,0,52,164,144,244,255,255,255,0,48,232,140,255,255,255,
-255,30,64,167,58,216,12,0,11,31,216,233,89,0,80,159,140,
-0,16,156,146,180,1,0,8,0,0,0,0,12,96,161,144,17,208,139,
-89,17,210,51,88,20,129,57,89,26,224,1,60,5,22,128,92,0,
-144,137,140,124,2,0,9,8,22,128,92,0,0,0,10,0,48,160,144,
-244,230,0,0,50,0,45,61,7,22,128,92,192,9,0,9,6,33,4,58,
-0,48,152,140,255,255,255,255,250,192,132,58,12,96,161,144,
-8,22,128,92,7,0,165,89,12,96,161,146,0,0,0,10,12,96,161,
-144,5,60,37,140,16,0,0,0,4,32,161,144,0,48,232,140,255,
-255,255,255,202,64,167,58,0,48,184,144,240,230,0,0,151,32,
-1,90,0,0,128,140,16,22,128,92,26,0,0,18,22,224,5,58,23,
-22,128,92,4,224,189,144,10,0,185,58,244,255,5,61,26,224,
-5,61,20,12,0,11,31,216,233,89,0,80,159,140,0,16,156,146,
-240,0,0,8,144,48,0,90,4,224,165,144,16,22,128,92,22,0,0,
-21,0,48,160,146,240,230,0,0,12,0,0,8,0,0,0,0,4,32,164,
-146,12,96,161,144,0,48,168,144,244,230,0,0,12,224,181,144,
-149,224,5,90,22,60,165,140,16,0,0,0,12,96,161,146,16,22,
-128,92,18,0,0,21,0,48,40,146,244,230,0,0,16,0,0,8,12,
-96,161,144,5,60,45,146,24,0,0,0,12,96,161,144,26,128,161,
-52,5,22,128,92,0,144,137,140,100,1,0,9,5,16,132,89,0,0,
-0,10,8,96,33,144,14,33,1,58,4,32,161,144,0,48,152,140,
-255,255,255,255,254,192,164,58,12,96,161,144,12,32,169,144,
-21,60,165,140,16,0,0,0,234,128,161,52,0,48,184,144,240,
-230,0,0,151,32,1,90,0,0,128,140,16,22,128,92,26,0,0,18,
-22,224,5,58,23,22,128,92,4,224,189,144,10,0,185,58,244,
-255,5,61,34,224,5,61,36,11,0,11,31,216,153,89,0,208,236,
-140,0,16,236,146,4,30,128,92,120,249,255,9,4,254,255,8,
-12,32,161,144,0,48,168,144,244,230,0,0,12,96,177,144,149,
-96,1,90,22,60,165,140,16,0,0,0,12,32,161,146,16,22,128,
-92,22,0,0,21,0,48,32,146,244,230,0,0,20,0,0,8,0,0,0,0,
-12,96,161,144,5,60,37,146,24,0,0,0,144,48,0,90,4,32,161,
-144,16,22,128,92,18,0,0,21,0,48,160,146,240,230,0,0,8,0,
-0,8,4,32,164,146,0,48,152,140,255,255,255,255,19,22,232,
-92,16,32,129,140,4,32,233,146,7,129,145,89,0,16,138,140,
-212,2,0,11,4,22,128,92,0,144,137,140,84,0,0,9,4,16,132,
-89,0,0,0,10,6,22,128,92,100,251,255,9,144,48,0,90,0,16,
-36,140,16,22,128,92,38,0,0,18,7,129,145,89,0,16,138,140,
-156,2,0,11,8,22,128,92,160,0,0,9,4,22,128,92,0,0,0,10,
-0,0,0,0,48,253,255,8,0,0,0,0,0,0,0,0,0,0,0,0,12,32,
-172,144,32,96,164,140,118,64,165,49,16,124,180,140,16,0,0,
-0,8,160,133,146,0,48,168,144,244,230,0,0,0,48,144,140,
-203,173,219,172,18,22,152,92,0,144,157,146,0,48,144,140,
-255,255,255,255,18,22,152,92,12,32,164,144,4,160,157,146,
-149,32,4,90,16,9,165,89,17,1,165,89,12,160,165,146,12,32,
-140,146,18,0,0,21,0,48,176,146,244,230,0,0,16,0,0,8,12,
-160,165,144,22,60,181,146,24,0,0,0,22,16,132,89,8,0,0,8,
-0,0,0,10,10,32,4,61,0,0,0,10,16,9,140,89,0,80,164,144,
-0,48,232,140,203,173,219,172,34,65,167,61,0,52,164,144,
-244,255,255,255,0,48,152,140,255,255,255,255,14,193,164,61,
-0,48,168,144,240,230,0,0,98,97,5,58,0,48,160,144,244,230,
-0,0,190,0,141,58,12,96,164,144,17,60,133,140,16,0,0,0,4,
-32,164,144,0,48,232,140,255,255,255,255,162,64,167,58,149,
-32,4,90,0,0,144,140,21,22,184,92,26,0,0,18,22,96,5,58,
-23,22,144,92,4,224,189,144,10,0,188,58,244,255,5,61,26,
-224,5,61,28,9,0,11,31,216,233,89,0,80,159,140,0,16,156,
-146,172,0,0,8,12,96,164,144,0,48,168,144,244,230,0,0,12,
-32,180,144,149,32,4,90,22,60,165,140,16,0,0,0,12,96,164,
-146,16,22,128,92,22,0,0,21,0,48,136,146,244,230,0,0,20,
-0,0,8,0,0,0,0,12,96,164,144,17,60,141,146,24,0,0,0,22,
-160,4,61,4,224,165,144,0,48,160,146,240,230,0,0,12,0,0,
-8,4,224,165,144,4,160,164,146,8,96,132,144,150,32,4,58,4,
-32,164,144,0,48,152,140,255,255,255,255,134,192,164,58,0,
-48,184,144,240,230,0,0,22,0,188,58,18,224,5,58,4,224,189,
-144,10,0,188,58,248,255,5,61,30,224,5,61,112,8,0,11,31,
-216,153,89,0,208,236,140,0,16,236,146,4,30,128,92,196,246,
-255,8,12,32,164,144,0,48,168,144,244,230,0,0,12,96,180,
-144,149,96,4,90,22,60,165,140,16,0,0,0,12,32,164,146,16,
-22,128,92,22,0,0,21,0,48,128,146,244,230,0,0,0,0,0,10,
-0,0,0,0,12,32,164,144,16,60,133,146,24,0,0,0,0,0,0,10,
-0,48,160,144,240,230,0,0,0,48,136,146,240,230,0,0,4,96,
-164,146,0,0,0,10,144,64,132,112,14,32,4,61,0,30,128,92,
-0,0,0,10,224,248,255,9,144,48,0,90,0,16,36,140,16,22,
-128,92,22,0,0,18,0,52,148,144,252,255,255,255,0,30,136,
-92,88,243,255,11,4,22,128,92,0,0,0,10,0,20,240,140,220,
-0,0,0,34,162,4,59,16,96,4,90,0,144,239,140,18,64,172,89,
-198,0,0,18,21,33,4,90,17,210,152,88,2,1,0,17,19,96,4,
-90,0,208,180,144,16,210,160,88,4,224,156,140,178,0,0,21,
-16,32,5,90,4,9,165,89,108,0,0,18,8,8,165,89,0,16,140,
-140,22,22,184,92,32,0,240,140,128,139,148,90,130,0,0,18,
-8,136,247,89,0,80,188,130,8,204,189,89,1,96,140,140,232,
-31,141,53,0,208,188,144,146,48,1,90,4,224,156,140,30,132,
-141,93,62,0,0,20,23,22,176,92,0,208,188,144,132,137,148,
-89,0,16,141,146,4,8,165,89,220,255,255,8,132,137,148,89,
-0,208,180,144,4,200,156,89,0,16,141,146,146,48,1,90,4,8,
-165,89,0,144,141,140,228,255,255,19,30,160,4,58,129,137,
-148,89,0,16,141,130,128,168,4,90,1,32,165,140,8,76,140,
-89,236,255,255,21,0,30,240,92,0,80,7,132,0,0,0,10,16,32,
-5,90,0,208,188,144,131,72,140,88,3,78,244,89,128,255,255,
-18,148,67,140,88,16,96,4,90,4,32,165,140,30,132,173,93,0,
-16,140,140,14,0,0,17,23,22,176,92,4,224,156,140,21,22,
-184,92,56,255,255,8,21,210,184,88,23,96,5,90,4,201,157,
-89,18,0,140,89,17,210,160,88,182,0,0,21,17,32,5,90,0,
-208,188,144,4,201,156,89,112,0,0,18,23,22,176,92,32,0,
-240,140,128,139,148,90,134,255,255,18,136,142,181,89,0,116,
-140,140,255,255,255,255,17,32,5,90,0,80,180,130,8,137,247,
-89,224,255,255,21,0,208,180,144,146,48,1,90,0,244,156,140,
-252,255,255,255,30,132,141,93,0,144,189,140,4,9,165,89,54,
-0,0,20,0,208,180,144,132,137,148,89,0,16,141,146,216,255,
-255,8,132,137,148,89,0,208,188,144,4,201,156,89,0,16,141,
-146,146,48,1,90,4,9,165,89,0,208,141,140,228,255,255,19,
-22,191,4,58,136,78,140,89,4,32,165,140,129,9,165,89,148,
-32,4,90,0,16,141,130,136,78,140,89,240,255,255,21,244,254,
-255,8,17,32,5,90,0,208,189,144,131,72,173,88,0,208,180,
-144,3,78,245,89,124,255,255,18,148,67,173,88,17,96,5,90,
-30,132,173,93,16,0,0,20,22,22,184,92,8,0,0,18,4,201,156,
-89,21,22,176,92,48,255,255,8,30,22,232,92,176,254,255,8,
-0,0,0,0,16,72,8,89,0,48,128,140,0,231,0,0,138,25,136,
-88,242,0,232,140,29,48,0,102,36,32,4,62,0,30,32,92,0,48,
-40,140,176,86,0,0,64,224,167,140,0,30,48,92,72,224,247,
-146,0,16,37,154,20,0,0,8,64,224,135,140,0,48,136,140,0,
-231,0,0,24,0,0,9,64,224,135,176,0,48,144,146,208,235,0,
-0,0,0,0,10,0,0,0,0,16,22,64,92,17,22,32,92,4,22,128,
-92,220,1,0,11,0,30,48,92,0,48,56,140,0,235,0,0,0,16,50,
-154,0,16,161,192,128,40,5,90,1,8,44,89,4,64,41,89,164,0,
-0,18,152,0,0,8,0,16,161,192,31,88,152,89,16,192,164,58,
-12,32,77,58,8,32,109,58,16,32,85,61,4,80,32,89,0,16,161,
-192,224,63,5,61,0,16,161,192,100,32,5,58,0,16,170,144,21,
-80,160,89,21,57,32,146,0,235,0,0,0,16,162,146,0,16,161,
-192,56,32,5,58,31,88,144,89,48,128,164,58,44,32,77,58,40,
-32,109,58,36,32,85,58,4,80,32,89,0,16,161,192,24,32,5,
-58,31,88,152,89,16,192,164,58,12,32,77,58,8,32,109,58,
-228,63,85,61,0,16,161,192,12,32,5,58,0,16,241,130,4,80,
-32,89,0,16,161,192,12,32,5,58,0,16,162,144,132,63,149,59,
-0,16,162,144,20,57,240,146,0,235,0,0,0,80,161,192,128,40,
-5,90,0,30,32,92,204,0,0,18,0,48,40,146,80,235,0,0,5,22,
-128,92,236,0,0,11,1,72,41,89,16,64,41,89,0,80,161,192,
-128,40,5,90,1,30,32,92,164,0,0,18,0,48,48,140,84,235,0,
-0,0,144,41,146,5,22,128,92,192,0,0,11,1,72,41,89,16,64,
-41,89,0,80,161,192,128,40,5,90,4,80,32,89,120,0,0,18,4,
-160,41,146,5,22,128,92,156,0,0,11,1,72,41,89,16,64,41,
-89,0,80,161,192,128,40,5,90,4,80,32,89,84,0,0,18,8,160,
-41,146,5,22,128,92,120,0,0,11,1,72,41,89,16,64,41,89,0,
-80,161,192,128,40,5,90,4,80,32,89,48,0,0,18,12,160,41,
-146,5,22,128,92,84,0,0,11,1,72,41,89,16,64,41,89,0,80,
-161,192,6,16,52,89,148,48,0,90,4,80,32,89,8,0,0,18,108,
-63,225,59,0,48,152,140,80,235,0,0,4,57,240,146,80,235,0,
-0,19,22,144,92,8,32,146,146,0,0,0,10,0,0,0,0,0,0,0,0,
-0,0,0,0,0,20,240,140,48,0,0,0,30,22,136,92,0,30,240,92,
-0,16,164,192,0,30,168,92,12,0,0,8,0,16,164,192,21,80,
-168,89,148,48,0,90,16,80,128,89,240,255,255,21,21,22,128,
-92,0,80,4,132,0,0,0,10,0,0,0,0,1,1,232,140,29,48,0,
-102,0,0,0,10,0,0,0,0,0,20,240,140,32,0,0,0,30,22,128,
-92,0,30,240,92,0,48,160,140,80,205,3,0,20,22,168,92,0,
-48,168,146,224,235,0,0,0,16,4,132,0,0,0,10,0,0,0,0,144,
-48,0,90,0,48,168,144,224,235,0,0,12,0,0,21,21,22,128,92,
-0,0,0,10,21,208,163,89,20,210,163,88,0,32,165,140,21,32,
-5,90,20,60,180,140,255,255,255,255,20,0,0,17,16,0,181,52,
-0,48,144,140,79,221,3,0,32,128,180,54,132,2,0,11,12,30,
-144,92,18,22,136,92,0,16,140,146,0,48,128,140,255,255,255,
-255,0,0,0,10,22,80,168,89,12,128,173,51,0,48,168,140,79,
-221,3,0,20,22,128,92,0,48,168,146,224,235,0,0,0,0,0,10,
-0,48,136,140,80,205,3,0,20,64,132,52,1,9,164,89,0,48,
-144,140,79,221,3,0,28,128,164,54,44,2,0,11,12,30,144,92,
-18,22,136,92,0,16,140,146,1,25,128,89,0,0,0,10,0,48,128,
-146,224,235,0,0,0,30,128,92,0,0,0,10,0,0,0,0,0,0,0,0,
-0,0,0,0,234,0,232,140,29,48,0,102,144,48,0,90,16,22,32,
-92,20,0,0,18,228,1,0,11,0,16,36,146,1,25,128,89,0,0,0,
-10,0,30,128,92,0,0,0,10,0,0,0,0,16,72,8,89,64,224,143,
-140,235,0,232,140,29,48,0,102,144,48,0,90,16,22,32,92,20,
-0,0,18,172,1,0,11,0,16,36,146,1,25,128,89,0,0,0,10,64,
-224,135,144,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,16,72,8,
-89,64,224,159,140,233,0,232,140,29,48,0,102,144,48,0,90,
-16,22,32,92,20,0,0,18,108,1,0,11,0,16,36,146,1,25,128,
-89,0,0,0,10,64,224,135,144,0,0,0,10,0,0,0,0,0,0,0,0,
-0,0,0,0,239,0,232,140,29,48,0,102,144,48,0,90,16,22,32,
-92,20,0,0,18,52,1,0,11,0,16,36,146,1,25,128,89,0,0,0,
-10,0,30,128,92,0,0,0,10,0,0,0,0,16,72,8,89,64,224,159,
-140,232,0,232,140,29,48,0,102,144,48,0,90,16,22,32,92,20,
-0,0,18,252,0,0,11,0,16,36,146,1,25,128,89,0,0,0,10,64,
-224,135,144,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,224,253,
-255,8,0,0,0,0,0,0,0,0,0,0,0,0,0,20,240,140,20,0,0,0,
-30,22,136,92,0,30,240,92,0,48,128,140,240,235,0,0,0,80,
-4,132,0,0,0,10,0,20,240,140,20,0,0,0,30,22,136,92,0,30,
-240,92,0,48,128,140,128,236,0,0,0,80,4,132,0,0,0,10,0,
-20,240,140,20,0,0,0,30,22,136,92,0,30,240,92,0,48,128,
-140,240,236,0,0,0,80,4,132,0,0,0,10,0,20,240,140,20,0,
-0,0,30,22,136,92,0,30,240,92,0,48,128,140,240,235,0,0,0,
-80,4,132,0,0,0,10,0,20,240,140,20,0,0,0,30,22,136,92,0,
-30,240,92,0,48,128,140,128,236,0,0,0,80,4,132,0,0,0,10,
-0,20,240,140,20,0,0,0,30,22,136,92,0,30,240,92,0,48,128,
-140,240,236,0,0,0,80,4,132,0,0,0,10,0,20,240,140,20,0,
-0,0,30,22,136,92,0,30,240,92,0,48,128,140,240,236,0,0,0,
-80,4,132,0,0,0,10,0,20,240,140,12,0,0,0,30,22,128,92,0,
-30,240,92,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,20,
-240,140,12,0,0,0,30,22,128,92,0,30,240,92,0,16,4,132,0,
-0,0,10,0,0,0,0,0,0,0,0,0,20,240,140,12,0,0,0,30,22,
-128,92,0,30,240,92,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,
-0,0,20,240,140,12,0,0,0,30,22,128,92,0,30,240,92,0,16,
-4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,20,240,140,12,0,0,0,
-30,22,128,92,0,30,240,92,0,16,4,132,0,0,0,10,0,0,0,0,
-0,0,0,0,0,20,240,140,12,0,0,0,30,22,128,92,0,30,240,92,
-0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,20,240,140,12,
-0,0,0,30,22,128,92,0,30,240,92,0,16,4,132,0,0,0,10,0,
-0,0,0,0,0,0,0,0,20,240,140,12,0,0,0,30,22,128,92,0,30,
-240,92,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,20,240,
-140,12,0,0,0,30,22,128,92,0,30,240,92,0,16,4,132,0,0,0,
-10,0,0,0,0,0,0,0,0,0,20,240,140,12,0,0,0,30,22,128,92,
-0,30,240,92,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,20,
-240,140,12,0,0,0,30,22,128,92,0,30,240,92,0,16,4,132,0,
-0,0,10,0,0,0,0,0,0,0,0,0,20,240,140,16,0,0,0,30,22,
-136,92,0,30,240,92,18,22,128,92,0,80,4,132,0,0,0,10,0,
-0,0,0,0,20,240,140,12,0,0,0,30,22,128,92,0,30,240,92,0,
-16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,20,240,140,12,0,
-0,0,30,22,128,92,0,30,240,92,0,16,4,132,0,0,0,10,0,0,
-0,0,0,0,0,0,0,20,240,140,12,0,0,0,30,22,128,92,0,30,
-240,92,0,16,4,132,0,0,0,10,0,0,0,0,0,0,0,0,0,20,240,
-140,12,0,0,0,30,22,128,92,0,30,240,92,0,16,4,132,0,0,0,
-10,0,0,0,0,0,0,0,0,0,20,240,140,12,0,0,0,30,22,136,92,
-0,30,240,92,0,80,4,132,0,0,0,10,0,0,0,0,0,0,0,0,240,
-252,255,8,0,0,0,0,0,0,0,0,0,0,0,0,0,20,240,140,12,0,
-0,0,30,22,128,92,0,30,240,92,0,16,4,132,0,0,0,10,0,0,
-0,0,0,0,0,0,0,20,240,140,20,0,0,0,30,22,136,92,0,30,
-240,92,1,25,168,89,149,2,132,100,0,80,4,132,0,0,0,10,0,
-20,240,140,12,0,0,0,30,22,128,92,0,30,240,92,0,16,4,132,
-0,0,0,10,0,0,0,0,0,0,0,0,144,48,0,90,19,4,32,140,86,
-0,0,20,16,22,40,92,133,16,96,100,66,0,0,16,12,17,101,89,
-140,48,0,90,18,0,0,20,12,70,137,89,0,30,128,92,20,0,0,
-8,12,17,104,89,13,68,137,89,32,32,107,140,13,70,129,89,
-20,78,140,88,12,1,33,89,20,14,33,89,132,67,140,88,0,0,0,
-10,0,30,128,93,248,255,255,8,16,17,40,89,133,16,96,100,
-12,17,101,89,140,48,0,90,18,0,0,20,12,70,137,89,0,30,
-128,92,20,0,0,8,12,17,104,89,13,68,137,89,32,32,107,140,
-13,70,129,89,20,78,140,88,12,1,33,89,20,14,33,89,132,67,
-140,88,159,73,140,88,176,255,255,8,1,78,36,89,0,48,96,
-140,0,0,224,255,4,32,3,90,106,0,0,17,21,12,33,89,10,78,
-44,89,158,73,41,88,31,78,41,88,22,12,100,89,133,3,43,88,
-145,48,0,90,29,4,96,140,38,0,0,20,4,32,3,90,4,1,35,89,
-14,0,0,17,4,68,129,89,0,0,0,10,1,25,128,89,31,14,132,
-88,244,255,255,8,4,32,3,90,4,1,35,89,18,0,0,17,4,68,41,
-89,5,17,128,89,220,255,255,8,31,94,128,89,212,255,255,8,
-0,30,128,92,204,255,255,8,1,78,36,89,0,48,96,140,0,0,
-224,255,4,32,3,90,66,0,0,17,21,12,33,89,11,78,44,89,159,
-73,41,88,21,12,100,89,133,3,43,88,145,48,0,90,38,0,0,20,
-30,4,96,140,4,32,3,90,18,0,0,17,4,1,35,89,4,68,129,89,
-0,0,0,10,1,25,128,89,248,255,255,8,0,30,128,92,240,255,
-255,8,1,78,36,89,0,48,96,140,255,255,223,255,12,32,1,90,
-4,49,0,90,82,0,0,22,21,12,33,89,128,3,96,140,12,1,33,
-89,255,0,96,140,4,32,3,90,46,0,0,19,23,14,33,89,12,78,
-44,89,9,76,41,89,132,67,33,88,29,12,44,89,28,47,4,90,5,
-0,129,91,31,111,4,90,159,15,132,88,0,0,0,10,132,48,0,90,
-48,0,0,20,24,0,0,8,42,0,0,18,0,48,96,140,0,0,224,255,
-4,32,3,90,18,0,0,17,0,48,128,140,0,0,128,127,204,255,
-255,8,1,25,128,89,204,255,255,8,0,30,128,92,188,255,255,
-8,31,12,84,89,31,142,82,89,1,14,36,89,0,48,96,140,255,
-255,255,254,12,32,1,90,4,49,0,90,58,0,0,22,24,12,33,89,
-0,48,96,140,128,252,255,255,12,1,33,89,20,14,33,89,9,14,
-44,89,12,76,41,89,132,67,137,88,29,14,132,89,145,131,138,
-88,0,0,0,10,0,30,128,93,244,255,255,8,250,255,255,18,0,
-48,96,140,0,0,0,255,12,32,1,90,22,0,0,20,0,48,136,140,
-0,0,240,127,0,30,128,92,208,255,255,8,1,25,128,89,1,25,
-136,89,200,255,255,8,15,140,84,89,31,142,82,89,17,142,36,
-89,17,12,33,89,31,111,4,90,90,0,0,16,0,48,96,140,0,60,
-0,0,12,1,33,89,255,7,96,140,4,32,3,90,46,0,0,19,31,78,
-140,88,11,76,60,89,21,78,52,89,20,14,33,89,135,3,137,88,
-10,47,4,90,11,12,132,89,6,0,132,91,138,67,140,88,0,0,0,
-10,34,0,0,17,0,48,136,140,0,0,240,127,0,30,128,92,232,
-255,255,8,144,67,140,88,17,48,0,90,220,255,255,18,1,25,
-128,89,1,25,136,89,212,255,255,8,31,72,84,88,8,0,0,8,31,
-78,84,88,1,78,36,89,0,48,96,140,0,0,224,255,4,32,3,90,
-10,0,0,17,10,22,136,92,0,0,0,10,31,200,156,88,1,78,36,
-89,1,206,44,89,21,94,96,89,4,0,107,89,13,32,3,90,154,1,
-0,22,5,0,107,89,13,32,3,90,142,1,0,22,11,78,60,89,21,
-12,100,89,11,14,52,89,140,195,57,88,159,201,57,88,11,206,
-76,89,21,140,100,89,11,142,68,89,140,67,74,88,159,73,74,
-88,21,12,33,89,21,76,41,89,31,76,84,89,31,142,82,89,4,
-96,1,90,32,0,104,140,52,0,0,20,5,1,97,89,12,96,3,90,16,
-0,0,20,9,22,64,92,0,30,72,92,13,1,99,89,12,4,66,89,12,
-65,107,89,13,70,106,89,12,68,74,89,141,3,66,88,52,0,0,8,
-4,65,97,89,12,96,3,90,16,0,0,20,7,22,48,92,0,30,56,92,
-13,1,99,89,12,132,49,89,12,65,107,89,13,198,105,89,12,
-196,57,89,141,131,49,88,5,22,32,92,17,195,100,88,31,47,3,
-90,62,0,0,18,8,128,49,91,9,192,57,91,150,0,0,16,1,140,
-49,89,31,206,97,89,1,204,57,89,140,131,49,88,1,8,33,89,
-255,7,96,140,4,32,3,90,116,0,0,20,12,22,32,92,0,30,48,
-93,104,0,0,8,8,129,49,91,9,193,57,91,22,0,0,18,0,56,0,
-90,6,17,48,91,7,17,56,91,31,136,82,88,135,16,96,100,32,
-0,0,18,134,16,96,100,102,0,0,16,12,209,103,89,12,134,57,
-89,0,30,48,92,32,32,99,140,28,0,0,8,12,132,105,89,1,76,
-107,89,12,209,103,89,12,198,57,89,12,134,49,89,141,195,57,
-88,12,1,33,89,132,48,0,90,54,0,0,20,10,175,1,90,31,206,
-57,88,11,140,129,89,21,206,105,89,11,204,137,89,20,14,33,
-89,145,3,137,88,13,0,132,91,10,64,140,91,0,0,0,10,0,30,
-128,93,248,255,255,8,0,30,128,92,10,22,136,92,236,255,255,
-8,0,48,96,140,0,0,224,255,12,32,1,90,70,0,0,18,90,0,0,
-20,12,96,1,90,50,0,0,18,78,0,0,20,132,3,108,88,13,48,0,
-90,22,0,0,18,133,131,108,88,13,48,0,90,70,254,255,21,176,
-255,255,8,133,131,108,88,13,48,0,90,50,0,0,18,18,22,128,
-93,156,255,255,8,12,96,1,90,22,0,0,20,146,255,255,17,17,
-195,100,88,140,48,0,90,134,255,255,19,1,25,128,89,1,25,
-136,89,120,255,255,8,145,192,140,88,0,30,128,92,108,255,
-255,8,17,195,28,88,31,204,24,89,31,206,24,89,1,78,36,89,
-1,206,44,89,21,94,96,89,4,0,107,89,13,32,3,90,238,0,0,
-22,5,0,107,89,13,32,3,90,226,0,0,22,11,78,60,89,1,204,
-57,89,10,14,52,89,22,12,108,89,141,195,57,88,158,201,57,
-88,11,206,76,89,11,142,68,89,21,140,108,89,141,67,74,88,
-159,73,74,88,21,12,33,89,21,76,41,89,137,128,81,103,10,
-22,104,92,0,30,96,92,137,0,99,103,13,22,80,92,1,12,106,
-89,0,30,96,92,137,0,99,103,11,64,99,103,0,56,0,90,13,
-129,82,91,0,201,90,91,13,129,82,91,0,201,90,91,31,239,2,
-90,16,0,0,18,10,128,82,91,11,192,90,91,1,9,33,89,255,35,
-33,140,5,1,33,89,254,7,96,140,12,32,1,90,46,0,0,20,10,
-175,2,90,11,140,130,89,21,206,106,89,11,204,138,89,20,78,
-140,88,20,14,33,89,145,3,137,88,13,0,132,91,3,64,140,91,
-0,0,0,10,132,48,0,90,16,0,0,20,1,8,35,89,0,30,80,93,
-200,255,255,8,0,30,32,92,0,30,80,93,188,255,255,8,0,48,
-96,140,0,0,224,255,12,32,1,90,90,0,0,18,94,0,0,20,12,
-96,1,90,66,0,0,18,82,0,0,20,132,3,108,88,13,48,0,90,38,
-0,0,18,133,131,108,88,13,48,0,90,242,254,255,21,0,48,136,
-140,0,0,240,127,0,30,128,92,131,67,140,88,148,255,255,8,
-133,131,108,88,13,48,0,90,26,0,0,18,0,30,128,93,131,67,
-140,88,124,255,255,8,12,96,1,90,210,255,255,17,1,25,128,
-89,1,25,136,89,104,255,255,8,0,0,0,0,0,0,0,0,0,0,0,0,
-17,195,28,88,31,204,24,89,31,206,24,89,1,78,36,89,1,206,
-44,89,21,94,96,89,4,0,107,89,13,32,3,90,214,0,0,22,5,0,
-107,89,13,32,3,90,202,0,0,22,11,78,60,89,11,14,52,89,21,
-12,108,89,141,195,57,88,11,206,76,89,11,142,68,89,21,140,
-108,89,141,67,74,88,159,201,57,88,159,73,74,88,21,12,33,
-89,21,76,41,89,7,64,98,103,6,64,82,103,0,120,0,90,12,
-192,98,91,13,16,104,91,7,0,114,103,10,128,115,91,12,192,
-99,91,13,16,104,91,31,111,3,90,16,0,0,18,12,0,99,91,13,
-64,107,91,1,9,33,89,4,124,33,140,2,252,255,255,254,7,80,
-140,10,32,1,90,46,0,0,20,10,47,3,90,11,12,131,89,21,78,
-83,89,11,76,139,89,20,78,140,88,20,14,33,89,145,3,137,88,
-10,0,132,91,3,64,140,91,0,0,0,10,132,48,0,90,16,0,0,20,
-1,136,34,89,0,30,96,93,200,255,255,8,0,30,32,92,0,30,96,
-93,188,255,255,8,31,204,24,89,31,206,24,89,0,48,96,140,0,
-0,224,255,12,32,1,90,58,0,0,18,70,0,0,20,12,96,1,90,62,
-0,0,20,70,0,0,18,132,3,108,88,13,48,0,90,18,0,0,18,133,
-131,108,88,13,48,0,90,2,255,255,21,0,30,128,93,131,67,
-140,88,148,255,255,8,12,96,1,90,14,0,0,20,5,48,0,90,30,
-0,0,21,1,25,128,89,1,25,136,89,120,255,255,8,132,3,108,
-88,13,48,0,90,238,255,255,18,0,48,136,140,0,0,240,127,
-131,67,140,88,0,30,128,92,88,255,255,8,0,0,0,0,1,78,36,
-89,1,206,52,89,0,48,96,140,0,0,224,255,12,32,1,90,126,0,
-0,22,12,160,1,90,198,0,0,22,132,131,49,88,6,48,0,90,98,
-0,0,18,159,77,100,89,31,78,60,88,16,3,51,88,7,3,59,88,
-0,56,0,90,12,129,49,91,0,201,57,91,159,205,100,89,31,206,
-76,88,18,3,67,88,9,3,75,88,0,56,0,90,12,1,66,91,0,73,
-74,91,135,96,2,90,1,25,128,89,34,0,0,20,1,30,128,92,26,
-0,0,17,6,32,2,90,18,0,0,17,1,25,128,89,10,0,0,20,0,30,
-128,92,0,0,0,10,12,32,1,90,30,0,0,18,3,30,128,92,240,
-255,255,8,1,30,128,92,232,255,255,8,1,25,128,89,224,255,
-255,8,12,160,1,90,230,255,255,20,30,0,0,17,17,195,100,88,
-140,48,0,90,198,255,255,19,31,111,4,90,214,255,255,16,216,
-255,255,8,145,48,0,90,208,255,255,20,196,255,255,8,12,160,
-1,90,182,255,255,20,31,239,4,90,182,255,255,18,184,255,
-255,8,0,0,0,10
-};
-
-int pca200e_microcode_size_4 = sizeof(pca200e_microcode_4);
diff --git a/sbin/atm/ilmid/Makefile b/sbin/atm/ilmid/Makefile
deleted file mode 100644
index 67d9bab..0000000
--- a/sbin/atm/ilmid/Makefile
+++ /dev/null
@@ -1,40 +0,0 @@
-# ===================================
-# HARP | Host ATM Research Platform
-# ===================================
-#
-# This Host ATM Research Platform ("HARP") file (the "Software") is
-# made available by Network Computing Services, Inc. ("NetworkCS")
-# "AS IS". NetworkCS does not provide maintenance, improvements or
-# support of any kind.
-#
-# NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
-# INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
-# SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
-# In no event shall NetworkCS be responsible for any damages, including
-# but not limited to consequential damages, arising from or relating to
-# any use of the Software or related support.
-#
-# Copyright 1994-1998 Network Computing Services, Inc.
-#
-# Copies of this Software may be made, however, the above copyright
-# notice must be reproduced on all copies.
-#
-# @(#) $Id: Makefile,v 1.5 1998/07/10 16:01:58 jpt Exp $
-# $FreeBSD$
-
-PROG= ilmid
-MAN= ilmid.8
-
-.if ${MACHINE_ARCH} == "arm"
-WARNS?= 3
-.else
-WARNS?= 6
-.endif
-
-CFLAGS+= -I${.CURDIR}/../../../sys
-
-DPADD= ${LIBATM}
-LDADD= -latm
-
-.include <bsd.prog.mk>
diff --git a/sbin/atm/ilmid/ilmid.8 b/sbin/atm/ilmid/ilmid.8
deleted file mode 100644
index 8ffa9fe..0000000
--- a/sbin/atm/ilmid/ilmid.8
+++ /dev/null
@@ -1,110 +0,0 @@
-.\"
-.\" ===================================
-.\" HARP | Host ATM Research Platform
-.\" ===================================
-.\"
-.\"
-.\" This Host ATM Research Platform ("HARP") file (the "Software") is
-.\" made available by Network Computing Services, Inc. ("NetworkCS")
-.\" "AS IS". NetworkCS does not provide maintenance, improvements or
-.\" support of any kind.
-.\"
-.\" NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
-.\" INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
-.\" AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
-.\" SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
-.\" In no event shall NetworkCS be responsible for any damages, including
-.\" but not limited to consequential damages, arising from or relating to
-.\" any use of the Software or related support.
-.\"
-.\" Copyright 1994-1998 Network Computing Services, Inc.
-.\"
-.\" Copies of this Software may be made, however, the above copyright
-.\" notice must be reproduced on all copies.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd September 14, 1998
-.Dt ILMID 8
-.Os
-.Sh NAME
-.Nm ilmid
-.Nd "simple ILMI ATM address registration daemon"
-.Sh SYNOPSIS
-.Nm
-.Op Fl d Ar level
-.Op Fl f
-.Op Fl r
-.Sh DESCRIPTION
-The
-.Nm
-utility is a HARP ATM daemon that performs the ILMI ATM address registration
-procedures with an ATM network switch.
-It is normally invoked at boot time
-from the ATM startup script.
-.Pp
-For each ATM interface with a UNI signalling manager attached,
-.Nm
-will open an ILMI PVC (VPI = 0, VCI = 16) and register the interface's
-ATM address with the switch.
-As part of the address registration procedure,
-the ATM switch will notify the endsystem (local host) of the
-.Dq "network prefix"
-portion of the endsystem's ATM address and
-.Nm
-will notify the switch of the endsystem's
-.Dq "user part"
-of its address
-(typically the interface card MAC address).
-.Sh OPTIONS
-.Bl -tag -width indent
-.It Fl d Ar level
-Specify the debug level for optional protocol tracing.
-Messages are
-written to
-.Pa /var/log/ilmid .
-.It Fl f
-Causes
-.Nm
-to run in the foreground.
-.It Fl r
-Causes
-.Nm
-to issue a coldStart TRAP on all ATM interfaces it is able to open and exit.
-.El
-.Sh NOTES
-This daemon does not fully conform to the ATM Forum ILMI specifications.
-In particular, it
-does not make any queries of the network side to ensure
-that the ATM Address table is empty.
-It also does not implement any
-of the ATM Forum MIB that is specified as part of ILMI.
-.Pp
-The
-.Nm
-utility will increment the debug level when it receives a
-.Dv SIGUSR1
-signal and will
-decrement the debug level when it receives a
-.Dv SIGUSR2
-signal.
-.Sh SEE ALSO
-The ATM Forum,
-.%T "ATM User-Network Interface, Version 3.1 (UNI 3.1) Specification"
-for details on the ILMI protocols and address registration
-procedures.
-.Sh COPYRIGHT
-Copyright (c) 1994-1998, Network Computing Services, Inc.
-.Sh AUTHORS
-.An John Cavanaugh ,
-Network Computing Services, Inc.
-.An Mike Spengler ,
-Network Computing Services, Inc.
-.An Joseph Thomas ,
-Network Computing Services, Inc.
-.Sh ACKNOWLEDGMENTS
-This software was developed with the support of the
-Defense Advanced Research Projects Agency (DARPA).
-.Sh BUGS
-Please report any bugs to
-.Aq harp\-bugs@magic.net .
diff --git a/sbin/atm/ilmid/ilmid.c b/sbin/atm/ilmid/ilmid.c
deleted file mode 100644
index 4a1e5ec..0000000
--- a/sbin/atm/ilmid/ilmid.c
+++ /dev/null
@@ -1,2725 +0,0 @@
-/*
- *
- * ===================================
- * HARP | Host ATM Research Platform
- * ===================================
- *
- *
- * This Host ATM Research Platform ("HARP") file (the "Software") is
- * made available by Network Computing Services, Inc. ("NetworkCS")
- * "AS IS". NetworkCS does not provide maintenance, improvements or
- * support of any kind.
- *
- * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
- * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
- * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
- * In no event shall NetworkCS be responsible for any damages, including
- * but not limited to consequential damages, arising from or relating to
- * any use of the Software or related support.
- *
- * Copyright 1994-1998 Network Computing Services, Inc.
- *
- * Copies of this Software may be made, however, the above copyright
- * notice must be reproduced on all copies.
- */
-
-/*
- * User utilities
- * --------------
- *
- * Implement very minimal ILMI address registration.
- *
- * Implement very crude and basic support for "cracking" and
- * "encoding" SNMP PDU's to support ILMI prefix and NSAP address
- * registration. Code is not robust nor is it meant to provide any
- * "real" SNMP support. Much of the code expects predetermined values
- * and will fail if anything else is found. Much of the "encoding" is
- * done with pre-computed PDU's.
- *
- * See "The Simple Book", Marshall T. Rose, particularly chapter 5,
- * for ASN and BER information.
- *
- */
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/sockio.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netatm/port.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sigmgr.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_ioctl.h>
-#include <dev/hfa/fore_aali.h>
-#include <dev/hfa/fore_slave.h>
-#include <dev/hfa/fore_stats.h>
-
-#include <err.h>
-#include <errno.h>
-#include <libatm.h>
-#include <libgen.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <time.h>
-#include <unistd.h>
-#include <ctype.h>
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-#define MAX_LEN 9180
-
-#define MAX_UNITS 8
-
-/*
- * Define some ASN types
- */
-#define ASN_INTEGER 0x02
-#define ASN_OCTET 0x04
-#define ASN_NULL 0x05
-#define ASN_OBJID 0x06
-#define ASN_SEQUENCE 0x30
-#define ASN_IPADDR 0x40
-#define ASN_TIMESTAMP 0x43
-
-static const char *Var_Types[] = {
- "",
- "",
- "ASN_INTEGER",
- "",
- "ASN_OCTET",
- "ASN_NULL",
- "ASN_OBJID"
-};
-
-/*
- * Define SNMP PDU types
- */
-#define PDU_TYPE_GET 0xA0
-#define PDU_TYPE_GETNEXT 0xA1
-#define PDU_TYPE_GETRESP 0xA2
-#define PDU_TYPE_SET 0xA3
-#define PDU_TYPE_TRAP 0xA4
-
-static const char *const PDU_Types[] = {
- "GET REQUEST",
- "GETNEXT REQUEST",
- "GET RESPONSE",
- "SET REQUEST",
- "TRAP",
- " ?? ",
- " ??? "
-};
-
-/*
- * Define TRAP codes
- */
-#define TRAP_COLDSTART 0
-#define TRAP_WARMSTART 1
-#define TRAP_LINKDOWN 2
-#define TRAP_LINKUP 3
-#define TRAP_AUTHFAIL 4
-#define TRAP_EGPLOSS 5
-#define TRAP_ENTERPRISE 6
-
-/*
- * Define SNMP Version numbers
- */
-#define SNMP_VERSION_1 1
-#define SNMP_VERSION_2 2
-
-/*
- * SNMP Error-status values
- */
-#define SNMP_ERR_NOERROR 0
-#define SNMP_ERR_TOOBIG 1
-#define SNMP_ERR_NOSUCHNAME 2
-#define SNMP_ERR_BADVALUE 3
-#define SNMP_ERR_READONLY 4
-#define SNMP_ERR_GENERR 5
-
-/*
- * Max string length for Variable
- */
-#define STRLEN 128
-
-/*
- * Unknown variable
- */
-#define VAR_UNKNOWN -1
-
-/*
- * Define our internal representation of an OBJECT IDENTIFIER
- */
-struct objid {
- int oid[128];
-};
-typedef struct objid Objid;
-
-/*
- * Define a Veriable classso that we can handle multiple GET/SET's
- * per PDU.
- */
-typedef struct variable Variable;
-struct variable {
- Objid oid;
- int type;
- union {
- int ival; /* INTEGER/TIMESTAMP */
- Objid oval; /* OBJID */
- long aval; /* IPADDR */
- char sval[STRLEN]; /* OCTET */
- } var;
- Variable *next;
-};
-
-/*
- * Every SNMP PDU has the first four fields of this header. The only type
- * which doesn't have the last three fields is the TRAP type.
- */
-struct snmp_header {
- int pdulen;
- int version;
- char community[64];
- int pdutype;
-
- /* GET/GETNEXT/GETRESP/SET */
- int reqid;
- int error;
- int erridx;
-
- /* TRAP */
- Objid enterprise;
- int ipaddr;
- int generic_trap;
- int specific_trap;
-
- int varlen;
- Variable *head,
- *tail;
-};
-typedef struct snmp_header Snmp_Header;
-
-Snmp_Header *ColdStart_Header;
-Snmp_Header *PDU_Header;
-
-/*
- * Define some OBJET IDENTIFIERS that we'll try to reply to:
- *
- * sysUpTime: number of time ticks since this deamon came up
- * netpfx_oid: network prefix table
- * unitype: is this a PRIVATE or PUBLIC network link
- * univer: which version of UNI are we running
- * devtype: is this a USER or NODE ATM device
- * setprefix: used when the switch wants to tell us its NSAP prefix
- * foresiggrp: FORE specific Objid we see alot of (being connected to FORE
- * switches...)
- */
-Objid Objids[] = {
-#define SYS_OBJID 0
- {{ 8, 43, 6, 1, 2, 1, 1, 2, 0 }},
-#define UPTIME_OBJID 1
- {{ 8, 43, 6, 1, 2, 1, 1, 3, 0 }},
-#define PORT_OBJID 2
- {{ 12, 43, 6, 1, 4, 1, 353, 2, 1, 1, 1, 1, 0 }},
-#define IPNM_OBJID 3
- {{ 10, 43, 6, 1, 4, 1, 353, 2, 1, 2, 0 }},
-#define LAYER_OBJID 4
- {{ 12, 43, 6, 1, 4, 1, 353, 2, 2, 1, 1, 1, 0 }},
-#define MAXVCC_OBJID 5
- {{ 12, 43, 6, 1, 4, 1, 353, 2, 2, 1, 1, 3, 0 }},
-#define UNITYPE_OBJID 6
- {{ 12, 43, 6, 1, 4, 1, 353, 2, 2, 1, 1, 8, 0 }},
-#define UNIVER_OBJID 7
- {{ 12, 43, 6, 1, 4, 1, 353, 2, 2, 1, 1, 9, 0 }},
-#define DEVTYPE_OBJID 8
- {{ 12, 43, 6, 1, 4, 1, 353, 2, 2, 1, 1, 10, 0 }},
-#define ADDRESS_OBJID 9
- {{ 8, 43, 6, 1, 4, 1, 353, 2, 6 }},
-#define NETPFX_OBJID 10
- {{ 9, 43, 6, 1, 4, 1, 353, 2, 7, 1 }},
-#define MY_OBJID 11
- {{ 7, 43, 6, 1, 4, 1, 9999, 1 }},
-#define SETPFX_OBJID 12 /* ATM Forum says 1=valid, 2=invalid, not 0! */
- {{ 12, 43, 6, 1, 4, 1, 353, 2, 7, 1, 1, 3, 0 }},
-#define ENTERPRISE_OBJID 13
- {{ 8, 43, 6, 1, 4, 1, 3, 1, 1 }},
-#define ATMF_PORTID 14
- {{ 10, 43, 6, 1, 4, 1, 353, 2, 1, 4, 0 }},
-#define ATMF_SYSID 15
- {{ 12, 43, 6, 1, 4, 1, 353, 2, 1, 1, 1, 8, 0 }},
-#define MADGE_OBJECT1 16 /* I don't have a clue ... -RH */
- {{ 9, 43, 6, 1, 4, 1, 353, 2, 7, 99 }},
-};
-
-#define NUM_OIDS (sizeof(Objids)/sizeof(Objid))
-
-#define UNIVER_UNI20 1
-#define UNIVER_UNI30 2
-#define UNIVER_UNI31 3
-#define UNIVER_UNI40 4
-#define UNIVER_UNKNOWN 5
-
-#define UNITYPE_PUBLIC 1
-#define UNITYPE_PRIVATE 2
-
-#define DEVTYPE_USER 1
-#define DEVTYPE_NODE 2
-
-/* For print_pdu() */
-#define PDU_SEND 1
-#define PDU_RECV 2
-
-/*
- * ILMI protocol states
- */
-enum ilmi_states {
- ILMI_UNKNOWN, /* Uninitialized */
- ILMI_COLDSTART, /* We need to send a COLD_START trap */
- ILMI_INIT, /* Ensure that switch has reset */
- ILMI_REG, /* Looking for SET message */
- ILMI_RUNNING /* Normal processing */
-};
-
-static const char *ILMI_State[] = {
- "UNKNOWN",
- "COLDSTART",
- "INIT",
- "REG",
- "RUNNING"
-};
-
-/*
- * Our (incrementing) Request ID
- */
-int Req_ID;
-
-/*
- * Temporary buffer for building response packets. Should help ensure
- * that we aren't accidently overwriting some other memory.
- */
-u_char Resp_Buf[1024];
-
-/*
- * Copy the reponse into a buffer we can modify without
- * changing the original...
- */
-#define COPY_RESP(resp) \
- bcopy ( (resp), Resp_Buf, (resp)[0] + 1 )
-
-int NUnits;
-
-/*
- * fd for units which have seen a coldStart TRAP and are now exchaning SNMP requests
- */
-int ilmi_fd[MAX_UNITS + 1];
-/*
- * enum ilmi_states for this unit
- */
-int ilmi_state[MAX_UNITS + 1];
-/*
- * Local copy for HARP physical configuration information
- */
-struct air_cfg_rsp Cfg[MAX_UNITS + 1];
-/*
- * Local copy for HARP interface configuration information
- */
-struct air_int_rsp Intf[MAX_UNITS + 1];
-
-/*
- * addressEntry table
- */
-Objid addressEntry[MAX_UNITS + 1];
-
-/*
- * When this daemon started
- */
-struct timeval starttime;
-
-int Debug_Level = 0;
-int foregnd = 0; /* run in the foreground? */
-
-char *progname;
-char hostname[80];
-
- /* File to write debug messages to */
-#define LOG_FILE "/var/log/ilmid"
-FILE *Log; /* File descriptor for log messages */
-
-static const char *Months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-
-/*
- * function declarations
- */
-static void write_timestamp (void);
-static void hexdump (FILE *, u_int8_t *, int, char *);
-static int asn_get_pdu_len (u_char **, int *);
-static int asn_get_encoded (u_char **, int *);
-static int asn_get_int (u_char **, int *);
-static void asn_set_int (u_char **, int);
-static void print_objid (Objid *);
-static void asn_get_objid (u_char **, Objid *, int *);
-static int asn_put_objid (u_char **, Objid *);
-static void asn_get_octet (u_char **, char *, int *);
-static void print_header (Snmp_Header *);
-static void parse_oids (Snmp_Header *, u_char **);
-static int oid_cmp (Objid *, Objid *);
-static int oid_ncmp (Objid *, Objid *, int);
-static int find_var (Variable *);
-static int get_ticks (void);
-static void build_pdu (Snmp_Header *, int);
-static void free_pdu (Snmp_Header *);
-static void print_pdu (int, int, Snmp_Header *, int, u_char *);
-static void send_resp (int, Snmp_Header *, u_char *);
-static void init_ilmi (void);
-static void ilmi_open (void);
-static void get_local_ip (int, long *);
-static void set_prefix (Objid *, Snmp_Header *, int);
-static void set_address (Snmp_Header *, int);
-static void process_get (Snmp_Header *, int);
-static int lmi_object_find (Variable *);
-static int lmi_rcvcmd_getnext(Snmp_Header *, int);
-static int lmi_rcvcmd_trap (Snmp_Header *, int);
-static void ilmi_do_state (void);
-static void Increment_DL (int);
-static void Decrement_DL (int);
-
-static Snmp_Header * asn_get_header (u_char **);
-static Snmp_Header * build_cold_start (void);
-static Snmp_Header * build_generic_header (void);
-
-/*
- * Write a syslog() style timestamp
- *
- * Write a syslog() style timestamp with month, day, time and hostname
- * to the log file.
- *
- * Arguments:
- * none
- *
- * Returns:
- * none
- *
- */
-static void
-write_timestamp (void)
-{
- time_t clk;
- struct tm *tm;
-
- clk = time ( (time_t)NULL );
- tm = localtime ( &clk );
-
- if ( Log && Debug_Level > 1 )
- if ( Log != stderr )
- fprintf ( Log, "%.3s %2d %.2d:%.2d:%.2d %s: ",
- Months[tm->tm_mon], tm->tm_mday, tm->tm_hour, tm->tm_min,
- tm->tm_sec, hostname );
-
- return;
-
-}
-
-/*
- * Utility to pretty print buffer as hex dumps
- *
- * Arguments:
- * out - file handle
- * ptr - buffer pointer
- * len - length to pretty print
- * desc - output header
- *
- * Returns:
- * none
- *
- */
-static void
-hexdump (out, ptr, len, desc)
- FILE * out;
- u_int8_t * ptr;
- int len;
- char * desc;
-{
- char line[17];
- int i, j;
-
- if (out == NULL)
- out = stdout;
-
- if (desc != NULL)
- fprintf(out, "[ %s (%d bytes)]\n", desc, len);
-
- bzero(line, sizeof(line));
-
- for (i = 0, j = 0; i < len; i++) {
-
- if (j == 0) fprintf(out, "%04x: ", i);
- if (j == 8) fprintf(out, "| ");
-
- fprintf(out, "%02x ", ptr[i]);
- line[j] = isalnum(ptr[i]) ? ptr[i] : '.' ;
- if (j == 15) {
- fprintf(out, " |%16s|\n", line);
- bzero(line, sizeof(line));
- j = 0;
- } else
- j++;
- }
-
- if (j != 0) {
- if (j <= 8) fprintf(out, " ");
- for (; j < 16; j++) fprintf(out, " ");
- fprintf(out, " |%-16s|\n", line);
- }
- fflush(out);
-
- return;
-}
-
-/*
- * Get lengths from PDU encodings
- *
- * Lengths are sometimes encoded as a single byte if the length
- * is less the 127 but are more commonly encoded as one byte with
- * the high bit set and the lower seven bits indicating the nuber
- * of bytes which make up the length value. Trailing data is (to my
- * knowledge) not 7-bit encoded.
- *
- * Arguments:
- * bufp - pointer to buffer pointer
- * plen - pointer to PDU length or NULL if not a concern
- *
- * Returns:
- * bufp - updated buffer pointer
- * plen - (possibly) adjusted pdu length
- * <len> - decoded length
- *
- */
-static int
-asn_get_pdu_len (u_char **bufp, int *plen)
-{
- u_char *bp = *bufp;
- int len = 0;
- int i, b;
-
- b = *bp++;
- if ( plen )
- (*plen)--;
- if ( b & 0x80 ) {
- for ( i = 0; i < (b & ~0x80); i++ ) {
- len = len * 256 + *bp++;
- if ( plen )
- (*plen)--;
- }
- } else
- len = b;
-
- *bufp = bp;
- return ( len );
-}
-
-/*
- * Get an 7-bit encoded value.
- *
- * Get a value which is represented using a 7-bit encoding. The last
- * byte in the stream has the high-bit clear.
- *
- * Arguments:
- * bufp - pointer to the buffer pointer
- * len - pointer to the buffer length
- *
- * Returns:
- * bufp - updated buffer pointer
- * len - updated buffer length
- * <val> - value encoding represented
- *
- */
-static int
-asn_get_encoded (u_char **bufp, int *len)
-{
- u_char *bp = *bufp;
- int val = 0;
- int l = *len;
-
- /*
- * Keep going while high bit is set
- */
- do {
- /*
- * Each byte can represent 7 bits
- */
- val = ( val << 7 ) + ( *bp & ~0x80 );
- l--;
- } while ( *bp++ & 0x80 );
-
- *bufp = bp; /* update buffer pointer */
- *len = l; /* update buffer length */
-
- return ( val );
-}
-
-/*
- * Get a BER encoded integer
- *
- * Intergers are encoded as one byte length followed by <length> data bytes
- *
- * Arguments:
- * bufp - pointer to the buffer pointer
- * plen - pointer to PDU length or NULL if not a concern
- *
- * Returns:
- * bufp - updated buffer pointer
- * plen - (possibly) updated PDU length
- * <val> - value of encoded integer
- *
- */
-static int
-asn_get_int (u_char **bufp, int *plen)
-{
- int i;
- int len;
- int v = 0;
- u_char *bp = *bufp;
-
- len = *bp++;
- if ( plen )
- (*plen)--;
- for ( i = 0; i < len; i++ ) {
- v = (v * 256) + *bp++;
- if ( plen )
- (*plen)--;
- }
- *bufp = bp;
- return ( v );
-}
-
-/*
- * Set a BER encoded integer
- *
- * Arguments:
- * bufp - pointer to buffer pointer where we are to set int in
- * val - integer value to set
- *
- * Returns:
- * none
- * <bufp> - updated buffer pointer
- *
- */
-static void
-asn_set_int (u_char **bufp, int val)
-{
- union {
- int i;
- u_char c[4];
- } u;
- int len = sizeof(int);
- size_t i = 0;
- u_char *bp = *bufp;
-
- /* Check for special case where val == 0 */
- if ( val == 0 ) {
- *bp++ = 1;
- *bp++ = 0;
- *bufp = bp;
- return;
- }
-
- u.i = htonl ( val );
-
- while ( u.c[i] == 0 && i++ < sizeof(int) )
- len--;
-
- if ( u.c[i] > 0x7f ) {
- i--;
- len++;
- }
-
- *bp++ = len;
- bcopy ( (caddr_t)&u.c[sizeof(int)-len], bp, len );
- bp += len;
- *bufp = bp;
-
- return;
-}
-
-/*
- * Utility to print an object identifier.
- *
- * Arguments:
- * objid - pointer to objid representation
- *
- * Returns:
- * none
- *
- */
-static void
-print_objid (Objid *objid)
-{
- int i;
-
- /*
- * First oid coded as 40 * X + Y
- */
- if ( Log ) {
- write_timestamp();
- fprintf ( Log, ".%d.%d", objid->oid[1] / 40,
- objid->oid[1] % 40 );
- }
- for ( i = 2; i <= objid->oid[0]; i++ )
- if ( Log )
- fprintf ( Log, ".%d", objid->oid[i] );
- if ( Log )
- fprintf ( Log, "\n" );
-
- return;
-}
-
-/*
- * Get Object Identifier
- *
- * Arguments:
- * bufp - pointer to buffer pointer
- * objid - pointer to objid buffer
- * plen - pointer to PDU length or NULL of not a concern
- *
- * Returns:
- * bufp - updated buffer pointer
- * objid - internal representation of encoded objid
- * plen - (possibly) adjusted PDU length
- *
- */
-static void
-asn_get_objid (u_char **bufp, Objid *objid, int *plen)
-{
- int len;
- u_char *bp = *bufp;
- int *ip = (int *)objid + 1; /* First byte will contain length */
- int oidlen = 0;
-
- len = *bp++;
- if ( plen )
- (*plen)--;
- while ( len ) {
- *ip++ = asn_get_encoded ( &bp, &len );
- if ( plen )
- (*plen)--;
- oidlen++;
- }
- objid->oid[0] = oidlen;
- *bufp = bp;
-
- return;
-}
-
-/*
- * Put OBJID - assumes elements <= 16383 for two byte coding
- *
- */
-static int
-asn_put_objid (u_char **bufp, Objid *objid)
-{
- int len = 0;
- u_char *bp = *bufp;
- u_char *cpp;
- int i;
-
- cpp = bp;
- *bp++ = objid->oid[0];
- len++;
- for ( i = 1; i <= objid->oid[0]; i++ ) {
- u_int c = objid->oid[i];
-
- while ( c > 127 ) {
- *bp++ = ( ( c >> 7 ) & 0x7f ) | 0x80;
- len++;
- c &= 0x7f; /* XXX - assumption of two bytes */
- (*cpp)++;
- }
- *bp++ = c;
- len++;
- }
-
- *bufp = bp;
- return ( len );
-
-}
-
-/*
- * Get OCTET STRING
- *
- * Octet strings are encoded as a 7-bit encoded length followed by <len>
- * data bytes;
- *
- * Arguments:
- * bufp - pointer to buffer pointer
- * octet - pointer to octet buffer
- * plen - pointer to PDU length
- *
- * Returns:
- * bufp - updated buffer pointer
- * octet - encoded Octet String
- * plen - (possibly) adjusted PDU length
- *
- */
-static void
-asn_get_octet (u_char **bufp, char *octet, int *plen)
-{
- u_char *bp = *bufp;
- int i = 0;
- int len = 0;
-
- /*
- * &i is really a dummy value here as we don't keep track
- * of the ongoing buffer length
- */
- len = asn_get_encoded ( &bp, &i );
-
- for ( i = 0; i < len; i++ ) {
- *octet++ = *bp++;
- if ( plen )
- (*plen)--;
- }
-
- *bufp = bp;
-
- return;
-
-}
-
-/*
- * Utility to print SNMP PDU header information
- *
- * Arguments:
- * Hdr - pointer to internal SNMP header structure
- *
- * Returns:
- * none
- *
- */
-static void
-print_header (Snmp_Header *Hdr)
-{
- Variable *var;
-
- if ( Log ) {
- write_timestamp();
- fprintf(Log,
- " PDU Type: 0x%x (%s)\n"
- " PDU len: %d\n"
- " Version: %d\n"
- " Community: \"%s\"\n",
- Hdr->pdutype, PDU_Types[Hdr->pdutype & 7],
- Hdr->pdulen,
- Hdr->version + 1,
- Hdr->community);
-
- if (Hdr->pdutype != PDU_TYPE_TRAP) {
- write_timestamp();
- fprintf(Log,
- " Req Id: 0x%x\n"
- " Error: %d\n"
- " Error Index: %d\n",
- Hdr->reqid,
- Hdr->error,
- Hdr->erridx);
- }
- }
-
- var = Hdr->head;
- while ( var ) {
- if ( Log ) {
- write_timestamp();
- fprintf ( Log, "Variable Type: %d", var->type );
- if ( Var_Types[var->type] )
- fprintf ( Log, " (%s)", Var_Types[var->type] );
- fprintf ( Log, "\n Object: ");
- print_objid ( &var->oid );
- fprintf ( Log, " Value: ");
- switch ( var->type ) {
- case ASN_INTEGER:
- fprintf ( Log, "%d (0x%x)\n", var->var.ival, var->var.ival );
- break;
- case ASN_NULL:
- fprintf ( Log, "NULL" );
- break;
- default:
- fprintf ( Log, "[0x%x]", var->type );
- break;
- }
- fprintf ( Log, "\n" );
- }
- var = var->next;
- }
-
- return;
-
-}
-
-/*
- * Pull OID's from GET/SET message
- *
- * Arguments:
- * h - pointer to Snmp_Header
- * bp - pointer to input PDU
- *
- * Returns:
- * none
- *
- */
-static void
-parse_oids (Snmp_Header *h, u_char **bp)
-{
- int len = h->varlen;
- int sublen;
- Variable *var;
- u_char *bufp = *bp;
-
- while ( len > 0 ) {
- if ( *bufp++ == ASN_SEQUENCE ) {
- len--;
-
- /* Create new Variable instance */
- if ( ( var = (Variable *)malloc(sizeof(Variable)) ) == NULL )
- {
- *bp = bufp;
- return;
- }
- bzero(var, sizeof(Variable));
- /* Link to tail */
- if ( h->tail )
- h->tail->next = var;
- /* Set head iff NULL */
- if ( h->head == NULL ) {
- h->head = var;
- }
- /* Adjust tail */
- h->tail = var;
-
- /* Get length of variable sequence */
- sublen = asn_get_pdu_len ( &bufp, &len );
- /* Should be OBJID type */
- if ( *bufp++ != ASN_OBJID ) {
- *bp = bufp;
- return;
- }
- asn_get_objid ( (u_char **)&bufp, &var->oid, &len );
- var->type = *bufp++;
- len--;
- switch ( var->type ) {
- case ASN_INTEGER:
- var->var.ival = asn_get_int ( &bufp, &len );
- break;
- case ASN_NULL:
- bufp++;
- len--;
- break;
- case ASN_OBJID:
- asn_get_objid ( &bufp, &var->var.oval, &len );
- break;
- case ASN_OCTET:
- asn_get_octet ( &bufp, var->var.sval, &len );
- break;
- default:
- if ( Log ) {
- write_timestamp();
- fprintf ( Log, "Unknown variable type: %d\n",
- var->type );
- }
- break;
- }
- var->next = NULL;
- } else
- break;
- }
-
- *bp = bufp;
- return;
-}
-
-/*
- * Crack the SNMP header
- *
- * Pull the PDU length, SNMP version, SNMP community and PDU type.
- * If present, also pull out the Request ID, Error status, and Error
- * index values.
- *
- * Arguments:
- * bufp - pointer to buffer pointer
- *
- * Returns:
- * bufp - updated buffer pointer
- * - generated SNMP header
- *
- */
-static Snmp_Header *
-asn_get_header (u_char **bufp)
-{
- Snmp_Header *h;
- u_char *bp = *bufp;
- int len = 0;
- int dummy = 0;
-
- /*
- * Allocate memory to hold the SNMP header
- */
- if ( ( h = (Snmp_Header *)malloc(sizeof(Snmp_Header)) ) == NULL )
- return ( (Snmp_Header *)NULL );
-
- /*
- * Ensure that we wipe the slate clean
- */
- bzero(h, sizeof(Snmp_Header));
-
- /*
- * PDU has to start as SEQUENCE OF
- */
- if ( *bp++ != ASN_SEQUENCE ) /* Class == Universial, f == 1, tag == SEQUENCE */
- return ( (Snmp_Header *)NULL );
-
- /*
- * Get the length of remaining PDU data
- */
- h->pdulen = asn_get_pdu_len ( &bp, NULL );
-
- /*
- * We expect to find an integer encoding Version-1
- */
- if ( *bp++ != ASN_INTEGER ) {
- return ( (Snmp_Header *)NULL );
- }
- h->version = asn_get_int ( &bp, NULL );
-
- /*
- * After the version, we need the community name
- */
- if ( *bp++ != ASN_OCTET ) {
- return ( (Snmp_Header *)NULL );
- }
- asn_get_octet ( &bp, h->community, NULL );
-
- /*
- * Single byte PDU type
- */
- h->pdutype = *bp++;
-
- /*
- * If this isn't a TRAP PDU, then look for the rest of the header
- */
- if ( h->pdutype != PDU_TYPE_TRAP ) { /* TRAP uses different format */
-
- (void) asn_get_pdu_len ( &bp, &dummy );
-
- /* Request ID */
- if ( *bp++ != ASN_INTEGER ) {
- free( h );
- return ( (Snmp_Header *)NULL );
- }
- h->reqid = asn_get_int ( &bp, NULL );
-
- /* Error Status */
- if ( *bp++ != ASN_INTEGER ) {
- free ( h );
- return ( (Snmp_Header *)NULL );
- }
- h->error = asn_get_int ( &bp, NULL );
-
- /* Error Index */
- if ( *bp++ != ASN_INTEGER ) {
- free ( h );
- return ( (Snmp_Header *)NULL );
- }
- h->erridx = asn_get_int ( &bp, NULL );
-
- /* Sequence of... */
- if ( *bp++ != ASN_SEQUENCE ) {
- free ( h );
- return ( (Snmp_Header *)NULL );
- }
- h->varlen = ( asn_get_pdu_len ( &bp, &len ) - 1 );
- h->varlen += ( len - 1 );
-
- parse_oids ( h, &bp );
- }
-
- *bufp = bp;
-
- return ( h );
-
-}
-
-/*
- * Compare two internal OID representations
- *
- * Arguments:
- * oid1 - Internal Object Identifier
- * oid2 - Internal Object Identifier
- *
- * Returns:
- * 0 - Objid's match
- * 1 - Objid's don't match
- *
- */
-static int
-oid_cmp (Objid *oid1, Objid *oid2)
-{
- int i;
- int len;
-
- /*
- * Compare lengths
- */
- if ( !(oid1->oid[0] == oid2->oid[0] ) )
- /* Different lengths */
- return ( 1 );
-
- len = oid1->oid[0];
-
- /*
- * value by value compare
- */
- for ( i = 1; i <= len; i++ ) {
- if ( !(oid1->oid[i] == oid2->oid[i]) )
- /* values don't match */
- return ( 1 );
- }
-
- /* Objid's are identical */
- return ( 0 );
-}
-
-/*
- * Compare two internal OID representations
- *
- * Arguments:
- * oid1 - Internal Object Identifier
- * oid2 - Internal Object Identifier
- * len - Length of OID to compare
- *
- * Returns:
- * 0 - Objid's match
- * 1 - Objid's don't match
- *
- */
-static int
-oid_ncmp (Objid *oid1, Objid *oid2, int len)
-{
- int i;
-
- /*
- * value by value compare
- */
- for ( i = 1; i <= len; i++ ) {
- if ( !(oid1->oid[i] == oid2->oid[i]) )
- /* values don't match */
- return ( 1 );
- }
-
- /* Objid's are identical */
- return ( 0 );
-}
-
-/*
- * Find the index of an OBJID which matches this Variable instance.
- *
- * Arguments:
- * var - pointer to Variable instance
- *
- * Returns:
- * idx - index of matched Variable instance
- * -1 - no matching Variable found
- *
- */
-static int
-find_var (Variable *var)
-{
- size_t i;
-
- for ( i = 0; i < NUM_OIDS; i++ )
- if ( oid_cmp ( &var->oid, &Objids[i] ) == 0 ) {
- return ( i );
- }
-
- return ( -1 );
-
-}
-
-/*
- * Return the time process has been running as a number of ticks
- *
- * Arguments:
- * none
- *
- * Returns:
- * number of ticks
- *
- */
-static int
-get_ticks (void)
-{
- struct timeval timenow;
- struct timeval timediff;
-
- (void) gettimeofday ( &timenow, NULL );
- /*
- * Adjust for subtraction
- */
- timenow.tv_sec--;
- timenow.tv_usec += 1000000;
-
- /*
- * Compute time since 'starttime'
- */
- timediff.tv_sec = timenow.tv_sec - starttime.tv_sec;
- timediff.tv_usec = timenow.tv_usec - starttime.tv_usec;
-
- /*
- * Adjust difference timeval
- */
- if ( timediff.tv_usec >= 1000000 ) {
- timediff.tv_usec -= 1000000;
- timediff.tv_sec++;
- }
-
- /*
- * Compute number of ticks
- */
- return ( ( timediff.tv_sec * 100 ) + ( timediff.tv_usec / 10000 ) );
-
-}
-
-/*
- * Build a response PDU
- *
- * Arguments:
- * hdr - pointer to PDU Header with completed Variable list
- *
- * Returns:
- * none
- *
- */
-static void
-build_pdu (Snmp_Header *hdr, int type)
-{
- u_char *bp = Resp_Buf;
- u_char *vpp;
- u_char *ppp;
- int erridx = 0;
- int varidx = 1;
- int varlen = 0;
- int pdulen = 0;
- int traplen = 0;
- Variable *var;
-
- /*
- * Clear out the reply
- */
- bzero ( Resp_Buf, sizeof(Resp_Buf) );
-
- /* [0] is reserved for overall length */
- bp++;
-
- /* Start with SEQUENCE OF */
- *bp++ = ASN_SEQUENCE;
- /* - assume we can code length in two octets */
- *bp++ = 0x82;
- bp++;
- bp++;
- /* Version */
- *bp++ = ASN_INTEGER;
- asn_set_int ( &bp, hdr->version );
- /* Community name */
- *bp++ = ASN_OCTET;
- *bp++ = strlen ( hdr->community );
- bcopy ( hdr->community, bp, strlen ( hdr->community ) );
- bp += strlen ( hdr->community );
- /* PDU Type */
- *bp++ = type;
- ppp = bp;
- /* Length of OID data - assume it'll fit in one octet */
- bp++;
-
- if ( type != PDU_TYPE_TRAP ) {
- /* Sequence ID */
- *bp++ = ASN_INTEGER;
- asn_set_int ( &bp, hdr->reqid );
- /*
- * Check to see if all the vaiables were resolved - we do this
- * by looking for something which still has an ASN_NULL value.
- */
- var = hdr->head;
- if ( type == PDU_TYPE_GETRESP ) {
- while ( var && erridx == 0 ) {
- if ( var->type != ASN_NULL ) {
- varidx++;
- var = var->next;
- } else
- erridx = varidx;
- }
- }
-
- /* Error status */
- *bp++ = ASN_INTEGER;
- *bp++ = 0x01; /* length = 1 */
- if ( erridx )
- *bp++ = SNMP_ERR_NOSUCHNAME;
- else
- *bp++ = SNMP_ERR_NOERROR;
- /* Error Index */
- *bp++ = ASN_INTEGER;
- *bp++ = 0x01; /* length = 1 */
- *bp++ = erridx; /* index == 0 if no error */
- } else {
- /* type == PDU_TYPE_TRAP */
-
- /* Fill in ENTERPRISE OBJID */
- *bp++ = ASN_OBJID;
- (void) asn_put_objid ( &bp, &hdr->enterprise );
-
- /* Fill in IP address */
- *bp++ = ASN_IPADDR;
- *bp++ = sizeof ( hdr->ipaddr );
- bcopy ( (caddr_t)&hdr->ipaddr, bp, sizeof(hdr->ipaddr) );
- bp += sizeof(hdr->ipaddr);
-
- /* Fill in generic and specific trap types */
- *bp++ = ASN_INTEGER;
- asn_set_int ( &bp, hdr->generic_trap );
- *bp++ = ASN_INTEGER;
- asn_set_int ( &bp, hdr->specific_trap );
-
- /* Fill in time-stamp - assume 0 for now */
- *bp++ = ASN_TIMESTAMP;
- asn_set_int ( &bp, 0 );
-
- /* encoded length */
- traplen = ( bp - ppp - 1 );
-
- /* Continue with variable processing */
- }
-
- /* SEQUENCE OF */
- *bp++ = ASN_SEQUENCE;
- *bp++ = 0x82;
- /* - assume we can code length in two octets */
- vpp = bp;
- varlen = 0;
- bp++;
- bp++;
-
- /* Install Variables */
- var = hdr->head;
- varidx = 1;
- while ( var ) {
- u_char *bpp;
- int len = 0;
-
- /* SEQUENCE OF */
- *bp++ = ASN_SEQUENCE;
- *bp++ = 0x82;
- /* - assume we can code length in two octets */
- bpp = bp;
- bp++;
- bp++;
- /* OBJID */
- *bp++ = ASN_OBJID;
- len++;
-
- len += asn_put_objid ( &bp, &var->oid );
-
- if ( erridx && varidx >= erridx ) {
- /* Code this variable as NULL */
- *bp++ = ASN_NULL;
- len++;
- bp++;
- len++;
- } else {
- u_char *lpp;
- /* Variable type */
- *bp++ = var->type;
- len++;
- lpp = bp;
- switch ( var->type ) {
- case ASN_INTEGER:
- asn_set_int ( &bp, var->var.ival );
- len += ( *lpp + 1 );
- break;
- case ASN_OCTET:
- *bp++ = var->var.sval[0];
- len++;
- bcopy ( (caddr_t)&var->var.sval[1],
- bp, var->var.sval[0] );
- len += var->var.sval[0];
- bp += var->var.sval[0];
- break;
- case ASN_NULL:
- *bp++ = 0x00;
- len++;
- break;
- case ASN_OBJID:
- len += asn_put_objid ( &bp, &var->var.oval );
- break;
- case ASN_SEQUENCE:
- break;
- case ASN_IPADDR:
- *bp++ = 4;
- len++;
- bcopy ( (caddr_t)&var->var.aval, bp, 4 );
- len += 4;
- bp += 4;
- break;
- case ASN_TIMESTAMP:
- asn_set_int ( &bp, var->var.ival );
- len += ( *lpp + 1 );
- break;
- default:
- break;
- }
- }
-
- /* Accumulate total Variable sequence length */
- varlen += (len + 4);
-
- /* Fill in length of this sequence */
- bpp[1] = len & 0xff;
- bpp[0] = len >> 8;
-
- var = var->next;
- }
-
-
- /* Fill in length of Variable sequence */
- vpp[1] = varlen & 0xff;
- vpp[0] = varlen >> 8;
-
- if ( type != PDU_TYPE_TRAP ) {
- /* Fill in length of data AFTER PDU type */
- *ppp = varlen + 12 + ppp[2]; /* + length of reqid */
- } else {
- /* Fill in length of data AFTER PDU type */
- *ppp = varlen + traplen + 4; /* + length of initial sequence of */
- }
-
- /* Fill in overall sequence length */
- pdulen = *ppp + 7 + strlen ( hdr->community );
- Resp_Buf[4] = pdulen & 0x7f;
- Resp_Buf[3] = pdulen >> 8;
-
- pdulen = bp - Resp_Buf - 1;
-
- Resp_Buf[0] = pdulen;
-
- hdr->pdutype = type;
- hdr->pdulen = pdulen;
-
- return;
-}
-
-static void
-free_pdu (Snmp_Header *hdr)
-{
- Variable *var;
-
- while ( hdr->head ) {
- var = hdr->head->next; /* Save next link */
- free ( hdr->head ); /* Free current var */
- hdr->head = var; /* Set head to next link */
- }
-
- free ( hdr ); /* Free fixed portion */
-}
-
-static void
-print_pdu (int dir, int intf, Snmp_Header *Hdr, int len, u_char *buf)
-{
- const char * pdu_dir;
- const char * pdu_type;
- int pdu_num;
-
- write_timestamp();
-
- switch (dir) {
- case PDU_SEND:
- pdu_dir = "SEND";
- break;
- case PDU_RECV:
- pdu_dir = "RECV";
- break;
- default:
- pdu_dir = "undefined";
- break;
- }
-
- if (Hdr == NULL) {
- pdu_type = "unknown";
- pdu_num = 0;
- } else {
- pdu_type = PDU_Types[Hdr->pdutype & 7];
- pdu_num = Hdr->pdutype;
- }
-
- fprintf(Log,
- "%s: %s(%d), ILMI %s(%d), PDU Type %s(0x%x) %d/%d bytes.\n",
- pdu_dir,
- Intf[intf].anp_intf, ilmi_fd[intf],
- ILMI_State[intf], ilmi_state[intf],
- pdu_type, pdu_num,
- len, buf[0]);
-
- if (Hdr == NULL)
- fprintf(Log, "Header seems to be invalid.\n");
- else
- print_header(Hdr);
-
- hexdump(Log, (u_char *)&buf[1], len, NULL);
-
- return;
-}
-
-/*
- * Send a generic response packet
- *
- * Arguments:
- * sd - socket to send the reply on
- * reqid - original request ID from GET PDU
- * resp - pointer to the response to send
- *
- * Returns:
- * none - response sent
- *
- */
-static void
-send_resp (int intf, Snmp_Header *Hdr, u_char *resp)
-{
- int n;
-
- if ( ilmi_fd[intf] > 0 ) {
- n = write ( ilmi_fd[intf], (caddr_t)&resp[1], resp[0] );
- if ( Log && Debug_Level > 1 ) {
- print_pdu(PDU_SEND, intf, Hdr, n, resp);
- }
- }
-
- free_pdu ( Hdr );
- return;
-}
-
-/*
- * Build a COLD_START TRAP PDU
- *
- */
-static Snmp_Header *
-build_cold_start (void)
-{
- Snmp_Header *hdr;
- Variable *var;
-
- hdr = (Snmp_Header *)malloc(sizeof(Snmp_Header));
- if (hdr == NULL) {
- fprintf(stderr, "malloc() failed in %s()\n", __func__);
- exit(1);
- }
- bzero(hdr, sizeof(Snmp_Header));
-
- hdr->pdulen = 0;
- hdr->version = SNMP_VERSION_1 - 1;
- snprintf ( hdr->community, sizeof(hdr->community), "ILMI" );
-
- hdr->ipaddr = 0x0; /* 0.0.0.0 */
- hdr->generic_trap = TRAP_COLDSTART;
- hdr->specific_trap = 0;
- bcopy ( (caddr_t)&Objids[ENTERPRISE_OBJID], (caddr_t)&hdr->enterprise,
- sizeof(Objid) );
-
- hdr->head = (Variable *)malloc(sizeof(Variable));
- if (hdr == NULL) {
- fprintf(stderr, "malloc() failed in %s()\n", __func__);
- exit(1);
- }
- bzero(hdr->head, sizeof(Variable));
-
- var = hdr->head;
- bcopy ( (caddr_t)&Objids[UPTIME_OBJID], (caddr_t)&var->oid,
- sizeof(Objid) );
- var->type = ASN_NULL;
-
- return ( hdr );
-}
-
-/*
- * Build a Generic PDU Header
- *
- */
-static Snmp_Header *
-build_generic_header (void)
-{
- Snmp_Header *hdr;
-
- hdr = (Snmp_Header *)malloc(sizeof(Snmp_Header));
- if (hdr == NULL) {
- fprintf(stderr, "malloc() failed in %s()\n", __func__);
- exit(1);
- }
- bzero(hdr, sizeof(Snmp_Header));
-
- hdr->pdulen = 0;
- hdr->version = SNMP_VERSION_1 - 1;
- snprintf ( hdr->community, sizeof(hdr->community), "ILMI" );
-
- return ( hdr );
-}
-
-/*
- * Initialize information on what physical adapters HARP knows about
- *
- * Query the HARP subsystem about configuration and physical interface
- * information for any currently registered ATM adapters. Store the information
- * as arrays for easier indexing by SNMP port/index numbers.
- *
- * Arguments:
- * none
- *
- * Returns:
- * none Information from HARP available
- *
- */
-static void
-init_ilmi (void)
-{
- struct air_cfg_rsp *cfg_info = NULL;
- struct air_int_rsp *intf_info = NULL;
- int buf_len;
-
- /*
- * Get configuration info - what's available with 'atm sh config'
- */
- buf_len = get_cfg_info ( NULL, &cfg_info );
- /*
- * If error occurred, clear out everything
- */
- if ( buf_len <= 0 ) {
- bzero ( Cfg, sizeof(Cfg) );
- bzero( Intf, sizeof(Intf) );
- NUnits = 0;
- return;
- }
-
- /*
- * Move to local storage
- */
- bcopy ( cfg_info, (caddr_t)Cfg, buf_len );
- /*
- * Compute how many units information was returned for
- */
- NUnits = buf_len / sizeof(struct air_cfg_rsp);
- /* Housecleaning */
- free ( cfg_info );
- cfg_info = NULL;
- /*
- * Get the per interface information
- */
- buf_len = get_intf_info ( NULL, &intf_info );
- /*
- * If error occurred, clear out Intf info
- */
- if ( buf_len <= 0 ) {
- bzero ( Intf, sizeof(Intf) );
- return;
- }
-
- /*
- * Move to local storage
- */
- bcopy ( intf_info, (caddr_t)Intf, buf_len );
- /* Housecleaning */
- free ( intf_info );
- intf_info = NULL;
-
- return;
-
-}
-
-/*
- * Open a new SNMP session for ILMI
- *
- * Start by updating interface information, in particular, how many
- * interfaces are in the system. While we'll try to open sessons on
- * all interfaces, this deamon currently can only handle the first
- * interface.
- *
- * Arguments:
- * none
- *
- * Returns:
- * none
- *
- */
-static void
-ilmi_open (void)
-{
- struct sockaddr_atm satm;
- struct t_atm_aal5 aal5;
- struct t_atm_traffic traffic;
- struct t_atm_bearer bearer;
- struct t_atm_qos qos;
- struct t_atm_app_name appname;
- Atm_addr subaddr;
- char nifname[IFNAMSIZ];
- int optlen;
- int unit = 0;
- u_char sig_proto;
-
- init_ilmi();
-
- for ( unit = 0; unit < NUnits; unit++ ) {
-
- /*
- * ILMI only makes sense for UNI signalling protocols
- */
- sig_proto = Intf[unit].anp_sig_proto;
- if ( sig_proto != ATM_SIG_UNI30 && sig_proto != ATM_SIG_UNI31 &&
- sig_proto != ATM_SIG_UNI40 )
- continue;
-
- if ( ilmi_fd[unit] == -1 ) {
-
- ilmi_fd[unit] = socket ( AF_ATM, SOCK_SEQPACKET, ATM_PROTO_AAL5 );
-
- if ( ilmi_fd[unit] < 0 ) {
- perror ( "open" );
- continue;
- }
-
- /*
- * Set interface name. For now, we must have a netif to go on...
- */
- if ( Intf[unit].anp_nif_cnt == 0 ) {
- if ( Debug_Level > 1 && Log ) {
- write_timestamp();
- fprintf ( Log, "No nif on unit %d\n", unit );
- }
- close ( ilmi_fd[unit] );
- ilmi_fd[unit] = -1;
- continue;
- }
- sprintf ( nifname, "%s0", Intf[unit].anp_nif_pref );
- optlen = sizeof ( nifname );
- if ( setsockopt ( ilmi_fd[unit], T_ATM_SIGNALING,
- T_ATM_NET_INTF, (caddr_t)nifname, optlen ) < 0 ) {
- perror ( "setsockopt" );
- if ( Log ) {
- write_timestamp();
- fprintf ( Log,
- "Couldn't set interface name \"%s\"\n",
- nifname );
- }
- if ( Debug_Level > 1 && Log ) {
- write_timestamp();
- fprintf ( Log, "nifname: closing unit %d\n", unit );
- }
- close ( ilmi_fd[unit] );
- ilmi_fd[unit] = -1;
- continue;
- }
-
- /*
- * Set up destination SAP
- */
- bzero ( (caddr_t) &satm, sizeof(satm) );
- satm.satm_family = AF_ATM;
-#if (defined(BSD) && (BSD >= 199103))
- satm.satm_len = sizeof(satm);
-#endif
-
- satm.satm_addr.t_atm_sap_addr.SVE_tag_addr = T_ATM_PRESENT;
- satm.satm_addr.t_atm_sap_addr.SVE_tag_selector = T_ATM_ABSENT;
- satm.satm_addr.t_atm_sap_addr.address_format = T_ATM_PVC_ADDR;
- satm.satm_addr.t_atm_sap_addr.address_length = sizeof(Atm_addr_pvc);
- ATM_PVC_SET_VPI((Atm_addr_pvc *)satm.satm_addr.t_atm_sap_addr.address,
- 0 );
- ATM_PVC_SET_VCI((Atm_addr_pvc *)satm.satm_addr.t_atm_sap_addr.address,
- 16 );
-
- satm.satm_addr.t_atm_sap_layer2.SVE_tag = T_ATM_PRESENT;
- satm.satm_addr.t_atm_sap_layer2.ID_type = T_ATM_SIMPLE_ID;
- satm.satm_addr.t_atm_sap_layer2.ID.simple_ID = T_ATM_BLLI2_I8802;
-
- satm.satm_addr.t_atm_sap_layer3.SVE_tag = T_ATM_ABSENT;
-
- satm.satm_addr.t_atm_sap_appl.SVE_tag = T_ATM_ABSENT;
-
- /*
- * Set up connection parameters
- */
- aal5.forward_max_SDU_size = MAX_LEN;
- aal5.backward_max_SDU_size = MAX_LEN;
- aal5.SSCS_type = T_ATM_NULL;
- optlen = sizeof(aal5);
- if ( setsockopt ( ilmi_fd[unit], T_ATM_SIGNALING, T_ATM_AAL5,
- (caddr_t) &aal5, optlen ) < 0 ) {
- perror ( "setsockopt(aal5)" );
- if ( Debug_Level > 1 && Log ) {
- write_timestamp();
- fprintf ( Log, "aal5: closing unit %d\n", unit );
- }
- close ( ilmi_fd[unit] );
- ilmi_fd[unit] = -1;
- continue;
- }
-
- traffic.forward.PCR_high_priority = T_ATM_ABSENT;
- traffic.forward.PCR_all_traffic = 100000;
- traffic.forward.SCR_high_priority = T_ATM_ABSENT;
- traffic.forward.SCR_all_traffic = T_ATM_ABSENT;
- traffic.forward.MBS_high_priority = T_ATM_ABSENT;
- traffic.forward.MBS_all_traffic = T_ATM_ABSENT;
- traffic.forward.tagging = T_NO;
- traffic.backward.PCR_high_priority = T_ATM_ABSENT;
- traffic.backward.PCR_all_traffic = 100000;
- traffic.backward.SCR_high_priority = T_ATM_ABSENT;
- traffic.backward.SCR_all_traffic = T_ATM_ABSENT;
- traffic.backward.MBS_high_priority = T_ATM_ABSENT;
- traffic.backward.MBS_all_traffic = T_ATM_ABSENT;
- traffic.backward.tagging = T_NO;
- traffic.best_effort = T_YES;
- optlen = sizeof(traffic);
- if (setsockopt(ilmi_fd[unit], T_ATM_SIGNALING, T_ATM_TRAFFIC,
- (caddr_t)&traffic, optlen) < 0) {
- perror("setsockopt(traffic)");
- }
- bearer.bearer_class = T_ATM_CLASS_X;
- bearer.traffic_type = T_ATM_NULL;
- bearer.timing_requirements = T_ATM_NULL;
- bearer.clipping_susceptibility = T_NO;
- bearer.connection_configuration = T_ATM_1_TO_1;
- optlen = sizeof(bearer);
- if (setsockopt(ilmi_fd[unit], T_ATM_SIGNALING, T_ATM_BEARER_CAP,
- (caddr_t)&bearer, optlen) < 0) {
- perror("setsockopt(bearer)");
- }
-
- qos.coding_standard = T_ATM_NETWORK_CODING;
- qos.forward.qos_class = T_ATM_QOS_CLASS_0;
- qos.backward.qos_class = T_ATM_QOS_CLASS_0;
- optlen = sizeof(qos);
- if (setsockopt(ilmi_fd[unit], T_ATM_SIGNALING, T_ATM_QOS, (caddr_t)&qos,
- optlen) < 0) {
- perror("setsockopt(qos)");
- }
-
- subaddr.address_format = T_ATM_ABSENT;
- subaddr.address_length = 0;
- optlen = sizeof(subaddr);
- if (setsockopt(ilmi_fd[unit], T_ATM_SIGNALING, T_ATM_DEST_SUB,
- (caddr_t)&subaddr, optlen) < 0) {
- perror("setsockopt(dest_sub)");
- }
-
- strncpy(appname.app_name, "ILMI", T_ATM_APP_NAME_LEN);
- optlen = sizeof(appname);
- if (setsockopt(ilmi_fd[unit], T_ATM_SIGNALING, T_ATM_APP_NAME,
- (caddr_t)&appname, optlen) < 0) {
- perror("setsockopt(appname)");
- }
-
- /*
- * Now try to connect to destination
- */
- if ( connect ( ilmi_fd[unit], (struct sockaddr *) &satm,
- sizeof(satm)) < 0 ) {
- perror ( "connect" );
- if ( Debug_Level > 1 && Log ) {
- write_timestamp();
- fprintf ( Log, "connect: closing unit %d\n", unit );
- }
- close ( ilmi_fd[unit] );
- ilmi_fd[unit] = -1;
- continue;
- }
-
- if ( Debug_Level && Log ) {
- write_timestamp();
- fprintf ( Log, "***** opened unit %d\n", unit );
- }
-
- ilmi_state[unit] = ILMI_COLDSTART;
-
- }
-
- }
-
- return;
-
-}
-
-/*
- * Get our local IP address for this interface
- *
- * Arguments:
- * s - socket to find address for
- * aval - pointer to variable to store address in
- *
- * Returns:
- * none
- *
- */
-static void
-get_local_ip (int s, long *aval)
-{
- char intf_name[IFNAMSIZ];
- socklen_t namelen = IFNAMSIZ;
- struct air_netif_rsp *net_info = NULL;
- struct sockaddr_in *sain;
-
- /*
- * Get physical interface name
- */
- if ( getsockopt ( s, T_ATM_SIGNALING, T_ATM_NET_INTF,
- (caddr_t) intf_name, &namelen ) )
- return;
-
- /*
- * Get network interface information for this physical interface
- */
- get_netif_info ( intf_name, &net_info );
- if ( net_info == NULL )
- return;
-
- sain = (struct sockaddr_in *)(void *)&net_info->anp_proto_addr;
-
- /*
- * Fill in answer
- */
- bcopy ( (caddr_t)&sain->sin_addr.s_addr, aval, 4 );
-
- free ( net_info );
-
- return;
-
-}
-
-/*
- * Set local NSAP prefix and then reply with our full NSAP address.
- *
- * Switch will send a SET message with the NSAP prefix after a coldStart.
- * We'll set that prefix into HARP and then send a SET message of our own
- * with our full interface NSAP address.
- *
- * Arguments:
- * oid - objid from SET message
- * hdr - pointer to internal SNMP header
- * buf - pointer to SET buffer
- * s - socket to send messages on
- *
- * Returns:
- * none
- *
- */
-static void
-set_prefix (Objid *oid, Snmp_Header *hdr __unused, int intf)
-{
- struct atmsetreq asr;
- Atm_addr *aa;
- int fd;
- int i;
-
- /*
- * Build IOCTL request to set prefix
- */
- asr.asr_opcode = AIOCS_SET_PRF;
- strncpy ( asr.asr_prf_intf, Intf[intf].anp_intf,
- sizeof(asr.asr_prf_intf ) );
- /*
- * Pull prefix out of received Objid
- * save in set_prefix IOCTL and addressEntry table
- */
- for ( i = 0; i < oid->oid[13]; i++ ) {
- asr.asr_prf_pref[i] = oid->oid[i + 14];
- }
-
- /*
- * Pass new prefix to the HARP kernel
- */
- fd = socket ( AF_ATM, SOCK_DGRAM, 0 );
- if ( fd < 0 )
- return;
- if ( ioctl ( fd, AIOCSET, (caddr_t)&asr ) < 0 ) {
- if ( errno != EALREADY ) {
- syslog ( LOG_ERR, "ilmid: error setting prefix: %m" );
- if ( Log ) {
- write_timestamp();
- fprintf ( Log, "errno %d setting prefix\n",
- errno );
- }
- close ( fd );
- return;
- }
- }
- close ( fd );
-
- /*
- * Reload the cfg/intf info with newly set prefix
- */
- init_ilmi();
-
- aa = &Intf[intf].anp_addr;
-
- /*
- * Copy our NSAP into addressEntry table
- */
-
- addressEntry[intf].oid[0] = 0;
- for ( i = 0; i < aa->address_length; i++ ) {
- addressEntry[intf].oid[0]++; /* Increment length */
- addressEntry[intf].oid[i + 1] = (int)((u_char *)(aa->address))[i];
-
- }
-
- return;
-
-}
-
-static void
-set_address (Snmp_Header *hdr __unused, int intf)
-{
- Variable *var;
- int i, j;
-
- PDU_Header = build_generic_header();
-
- PDU_Header->head = (Variable *)malloc(sizeof(Variable));
- if (PDU_Header->head == NULL) {
- fprintf(stderr, "malloc() failed in %s()\n", __func__);
- exit(1);
- }
- bzero(PDU_Header->head, sizeof(Variable));
-
- var = PDU_Header->head;
- /* Copy generic addressEntry OBJID */
- bcopy ( (caddr_t)&Objids[ADDRESS_OBJID], (caddr_t)&var->oid,
- sizeof(Objid) );
- /* Set specific instance */
- i = var->oid.oid[0] + 1; /* Get length */
- var->oid.oid[i++] = 1;
- var->oid.oid[i++] = 1;
- var->oid.oid[i++] = 3;
- var->oid.oid[i++] = 0;
-
- /* Copy in address length */
- var->oid.oid[i++] = addressEntry[intf].oid[0];
-
- /* Copy in address */
- for ( j = 0; j < addressEntry[intf].oid[0]; j++ )
- var->oid.oid[i++] = addressEntry[intf].oid[j + 1];
- var->oid.oid[0] = i - 1; /* Set new length */
-
- /* Set == VALID */
- var->type = ASN_INTEGER;
- var->var.ival = 1;
-
- build_pdu ( PDU_Header, PDU_TYPE_SET );
- send_resp ( intf, PDU_Header, Resp_Buf );
-}
-
-/*
- * Increment Debug Level
- *
- * Catches SIGUSR1 signal and increments value of Debug_Level
- *
- * Arguments:
- * sig - signal number
- *
- * Returns:
- * none - Debug_Level incremented
- *
- */
-static void
-Increment_DL (int sig __unused)
-{
- Debug_Level++;
- if ( Debug_Level && Log == (FILE *)NULL ) {
- if ( foregnd ) {
- Log = stderr;
- } else {
- if ( ( Log = fopen ( LOG_FILE, "a" ) ) == NULL )
- Log = NULL;
- }
- if ( Log ) {
- setbuf ( Log, NULL );
- write_timestamp();
- fprintf ( Log, "Raised Debug_Level to %d\n", Debug_Level );
- }
- }
- signal ( SIGUSR1, Increment_DL );
- return;
-}
-
-/*
- * Decrement Debug Level
- *
- * Catches SIGUSR2 signal and decrements value of Debug_Level
- *
- * Arguments:
- * sig - signal number
- *
- * Returns:
- * none - Debug_Level decremented
- *
- */
-static void
-Decrement_DL (int sig __unused)
-{
- Debug_Level--;
- if ( Debug_Level <= 0 ) {
- Debug_Level = 0;
- if ( Log ) {
- write_timestamp();
- fprintf ( Log, "Lowered Debug_Level to %d\n", Debug_Level );
- if ( !foregnd )
- fclose ( Log );
- Log = NULL;
- }
- }
- signal ( SIGUSR2, Decrement_DL );
- return;
-}
-
-/*
- * Loop through GET variable list looking for matches
- *
- */
-static void
-process_get (Snmp_Header *hdr, int intf)
-{
- Variable *var;
- int idx;
- int x;
- int oidlen;
-
- var = hdr->head;
- while ( var ) {
-
- /* Handle the 'GET PREFIX' request */
- oidlen = Objids[SETPFX_OBJID].oid[0];
- if (oid_ncmp(&var->oid, &Objids[SETPFX_OBJID], oidlen) == 0) {
- var->var.ival = 2; /* assume not valid */
- for(x = 0; x < 13; x++)
- if (var->oid.oid[oidlen + x + 2] !=
- addressEntry[intf].oid[x + 1])
- break;
-
- /* Address Match */
- if (x == 13)
- hdr->head->var.ival = 1;
- var = var->next;
- continue;
- }
-
- idx = find_var ( var );
- switch ( idx ) {
- case MADGE_OBJECT1:
- /* reply with NO SUCH OBJECT */
- var->type = ASN_NULL;
- break;
- case SYS_OBJID:
- var->type = ASN_OBJID;
- bcopy ( (caddr_t)&Objids[MY_OBJID],
- (caddr_t)&var->var.oval,
- sizeof(Objid) );
- break;
- case UPTIME_OBJID:
- var->type = ASN_TIMESTAMP;
- var->var.ival = get_ticks();
- break;
- case UNITYPE_OBJID:
- var->type = ASN_INTEGER;
- var->var.ival = UNITYPE_PRIVATE;
- break;
- case UNIVER_OBJID:
- var->type = ASN_INTEGER;
- switch ( Intf[intf].anp_sig_proto ) {
- case ATM_SIG_UNI30:
- var->var.ival = UNIVER_UNI30;
- break;
- case ATM_SIG_UNI31:
- var->var.ival = UNIVER_UNI31;
- break;
- case ATM_SIG_UNI40:
- var->var.ival = UNIVER_UNI40;
- break;
- default:
- var->var.ival = UNIVER_UNKNOWN;
- break;
- }
- break;
- case DEVTYPE_OBJID:
- var->type = ASN_INTEGER;
- var->var.ival = DEVTYPE_USER;
- break;
- case MAXVCC_OBJID:
- var->type = ASN_INTEGER;
- var->var.ival = 1024;
- break;
- case PORT_OBJID:
- var->type = ASN_INTEGER;
- var->var.ival = intf + 1;
- break;
- case IPNM_OBJID:
- var->type = ASN_IPADDR;
- get_local_ip( ilmi_fd[intf], &var->var.aval );
- break;
- case ADDRESS_OBJID:
- break;
- case ATMF_PORTID:
- var->type = ASN_INTEGER;
- var->var.ival = 0x30 + intf;
- break;
- case ATMF_SYSID:
- var->type = ASN_OCTET;
- var->var.sval[0] = 6;
- bcopy ( (caddr_t)&Cfg[intf].acp_macaddr,
- (caddr_t)&var->var.sval[1], 6 );
- break;
- default:
- /* NO_SUCH */
- break;
- }
- var = var->next;
- }
- build_pdu ( hdr, PDU_TYPE_GETRESP );
- send_resp ( intf, hdr, Resp_Buf );
-
-}
-
-/******************************************************************************
- *
- * Find an OBJID from known ones
- *
- * in: Variable with valid OID
- * out: OID number (index), -1 = not found
- */
-static int
-lmi_object_find (Variable *var)
-{
- Objid * obj_var;
- Objid * obj_cur;
- size_t x;
- int y;
-
- obj_var = &var->oid;
-
- for (x = 0; x < NUM_OIDS; x++) {
- obj_cur = &Objids[x];
- for (y = 0; y < 128; y++) {
- if (obj_var->oid[y] != obj_cur->oid[y])
- break;
- if (obj_var->oid[y] == 0) /* object ID endmark */
- return (x);
- }
- }
-
- return (-1);
-}
-
-#if 0
-/******************************************************************************
- *
- * Append instance number to OID
- *
- * in: Variable, instance number
- * out: zero = success
- *
- */
-static int
-lmi_object_instance (Variable *var, int instnum)
-{
- int * oidptr;
- int curlen;
-
- oidptr = var->oid.oid;
- curlen = oidptr[0]; /* current length */
- if (curlen > 126)
- return (1);
- curlen++;
- oidptr[curlen] = instnum;
- oidptr[0] = curlen;
- return (0);
-}
-#endif
-
-/******************************************************************************
- *
- * Handle received GETNEXT
- *
- * in: Header with valid fields, interface number
- * out: zero = success
- *
- */
-static int
-lmi_rcvcmd_getnext (Snmp_Header *header, int intf)
-{
- int * oidptr;
- int oidlen;
- int oidnum;
- int x;
-
- oidnum = lmi_object_find(header->head);
- oidptr = header->head->oid.oid;
- oidlen = oidptr[0];
-
- switch(oidnum) {
- /* Should be because the remote side is attempting
- * to verify that our table is empty
- */
- case ADDRESS_OBJID:
- if ( addressEntry[intf].oid[0] ) {
- /* XXX - FIXME */
- /* Our table is not empty - return address */
- }
- break;
-
- /* Madge Collage sends GETNEXT for this */
- case SETPFX_OBJID:
- if(addressEntry[intf].oid[0]) { /* we have a prefix */
- oidptr[0] += 14;
- oidptr += oidlen; /* skip to last number */
- oidptr++;
- *oidptr++ = 13; /* length of prefix */
-
- /* fill in the prefix */
- for(x = 0; x < 13; x++) {
- *oidptr++ = addressEntry[intf].oid[x+1];
- }
- header->head->type = ASN_INTEGER;
- /* 1=valid, 2=invalid -- only 2 values */
- header->head->var.ival = 1;
- } else { /* no prefix available */
- header->head->type = ASN_NULL;
- }
- break;
-
- default:
- return (1); /* unknown object ID */
- }
-
- build_pdu(header, PDU_TYPE_GETRESP);
- send_resp(intf, header, Resp_Buf);
-
- return (0);
-}
-
-
-/******************************************************************************
- *
- * Handle received TRAP
- *
- * in: Header with valid fields, interface number
- * out: zero = success
- *
- */
-static int
-lmi_rcvcmd_trap (Snmp_Header *header __unused, int intf)
-{
-
- bzero((caddr_t)&addressEntry[intf], sizeof(Objid));
- return (0);
-}
-
-/*
- * ILMI State Processing Loop
- *
- *
- */
-static void
-ilmi_do_state(void)
-{
- struct timeval tvp;
- fd_set rfd;
- u_char buf[1024];
- Variable *var;
- int intf;
- int maxfd = 0;
-
- /*
- * Loop forever
- */
- for ( ; ; ) {
- int count;
- int n;
- u_char *bpp;
- Snmp_Header *Hdr;
-
- /*
- * SunOS CC doesn't allow automatic aggregate initialization.
- * Initialize to zero which effects a poll operation.
- */
- tvp.tv_sec = 15;
- tvp.tv_usec = 0;
-
- /*
- * Clear fd_set and initialize to check this interface
- */
- FD_ZERO ( &rfd );
- for ( intf = 0; intf < MAX_UNITS; intf++ )
- if ( ilmi_fd[intf] > 0 ) {
- FD_SET ( ilmi_fd[intf], &rfd );
- maxfd = MAX ( maxfd, ilmi_fd[intf] );
- }
-
- /*
- * Check for new interfaces
- */
- ilmi_open();
-
- for ( intf = 0; intf < MAX_UNITS; intf++ ) {
- /*
- * Do any pre-message state processing
- */
- switch ( ilmi_state[intf] ) {
- case ILMI_COLDSTART:
- /*
- * Clear addressTable
- */
- bzero ( (caddr_t)&addressEntry[intf], sizeof(Objid) );
-
- /*
- * Start by sending a COLD_START trap. This should cause the
- * remote end to clear the associated prefix/address table(s).
- */
- /* Build ColdStart TRAP header */
- ColdStart_Header = build_cold_start();
- build_pdu ( ColdStart_Header, PDU_TYPE_TRAP );
- send_resp ( intf, ColdStart_Header, Resp_Buf );
-
- /*
- * Start a timeout so that if the next state fails, we re-enter
- * ILMI_COLDSTART.
- */
- /* atm_timeout() */
-
- /* Enter new state */
- ilmi_state[intf] = ILMI_INIT;
- /* fall into ILMI_INIT */
-
- case ILMI_INIT:
- /*
- * After a COLD_START, we need to check that the remote end has
- * cleared any tables. Send a GET_NEXT request to check for this.
- * In the event that the table is not empty, or that no reply is
- * received, return to COLD_START state.
- */
- PDU_Header = build_generic_header();
-
- PDU_Header->head = (Variable *)malloc(sizeof(Variable));
- if (PDU_Header->head == NULL) {
- fprintf(stderr, "malloc() failed in %s()\n", __func__);
- exit(1);
- }
- bzero(PDU_Header->head, sizeof(Variable));
-
- var = PDU_Header->head;
- bcopy ( (caddr_t)&Objids[ADDRESS_OBJID], (caddr_t)&var->oid,
- sizeof(Objid) );
- var->type = ASN_NULL;
- var->next = NULL;
-
- /*
- * Send GETNEXT request looking for empty ATM Address Table
- */
- PDU_Header->reqid = Req_ID++;
- build_pdu ( PDU_Header, PDU_TYPE_GETNEXT );
- send_resp ( intf, PDU_Header, Resp_Buf );
-
- /*
- * Start a timeout while looking for SET message. If we don't receive
- * a SET, then go back to COLD_START state.
- */
- /* atm_timeout() */
- break;
-
- case ILMI_RUNNING:
- /* Normal SNMP processing */
- break;
-
- default:
- break;
- }
- }
-
- count = select ( maxfd + 1, &rfd, NULL, NULL, &tvp );
-
- for ( intf = 0; intf < MAX_UNITS; intf++ ) {
- /*
- * Check for received messages
- */
- if ( ilmi_fd[intf] > 0 && FD_ISSET ( ilmi_fd[intf], & rfd ) ) {
-
- n = read ( ilmi_fd[intf], (caddr_t)&buf[1], sizeof(buf) - 1 );
- if ( n == -1 && ( errno == ECONNRESET || errno == EBADF ) ) {
- ilmi_state[intf] = ILMI_COLDSTART;
- close ( ilmi_fd[intf] );
- ilmi_fd[intf] = -1;
- } else {
- bpp = &buf[1];
- Hdr = asn_get_header(&bpp);
-
- if ( Log && Debug_Level > 1 )
- print_pdu(PDU_RECV, intf, Hdr, n, buf);
-
- if (Hdr == NULL)
- continue;
-
- /* What we do with this messages depends upon the state we're in */
- switch ( ilmi_state[intf] ) {
- case ILMI_COLDSTART:
- /* We should never be in this state here */
- free_pdu ( Hdr );
- break;
- case ILMI_INIT:
- /* The only messages we care about are GETNEXTs, GETRESPs, and TRAPs */
- switch ( Hdr->pdutype ) {
- case PDU_TYPE_GETNEXT:
- lmi_rcvcmd_getnext(Hdr, intf);
- break;
- case PDU_TYPE_GETRESP:
- /*
- * This should be in response to our GETNEXT.
- * Check the OIDs and go onto ILMI_RUNNING if
- * the address table is empty. We can cheat and
- * not check sequence numbers because we only send
- * the one GETNEXT request and ILMI says we shouldn't
- * have interleaved sessions.
- */
- /*
- * First look for empty table. If found, go to next state.
- */
- if ((Hdr->error == SNMP_ERR_NOSUCHNAME) ||
- ((Hdr->error == SNMP_ERR_NOERROR) &&
- ( oid_ncmp ( &Objids[ADDRESS_OBJID], &Hdr->head->oid,
- Objids[ADDRESS_OBJID].oid[0] ) == 1 ))) {
- ilmi_state[intf] = ILMI_RUNNING; /* ILMI_REG; */
- } else if (Hdr->error == SNMP_ERR_NOERROR) {
- /*
- * Check to see if this matches our address
- * and if so, that it's a VALID entry.
- */
- Atm_addr *aa;
- int l;
- int match = 1;
-
- aa = &Intf[intf].anp_addr;
- if ( aa->address_length == Hdr->head->oid.oid[13] ) {
- for ( l = 0; l < aa->address_length; l++ ) {
- if ( (int)((u_char *)(aa->address))[l] !=
- Hdr->head->oid.oid[14 + l] ) {
- match = 0;
- }
- }
- }
- if ( match ) {
- if ( Hdr->head->var.ival == 1 ) {
- ilmi_state[intf] = ILMI_RUNNING;
- }
- }
- }
- free_pdu ( Hdr );
- break;
- case PDU_TYPE_SET:
- /* Look for SET_PREFIX Objid */
- if ( oid_ncmp ( &Hdr->head->oid,
- &Objids[SETPFX_OBJID],
- Objids[SETPFX_OBJID].oid[0] ) == 0 ) {
- set_prefix ( &Hdr->head->oid, Hdr, intf );
- /* Reply to SET before sending our ADDRESS */
- build_pdu(Hdr, PDU_TYPE_GETRESP);
- send_resp( intf, Hdr, Resp_Buf );
- set_address ( Hdr, intf );
- } else {
- build_pdu(Hdr, PDU_TYPE_GETRESP);
- send_resp( intf, Hdr, Resp_Buf );
- }
- break;
- case PDU_TYPE_TRAP:
- /* Remote side wants us to start fresh */
- lmi_rcvcmd_trap(Hdr, intf);
- free_pdu ( Hdr );
- break;
- default:
- /* Ignore */
- free_pdu ( Hdr );
- break;
- }
- break;
- case ILMI_REG:
- break;
- case ILMI_RUNNING:
- /* We'll take anything here */
- switch ( Hdr->pdutype ) {
- case PDU_TYPE_GET:
- process_get ( Hdr, intf );
- break;
- case PDU_TYPE_GETRESP:
- /* Ignore GETRESPs */
- free_pdu ( Hdr );
- break;
- case PDU_TYPE_GETNEXT:
- lmi_rcvcmd_getnext(Hdr, intf);
- break;
- case PDU_TYPE_SET:
- /* Look for SET_PREFIX Objid */
- if ( oid_ncmp ( &Hdr->head->oid,
- &Objids[SETPFX_OBJID],
- Objids[SETPFX_OBJID].oid[0] ) == 0 ) {
- set_prefix ( &Hdr->head->oid, Hdr, intf );
- /* Reply to SET before sending our ADDRESS */
- build_pdu(Hdr, PDU_TYPE_GETRESP);
- send_resp( intf, Hdr, Resp_Buf );
- set_address ( Hdr, intf );
- } else {
- build_pdu(Hdr, PDU_TYPE_GETRESP);
- send_resp( intf, Hdr, Resp_Buf );
- }
- break;
- case PDU_TYPE_TRAP:
- lmi_rcvcmd_trap(Hdr, intf);
- free_pdu ( Hdr );
- break;
- }
- break;
- default:
- /* Unknown state */
- free_pdu ( Hdr );
- break;
- }
- } /* if n > 0 */
- } /* if received message */
- } /* for each interface */
- } /* for ever loop */
-
-}
-
-int
-main (int argc, char *argv[])
-{
- int c;
- int i;
- int Reset = 0; /* Should we send a coldStart and exit? */
-
- /*
- * What are we running as? (argv[0])
- */
- progname = strdup ( (char *)basename ( argv[0] ) );
- /*
- * What host are we
- */
- gethostname ( hostname, sizeof ( hostname ) );
-
- /*
- * Ilmid needs to run as root to set prefix
- */
- if ( getuid() != 0 ) {
- fprintf ( stderr, "%s: needs to run as root.\n", progname );
- exit ( -1 );
- }
-
- /*
- * Parse arguments
- */
- while ( ( c = getopt ( argc, argv, "d:fr" ) ) != -1 )
- switch ( c ) {
- case 'd':
- Debug_Level = atoi ( optarg );
- break;
- case 'f':
- foregnd++;
- break;
- case 'r':
- Reset++;
- break;
- case '?':
- fprintf ( stderr, "usage: %s [-d level] [-f] [-r]\n",
- progname );
- exit ( -1 );
-/* NOTREACHED */
- break;
- }
-
- /*
- * If we're not doing debugging, run in the background
- */
- if ( foregnd == 0 ) {
- if ( daemon ( 0, 0 ) )
- err ( 1, "Can't fork" );
- } /* else
- setbuf ( stdout, NULL ); */
-
- signal ( SIGUSR1, Increment_DL );
- signal ( SIGUSR2, Decrement_DL );
-
- /*
- * Open log file
- */
- if ( Debug_Level ) {
- if ( foregnd ) {
- Log = stderr;
- } else {
- if ( ( Log = fopen ( LOG_FILE, "a" ) ) == NULL )
- Log = NULL;
- }
- }
- if ( Log )
- setbuf ( Log, NULL );
-
- /*
- * Get our startup time
- */
- (void) gettimeofday ( &starttime, NULL );
- starttime.tv_sec--;
- starttime.tv_usec += 1000000;
-
- /* Randomize starting request ID */
- Req_ID = starttime.tv_sec;
-
- /*
- * Reset all the interface descriptors
- */
- for ( i = 0; i < MAX_UNITS; i++ ) {
- ilmi_fd[i] = -1;
- }
- /*
- * Try to open all the interfaces
- */
- ilmi_open ();
-
- /*
- * If we're just sending a coldStart end exiting...
- */
- if ( Reset ) {
- for ( i = 0; i < MAX_UNITS; i++ )
- if ( ilmi_fd[i] >= 0 ) {
- /* Build ColdStart TRAP header */
- ColdStart_Header = build_cold_start();
- build_pdu ( ColdStart_Header, PDU_TYPE_TRAP );
- send_resp ( i, ColdStart_Header, Resp_Buf );
- if ( Debug_Level > 1 && Log ) {
- write_timestamp();
- fprintf ( Log, "Close ilmi_fd[%d]: %d\n",
- i, ilmi_fd[i] );
- }
- close ( ilmi_fd[i] );
- }
- exit ( 2 );
- }
-
- ilmi_do_state();
-
- exit(0);
-}
OpenPOWER on IntegriCloud