summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-05-13 20:01:23 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-05-13 20:01:23 +0000
commit8eeb67728cc1db4007233f862c61376a094c9d41 (patch)
tree7db845e07d7a01a47427e8817aba6715251f0841
parentaee310d11e62a33c09bf7db1d034db8986155fae (diff)
xpp r5723: Includes, among others:
* New firmware protocol version: 3.0 . * New numbers for the device types: (e.g. in card_init* scripts) - FXS: 1 (was: 3) - FXO: 2 (was: 4) - BRI: 3 (was: 6 for TE, 7 for NT) - PRI: 4 (was: 9) * Init scripts of FXS and FXO modules are now written in Perl as well (be sure to have File::Basename, e.g: perl-modules in Debian). * calibrate_slics merged into init_card_1_30 . * Module parameter print_dbg replaced with debug . Same meaning. * init_fxo_modes removed: content moved into init_card_2_30, verified at build time. * Code tested with sparse. Most warnings were fixed. * Set ZT_SIG_DACS for the bchans in the PRI and BRI modules to not get ignored by ztscan. * Handle null config_desc we get from some crazy USB controllers. * genzaptelconf: Fix reporting of empty slots in list mode. * xpp_blink can now blink a single analog port. * "slics" has been renamed "chipregs". * Fixed a small typo in fpga_load(8). * Fixed bashism in xpp_fxloader. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.2@4264 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--xpp/.version2
-rw-r--r--xpp/Changelog_xpp24
-rw-r--r--xpp/README.Astribank60
-rw-r--r--xpp/card_bri.c824
-rw-r--r--xpp/card_fxo.c578
-rw-r--r--xpp/card_fxo.h3
-rw-r--r--xpp/card_fxs.c707
-rw-r--r--xpp/card_fxs.h3
-rw-r--r--xpp/card_global.c638
-rw-r--r--xpp/card_global.h47
-rw-r--r--xpp/card_pri.c464
-rw-r--r--xpp/firmwares/FPGA_1141.hex1263
-rw-r--r--xpp/firmwares/FPGA_1151.hex1350
-rw-r--r--xpp/firmwares/FPGA_FXS.hex1281
-rwxr-xr-xxpp/init_card_1_30535
-rwxr-xr-xxpp/init_card_2_30417
-rwxr-xr-xxpp/init_card_3_29193
-rwxr-xr-xxpp/init_card_3_30 (renamed from xpp/init_card_6_29)283
-rwxr-xr-xxpp/init_card_4_29165
-rwxr-xr-xxpp/init_card_4_30385
-rwxr-xr-xxpp/init_card_7_29434
-rwxr-xr-xxpp/init_card_9_29358
-rw-r--r--xpp/utils/Makefile12
-rw-r--r--xpp/utils/fpga_load.82
-rw-r--r--xpp/utils/fpga_load.c4
-rwxr-xr-xxpp/utils/genzaptelconf5
-rw-r--r--xpp/utils/print_modes.c23
-rwxr-xr-xxpp/utils/xpp_blink53
-rw-r--r--xpp/utils/xpp_fxloader11
-rw-r--r--xpp/utils/xpp_modprobe8
-rw-r--r--xpp/utils/zconf/Zaptel/Chans.pm15
-rw-r--r--xpp/utils/zconf/Zaptel/Xpp/Line.pm34
-rw-r--r--xpp/utils/zconf/Zaptel/Xpp/Xbus.pm3
-rw-r--r--xpp/utils/zconf/Zaptel/Xpp/Xpd.pm2
-rw-r--r--xpp/xbus-core.c548
-rw-r--r--xpp/xbus-core.h37
-rw-r--r--xpp/xbus-pcm.c48
-rw-r--r--xpp/xbus-sysfs.c8
-rw-r--r--xpp/xdefs.h8
-rw-r--r--xpp/xframe_queue.c19
-rw-r--r--xpp/xpd.h15
-rw-r--r--xpp/xpp_usb.c29
-rw-r--r--xpp/xpp_zap.c244
-rw-r--r--xpp/xpp_zap.h6
-rw-r--r--xpp/xproto.c102
-rw-r--r--xpp/xproto.h66
-rw-r--r--xpp/zap_debug.c2
-rw-r--r--xpp/zap_debug.h23
48 files changed, 5751 insertions, 5590 deletions
diff --git a/xpp/.version b/xpp/.version
index 40720e5..27a9d19 100644
--- a/xpp/.version
+++ b/xpp/.version
@@ -1 +1 @@
-trunk-r5566
+trunk-r5723
diff --git a/xpp/Changelog_xpp b/xpp/Changelog_xpp
index 487c603..52db601 100644
--- a/xpp/Changelog_xpp
+++ b/xpp/Changelog_xpp
@@ -1,3 +1,27 @@
+Tue, 13 May 2008 Oron Peled <oron@actcom.co.il> - xpp.r5723
+ * [A temporary changelog. More to come]
+ * New firmware protocol version: 3.0 .
+ * New numbers for the device types: (e.g. in card_init* scripts)
+ - FXS: 1 (was: 3)
+ - FXO: 2 (was: 4)
+ - BRI: 3 (was: 6 for TE, 7 for NT)
+ - PRI: 4 (was: 9)
+ * Init scripts of FXS and FXO modules are now written in Perl as well
+ (be sure to have File::Basename, e.g: perl-modules in Debian).
+ * calibrate_slics merged into init_card_1_30 .
+ * Module parameter print_dbg replaced with debug . Same meaning.
+ * init_fxo_modes removed: content moved into init_card_2_30, verified
+ at build time.
+ * Code tested with sparse. Most warnings were fixed.
+ * Set ZT_SIG_DACS for the bchans in the PRI and BRI modules to not get
+ ignored by ztscan.
+ * Handle null config_desc we get from some crazy USB controllers.
+ * genzaptelconf: Fix reporting of empty slots in list mode.
+ * xpp_blink can now blink a single analog port.
+ * "slics" has been renamed "chipregs".
+ * Fixed a small typo in fpga_load(8).
+ * Fixed bashism in xpp_fxloader.
+
Thu, 20 Mar 2008 Oron Peled <oron@actcom.co.il> - xpp.r5566
* Build:
- Zaptel >= 1.4.9 is migrating to storing kernel stuff in zaptel/kernel/*
diff --git a/xpp/README.Astribank b/xpp/README.Astribank
index 37af95b..5cf6804 100644
--- a/xpp/README.Astribank
+++ b/xpp/README.Astribank
@@ -588,6 +588,62 @@ Normaly this is not a problem. The driver will re-establish a connection
once a new call needs to be made.
+Both default and sysconfig Exist
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.Symptoms:
+The firmware fails to load. Manually running xpp_fxloader gives:
+
+ Both '/etc/default/zaptel' and '/etc/sysconfig/zaptel' exist
+
+Alternatively: an initialization script fails and gives the error
+
+ An '/etc/default/zaptel' collides with 'etc/sysconfig/zaptel'
+
+.Cause:
+/etc/default/<service name> is the place used in Debian-based
+systems for initialization scripts. /etc/sysconfig/<service name> is
+used in Redhat and similar for the same purpose. For historical reasons
+many of our programs read configuration from there: either from
+/etc/default/zaptel or from /etc/sysconfig/zaptel .
+
+The problem is what to do if both of those exist. Selecting an arbitrary
+one can lead to unexpected results. Likewise sourcing both of them.
+Therefore we prefer to fail in a noisy and expected way. In the future
+we will probably me to reading configuration from a file under /etc/zaptel .
+
+.Fix:
+Remove one of those two. There should be no reason to have both on the
+same system.
+
+
+Astribank not initialized: Premature packet end
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.Symptoms:
+After upgrading to Zaptel 1.4.12 / 1.2.25 the initialization of the
+Astribank times out. In the logs you see:
+
+ kernel: NOTICE-xpp: XBUS-00(00): FIRMWARE: ERROR_CODE CODE = 0x3 (Premature packet end)
+
+.Cause:
+When an Astribank is detected, the driver asks it what is its version
+and what components it has. Normally if the version of the firmware and
+of the driver does not match the driver gives an ugly message and fails
+the initialization.
+
+However in the change of the protocol between versions 2.9 (29) and 3.0
+(30), the response that the new driver recieves from a device with the
+old version is now considered to be an illegal packet and gets
+discarded. As a result, the Astribank waits till time-out for the
+initilization to end.
+
+.Fix:
+Reset the firmware of the Astribank by either:
+
+ /usr/share/zaptel/xpp_fxloader reset
+
+or disconnecting it from the power and reconnecting it.
+
+
Reference
---------
LEDs Indication
@@ -1254,7 +1310,7 @@ rx_tasklet (xpp)::
separate tasklets. This should probably help on higher-end systems with
multiple Astribanks.
-print_dbg (all modules)::
+debug (all modules)::
It will make the driver to print tons of debugging messages. You can
set/unset the parameter at run-time.
@@ -1274,7 +1330,7 @@ print_dbg (all modules)::
For example,
- echo 33 >/sys/modules/xpp/parameters/print_dbg
+ echo 33 >/sys/modules/xpp/parameters/debug
forces module xpp to print general debugging messages (1) and procfs
debugging messages (32).
diff --git a/xpp/card_bri.c b/xpp/card_bri.c
index c2be201..086dbea 100644
--- a/xpp/card_bri.c
+++ b/xpp/card_bri.c
@@ -31,7 +31,6 @@
#include "xpp_zap.h"
#include "card_bri.h"
#include "zap_debug.h"
-#include "xpd.h"
#include "xbus-core.h"
static const char rcsid[] = "$Id$";
@@ -40,9 +39,9 @@ static const char rcsid[] = "$Id$";
#error CONFIG_ZAPATA_BRI_DCHANS is not defined
#endif
-DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
-DEF_PARM(uint, poll_interval, 500, 0644, "Poll channel state interval in milliseconds (0 - disable)");
-DEF_PARM_BOOL(nt_keepalive, 1, 0644, "Force BRI_NT to keep trying connection");
+static DEF_PARM(int, debug, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
+static DEF_PARM(uint, poll_interval, 500, 0644, "Poll channel state interval in milliseconds (0 - disable)");
+static DEF_PARM_BOOL(nt_keepalive, 1, 0644, "Force BRI_NT to keep trying connection");
enum xhfc_states {
ST_RESET = 0, /* G/F0 */
@@ -61,7 +60,7 @@ enum xhfc_states {
ST_NT_DEACTIVTING = 4, /* G4 */
};
-static const char *xhfc_state_name(xpd_type_t xpd_type, enum xhfc_states state)
+static const char *xhfc_state_name(bool is_nt, enum xhfc_states state)
{
const char *p;
@@ -84,16 +83,16 @@ static const char *xhfc_state_name(xpd_type_t xpd_type, enum xhfc_states state)
_E(NT_DEACTIVTING),
};
#undef _E
- if(xpd_type == XPD_TYPE_BRI_TE) {
- if ((state < ST_RESET) || (state > ST_TE_LOST_FRAMING))
- p = "TE ???";
- else
- p = te_names[state];
- } else {
+ if(is_nt) {
if ((state < ST_RESET) || (state > ST_NT_DEACTIVTING))
p = "NT ???";
else
p = nt_names[state];
+ } else {
+ if ((state < ST_RESET) || (state > ST_TE_LOST_FRAMING))
+ p = "TE ???";
+ else
+ p = te_names[state];
}
return p;
}
@@ -106,9 +105,8 @@ static const char *xhfc_state_name(xpd_type_t xpd_type, enum xhfc_states state)
#define HFC_L1_ACTIVATING 1
#define HFC_L1_ACTIVATED 2
-#define TIMER_T1_MAX 2500
+#define HFC_TIMER_T1 2500
#define HFC_TIMER_T3 8000 /* 8s activation timer T3 */
-#define HFC_TIMER_T4 500 /* 500ms deactivation timer T4 */
#define HFC_TIMER_OFF -1 /* timer disabled */
#define A_SU_WR_STA 0x30 /* ST/Up state machine register */
@@ -145,9 +143,10 @@ typedef union {
ZT_SIG_CAS | \
ZT_SIG_SF \
)
-#define BRI_BCHAN_SIGCAP ZT_SIG_CLEAR
+#define BRI_BCHAN_SIGCAP (ZT_SIG_CLEAR | ZT_SIG_DACS)
-#define IS_NT(xpd) ((xpd)->type == XPD_TYPE_BRI_NT)
+#define IS_NT(xpd) ((xpd)->direction == TO_PHONE)
+#define BRI_PORT(xpd) ((xpd)->addr.subunit)
/* shift in PCM highway */
#define SUBUNIT_PCM_SHIFT 4
@@ -159,8 +158,6 @@ static int write_state_register(xpd_t *xpd, byte value);
static bool bri_packet_is_valid(xpacket_t *pack);
static void bri_packet_dump(const char *msg, xpacket_t *pack);
static int proc_bri_info_read(char *page, char **start, off_t off, int count, int *eof, void *data);
-static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data);
-static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
static int bri_spanconfig(struct zt_span *span, struct zt_lineconfig *lc);
static int bri_chanconfig(struct zt_chan *chan, int sigtype);
static int bri_startup(struct zt_span *span);
@@ -169,8 +166,6 @@ static int bri_shutdown(struct zt_span *span);
#define PROC_REGISTER_FNAME "slics"
#define PROC_BRI_INFO_FNAME "bri_info"
-#define VALID_CHIPSEL(x) ((x) == 0)
-
enum led_state {
BRI_LED_OFF = 0x0,
BRI_LED_ON = 0x1,
@@ -204,13 +199,11 @@ struct bri_leds {
#define DCHAN_BUFSIZE MAX_DFRAME_LEN_L1
struct BRI_priv_data {
- struct proc_dir_entry *regfile;
struct proc_dir_entry *bri_info;
su_rd_sta_t state_register;
bool initialized;
- int t1; /* timer 1 for NT deactivation */
- int t3; /* timer 3 for activation */
- int t4; /* timer 4 for deactivation */
+ int t1; /* timer 1 for NT deactivation */
+ int t3; /* timer 3 for TE activation */
ulong l1_flags;
bool reg30_good;
uint reg30_ticks;
@@ -225,8 +218,6 @@ struct BRI_priv_data {
byte dchan_tbuf[DCHAN_BUFSIZE];
bool txframe_begin;
- reg_cmd_t requested_reply;
- reg_cmd_t last_reply;
uint tick_counter;
uint poll_counter;
uint dchan_tx_counter;
@@ -239,8 +230,7 @@ struct BRI_priv_data {
enum led_state ledstate[NUM_LEDS];
};
-static xproto_table_t PROTO_TABLE(BRI_NT);
-static xproto_table_t PROTO_TABLE(BRI_TE);
+static xproto_table_t PROTO_TABLE(BRI);
DEF_RPACKET_DATA(BRI, SET_LED, /* Set one of the LED's */
@@ -300,17 +290,13 @@ static void dump_dchan_packet(xpd_t *xpd, bool transmit, byte *buf, int len)
dump_hex_buf(xpd, msgbuf, buf, len);
}
-static void layer1_state(xpd_t *xpd, bool up)
+static void set_bri_timer(xpd_t *xpd, const char *name, int *bri_timer, int value)
{
- struct BRI_priv_data *priv;
-
- BUG_ON(!xpd);
- priv = xpd->priv;
- BUG_ON(!priv);
- if(priv->layer1_up == up)
- return;
- priv->layer1_up = up;
- XPD_DBG(SIGNAL, xpd, "STATE CHANGE: Layer1 %s\n", (up)?"UP":"DOWN");
+ if(value == HFC_TIMER_OFF)
+ XPD_DBG(SIGNAL, xpd, "Timer %s DISABLE\n", name);
+ else
+ XPD_DBG(SIGNAL, xpd, "Timer %s: set to %d\n", name, value);
+ *bri_timer = value;
}
static void dchan_state(xpd_t *xpd, bool up)
@@ -333,42 +319,113 @@ static void dchan_state(xpd_t *xpd, bool up)
}
}
-static void xpd_activation(xpd_t *xpd, bool on)
+static void layer1_state(xpd_t *xpd, bool up)
+{
+ struct BRI_priv_data *priv;
+
+ BUG_ON(!xpd);
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ if(priv->layer1_up == up)
+ return;
+ priv->layer1_up = up;
+ XPD_DBG(SIGNAL, xpd, "STATE CHANGE: Layer1 %s\n", (up)?"UP":"DOWN");
+ if(!up)
+ dchan_state(xpd, 0);
+}
+
+static void te_activation(xpd_t *xpd, bool on)
{
struct BRI_priv_data *priv;
xbus_t *xbus;
+ byte curr_state;
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
+ curr_state = priv->state_register.bits.v_su_sta;
xbus = xpd->xbus;
XPD_DBG(SIGNAL, xpd, "%s\n", (on)?"ON":"OFF");
- switch(xpd->type) {
- case XPD_TYPE_BRI_TE:
- if(on) {
- XPD_DBG(SIGNAL, xpd, "HFC_L1_ACTIVATE_TE\n");
- set_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
- write_state_register(xpd, STA_ACTIVATE);
- priv->t3 = HFC_TIMER_T3;
- } else {
+ if(on) {
+ if(curr_state == ST_TE_DEACTIVATED) {
+ XPD_DBG(SIGNAL, xpd, "HFC_L1_ACTIVATE_TE\n");
+ set_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
+ write_state_register(xpd, STA_ACTIVATE);
+ set_bri_timer(xpd, "T3", &priv->t3, HFC_TIMER_T3);
+ } else {
+ XPD_DBG(SIGNAL, xpd,
+ "HFC_L1_ACTIVATE_TE (state %d, ignored)\n",
+ curr_state);
+ }
+ } else { /* happen only because of T3 expiry */
+ switch (curr_state) {
+ case ST_TE_DEACTIVATED: /* F3 */
+ case ST_TE_SYNCED: /* F6 */
+ case ST_TE_ACTIVATED: /* F7 */
+ XPD_DBG(SIGNAL, xpd,
+ "HFC_L1_FORCE_DEACTIVATE_TE (state %d, ignored)\n",
+ curr_state);
+ break;
+ case ST_TE_SIGWAIT: /* F4 */
+ case ST_TE_IDENT: /* F5 */
+ case ST_TE_LOST_FRAMING: /* F8 */
XPD_DBG(SIGNAL, xpd, "HFC_L1_FORCE_DEACTIVATE_TE\n");
write_state_register(xpd, STA_DEACTIVATE);
- }
- break;
- case XPD_TYPE_BRI_NT:
- if(on) {
+ break;
+ default:
+ XPD_NOTICE(xpd, "Bad TE state: %d\n", curr_state);
+ break;
+ }
+ }
+}
+
+static void nt_activation(xpd_t *xpd, bool on)
+{
+ struct BRI_priv_data *priv;
+ xbus_t *xbus;
+ byte curr_state;
+
+ BUG_ON(!xpd);
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ curr_state = priv->state_register.bits.v_su_sta;
+ xbus = xpd->xbus;
+ XPD_DBG(SIGNAL, xpd, "%s\n", (on)?"ON":"OFF");
+ if(on) {
+ switch(curr_state) {
+ case ST_RESET: /* F/G 0 */
+ case ST_NT_DEACTIVATED: /* G1 */
+ case ST_NT_DEACTIVTING: /* G4 */
XPD_DBG(SIGNAL, xpd, "HFC_L1_ACTIVATE_NT\n");
- priv->t1 = TIMER_T1_MAX;
+ set_bri_timer(xpd, "T1", &priv->t1, HFC_TIMER_T1);
set_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
- write_state_register(xpd, STA_ACTIVATE | V_SU_SET_G2_G3);
- } else {
+ write_state_register(xpd, STA_ACTIVATE);
+ break;
+ case ST_NT_ACTIVATING: /* G2 */
+ case ST_NT_ACTIVATED: /* G3 */
+ XPD_DBG(SIGNAL, xpd,
+ "HFC_L1_ACTIVATE_NT (in state %d, ignored)\n",
+ curr_state);
+ break;
+ }
+ } else {
+ switch(curr_state) {
+ case ST_RESET: /* F/G 0 */
+ case ST_NT_DEACTIVATED: /* G1 */
+ case ST_NT_DEACTIVTING: /* G4 */
+ XPD_DBG(SIGNAL, xpd,
+ "HFC_L1_DEACTIVATE_NT (in state %d, ignored)\n",
+ curr_state);
+ break;
+ case ST_NT_ACTIVATING: /* G2 */
+ case ST_NT_ACTIVATED: /* G3 */
XPD_DBG(SIGNAL, xpd, "HFC_L1_DEACTIVATE_NT\n");
write_state_register(xpd, STA_DEACTIVATE);
- }
- break;
- default:
- XPD_ERR(xpd, "%s: Bad xpd type %d\n", __FUNCTION__, xpd->type);
- BUG();
+ break;
+ default:
+ XPD_NOTICE(xpd, "Bad NT state: %d\n", curr_state);
+ break;
+ }
}
}
@@ -445,7 +502,7 @@ static int rx_dchan(xpd_t *xpd, reg_cmd_t *regcmd)
ret = -EPROTO;
goto drop;
}
- if(print_dbg)
+ if(debug)
dump_dchan_packet(xpd, 0, dchan_buf, idx /* - 3 */); /* Print checksum? */
/*
* Tell Zaptel that we received idx-1 bytes. They include the data and a 2-byte checksum.
@@ -462,47 +519,6 @@ out:
return ret;
}
-static int send_bri_multibyte(xpd_t *xpd, byte *buf, int len, bool eoftx)
-{
- xbus_t *xbus = xpd->xbus;
- xframe_t *xframe;
- xpacket_t *pack;
- reg_cmd_t *reg_cmd;
- int ret;
-
- BUG_ON(len < 0);
- /*
- * Zero length multibyte is legal and has special meaning for the
- * firmware:
- * eoftx==1: Start sending us D-channel packets.
- * eoftx==0: Stop sending us D-channel packets.
- */
- if(len > MULTIBYTE_MAX_LEN) {
- XPD_ERR(xpd, "%s: len=%d is too long. dropping.\n", __FUNCTION__, len);
- return -EINVAL;
- }
- XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, xpd->xbus_idx);
- reg_cmd = &RPACKET_FIELD(pack, GLOBAL, REGISTER_REQUEST, reg_cmd);
- reg_cmd->bytes = len;
- reg_cmd->eoframe = eoftx;
- reg_cmd->multibyte = 1;
- if(len > 0) {
- memcpy(REG_XDATA(reg_cmd), (byte *)buf, len);
- } else {
- XPD_DBG(REGS, xpd, "Magic Packet (eoftx=%d)\n", eoftx);
- }
-#ifdef XPP_DEBUGFS
- xbus_log(xbus, xpd, 1, reg_cmd, sizeof(reg_cmd_t)); /* 1 = TX */
-#else
- if(print_dbg)
- dump_xframe("SEND_BRI_MULTI", xbus, xframe, print_dbg);
-#endif
- ret = send_cmd_frame(xbus, xframe);
- if(ret < 0)
- XPD_NOTICE(xpd, "%s: failed sending xframe\n", __FUNCTION__);
- return ret;
-}
-
/*
* D-Chan transmit
*/
@@ -516,29 +532,6 @@ static int tx_dchan(xpd_t *xpd)
priv = xpd->priv;
BUG_ON(!priv);
- if(!IS_NT(xpd)) {
- static int rate_limit;
-
- if (priv->t3 > HFC_TIMER_OFF) {
- /* timer expired ? */
- if (--priv->t3 == 0) {
- if ((rate_limit % 1003) >= 5)
- XPD_DBG(SIGNAL, xpd, "T3 expired\n");
- priv->t3 = HFC_TIMER_OFF;
- clear_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
- xpd_activation(xpd, 0); /* Deactivate TE */
- }
- }
- if (priv->t4 > HFC_TIMER_OFF) {
- /* timer expired ? */
- if (--priv->t4 == 0) {
- if ((rate_limit % 1003) >= 5)
- XPD_DBG(SIGNAL, xpd, "T4 expired\n");
- priv->t4 = HFC_TIMER_OFF;
- }
- }
- rate_limit++;
- }
if(!SPAN_REGISTERED(xpd) || !(xpd->span.flags & ZT_FLAG_RUNNING))
return 0;
dchan = &xpd->chans[2];
@@ -556,16 +549,20 @@ static int tx_dchan(xpd_t *xpd)
}
if(!test_bit(HFC_L1_ACTIVATED, &priv->l1_flags) && !test_bit(HFC_L1_ACTIVATING, &priv->l1_flags)) {
XPD_DBG(SIGNAL, xpd, "Want to transmit: Kick D-Channel transmiter\n");
- xpd_activation(xpd, 1);
+ if(xpd->direction == TO_PSTN)
+ te_activation(xpd, 1);
+ else
+ nt_activation(xpd, 1);
return 0;
}
- if(print_dbg)
+ if(debug)
dump_dchan_packet(xpd, 1, priv->dchan_tbuf, len);
if(eoframe)
priv->txframe_begin = 1;
else
priv->txframe_begin = 0;
- ret = send_bri_multibyte(xpd, priv->dchan_tbuf, len, eoframe);
+ ret = send_multibyte_request(xpd->xbus, xpd->addr.unit, xpd->addr.subunit,
+ eoframe, priv->dchan_tbuf, len);
if(ret < 0)
XPD_NOTICE(xpd, "%s: failed sending xframe\n", __FUNCTION__);
if(eoframe)
@@ -576,22 +573,7 @@ static int tx_dchan(xpd_t *xpd)
/*---------------- BRI: Methods -------------------------------------------*/
-static xpd_t *BRI_card_new(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, byte revision)
-{
- xpd_t *xpd = NULL;
- int channels = min(3, CHANNELS_PERXPD);
-
- XBUS_DBG(GENERAL, xbus, "\n");
- xpd = xpd_alloc(sizeof(struct BRI_priv_data), proto_table, channels);
- if(!xpd)
- return NULL;
- xpd->direction = (proto_table == &PROTO_TABLE(BRI_NT)) ? TO_PHONE : TO_PSTN;
- xpd->revision = revision;
- xpd->type_name = proto_table->name;
- return xpd;
-}
-
-static void clean_proc(xbus_t *xbus, xpd_t *xpd)
+static void bri_proc_remove(xbus_t *xbus, xpd_t *xpd)
{
struct BRI_priv_data *priv;
@@ -599,57 +581,67 @@ static void clean_proc(xbus_t *xbus, xpd_t *xpd)
priv = xpd->priv;
XPD_DBG(PROC, xpd, "\n");
#ifdef CONFIG_PROC_FS
- if(priv->regfile) {
- XPD_DBG(PROC, xpd, "Removing registers file\n");
- priv->regfile->data = NULL;
- remove_proc_entry(PROC_REGISTER_FNAME, xpd->proc_xpd_dir);
- }
if(priv->bri_info) {
- XPD_DBG(PROC, xpd, "Removing xpd BRI_INFO file\n");
+ XPD_DBG(PROC, xpd, "Removing '%s'\n", PROC_BRI_INFO_FNAME);
remove_proc_entry(PROC_BRI_INFO_FNAME, xpd->proc_xpd_dir);
}
#endif
}
-static int BRI_card_init(xbus_t *xbus, xpd_t *xpd)
+static int bri_proc_create(xbus_t *xbus, xpd_t *xpd)
{
struct BRI_priv_data *priv;
- int ret = 0;
BUG_ON(!xpd);
- XPD_DBG(GENERAL, xpd, "\n");
priv = xpd->priv;
+ XPD_DBG(PROC, xpd, "\n");
#ifdef CONFIG_PROC_FS
- XPD_DBG(PROC, xpd, "Creating BRI_INFO file\n");
+ XPD_DBG(PROC, xpd, "Creating '%s'\n", PROC_BRI_INFO_FNAME);
priv->bri_info = create_proc_read_entry(PROC_BRI_INFO_FNAME, 0444, xpd->proc_xpd_dir, proc_bri_info_read, xpd);
if(!priv->bri_info) {
XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_BRI_INFO_FNAME);
- ret = -ENOENT;
goto err;
}
priv->bri_info->owner = THIS_MODULE;
- XPD_DBG(PROC, xpd, "Creating registers file\n");
- priv->regfile = create_proc_entry(PROC_REGISTER_FNAME, 0644, xpd->proc_xpd_dir);
- if(!priv->regfile) {
- XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_REGISTER_FNAME);
- goto err;
- }
- priv->regfile->owner = THIS_MODULE;
- priv->regfile->write_proc = proc_xpd_register_write;
- priv->regfile->read_proc = proc_xpd_register_read;
- priv->regfile->data = xpd;
#endif
- priv->t1 = HFC_TIMER_OFF;
- ret = run_initialize_registers(xpd);
- if(ret < 0)
+ return 0;
+err:
+ bri_proc_remove(xbus, xpd);
+ return -EINVAL;
+}
+
+static xpd_t *BRI_card_new(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, int subunits, bool to_phone)
+{
+ xpd_t *xpd = NULL;
+ int channels = min(3, CHANNELS_PERXPD);
+
+ XBUS_DBG(GENERAL, xbus, "\n");
+ xpd = xpd_alloc(sizeof(struct BRI_priv_data), proto_table, channels);
+ if(!xpd)
+ return NULL;
+ xpd->direction = (to_phone) ? TO_PHONE : TO_PSTN;
+ xpd->type_name = (to_phone) ? "BRI_NT" : "BRI_TE";
+ if(xpd_common_init(xbus, xpd, unit, subunit, subtype, subunits) < 0)
goto err;
- XPD_DBG(PROC, xpd, "done\n");
+ if(bri_proc_create(xbus, xpd) < 0)
+ goto err;
+ return xpd;
+err:
+ xpd_free(xpd);
+ return NULL;
+}
+
+static int BRI_card_init(xbus_t *xbus, xpd_t *xpd)
+{
+ struct BRI_priv_data *priv;
+
+ BUG_ON(!xpd);
+ XPD_DBG(GENERAL, xpd, "\n");
+ priv = xpd->priv;
+ set_bri_timer(xpd, "T1", &priv->t1, HFC_TIMER_OFF);
+ write_state_register(xpd, 0); /* Enable L1 state machine */
priv->initialized = 1;
return 0;
-err:
- clean_proc(xbus, xpd);
- XPD_ERR(xpd, "Failed initializing registers (%d)\n", ret);
- return ret;
}
static int BRI_card_remove(xbus_t *xbus, xpd_t *xpd)
@@ -659,7 +651,7 @@ static int BRI_card_remove(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
XPD_DBG(GENERAL, xpd, "\n");
- clean_proc(xbus, xpd);
+ bri_proc_remove(xbus, xpd);
return 0;
}
@@ -692,7 +684,7 @@ static int BRI_card_zaptel_preregistration(xpd_t *xpd, bool on)
XPD_DBG(GENERAL, xpd, "setting BRI channel %d\n", i);
snprintf(cur_chan->name, MAX_CHANNAME, "XPP_%s/%02d/%1d%1d/%d",
- xpd->xproto->name, xbus->num,
+ xpd->type_name, xbus->num,
xpd->addr.unit, xpd->addr.subunit, i);
cur_chan->chanpos = i + 1;
cur_chan->pvt = xpd;
@@ -832,6 +824,42 @@ static void handle_leds(xbus_t *xbus, xpd_t *xpd)
}
}
+static void handle_bri_timers(xpd_t *xpd)
+{
+ struct BRI_priv_data *priv;
+
+ BUG_ON(!xpd);
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ if(IS_NT(xpd)) {
+ if (priv->t1 > HFC_TIMER_OFF) {
+ if (--priv->t1 == 0) {
+ set_bri_timer(xpd, "T1", &priv->t1, HFC_TIMER_OFF);
+ if(!nt_keepalive) {
+ if(priv->state_register.bits.v_su_sta == ST_NT_ACTIVATING) { /* G2 */
+ XPD_DBG(SIGNAL, xpd, "T1 Expired. Deactivate NT\n");
+ clear_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
+ nt_activation(xpd, 0); /* Deactivate NT */
+ } else
+ XPD_DBG(SIGNAL, xpd,
+ "T1 Expired. (state %d, ignored)\n",
+ priv->state_register.bits.v_su_sta);
+ }
+ }
+ }
+ } else {
+ if (priv->t3 > HFC_TIMER_OFF) {
+ /* timer expired ? */
+ if (--priv->t3 == 0) {
+ XPD_DBG(SIGNAL, xpd, "T3 expired. Deactivate TE\n");
+ set_bri_timer(xpd, "T3", &priv->t3, HFC_TIMER_OFF);
+ clear_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
+ te_activation(xpd, 0); /* Deactivate TE */
+ }
+ }
+ }
+}
+
/* Poll the register ST/Up-State-machine Register, to see if the cable
* if a cable is connected to the port.
*/
@@ -847,13 +875,23 @@ static int BRI_card_tick(xbus_t *xbus, xpd_t *xpd)
if(poll_interval != 0 && (priv->tick_counter % poll_interval) == 0) {
// XPD_DBG(GENERAL, xpd, "%d\n", priv->tick_counter);
priv->poll_counter++;
- xpp_register_request(xbus, xpd, 0, 0, 0, A_SU_RD_STA, 0, 0, 0);
+ xpp_register_request(xbus, xpd,
+ BRI_PORT(xpd), /* portno */
+ 0, /* writing */
+ A_SU_RD_STA, /* regnum */
+ 0, /* do_subreg */
+ 0, /* subreg */
+ 0, /* data_low */
+ 0, /* do_datah */
+ 0, /* data_high */
+ 0 /* should_reply */
+ );
if(IS_NT(xpd) && nt_keepalive &&
!test_bit(HFC_L1_ACTIVATED, &priv->l1_flags) &&
!test_bit(HFC_L1_ACTIVATING, &priv->l1_flags)) {
XPD_DBG(SIGNAL, xpd, "Kick NT D-Channel\n");
- xpd_activation(xpd, 1);
+ nt_activation(xpd, 1);
}
}
/* Detect D-Channel disconnect heuristic */
@@ -876,21 +914,10 @@ static int BRI_card_tick(xbus_t *xbus, xpd_t *xpd)
XPD_ERR(xpd, "Lost state tracking for %d ticks\n", priv->reg30_ticks);
priv->reg30_good = 0;
layer1_state(xpd, 0);
- dchan_state(xpd, 0);
}
handle_leds(xbus, xpd);
+ handle_bri_timers(xpd);
tx_dchan(xpd);
- /* Detect T1 timer expiry on NT */
- if(IS_NT(xpd) && !nt_keepalive) {
- if (priv->t1 > HFC_TIMER_OFF) {
- if (--priv->t1 == 0) {
- XPD_DBG(SIGNAL, xpd, "T1 Expired. Deactivate NT\n");
- priv->t1 = HFC_TIMER_OFF;
- clear_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
- write_state_register(xpd, STA_DEACTIVATE);
- }
- }
- }
priv->tick_counter++;
priv->reg30_ticks++;
return 0;
@@ -1003,8 +1030,6 @@ static int bri_startup(struct zt_span *span)
XPD_DBG(GENERAL, xpd, "STARTUP\n");
// Turn on all channels
CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 1);
- write_state_register(xpd, 0); /* Enable L1 state machine */
- xpd_activation(xpd, 1);
if(SPAN_REGISTERED(xpd)) {
dchan = &span->chans[2];
span->flags |= ZT_FLAG_RUNNING;
@@ -1038,8 +1063,6 @@ static int bri_shutdown(struct zt_span *span)
XPD_DBG(GENERAL, xpd, "SHUTDOWN\n");
// Turn off all channels
CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 0);
- if(IS_NT(xpd))
- xpd_activation(xpd, 0);
return 0;
}
@@ -1134,24 +1157,23 @@ static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
static /* 0x0F */ HOSTCMD(BRI, XPD_STATE, bool on)
{
+ struct BRI_priv_data *priv;
+
BUG_ON(!xpd);
+ priv = xpd->priv;
XPD_DBG(GENERAL, xpd, "%s\n", (on)?"ON":"OFF");
- xpd_activation(xpd, on);
+ if(on) {
+ if(!test_bit(HFC_L1_ACTIVATED, &priv->l1_flags)) {
+ if(xpd->direction == TO_PSTN)
+ te_activation(xpd, 1);
+ else
+ nt_activation(xpd, 1);
+ }
+ } else if(IS_NT(xpd))
+ nt_activation(xpd, 0);
return 0;
}
-static /* 0x0F */ HOSTCMD(BRI, RING, lineno_t chan, bool on)
-{
- XPD_ERR(xpd, "%s: Unsupported\n", __FUNCTION__);
- return -ENOSYS;
-}
-
-static /* 0x0F */ HOSTCMD(BRI, RELAY_OUT, byte which, bool on)
-{
- XPD_ERR(xpd, "%s: Unsupported\n", __FUNCTION__);
- return -ENOSYS;
-}
-
static /* 0x33 */ HOSTCMD(BRI, SET_LED, enum bri_led_names which_led, enum led_state to_led_state)
{
int ret = 0;
@@ -1182,13 +1204,15 @@ static int write_state_register(xpd_t *xpd, byte value)
XPD_DBG(REGS, xpd, "value = 0x%02X\n", value);
ret = xpp_register_request(xpd->xbus, xpd,
- 0, /* chipsel */
+ BRI_PORT(xpd), /* portno */
1, /* writing */
- 0, /* do_subreg */
A_SU_WR_STA, /* regnum */
+ 0, /* do_subreg */
0, /* subreg */
value, /* data_low */
- 0 /* data_high */
+ 0, /* do_datah */
+ 0, /* data_high */
+ 0 /* should_reply */
);
return ret;
}
@@ -1209,105 +1233,87 @@ static void su_new_state(xpd_t *xpd, byte reg_x30)
return;
}
new_state.reg = reg_x30;
+ if(new_state.bits.v_su_t2_exp) {
+ XPD_NOTICE(xpd, "T2 Expired\n");
+ }
priv->reg30_ticks = 0;
priv->reg30_good = 1;
- if((!IS_NT(xpd) && new_state.bits.v_su_sta == ST_TE_ACTIVATED) ||
- (IS_NT(xpd) && new_state.bits.v_su_sta == ST_NT_ACTIVATED)) {
- if(!priv->layer1_up) {
- layer1_state(xpd, 1);
- update_xpd_status(xpd, ZT_ALARM_NONE);
- }
- } else {
- /*
- * Layer 1 disconnected
- */
- if(priv->layer1_up) {
- layer1_state(xpd, 0);
- dchan_state(xpd, 0);
- }
- /*
- * Do NOT notify Zaptel about the disconnection.
- * If we do, Asterisk stops transmitting on the D-channel and
- * we can't reactivate layer-1.
- * Without the notification, Asterisk thinks that we are active
- * (although the PSTN stopped layer-1) and on call setup, sends
- * us D-channel data, which triggers the layer-1 activation.
- */
-#if 0
- update_xpd_status(xpd, ZT_ALARM_RED);
-#endif
- }
if (priv->state_register.bits.v_su_sta == new_state.bits.v_su_sta)
return; /* same same */
- DBG(SIGNAL, "%02X ---> %02X\n", priv->state_register.reg, reg_x30);
- XPD_DBG(SIGNAL, xpd, "%s%i\n", IS_NT(xpd)?"G":"F", new_state.bits.v_su_sta);
-
+ XPD_DBG(SIGNAL, xpd, "%02X ---> %02X (info0=%d) (%s%i)\n",
+ priv->state_register.reg,
+ reg_x30,
+ new_state.bits.v_su_info0,
+ IS_NT(xpd)?"G":"F",
+ new_state.bits.v_su_sta);
if(!IS_NT(xpd)) {
- /* disable T3 ? */
- if ((new_state.bits.v_su_sta <= ST_TE_DEACTIVATED) || (new_state.bits.v_su_sta >= ST_TE_ACTIVATED)) {
- XPD_DBG(SIGNAL, xpd, "Disable T3 ?\n");
- priv->t3 = HFC_TIMER_OFF;
- }
switch (new_state.bits.v_su_sta) {
case ST_TE_DEACTIVATED: /* F3 */
XPD_DBG(SIGNAL, xpd, "State ST_TE_DEACTIVATED (F3)\n");
- if (test_and_clear_bit(HFC_L1_ACTIVATED, &priv->l1_flags))
- priv->t4 = HFC_TIMER_T4;
+ clear_bit(HFC_L1_ACTIVATED, &priv->l1_flags);
+ layer1_state(xpd, 0);
break;
case ST_TE_SIGWAIT: /* F4 */
XPD_DBG(SIGNAL, xpd, "State ST_TE_SIGWAIT (F4)\n");
+ layer1_state(xpd, 0);
break;
case ST_TE_IDENT: /* F5 */
XPD_DBG(SIGNAL, xpd, "State ST_TE_IDENT (F5)\n");
+ layer1_state(xpd, 0);
break;
case ST_TE_SYNCED: /* F6 */
XPD_DBG(SIGNAL, xpd, "State ST_TE_SYNCED (F6)\n");
+ layer1_state(xpd, 0);
break;
case ST_TE_ACTIVATED: /* F7 */
XPD_DBG(SIGNAL, xpd, "State ST_TE_ACTIVATED (F7)\n");
- if (priv->t4 > HFC_TIMER_OFF)
- priv->t4 = HFC_TIMER_OFF;
+ set_bri_timer(xpd, "T3", &priv->t3, HFC_TIMER_OFF);
clear_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
set_bit(HFC_L1_ACTIVATED, &priv->l1_flags);
+ layer1_state(xpd, 1);
update_xpd_status(xpd, ZT_ALARM_NONE);
break;
-
case ST_TE_LOST_FRAMING: /* F8 */
XPD_DBG(SIGNAL, xpd, "State ST_TE_LOST_FRAMING (F8)\n");
- priv->t4 = HFC_TIMER_OFF;
+ layer1_state(xpd, 0);
break;
default:
XPD_NOTICE(xpd, "Bad TE state: %d\n", new_state.bits.v_su_sta);
break;
}
- } else if(IS_NT(xpd)) {
+ } else {
switch (new_state.bits.v_su_sta) {
case ST_NT_DEACTIVATED: /* G1 */
XPD_DBG(SIGNAL, xpd, "State ST_NT_DEACTIVATED (G1)\n");
clear_bit(HFC_L1_ACTIVATED, &priv->l1_flags);
- priv->t1 = HFC_TIMER_OFF;
+ set_bri_timer(xpd, "T1", &priv->t1, HFC_TIMER_OFF);
+ layer1_state(xpd, 0);
break;
case ST_NT_ACTIVATING: /* G2 */
XPD_DBG(SIGNAL, xpd, "State ST_NT_ACTIVATING (G2)\n");
- xpd_activation(xpd, 1);
+ layer1_state(xpd, 0);
+ if(!test_bit(HFC_L1_ACTIVATED, &priv->l1_flags))
+ nt_activation(xpd, 1);
break;
case ST_NT_ACTIVATED: /* G3 */
XPD_DBG(SIGNAL, xpd, "State ST_NT_ACTIVATED (G3)\n");
clear_bit(HFC_L1_ACTIVATING, &priv->l1_flags);
set_bit(HFC_L1_ACTIVATED, &priv->l1_flags);
- priv->t1 = HFC_TIMER_OFF;
+ set_bri_timer(xpd, "T1", &priv->t1, HFC_TIMER_OFF);
+ layer1_state(xpd, 1);
+ update_xpd_status(xpd, ZT_ALARM_NONE);
break;
case ST_NT_DEACTIVTING: /* G4 */
XPD_DBG(SIGNAL, xpd, "State ST_NT_DEACTIVTING (G4)\n");
- priv->t1 = HFC_TIMER_OFF;
+ set_bri_timer(xpd, "T1", &priv->t1, HFC_TIMER_OFF);
+ layer1_state(xpd, 0);
break;
default:
XPD_NOTICE(xpd, "Bad NT state: %d\n", new_state.bits.v_su_sta);
break;
}
- } else
- XPD_ERR(xpd, "%s: Unknown xpd type %d\n", __FUNCTION__, xpd->type);
+ }
priv->state_register.reg = new_state.reg;
}
@@ -1315,20 +1321,37 @@ static int BRI_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
{
unsigned long flags;
struct BRI_priv_data *priv;
+ struct xpd_addr addr;
+ xpd_t *orig_xpd;
int ret;
+ /* Map UNIT + PORTNUM to XPD */
+ orig_xpd = xpd;
+ addr.unit = orig_xpd->addr.unit;
+ addr.subunit = info->portnum;
+ xpd = xpd_byaddr(xbus, addr.unit, addr.subunit);
+ if(!xpd) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) < 5)
+ notify_bad_xpd(__FUNCTION__, xbus, addr , orig_xpd->xpdname);
+ return -EPROTO;
+ }
spin_lock_irqsave(&xpd->lock, flags);
priv = xpd->priv;
BUG_ON(!priv);
if(REG_FIELD(info, do_subreg)) {
- XPD_DBG(REGS, xpd, "RS %02X %02X %02X\n",
+ XPD_DBG(REGS, xpd, "RI %02X %02X %02X\n",
REG_FIELD(info, regnum), REG_FIELD(info, subreg), REG_FIELD(info, data_low));
} else {
if (REG_FIELD(info, regnum) != A_SU_RD_STA)
XPD_DBG(REGS, xpd, "RD %02X %02X\n",
REG_FIELD(info, regnum), REG_FIELD(info, data_low));
+ else
+ XPD_DBG(REGS, xpd, "Got SU_RD_STA=%02X\n",
+ REG_FIELD(info, data_low));
}
- if(info->multibyte) {
+ if(info->is_multibyte) {
XPD_DBG(REGS, xpd, "Got Multibyte: %d bytes, eoframe: %d\n",
info->bytes, info->eoframe);
ret = rx_dchan(xpd, info);
@@ -1345,10 +1368,10 @@ static int BRI_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
/* Update /proc info only if reply relate to the last slic read request */
if(
- REG_FIELD(&priv->requested_reply, regnum) == REG_FIELD(info, regnum) &&
- REG_FIELD(&priv->requested_reply, do_subreg) == REG_FIELD(info, do_subreg) &&
- REG_FIELD(&priv->requested_reply, subreg) == REG_FIELD(info, subreg)) {
- priv->last_reply = *info;
+ REG_FIELD(&xpd->requested_reply, regnum) == REG_FIELD(info, regnum) &&
+ REG_FIELD(&xpd->requested_reply, do_subreg) == REG_FIELD(info, do_subreg) &&
+ REG_FIELD(&xpd->requested_reply, subreg) == REG_FIELD(info, subreg)) {
+ xpd->last_reply = *info;
}
end:
@@ -1356,13 +1379,14 @@ end:
return 0;
}
-static xproto_table_t PROTO_TABLE(BRI_NT) = {
+static xproto_table_t PROTO_TABLE(BRI) = {
.owner = THIS_MODULE,
.entries = {
/* Table Card Opcode */
},
- .name = "BRI_NT",
- .type = XPD_TYPE_BRI_NT,
+ .name = "BRI", /* protocol name */
+ .ports_per_subunit = 1,
+ .type = XPD_TYPE_BRI,
.xops = {
.card_new = BRI_card_new,
.card_init = BRI_card_init,
@@ -1377,37 +1401,6 @@ static xproto_table_t PROTO_TABLE(BRI_NT) = {
.card_close = BRI_card_close,
.card_register_reply = BRI_card_register_reply,
- .RING = XPROTO_CALLER(BRI, RING),
- .RELAY_OUT = XPROTO_CALLER(BRI, RELAY_OUT),
- .XPD_STATE = XPROTO_CALLER(BRI, XPD_STATE),
- },
- .packet_is_valid = bri_packet_is_valid,
- .packet_dump = bri_packet_dump,
-};
-
-static xproto_table_t PROTO_TABLE(BRI_TE) = {
- .owner = THIS_MODULE,
- .entries = {
- /* Table Card Opcode */
- },
- .name = "BRI_TE",
- .type = XPD_TYPE_BRI_TE,
- .xops = {
- .card_new = BRI_card_new,
- .card_init = BRI_card_init,
- .card_remove = BRI_card_remove,
- .card_zaptel_preregistration = BRI_card_zaptel_preregistration,
- .card_zaptel_postregistration = BRI_card_zaptel_postregistration,
- .card_hooksig = BRI_card_hooksig,
- .card_tick = BRI_card_tick,
- .card_pcm_fromspan = BRI_card_pcm_fromspan,
- .card_pcm_tospan = BRI_card_pcm_tospan,
- .card_ioctl = BRI_card_ioctl,
- .card_close = BRI_card_close,
- .card_register_reply = BRI_card_register_reply,
-
- .RING = XPROTO_CALLER(BRI, RING),
- .RELAY_OUT = XPROTO_CALLER(BRI, RELAY_OUT),
.XPD_STATE = XPROTO_CALLER(BRI, XPD_STATE),
},
.packet_is_valid = bri_packet_is_valid,
@@ -1416,12 +1409,10 @@ static xproto_table_t PROTO_TABLE(BRI_TE) = {
static bool bri_packet_is_valid(xpacket_t *pack)
{
- const xproto_entry_t *xe_nt = NULL;
- const xproto_entry_t *xe_te = NULL;
+ const xproto_entry_t *xe = NULL;
// DBG(GENERAL, "\n");
- xe_nt = xproto_card_entry(&PROTO_TABLE(BRI_NT), XPACKET_OP(pack));
- xe_te = xproto_card_entry(&PROTO_TABLE(BRI_TE), XPACKET_OP(pack));
- return xe_nt != NULL || xe_te != NULL;
+ xe = xproto_card_entry(&PROTO_TABLE(BRI), XPACKET_OP(pack));
+ return xe != NULL;
}
static void bri_packet_dump(const char *msg, xpacket_t *pack)
@@ -1449,15 +1440,18 @@ static int proc_bri_info_read(char *page, char **start, off_t off, int count, in
len += sprintf(page + len, "%c%d %-15s -- fr_sync=%d t2_exp=%d info0=%d g2_g3=%d\n",
IS_NT(xpd)?'G':'F',
priv->state_register.bits.v_su_sta,
- xhfc_state_name(xpd->type, priv->state_register.bits.v_su_sta),
+ xhfc_state_name(IS_NT(xpd), priv->state_register.bits.v_su_sta),
priv->state_register.bits.v_su_fr_sync,
priv->state_register.bits.v_su_t2_exp,
priv->state_register.bits.v_su_info0,
priv->state_register.bits.v_g2_g3);
} else
len += sprintf(page + len, "Unkown\n");
- if(IS_NT(xpd))
+ if(IS_NT(xpd)) {
len += sprintf(page + len, "T1 Timer: %d\n", priv->t1);
+ } else {
+ len += sprintf(page + len, "T3 Timer: %d\n", priv->t3);
+ }
len += sprintf(page + len, "Tick Counter: %d\n", priv->tick_counter);
len += sprintf(page + len, "Last Poll Reply: %d ticks ago\n", priv->reg30_ticks);
len += sprintf(page + len, "reg30_good=%d\n", priv->reg30_good);
@@ -1487,244 +1481,26 @@ static int proc_bri_info_read(char *page, char **start, off_t off, int count, in
return len;
}
-/*
- *
- * Direct/Indirect
- * |
- * | Reg#
- * | |
- * | | Data (only in Write)
- * | | |
- * | | +-+-+
- * v v v v
- * FF WD 06 01 05
- * ^ ^
- * | |
- * | Write/Read
- * |
- * Chan#
- *
- */
-static int handle_register_command(xpd_t *xpd, char *cmdline)
-{
- unsigned chipsel;
- unsigned data = 0;
- unsigned xdata1 = 0;
- unsigned xdata2 = 0;
- char op; /* [W]rite, [R]ead */
- char reg_type; /* [D]irect, [S]ubregister */
- int reg_num;
- int subreg;
- int elements;
- bool writing;
- char *p;
- reg_cmd_t regcmd;
- xbus_t *xbus;
- int ret = -EINVAL;
- struct BRI_priv_data *priv;
- byte buf[MAX_PROC_WRITE];
-
- BUG_ON(!xpd);
- xbus = xpd->xbus;
- BUG_ON(!xbus);
- priv = xpd->priv;
- BUG_ON(!priv);
- if((p = strchr(cmdline, '#')) != NULL) /* Truncate comments */
- *p = '\0';
- if((p = strchr(cmdline, ';')) != NULL) /* Truncate comments */
- *p = '\0';
- for(p = cmdline; *p && (*p == ' ' || *p == '\t'); p++) /* Trim leading whitespace */
- ;
- if(*p == '\0')
- return 0;
-
- if(!XBUS_GET(xbus)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
- return -EBUSY;
- }
- memset(buf, 0, MAX_PROC_WRITE);
- elements = sscanf(cmdline, "%d %c%c %x %x %x %x %x",
- &chipsel,
- &op, &reg_type, &reg_num,
- &subreg,
- &data, &xdata1, &xdata2);
- XPD_DBG(PROC, xpd, "'%s': %d %c%c %02X %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, subreg, data);
- if(elements < 3) { // At least: chipsel, op, reg_type, reg_num
- ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline);
- goto out;
- }
- if(!VALID_CHIPSEL(chipsel)) {
- ERR("Bad chip select number: %d\n", chipsel);
- goto out;
- }
- REG_FIELD(&regcmd, chipsel) = chipsel;
- switch(op) {
- case 'W':
- writing = 1;
- break;
- case 'R':
- writing = 0;
- break;
- default:
- ERR("Unkown operation type '%c'\n", op);
- goto out;
- }
- if(
- (op == 'W' && reg_type == 'D' && elements != 5) ||
- (op == 'W' && reg_type == 'S' && elements != 6) ||
- (op == 'R' && reg_type == 'D' && elements != 4) ||
- (op == 'R' && reg_type == 'S' && elements != 4)
- ) {
- ERR("Bad number of elements: '%s' (%d elements): %d %c%c %02X %02X %02X\n",
- cmdline, elements,
- chipsel, op, reg_type, reg_num, subreg, data);
- goto out;
- }
- switch(reg_type) {
- case 'S':
- REG_FIELD(&regcmd, do_subreg) = 1;
- REG_FIELD(&regcmd, regnum) = reg_num;
- REG_FIELD(&regcmd, subreg) = subreg;
- REG_FIELD(&regcmd, data_low) = data;
- break;
- case 'D':
- REG_FIELD(&regcmd, do_subreg) = 0;
- REG_FIELD(&regcmd, regnum) = reg_num;
- REG_FIELD(&regcmd, subreg) = 0;
- REG_FIELD(&regcmd, data_low) = subreg;
- break;
- case 'M': /* Multi without eoftx */
- case 'm': /* Multi with eoftx */
- if(!writing) {
- ERR("Read multibyte is not implemented\n");
- goto out;
- }
- elements -= 3;
- REG_XDATA(&regcmd)[0] = reg_num;
- REG_XDATA(&regcmd)[1] = subreg;
- REG_XDATA(&regcmd)[2] = data;
- REG_XDATA(&regcmd)[3] = xdata1;
- REG_XDATA(&regcmd)[4] = xdata2;
- ret = send_bri_multibyte(xpd, REG_XDATA(&regcmd), elements, (reg_type == 'm'));
- goto out;
- default:
- ERR("Unkown register type '%c'\n", reg_type);
- goto out;
- }
- regcmd.bytes = sizeof(regcmd) - 1;
- REG_FIELD(&regcmd, read_request) = writing;
- REG_FIELD(&regcmd, data_high) = 0;
- priv->requested_reply = regcmd;
- if(print_dbg)
- dump_reg_cmd("BRI", &regcmd, 1);
- ret = xpp_register_request(xpd->xbus, xpd,
- REG_FIELD(&regcmd, chipsel),
- writing,
- REG_FIELD(&regcmd, do_subreg),
- REG_FIELD(&regcmd, regnum),
- REG_FIELD(&regcmd, subreg),
- REG_FIELD(&regcmd, data_low),
- REG_FIELD(&regcmd, data_high));
-out:
- XBUS_PUT(xbus);
- return ret;
-}
-
-static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
-{
- xpd_t *xpd = data;
- char buf[MAX_PROC_WRITE];
- char *p;
- int i;
- int ret;
-
- if(!xpd)
- return -ENODEV;
- for(i = 0; i < count; /* noop */) {
- for(p = buf; p < buf + MAX_PROC_WRITE; p++) { /* read a line */
- if(i >= count)
- break;
- if(get_user(*p, buffer + i))
- return -EFAULT;
- i++;
- if(*p == '\n' || *p == '\r') /* whatever */
- break;
- }
- if(p >= buf + MAX_PROC_WRITE)
- return -E2BIG;
- *p = '\0';
- ret = handle_register_command(xpd, buf);
- if(ret < 0)
- return ret;
- msleep(1);
- }
- return count;
-}
-
-
-static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- int len = 0;
- unsigned long flags;
- xpd_t *xpd = data;
- reg_cmd_t *info;
- struct BRI_priv_data *priv;
-
- if(!xpd)
- return -ENODEV;
- priv = xpd->priv;
- BUG_ON(!priv);
- spin_lock_irqsave(&xpd->lock, flags);
- info = &priv->last_reply;
- len += sprintf(page + len, "# Writing bad data into this file may damage your hardware!\n");
- len += sprintf(page + len, "# Consult firmware docs first\n");
- len += sprintf(page + len, "#\n");
- if(REG_FIELD(info, do_subreg)) {
- len += sprintf(page + len, "#CH\tOP\tReg.\tSub\tDL\n");
- len += sprintf(page + len, "%2d\tRS\t%02X\t%02X\t%02X\n",
- REG_FIELD(info, chipsel),
- REG_FIELD(info, regnum), REG_FIELD(info, subreg), REG_FIELD(info, data_low));
- } else {
- len += sprintf(page + len, "#CH\tOP\tReg.\tDL\n");
- len += sprintf(page + len, "%2d\tRD\t%02X\t%02X\n",
- REG_FIELD(info, chipsel),
- REG_FIELD(info, regnum), REG_FIELD(info, data_low));
- }
- spin_unlock_irqrestore(&xpd->lock, flags);
- if (len <= off+count)
- *eof = 1;
- *start = page + off;
- len -= off;
- if (len > count)
- len = count;
- if (len < 0)
- len = 0;
- return len;
-}
-
-int __init card_bri_startup(void)
+static int __init card_bri_startup(void)
{
DBG(GENERAL, "\n");
INFO("revision %s\n", XPP_VERSION);
- xproto_register(&PROTO_TABLE(BRI_NT));
- xproto_register(&PROTO_TABLE(BRI_TE));
+ xproto_register(&PROTO_TABLE(BRI));
return 0;
}
-void __exit card_bri_cleanup(void)
+static void __exit card_bri_cleanup(void)
{
DBG(GENERAL, "\n");
- xproto_unregister(&PROTO_TABLE(BRI_NT));
- xproto_unregister(&PROTO_TABLE(BRI_TE));
+ xproto_unregister(&PROTO_TABLE(BRI));
}
MODULE_DESCRIPTION("XPP BRI Card Driver");
MODULE_AUTHOR("Oron Peled <oron@actcom.co.il>");
MODULE_LICENSE("GPL");
MODULE_VERSION(XPP_VERSION);
-MODULE_ALIAS_XPD(XPD_TYPE_BRI_NT);
-MODULE_ALIAS_XPD(XPD_TYPE_BRI_TE);
+MODULE_ALIAS_XPD(XPD_TYPE_BRI);
module_init(card_bri_startup);
module_exit(card_bri_cleanup);
diff --git a/xpp/card_fxo.c b/xpp/card_fxo.c
index 179ff70..0bb30ff 100644
--- a/xpp/card_fxo.c
+++ b/xpp/card_fxo.c
@@ -33,14 +33,13 @@
static const char rcsid[] = "$Id$";
-DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements");
-DEF_PARM(uint, poll_battery_interval, 500, 0644, "Poll battery interval in milliseconds (0 - disable)");
-DEF_PARM(uint, poll_power_denial_interval, 40, 0644, "Power denial detection poll interval in milliseconds (0 - disable)");
+static DEF_PARM(int, debug, 0, 0644, "Print DBG statements");
+static DEF_PARM(uint, poll_battery_interval, 500, 0644, "Poll battery interval in milliseconds (0 - disable)");
#ifdef WITH_METERING
-DEF_PARM(uint, poll_metering_interval, 500, 0644, "Poll metering interval in milliseconds (0 - disable)");
+static DEF_PARM(uint, poll_metering_interval, 500, 0644, "Poll metering interval in milliseconds (0 - disable)");
#endif
-DEF_PARM(int, ring_debounce, 50, 0644, "Number of ticks to debounce a false RING indication");
-DEF_PARM(int, caller_id_style, 0, 0444, "Caller-Id detection style: 0 - [BELL], 1 - [BT], 2 - [PASS]");
+static DEF_PARM(int, ring_debounce, 50, 0644, "Number of ticks to debounce a false RING indication");
+static DEF_PARM(int, caller_id_style, 0, 0444, "Caller-Id detection style: 0 - [BELL], 1 - [BT], 2 - [PASS]");
enum cid_style {
CID_STYLE_BELL = 0, /* E.g: US (Bellcore) */
@@ -57,9 +56,10 @@ enum cid_style {
enum fxo_leds {
LED_GREEN,
+ LED_RED,
};
-#define NUM_LEDS 1
+#define NUM_LEDS 2
#define DELAY_UNTIL_DIALTONE 3000
/*
@@ -78,16 +78,12 @@ enum fxo_leds {
/* Shortcuts */
#define DAA_WRITE 1
#define DAA_READ 0
-#define DAA_DIRECT_REQUEST(xbus,xpd,chipsel,writing,reg,dL) \
- xpp_register_request((xbus), (xpd), (chipsel), (writing), 0, (reg), 0, (dL), 0)
-
-#define VALID_CHIPSEL(x) (((chipsel) >= 0 && (chipsel) <= 7) || (chipsel) == ALL_CHANS)
+#define DAA_DIRECT_REQUEST(xbus,xpd,port,writing,reg,dL) \
+ xpp_register_request((xbus), (xpd), (port), (writing), (reg), 0, 0, (dL), 0, 0, 0)
/*---------------- FXO Protocol Commands ----------------------------------*/
static /* 0x0F */ DECLARE_CMD(FXO, XPD_STATE, bool on);
-static /* 0x0F */ DECLARE_CMD(FXO, RING, lineno_t chan, bool on);
-static /* 0x0F */ DECLARE_CMD(FXO, RELAY_OUT, byte which, bool on);
static bool fxo_packet_is_valid(xpacket_t *pack);
static void fxo_packet_dump(const char *msg, xpacket_t *pack);
@@ -95,9 +91,6 @@ static int proc_fxo_info_read(char *page, char **start, off_t off, int count, in
#ifdef WITH_METERING
static int proc_xpd_metering_read(char *page, char **start, off_t off, int count, int *eof, void *data);
#endif
-static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data);
-static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
-static int handle_register_command(xpd_t *xpd, char *cmdline);
static void zap_report_battery(xpd_t *xpd, lineno_t chan);
#define PROC_REGISTER_FNAME "slics"
@@ -106,7 +99,10 @@ static void zap_report_battery(xpd_t *xpd, lineno_t chan);
#define PROC_METERING_FNAME "metering_read"
#endif
-#define DAA_REG_RING 0x05
+#define REG_DAA_CONTROL1 0x05 /* 5 - DAA Control 1 */
+#define REG_DAA_CONTROL1_OH BIT(0) /* Off-Hook. */
+#define REG_DAA_CONTROL1_ONHM BIT(3) /* On-Hook Line Monitor */
+
#define DAA_REG_METERING 0x11 /* 17 */
#define DAA_REG_CURRENT 0x1C /* 28 */
#define DAA_REG_VBAT 0x1D /* 29 */
@@ -123,8 +119,13 @@ enum polarity_state {
POL_NEGATIVE = -1
};
+enum power_state {
+ POWER_UNKNOWN = 0,
+ POWER_ON = 1,
+ POWER_OFF = -1
+};
+
struct FXO_priv_data {
- struct proc_dir_entry *regfile;
#ifdef WITH_METERING
struct proc_dir_entry *meteringfile;
#endif
@@ -136,9 +137,11 @@ struct FXO_priv_data {
ushort nobattery_debounce[CHANNELS_PERXPD];
enum polarity_state polarity[CHANNELS_PERXPD];
ushort polarity_debounce[CHANNELS_PERXPD];
+ enum power_state power[CHANNELS_PERXPD];
xpp_line_t maybe_power_denial;
ushort power_denial_debounce[CHANNELS_PERXPD];
ushort power_denial_delay[CHANNELS_PERXPD];
+ ushort power_denial_minimum[CHANNELS_PERXPD];
ushort power_denial_safezone[CHANNELS_PERXPD];
xpp_line_t ledstate[NUM_LEDS]; /* 0 - OFF, 1 - ON */
xpp_line_t ledcontrol[NUM_LEDS]; /* 0 - OFF, 1 - ON */
@@ -174,6 +177,8 @@ static void reset_battery_readings(xpd_t *xpd, lineno_t pos)
BIT_CLR(priv->maybe_power_denial, pos);
}
+static const int led_register_mask[] = { BIT(7), BIT(6), BIT(5) };
+
/*
* LED control is done via DAA register 0x20
*/
@@ -182,6 +187,7 @@ static int do_led(xpd_t *xpd, lineno_t chan, byte which, bool on)
int ret = 0;
struct FXO_priv_data *priv;
xbus_t *xbus;
+ byte value;
BUG_ON(!xpd);
xbus = xpd->xbus;
@@ -189,7 +195,7 @@ static int do_led(xpd_t *xpd, lineno_t chan, byte which, bool on)
which = which % NUM_LEDS;
if(IS_SET(xpd->digital_outputs, chan) || IS_SET(xpd->digital_inputs, chan))
goto out;
- if(chan == ALL_CHANS) {
+ if(chan == PORT_BROADCAST) {
priv->ledstate[which] = (on) ? ~0 : 0;
} else {
if(on) {
@@ -198,8 +204,12 @@ static int do_led(xpd_t *xpd, lineno_t chan, byte which, bool on)
BIT_CLR(priv->ledstate[which], chan);
}
}
+ value = 0;
+ value |= ((BIT(5) | BIT(6) | BIT(7)) & ~led_register_mask[which]);
+ value |= (on) ? BIT(0) : 0;
+ value |= (on) ? BIT(1) : 0;
LINE_DBG(LEDS, xpd, chan, "LED: which=%d -- %s\n", which, (on) ? "on" : "off");
- ret = DAA_DIRECT_REQUEST(xbus, xpd, chan, DAA_WRITE, 0x20, on);
+ ret = DAA_DIRECT_REQUEST(xbus, xpd, chan, DAA_WRITE, 0x20, value);
out:
return ret;
}
@@ -208,7 +218,8 @@ static void handle_fxo_leds(xpd_t *xpd)
{
int i;
unsigned long flags;
- const enum fxo_leds color = LED_GREEN;
+ const enum fxo_leds colors[] = { LED_GREEN, LED_RED };
+ enum fxo_leds color;
unsigned int timer_count;
struct FXO_priv_data *priv;
@@ -216,27 +227,29 @@ static void handle_fxo_leds(xpd_t *xpd)
spin_lock_irqsave(&xpd->lock, flags);
priv = xpd->priv;
timer_count = xpd->timer_count;
- for_each_line(xpd, i) {
- if(IS_SET(xpd->digital_outputs, i) || IS_SET(xpd->digital_inputs, i))
- continue;
- if(xpd->blink_mode || IS_BLINKING(priv,i,color)) {
- int mod_value = LED_COUNTER(priv, i, color);
-
- if(!mod_value)
- mod_value = DEFAULT_LED_PERIOD; /* safety value */
- // led state is toggled
- if((timer_count % mod_value) == 0) {
- LINE_DBG(LEDS, xpd, i, "ledstate=%s\n", (IS_SET(priv->ledstate[color], i))?"ON":"OFF");
- if(!IS_SET(priv->ledstate[color], i)) {
- do_led(xpd, i, color, 1);
- } else {
- do_led(xpd, i, color, 0);
+ for(color = 0; color < ARRAY_SIZE(colors); color++) {
+ for_each_line(xpd, i) {
+ if(IS_SET(xpd->digital_outputs, i) || IS_SET(xpd->digital_inputs, i))
+ continue;
+ if((xpd->blink_mode & BIT(i)) || IS_BLINKING(priv, i, color)) { // Blinking
+ int mod_value = LED_COUNTER(priv, i, color);
+
+ if(!mod_value)
+ mod_value = DEFAULT_LED_PERIOD; /* safety value */
+ // led state is toggled
+ if((timer_count % mod_value) == 0) {
+ LINE_DBG(LEDS, xpd, i, "ledstate=%s\n", (IS_SET(priv->ledstate[color], i))?"ON":"OFF");
+ if(!IS_SET(priv->ledstate[color], i)) {
+ do_led(xpd, i, color, 1);
+ } else {
+ do_led(xpd, i, color, 0);
+ }
}
+ } else if(IS_SET(priv->ledcontrol[color], i) && !IS_SET(priv->ledstate[color], i)) {
+ do_led(xpd, i, color, 1);
+ } else if(!IS_SET(priv->ledcontrol[color], i) && IS_SET(priv->ledstate[color], i)) {
+ do_led(xpd, i, color, 0);
}
- } else if(IS_SET(priv->ledcontrol[color], i) && !IS_SET(priv->ledstate[color], i)) {
- do_led(xpd, i, color, 1);
- } else if(!IS_SET(priv->ledcontrol[color], i) && IS_SET(priv->ledstate[color], i)) {
- do_led(xpd, i, color, 0);
}
}
spin_unlock_irqrestore(&xpd->lock, flags);
@@ -317,13 +330,15 @@ static int do_sethook(xpd_t *xpd, int pos, bool to_offhook)
}
spin_lock_irqsave(&xpd->lock, flags);
mark_ring(xpd, pos, 0, 0); // No more rings
- value = (to_offhook) ? 0x09 : 0x08; /* Bit 3 is for CID */
+ value = REG_DAA_CONTROL1_ONHM; /* Bit 3 is for CID */
+ if(to_offhook)
+ value |= REG_DAA_CONTROL1_OH;
LINE_DBG(SIGNAL, xpd, pos, "SETHOOK: value=0x%02X %s\n", value, (to_offhook)?"OFFHOOK":"ONHOOK");
if(to_offhook)
MARK_ON(priv, pos, LED_GREEN);
else
MARK_OFF(priv, pos, LED_GREEN);
- ret = DAA_DIRECT_REQUEST(xbus, xpd, pos, DAA_WRITE, DAA_REG_RING, value);
+ ret = DAA_DIRECT_REQUEST(xbus, xpd, pos, DAA_WRITE, REG_DAA_CONTROL1, value);
if(to_offhook) {
BIT_SET(xpd->offhook, pos);
} else {
@@ -340,31 +355,15 @@ static int do_sethook(xpd_t *xpd, int pos, bool to_offhook)
#endif
reset_battery_readings(xpd, pos); /* unstable during hook changes */
priv->power_denial_safezone[pos] = (to_offhook) ? POWER_DENIAL_SAFEZONE : 0;
+ if(!to_offhook)
+ priv->power[pos] = POWER_UNKNOWN;
spin_unlock_irqrestore(&xpd->lock, flags);
return ret;
}
/*---------------- FXO: Methods -------------------------------------------*/
-static xpd_t *FXO_card_new(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, byte revision)
-{
- xpd_t *xpd = NULL;
- int channels;
-
- if(subtype == 2)
- channels = min(2, CHANNELS_PERXPD);
- else
- channels = min(8, CHANNELS_PERXPD);
- xpd = xpd_alloc(sizeof(struct FXO_priv_data), proto_table, channels);
- if(!xpd)
- return NULL;
- xpd->direction = TO_PSTN;
- xpd->revision = revision;
- xpd->type_name = proto_table->name;
- return xpd;
-}
-
-static void clean_proc(xbus_t *xbus, xpd_t *xpd)
+static void fxo_proc_remove(xbus_t *xbus, xpd_t *xpd)
{
struct FXO_priv_data *priv;
@@ -372,11 +371,6 @@ static void clean_proc(xbus_t *xbus, xpd_t *xpd)
priv = xpd->priv;
XPD_DBG(PROC, xpd, "\n");
#ifdef CONFIG_PROC_FS
- if(priv->regfile) {
- XPD_DBG(PROC, xpd, "Removing xpd DAA file\n");
- remove_proc_entry(PROC_REGISTER_FNAME, xpd->proc_xpd_dir);
- priv->regfile->data = NULL;
- }
#ifdef WITH_METERING
if(priv->meteringfile) {
XPD_DBG(PROC, xpd, "Removing xpd metering tone file\n");
@@ -393,11 +387,9 @@ static void clean_proc(xbus_t *xbus, xpd_t *xpd)
#endif
}
-static int FXO_card_init(xbus_t *xbus, xpd_t *xpd)
+static int fxo_proc_create(xbus_t *xbus, xpd_t *xpd)
{
struct FXO_priv_data *priv;
- int ret = 0;
- int i;
BUG_ON(!xpd);
priv = xpd->priv;
@@ -406,7 +398,6 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd)
priv->fxo_info = create_proc_read_entry(PROC_FXO_INFO_FNAME, 0444, xpd->proc_xpd_dir, proc_fxo_info_read, xpd);
if(!priv->fxo_info) {
XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_FXO_INFO_FNAME);
- ret = -ENOENT;
goto err;
}
priv->fxo_info->owner = THIS_MODULE;
@@ -416,31 +407,59 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd)
proc_xpd_metering_read, xpd);
if(!priv->meteringfile) {
XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_METERING_FNAME);
- ret = -ENOENT;
goto err;
}
priv->meteringfile->owner = THIS_MODULE;
#endif
- XPD_DBG(PROC, xpd, "Creating DAAs file\n");
- priv->regfile = create_proc_entry(PROC_REGISTER_FNAME, 0644, xpd->proc_xpd_dir);
- if(!priv->regfile) {
- XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_REGISTER_FNAME);
- ret = -ENOENT;
- goto err;
- }
- priv->regfile->owner = THIS_MODULE;
- priv->regfile->write_proc = proc_xpd_register_write;
- priv->regfile->read_proc = proc_xpd_register_read;
- priv->regfile->data = xpd;
#endif
- ret = run_initialize_registers(xpd);
- if(ret < 0)
+ return 0;
+err:
+ return -EINVAL;
+}
+
+static xpd_t *FXO_card_new(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, int subunits, bool to_phone)
+{
+ xpd_t *xpd = NULL;
+ int channels;
+
+ if(to_phone) {
+ XBUS_NOTICE(xbus,
+ "XPD=%d%d: try to instanciate FXO with reverse direction\n",
+ unit, subunit);
+ return NULL;
+ }
+ if(subtype == 2)
+ channels = min(2, CHANNELS_PERXPD);
+ else
+ channels = min(8, CHANNELS_PERXPD);
+ xpd = xpd_alloc(sizeof(struct FXO_priv_data), proto_table, channels);
+ if(!xpd)
+ return NULL;
+ xpd->direction = TO_PSTN;
+ xpd->type_name = "FXO";
+ if(xpd_common_init(xbus, xpd, unit, subunit, subtype, subunits) < 0)
goto err;
+ if(fxo_proc_create(xbus, xpd) < 0)
+ goto err;
+ return xpd;
+err:
+ xpd_free(xpd);
+ return NULL;
+}
+
+static int FXO_card_init(xbus_t *xbus, xpd_t *xpd)
+{
+ struct FXO_priv_data *priv;
+ int i;
+
+ BUG_ON(!xpd);
+ priv = xpd->priv;
// Hanghup all lines
for_each_line(xpd, i) {
do_sethook(xpd, i, 0);
priv->polarity[i] = POL_UNKNOWN; /* will be updated on next battery sample */
priv->battery[i] = BATTERY_UNKNOWN; /* will be updated on next battery sample */
+ priv->power[i] = POWER_UNKNOWN; /* will be updated on next battery sample */
}
XPD_DBG(GENERAL, xpd, "done\n");
for_each_line(xpd, i) {
@@ -456,10 +475,6 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd)
}
pcm_recompute(xpd, 0);
return 0;
-err:
- clean_proc(xbus, xpd);
- XPD_ERR(xpd, "Failed initializing registers (%d)\n", ret);
- return ret;
}
static int FXO_card_remove(xbus_t *xbus, xpd_t *xpd)
@@ -469,7 +484,7 @@ static int FXO_card_remove(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
XPD_DBG(GENERAL, xpd, "\n");
- clean_proc(xbus, xpd);
+ fxo_proc_remove(xbus, xpd);
return 0;
}
@@ -501,6 +516,7 @@ static int FXO_card_zaptel_preregistration(xpd_t *xpd, bool on)
for_each_line(xpd, i) {
MARK_ON(priv, i, LED_GREEN);
msleep(4);
+ MARK_ON(priv, i, LED_RED);
}
return 0;
}
@@ -521,7 +537,7 @@ static int FXO_card_zaptel_postregistration(xpd_t *xpd, bool on)
zap_report_battery(xpd, i);
MARK_OFF(priv, i, LED_GREEN);
msleep(2);
- // MARK_OFF(priv, i, LED_RED);
+ MARK_OFF(priv, i, LED_RED);
msleep(2);
}
return 0;
@@ -555,11 +571,6 @@ static int FXO_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
return ret;
}
-#ifndef ZT_GET_PARAMS_V1
-#define zt_alarm_channel(a,b) zt_qevent_lock(a,( (b)==ZT_ALARM_NONE )? \
- ZT_EVENT_NOALARM : ZT_EVENT_ALARM)
-#endif
-
static void zap_report_battery(xpd_t *xpd, lineno_t chan)
{
struct FXO_priv_data *priv;
@@ -601,16 +612,6 @@ static void poll_battery(xbus_t *xbus, xpd_t *xpd)
}
}
-static void poll_current(xbus_t *xbus, xpd_t *xpd)
-{
- int i;
-
- for_each_line(xpd, i) {
- if (IS_SET(xpd->offhook, i))
- DAA_DIRECT_REQUEST(xbus, xpd, i, DAA_READ, DAA_REG_CURRENT, 0);
- }
-}
-
#ifdef WITH_METERING
static void poll_metering(xbus_t *xbus, xpd_t *xpd)
{
@@ -649,8 +650,27 @@ static void handle_fxo_power_denial(xpd_t *xpd)
priv = xpd->priv;
for_each_line(xpd, i) {
- if(priv->power_denial_safezone[i] > 0)
- priv->power_denial_safezone[i]--;
+ if(priv->power_denial_minimum[i] > 0) {
+ priv->power_denial_minimum[i]--;
+ if(priv->power_denial_minimum[i] <= 0) {
+ /*
+ * But maybe the FXS started to ring (and the firmware haven't
+ * detected it yet). This would cause false power denials.
+ * So we just flag it and schedule more ticks to wait.
+ */
+ LINE_DBG(SIGNAL, xpd, i, "Possible Power Denial Hangup\n");
+ priv->power_denial_debounce[i] = 0;
+ BIT_SET(priv->maybe_power_denial, i);
+ }
+ }
+ if(priv->power_denial_safezone[i] > 0) {
+ if(--priv->power_denial_safezone[i]) {
+ /*
+ * Poll current, previous answers are meaningless
+ */
+ DAA_DIRECT_REQUEST(xpd->xbus, xpd, i, DAA_READ, DAA_REG_CURRENT, 0);
+ }
+ }
if(IS_SET(priv->maybe_power_denial, i) && !xpd->ringing[i] && IS_SET(xpd->offhook, i)) {
/*
* Ring detection by the firmware takes some time.
@@ -682,8 +702,6 @@ static int FXO_card_tick(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!priv);
if(poll_battery_interval != 0 && (priv->poll_counter % poll_battery_interval) == 0)
poll_battery(xbus, xpd);
- if(poll_power_denial_interval != 0 && (priv->poll_counter % poll_power_denial_interval) == 0)
- poll_current(xbus, xpd);
#ifdef WITH_METERING
if(poll_metering_interval != 0 && (priv->poll_counter % poll_metering_interval) == 0)
poll_metering(xbus, xpd);
@@ -749,7 +767,7 @@ static int FXO_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
/*---------------- FXO: HOST COMMANDS -------------------------------------*/
-/* 0x0F */ HOSTCMD(FXO, XPD_STATE, bool on)
+static /* 0x0F */ HOSTCMD(FXO, XPD_STATE, bool on)
{
int ret = 0;
struct FXO_priv_data *priv;
@@ -762,19 +780,6 @@ static int FXO_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
return ret;
}
-/* 0x0F */ HOSTCMD(FXO, RING, lineno_t chan, bool on)
-{
- BUG_ON(!xbus);
- BUG_ON(!xpd);
- LINE_DBG(SIGNAL, xpd, chan, "%s\n", (on) ? "on" : "off");
- return DAA_DIRECT_REQUEST(xbus, xpd, chan, DAA_WRITE, 0x40, (on)?0x04:0x01);
-}
-
-/* 0x0F */ HOSTCMD(FXO, RELAY_OUT, byte which, bool on)
-{
- return -ENOSYS;
-}
-
/*---------------- FXO: Astribank Reply Handlers --------------------------*/
HANDLER_DEF(FXO, SIG_CHANGED)
@@ -821,7 +826,11 @@ HANDLER_DEF(FXO, SIG_CHANGED)
return 0;
}
-static void update_battery_voltage(xpd_t *xpd, byte data_low, lineno_t chipsel)
+#ifndef ZT_GET_PARAMS_V1
+#define zt_alarm_channel(a,b) zt_qevent_lock(a,( (b)==ZT_ALARM_NONE )? \
+ ZT_EVENT_NOALARM : ZT_EVENT_ALARM)
+#endif
+static void update_battery_voltage(xpd_t *xpd, byte data_low, xportno_t portno)
{
struct FXO_priv_data *priv;
enum polarity_state pol;
@@ -829,24 +838,25 @@ static void update_battery_voltage(xpd_t *xpd, byte data_low, lineno_t chipsel)
priv = xpd->priv;
BUG_ON(!priv);
- priv->battery_voltage[chipsel] = data_low;
- if(xpd->ringing[chipsel])
+ priv->battery_voltage[portno] = data_low;
+ if(xpd->ringing[portno])
goto ignore_reading; /* ring voltage create false alarms */
if(abs((signed char)data_low) < BAT_THRESHOLD) {
/*
* Check for battery voltage fluctuations
*/
- if(priv->battery[chipsel] != BATTERY_OFF) {
+ if(priv->battery[portno] != BATTERY_OFF) {
int milliseconds;
- milliseconds = priv->nobattery_debounce[chipsel]++ *
+ milliseconds = priv->nobattery_debounce[portno]++ *
poll_battery_interval;
if(milliseconds > BAT_DEBOUNCE) {
- LINE_DBG(SIGNAL, xpd, chipsel, "BATTERY OFF voltage=%d\n", data_low);
- priv->battery[chipsel] = BATTERY_OFF;
+ LINE_DBG(SIGNAL, xpd, portno, "BATTERY OFF voltage=%d\n", data_low);
+ priv->battery[portno] = BATTERY_OFF;
if(SPAN_REGISTERED(xpd))
- zap_report_battery(xpd, chipsel);
- priv->polarity[chipsel] = POL_UNKNOWN; /* What's the polarity ? */
+ zap_report_battery(xpd, portno);
+ priv->polarity[portno] = POL_UNKNOWN; /* What's the polarity ? */
+ priv->power[portno] = POWER_UNKNOWN; /* What's the current ? */
/*
* Stop further processing for now
*/
@@ -855,16 +865,25 @@ static void update_battery_voltage(xpd_t *xpd, byte data_low, lineno_t chipsel)
}
} else {
- priv->nobattery_debounce[chipsel] = 0;
- if(priv->battery[chipsel] != BATTERY_ON) {
- LINE_DBG(SIGNAL, xpd, chipsel, "BATTERY ON voltage=%d\n", data_low);
- priv->battery[chipsel] = BATTERY_ON;
+ priv->nobattery_debounce[portno] = 0;
+ if(priv->battery[portno] != BATTERY_ON) {
+ LINE_DBG(SIGNAL, xpd, portno, "BATTERY ON voltage=%d\n", data_low);
+ priv->battery[portno] = BATTERY_ON;
if(SPAN_REGISTERED(xpd))
- zap_report_battery(xpd, chipsel);
+ zap_report_battery(xpd, portno);
}
}
- if(priv->battery[chipsel] != BATTERY_ON) {
- priv->polarity[chipsel] = POL_UNKNOWN; /* What's the polarity ? */
+#if 0
+ /*
+ * Mark FXO ports without battery!
+ */
+ if(priv->battery[portno] != BATTERY_ON)
+ MARK_ON(priv, portno, LED_RED);
+ else
+ MARK_OFF(priv, portno, LED_RED);
+#endif
+ if(priv->battery[portno] != BATTERY_ON) {
+ priv->polarity[portno] = POL_UNKNOWN; /* What's the polarity ? */
return;
}
/*
@@ -876,20 +895,20 @@ static void update_battery_voltage(xpd_t *xpd, byte data_low, lineno_t chipsel)
pol = POL_NEGATIVE;
else
pol = POL_POSITIVE;
- if(priv->polarity[chipsel] == pol) {
+ if(priv->polarity[portno] == pol) {
/*
* Same polarity, reset debounce counter
*/
- priv->polarity_debounce[chipsel] = 0;
+ priv->polarity_debounce[portno] = 0;
return;
}
/*
* Track polarity reversals and debounce spikes.
* Only reversals with long duration count.
*/
- msec = priv->polarity_debounce[chipsel]++ * poll_battery_interval;
+ msec = priv->polarity_debounce[portno]++ * poll_battery_interval;
if (msec >= POLREV_THRESHOLD) {
- priv->polarity_debounce[chipsel] = 0;
+ priv->polarity_debounce[portno] = 0;
if(pol != POL_UNKNOWN) {
char *polname = NULL;
@@ -899,7 +918,7 @@ static void update_battery_voltage(xpd_t *xpd, byte data_low, lineno_t chipsel)
polname = "Negative";
else
BUG();
- LINE_DBG(SIGNAL, xpd, chipsel,
+ LINE_DBG(SIGNAL, xpd, portno,
"Polarity changed to %s\n", polname);
/*
* Inform zaptel/Asterisk:
@@ -908,71 +927,68 @@ static void update_battery_voltage(xpd_t *xpd, byte data_low, lineno_t chipsel)
* but before first ring.
*/
if(caller_id_style == CID_STYLE_ETSI_POLREV) {
- LINE_DBG(SIGNAL, xpd, chipsel, "Caller-ID PCM: on\n");
- BIT_SET(xpd->cid_on, chipsel); /* will be cleared on ring/offhook */
+ LINE_DBG(SIGNAL, xpd, portno, "Caller-ID PCM: on\n");
+ BIT_SET(xpd->cid_on, portno); /* will be cleared on ring/offhook */
}
if(SPAN_REGISTERED(xpd)) {
- LINE_DBG(SIGNAL, xpd, chipsel,
+ LINE_DBG(SIGNAL, xpd, portno,
"Send ZT_EVENT_POLARITY: %s\n", polname);
- zt_qevent_lock(&xpd->chans[chipsel], ZT_EVENT_POLARITY);
+ zt_qevent_lock(&xpd->chans[portno], ZT_EVENT_POLARITY);
}
}
- priv->polarity[chipsel] = pol;
+ priv->polarity[portno] = pol;
}
return;
ignore_reading:
/*
* Reset debounce counters to prevent false alarms
*/
- reset_battery_readings(xpd, chipsel); /* unstable during hook changes */
+ reset_battery_readings(xpd, portno); /* unstable during hook changes */
}
-static void update_battery_current(xpd_t *xpd, byte data_low, lineno_t chipsel)
+static void update_battery_current(xpd_t *xpd, byte data_low, xportno_t portno)
{
struct FXO_priv_data *priv;
priv = xpd->priv;
BUG_ON(!priv);
- priv->battery_current[chipsel] = data_low;
+ priv->battery_current[portno] = data_low;
/*
* During ringing, current is not stable.
* During onhook there should not be current anyway.
*/
- if(xpd->ringing[chipsel] || !IS_SET(xpd->offhook, chipsel))
+ if(xpd->ringing[portno] || !IS_SET(xpd->offhook, portno))
goto ignore_it;
/*
* Power denial with no battery voltage is meaningless
*/
- if(priv->battery[chipsel] != BATTERY_ON)
+ if(priv->battery[portno] != BATTERY_ON)
goto ignore_it;
/* Safe zone after offhook */
- if(priv->power_denial_safezone[chipsel] > 0)
+ if(priv->power_denial_safezone[portno] > 0)
goto ignore_it;
if(data_low < POWER_DENIAL_CURRENT) {
- /* Current dropped -- is it long enough (minimum ~80msec) */
- priv->power_denial_debounce[chipsel]++;
- if (priv->power_denial_debounce[chipsel] * poll_battery_interval >= POWER_DENIAL_TIME) {
- /*
- * But maybe the FXS started to ring (and the firmware haven't
- * detected it yet). This would cause false power denials.
- * So we just flag it and schedule more ticks to wait.
- * These ticks would elapse in handle_fxo_power_denial()
- */
- LINE_DBG(SIGNAL, xpd, chipsel, "Possible Power Denial Hangup\n");
- priv->power_denial_debounce[chipsel] = 0;
- BIT_SET(priv->maybe_power_denial, chipsel);
+ if(priv->power[portno] == POWER_ON) {
+ LINE_DBG(SIGNAL, xpd, portno, "power: ON -> OFF\n");
+ priv->power[portno] = POWER_OFF;
+ priv->power_denial_minimum[portno] = POWER_DENIAL_TIME;
}
+ } else {
+ LINE_DBG(SIGNAL, xpd, portno, "power: ON\n");
+ priv->power[portno] = POWER_ON;
+ priv->power_denial_minimum[portno] = 0;
+ update_line_status(xpd, portno, 1);
}
return;
ignore_it:
- BIT_CLR(priv->maybe_power_denial, chipsel);
- priv->power_denial_debounce[chipsel] = 0;
+ BIT_CLR(priv->maybe_power_denial, portno);
+ priv->power_denial_debounce[portno] = 0;
}
#ifdef WITH_METERING
#define BTD_BIT BIT(0)
-static void update_metering_state(xpd_t *xpd, byte data_low, lineno_t chipsel)
+static void update_metering_state(xpd_t *xpd, byte data_low, lineno_t portno)
{
struct FXO_priv_data *priv;
bool metering_tone = data_low & BTD_BIT;
@@ -980,20 +996,20 @@ static void update_metering_state(xpd_t *xpd, byte data_low, lineno_t chipsel)
priv = xpd->priv;
BUG_ON(!priv);
- old_metering_tone = IS_SET(priv->metering_tone_state, chipsel);
- LINE_DBG(SIGNAL, xpd, chipsel, "METERING: %s [dL=0x%X] (%d)\n",
+ old_metering_tone = IS_SET(priv->metering_tone_state, portno);
+ LINE_DBG(SIGNAL, xpd, portno, "METERING: %s [dL=0x%X] (%d)\n",
(metering_tone) ? "ON" : "OFF",
- data_low, priv->metering_count[chipsel]);
+ data_low, priv->metering_count[portno]);
if(metering_tone && !old_metering_tone) {
/* Rising edge */
- priv->metering_count[chipsel]++;
- BIT_SET(priv->metering_tone_state, chipsel);
+ priv->metering_count[portno]++;
+ BIT_SET(priv->metering_tone_state, portno);
} else if(!metering_tone && old_metering_tone)
- BIT_CLR(priv->metering_tone_state, chipsel);
+ BIT_CLR(priv->metering_tone_state, portno);
if(metering_tone) {
/* Clear the BTD bit */
data_low &= ~BTD_BIT;
- DAA_DIRECT_REQUEST(xpd->xbus, xpd, chipsel, DAA_WRITE, DAA_REG_METERING, data_low);
+ DAA_DIRECT_REQUEST(xpd->xbus, xpd, portno, DAA_WRITE, DAA_REG_METERING, data_low);
}
}
#endif
@@ -1001,25 +1017,25 @@ static void update_metering_state(xpd_t *xpd, byte data_low, lineno_t chipsel)
static int FXO_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
{
struct FXO_priv_data *priv;
- lineno_t chipsel;
+ lineno_t portno;
priv = xpd->priv;
BUG_ON(!priv);
- chipsel = REG_FIELD(info, chipsel);
+ portno = info->portnum;
switch(REG_FIELD(info, regnum)) {
case DAA_REG_VBAT:
- update_battery_voltage(xpd, REG_FIELD(info, data_low), chipsel);
+ update_battery_voltage(xpd, REG_FIELD(info, data_low), portno);
break;
case DAA_REG_CURRENT:
- update_battery_current(xpd, REG_FIELD(info, data_low), chipsel);
+ update_battery_current(xpd, REG_FIELD(info, data_low), portno);
break;
#ifdef WITH_METERING
case DAA_REG_METERING:
- update_metering_state(xpd, REG_FIELD(info, data_low), chipsel);
+ update_metering_state(xpd, REG_FIELD(info, data_low), portno);
break;
#endif
}
- LINE_DBG(REGS, xpd, chipsel, "%c reg_num=0x%X, dataL=0x%X dataH=0x%X\n",
+ LINE_DBG(REGS, xpd, portno, "%c reg_num=0x%X, dataL=0x%X dataH=0x%X\n",
((info->bytes == 3)?'I':'D'),
REG_FIELD(info, regnum),
REG_FIELD(info, data_low),
@@ -1041,7 +1057,8 @@ static xproto_table_t PROTO_TABLE(FXO) = {
/* Prototable Card Opcode */
XENTRY( FXO, FXO, SIG_CHANGED ),
},
- .name = "FXO",
+ .name = "FXO", /* protocol name */
+ .ports_per_subunit = 8,
.type = XPD_TYPE_FXO,
.xops = {
.card_new = FXO_card_new,
@@ -1057,8 +1074,6 @@ static xproto_table_t PROTO_TABLE(FXO) = {
.card_open = FXO_card_open,
.card_register_reply = FXO_card_register_reply,
- .RING = XPROTO_CALLER(FXO, RING),
- .RELAY_OUT = XPROTO_CALLER(FXO, RELAY_OUT),
.XPD_STATE = XPROTO_CALLER(FXO, XPD_STATE),
},
.packet_is_valid = fxo_packet_is_valid,
@@ -1103,12 +1118,16 @@ static int proc_fxo_info_read(char *page, char **start, off_t off, int count, in
len += sprintf(page + len, "\n\t%-17s: ", "state");
for_each_line(xpd, i) {
if(!IS_SET(xpd->digital_outputs, i) && !IS_SET(xpd->digital_inputs, i))
- len += sprintf(page + len, "%4d ", IS_SET(priv->ledstate[LED_GREEN], i));
+ len += sprintf(page + len, " %d%d ",
+ IS_SET(priv->ledstate[LED_GREEN], i),
+ IS_SET(priv->ledstate[LED_RED], i));
}
len += sprintf(page + len, "\n\t%-17s: ", "blinking");
for_each_line(xpd, i) {
if(!IS_SET(xpd->digital_outputs, i) && !IS_SET(xpd->digital_inputs, i))
- len += sprintf(page + len, "%4d ", IS_BLINKING(priv,i,LED_GREEN));
+ len += sprintf(page + len, " %d%d ",
+ IS_BLINKING(priv,i,LED_GREEN),
+ IS_BLINKING(priv,i,LED_RED));
}
len += sprintf(page + len, "\nBattery-Data:");
len += sprintf(page + len, "\n\t%-17s: ", "voltage");
@@ -1154,6 +1173,18 @@ static int proc_fxo_info_read(char *page, char **start, off_t off, int count, in
len += sprintf(page + len, "%4d ", priv->polarity_debounce[i]);
}
len += sprintf(page + len, "\nPower-Denial:");
+ len += sprintf(page + len, "\n\t%-17s: ", "power");
+ for_each_line(xpd, i) {
+ char *curr;
+
+ if(priv->power[i] == POWER_ON)
+ curr = "+";
+ else if(priv->power[i] == POWER_OFF)
+ curr = "-";
+ else
+ curr = ".";
+ len += sprintf(page + len, "%4s ", curr);
+ }
len += sprintf(page + len, "\n\t%-17s: ", "maybe");
for_each_line(xpd, i) {
len += sprintf(page + len, "%4d ", IS_SET(priv->maybe_power_denial, i));
@@ -1190,173 +1221,6 @@ static int proc_fxo_info_read(char *page, char **start, off_t off, int count, in
return len;
}
-/*
- *
- * Direct/Indirect
- * |
- * | Reg#
- * | |
- * | | Data (only in Write)
- * | | |
- * | | +-+-+
- * v v v v
- * FF WD 06 01 05
- * ^ ^
- * | |
- * | Write/Read
- * |
- * Chan#
- *
- */
-static int handle_register_command(xpd_t *xpd, char *cmdline)
-{
- unsigned chipsel;
- unsigned data_low = 0;
- char op; /* [W]rite, [R]ead */
- char reg_type; /* [D]irect */
- int reg_num;
- int elements;
- bool writing;
- char *p;
- reg_cmd_t regcmd;
- xbus_t *xbus;
- int ret = -EINVAL;
-
- BUG_ON(!xpd);
- xbus = xpd->xbus;
- if((p = strchr(cmdline, '#')) != NULL) /* Truncate comments */
- *p = '\0';
- if((p = strchr(cmdline, ';')) != NULL) /* Truncate comments */
- *p = '\0';
- for(p = cmdline; *p && (*p == ' ' || *p == '\t'); p++) /* Trim leading whitespace */
- ;
- if(*p == '\0')
- return 0;
-
- if(!XBUS_GET(xbus)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
- return -EBUSY;
- }
- elements = sscanf(cmdline, "%d %c%c %x %x",
- &chipsel,
- &op, &reg_type, &reg_num,
- &data_low);
- XPD_DBG(PROC, xpd, "'%s': %d %c%c %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, data_low);
- if(elements < 4) { // At least: chipsel, op, reg_type, reg_num
- ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline);
- goto out;
- }
- if(!VALID_CHIPSEL(chipsel)) {
- ERR("Bad chipsel number: %d\n", chipsel);
- goto out;
- }
- REG_FIELD(&regcmd, chipsel) = chipsel;
- REG_FIELD(&regcmd, do_subreg) = 0;
- switch(op) {
- case 'W':
- writing = 1;
- break;
- case 'R':
- writing = 0;
- break;
- default:
- ERR("Unkown operation type '%c'\n", op);
- goto out;
- }
- switch(reg_type) {
- case 'D':
- REG_FIELD(&regcmd, regnum) = reg_num;
- REG_FIELD(&regcmd, subreg) = 0;
- break;
- default:
- ERR("Unkown register type '%c'\n", reg_type);
- goto out;
- }
- if(
- (op == 'W' && reg_type == 'D' && elements != 5) ||
- (op == 'R' && reg_type == 'D' && elements != 4)
- ) {
- ERR("%s: '%s' (%d elements): %d %c%c %02X %02X\n", __FUNCTION__,
- cmdline, elements,
- chipsel, op, reg_type, reg_num, data_low);
- goto out;
- }
- regcmd.bytes = sizeof(regcmd) - 1;
- REG_FIELD(&regcmd, data_low) = data_low;
- REG_FIELD(&regcmd, data_high) = 0;
- REG_FIELD(&regcmd, read_request) = writing;
- xpd->requested_reply = regcmd;
- if(print_dbg)
- dump_reg_cmd("FXO", &regcmd, 1);
- ret = DAA_DIRECT_REQUEST(xpd->xbus, xpd, REG_FIELD(&regcmd, chipsel), writing, REG_FIELD(&regcmd, regnum), REG_FIELD(&regcmd, data_low));
-out:
- XBUS_PUT(xbus);
- return ret;
-}
-
-static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
-{
- xpd_t *xpd = data;
- char buf[MAX_PROC_WRITE];
- char *p;
- int i;
- int ret;
-
- if(!xpd)
- return -ENODEV;
- for(i = 0; i < count; /* noop */) {
- for(p = buf; p < buf + MAX_PROC_WRITE; p++) { /* read a line */
- if(i >= count)
- break;
- if(get_user(*p, buffer + i))
- return -EFAULT;
- i++;
- if(*p == '\n' || *p == '\r') /* whatever */
- break;
- }
- if(p >= buf + MAX_PROC_WRITE)
- return -E2BIG;
- *p = '\0';
- ret = handle_register_command(xpd, buf);
- if(ret < 0)
- return ret;
- msleep(1);
- }
- return count;
-}
-
-static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- int len = 0;
- unsigned long flags;
- xpd_t *xpd = data;
- reg_cmd_t *info;
- byte regnum;
-
- if(!xpd)
- return -ENODEV;
- spin_lock_irqsave(&xpd->lock, flags);
- info = &xpd->last_reply;
- regnum = REG_FIELD(info, regnum);
- len += sprintf(page + len, "# Writing bad data into this file may damage your hardware!\n");
- len += sprintf(page + len, "# Consult firmware docs first\n");
- len += sprintf(page + len, "#\n");
- len += sprintf(page + len, "#CH\tD/I\tReg.\tDL\n");
- len += sprintf(page + len, "%2d\tRD\t%02X\t%02X\n",
- REG_FIELD(info, chipsel),
- regnum, REG_FIELD(info, data_low));
- spin_unlock_irqrestore(&xpd->lock, flags);
- if (len <= off+count)
- *eof = 1;
- *start = page + off;
- len -= off;
- if (len > count)
- len = count;
- if (len < 0)
- len = 0;
- return len;
-}
-
#ifdef WITH_METERING
static int proc_xpd_metering_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
@@ -1392,7 +1256,7 @@ static int proc_xpd_metering_read(char *page, char **start, off_t off, int count
}
#endif
-int __init card_fxo_startup(void)
+static int __init card_fxo_startup(void)
{
if(ring_debounce <= 0) {
ERR("ring_debounce=%d. Must be positive number of ticks\n", ring_debounce);
@@ -1408,7 +1272,7 @@ int __init card_fxo_startup(void)
return 0;
}
-void __exit card_fxo_cleanup(void)
+static void __exit card_fxo_cleanup(void)
{
xproto_unregister(&PROTO_TABLE(FXO));
}
diff --git a/xpp/card_fxo.h b/xpp/card_fxo.h
index 4d0bd25..9f31441 100644
--- a/xpp/card_fxo.h
+++ b/xpp/card_fxo.h
@@ -30,14 +30,11 @@ enum fxo_opcodes {
XPROTO_NAME(FXO, DAA_WRITE) = 0x0F, /* Write to DAA */
XPROTO_NAME(FXO, XPD_STATE) = 0x0F, /* Write to DAA */
XPROTO_NAME(FXO, CHAN_CID) = 0x0F, /* Write to DAA */
- XPROTO_NAME(FXO, RING) = 0x0F, /* Write to DAA */
XPROTO_NAME(FXO, LED) = 0x0F, /* Write to DAA */
- XPROTO_NAME(FXO, RELAY_OUT) = 0x0F, /* Write to DAA */
};
DEF_RPACKET_DATA(FXO, SIG_CHANGED,
- byte type; /* unused -- we have it from DEV_DESC */
xpp_line_t sig_status; /* channels: lsb=1, msb=8 */
xpp_line_t sig_toggles; /* channels: lsb=1, msb=8 */
);
diff --git a/xpp/card_fxs.c b/xpp/card_fxs.c
index c6168c6..eeb02c9 100644
--- a/xpp/card_fxs.c
+++ b/xpp/card_fxs.c
@@ -33,16 +33,16 @@
static const char rcsid[] = "$Id$";
-DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
-DEF_PARM_BOOL(reversepolarity, 0, 0644, "Reverse Line Polarity");
-DEF_PARM_BOOL(vmwineon, 0, 0644, "Indicate voicemail to a neon lamp");
-DEF_PARM_BOOL(dtmf_detection, 1, 0644, "Do DTMF detection in hardware");
+static DEF_PARM(int, debug, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
+static DEF_PARM_BOOL(reversepolarity, 0, 0644, "Reverse Line Polarity");
+static DEF_PARM_BOOL(vmwineon, 0, 0644, "Indicate voicemail to a neon lamp");
+static DEF_PARM_BOOL(dtmf_detection, 1, 0644, "Do DTMF detection in hardware");
#ifdef POLL_DIGITAL_INPUTS
-DEF_PARM(uint, poll_digital_inputs, 1000, 0644, "Poll Digital Inputs");
+static DEF_PARM(uint, poll_digital_inputs, 1000, 0644, "Poll Digital Inputs");
#endif
#ifdef ZT_VMWI
-DEF_PARM_BOOL(vmwi_ioctl, 0, 0644, "Asterisk support VMWI notification via ioctl");
+static DEF_PARM_BOOL(vmwi_ioctl, 0, 0644, "Asterisk support VMWI notification via ioctl");
#else
#define vmwi_ioctl 0 /* not supported */
#endif
@@ -68,12 +68,14 @@ enum fxs_leds {
/* Shortcuts */
#define SLIC_WRITE 1
#define SLIC_READ 0
-#define SLIC_DIRECT_REQUEST(xbus,xpd,chipsel,writing,reg,dL) \
- xpp_register_request((xbus), (xpd), (chipsel), (writing), 0, (reg), 0, (dL), 0)
-#define SLIC_INDIRECT_REQUEST(xbus,xpd,chipsel,writing,reg,dL,dH) \
- xpp_register_request((xbus), (xpd), (chipsel), (writing), 1, 0x1E, (reg), (dL), (dH))
+#define SLIC_DIRECT_REQUEST(xbus,xpd,port,writing,reg,dL) \
+ xpp_register_request((xbus), (xpd), (port), (writing), (reg), 0, 0, (dL), 0, 0, 0)
+#define SLIC_INDIRECT_REQUEST(xbus,xpd,port,writing,reg,dL,dH) \
+ xpp_register_request((xbus), (xpd), (port), (writing), 0x1E, 1, (reg), (dL), 1, (dH), 0)
-#define VALID_CHIPSEL(x) (((chipsel) >= 0 && (chipsel) <= 7) || (chipsel) == ALL_CHANS)
+#define VALID_PORT(port) (((port) >= 0 && (port) <= 7) || (port) == PORT_BROADCAST)
+
+#define REG_DIGITAL_IOCTRL 0x06 /* LED and RELAY control */
/* Values of SLIC linefeed control register (0x40) */
enum fxs_state {
@@ -93,14 +95,16 @@ enum fxs_state {
/*
* DTMF detection
*/
-#define SLIC_REG_DTMF 0x18 /* 24 */
-#define SLIC_REG_VOLTAGE 0x42 /* 66 */
+#define REG_DTMF_DECODE 0x18 /* 24 - DTMF Decode Status */
+#define REG_BATTERY 0x42 /* 66 - Battery Feed Control */
+#define REG_BATTERY_BATSL BIT(1) /* Battery Feed Select */
+
+#define REG_LOOPCLOSURE 0x44 /* 68 - Loop Closure/Ring Trip Detect Status */
+#define REG_LOOPCLOSURE_LCR BIT(0) /* Loop Closure Detect Indicator. */
/*---------------- FXS Protocol Commands ----------------------------------*/
static /* 0x0F */ DECLARE_CMD(FXS, XPD_STATE, bool on);
-static /* 0x0F */ DECLARE_CMD(FXS, RING, lineno_t chan, bool on);
-static /* 0x0F */ DECLARE_CMD(FXS, RELAY_OUT, byte which, bool on);
static bool fxs_packet_is_valid(xpacket_t *pack);
static void fxs_packet_dump(const char *msg, xpacket_t *pack);
@@ -108,8 +112,6 @@ static int proc_fxs_info_read(char *page, char **start, off_t off, int count, in
#ifdef WITH_METERING
static int proc_xpd_metering_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
#endif
-static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data);
-static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
static void start_stop_vm_led(xbus_t *xbus, xpd_t *xpd, lineno_t pos);
#define PROC_REGISTER_FNAME "slics"
@@ -119,7 +121,6 @@ static void start_stop_vm_led(xbus_t *xbus, xpd_t *xpd, lineno_t pos);
#endif
struct FXS_priv_data {
- struct proc_dir_entry *regfile;
#ifdef WITH_METERING
struct proc_dir_entry *meteringfile;
#endif
@@ -163,12 +164,12 @@ static int linefeed_control(xbus_t *xbus, xpd_t *xpd, lineno_t chan, enum fxs_st
static int do_chan_power(xbus_t *xbus, xpd_t *xpd, lineno_t chan, bool on)
{
- int value = (on) ? 0x06 : 0x00;
+ int value = (on) ? REG_BATTERY_BATSL : 0x00;
BUG_ON(!xbus);
BUG_ON(!xpd);
LINE_DBG(SIGNAL, xpd, chan, "%s\n", (on) ? "up" : "down");
- return SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, SLIC_REG_VOLTAGE, value);
+ return SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, REG_BATTERY, value);
}
/*
@@ -217,7 +218,7 @@ static int do_led(xpd_t *xpd, lineno_t chan, byte which, bool on)
which = which % NUM_LEDS;
if(IS_SET(xpd->digital_outputs, chan) || IS_SET(xpd->digital_inputs, chan))
goto out;
- if(chan == ALL_CHANS) {
+ if(chan == PORT_BROADCAST) {
priv->ledstate[which] = (on) ? ~0 : 0;
} else {
if(on) {
@@ -231,7 +232,8 @@ static int do_led(xpd_t *xpd, lineno_t chan, byte which, bool on)
value |= ((BIT(5) | BIT(6) | BIT(7)) & ~led_register_mask[which]);
if(on)
value |= led_register_vals[which];
- ret = SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, 0x06, value);
+ ret = SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE,
+ REG_DIGITAL_IOCTRL, value);
out:
return ret;
}
@@ -240,7 +242,7 @@ static void handle_fxs_leds(xpd_t *xpd)
{
int i;
const enum fxs_leds colors[] = { LED_GREEN, LED_RED };
- int color;
+ enum fxs_leds color;
unsigned int timer_count;
struct FXS_priv_data *priv;
@@ -251,7 +253,7 @@ static void handle_fxs_leds(xpd_t *xpd)
for_each_line(xpd, i) {
if(IS_SET(xpd->digital_outputs | xpd->digital_inputs, i))
continue;
- if(xpd->blink_mode || IS_BLINKING(priv, i, color)) { // Blinking
+ if((xpd->blink_mode & BIT(i)) || IS_BLINKING(priv, i, color)) { // Blinking
int mod_value = LED_COUNTER(priv, i, color);
if(!mod_value)
@@ -301,46 +303,13 @@ static int metering_gen(xpd_t *xpd, lineno_t chan, bool on)
/*---------------- FXS: Methods -------------------------------------------*/
-static xpd_t *FXS_card_new(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, byte revision)
-{
- xpd_t *xpd = NULL;
- int channels;
- int regular_channels;
-
- if(subtype == 2)
- regular_channels = min(6, CHANNELS_PERXPD);
- else
- regular_channels = min(8, CHANNELS_PERXPD);
- channels = regular_channels;
- if(unit == 0)
- channels += 6; /* 2 DIGITAL OUTPUTS, 4 DIGITAL INPUTS */
- xpd = xpd_alloc(sizeof(struct FXS_priv_data), proto_table, channels);
- if(!xpd)
- return NULL;
- if(unit == 0) {
- XBUS_DBG(GENERAL, xbus, "First XPD detected. Initialize digital outputs/inputs\n");
- xpd->digital_outputs = BITMASK(LINES_DIGI_OUT) << regular_channels;
- xpd->digital_inputs = BITMASK(LINES_DIGI_INP) << (regular_channels + LINES_DIGI_OUT);
- }
- xpd->direction = TO_PHONE;
- xpd->revision = revision;
- xpd->type_name = proto_table->name;
- return xpd;
-}
-
-static void clean_proc(xbus_t *xbus, xpd_t *xpd)
+static void fxs_proc_remove(xbus_t *xbus, xpd_t *xpd)
{
struct FXS_priv_data *priv;
BUG_ON(!xpd);
priv = xpd->priv;
#ifdef CONFIG_PROC_FS
- if(priv->regfile) {
- XPD_DBG(PROC, xpd, "Removing xpd SLIC file\n");
- priv->regfile->data = NULL;
- remove_proc_entry(PROC_REGISTER_FNAME, xpd->proc_xpd_dir);
- priv->regfile = NULL;
- }
#ifdef WITH_METERING
if(priv->meteringfile) {
XPD_DBG(PROC, xpd, "Removing xpd metering tone file\n");
@@ -357,20 +326,18 @@ static void clean_proc(xbus_t *xbus, xpd_t *xpd)
#endif
}
-static int FXS_card_init(xbus_t *xbus, xpd_t *xpd)
+static int fxs_proc_create(xbus_t *xbus, xpd_t *xpd)
{
struct FXS_priv_data *priv;
- int ret = 0;
- int i;
BUG_ON(!xpd);
priv = xpd->priv;
+
#ifdef CONFIG_PROC_FS
XPD_DBG(PROC, xpd, "Creating FXS_INFO file\n");
priv->fxs_info = create_proc_read_entry(PROC_FXS_INFO_FNAME, 0444, xpd->proc_xpd_dir, proc_fxs_info_read, xpd);
if(!priv->fxs_info) {
XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_FXS_INFO_FNAME);
- ret = -ENOENT;
goto err;
}
priv->fxs_info->owner = THIS_MODULE;
@@ -379,7 +346,6 @@ static int FXS_card_init(xbus_t *xbus, xpd_t *xpd)
priv->meteringfile = create_proc_entry(PROC_METERING_FNAME, 0200, xpd->proc_xpd_dir);
if(!priv->meteringfile) {
XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_METERING_FNAME);
- ret = -ENOENT;
goto err;
}
priv->meteringfile->owner = THIS_MODULE;
@@ -387,31 +353,75 @@ static int FXS_card_init(xbus_t *xbus, xpd_t *xpd)
priv->meteringfile->read_proc = NULL;
priv->meteringfile->data = xpd;
#endif
- XPD_DBG(PROC, xpd, "Creating SLICs file\n");
- priv->regfile = create_proc_entry(PROC_REGISTER_FNAME, 0644, xpd->proc_xpd_dir);
- if(!priv->regfile) {
- XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_REGISTER_FNAME);
- ret = -ENOENT;
- goto err;
- }
- priv->regfile->owner = THIS_MODULE;
- priv->regfile->write_proc = proc_xpd_register_write;
- priv->regfile->read_proc = proc_xpd_register_read;
- priv->regfile->data = xpd;
#endif
+ return 0;
+err:
+ return -EINVAL;
+}
+
+static xpd_t *FXS_card_new(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, int subunits, bool to_phone)
+{
+ xpd_t *xpd = NULL;
+ int channels;
+ int regular_channels;
+ struct FXS_priv_data *priv;
+ int i;
+
+ if(!to_phone) {
+ XBUS_NOTICE(xbus,
+ "XPD=%d%d: try to instanciate FXS with reverse direction\n",
+ unit, subunit);
+ return NULL;
+ }
+ if(subtype == 2)
+ regular_channels = min(6, CHANNELS_PERXPD);
+ else
+ regular_channels = min(8, CHANNELS_PERXPD);
+ channels = regular_channels;
+ if(unit == 0)
+ channels += 6; /* 2 DIGITAL OUTPUTS, 4 DIGITAL INPUTS */
+ xpd = xpd_alloc(sizeof(struct FXS_priv_data), proto_table, channels);
+ if(!xpd)
+ return NULL;
+ if(unit == 0) {
+ XBUS_DBG(GENERAL, xbus, "First XPD detected. Initialize digital outputs/inputs\n");
+ xpd->digital_outputs = BITMASK(LINES_DIGI_OUT) << regular_channels;
+ xpd->digital_inputs = BITMASK(LINES_DIGI_INP) << (regular_channels + LINES_DIGI_OUT);
+ }
+ xpd->direction = TO_PHONE;
+ xpd->type_name = "FXS";
+ if(xpd_common_init(xbus, xpd, unit, subunit, subtype, subunits) < 0)
+ goto err;
+ if(fxs_proc_create(xbus, xpd) < 0)
+ goto err;
+ priv = xpd->priv;
for_each_line(xpd, i) {
priv->idletxhookstate[i] = FXS_LINE_POL_ACTIVE;
}
- ret = run_initialize_registers(xpd);
- if(ret < 0)
- goto err;
+ return xpd;
+err:
+ xpd_free(xpd);
+ return NULL;
+}
+
+static int FXS_card_init(xbus_t *xbus, xpd_t *xpd)
+{
+ struct FXS_priv_data *priv;
+ int ret = 0;
+ int i;
+
+ BUG_ON(!xpd);
+ priv = xpd->priv;
/*
* Setup ring timers
*/
/* Software controled ringing (for CID) */
- ret = SLIC_DIRECT_REQUEST(xbus, xpd, ALL_CHANS, SLIC_WRITE, 0x22, 0x00); /* Ringing Oscilator Control */
+ ret = SLIC_DIRECT_REQUEST(xbus, xpd, PORT_BROADCAST, SLIC_WRITE, 0x22, 0x00); /* Ringing Oscilator Control */
if(ret < 0)
goto err;
+ for_each_line(xpd, i) {
+ linefeed_control(xbus, xpd, i, FXS_LINE_POL_ACTIVE);
+ }
XPD_DBG(GENERAL, xpd, "done\n");
for_each_line(xpd, i) {
do_led(xpd, i, LED_GREEN, 0);
@@ -427,9 +437,19 @@ static int FXS_card_init(xbus_t *xbus, xpd_t *xpd)
}
restore_leds(xpd);
pcm_recompute(xpd, 0);
+ /*
+ * We should query our offhook state long enough time after we
+ * set the linefeed_control()
+ * So we do this after the LEDs
+ */
+ for_each_line(xpd, i) {
+ if(IS_SET(xpd->digital_outputs | xpd->digital_inputs, i))
+ continue;
+ SLIC_DIRECT_REQUEST(xbus, xpd, i, SLIC_READ, REG_LOOPCLOSURE, 0);
+ }
return 0;
err:
- clean_proc(xbus, xpd);
+ fxs_proc_remove(xbus, xpd);
XPD_ERR(xpd, "Failed initializing registers (%d)\n", ret);
return ret;
}
@@ -441,7 +461,7 @@ static int FXS_card_remove(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
XPD_DBG(GENERAL, xpd, "\n");
- clean_proc(xbus, xpd);
+ fxs_proc_remove(xbus, xpd);
return 0;
}
@@ -481,6 +501,7 @@ static int FXS_card_zaptel_preregistration(xpd_t *xpd, bool on)
for_each_line(xpd, i) {
MARK_ON(priv, i, LED_GREEN);
msleep(4);
+ MARK_ON(priv, i, LED_RED);
}
return 0;
}
@@ -519,6 +540,103 @@ static void __do_mute_dtmf(xpd_t *xpd, int pos, bool muteit)
BIT_CLR(xpd->mute_dtmf, pos);
}
+static int set_vm_led_mode(xbus_t *xbus, xpd_t *xpd, int pos, int on)
+{
+ int ret = 0;
+ BUG_ON(!xbus);
+ BUG_ON(!xpd);
+
+ LINE_DBG(SIGNAL, xpd, pos, "%s%s\n", (on)?"ON":"OFF", (vmwineon)?"":" (Ignored)");
+ if (!vmwineon)
+ return 0;
+ if (on) {
+ /* A write to register 0x40 will now turn on/off the VM led */
+ ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x16, 0xE8, 0x03);
+ ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x15, 0xEF, 0x7B);
+ ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x14, 0x9F, 0x00);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x22, 0x19);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x4A, 0x34);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x30, 0xE0);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x31, 0x01);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x32, 0xF0);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x33, 0x05);
+ ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x1D, 0x00, 0x46);
+ } else {
+ /* A write to register 0x40 will now turn on/off the ringer */
+ ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x16, 0x00, 0x00);
+ ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x15, 0x60, 0x01);
+ ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x14, 0xF0, 0x7E);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x22, 0x00);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x4A, 0x34);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x30, 0x00);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x31, 0x00);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x32, 0x00);
+ ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x33, 0x00);
+ ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x1D, 0x00, 0x36);
+ }
+
+ return (ret ? -EPROTO : 0);
+}
+
+static void start_stop_vm_led(xbus_t *xbus, xpd_t *xpd, lineno_t pos)
+{
+ struct FXS_priv_data *priv;
+ bool on;
+
+ BUG_ON(!xpd);
+ if (!vmwineon || IS_SET(xpd->digital_outputs | xpd->digital_inputs, pos))
+ return;
+ priv = xpd->priv;
+ on = IS_SET(xpd->msg_waiting, pos);
+ LINE_DBG(SIGNAL, xpd, pos, "%s\n", (on)?"ON":"OFF");
+ set_vm_led_mode(xbus, xpd, pos, on);
+ do_chan_power(xbus, xpd, pos, on);
+ linefeed_control(xbus, xpd, pos, (on) ? FXS_LINE_RING : priv->idletxhookstate[pos]);
+}
+
+static int relay_out(xpd_t *xpd, int pos, bool on)
+{
+ int value;
+ int which = pos;
+ int relay_channels[] = { 0, 4 };
+
+ BUG_ON(!xpd);
+ /* map logical position to output port number (0/1) */
+ which -= (xpd->subtype == 2) ? 6 : 8;
+ LINE_DBG(SIGNAL, xpd, pos, "which=%d -- %s\n", which, (on) ? "on" : "off");
+ which = which % ARRAY_SIZE(relay_channels);
+ value = BIT(2) | BIT(3);
+ value |= ((BIT(5) | BIT(6) | BIT(7)) & ~led_register_mask[OUTPUT_RELAY]);
+ if(on)
+ value |= led_register_vals[OUTPUT_RELAY];
+ return SLIC_DIRECT_REQUEST(xpd->xbus, xpd, relay_channels[which],
+ SLIC_WRITE, REG_DIGITAL_IOCTRL, value);
+}
+
+static int send_ring(xpd_t *xpd, lineno_t chan, bool on)
+{
+ int ret = 0;
+ xbus_t *xbus;
+ struct FXS_priv_data *priv;
+ enum fxs_state value = (on) ? FXS_LINE_RING : FXS_LINE_POL_ACTIVE;
+
+ BUG_ON(!xpd);
+ xbus = xpd->xbus;
+ BUG_ON(!xbus);
+ LINE_DBG(SIGNAL, xpd, chan, "%s\n", (on)?"on":"off");
+ priv = xpd->priv;
+ set_vm_led_mode(xbus, xpd, chan, 0);
+ do_chan_power(xbus, xpd, chan, on); // Power up (for ring)
+ ret = linefeed_control(xbus, xpd, chan, value);
+ if(on) {
+ MARK_BLINK(priv, chan, LED_GREEN, LED_BLINK_RING);
+ } else {
+ if(IS_BLINKING(priv, chan, LED_GREEN))
+ MARK_BLINK(priv, chan, LED_GREEN, 0);
+ }
+ return ret;
+}
+
static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
{
struct FXS_priv_data *priv;
@@ -548,8 +666,8 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
__pcm_recompute(xpd, 0); /* already spinlocked */
spin_unlock_irqrestore(&xpd->lock, flags);
if(IS_SET(xpd->digital_outputs, pos)) {
- LINE_DBG(SIGNAL, xpd, pos, "digital output OFF\n");
- ret = CALL_XMETHOD(RELAY_OUT, xpd->xbus, xpd, pos-8, 0);
+ LINE_DBG(SIGNAL, xpd, pos, "%s -> digital output OFF\n", txsig2str(txsig));
+ ret = relay_out(xpd, pos, 0);
return ret;
}
if (priv->lasttxhook[pos] == FXS_LINE_OPEN) {
@@ -561,7 +679,7 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
if(IS_SET(xpd->offhook, pos))
MARK_ON(priv, pos, LED_GREEN);
}
- ret = CALL_XMETHOD(RING, xbus, xpd, pos, 0); // RING off
+ ret = send_ring(xpd, pos, 0); // RING off
if (!IS_SET(xpd->offhook, pos))
start_stop_vm_led(xbus, xpd, pos);
txhook = priv->lasttxhook[pos];
@@ -580,6 +698,10 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
ret = linefeed_control(xbus, xpd, pos, txhook);
break;
case ZT_TXSIG_OFFHOOK:
+ if(IS_SET(xpd->digital_outputs, pos)) {
+ LINE_NOTICE(xpd, pos, "%s -> Is digital output. Ignored\n", txsig2str(txsig));
+ return -EINVAL;
+ }
txhook = priv->lasttxhook[pos];
if(xpd->ringing[pos]) {
BIT_SET(xpd->cid_on, pos);
@@ -605,14 +727,17 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
BIT_CLR(priv->search_fsk_pattern, pos);
pcm_recompute(xpd, 0);
if(IS_SET(xpd->digital_outputs, pos)) {
- LINE_DBG(SIGNAL, xpd, pos, "%s digital output ON\n", txsig2str(txsig));
- ret = CALL_XMETHOD(RELAY_OUT, xpd->xbus, xpd, pos-8, 1);
+ LINE_DBG(SIGNAL, xpd, pos, "%s -> digital output ON\n", txsig2str(txsig));
+ ret = relay_out(xpd, pos, 1);
return ret;
}
- ret = CALL_XMETHOD(RING, xbus, xpd, pos, 1); // RING on
+ ret = send_ring(xpd, pos, 1); // RING on
break;
case ZT_TXSIG_KEWL:
- LINE_DBG(SIGNAL, xpd, pos, "KEWL START\n");
+ if(IS_SET(xpd->digital_outputs, pos)) {
+ LINE_DBG(SIGNAL, xpd, pos, "%s -> Is digital output. Ignored\n", txsig2str(txsig));
+ return -EINVAL;
+ }
linefeed_control(xbus, xpd, pos, FXS_LINE_OPEN);
MARK_OFF(priv, pos, LED_GREEN);
break;
@@ -653,7 +778,6 @@ static int FXS_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
if (get_user(val, (int __user *)arg))
return -EFAULT;
LINE_DBG(SIGNAL, xpd, pos, "ZT_ONHOOKTRANSFER (%d millis)\n", val);
- BUG_ON(pos == ALL_CHANS);
if (IS_SET(xpd->digital_inputs | xpd->digital_outputs, pos))
return 0; /* Nothing to do */
BIT_CLR(xpd->cid_on, pos);
@@ -757,60 +881,6 @@ static int FXS_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
return -ENOTTY;
}
-static int set_vm_led_mode(xbus_t *xbus, xpd_t *xpd, int pos, int on)
-{
- int ret = 0;
- BUG_ON(!xbus);
- BUG_ON(!xpd);
-
- LINE_DBG(SIGNAL, xpd, pos, "%s%s\n", (on)?"ON":"OFF", (vmwineon)?"":" (Ignored)");
- if (!vmwineon)
- return 0;
- if (on) {
- /* A write to register 0x40 will now turn on/off the VM led */
- ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x16, 0xE8, 0x03);
- ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x15, 0xEF, 0x7B);
- ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x14, 0x9F, 0x00);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x22, 0x19);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x4A, 0x34);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x30, 0xE0);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x31, 0x01);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x32, 0xF0);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x33, 0x05);
- ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x1D, 0x00, 0x46);
- } else {
- /* A write to register 0x40 will now turn on/off the ringer */
- ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x16, 0x00, 0x00);
- ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x15, 0x60, 0x01);
- ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x14, 0xF0, 0x7E);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x22, 0x00);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x4A, 0x34);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x30, 0x00);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x31, 0x00);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x32, 0x00);
- ret += SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x33, 0x00);
- ret += SLIC_INDIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x1D, 0x00, 0x36);
- }
-
- return (ret ? -EPROTO : 0);
-}
-
-static void start_stop_vm_led(xbus_t *xbus, xpd_t *xpd, lineno_t pos)
-{
- struct FXS_priv_data *priv;
- bool on;
-
- BUG_ON(!xpd);
- if (!vmwineon || IS_SET(xpd->digital_outputs | xpd->digital_inputs, pos))
- return;
- priv = xpd->priv;
- on = IS_SET(xpd->msg_waiting, pos);
- LINE_DBG(SIGNAL, xpd, pos, "%s\n", (on)?"ON":"OFF");
- set_vm_led_mode(xbus, xpd, pos, on);
- do_chan_power(xbus, xpd, pos, on);
- linefeed_control(xbus, xpd, pos, (on) ? FXS_LINE_RING : priv->idletxhookstate[pos]);
-}
-
static int FXS_card_open(xpd_t *xpd, lineno_t chan)
{
struct FXS_priv_data *priv;
@@ -819,7 +889,10 @@ static int FXS_card_open(xpd_t *xpd, lineno_t chan)
BUG_ON(!xpd);
priv = xpd->priv;
is_offhook = IS_SET(xpd->offhook, chan);
- LINE_DBG(GENERAL, xpd, chan, "(is %shook)\n", (is_offhook)?"off":"on");
+ if(is_offhook)
+ LINE_NOTICE(xpd, chan, "Already offhook during open. OK.\n");
+ else
+ LINE_DBG(SIGNAL, xpd, chan, "is onhook\n");
/*
* Delegate updating zaptel to FXS_card_tick():
* The problem is that zt_hooksig() is spinlocking the channel and
@@ -883,13 +956,12 @@ static void handle_linefeed(xpd_t *xpd)
priv->ohttimer[i]--;
if (!priv->ohttimer[i]) {
priv->idletxhookstate[i] = FXS_LINE_POL_ACTIVE;
+ BIT_CLR(xpd->cid_on, i);
+ BIT_CLR(priv->search_fsk_pattern, i);
+ pcm_recompute(xpd, 0);
if (priv->lasttxhook[i] == FXS_LINE_POL_OHTRANS) {
- enum fxs_state txhook = FXS_LINE_POL_ACTIVE;
/* Apply the change if appropriate */
- BIT_CLR(xpd->cid_on, i);
- BIT_CLR(priv->search_fsk_pattern, i);
- pcm_recompute(xpd, 0);
- linefeed_control(xpd->xbus, xpd, i, txhook);
+ linefeed_control(xpd->xbus, xpd, i, FXS_LINE_POL_ACTIVE);
}
}
}
@@ -939,10 +1011,10 @@ static void detect_vmwi(xpd_t *xpd)
LINE_DBG(GENERAL, xpd, pos, "MSG:");
for(j = 0; j < ZT_CHUNKSIZE; j++) {
- if(print_dbg)
+ if(debug)
printk(" %02X", writechunk[j]);
}
- if(print_dbg)
+ if(debug)
printk("\n");
}
#endif
@@ -993,14 +1065,11 @@ static int FXS_card_tick(xbus_t *xbus, xpd_t *xpd)
if(!IS_SET(priv->update_offhook_state, i))
continue;
/*
- * Update LEDs and zaptel with current state of line.
+ * Update zaptel with current state of line.
*/
if(IS_SET(xpd->offhook, i)) {
- LINE_NOTICE(xpd, i, "Already offhook during open. OK.\n");
- MARK_ON(priv, i, LED_GREEN);
update_line_status(xpd, i, 1);
} else {
- MARK_OFF(priv, i, LED_GREEN);
update_line_status(xpd, i, 0);
}
BIT_CLR(priv->update_offhook_state, i);
@@ -1015,99 +1084,40 @@ static int FXS_card_tick(xbus_t *xbus, xpd_t *xpd)
/*---------------- FXS: HOST COMMANDS -------------------------------------*/
-/* 0x0F */ HOSTCMD(FXS, XPD_STATE, bool on)
+static /* 0x0F */ HOSTCMD(FXS, XPD_STATE, bool on)
{
- int i;
- enum fxs_state value = (on) ? FXS_LINE_POL_ACTIVE : FXS_LINE_OPEN;
- unsigned long flags;
- struct FXS_priv_data *priv;
-
BUG_ON(!xbus);
BUG_ON(!xpd);
- priv = xpd->priv;
- spin_lock_irqsave(&xpd->lock, flags);
XPD_DBG(GENERAL, xpd, "%s\n", (on)?"on":"off");
- for_each_line(xpd, i)
- linefeed_control(xbus, xpd, i, value);
- if(on) {
- MARK_ON(priv, ALL_CHANS, LED_GREEN);
- } else {
- MARK_OFF(priv, ALL_CHANS, LED_GREEN);
- }
- spin_unlock_irqrestore(&xpd->lock, flags);
return 0;
}
-/* 0x0F */ HOSTCMD(FXS, RING, lineno_t chan, bool on)
-{
- int ret = 0;
- struct FXS_priv_data *priv;
- enum fxs_state value = (on) ? FXS_LINE_RING : FXS_LINE_POL_ACTIVE;
-
- BUG_ON(!xbus);
- BUG_ON(!xpd);
- LINE_DBG(SIGNAL, xpd, chan, "%s\n", (on)?"on":"off");
- priv = xpd->priv;
- set_vm_led_mode(xbus, xpd, chan, 0);
- do_chan_power(xbus, xpd, chan, on); // Power up (for ring)
- ret = linefeed_control(xbus, xpd, chan, value);
- if(on) {
- MARK_BLINK(priv, chan, LED_GREEN, LED_BLINK_RING);
- } else {
- if(IS_BLINKING(priv, chan, LED_GREEN))
- MARK_BLINK(priv, chan, LED_GREEN, 0);
- }
- return ret;
-}
-
-/* 0x0F */ HOSTCMD(FXS, RELAY_OUT, byte which, bool on)
-{
- int value;
- int relay_channels[] = { 0, 4 };
-
- BUG_ON(!xbus);
- BUG_ON(!xpd);
- XPD_DBG(SIGNAL, xpd, "RELAY_OUT: which=%d -- %s\n", which, (on) ? "on" : "off");
- which = which % ARRAY_SIZE(relay_channels);
- value = BIT(2) | BIT(3);
- value |= ((BIT(5) | BIT(6) | BIT(7)) & ~led_register_mask[OUTPUT_RELAY]);
- if(on)
- value |= led_register_vals[OUTPUT_RELAY];
- return SLIC_DIRECT_REQUEST(xbus, xpd, relay_channels[which], SLIC_WRITE, 0x06, value);
-}
-
/*---------------- FXS: Astribank Reply Handlers --------------------------*/
-HANDLER_DEF(FXS, SIG_CHANGED)
+/*
+ * Should be called with spinlocked XPD
+ */
+static void process_hookstate(xpd_t *xpd, xpp_line_t offhook, xpp_line_t change_mask)
{
- xpp_line_t sig_status = RPACKET_FIELD(pack, FXS, SIG_CHANGED, sig_status);
- xpp_line_t sig_toggles = RPACKET_FIELD(pack, FXS, SIG_CHANGED, sig_toggles);
+ xbus_t *xbus;
struct FXS_priv_data *priv;
int i;
- unsigned long flags;
BUG_ON(!xpd);
BUG_ON(xpd->direction != TO_PHONE);
+ xbus = xpd->xbus;
priv = xpd->priv;
- XPD_DBG(SIGNAL, xpd, "(PHONE) sig_toggles=0x%04X sig_status=0x%04X\n", sig_toggles, sig_status);
-#if 0
- Is this needed?
- for_each_line(xpd, i) {
- if(IS_SET(sig_toggles, i))
- do_chan_power(xpd->xbus, xpd, BIT(i), 0); // Power down (prevent overheating!!!)
- }
-#endif
- spin_lock_irqsave(&xpd->lock, flags);
+ XPD_DBG(SIGNAL, xpd, "offhook=0x%X change_mask=0x%X\n", offhook, change_mask);
for_each_line(xpd, i) {
if(IS_SET(xpd->digital_outputs, i) || IS_SET(xpd->digital_inputs, i))
continue;
- if(IS_SET(sig_toggles, i)) {
+ if(IS_SET(change_mask, i)) {
xpd->ringing[i] = 0; /* No more ringing... */
#ifdef WITH_METERING
metering_gen(xpd, i, 0); /* Stop metering... */
#endif
MARK_BLINK(priv, i, LED_GREEN, 0);
- if(IS_SET(sig_status, i)) {
+ if(IS_SET(offhook, i)) {
LINE_DBG(SIGNAL, xpd, i, "OFFHOOK\n");
MARK_ON(priv, i, LED_GREEN);
update_line_status(xpd, i, 1);
@@ -1119,6 +1129,26 @@ HANDLER_DEF(FXS, SIG_CHANGED)
}
}
__pcm_recompute(xpd, 0); /* in a spinlock */
+}
+
+HANDLER_DEF(FXS, SIG_CHANGED)
+{
+ xpp_line_t sig_status = RPACKET_FIELD(pack, FXS, SIG_CHANGED, sig_status);
+ xpp_line_t sig_toggles = RPACKET_FIELD(pack, FXS, SIG_CHANGED, sig_toggles);
+ unsigned long flags;
+
+ BUG_ON(!xpd);
+ BUG_ON(xpd->direction != TO_PHONE);
+ XPD_DBG(SIGNAL, xpd, "(PHONE) sig_toggles=0x%04X sig_status=0x%04X\n", sig_toggles, sig_status);
+#if 0
+ Is this needed?
+ for_each_line(xpd, i) {
+ if(IS_SET(sig_toggles, i))
+ do_chan_power(xpd->xbus, xpd, BIT(i), 0); // Power down (prevent overheating!!!)
+ }
+#endif
+ spin_lock_irqsave(&xpd->lock, flags);
+ process_hookstate(xpd, sig_status, sig_toggles);
spin_unlock_irqrestore(&xpd->lock, flags);
return 0;
}
@@ -1128,7 +1158,7 @@ static void process_digital_inputs(xpd_t *xpd, const reg_cmd_t *info)
{
int i;
bool offhook = (REG_FIELD(info, data_low) & 0x1) == 0;
- xpp_line_t lines = BIT(REG_FIELD(info, chipsel));
+ xpp_line_t lines = BIT(info->portnum);
/* Map SLIC number into line number */
for(i = 0; i < ARRAY_SIZE(input_channels); i++) {
@@ -1168,6 +1198,8 @@ static void process_dtmf(xpd_t *xpd, xpp_line_t lines, byte val)
if(!dtmf_detection)
return;
+ if(!SPAN_REGISTERED(xpd))
+ return;
priv = xpd->priv;
val &= 0xF;
if(val <= 0) {
@@ -1225,26 +1257,37 @@ static int FXS_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
XPD_DBG(REGS, xpd, "%s reg_num=0x%X, dataL=0x%X dataH=0x%X\n",
(indirect)?"I":"D",
regnum, REG_FIELD(info, data_low), REG_FIELD(info, data_high));
- if(!SPAN_REGISTERED(xpd))
- goto out;
+ if(!indirect && regnum == REG_DTMF_DECODE) {
+ byte val = REG_FIELD(info, data_low);
+ xpp_line_t lines = BIT(info->portnum);
+
+ process_dtmf(xpd, lines, val);
+ }
#ifdef POLL_DIGITAL_INPUTS
/*
* Process digital inputs polling results
*/
- if(xpd->xbus_idx == 0 && !indirect && regnum == 0x06)
+ else if(xpd->xbus_idx == 0 && !indirect && regnum == REG_DIGITAL_IOCTRL) {
process_digital_inputs(xpd, info);
+ }
#endif
- if(!indirect && regnum == SLIC_REG_DTMF) {
+ else if(!indirect && regnum == REG_LOOPCLOSURE) { /* OFFHOOK ? */
byte val = REG_FIELD(info, data_low);
- xpp_line_t lines = BIT(REG_FIELD(info, chipsel));
-
+ xpp_line_t mask = BIT(info->portnum);
+ xpp_line_t offhook;
+
+ offhook = (val & REG_LOOPCLOSURE_LCR) ? mask : 0;
+ LINE_DBG(SIGNAL, xpd, info->portnum,
+ "REG_LOOPCLOSURE: dataL=0x%X (offhook=0x%X mask=0x%X\n",
+ val, offhook, mask);
+ process_hookstate(xpd, offhook, mask);
+ } else {
#if 0
- XPD_DBG(SIGNAL, xpd, "DTMF result lines=0x%04X val=%d\n",
- lines, val);
+ XPD_NOTICE(xpd, "Spurious register reply(ignored): %s reg_num=0x%X, dataL=0x%X dataH=0x%X\n",
+ (indirect)?"I":"D",
+ regnum, REG_FIELD(info, data_low), REG_FIELD(info, data_high));
#endif
- process_dtmf(xpd, lines, val);
}
-out:
/* Update /proc info only if reply relate to the last slic read request */
if(
REG_FIELD(&xpd->requested_reply, regnum) == REG_FIELD(info, regnum) &&
@@ -1262,7 +1305,8 @@ static xproto_table_t PROTO_TABLE(FXS) = {
/* Prototable Card Opcode */
XENTRY( FXS, FXS, SIG_CHANGED ),
},
- .name = "FXS",
+ .name = "FXS", /* protocol name */
+ .ports_per_subunit = 8,
.type = XPD_TYPE_FXS,
.xops = {
.card_new = FXS_card_new,
@@ -1279,8 +1323,6 @@ static xproto_table_t PROTO_TABLE(FXS) = {
.card_ioctl = FXS_card_ioctl,
.card_register_reply = FXS_card_register_reply,
- .RING = XPROTO_CALLER(FXS, RING),
- .RELAY_OUT = XPROTO_CALLER(FXS, RELAY_OUT),
.XPD_STATE = XPROTO_CALLER(FXS, XPD_STATE),
},
.packet_is_valid = fxs_packet_is_valid,
@@ -1372,191 +1414,6 @@ static int proc_fxs_info_read(char *page, char **start, off_t off, int count, in
return len;
}
-/*
- *
- * Direct/Indirect
- * |
- * | Reg#
- * | |
- * | | Data (only in Write)
- * | | |
- * | | +-+-+
- * v v v v
- * FF WD 06 01 05
- * ^ ^
- * | |
- * | Write/Read
- * |
- * Chan#
- *
- */
-static int handle_register_command(xpd_t *xpd, char *cmdline)
-{
- unsigned chipsel;
- unsigned data_low = 0;
- unsigned data_high = 0;
- char op; /* [W]rite, [R]ead */
- char reg_type; /* [D]irect, [I]ndirect */
- int reg_num;
- int elements;
- bool writing;
- char *p;
- reg_cmd_t regcmd;
- xbus_t *xbus;
- int ret = -EINVAL;
-
- BUG_ON(!xpd);
- xbus = xpd->xbus;
- if((p = strchr(cmdline, '#')) != NULL) /* Truncate comments */
- *p = '\0';
- if((p = strchr(cmdline, ';')) != NULL) /* Truncate comments */
- *p = '\0';
- for(p = cmdline; *p && (*p == ' ' || *p == '\t'); p++) /* Trim leading whitespace */
- ;
- if(*p == '\0')
- return 0;
- if(!XBUS_GET(xbus)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
- return -EBUSY;
- }
- elements = sscanf(cmdline, "%d %c%c %x %x %x",
- &chipsel,
- &op, &reg_type, &reg_num,
- &data_low,
- &data_high);
- XPD_DBG(REGS, xpd, "'%s': %d %c%c %02X %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, data_low, data_high);
- if(elements < 4) { // At least: chipsel, op, reg_type, reg_num
- ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline);
- goto out;
- }
- if(!VALID_CHIPSEL(chipsel)) {
- ERR("Bad chipsel number: %d\n", chipsel);
- goto out;
- }
- REG_FIELD(&regcmd, chipsel) = chipsel;
- switch(op) {
- case 'W':
- writing = 1;
- break;
- case 'R':
- writing = 0;
- break;
- default:
- ERR("Unkown operation type '%c'\n", op);
- goto out;
- }
- switch(reg_type) {
- case 'I':
- REG_FIELD(&regcmd, do_subreg) = 1;
- REG_FIELD(&regcmd, regnum) = 0x1E; // FIXME: card dependent...
- REG_FIELD(&regcmd, subreg) = reg_num;
- break;
- case 'D':
- REG_FIELD(&regcmd, do_subreg) = 0;
- REG_FIELD(&regcmd, regnum) = reg_num;
- REG_FIELD(&regcmd, subreg) = 0;
- break;
- default:
- ERR("Unkown register type '%c'\n", reg_type);
- goto out;
- }
- if(
- (op == 'W' && reg_type == 'D' && elements != 5) ||
- (op == 'W' && reg_type == 'I' && elements != 6) ||
- (op == 'R' && reg_type == 'D' && elements != 4) ||
- (op == 'R' && reg_type == 'I' && elements != 4)
- ) {
- ERR("%s: '%s' (%d elements): %d %c%c %02X %02X %02X\n", __FUNCTION__,
- cmdline, elements,
- chipsel, op, reg_type, reg_num, data_low, data_high);
- goto out;
- }
- regcmd.bytes = sizeof(regcmd) - 1;
- REG_FIELD(&regcmd, data_low) = data_low;
- REG_FIELD(&regcmd, data_high) = data_high;
- REG_FIELD(&regcmd, read_request) = writing;
- xpd->requested_reply = regcmd;
- if(print_dbg)
- dump_reg_cmd("FXS", &regcmd, 1);
- ret = xpp_register_request(xpd->xbus, xpd,
- REG_FIELD(&regcmd, chipsel),
- writing,
- REG_FIELD(&regcmd, do_subreg),
- REG_FIELD(&regcmd, regnum),
- REG_FIELD(&regcmd, subreg),
- REG_FIELD(&regcmd, data_low),
- REG_FIELD(&regcmd, data_high));
-out:
- XBUS_PUT(xbus);
- return ret;
-}
-
-static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
-{
- xpd_t *xpd = data;
- char buf[MAX_PROC_WRITE];
- char *p;
- int i;
- int ret;
-
- if(!xpd)
- return -ENODEV;
- for(i = 0; i < count; /* noop */) {
- for(p = buf; p < buf + MAX_PROC_WRITE; p++) { /* read a line */
- if(i >= count)
- break;
- if(get_user(*p, buffer + i))
- return -EFAULT;
- i++;
- if(*p == '\n' || *p == '\r') /* whatever */
- break;
- }
- if(p >= buf + MAX_PROC_WRITE)
- return -E2BIG;
- *p = '\0';
- ret = handle_register_command(xpd, buf);
- if(ret < 0)
- return ret;
- msleep(1);
- }
- return count;
-}
-
-static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- int len = 0;
- unsigned long flags;
- xpd_t *xpd = data;
- reg_cmd_t *info;
- byte regnum;
- bool indirect;
-
- if(!xpd)
- return -ENODEV;
- spin_lock_irqsave(&xpd->lock, flags);
- info = &xpd->last_reply;
- indirect = (REG_FIELD(info, regnum) == 0x1E);
- regnum = (indirect) ? REG_FIELD(info, subreg) : REG_FIELD(info, regnum);
- len += sprintf(page + len, "# Writing bad data into this file may damage your hardware!\n");
- len += sprintf(page + len, "# Consult firmware docs first\n");
- len += sprintf(page + len, "#\n");
- len += sprintf(page + len, "#CH\tD/I\tReg.\tDL DH\n");
- len += sprintf(page + len, "%2d\tR%c\t%02X\t%02X %02X\n",
- REG_FIELD(info, chipsel),
- (indirect)?'I':'D',
- regnum, REG_FIELD(info, data_low), REG_FIELD(info, data_high));
- spin_unlock_irqrestore(&xpd->lock, flags);
- if (len <= off+count)
- *eof = 1;
- *start = page + off;
- len -= off;
- if (len > count)
- len = count;
- if (len < 0)
- len = 0;
- return len;
-}
-
#ifdef WITH_METERING
static int proc_xpd_metering_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
{
@@ -1581,7 +1438,7 @@ static int proc_xpd_metering_write(struct file *file, const char __user *buffer,
return -EINVAL;
}
chan = num;
- if(chan != ALL_CHANS && chan > xpd->channels) {
+ if(chan != PORT_BROADCAST && chan > xpd->channels) {
XPD_ERR(xpd, "Metering tone: bad channel number %d\n", chan);
return -EINVAL;
}
@@ -1593,7 +1450,7 @@ static int proc_xpd_metering_write(struct file *file, const char __user *buffer,
}
#endif
-int __init card_fxs_startup(void)
+static int __init card_fxs_startup(void)
{
INFO("revision %s\n", XPP_VERSION);
#ifdef POLL_DIGITAL_INPUTS
@@ -1616,7 +1473,7 @@ int __init card_fxs_startup(void)
return 0;
}
-void __exit card_fxs_cleanup(void)
+static void __exit card_fxs_cleanup(void)
{
xproto_unregister(&PROTO_TABLE(FXS));
}
diff --git a/xpp/card_fxs.h b/xpp/card_fxs.h
index 6a89228..0b36d3d 100644
--- a/xpp/card_fxs.h
+++ b/xpp/card_fxs.h
@@ -30,14 +30,11 @@ enum fxs_opcodes {
XPROTO_NAME(FXS, XPD_STATE) = 0x0F, /* Write to SLIC */
XPROTO_NAME(FXS, CHAN_POWER) = 0x0F, /* Write to SLIC */
XPROTO_NAME(FXS, CHAN_CID) = 0x0F, /* Write to SLIC */
- XPROTO_NAME(FXS, RING) = 0x0F, /* Write to SLIC */
XPROTO_NAME(FXS, LED) = 0x0F, /* Write to SLIC */
- XPROTO_NAME(FXS, RELAY_OUT) = 0x0F, /* Write to SLIC */
};
DEF_RPACKET_DATA(FXS, SIG_CHANGED,
- byte type; /* unused -- we have it from DEV_DESC */
xpp_line_t sig_status; /* channels: lsb=1, msb=8 */
xpp_line_t sig_toggles; /* channels: lsb=1, msb=8 */
);
diff --git a/xpp/card_global.c b/xpp/card_global.c
index e11c60b..091ceaf 100644
--- a/xpp/card_global.c
+++ b/xpp/card_global.c
@@ -21,6 +21,7 @@
*/
#include <linux/module.h>
+#include <linux/delay.h>
#include "xdefs.h"
#include "xpd.h"
#include "xpp_zap.h"
@@ -33,7 +34,362 @@ static const char rcsid[] = "$Id$";
DEF_PARM(charp,initdir, "/usr/share/zaptel", 0644, "The directory of card initialization scripts");
-extern int print_dbg;
+#define CHIP_REGISTERS "chipregs"
+
+extern int debug;
+
+/*---------------- GLOBAL PROC handling -----------------------------------*/
+
+static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+ int len = 0;
+ unsigned long flags;
+ xpd_t *xpd = data;
+ reg_cmd_t *info;
+
+ if(!xpd)
+ return -ENODEV;
+ spin_lock_irqsave(&xpd->lock, flags);
+ info = &xpd->last_reply;
+ len += sprintf(page + len, "# Writing bad data into this file may damage your hardware!\n");
+ len += sprintf(page + len, "# Consult firmware docs first\n");
+ len += sprintf(page + len, "#\n");
+ if(REG_FIELD(info, do_subreg)) {
+ len += sprintf(page + len, "#CH\tOP\tReg.\tSub\tDL\n");
+ len += sprintf(page + len, "%2d\tRS\t%02X\t%02X\t%02X\n",
+ info->portnum,
+ REG_FIELD(info, regnum), REG_FIELD(info, subreg), REG_FIELD(info, data_low));
+ } else {
+ len += sprintf(page + len, "#CH\tOP\tReg.\tDL\n");
+ len += sprintf(page + len, "%2d\tRD\t%02X\t%02X\n",
+ info->portnum,
+ REG_FIELD(info, regnum), REG_FIELD(info, data_low));
+ }
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ if (len <= off+count)
+ *eof = 1;
+ *start = page + off;
+ len -= off;
+ if (len > count)
+ len = count;
+ if (len < 0)
+ len = 0;
+ return len;
+}
+
+static int parse_hexbyte(const char *buf)
+{
+ char *endp;
+ unsigned val;
+
+ val = simple_strtoul(buf, &endp, 16);
+ if(*endp != '\0' || val > 0xFF)
+ return -EBADR;
+ return (byte)val;
+}
+
+static int execute_chip_command(xpd_t *xpd, const int argc, char *argv[])
+{
+ int argno;
+ char num_args;
+ int portno;
+ bool writing;
+ int op; /* [W]rite, [R]ead */
+ int addr_mode; /* [D]irect, [I]ndirect, [Mm]ulti */
+ bool do_indirect;
+ int regnum;
+ int subreg;
+ int data_low;
+ bool do_datah;
+ int data_high;
+ int ret = -EBADR;
+
+ num_args = 2; /* port + operation */
+ if(argc < num_args) {
+ XPD_ERR(xpd, "Not enough arguments (%d)\n", argc);
+ XPD_ERR(xpd,
+ "Any Command is composed of at least %d words (got only %d)\n",
+ num_args, argc);
+ goto out;
+ }
+ /* Process the arguments */
+ argno = 0;
+ if(strcmp(argv[argno], "*") == 0) {
+ portno = PORT_BROADCAST;
+ //XPD_DBG(REGS, xpd, "Port broadcast\n");
+ } else {
+ portno = parse_hexbyte(argv[argno]);
+ if(portno < 0 || portno >= 8) {
+ XPD_ERR(xpd, "Illegal port number '%s'\n", argv[argno]);
+ goto out;
+ }
+ //XPD_DBG(REGS, xpd, "Port is %d\n", portno);
+ }
+ argno++;
+ if(strlen(argv[argno]) != 2) {
+ XPD_ERR(xpd, "Wrong operation codes '%s'\n", argv[argno]);
+ goto out;
+ }
+ op = argv[argno][0];
+ switch(op) {
+ case 'W':
+ writing = 1;
+ num_args++; /* data low */
+ //XPD_DBG(REGS, xpd, "WRITING\n");
+ break;
+ case 'R':
+ writing = 0;
+ //XPD_DBG(REGS, xpd, "READING\n");
+ break;
+ default:
+ XPD_ERR(xpd, "Unkown operation type '%c'\n", op);
+ goto out;
+ }
+ addr_mode = argv[argno][1];
+ switch(addr_mode) {
+ case 'I':
+ do_indirect = 1;
+ num_args += 2; /* register + subreg */
+ //XPD_DBG(REGS, xpd, "INDIRECT\n");
+ break;
+ case 'D':
+ do_indirect = 0;
+ num_args++; /* register */
+ //XPD_DBG(REGS, xpd, "DIRECT\n");
+ break;
+ case 'M':
+ case 'm':
+ if(op != 'W') {
+ XPD_ERR(xpd,
+ "Can use Multibyte (%c) only with op 'W'\n", addr_mode);
+ goto out;
+ }
+ num_args--; /* No data low */
+ //XPD_DBG(REGS, xpd, "Multibyte (%c)\n", addr_mode);
+ break;
+ default:
+ XPD_ERR(xpd, "Unkown addressing type '%c'\n", addr_mode);
+ goto out;
+ }
+ if(argv[argno][2] != '\0') {
+ XPD_ERR(xpd, "Bad operation field '%s'\n", argv[argno]);
+ goto out;
+ }
+ if(argc < num_args) {
+ XPD_ERR(xpd,
+ "Command \"%s\" is composed of at least %d words (got only %d)\n",
+ argv[argno], num_args, argc);
+ goto out;
+ }
+ argno++;
+ if(addr_mode == 'M' || addr_mode == 'm') {
+ if(argno < argc) {
+ XPD_ERR(xpd,
+ "Magic-Multibyte(%c) with %d extra arguments\n",
+ addr_mode, argc - argno);
+ goto out;
+ }
+ ret = send_multibyte_request(xpd->xbus, xpd->addr.unit, portno,
+ addr_mode == 'm', NULL, 0);
+ goto out;
+ }
+ /* Normal (non-Magic) register commands */
+ do_datah = 0;
+ if(argno >= argc) {
+ XPD_ERR(xpd, "Missing register number\n");
+ goto out;
+ }
+ regnum = parse_hexbyte(argv[argno]);
+ if(regnum < 0) {
+ XPD_ERR(xpd, "Illegal register number '%s'\n", argv[argno]);
+ goto out;
+ }
+ //XPD_DBG(REGS, xpd, "Register is %X\n", regnum);
+ argno++;
+ if(do_indirect) {
+ if(argno >= argc) {
+ XPD_ERR(xpd, "Missing subregister number\n");
+ goto out;
+ }
+ subreg = parse_hexbyte(argv[argno]);
+ if(subreg < 0) {
+ XPD_ERR(xpd, "Illegal subregister number '%s'\n", argv[argno]);
+ goto out;
+ }
+ //XPD_DBG(REGS, xpd, "Subreg is %X\n", subreg);
+ argno++;
+ } else
+ subreg = 0;
+ if(writing) {
+ if(argno >= argc) {
+ XPD_ERR(xpd, "Missing data low number\n");
+ goto out;
+ }
+ data_low = parse_hexbyte(argv[argno]);
+ if(data_low < 0) {
+ XPD_ERR(xpd, "Illegal data_low number '%s'\n", argv[argno]);
+ goto out;
+ }
+ //XPD_DBG(REGS, xpd, "Data Low is %X\n", data_low);
+ argno++;
+ } else
+ data_low = 0;
+ if(argno < argc) {
+ do_datah = 1;
+ if(!argv[argno]) {
+ XPD_ERR(xpd, "Missing data high number\n");
+ goto out;
+ }
+ data_high = parse_hexbyte(argv[argno]);
+ if(data_high < 0) {
+ XPD_ERR(xpd, "Illegal data_high number '%s'\n", argv[argno]);
+ goto out;
+ }
+ //XPD_DBG(REGS, xpd, "Data High is %X\n", data_high);
+ argno++;
+ } else
+ data_high = 0;
+ if(argno < argc) {
+ XPD_ERR(xpd,
+ "Command contains an extra %d argument\n",
+ argc - argno);
+ goto out;
+ }
+#if 0
+ XPD_DBG(REGS, xpd,
+ "portno=%d writing=%d regnum=%d do_subreg=%d subreg=%d dataL=%d do_datah=%d dataH=%d\n",
+ portno, /* portno */
+ writing, /* writing */
+ regnum,
+ do_indirect, /* use subreg */
+ subreg, /* subreg */
+ data_low,
+ do_datah, /* use data_high*/
+ data_high);
+#endif
+ ret = xpp_register_request(xpd->xbus, xpd, portno,
+ writing, regnum, do_indirect, subreg,
+ data_low, do_datah, data_high, 1);
+out:
+ return ret;
+}
+
+static int parse_chip_command(xpd_t *xpd, char *cmdline)
+{
+ xbus_t *xbus;
+ int ret = -EBADR;
+ byte buf[MAX_PROC_WRITE];
+ char *str;
+ char *p;
+ static const int MAX_ARGS = 10;
+ char *argv[MAX_ARGS + 1];
+ int argc;
+ int i;
+
+ BUG_ON(!xpd);
+ xbus = xpd->xbus;
+ if(!XBUS_GET(xbus)) {
+ XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
+ return -EBUSY;
+ }
+ strlcpy(buf, cmdline, MAX_PROC_WRITE); /* Save a copy */
+ if(buf[0] == '#' || buf[0] == ';')
+ XPD_DBG(REGS, xpd, "Note: '%s'\n", buf);
+ if((p = strchr(buf, '#')) != NULL) /* Truncate comments */
+ *p = '\0';
+ if((p = strchr(buf, ';')) != NULL) /* Truncate comments */
+ *p = '\0';
+ for(p = buf; *p && (*p == ' ' || *p == '\t'); p++) /* Trim leading whitespace */
+ ;
+ str = p;
+ for(i = 0; (p = strsep(&str, " \t")) != NULL && i < MAX_ARGS; ) {
+ if(*p != '\0') {
+ argv[i] = p;
+ // XPD_DBG(REGS, xpd, "ARG %d = '%s'\n", i, p);
+ i++;
+ }
+ }
+ argv[i] = NULL;
+ argc = i;
+ if(p) {
+ XPD_ERR(xpd, "Too many words (%d) to process. Last was '%s'\n", i, p);
+ goto out;
+ }
+ if(argc)
+ ret = execute_chip_command(xpd, argc, argv);
+ else
+ ret = 0; /* empty command - no op */
+out:
+ XBUS_PUT(xbus);
+ return ret;
+}
+
+
+static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
+{
+ xpd_t *xpd = data;
+ char buf[MAX_PROC_WRITE];
+ char *p;
+ int i;
+ int ret;
+
+ if(!xpd)
+ return -ENODEV;
+ for(i = 0; i < count; /* noop */) {
+ for(p = buf; p < buf + MAX_PROC_WRITE; p++) { /* read a line */
+ if(i >= count)
+ break;
+ if(get_user(*p, buffer + i))
+ return -EFAULT;
+ i++;
+ if(*p == '\n' || *p == '\r') /* whatever */
+ break;
+ }
+ if(p >= buf + MAX_PROC_WRITE)
+ return -E2BIG;
+ *p = '\0';
+ ret = parse_chip_command(xpd, buf);
+ if(ret < 0) {
+ XPD_NOTICE(xpd, "Failed writing command: '%s'\n", buf);
+ return ret;
+ }
+ msleep(1); /* don't overflow command queue */
+ }
+ return count;
+}
+
+void chip_proc_remove(xbus_t *xbus, xpd_t *xpd)
+{
+ BUG_ON(!xpd);
+#ifdef CONFIG_PROC_FS
+ if(xpd->proc_xpd_chipregs) {
+ XBUS_DBG(PROC, xbus, "UNIT %d: Removing %s\n", xpd->addr.unit, CHIP_REGISTERS);
+ xpd->proc_xpd_chipregs->data = NULL;
+ remove_proc_entry(CHIP_REGISTERS, xpd->proc_xpd_dir);
+ }
+#endif
+}
+
+int chip_proc_create(xbus_t *xbus, xpd_t *xpd)
+{
+ BUG_ON(!xpd);
+#ifdef CONFIG_PROC_FS
+ XBUS_DBG(PROC, xbus, "UNIT %d: Creating %s\n", xpd->addr.unit, CHIP_REGISTERS);
+ xpd->proc_xpd_chipregs = create_proc_entry(CHIP_REGISTERS, 0644, xpd->proc_xpd_dir);
+ if(!xpd->proc_xpd_chipregs) {
+ XPD_ERR(xpd, "Failed to create proc file '%s'\n", CHIP_REGISTERS);
+ goto err;
+ }
+ xpd->proc_xpd_chipregs->owner = THIS_MODULE;
+ xpd->proc_xpd_chipregs->write_proc = proc_xpd_register_write;
+ xpd->proc_xpd_chipregs->read_proc = proc_xpd_register_read;
+ xpd->proc_xpd_chipregs->data = xpd;
+#endif
+ return 0;
+err:
+ chip_proc_remove(xbus, xpd);
+ return -EINVAL;
+}
/*---------------- GLOBAL Protocol Commands -------------------------------*/
@@ -42,25 +398,26 @@ static void global_packet_dump(const char *msg, xpacket_t *pack);
/*---------------- GLOBAL: HOST COMMANDS ----------------------------------*/
-/* 0x04 */ HOSTCMD(GLOBAL, DESC_REQ, int xpd_num)
+/* 0x07 */ HOSTCMD(GLOBAL, AB_REQUEST)
{
int ret = 0;
xframe_t *xframe;
xpacket_t *pack;
if(!xbus) {
- DBG(GENERAL, "NO XBUS\n");
+ DBG(DEVICES, "NO XBUS\n");
return -EINVAL;
}
- XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, DESC_REQ, xpd_num);
- XBUS_DBG(GENERAL, xbus, "to %1d%1d\n", XBUS_UNIT(xpd_num), XBUS_SUBUNIT(xpd_num));
+ XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, AB_REQUEST, 0);
+ RPACKET_FIELD(pack, GLOBAL, AB_REQUEST, rev) = XPP_PROTOCOL_VERSION;
+ XBUS_DBG(DEVICES, xbus, "Protocol Version %d\n", XPP_PROTOCOL_VERSION);
ret = send_cmd_frame(xbus, xframe);
- XBUS_COUNTER(xbus, DESC_REQ)++;
return ret;
}
-int xpp_register_request(xbus_t *xbus, xpd_t *xpd,
- byte chipsel, bool writing, bool do_subreg, byte regnum, byte subreg, byte data_low, byte data_high)
+int xpp_register_request(xbus_t *xbus, xpd_t *xpd, xportno_t portno,
+ bool writing, byte regnum, bool do_subreg, byte subreg,
+ byte data_low, bool do_datah, byte data_high, bool should_reply)
{
int ret = 0;
xframe_t *xframe;
@@ -72,26 +429,77 @@ int xpp_register_request(xbus_t *xbus, xpd_t *xpd,
return -EINVAL;
}
XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, xpd->xbus_idx);
- LINE_DBG(REGS, xpd, chipsel, "%c%c R%02X S%02X %02X %02X\n",
+ LINE_DBG(REGS, xpd, portno, "%c%c %02X %02X %02X %02X\n",
(writing)?'W':'R',
(do_subreg)?'S':'D',
regnum, subreg, data_low, data_high);
reg_cmd = &RPACKET_FIELD(pack, GLOBAL, REGISTER_REQUEST, reg_cmd);
reg_cmd->bytes = sizeof(*reg_cmd) - 1; // do not count the 'bytes' field
+ reg_cmd->is_multibyte = 0;
+ if(portno == PORT_BROADCAST) {
+ reg_cmd->portnum = 0;
+ REG_FIELD(reg_cmd, all_ports_broadcast) = 1;
+ } else {
+ reg_cmd->portnum = portno;
+ REG_FIELD(reg_cmd, all_ports_broadcast) = 0;
+ }
reg_cmd->eoframe = 0;
- reg_cmd->multibyte = 0;
- REG_FIELD(reg_cmd, chipsel) = chipsel;
REG_FIELD(reg_cmd, reserved) = 0; /* force reserved bits to 0 */
REG_FIELD(reg_cmd, read_request) = (writing) ? 0 : 1;
REG_FIELD(reg_cmd, do_subreg) = do_subreg;
REG_FIELD(reg_cmd, regnum) = regnum;
REG_FIELD(reg_cmd, subreg) = subreg;
+ REG_FIELD(reg_cmd, do_datah) = do_datah;
REG_FIELD(reg_cmd, data_low) = data_low;
REG_FIELD(reg_cmd, data_high) = data_high;
+ if(should_reply)
+ xpd->requested_reply = *reg_cmd;
+ if(debug & DBG_REGS) {
+ dump_reg_cmd("REG_REQ", 1, xbus, xpd->addr.unit, reg_cmd->portnum, reg_cmd);
+ dump_packet("REG_REQ", pack, 1);
+ }
ret = send_cmd_frame(xbus, xframe);
return ret;
}
+int send_multibyte_request(xbus_t *xbus,
+ unsigned unit, xportno_t portno,
+ bool eoftx, byte *buf, unsigned len)
+{
+ xframe_t *xframe;
+ xpacket_t *pack;
+ reg_cmd_t *reg_cmd;
+ int ret;
+
+ /*
+ * Zero length multibyte is legal and has special meaning for the
+ * firmware:
+ * eoftx==1: Start sending us D-channel packets.
+ * eoftx==0: Stop sending us D-channel packets.
+ */
+ if(len > MULTIBYTE_MAX_LEN) {
+ PORT_ERR(xbus, unit, portno, "%s: len=%d is too long. dropping.\n", __FUNCTION__, len);
+ return -EINVAL;
+ }
+ XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, unit);
+ reg_cmd = &RPACKET_FIELD(pack, GLOBAL, REGISTER_REQUEST, reg_cmd);
+ reg_cmd->bytes = len;
+ reg_cmd->is_multibyte = 1;
+ reg_cmd->portnum = portno;
+ reg_cmd->eoframe = eoftx;
+ if(len > 0) {
+ memcpy(REG_XDATA(reg_cmd), (byte *)buf, len);
+ } else {
+ PORT_DBG(REGS, xbus, unit, portno, "Magic Packet (eoftx=%d)\n", eoftx);
+ }
+ if(debug & DBG_REGS)
+ dump_xframe(__FUNCTION__, xbus, xframe, debug);
+ ret = send_cmd_frame(xbus, xframe);
+ if(ret < 0)
+ PORT_ERR(xbus, unit, portno, "%s: failed sending xframe\n", __FUNCTION__);
+ return ret;
+}
+
/*
* The XPD parameter is totaly ignored by the driver and firmware as well.
*/
@@ -135,32 +543,96 @@ HANDLER_DEF(GLOBAL, NULL_REPLY)
return 0;
}
-HANDLER_DEF(GLOBAL, DEV_DESC)
+HANDLER_DEF(GLOBAL, AB_DESCRIPTION) /* 0x08 */
{
- struct card_desc_struct *card_desc;
-
+ struct xbus_workqueue *worker = xbus->worker;
+ byte rev;
+ struct unit_descriptor *units;
+ int count_units;
+ int i;
+ int ret = 0;
+
+ rev = RPACKET_FIELD(pack, GLOBAL, AB_DESCRIPTION, rev);
+ units = RPACKET_FIELD(pack, GLOBAL, AB_DESCRIPTION, unit_descriptor);
+ count_units = XPACKET_LEN(pack) - ((byte *)units - (byte *)pack);
+ count_units /= sizeof(*units);
+ if(rev != XPP_PROTOCOL_VERSION) {
+ XBUS_NOTICE(xbus, "Bad protocol version %d (should be %d)\n",
+ rev, XPP_PROTOCOL_VERSION);
+ ret = -EPROTO;
+ goto proto_err;
+ }
+ if(count_units > NUM_UNITS) {
+ XBUS_NOTICE(xbus, "Too many units %d (should be %d)\n",
+ count_units, NUM_UNITS);
+ ret = -EPROTO;
+ goto proto_err;
+ }
+ if(count_units <= 0) {
+ XBUS_NOTICE(xbus, "Empty astribank? (%d units)\n",
+ count_units);
+ ret = -EPROTO;
+ goto proto_err;
+ }
+ XBUS_INFO(xbus, "DESCRIPTOR: %d cards, protocol revision %d\n", count_units, rev);
+ xbus->revision = rev;
+ if(!worker) {
+ XBUS_ERR(xbus, "missing worker\n");
+ ret = -ENODEV;
+ goto err;
+ }
+ for(i = 0; i < count_units; i++) {
+ struct unit_descriptor *this_unit = &units[i];
+ struct card_desc_struct *card_desc;
+ unsigned long flags;
+
+ if((card_desc = KZALLOC(sizeof(struct card_desc_struct), GFP_ATOMIC)) == NULL) {
+ XBUS_ERR(xbus, "Card description allocation failed.\n");
+ ret = -ENOMEM;
+ goto err;
+ }
+ card_desc->magic = CARD_DESC_MAGIC;
+ INIT_LIST_HEAD(&card_desc->card_list);
+ card_desc->type = this_unit->type;
+ card_desc->subtype = this_unit->subtype;
+ card_desc->xpd_addr = this_unit->addr;
+ card_desc->numchips = this_unit->numchips;
+ card_desc->ports_per_chip = this_unit->ports_per_chip;
+ card_desc->port_dir = this_unit->port_dir;
+ card_desc->ports = card_desc->numchips * card_desc->ports_per_chip;
+ XBUS_INFO(xbus, " CARD %d type=%d.%d ports=%d (%dx%d), port-dir=0x%02X\n",
+ card_desc->xpd_addr.unit,
+ card_desc->type,
+ card_desc->subtype,
+ card_desc->ports,
+ card_desc->numchips,
+ card_desc->ports_per_chip,
+ card_desc->port_dir
+ );
+ spin_lock_irqsave(&worker->worker_lock, flags);
+ worker->num_units++;
+ XBUS_COUNTER(xbus, UNITS)++;
+ list_add_tail(&card_desc->card_list, &worker->card_list);
+ spin_unlock_irqrestore(&worker->worker_lock, flags);
+ }
+ /* Initialize the work. (adapt to kernel API changes). */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+ INIT_WORK(&worker->xpds_init_work, xbus_populate);
+#else
+ INIT_WORK(&worker->xpds_init_work, xbus_populate, worker);
+#endif
+ xbus = get_xbus(xbus->num); /* released in xbus_populate() */
BUG_ON(!xbus);
- if((card_desc = KZALLOC(sizeof(struct card_desc_struct), GFP_ATOMIC)) == NULL) {
- XBUS_ERR(xbus, "Card description allocation failed.\n");
- return -ENOMEM;
- }
- card_desc->magic = CARD_DESC_MAGIC;
- INIT_LIST_HEAD(&card_desc->card_list);
- card_desc->xbus = xbus;
- card_desc->type = RPACKET_FIELD(pack, GLOBAL, DEV_DESC, type);
- card_desc->subtype = RPACKET_FIELD(pack, GLOBAL, DEV_DESC, subtype);
- card_desc->rev = RPACKET_FIELD(pack, GLOBAL, DEV_DESC, rev);
- card_desc->xpd_addr = RPACKET_FIELD(pack, GLOBAL, DEV_DESC, head.addr);
- card_desc->line_status = RPACKET_FIELD(pack, GLOBAL, DEV_DESC, line_status);
- XBUS_DBG(GENERAL, xbus, "XPD=%d%d type=%d.%d rev=%d line_status=0x%04X\n",
- card_desc->xpd_addr.unit,
- card_desc->xpd_addr.subunit,
- card_desc->type,
- card_desc->subtype,
- card_desc->rev,
- card_desc->line_status);
- xbus_poller_notify(xbus, card_desc);
+ /* Now send it */
+ if(!queue_work(worker->wq, &worker->xpds_init_work)) {
+ XBUS_ERR(xbus, "Failed to queue xpd initialization work\n");
+ return -ENODEV;
+ }
return 0;
+proto_err:
+ dump_packet("AB_DESCRIPTION", pack, DBG_ANY);
+err:
+ return ret;
}
HANDLER_DEF(GLOBAL, REGISTER_REPLY)
@@ -170,16 +642,14 @@ HANDLER_DEF(GLOBAL, REGISTER_REPLY)
if(!xpd) {
static int rate_limit;
- if((rate_limit++ % 1003) < 5) {
- XBUS_NOTICE(xbus,
- "%s: non-existing unit (%1d%1d) (rate_limit=%d)\n",
- __FUNCTION__,
- XPACKET_ADDR_UNIT(pack),
- XPACKET_ADDR_SUBUNIT(pack),
- rate_limit);
- }
+ if((rate_limit++ % 1003) < 5)
+ notify_bad_xpd(__FUNCTION__, xbus, XPACKET_ADDR(pack), "");
return -EPROTO;
}
+ if(debug & DBG_REGS) {
+ dump_reg_cmd("REG_REPLY", 0, xbus, xpd->addr.unit, reg->portnum, reg);
+ dump_packet("REG_REPLY", pack, 1);
+ }
return CALL_XMETHOD(card_register_reply, xbus, xpd, reg);
}
@@ -195,7 +665,7 @@ HANDLER_DEF(GLOBAL, SYNC_REPLY)
return -EINVAL;
}
XBUS_DBG(SYNC, xbus, "%s (0x%X), drift=%d\n", mode_name, mode, drift);
- //dump_packet("SYNC_REPLY", pack, print_dbg & DBG_SYNC);
+ //dump_packet("SYNC_REPLY", pack, debug & DBG_SYNC);
got_new_syncer(xbus, mode, drift);
return 0;
}
@@ -204,34 +674,35 @@ HANDLER_DEF(GLOBAL, SYNC_REPLY)
HANDLER_DEF(GLOBAL, ERROR_CODE)
{
- byte errorcode = RPACKET_FIELD(pack, GLOBAL, ERROR_CODE, errorcode);
- reg_cmd_t *bad_cmd;
- char tmp_name[TMP_NAME_LEN];
- static long rate_limit;
+ byte errorcode;
+ char tmp_name[TMP_NAME_LEN];
+ static long rate_limit;
+ const char *msg;
+ const static char *fw_messages[] = {
+ [1] = "Packet too short",
+ [2] = "Len field is too small",
+ [3] = "Premature packet end",
+ [4] = "Invalid op code",
+ [5] = "Invalid packet len",
+ [6] = "SPI fifo full",
+ };
BUG_ON(!xbus);
if((rate_limit++ % 5003) > 200)
return 0;
+ errorcode = RPACKET_FIELD(pack, GLOBAL, ERROR_CODE, errorcode);
+ msg = (errorcode < ARRAY_SIZE(fw_messages))
+ ? fw_messages[errorcode]
+ : "UNKNOWN CODE";
if(!xpd) {
snprintf(tmp_name, TMP_NAME_LEN, "%s(%1d%1d)", xbus->busname,
XPACKET_ADDR_UNIT(pack), XPACKET_ADDR_SUBUNIT(pack));
} else {
snprintf(tmp_name, TMP_NAME_LEN, "%s/%s", xbus->busname, xpd->xpdname);
}
- NOTICE("%s: FIRMWARE: %s CODE = 0x%X (rate_limit=%ld)\n",
- tmp_name, cmd->name, errorcode, rate_limit);
- switch(errorcode) {
- case 1:
- bad_cmd = &RPACKET_FIELD(pack, GLOBAL, ERROR_CODE, info.bad_spi_cmd);
- dump_packet("FIRMWARE: BAD_SPI_CMD", pack, 1);
- break;
- case 0xAB:
- dump_packet("FIRMWARE: BAD_PACKET_LEN", pack, 1);
- break;
- default:
- NOTICE("%s: FIRMWARE: %s UNKNOWN CODE = 0x%X\n", tmp_name, cmd->name, errorcode);
- dump_packet("PACKET", pack, 1);
- }
+ NOTICE("%s: FIRMWARE: %s CODE = 0x%X (%s) (rate_limit=%ld)\n",
+ tmp_name, cmd->name, errorcode, msg, rate_limit);
+ dump_packet("FIRMWARE: ", pack, 1);
/*
* FIXME: Should implement an error recovery plan
*/
@@ -243,7 +714,7 @@ xproto_table_t PROTO_TABLE(GLOBAL) = {
.entries = {
/* Prototable Card Opcode */
XENTRY( GLOBAL, GLOBAL, NULL_REPLY ),
- XENTRY( GLOBAL, GLOBAL, DEV_DESC ),
+ XENTRY( GLOBAL, GLOBAL, AB_DESCRIPTION ),
XENTRY( GLOBAL, GLOBAL, SYNC_REPLY ),
XENTRY( GLOBAL, GLOBAL, ERROR_CODE ),
XENTRY( GLOBAL, GLOBAL, REGISTER_REPLY ),
@@ -275,23 +746,25 @@ int run_initialize_registers(xpd_t *xpd)
int ret;
xbus_t *xbus;
char busstr[MAX_ENV_STR];
- char xpdstr[MAX_ENV_STR];
char unitstr[MAX_ENV_STR];
- char subunitstr[MAX_ENV_STR];
+ char subunitsstr[MAX_ENV_STR];
char typestr[MAX_ENV_STR];
+ char directionstr[MAX_ENV_STR];
char revstr[MAX_ENV_STR];
char connectorstr[MAX_ENV_STR];
char init_card[MAX_PATH_STR];
+ byte direction_mask;
+ int i;
char *argv[] = {
init_card,
NULL
};
char *envp[] = {
busstr,
- xpdstr,
unitstr,
- subunitstr,
+ subunitsstr,
typestr,
+ directionstr,
revstr,
connectorstr,
NULL
@@ -303,15 +776,27 @@ int run_initialize_registers(xpd_t *xpd)
XPD_NOTICE(xpd, "Missing initdir parameter\n");
return -EINVAL;
}
- snprintf(busstr, MAX_ENV_STR, "XPD_BUS=%s", xbus->busname);
- snprintf(xpdstr, MAX_ENV_STR, "XPD_NAME=%s", xpd->xpdname);
- snprintf(unitstr, MAX_ENV_STR, "XPD_UNIT=%d", xpd->addr.unit);
- snprintf(subunitstr, MAX_ENV_STR, "XPD_SUBUNIT=%d", xpd->addr.subunit);
- snprintf(typestr, MAX_ENV_STR, "XPD_TYPE=%d", xpd->type);
- snprintf(revstr, MAX_ENV_STR, "XPD_REVISION=%d", xpd->revision);
+ direction_mask = 0;
+ for(i = 0; i < xpd->subunits; i++) {
+ xpd_t *su = xpd_byaddr(xbus, xpd->addr.unit, i);
+
+ if(!su) {
+ XPD_ERR(xpd,
+ "Have %d subunits, but not subunit #%d\n",
+ xpd->subunits, i);
+ continue;
+ }
+ direction_mask |= (su->direction == TO_PHONE) ? BIT(i) : 0;
+ }
+ snprintf(busstr, MAX_ENV_STR, "XBUS_NAME=%s", xbus->busname);
+ snprintf(unitstr, MAX_ENV_STR, "UNIT_NUMBER=%d", xpd->addr.unit);
+ snprintf(typestr, MAX_ENV_STR, "UNIT_TYPE=%d", xpd->type);
+ snprintf(subunitsstr, MAX_ENV_STR, "UNIT_SUBUNITS=%d", xpd->subunits);
+ snprintf(directionstr, MAX_ENV_STR, "UNIT_SUBUNITS_DIR=%d", direction_mask);
+ snprintf(revstr, MAX_ENV_STR, "XBUS_REVISION=%d", xbus->revision);
snprintf(connectorstr, MAX_ENV_STR, "XBUS_CONNECTOR=%s", xbus->location);
if(snprintf(init_card, MAX_PATH_STR, "%s/init_card_%d_%d",
- initdir, xpd->type, xpd->revision) > MAX_PATH_STR) {
+ initdir, xpd->type, xbus->revision) > MAX_PATH_STR) {
XPD_NOTICE(xpd, "Cannot initialize. pathname is longer than %d characters.\n", MAX_PATH_STR);
return -E2BIG;
}
@@ -319,14 +804,14 @@ int run_initialize_registers(xpd_t *xpd)
XBUS_ERR(xbus, "Skipped register initialization. XBUS is going down\n");
return -ENODEV;
}
- XPD_DBG(GENERAL, xpd, "running '%s' for type=%d revision=%d\n",
- init_card, xpd->type, xpd->revision);
+ XPD_DBG(DEVICES, xpd, "running '%s' for type=%d revision=%d\n",
+ init_card, xpd->type, xbus->revision);
ret = call_usermodehelper(init_card, argv, envp, 1);
/*
* Carefully report results
*/
if(ret == 0)
- XPD_DBG(GENERAL, xpd, "'%s' finished OK\n", init_card);
+ XPD_DBG(DEVICES, xpd, "'%s' finished OK\n", init_card);
else if(ret < 0) {
XPD_ERR(xpd, "Failed running '%s' (errno %d)\n", init_card, ret);
} else {
@@ -347,3 +832,4 @@ int run_initialize_registers(xpd_t *xpd)
EXPORT_SYMBOL(sync_mode_name);
EXPORT_SYMBOL(run_initialize_registers);
EXPORT_SYMBOL(xpp_register_request);
+EXPORT_SYMBOL(send_multibyte_request);
diff --git a/xpp/card_global.h b/xpp/card_global.h
index 250f4f4..c71f74d 100644
--- a/xpp/card_global.h
+++ b/xpp/card_global.h
@@ -26,8 +26,8 @@
#include "xbus-pcm.h"
enum global_opcodes {
- XPROTO_NAME(GLOBAL, DESC_REQ) = 0x04,
- XPROTO_NAME(GLOBAL, DEV_DESC) = 0x05,
+ XPROTO_NAME(GLOBAL, AB_REQUEST) = 0x07,
+ XPROTO_NAME(GLOBAL, AB_DESCRIPTION) = 0x08,
XPROTO_NAME(GLOBAL, REGISTER_REQUEST) = 0x0F,
XPROTO_NAME(GLOBAL, REGISTER_REPLY) = 0x10,
/**/
@@ -42,13 +42,28 @@ enum global_opcodes {
XPROTO_NAME(GLOBAL, NULL_REPLY) = 0xFE,
};
+struct unit_descriptor {
+ struct xpd_addr addr;
+ byte subtype:4;
+ byte type:4;
+ byte numchips;
+ byte ports_per_chip;
+ byte port_dir; /* bitmask: 0 - PSTN, 1 - PHONE */
+ byte reserved[2];
+ struct xpd_addr ec_addr;
+};
+
+#define NUM_UNITS 6
+
DEF_RPACKET_DATA(GLOBAL, NULL_REPLY);
-DEF_RPACKET_DATA(GLOBAL, DESC_REQ);
-DEF_RPACKET_DATA(GLOBAL, DEV_DESC,
- byte rev; /* Revision number */
- byte type:4; /* LSB: 1 - to_phone, 0 - to_line */
- byte subtype:4; /* default 0 */
- xpp_line_t line_status; /* hook/ring status, depending on unit */
+DEF_RPACKET_DATA(GLOBAL, AB_REQUEST,
+ byte rev;
+ byte reserved;
+ );
+DEF_RPACKET_DATA(GLOBAL, AB_DESCRIPTION,
+ byte rev;
+ byte reserved[3];
+ struct unit_descriptor unit_descriptor[NUM_UNITS];
);
DEF_RPACKET_DATA(GLOBAL, REGISTER_REQUEST,
reg_cmd_t reg_cmd;
@@ -77,18 +92,22 @@ DEF_RPACKET_DATA(GLOBAL, RESET_SYNC_COUNTERS,
);
DEF_RPACKET_DATA(GLOBAL, ERROR_CODE,
byte errorcode;
- union {
- reg_cmd_t bad_spi_cmd;
- } info;
+ byte bad_packet[0];
);
-/* 0x04 */ DECLARE_CMD(GLOBAL, DESC_REQ, int xpd_num);
+/* 0x07 */ DECLARE_CMD(GLOBAL, AB_REQUEST);
/* 0x19 */ DECLARE_CMD(GLOBAL, SYNC_SOURCE, enum sync_mode mode, int drift);
/* 0x23 */ DECLARE_CMD(GLOBAL, RESET_SYNC_COUNTERS);
-int xpp_register_request(xbus_t *xbus, xpd_t *xpd,
- byte chipsel, bool writing, bool do_subreg, byte regnum, byte subreg, byte data_low, byte data_high);
+void chip_proc_remove(xbus_t *xbus, xpd_t *xpd);
+int chip_proc_create(xbus_t *xbus, xpd_t *xpd);
+int xpp_register_request(xbus_t *xbus, xpd_t *xpd, xportno_t portno,
+ bool writing, byte regnum, bool do_subreg, byte subreg,
+ byte data_low, bool do_datah, byte data_high, bool should_reply);
+int send_multibyte_request(xbus_t *xbus, unsigned unit, xportno_t portno,
+ bool eoftx, byte *buf, unsigned len);
extern xproto_table_t PROTO_TABLE(GLOBAL);
int run_initialize_registers(xpd_t *xpd);
+extern charp initdir;
#endif /* CARD_GLOBAL_H */
diff --git a/xpp/card_pri.c b/xpp/card_pri.c
index 2187bb7..335b933 100644
--- a/xpp/card_pri.c
+++ b/xpp/card_pri.c
@@ -36,8 +36,8 @@
static const char rcsid[] = "$Id$";
-DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
-DEF_PARM(uint, poll_interval, 500, 0644, "Poll channel state interval in milliseconds (0 - disable)");
+static DEF_PARM(int, debug, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
+static DEF_PARM(uint, poll_interval, 500, 0644, "Poll channel state interval in milliseconds (0 - disable)");
#define PRI_LINES_BITMASK BITMASK(31)
#define PRI_DCHAN_SIGCAP ( \
@@ -50,11 +50,13 @@ DEF_PARM(uint, poll_interval, 500, 0644, "Poll channel state interval in millise
ZT_SIG_FXOGS | \
ZT_SIG_FXOKS | \
ZT_SIG_CAS | \
+ ZT_SIG_DACS | \
ZT_SIG_SF \
)
-#define PRI_BCHAN_SIGCAP ZT_SIG_CLEAR
+#define PRI_BCHAN_SIGCAP (ZT_SIG_CLEAR | ZT_SIG_DACS)
#define MAX_SLAVES 4 /* we have MUX of 4 clocks */
+#define PRI_PORT(xpd) ((xpd)->addr.subunit)
/*---------------- PRI Protocol Commands ----------------------------------*/
@@ -62,8 +64,6 @@ static bool pri_packet_is_valid(xpacket_t *pack);
static void pri_packet_dump(const char *msg, xpacket_t *pack);
static int proc_pri_info_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_pri_info_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
-static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data);
-static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
static int pri_startup(struct zt_span *span);
static int pri_shutdown(struct zt_span *span);
static int pri_lineconfig(xpd_t *xpd, int lineconfig);
@@ -71,8 +71,6 @@ static int pri_lineconfig(xpd_t *xpd, int lineconfig);
#define PROC_REGISTER_FNAME "slics"
#define PROC_PRI_INFO_FNAME "pri_info"
-#define VALID_CHIPSEL(x) ((x) == 0)
-
enum pri_protocol {
PRI_PROTO_0 = 0,
PRI_PROTO_E1 = 1,
@@ -246,15 +244,12 @@ struct pri_leds {
struct PRI_priv_data {
bool is_nt;
bool clock_source;
- struct proc_dir_entry *regfile;
struct proc_dir_entry *pri_info;
enum pri_protocol pri_protocol;
int deflaw;
unsigned int dchan_num;
bool initialized;
bool local_loopback;
- reg_cmd_t requested_reply;
- reg_cmd_t last_reply;
uint poll_noreplies;
uint layer1_replies;
byte reg_frs0;
@@ -286,20 +281,21 @@ static /* 0x33 */ DECLARE_CMD(PRI, SET_LED, enum pri_led_selectors led_sel, enum
static int query_subunit(xpd_t *xpd, byte regnum)
{
-#if 0
- XPD_DBG(GENERAL, xpd, "(%d%d): REG=0x%02X\n",
+ XPD_DBG(REGS, xpd, "(%d%d): REG=0x%02X\n",
xpd->addr.unit, xpd->addr.subunit,
regnum);
-#endif
return xpp_register_request(
xpd->xbus, xpd,
- 0, /* chipsel */
- 0, /* writing */
- 1, /* do_subreg */
+ PRI_PORT(xpd), /* portno */
+ 0, /* writing */
regnum,
- xpd->addr.subunit, /* subreg */
- 0, /* data_L */
- 0); /* data_H */
+ 0, /* do_subreg */
+ 0, /* subreg */
+ 0, /* data_L */
+ 0, /* do_datah */
+ 0, /* data_H */
+ 0 /* should_reply */
+ );
}
@@ -310,13 +306,16 @@ static int write_subunit(xpd_t *xpd, byte regnum, byte val)
regnum, val);
return xpp_register_request(
xpd->xbus, xpd,
- 0, /* chipsel */
- 1, /* writing */
- 1, /* do_subreg */
+ PRI_PORT(xpd), /* portno */
+ 1, /* writing */
regnum,
- xpd->addr.subunit, /* subreg */
- val, /* data_L */
- 0); /* data_H */
+ 0, /* do_subreg */
+ 0, /* subreg */
+ val, /* data_L */
+ 0, /* do_datah */
+ 0, /* data_H */
+ 0 /* should_reply */
+ );
}
static int pri_write_reg(xpd_t *xpd, int regnum, byte val)
@@ -326,35 +325,34 @@ static int pri_write_reg(xpd_t *xpd, int regnum, byte val)
regnum, val);
return xpp_register_request(
xpd->xbus, xpd,
- 0, /* chipsel */
- 1, /* writing */
- 0, /* do_subreg */
+ PRI_PORT(xpd), /* portno */
+ 1, /* writing */
regnum,
- 0, /* subreg */
- val, /* data_L */
- 0); /* data_H */
+ 0, /* do_subreg */
+ 0, /* subreg */
+ val, /* data_L */
+ 0, /* do_datah */
+ 0, /* data_H */
+ 0 /* should_reply */
+ );
}
-static xpd_t *PRI_card_new(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, byte revision)
+static void pri_proc_remove(xbus_t *xbus, xpd_t *xpd)
{
- xpd_t *xpd = NULL;
struct PRI_priv_data *priv;
- int channels = min(31, CHANNELS_PERXPD); /* worst case */
- XBUS_DBG(GENERAL, xbus, "\n");
- xpd = xpd_alloc(sizeof(struct PRI_priv_data), proto_table, channels);
- if(!xpd)
- return NULL;
+ BUG_ON(!xpd);
priv = xpd->priv;
- xpd->revision = revision;
- priv->pri_protocol = PRI_PROTO_0; /* Default, changes in set_pri_proto() */
- priv->deflaw = ZT_LAW_DEFAULT; /* Default, changes in set_pri_proto() */
- xpd->type_name =
- type_name(priv->pri_protocol, 0); /* Default, changes in set_nt() */
- return xpd;
+ XPD_DBG(PROC, xpd, "\n");
+#ifdef CONFIG_PROC_FS
+ if(priv->pri_info) {
+ XPD_DBG(PROC, xpd, "Removing xpd PRI_INFO file\n");
+ remove_proc_entry(PROC_PRI_INFO_FNAME, xpd->proc_xpd_dir);
+ }
+#endif
}
-static void clean_proc(xbus_t *xbus, xpd_t *xpd)
+static int pri_proc_create(xbus_t *xbus, xpd_t *xpd)
{
struct PRI_priv_data *priv;
@@ -362,16 +360,21 @@ static void clean_proc(xbus_t *xbus, xpd_t *xpd)
priv = xpd->priv;
XPD_DBG(PROC, xpd, "\n");
#ifdef CONFIG_PROC_FS
- if(priv->regfile) {
- XPD_DBG(PROC, xpd, "Removing registers file\n");
- priv->regfile->data = NULL;
- remove_proc_entry(PROC_REGISTER_FNAME, xpd->proc_xpd_dir);
- }
- if(priv->pri_info) {
- XPD_DBG(PROC, xpd, "Removing xpd PRI_INFO file\n");
- remove_proc_entry(PROC_PRI_INFO_FNAME, xpd->proc_xpd_dir);
+ XPD_DBG(PROC, xpd, "Creating PRI_INFO file\n");
+ priv->pri_info = create_proc_entry(PROC_PRI_INFO_FNAME, 0644, xpd->proc_xpd_dir);
+ if(!priv->pri_info) {
+ XPD_ERR(xpd, "Failed to create proc '%s'\n", PROC_PRI_INFO_FNAME);
+ goto err;
}
+ priv->pri_info->owner = THIS_MODULE;
+ priv->pri_info->write_proc = proc_pri_info_write;
+ priv->pri_info->read_proc = proc_pri_info_read;
+ priv->pri_info->data = xpd;
#endif
+ return 0;
+err:
+ pri_proc_remove(xbus, xpd);
+ return -EINVAL;
}
static bool valid_pri_modes(const xpd_t *xpd)
@@ -588,10 +591,10 @@ static int set_master_mode(const char *msg, xpd_t *xpd)
lim0 &= ~REG_LIM0_MAS;
if(priv->pri_protocol == PRI_PROTO_E1)
{
- lim0 |= REG_LIM0_RTRS; /* Receive termination: Integrated resistor is switched on (100 Ohm || 300 Ohm = 75 Ohm) */
- xsp |= REG_XSP_E_EBP | REG_XSP_E_AXS | REG_XSP_E_XSIF;
- } else if(priv->pri_protocol == PRI_PROTO_T1) {
lim0 &= ~REG_LIM0_RTRS; /* Receive termination: Integrated resistor is switched off (100 Ohm, no internal 300 Ohm) */;
+ xsp |= REG_XSP_E_EBP | REG_XSP_E_AXS | REG_XSP_E_XSIF;
+ } else if(priv->pri_protocol == PRI_PROTO_T1) {
+ lim0 |= REG_LIM0_RTRS; /* Receive termination: Integrated resistor is switched on (100 Ohm || 300 Ohm = 75 Ohm) */
xsp |= REG_FMR5_T_XTM;
}
XPD_DBG(SIGNAL, xpd, "%s(%s): %s\n", __FUNCTION__, msg, (is_master_mode) ? "MASTER" : "SLAVE");
@@ -680,7 +683,7 @@ static int pri_lineconfig(xpd_t *xpd, int lineconfig)
const char *crcstr = "";
byte fmr0 = 0; /* Dummy initilizations to */
byte fmr2 = 0; /* silense false gcc warnings */
- byte fmr4 = 0x0C;
+ byte fmr4 = 0; /* Dummy initilizations to */
unsigned int bad_bits;
int i;
@@ -716,11 +719,14 @@ static int pri_lineconfig(xpd_t *xpd, int lineconfig)
}
if(bad_bits)
goto bad_lineconfig;
- if(priv->pri_protocol == PRI_PROTO_E1)
+ if(priv->pri_protocol == PRI_PROTO_E1) {
fmr2 = REG_FMR2_E_AXRA | REG_FMR2_E_ALMF; /* 0x03 */
- else if(priv->pri_protocol == PRI_PROTO_T1)
+ fmr4 = 0x9F; /* E1.XSW: All spare bits = 1*/
+ } else if(priv->pri_protocol == PRI_PROTO_T1) {
fmr2 = REG_FMR2_T_SSP | REG_FMR2_T_AXRA; /* 0x22 */
- else if(priv->pri_protocol == PRI_PROTO_J1) {
+ fmr4 = 0x0C;
+ } else if(priv->pri_protocol == PRI_PROTO_J1) {
+ fmr4 = 0x1C;
XPD_ERR(xpd, "J1 unsupported yet\n");
return -ENOSYS;
}
@@ -819,49 +825,47 @@ static int pri_chanconfig(struct zt_chan *chan, int sigtype)
return 0;
}
-static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
+static xpd_t *PRI_card_new(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, int subunits, bool to_phone)
{
+ xpd_t *xpd = NULL;
struct PRI_priv_data *priv;
+ int channels = min(31, CHANNELS_PERXPD); /* worst case */
int ret = 0;
- xproto_table_t *proto_table;
- BUG_ON(!xpd);
- XPD_DBG(GENERAL, xpd, "\n");
- xpd->type = XPD_TYPE_PRI;
- proto_table = &PROTO_TABLE(PRI);
+ XBUS_DBG(GENERAL, xbus, "\n");
+ xpd = xpd_alloc(sizeof(struct PRI_priv_data), proto_table, channels);
+ if(!xpd)
+ return NULL;
priv = xpd->priv;
- xpd->xops = &proto_table->xops;
-#ifdef CONFIG_PROC_FS
- XPD_DBG(PROC, xpd, "Creating PRI_INFO file\n");
- priv->pri_info = create_proc_entry(PROC_PRI_INFO_FNAME, 0644, xpd->proc_xpd_dir);
- if(!priv->pri_info) {
- XPD_ERR(xpd, "Failed to create proc '%s'\n", PROC_PRI_INFO_FNAME);
- ret = -ENOENT;
+ priv->pri_protocol = PRI_PROTO_0; /* Default, changes in set_pri_proto() */
+ priv->deflaw = ZT_LAW_DEFAULT; /* Default, changes in set_pri_proto() */
+ xpd->type_name =
+ type_name(priv->pri_protocol, 0); /* Default, changes in set_nt() */
+ if(xpd_common_init(xbus, xpd, unit, subunit, subtype, subunits) < 0)
goto err;
- }
- priv->pri_info->owner = THIS_MODULE;
- priv->pri_info->write_proc = proc_pri_info_write;
- priv->pri_info->read_proc = proc_pri_info_read;
- priv->pri_info->data = xpd;
- XPD_DBG(PROC, xpd, "Creating registers file\n");
- priv->regfile = create_proc_entry(PROC_REGISTER_FNAME, 0644, xpd->proc_xpd_dir);
- if(!priv->regfile) {
- XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_REGISTER_FNAME);
- ret = -ENOENT;
+ if(pri_proc_create(xbus, xpd) < 0)
goto err;
- }
- priv->regfile->owner = THIS_MODULE;
- priv->regfile->write_proc = proc_xpd_register_write;
- priv->regfile->read_proc = proc_xpd_register_read;
- priv->regfile->data = xpd;
-#endif
/* Assume E1, changes later from user space */
ret = set_pri_proto(xpd, PRI_PROTO_E1);
if(ret < 0)
goto err;
- ret = run_initialize_registers(xpd);
- if(ret < 0)
- goto err;
+ return xpd;
+err:
+ xpd_free(xpd);
+ return NULL;
+}
+
+static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
+{
+ struct PRI_priv_data *priv;
+ int ret = 0;
+ xproto_table_t *proto_table;
+
+ BUG_ON(!xpd);
+ XPD_DBG(GENERAL, xpd, "\n");
+ xpd->type = XPD_TYPE_PRI;
+ proto_table = &PROTO_TABLE(PRI);
+ priv = xpd->priv;
/*
* initialization script should have set correct
* operating modes.
@@ -870,7 +874,6 @@ static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
XPD_NOTICE(xpd, "PRI protocol not set\n");
goto err;
}
- XPD_DBG(GENERAL, xpd, "done\n");
for(ret = 0; ret < NUM_LEDS; ret++) {
DO_LED(xpd, ret, PRI_LED_ON);
msleep(20);
@@ -879,7 +882,7 @@ static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
priv->initialized = 1;
return 0;
err:
- clean_proc(xbus, xpd);
+ pri_proc_remove(xbus, xpd);
XPD_ERR(xpd, "Failed initializing registers (%d)\n", ret);
return ret;
}
@@ -891,7 +894,7 @@ static int PRI_card_remove(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
XPD_DBG(GENERAL, xpd, "\n");
- clean_proc(xbus, xpd);
+ pri_proc_remove(xbus, xpd);
return 0;
}
@@ -1275,7 +1278,7 @@ static void PRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
}
if(logical_chan == PRI_DCHAN_IDX(priv)) {
if(priv->dchan_rx_sample != pcm[0]) {
- if(print_dbg & DBG_PCM) {
+ if(debug & DBG_PCM) {
XPD_INFO(xpd, "RX-D-Chan: prev=0x%X now=0x%X\n",
priv->dchan_rx_sample, pcm[0]);
dump_packet("RX-D-Chan", pack, 1);
@@ -1307,19 +1310,7 @@ static /* 0x0F */ HOSTCMD(PRI, XPD_STATE, bool on)
return 0;
}
-static /* 0x0F */ HOSTCMD(PRI, RING, lineno_t chan, bool on)
-{
- XPD_ERR(xpd, "%s: Unsupported\n", __FUNCTION__);
- return -ENOSYS;
-}
-
-static /* 0x0F */ HOSTCMD(PRI, RELAY_OUT, byte which, bool on)
-{
- XPD_ERR(xpd, "%s: Unsupported\n", __FUNCTION__);
- return -ENOSYS;
-}
-
-/* 0x33 */ HOSTCMD(PRI, SET_LED, enum pri_led_selectors led_sel, enum pri_led_state to_led_state)
+static /* 0x33 */ HOSTCMD(PRI, SET_LED, enum pri_led_selectors led_sel, enum pri_led_state to_led_state)
{
int ret = 0;
xframe_t *xframe;
@@ -1336,6 +1327,7 @@ static /* 0x0F */ HOSTCMD(PRI, RELAY_OUT, byte which, bool on)
pri_leds = &RPACKET_FIELD(pack, PRI, SET_LED, pri_leds);
pri_leds->state = to_led_state;
pri_leds->led_sel = led_sel;
+ pri_leds->reserved = 0;
XPACKET_LEN(pack) = RPACKET_SIZE(PRI, SET_LED);
ret = send_cmd_frame(xbus, xframe);
priv->ledstate[led_sel] = to_led_state;
@@ -1343,7 +1335,7 @@ static /* 0x0F */ HOSTCMD(PRI, RELAY_OUT, byte which, bool on)
}
/*---------------- PRI: Astribank Reply Handlers --------------------------*/
-static void layer1_state(xpd_t *xpd, byte subunit, byte data_low)
+static void layer1_state(xpd_t *xpd, byte data_low)
{
struct PRI_priv_data *priv;
int alarms = 0;
@@ -1351,10 +1343,6 @@ static void layer1_state(xpd_t *xpd, byte subunit, byte data_low)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(xpd->addr.subunit != subunit) {
- XPD_NOTICE(xpd, "layer1_state got wrong subunit=%d. Ignored.\n", subunit);
- return;
- }
priv->poll_noreplies = 0;
if(data_low & REG_FRS0_LOS)
alarms |= ZT_ALARM_RED;
@@ -1390,36 +1378,46 @@ static void layer1_state(xpd_t *xpd, byte subunit, byte data_low)
}
priv->reg_frs0 = data_low;
priv->layer1_replies++;
- XPD_DBG(REGS, xpd, "subunit=%d data_low=0x%02X\n", subunit, data_low);
+ XPD_DBG(REGS, xpd, "subunit=%d data_low=0x%02X\n", xpd->addr.subunit, data_low);
}
static int PRI_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
{
unsigned long flags;
struct PRI_priv_data *priv;
-
+ struct xpd_addr addr;
+ xpd_t *orig_xpd;
+
+ /* Map UNIT + PORTNUM to XPD */
+ orig_xpd = xpd;
+ addr.unit = orig_xpd->addr.unit;
+ addr.subunit = info->portnum;
+ xpd = xpd_byaddr(xbus, addr.unit, addr.subunit);
+ if(!xpd) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) < 5)
+ notify_bad_xpd(__FUNCTION__, xbus, addr , orig_xpd->xpdname);
+ return -EPROTO;
+ }
spin_lock_irqsave(&xpd->lock, flags);
priv = xpd->priv;
BUG_ON(!priv);
-#if 1
- if(print_dbg)
- dump_reg_cmd("PRI", info, 0);
-#endif
- if(info->multibyte) {
+ if(info->is_multibyte) {
XPD_NOTICE(xpd, "Got Multibyte: %d bytes, eoframe: %d\n",
info->bytes, info->eoframe);
goto end;
}
- if(REG_FIELD(info, regnum) == REG_FRS0 && REG_FIELD(info, do_subreg))
- layer1_state(xpd, REG_FIELD(info, subreg), REG_FIELD(info, data_low));
- if(REG_FIELD(info, regnum) == REG_FRS1 && REG_FIELD(info, do_subreg))
+ if(REG_FIELD(info, regnum) == REG_FRS0 && !REG_FIELD(info, do_subreg))
+ layer1_state(xpd, REG_FIELD(info, data_low));
+ if(REG_FIELD(info, regnum) == REG_FRS1 && !REG_FIELD(info, do_subreg))
priv->reg_frs1 = REG_FIELD(info, data_low);
/* Update /proc info only if reply relate to the last slic read request */
if(
- REG_FIELD(&priv->requested_reply, regnum) == REG_FIELD(info, regnum) &&
- REG_FIELD(&priv->requested_reply, do_subreg) == REG_FIELD(info, do_subreg) &&
- REG_FIELD(&priv->requested_reply, subreg) == REG_FIELD(info, subreg)) {
- priv->last_reply = *info;
+ REG_FIELD(&xpd->requested_reply, regnum) == REG_FIELD(info, regnum) &&
+ REG_FIELD(&xpd->requested_reply, do_subreg) == REG_FIELD(info, do_subreg) &&
+ REG_FIELD(&xpd->requested_reply, subreg) == REG_FIELD(info, subreg)) {
+ xpd->last_reply = *info;
}
end:
@@ -1432,7 +1430,8 @@ static xproto_table_t PROTO_TABLE(PRI) = {
.entries = {
/* Table Card Opcode */
},
- .name = "PRI_xx", /* xpd->type_name is set in set_nt() */
+ .name = "PRI", /* protocol name */
+ .ports_per_subunit = 1,
.type = XPD_TYPE_PRI,
.xops = {
.card_new = PRI_card_new,
@@ -1448,8 +1447,6 @@ static xproto_table_t PROTO_TABLE(PRI) = {
.card_close = PRI_card_close,
.card_register_reply = PRI_card_register_reply,
- .RING = XPROTO_CALLER(PRI, RING),
- .RELAY_OUT = XPROTO_CALLER(PRI, RELAY_OUT),
.XPD_STATE = XPROTO_CALLER(PRI, XPD_STATE),
},
.packet_is_valid = pri_packet_is_valid,
@@ -1610,208 +1607,7 @@ static int proc_pri_info_read(char *page, char **start, off_t off, int count, in
return len;
}
-/*
- *
- * Direct/Indirect
- * |
- * | Reg#
- * | |
- * | | Data (only in Write)
- * | | |
- * | | +-+-+
- * v v v v
- * FF WD 06 01 05
- * ^ ^
- * | |
- * | Write/Read
- * |
- * Chan#
- *
- */
-static int handle_register_command(xpd_t *xpd, char *cmdline)
-{
- unsigned chipsel;
- unsigned data = 0;
- unsigned xdata1 = 0;
- unsigned xdata2 = 0;
- char op; /* [W]rite, [R]ead */
- char reg_type; /* [D]irect, [S]ubregister */
- int reg_num;
- int subreg;
- int elements;
- bool writing;
- char *p;
- reg_cmd_t regcmd;
- xbus_t *xbus;
- int ret = -EINVAL;
- struct PRI_priv_data *priv;
- byte buf[MAX_PROC_WRITE];
-
- BUG_ON(!xpd);
- xbus = xpd->xbus;
- priv = xpd->priv;
- BUG_ON(!priv);
- if((p = strchr(cmdline, '#')) != NULL) /* Truncate comments */
- *p = '\0';
- if((p = strchr(cmdline, ';')) != NULL) /* Truncate comments */
- *p = '\0';
- for(p = cmdline; *p && (*p == ' ' || *p == '\t'); p++) /* Trim leading whitespace */
- ;
- if(*p == '\0')
- return 0;
- if(!XBUS_GET(xbus)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
- return -EBUSY;
- }
- memset(buf, 0, MAX_PROC_WRITE);
- elements = sscanf(cmdline, "%d %c%c %x %x %x %x %x",
- &chipsel,
- &op, &reg_type, &reg_num,
- &subreg,
- &data, &xdata1, &xdata2);
- XPD_DBG(PROC, xpd, "'%s': %d %c%c %02X %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, subreg, data);
- if(elements < 3) { // At least: chipsel, op, reg_type, reg_num
- ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline);
- goto out;
- }
- if(!VALID_CHIPSEL(chipsel)) {
- ERR("Bad chip select number: %d\n", chipsel);
- goto out;
- }
- REG_FIELD(&regcmd, chipsel) = chipsel;
- switch(op) {
- case 'W':
- writing = 1;
- break;
- case 'R':
- writing = 0;
- break;
- default:
- ERR("Unkown operation type '%c'\n", op);
- goto out;
- }
- if(
- (op == 'W' && reg_type == 'D' && elements != 5) ||
- (op == 'W' && reg_type == 'S' && elements != 6) ||
- (op == 'R' && reg_type == 'D' && elements != 4) ||
- (op == 'R' && reg_type == 'S' && elements != 5)
- ) {
- ERR("Bad number of elements: '%s' (%d elements): %d %c%c %02X %02X %02X\n",
- cmdline, elements,
- chipsel, op, reg_type, reg_num, subreg, data);
- goto out;
- }
- switch(reg_type) {
- case 'S':
- REG_FIELD(&regcmd, do_subreg) = 1;
- REG_FIELD(&regcmd, regnum) = reg_num;
- REG_FIELD(&regcmd, subreg) = subreg;
- REG_FIELD(&regcmd, data_low) = data;
- XPD_DBG(PROC, xpd, "SUBREG\n");
- break;
- case 'D':
- REG_FIELD(&regcmd, do_subreg) = 0;
- REG_FIELD(&regcmd, regnum) = reg_num;
- REG_FIELD(&regcmd, subreg) = 0;
- REG_FIELD(&regcmd, data_low) = subreg;
- XPD_DBG(PROC, xpd, "DIRECT\n");
- break;
- default:
- ERR("Unkown register type '%c'\n", reg_type);
- goto out;
- }
- regcmd.bytes = sizeof(regcmd) - 1;
- REG_FIELD(&regcmd, read_request) = writing;
- REG_FIELD(&regcmd, data_high) = 0;
- priv->requested_reply = regcmd;
- if(print_dbg)
- dump_reg_cmd("PRI", &regcmd, 1);
- ret = xpp_register_request(xpd->xbus, xpd,
- REG_FIELD(&regcmd, chipsel),
- writing,
- REG_FIELD(&regcmd, do_subreg),
- REG_FIELD(&regcmd, regnum),
- REG_FIELD(&regcmd, subreg),
- REG_FIELD(&regcmd, data_low),
- REG_FIELD(&regcmd, data_high));
-out:
- XBUS_PUT(xbus);
- return ret;
-}
-
-static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
-{
- xpd_t *xpd = data;
- char buf[MAX_PROC_WRITE];
- char *p;
- int i;
- int ret;
-
- if(!xpd)
- return -ENODEV;
- for(i = 0; i < count; /* noop */) {
- for(p = buf; p < buf + MAX_PROC_WRITE; p++) { /* read a line */
- if(i >= count)
- break;
- if(get_user(*p, buffer + i))
- return -EFAULT;
- i++;
- if(*p == '\n' || *p == '\r') /* whatever */
- break;
- }
- if(p >= buf + MAX_PROC_WRITE)
- return -E2BIG;
- *p = '\0';
- ret = handle_register_command(xpd, buf);
- if(ret < 0)
- return ret;
- msleep(1);
- }
- return count;
-}
-
-
-static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- int len = 0;
- unsigned long flags;
- xpd_t *xpd = data;
- reg_cmd_t *info;
- struct PRI_priv_data *priv;
-
- if(!xpd)
- return -ENODEV;
- priv = xpd->priv;
- BUG_ON(!priv);
- spin_lock_irqsave(&xpd->lock, flags);
- info = &priv->last_reply;
- len += sprintf(page + len, "# Writing bad data into this file may damage your hardware!\n");
- len += sprintf(page + len, "# Consult firmware docs first\n");
- len += sprintf(page + len, "#\n");
- if(REG_FIELD(info, do_subreg)) {
- len += sprintf(page + len, "#CH\tOP\tReg.\tSub\tDL\n");
- len += sprintf(page + len, "%2d\tRS\t%02X\t%02X\t%02X\n",
- REG_FIELD(info, chipsel),
- REG_FIELD(info, regnum), REG_FIELD(info, subreg), REG_FIELD(info, data_low));
- } else {
- len += sprintf(page + len, "#CH\tOP\tReg.\tDL\n");
- len += sprintf(page + len, "%2d\tRD\t%02X\t%02X\n",
- REG_FIELD(info, chipsel),
- REG_FIELD(info, regnum), REG_FIELD(info, data_low));
- }
- spin_unlock_irqrestore(&xpd->lock, flags);
- if (len <= off+count)
- *eof = 1;
- *start = page + off;
- len -= off;
- if (len > count)
- len = count;
- if (len < 0)
- len = 0;
- return len;
-}
-
-int __init card_pri_startup(void)
+static int __init card_pri_startup(void)
{
DBG(GENERAL, "\n");
@@ -1820,7 +1616,7 @@ int __init card_pri_startup(void)
return 0;
}
-void __exit card_pri_cleanup(void)
+static void __exit card_pri_cleanup(void)
{
DBG(GENERAL, "\n");
xproto_unregister(&PROTO_TABLE(PRI));
diff --git a/xpp/firmwares/FPGA_1141.hex b/xpp/firmwares/FPGA_1141.hex
index da0a393..0d844df 100644
--- a/xpp/firmwares/FPGA_1141.hex
+++ b/xpp/firmwares/FPGA_1141.hex
@@ -1,8 +1,8 @@
#
-# $Id: FPGA_1141.hex 5480 2008-03-03 18:53:26Z dima $
+# $Id: FPGA_1141.hex 5615 2008-04-08 09:39:14Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000580C0A006AD6FF4000580C0A006AD6FF4000580C0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B511115511115511115511184
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF400048120A006AD6FF400048120A006AD6FF400048120A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B5111155111155111155111A2
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200001AA1111AA111001AA11100001AA1111AA11100001AA1111AA1111AA113
:80010000110000002552222552222F21F112122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F1121200002F21F112122F21F112121AA100
:80018000110025522225522200000000002552220000000025522225522200000000002552220000FFF9F99F9F7F78F8878700000000000000000000000000000000000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000000004F44D4
@@ -17,634 +17,635 @@
:80060000FFFFFFFFFFFFFFFFFF00000000CFC4F44C4CCFC6F66C6C2AA2220000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4C2AA22200CFCCFCCCCCFFFFFFFFFF3F33F333330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F48F884846F68F886862552220000008F8CFCC8C8BFBFFFFBFB3F33F333334F48F884842552221B
:80068000008F8CFCC8C8BFBFFFFBFB3F33F333330000BFBFFFFBFBBFBFFFFBFBBFBFFFFBFB000000004F48F884846F68F88686255222000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F8848425522200CFCCFCCCCCFFFFFFFFFF3F33F333330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F48F884846F68F8868625522200009B
:8007000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F8848425522200CFCCFCCCCCFFFFFFFFFF3F33F33333EAAEEE7F75F55757000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F44F444447F75F557573F31F11313000000CFC8F88C8CDFDBFBBDBD1F13F331314F44F444443F31F1131300CFC8F88C8CDFDBFBBDBD1F13F33105
-:80078000310000DFDBFBBDBDDFDBFBBDBDDFDBFBBDBD000000004F44F444445F54F445451551110000008F8CFCC8C88F8FFFF8F83AA3334F44F444441F11F11111008F8CFCC8C88F8EFEE8E82AA22200008F8EFEE8E88F8EFEE8E88F8EFEE8E8000000004F44F444445F57F775751F13F33131000000CFCCFCCCCCDFDEFEEDED1F12F221F8
-:80080000214F44F444441F13F3313100CFCCFCCCCCDFDEFEEDED1F12F221210000DFDEFEEDEDDFDEFEEDEDDFDEFEEDED000000004F44F444445F57F775751F13F33131000000CFCCFCCCCCCFCFFFFCFC3AA3334F44F444441F13F3313100CFCCFCCCCCCFCFFFFCFC3AA3330000CFCFFFFCFCCFCFFFFCFCCFCFFFFCFC0000000000000000AF
-:8008800000000000000000000000EFEAFAAEAE3F39F9939300008001000000000000000000000000004001000000000000000000000000DF8D07480000000000000000000000000000000000000000000000000000000000BE4E000000000000000000000000000000000000000000000000000000000000FFE40F480080010000000000EE
-:80090000000000000000000040010000000000000000000000002F820C0000000000000000000000000000000000000000000000000000000000F04FFE8002004001008004148002800414800200008002800400002148000000480000108204000021AFEB050000000000000000000000000000000000000000000000000000000000F048
-:800980004FFE000000000000000000000000000000000000000000000000000000000000FFE40F48180028000000002100000021001400100240010000400128000014882880080088280028002F150B0080840100002001000000000000001200004001000000000000140000000000503580844101280048408181022148601180022122
-:800A00001A01148002211A041400B01281041480028004148828108204808802214800CF550648180028000000002100000021001400100240010000400128000014882800008088020000CFE40B0000000000000000000000000000000000000000000000000000000000F04FFE00008002000000100200001002000010020000000014EB
-:800A800000000000000000800200009FAB040000000000000000000000000020018001000000200200008222000020080000E0AE020000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000012000000000000000000000000000000F04BF200000000000000000000000000008A
-:800B000000800100001001000000000000000000007E1C00000000000000210000000000002400000000000000000000000000000000FFDA0B0000000000000000000000000000000000000000000000280000000000004F4E09000028000000000000000000000000000000000000000000000020280200003F7D01000000000000000023
-:800B800000400200000000000000000022000080080000000000003F5D0900000080020000000000000000000000000000000000000020088008000000BF3804000000100200000000000000000000002422400200800200000010010000220000BF94010000002428000000000000000000000000001002002800000000002008000000E6
-:800C00007E4B0000000000000000000000000000000090220000000000000090810000200200F07A36001800000020010000002001000082008001000000000000002008001400000000F0B84F000000800100000000000000000000000000000000000000000000000000F085A500000020010000000000000000000000000000000000DA
-:800C80000000000000000000F094A900002800000000110000200112000000000000280000200228000000002002200800825F54070000001800000000002001120000000000002800000000000000002002000000BEFC0000280000000014000000000000000000000000002220020000000000200800824F530200000000000000000046
-:800D0000002800000000002200000000000000000080020000005F120B0000180000000000008002800100008082210280022200002002808802000000004820042EED00000000000000000000800200000080810220022800002002208802000000000000CFFB0B000012000000000000800220010000200220020000000000000000002B
-:800D80002200800442E0EA011220040020010020020000000080010010022400008004008002002086022002000000D04A0A2220040000001880020000002840022A01A025000000184248200100000020020000000020F4ABA5000000800200000000202101000000480012000000800122000000000000002A0400D02708380000001261
-:800E00000000000020810128008002E02601002100200418200200008006002800800400485FFB02000000220080010000000000008021048001002001001200220000000000002200001DA300180000001A222201122001122001000022121800188001180022181220820100282200800200004200CF9C030048120000002212002001D6
-:800E80008004421002428002422800001200202401002082848484220480028A22282888F27C16800228A0252084A1241842224220044A220228242022022820232121011212282021012021010088800AA88008004800482FA5015228122880270100800400682120022042022200200280220220818422A221482082020080048004A263
-:800F000082228AA242D0DF0A200200002001120000002800200200802102808301200200002820028200800800000000F0234B000048000000800200220020020000220020020020848202000000808202002A24020000002FB6054812000000002800184002421A8424024800A042200142202106481A040012280020A4840042808C04E4
-:800F800080088888CE9E2002222A2183220120020000008002002828000028002800A02180020028002800000022224222424866A142DFEF0912A0410012A041A041008026022800483810021880880180021C021200A02128004828480048680080241A21221222E8320B4A8282A221282820A1121218288084221622A412224A2222029C
-:8010000022223218323A822421A121123AA643121A2521A12122002A2282862884A226483081008E418AF8B654A0512A012220A31100482A2227011228322852288082842284032818A0232A8283A41218182A8282A11280A2222AA64488422002486AA2AE2AA22AA22E216A56792022A1134AA1534A8184A5612AA34180848164216822B1
-:80108000684AA412212C22820278324A828181218281064A8221A2224AA212488028A864824AA448628A0880A8C44AAE84F0117B000020280462200442A014A0148001800448800448800448800400000042200488800888800880040000EBBBA075521A82A164182AA7735AA5175AA5454AA5155AE526B512A1556AA417425AA1134A265A
-:8011000024A4115AA5166A81A1566A85A1116AA5362AA3534A86A351486AA2C8EAA866CAACCC8AAA22EAACACAAEA1AA8E2AAAAE88AD8F50E7AA7463AA3527AAE563AA7737AA7171AA1236A2784C2122B771AA3667A65245AE327B752A726EAAB555AAF366AA1561F16A5763E313A036AA3127AA1774A85A7626A82A644EAAEEA4A042AA224
-:80118000EECAACAA8AE82EBEC2AAEC2BACAF2F0A5AA7411AA211284A852124A5432AA2214A83043692124AA4575AA5622B117A8583A4826A062AA5124AE712A1124AA5337AA7723AA113384AA712626A82A466EAAE644A04EAAE44CAAC668E81AABE82AAE88AD88C077AA7423AA3177AA61218426AA2422AA2654AA351227E622B76287A33
-:80120000A7772AB612E323A3742AA6832AA36C2AA7132AE317A5121B543AA3212AA7123AA17618386AA2268AAC646AA6ECCAAC44EAAE64CAAC668AA8EE2B2CCEE2C25F1F07000018000000000000008002000000000000422A0100182002008004488084A248002008824F8A0248000000002002000028000012000028002200008001004E
-:801280000000002200000048008800F0ADE6A0421B212AB11122B611364219B66291612B941B612B941B412F24A9432F14A9432F142BF242912AE414EB22E414EA2264152E42DE212E42D6C142DAC2421B292CB49142B29122B69136421B6823B481B642B881B24238812B84A22B84222B84222B842AA4842E423DA6A0521B612AB5112217
-:80130000B211B622B111B422B11196921B6129BB11D622A9431CA9432F14AB432D8123D212EB22C1B12E821E812E129E212E1296E132E119E22231912CB491E622B19122B29192121B2823B28132421B282B241B2823243A42222BA4222BA42B422BA42E42DFFA082088040000000021280000000021800188004002140000480080010081
-:8013800000800200000050121417D200408101281880A1420000200280A1212001000000282002000000000028002008008004802202225FC60512920026018820042002408208002023228122240222230418212A01001800182A810100302200481C62122280028A4421F4E9C880A118141A0428122021062200288A02001A22832331C3
-:8014000032A01A80128282118101004A0100321280023022004A322122428062224081D6C4040000260182200400002400800100004200200430222800000018000000800800112200A04A00FF380E000080041A642248180012244082840200420000808228A48200000012248001240082000028A228824200F012CD00181C0118000079
-:80148000882005004681020028200142204682042820840A22280000222880084290821C84080000C222881F37060016012004522C22842105183043224200004A01002A0421882200288082021200282224888008881488802A020022F05A780012001200008200000010220228002004002A0442A242880000400212000048102204222B
-:80150000008842C280F82123A014002004008081012230122410C221218260258006124220041306002006800200112220840A200200004224F0A3390020058001240080024222224800602100182008120042118A41822585248101800421001C2202400200282482007F120C008002108201002001800112801202200400802801800495
-:801580000000008001000080040042000020F41B5CA0410022482C01100280220118322061222CA281202584021812824A0122483042422212122820042002280020120280024A08422BCE008005002001121800482170420214000020048004208424091218000080012501904188480080040000F0216100222004004228480048244823
-:80160000124800201102A8004252802194114AE11821210482182416A214A0484800004800C022860248003F920400101101120088388001802818822189044602488081B21234220000488084220C8082840242002880880421420000CF3F034A1111214221041829A14220020040C123141A2A8A2888044041414101226880081212001F
-:8016800000111130218A12022826828202222C22C22222BF9305281220011A024200826028A018D81200148025012200002118421413842281022880321128800214800800000000F015DE006AA112121213210128800318800124822A2182012008A0141228A81198808B8282828A828282CE22A868004022240800241400249F7A0A0055
-:80170000200200000042A028001224400242128024044880A114804182810C80011880048848002800A0826223088A02B0780C0040810200A0818892881200200500200C0000002902250188145021908121004001004021228404800421F0586F2023082088041820021B422800501228A2141C0280220214A0818681A8688A8214113171
-:8017800081131111918133288824382122101101280020022E81824B5E8014E112041828100112E02188E4212A0A821A0820A8183142190988222880021422A0838084280A00008028820A00C820024821266197A045134891618A02D02101A092C82B9627288AAB14132194331223A2581282001B44481F21014AA224CAB551A814524829
-:801800001A088829A1C114881B446A22088848A0224AE822E22A28022E81246F5E0BE01D12C11117111B76124A24A11BA01F481AB11224D822F51233D011A31842CE51484820E111827211A343883A82A28B1DA1AAD131A2CB1D21321F14A2421B242215C1A3207821612248244229024A4EA12AAF7E032AA3123A2283218121A1224AAEB4
-:8018800029192289081AE818A88A3AA88A5EA12B81882BA66EA1481CA11623BEA2EB18E13B05AE5319A25A19A21A19632A1F28B2A2A12C2B4A8A8A24221231428A2AA46A80946223C222F0425900144001422004420060242004248210010082420029289481800814C08140013C0888C08180081C08888088C4828008F09D49141AB65189
-:8019000041A1735E511F15A5551F15A5517AA5411F37F542422F21B142F741533D915A97122E223F2785D51181521115D111F521813F147142B222E42496626E622B7F3E313AE233F2B2712E223AE213F221233F12A2AE8AA2EC8AE838B8C2A6CEE2AAEA2AAC8AAAA88AAAE83AB8EC4BA173FA051E515AF171715AF151517AA7D7EAFE7123
-:80198000D32F2FBE9221F891133F1CF593313F12E228FBC2D22BD91F1DA9B51F12F2C1911F14E526FA52123F2438227EA32B11EE322B6FBAAA67BE222B3B2AE223A2F71F32F6A361EAEE1AAACC2AEA28B8C2ACCCEAAEEA2AEE28E822BA42A4AA2F2878EC4CA1654828381B261F14A4141F15A511FAA5481F3FF582222F25BD82583129F872
-:801A000051F33F18F821233BCE2B911DD1CAF7C1814AF8114117331F3BFBB1233F19ED3CB782EE25FC93D15E411F19EC31F812911F13F98381C6E12C98821F1EF84161CA8EEA38F84341AA28A6AE882BCA6A3C22AAE82AF839A4147AB7B1E513B361A2221F16061F14A5727AADEE1F37BD82EA25BD82F8D1D32F2DFD93B33F1AFA11B33F5D
-:801A800015BD12F181D1CAFFE1A11AF851511F3FF393933F2AFAB3B1FEB22B99FE923F19FD51411F1BFD91933F1BF991911F19F9F3D11F38FC83C11F1CEC1EA6CC281F38F8C3418AA82EEA8AA2C82B662B442AE238F85FE900200200821200000020091120292408001190112800180000C011C081408104000000480028000070D506005E
-:801B00001411000020088224820014101281014A010040021B1212208121C4911220C11280110160140060142004240000828B61A0521B21141B2146B111724292212B1619B26299212F2499412B942AF442932AF442B1222DB12AC4912E421CEA2264152E4296F12242D6E122A42D2CB491C2421B29241B2946B29132421B282394612FDE
-:801B80002698212F1418F14282222F242AF242822229AA42A82E424FBA082E511986B511A216122F3491212B161B212F26B811F242A21B612B842AE414A94B4E2313D212BB2284E92AA5342E825E812E4256F1238256F122C15AE222BC91F222431B612EC11B2966B111F2628319A28619F66283284A9A212F1428F242A222882AB4423AAB
-:801C0000A2282AF48CD620228804000000008002000000008001880000002002800400000000800200000040018FA8038200114228902124821A24088A4482440222108204280020228804000020082328820200150220440100282002282826B35502A01828101121041A2821A824120028480020152105218001A01248202994124828D6
-:801C80008051221B182A1131428038222028880220048A0214F0AA6114A01C281C0422421302884AA1A4A084284A022128241602121A12228801824A02119848298124082F2805290B241031822322048A2202002824C02128AF4C070000461101E0282181081840024200209441420000228021040000280022112A11210400308100206D
-:801D00002204A822002FAC02001440011800000000800228000024422100420000180000E012012400004001002440020080F4ED9340218221011001248800142391118004408144011440011A84A12480024E22480018244829341360221011022115028280220C20066FDF0F0011400119010000104201420014421440031100422880A8
-:801D8000022223040070129142231142021121115021801822B24208A042F0CF131081228101004022084021810128200200004821A014184800A014002001624001220000210000000080D4680B0042120022828081420110028828220040C2124224181280041124282081042004C0221C34422082229442200200002442DF1B09480093
-:801E00001400003480011200001001284082812208004031214A0139A148481218208102000029022002004224002CF244F6000000186028002C08001228A018182028040000200812420022008820020000100100904200000060C88004901180214242022E821400182282B81601884200234422818128C41142482113820420818421CE
-:801E80000231290434004826A242004200C0626F220480040000402181011810020028800200280000002212262281099820028022048002482100000000F0C7CE0012000000002001001998210080851C8114820440014082221A820218480086026022242400222A24241432222904005FA1060012001311010020282104008008821027
-:801F0000A281200142802C8802008E4119232808422148C28280028248201222042200F0D94E0028180000111880088290812218A6A112118008882011018214A082522A0C11800B2830812482100114008002002842005FF30D28110080440100181B491111188800218214C0520020011A04304110A121828094114A2121012840122113
-:801F80001401422400C04240021FA8084011019011211430110080041182001818200882000020048821882A810840810C8800002984440100000040F2D7A200120000182001004212000082E0282401111180C1111100800219012A014042024810832202102202423022214800C76800220012001814824021C9818081C21214004200CA
-:802000004842008892881A4421810414118A22C821682100800C200248302248002302FBDE0000140018180000141812221400164101581148001290411924011280041419714102802204101131411124202204204201AFCE0F28C0415800286811D89200A8860112132A8308408284018819242581C1821C25248401488009141123D204
-:8020800022C6610028420000480021145F6801221B31141A04121200111A59111F19A181118621B28148F1111182C2192118A21110A14419048E512AA6B46A8598211CA8194E61B082C8422BAA2F282614D2138444A1622D42002A26A44214F0EAB580420120D111F12211181CA151A09430411AA992122CB39282D8318468212F142924AF
-:80210000A4111486A191CEC15AE824B19114E11924A3281DE11F21F143625E23200429F2218170C1B1212204237662522248422641F2F83F00221B11112014F1116113A18882924AE818651819D2116B122A29A895584A9C411C8C14A1551B91C621E12232922223B961E318B111018AA818113B2C2C342117324E2242B042046AC242481A
-:80218000422B222124F0A7570000186014200442121448003081100100823081009011100188C091C08120022E93482A083C082C088800800224800228EF3641A1337AA3111D41DAE524F46261621AF51141B041C4811DC11D811B22AAF231332B3315F141434AA44C1B45CAA4545AF541C11F18F511414AE426F662E22B641C4AF171A1A4
-:8022000017111F187451F352932F11F561E126F262C23F3CFCC1E11F1CDC31D813E822B262A622242E212AA222E022D2954AA1336A86D111041E132B7772581F11ADD592BADA11F811B13AB331E333B1927991F1D1434AE424F443514AA4CC5AF541C11F18EC15ACCC1F19EC25B542E711A2451F17F631311F18FC71E32F3494421F146460
-:80228000222F26BEA3FA41631F14D631D8134AB2620460244612022F22F2A714142AA2711A51111A61213B272AA411171D8AA8D45A2FA5912E81BAF9B1B33F1A8AB9D1BD42AC991D923F3898C25AD411F1C1511F1DF4C1C16E61FEF22F28F293B337181F187E81A13BCE433F3FFBD3511F1EEE2AF6E3633F14BC62C6618633822E222B66D5
-:802300002A022F12A2622B6240F276B8149041F051119AF151522B261B42181F1DA1DC19E915BFD1A59BBAE919E933FB33B119B9D1B9C2EC28F8C1833F3898825A7481B1C1E51DF4C1419E21DED22F2BFFB3A33BEB9EB11F1BEB1FE33FF7F3F31BFB1F1EFEA2E23F3E9681EEE12F146438271E242B446AB222A6442B642B222A42B2FC0BD7
-:80238000001400E012214121080082200192102104000042000098422A01188001144002804482440114408244820400F06FCC0028001820022001821C011C2143210282188081240412118029042002806212122A0829816222006800420080024280025FD401481B21B01122B411724291212B141B212B9419F24291112B9413F24293FE
-:80240000222F1429D212B921C4912E421CF8214216F1214296E12265192CA4292CB491C2521B29341B2946B291B242B181724292212F2498212B84112B84222B84222F242892822A84E822D4C8014819868542B3111692612991612998612BB419B64229FA421313E21429D21239A2181F2A45F122D21AE82224782162192E41122CBC113F
-:80248000D232A8612C389146B211C481F042821B2846B181922213B842022BA4B04208299A42882E42AFC903208804000000008002000000100200880000000000480000000000280000000014D0D5081200C012200220012728000024008E4220061142281021088681891B026A1181E21142014A782102482814488004808286048002BA
-:802500007F7109481B18901122181022022B81129011903132202222021A0400482B141994121242208289080022238183C882265112102158223442240022CA4281F2BFF780E41C011812298102C012922C2842011C231322E2240A481A3412488A826411190488196429802965142213829212421B82211C2202264122448224B22224C3
-:8025800064224A6A1228EF4C04180011224002224022011200000028221001002924981216818922022A082041012A092C8854121142822414000000003FA80900001440012100123400001100422A04224200A02C00004800002824120023022168882004000000003B126012601260221381A812800821211AE821882503222128826236
-:80260000142821904280B94208821A88288A820190413B41C888291441C142008800C0412024042FCE0414C0216012271182122100123522682842181426024A828446211402218A842104800C80020048338194224211688820040060140048F0F1AF200200001428200821208181810200A0822022022024829882202821280A1228245D
-:80268000162184682810122114028800002004D0B4091964128022220240010040A2122E8190122051218081018229850448821100001002482024024800280046820824004082F8BBF18002004800408202462208220000241602422A85220800181C91210013A1418028012810120200A8482C04480000400257A90000140028260220A0
-:80270000110211002304224A2208002180228204002A044800120000482810414102200800008024F42F7B30611130214A2282023129222114522112882112E021C69120C12228B0128606E018012A041384042928218422A44222421041820488230C24000042DFE10F8006000028002480083021460228002084040020840522001218F5
-:8027800080010024100214800846820400002024F8A563000042100200800248828002821800828082C4C242008A812428A448428A012991122180018224602428000000880040F2ED3500008002004A010024201201239122422C85A421400112000020011266120170A14242115322400248200680080000487F780510014002000082A5
-:802800001212293492A04830E1003282248210218808289082218820018860194888400142002100A084488200F0BD2F002238286012141411A280028840C1111A084280382180210148189A064820088200144602008A0442000080840821214228F0DEA720024001240018002C2809122216924114888200172110F11241188084EC28E6
-:80288000814402241A38922014810170434243014888100242880040D2C40E110000283824000048A028002008481482482E1280C242281400144819051031121150211411000090232004000023045B740028001A4201198182A182220080290829840328208A0588200912489228824081428209228A042242240000802408290C00CF7B
-:80290000240628822200601222141823110112211246A124204121345120A84128C061001941120114C081008A2104460100420000460221004631423F2B071C014822008081B4C1028A011C028210818128C1112522C8121382A81224221C0214004880948118106224204401241B2442000013440221F0A82414388A2291413AA2220085
-:802980001CB3B1AA281A115222A8141335224E816AA451723AAAA8B062EC15A314CE31426224272825B2C181311211988A149363CA14B141C4431D42284822008AAC88882BC8421424AF6D0913228802243129D2113242B022A92846A2812B1A1B838E525ED3AA22091CF9C11126E32ED4319142AA84F892C1681B55888EE11AEC3A88F11B
-:802A0000128316F251929E92242CE8188C3243422C4492233042002F3C44022E412B448BE2406112222A021417131AB11184051B821A3DC1128AC38113B81385E914B883062B41392831211622A33296A1885A25044A7481A33837182712145E11357142523210324213A4C48024F44242002004AFDC4D2101122049012212002049220132
-:802A8000112C0228820010820228008890120028298812824282428242020024000040022002BC49D111A111281F11A1131B222F13E322B262F261232BAA1F32F3E2521F14B4821BE136FF41C11F1CAF661F1AF241D11F1AFB31633F18F881511F14E524FC81C33F1AFA11B11E528AFC32F23BD9EED22A08BE312F3EF4B1811F3DACAAEA65
-:802B00005E111714F04141A0CC4E422964282F2CEC1CBCC2AC444AC4223F154DD111A1751AD11164223E322B2216B272F261B329FA11132B751F14ACB89AA9F71F34FDC1F17AF221233F11B1B1FB21731F1AFAE1E11F16E426F2A1D32B981F11F14151CAEC3DBDB3EB2EBD72A4232F1BE61FF4B1831F1FEE2EAAE61D411714421F14D6110C
-:802B8000A4CC4E422B44CEC22BCCCAE82CBC62A6664E629F1444711181A4111521A2222B132E222B761F32B222F221A32BFC1F11A999A0DC2B671F1EAFD51F1BFB43911F1AFA21F33F32F623E11F37F472721F3BF9B3A11F19ED19A599FEF23BD84EF29ED3AE313CE814F6C3D11F16F683C11F1CBC62F24341F04161422BCC24218E822B22
-:802C0000CCCAACCC2B662AE624F495DE141E211A0717143EB21F237322F131222B771F38B982F891932F2DFD51D12B9B19E119ADD52F1CAFCC1F1BFB13A11F1BEA22EE2EFE61E17E432F27F7B1932B811F1DED3CAD992F2DBDA3EF2CFF93D32F38F9F1B1DE711BDD3F15F4E1E12F1CBC61F643414AF443411F14B4C24CB242E42CFCC2C2A4
-:802C80001B4C2B88214AE424F415A52002000014122248200100808204122820348142002014A124188029C411C011C083483C081400482440010024824220047F2405140028242800148AA61200482921C2911221A024224A015022C0521288004229280D50221220A18482244800230442004842004880F44E97C0411B21141B21421BB1
-:802D00002127141B212B1419B242B911F2429213B14239212F3429F24291222D912AC4912E421CF8224216E12264192E4296C1429AD222B591C2421B2925B2917242B2917242B281724292212B8419F24282112B84222B84222F242892822A84E822E43B09481A86A421421B212394212B1419B242B981B2421B3142222F14199112AAD435
-:802D800012B9238481C5813DD2122C64192E4296C1C38AC2421389B491D4223C9142133942133842E01488F242A113A824224A283A422229B82284A8429F9C0A208804002002000028000000000000880000280000800400000000800200000040016F740D001C0224C01120F2A24212121882008813120223B48123012813942230125A43
-:802E00002808182E92801222A38382C0423422248A34413502002A0400210070CA05528A02141A448134332904248211C042D0220519AE128848221724808291122E8121114A08201883111232432502C0C21414218A84542200C6230A82C041F0CE9720251E418155121A3433484A5A2218138388049A64122B482AD122C881321621E29E
-:802E800018144262128A94811120894831522C236314214642912211335C32AE412502208634227082021C044F740900220040012722802108400225021C02423A042C04221A9212922901C812260223022182290821E02408800448240086810800004F890F22002002002C11019220480218008002800429042502A0282024022D820003
-:802F0000400121108224020020280480840A2062F64041811121F12212123C818261121416B241C1811071128131822924A414886828802284026A81280D2226023931A22021A2C2293882660230422C228A048242224A02BB29C0218011C1229012190129410190118602100290620082282120828422A8218AA449248A42023D12008056
-:802F800022F68242821002212C084820A82400F0D3560011001838002B1211281989B182140119C1112C21084858424262242400284820022428008E21901230822082068024A286004288224A22A2C28021A11400242814001012011818222182308240828228088022248144820480641888902220147242022800C022400260280022C4
-:80300000CFCF0C2220B22105001226A221182412A042828022A224248812244282324880021100298484041A02A04A280040820242002008002446F2DF7100000000261201821430416022881800800280420124190800002A01250221218800C20000000000420000490538122A313140021E22142A811812324118382B822A212A86A8D9
-:803080002840221821032718422044022A251412B11208824A68224821C0220042104222080060225EB2000000201261228011C11120244802002180A1124A028084222201C04200908228258222828488140200200200488800488F130C800220027021024A2244212188A128882321A28492290828008002A0822282882221882C0200B2
-:80310000202204002C04100220843242422228190152801201294482A414881A889C41800480144202189880011A82B822282565241AA42142882502121A86A48600422820A828482088642A202808F0CD6B2011410148362226011601282120083A244122020042230221801102002848802222081A1202B0420228208468222002002209
-:803180002C0C5FE8062812282810010042311A1801211602A014208204002888002A1122816225001880022008400200250200000000F0D4FC80A412180000141A24220860182B848088A242A081A083248892218818C011883882921032828A012022089042100200002180222442F1CB2200000080010032408221812A0120044848280F
-:8032000048282021422302422400A20082002800822A0420A224008862481002DEE4000028281A022114820018000020A88180084220843E42C86A682C2200800E1820E2288424840A2800C0423022C062100221D0370E2880010022281112281D224200122180812106422002162282348124C8002822802924040029042084082142284A
-:8032800000802802224BD51440914180041A2411022C8421B8120648681002805222800142000040210480812422981200A8222008288200008AC42230828AE426017A943112002E6116D21136121CA64A19D412B51298422AE829A4432AF18242282B41A04229A2422CB612FE22324E512B3E9A82A81323E622A4A821A05216B2C222B4C4
-:80330000C2AC62214AE2286C286A240248CE222123AC288681F2229E0026A1221CA244184AA312487E924AA9B2881B48429AB462C31229A4818A81A84E27242A8432128242A6C2834AAC26881A12F2321232AAA2244A85A82A28A082A22123A4882F24A62820E22EC2C22288829F830B38121D11222E2216A24227211F1421F81122967368
-:8033800051C2129AC93288A0A54AA387E21A898268296A21A2C91BA11A34222B51CE628AA4A8A0B82BD18E82A22A042227244A82045022302228298CA4224AE422E622F4C2DB001400400234481440230840022C2208000082100200110090821002002C898408240000408204400200F0C8EA145AF511111F1181E224F412522B441F13DF
-:80340000F771711F1BFB51411D411F14F5D1D1DAEF27F6E2E22BD923A5FEEEE26AA7FAAEE22F2EBEC285E423FB82823B1A8AA8889AA8AB9ACB822F2611A2199AAB282AE224F4E2422F2E9C42EEC22B8882CEC22D22212E222F22F682822F2EAEC6E02AFAA885145AF551511F1183E624D422B542D511F521711F1AFA41C11F13FEF1F11F45
-:803480001DA5ED6E422F26B682FC52722F2EFFE2F22B76CAED29FFA2A22B561AA5F3CAFCE1C1EAFCC181DAEA1CACFD2E622F27B492A8F9FAAFEE2AE22CB6E2E42EBE62E62EBCE2BEC2E42CDE22B22262222F22F4E2C22F2EBE62AC22EEE23C44A1551F11F511112AE224E425A5441B651F12F291911F14F441D13F1CFFC191DED22F27FB52
-:80350000E2F22F27F6F2C22F2FB7B2BF62A7FF6E722BEE4A8C44F292923BBA1F18E818A8D55EE22F296B282F2295829AEA29AB39EAE626F4E2C22F2A9E426EC22BA88AE82CDC223242CEA22F24C6A22BAA23042EA2AF2144A1551D711B336AE226E426A7543F14F521319AA9FD6EF13F1CFFC1912F2FFC72322F27F762622F2FFFC2F22B95
-:80358000F82BF6DAED26B7A2EA27E423F582622F2DFBF3F33F1EFE52D1FAFFD1C22F2DED2ABE32B592A9ADFED2FAA9AAEEE22F2EFCE2E22B666EC22BA88AE82EFC42226AE22EF862422F26BEA2BE62A6226EC2AF7C09182002200840216832402148220900922892282004421828182818422A2914022A082A0122200200204802002C8278
-:80360000A4242004DF480B2A041C0142282724284E112818E034014A216A24A0148022A1242242221221802C188282082482188224A014408204484E820000800888A24214DF3704481B21141B2146B311F2421319F2421319F6429319F24291112F2429F24293A22F1429D212A9421CE922C4812E4216F1224296E12264192CA4292D425E
-:803680001B292F22B49152221B2927241B292B141B68272419B26298212B84112F2428BA422AF242822229A842882E42EF7D071CA461481B214691614E11682C81B64289A634682B942AE414A9484EB3222F1439221CE92AC5912BC216E12264193F2224C9439E2129B481A2D21B49241B292394214E121932421B286213A8A419B2422864
-:80370000A8A4224A288AB8A284E82AF489AD0000000000000028800400000000800800001400000000000000800200000000F0CE2D00194121424282C221298262181C5C1223088292800842388A2288240222222140825822C08288128003244829A4422602802404225022488022A442FFCB4221820211581681042C64212C868145C114
-:80378000C2282AF4C2222C642219924112222958221890121200128880E222818281E4242221C22125A24848134C224802002C22A4841482D7CF1420169121481CA1421C828693E296B33144A14822C82D624826D22104121E8288A22981820150218A41028AB242A121182AC4621222282722AA246418248A4222027022428208285FB50B
-:8038000009221301C0121002250234482482248238822C08281B43A822422140829212009082008A1202184082744281440242484200108224A442428AD488062200A012400222C013124200121C082C02189A24A44840828284820929240112002230224001428A5422005022808A84A8482008489F620642282A01484AE11126A2412AB0
-:80388000A142A22D1246E3311CF122423EC38219A1421132248E4214422301806223822A082B282E12182F11E231488217C2211420642C82142C882428162222A468886E6DA042223220842524A2412AA1242318D212641C271162A82B283381268885A448218081A218282F2201008210C22222215E2100C6024888002024A4828A24022F
-:803900004A08EFBA0900001A02191382021CA121529012D012385300181985221842E3248204004892A81622A221382D111C490221131601214227283486828A881402C2228A7446440110810880223222702202120022884041222954214A038221C02242821180B22284814C01481C883441824224208484148224248C024082F88F7549
-:80398000200512002C02122400104221929340A118C04288222C81A828124292801141020048228890128002284814220000004225820822BFEB0E0090A10000009211888001482901280018144880042140011A2848214822E131822222081410818408800200004200CF55061A0412130224221AC222909214234921B112284C31912CDB
-:803A0000A28442141392822C8261249842882029B82184C1821B121B28282F18211801622411824848284242C22821C280F22FE22088C441002800216022000013422201802188832404428012621100272280082031422842681C084681240424000048006028DFAC0E1B141904141601A012402232320031111C410113387223311116BF
-:803A8000C1226248984814A02560240018180000C0421121420021238894224223048A0424AF2608280048001280212808002418220012198802C04182161221A8411E812C2818023318110188484882828290222182114200800A00F067B520082A042213C21120C211160140211101272212298304E0280224682B240000183011002235
-:803B00001A081810810248422820A4488890822022C882228F28021110210B1A0440220A2C8D21118114621814140042111800122392112111288062242A082B24C2118012B142120148211110324290422908004F880A00200400282100280000111820021819A2424248008220042A1482110115021420850800409141252292422064CF
-:803B8000288002348FF70228624800129041B02104212B813B48A80000C82002C0821D22882416622826A224129E211902239242207141A22824A02823420200802A8A820280029E1B8005489011001212200AC02218121A2204241A02002800464181A4188A11022C8496818A24084001888094824220040000484821A2FF6E0E208822CA
-:803C00000248140020810423218206781C814421240321200180A22421882820238198214812260148481362180000222C8408008888BFDC05828014011C12828482453181A06840022012220825228821B921280288001C2494428094621212829819C2210022142902002002E89022425F144A314182138212E11214A13312C0132BE2A6
-:803C80001AB911FC21821F14B522B242F511322D514A0E3AE422E4243A4246B32164357AE422E13FD922B11256233C9381271A1B214856B1B1C5218ABEC2A424AA84127243C1C229F442A2EAB842A6688814488F780D32CA82C2111C82C311422AE32CAC22DA01238C6123181D81E0217822A113282B18228E932B234A2828A82929A46A42
-:803D0000A6A2131BC67E221D322B8C1B85582F142A7862E3129843299843130C232C8A140288C2AE22AAF83467C0711C041B461A3151239141213F13B391582125C2132F110217113E22141B2E1B1929D611D1119A432A86F512332B821D933BC4285A38414E61212F1881A8128A3181B02118C12226F341224643C242224EA2222CE62A3E
-:803D800038622A84C8226F5808200214200442603420246924824E2211462249024213012308008002100288001002880080083C088800000000002F4641A16D1F125211484E81CE422B671F35B172B331E634D43372C2F212522B7D224E133F3EFCC3811F14F551534AF241711F37F4E3632F28F453433F34DC33F543431F3CA514FAAD9E
-:803E0000CC8E911F186815243D4329E125B542F4C1633F1AF221A23F2CAECC1D813D813F34FE22E22B66AEE221A8AAAAA22AF262C2DF540E5AA444E011A1511F32FA63611F35B132A7FBDED23F34B52286B452A7561F32F533133D511B992F2DBD42F341711F32F163632F2EE421F543433F29FDF3F31F3EED34FDC2C22F3EFC81931F185B
-:803E8000F851C12CFAA2A223E425B452EE3CDE12F221A13F1CFC21621B6E1F14FC42C1EEE22F2E642221A2AE822BAE8AF2E242AF5C4D81F721611521B1B1E222B222F631632F23F362222BE83F34FE82A23F35F883C16E712D132F32F273311F15F5F1D13F14F671714ED3CEE16EE23F31F553533F1CF5E1621F2EE53DA5118AF8911117E3
-:803F00003B1F1BBF81F2B1B32B999E922B191F36F623611F3AF2C3613F12A66437183F3CF462622F26FE626227242F2CB822B822A2A2CEC21F3D4DA13D1F1256111B213AF261623F16F231732B331B965E933F39B982FAC1833B9F1F12F323311F1FFFA1F11F31B952FD53311F15F7A1811F1EAEE61AF571733F2DFD73731F1EE52CF59246
-:803F8000922F2DF9D1111F3BF2B1F38AE22B33D21F3DB8B3EA3EFEA3E11F3AF643C11BEA3B643F1CF4C243EE622F2EFC62422B222F2E38A22B2A8EA2EEC24FB60E186012A012A0122022094002000024920042114A1201182821422A082A081C012D91C081002082240280442108482880228802FF3707481120410118800125819212C0A7
-:8040000012121432252142011C934110A221111219292122B922042D411A42A2211021A42810410200000042828004141FCB04481B21B01162141B212394212F2491212F14B911F24292112F2439212F3429FB4293222D911B431CE922C4812F2264112E4296E12264192CA4292D421B292CB49142B29132421B2923B481324219F2428230
-:8040800019B24218B14228B24228B2422892822AA4842E42DF76032E411B41B011021A429121181982B99192A2821C19C1913214221CB933C481AAC5912EC216712262192496D112E419C2421B212CB491061B2946B291A2948A7242932180F242231942024EA2A24E8222882B4288226FEF0B2088040000000080020000000000800800BF
-:8041000000008008480000000000280000000000E71B00161205245022008331422004A0244A22C1182220A112688422250142C011301222482943918122122290112119011414142006AA6584508218007FBB042A611828122B821CE34421621329829158181D4A8A552864682B24C04148008E22421223F29A244C9462228C828181245A
-:80418000712462112326751281B4444A88C2226028448444604AE8424AC8612A3CF600CE124521213A332F4184D221418295182A45A2E126B8422283245221182A21678A822381F24A24422B4215A221281AA452422E81272252683901238281823223108202326E882E8224D8A082EFF90D2A112102214002221E2880041D4880448694D5
-:804200003A208404002B4214219241162112880121131134112212B011B444588110011348C448448A44843448A02448FF78010018408142120113094001341220014024911800218B212283012821B02288420210211201003042200429C84821001008009FAC0425312161226B1825E21261832D22241542911210865242AC926123519F
-:8042800081282266B18A8656261863F22392812E128B8449E131282A817128426285B2AF22A42412282B412442460450288E4800484E28F0D865242092122C721502191303823121005429018C5322102C921826A3286244F022142F38418813EA42E829E228021828901232002C012301004240AA48008006AFAB0414144180C822C038BE
-:8043000023921350211341022C12041926412181823448212D382B12842228214E821211800115982293C4828F2224066242422D424C4C0A4008844284F0C1F5000093512120110A443948722418044C22B81116D228928842644A01803142441602886183386210482148828244A8818C14E281722492859018422081122262241847EFA1
-:804380009022454201100422441824604211121C38340090218E3416C2142C74842924E2280326A12481219321A8614022042418319048B04602412221C042502881E082F19AAD202182624218A444100132382440981281459818230400859182282302218344188204414125C2181608848114000082482C2428018184A08444483F7343
-:804400000F236342214D391951A445824241A21A2B12A45116D8127138C47916DA2814B86418545825C2242331422F69D22865122C9E4CB0651134228711162A44C848873113D12824E422A14829C8462A08C018A4814A2A44F8F4B70048260124804118644114100230A4884121221C2A8181A48415A82422008121D0A20888122182247F
-:80448000282480088184904560812B146024224048A4425F9F094A63561C11C412901480C124800218009012400160A21820122202006A01263841148419125118291248B814025B42401418880300A02184007F780B44001220010011C08114C084261402824941C18860884B120020A88142842C0628490212498116848211B28312CAB0
-:80450000688123188224B48254828945A8488664C2EFE40E4088131242024D3110F284121228A40018232201A9912481206884403842C44C4C24052381C4181E226021202103481068424C84C2442244A041830620F4E48F00128042C4641902A11082648144124880117228017012D42486812104182418244110688211414A12821142E4
-:80458000942CC111442001701822822102828902AFCB4F2129045824182130128921218859414B12A21A08A1828882988441441225321886282162A82A682A88002A018E18888E288821812210083860268C410222C021CFDE0B80022812112C11410100411280111484B118A4144321024226022E189012848991228321C112181100685C
-:804600008014488202008184848422800120F4CE11D084021C0460828184858488484623885862224AA8820020A4828B288344082200211074427444082C44C42440082021C18410228188010082C1867484F894B40013816224284440C42127482140220898A028205812004C24044829414896884184008A912100842061441A18012410
-:80468000502400614598248C220481211F460E4648041184001A44A443C0158006214C028C02A05263048C219188488E42484442544B48154218944415A2144D4AC220347C48448384264428044200482B4282CF8F0349B18C363123A11117434B111E16255A12160445B1197D84E426C3244E922D281FA853822A7D28E44CBE28EC829122
-:80470000428363844F4941F27428672443CA61DE228FC1531414A3E5C221018B8B67482E5989D262C21A212A3258288321F25898878A87942AFCD9F5E04166452817248762A512322F9F42E122BE8231F23D9867683A7992F43482233BB88581F98C245E98C3E28CB2582495523AD1A2F416988D1687488FE17E92D8564C911147251C710D
-:804780009EB242F8BC5E4E221E3219C288C3A4484E18CCA452C7464E281E18290645744AF4418220F621111CB12417B24493291C7414F19C14881D911E22409284299124985E841F112491642D1865D42452A8ACF28AC289F8C844482E78211F66A112113E263F42E3E2A6648F8AA1244D1C9F96744AA44284E74483B25859E22FA8F42222
-:80480000148B64224BC4AAFA842AAF5B0940012186284628046220648846044282421028182808002004830480289484100421C08248888CC4821288486CA84188C08248890844003F4F4EB392A421343D232B453F14FC72662F26F21A588FA2BC56CD122B483F11B552B524B2D4B642D744F241533B5D5E549E182B45A84F46A7222CFCF1
-:8048800092122B518E848D226F22DA86F615D777313B3157713F73F74F4E4F45FF5C24CD945E369BA29F1CEC2CFCEA824D84CAFA84866FE8F834B44F4EEA2ABB42E5CEEE4CFCC2C2FF744AF352544FD5C1321F35A319CFE1F17A7EAF86A3518F83FD56D62F24F51A7AFFB1FD42D26B542CB182F2D45C9FB1F15A58AFC1C15C6F8CB584F86E
-:80490000E4EE3AE2A57D92F2DAD2AF29587B4FE3F3767D5FF3F735577FD7D775F21577DF47F47C76CFC4F614148F45F738A69F5FECA6F642684FE1B9C8FC24266FC6F234BE4FCEFEA88A2F27F5EE8C4F4EFCE2F2DF6B44F372744F437611F23333EFE3F11313AFE7F33676AFA1F14A1A2F49E124FD8AAABFBDB192B966BF96BB22FBB6BE52
-:80498000BFB4FDCBD9AFC5FDD4988BD4884D842AE622F692D2AB519E96AFFBFBAAE6AFAAF6F3EB376D6F41F715177F53F37D7DAF8FFFDC2C8F8DEB8DF3CB219F53FD6862AB24674C4F44F85412EF87F3B6344F87FB783A2F8DFDE6A84F4CFCE4B66FC543F3F234DF43E721F31333EFE3F1DE5EAFE5D1EFF51A1CAF84F9D2D63F28F99A9AAF
-:804A0000FFBDF1D6D26F4AFB82B62F26FED6DEBFB9F9DAD88FCBF9D4DECF84AC844F64ECA7E68DA5DDAF25F59A9EAFFBFFE2EE7FEEFEF5F75F6FFD36745F73F37535DFD3F6FCFCEFCDFFD8F88FCFFFF864BF13FDE8EAAF84F4DC5CEF45FDFCF2EF86F3BC1C6F87FF787AAF8F7FEEFCE4C6CF6EFA1279100614100447221024480220480683
-:804A8000248224005048F048248082110883141288210400502284418400404802002C6281811281304882EF910621282A01231211B211021A02114008412822A902A5818482846A228122C0828604160411221122159414482A0124C44601814181414A128402288A041CD47D052CF41124C5F31124A3F61164A3D441B66AD141F66A9132
-:804B00001B61AB945D48AF44B924F44A914B42AF14F92448ADB54F82C4914FA2C4816FA264114FA27498E1A26459ACE449C24A1F49C2421F4952281F49724AF29124A7241F48F24A121FC8B24AB981F24A9253F84A9443FA4A9243BA4A79A498924F8284F9244AF713C0521FC1961C1D242AF1812429D141F22212448F52B991D222B211D5
-:804B8000928843DB1A3134AD9543D952F2B64825F124581CF926CA1E85478287182F2261582E5916F52688159CD61FC8F62A121F49326A1741AD821F41B2285841A74611A99321A143B34A31242D124382D386C4B44D5ACFBB0A20880460880000000040020000008001880000400100800400000000800200000000F0B1AC2035148992DC
-:804C00001422802112624121124A4934828C9222142C626D8742A88244211B421283028424A02483224222C2882D821C24C2881248288200C9A8843048608482228820F468B640A2281622582A1850124383084A08834451141331124C618248444943094124542DB8B032C4A81224181C622122228322C112151A385226F84228944A0101
-:804C80008D2438892262C2A9D44862148768FFF1021AB4D4C2228E168D2218122712B08411A4582A58482368123661112642422A388441211B58185D2286084A1281C52A8911B15242C8821C26E381681142293584A96282848A443858814826F822428C8234583F110C2490180000B0260121A0144814455822C0144F8BE44432243815D6
-:804D000008430225A821A4122F8288022822F0228228814042188A322848144B49302428228932848143084728DF13052E111942011815182A112408200400252148210190281B4844A0212A21D1248C02822014A2288052243022486200403311214389022420248342F8DFBC20C4144C63912D26286082272116A25A33C4188501D9A256
-:804D800082A3C1A423F24628484C2132482956E24283BA22112826261AC2712438A3E11235218E482486E2A3BC41882588C4464642F218828CC23283C2418146F2DE4E14421E25164138362200458279820283450145D12128289A12A524342C48CC3442B022D528918400422C022124248972614482269422A33F83C0831974448205214C
-:804E0000282342284608930F1B213024194152182568A312A052130481608223C21845212206122E8120D24A038AA225A3A224A288481B16A21A226121263188A04880A441C012C08628895982122B4213219248875E00902843C144272260312845B8822476820447828800402422C4121CC9288A024E24388088942A2022F88C428CA274
-:804E80001810C112C024C1704292242D1180284828C81246234C84F1F83E24166424902823110122001289413484228322C2289028248942B44883A4482E5285328856B8187411241412048B415083801858814688C4181AB25C5284466442414962818924C12C244E142FC54F01290100451858862C142102818094128741B02C01258804
-:804F0000019084C141006042102419E22401160425C614224212252202826081200420621820028F544A93142721848C91469342381528B12B1E872681414D4AA287422887438546B81816B42968824E2C4914EC89E284F128844E122E448A91224263D128F11883644C0135E8C2D42434382D2216DA84C1442E848A342896782822CCC423
-:804F80004448BE1120082AC4242C4154228C324244208128081688410822288081E444081AF222420052418121449882630230818B12482C41081AA4841189014441A04118268812F4E6A7204203002CB124C1290000A88B482C4804A24414701238848188002241230428800286140160C2128D44181084B42824218102800280A14281A5
-:80500000288F68024822162494122111219125C6828901188B428C2412A218584382084180888109818AC4461008241042042041221448281108444C18444248028410F4524B2482188392348C417121084120C1118CD122216114892181722986832221422492228C85031A02184298822A61122A11426441842AA1241644419411A30191
-:805080001212224C3268124146F8E9B6008123511210844182B342D2846242486820120229842108241210AC84407224C2449028C024401638824C31212828810024004422419014420098F0381F801211044127123022120025318482504A1A280A2982A88212001941222485012C33C46993122A810446080020240848168848913424EB
-:8051000000A741204C024F6C48C158008505828199011EA990A81D481088110112881418002D2884610081200C008484892402408852488082018168A0122C88012B18F042188AF1FB785024434603281014140940045425042825644448006982080028C122440081414127114981810814001648481442240181100844442148EF3902D4
-:80518000418A0138433214004312F41288C8412143E822412421C88240A428444C1AB14411142224083227448422221B1244185C02812003191A111821112282C42181894121FAB6DA6081904820A884211A14220164182858002410820121888C31241B8220242113784821816281803488602128703214B4424304190260224C31245267
-:805200004D62822DC4415F3C43B24471E957A825B4227193E212F1223CAC13D86A13991477848F897928F4121243E128F9685238C9EB431188E2B2E241C5221664416D444723856483309439D248A1A22AF11124DB221E228CE485716AF8E163D038296448244B222992532AA26185F32862AFBB093AA41911CB414F895214AB2116311E94
-:805280002AEA81E89BDFA3AC192F6446EAC2B8A243B493681B90248EA24CC88446B25C51A4A927286C8F2CF73CA42E94CF16F12121EFE531944B122F817128B81CA2224C06EF911155144B22E11A381C3E2EEF641CC44D9AF817F3C026286F41F32131644C57E59D4217527F652118F2D8242C1CF456711CC2826B475CD24238B28E824D59
-:8053000014C78AD3F126212AAC5666A8B78CD622774E84C12216721228484CC144F06214CD841AE1810116F8313C1AE143D322E1C631441E188F8CB9D47944F4EEB300616012200447342006228648049041440013C824008244114E24304800418304100421008445628188842C48C884C084C082D028084400DB9C342F25F4322495FB1A
-:8053800033233D411AE7257743F777755F5EAF263F12F761C95F1CF4C8EA6764CEC26F2CBCC2FD47147F72981482476165E428F312426F22FA1A1AAF85F694948F88FAB8BC8FA5B612FB14866F65526E6F615642457616F62626A5F84876AFACFBEB63AF1AD154F1C5E1472AE7AA6F22F2B2927FEAD8EEF52CA84BBB4F66FAE975342B5564
-:805400007F55F4191FBFB1F533554F43F7585A7F76F32F1DBD1D8FC7F3BB713F9DF7D5C58FADFD6F5F2F2FFDF6F62BDD6F4FF796166BB24B824DB6EFC8AAA23E514B51EFA1F53A384F4AF889A98FCBFB3A7B6FCBBBB4B934F72232EFEBFB86945F71F11A1A2FA2F26A68EEEEEFEFFBAB332F58F389991F1DFFA426EFEBF3A6A66FCEFBB4EB
-:805480008EEFE2F3EEE8AEF8EEFAFF4F45F352663F51F7191B8F83F211111F14F2492CBFF3F73F3D5F51F1581CAB735EF25F1DF8DCDAEF27F783816B2B4F2FBF77F737916D14AAF2A49267C2DFD2EA63F47636AFA1F16A684F4BF98889CFCBF9484E2F89EB2AFA3372EF63F1B6B66F43F31537FF71F13E248B668FECFE4A2E3F95FE19318A
-:805500005F58F855514F23D9AEB1A6F83212EFA2F3AEF8EF8CBC9CFDECD6175F144F67F73775DFF3F37C3C1F53F17127CF45F12E75FFF2F157558F87F3BBF12F2DFDD7C5CFEDFD6F733F39F9B6B44F4DFDF7F17F19F9A6B44F4AF924A66FCAFA2D2D4F53F57474EFE3F776744F43F1D8B9CF4FFF395E6F4BBBB4FB3532FFC3F3BCBC4F4344
-:80558000F31537AFE1F3322C6E68CFE7F7FABE3F96DF9951DD5F5FFD34B2ED3E6F63F3EEBEEFF3F3AAB86F8DFD8CD88FAEFE3EAB1002225024482E128447128E48A048248280048224484482000010922821800100885014844100009220018214924492448A74482401F0171BA04AD01441C8111E242D11482416C4828C424148628246E7
-:80560000241332842822004C7A2428842124220C8314266822442C81929440638183064215988A8001244002388628C448EF840D2CF4112487221F417248F1112CA7241D24AF16D141B26AB981B24A5985AB9443F24A914782AF1479A4D81AF924488DB14FAAC4814FA27458F5244A8F1DE2A264592D4A8F4DC24A1F49D224F4912485F2FF
-:805680009124A3F4912CA7241FC9B64AD1C1F24A921D28AF245985AB944782AF6439242F24792498924F8284F9244A5F9D034D5B1F417628E24134481FC13E4E1E6483D641F46A951B492B344F81F64A94531B7224F84A95539B1A6B418DA54F2AC5913FA2BC585A248F5CE2A2F598256FB2F4C8212E981FC8C2DA1F4996481F496224176E
-:80570000C92B121FC9F64C121F88F66A941F88E2247B85F842964F8AB44A7BA4B8487BA488D982E444F9245A1F3B0D0048000000000000400200000018000000400100000000000000280000000014F0E4712011443711390118D012B428840150B489A81246280129A4291C82922410C2114186E18E3144122A912C442E161489328219A2
-:80578000812222312282A02886D81C112142C22C218AA121604444CF670B2223BA2A216A28322272C972113482128212202888AA29AC4248E4C401EB284784612712160A12298284D4122184032651284331188664A913B4484313110223A112A042CC6684CB431641F2E55D207146129D218229022A7421C86561205A4923A8828988A300
-:80580000188D228F2892258C7514728438C61213D23828C452114A916897414B344A8292838331168982810247841C322173118183922823D64861A34D184D1116F2762E2082E222A1812D11122A2131461688290112811242822C8284014C2282424A1526E18249A412284502241311884281826148AD921B482A21988A8424C01241A07B
-:805880004A422A2414F4B6FC00001014110481486A013C08002D121A04828B245018491408400884422668442A481402008302E081061A84012941481104D04868824A022882DF8B09442992228CC3182678317218921522208464211682D884245281464464422289D82252244F91C4215B413A044285023924982129622B881622522371
-:805900002A542826A841D02424B81992A420941216084924F6E21F4006285084111763897112818282542112182968844A024C4C242222C8286169044B41484088A42859243821218880813238288CB42881351248901C490888A922014CA4283F3D0C2012E281829128004528A414A084100267211894306841857144180293D11842B111
-:8059800018222456A4241002281AF2228824241D4248182100E419982128904C128B242082E44C0A16062052244911C4228143A2121632844B41361434221822447308248D5362860944001191401809C8381082A843114D491632112843423118186E142E5483412881C412E0FD4E0247824418840000A58208C484830243CC219828246D
-:805A000081438211B48422D422A48248221B848D424CA8244E9289448112E4126148803142409224584123328810041044023FB90C220024118190125A8241089082482321714A548484224C6C8488A41021121D88C1140010018D845138A50249A2282008000000824382444888F44C71604361205294164486827732180821CE1C1E4CDF
-:805A8000276147221C1168C25B288E4C66E814D82E5484F04224356884118D944244421C94821DA8142226634226B42CE821A418226011CC81B198E244328885048304427F2F0C2168492451228420114AB42229D12808004AF924484C0B21404488322146018E24A02148812D8819820949C1246D1296A894114E13400121482422462463
-:805B0000C114224A119418F02B32001260C141A1534404AA24243822874C1622981280428468499028CC12686444002082084002880082A22948CAC4002A8894212424412C3618848484F09747C02128212242008128442D8281C8C0819084C992848A024A824A022B618400162122011E2A82488622015E2181123C219C1123C411D028B5
-:805B8000219492903844A8274298A042FF1C0830420013C224400810242801904441182E44902230282180C12410229328814148412052288460425082901882008008820086048242F0DD3B804414120881211A3252A92881038908A90A601119288138144904418429451201121CB2818126C8428A916110E88C822328120443042418BC
-:805C000050282E8418A04280F8DC5F200844462401001C02608243692422008D2281244A880460642240084004008122842823028284241800A98409284314028B818184842648F828FD60811028522C4008A524C128904821890125180225489C3112182A01191CD184440828890C8284144002438681E832048321098F11841188210196
-:805C8000E0222115025FD70F6C041B6180846464681840314214C0442250411CA441190131241588088E620040C82189322116010057250014B08164181114882718888244103284208874F606184849A141186C2442048084150241478400844181849024424110C44C10280488E02468422618444A024120D2225428814189141828C2C6
-:805D000048282126A421449EC2508443C14200222011343C324490240038332191224111251888C9492908152204406914482E198004410089C2288111C6C4412820040046041022FB8F1B6015635C248FC1E545D68A524A2FA5B21493AE9F28724AB8929E8843FC4C84EB191648EC24E34BE914E82802AD48AA762479A259A4782289010B
-:805D8000AE394B248AD341F8983823B615B5A8DA82C5149F88E925C8148B5129F5559A2CB9820D8B3145F882D285BED489EE8DF4298CE042E542F11A344912E82464128F423129AE482E549E52812788A5F182622CD242F2FE522F88588E864CE1659224AF2191484A544815C8248C7624B851B422D821B822C68234877225F88882BE2176
-:805E00002F24B62CF3898227949181837A4CE22869C22EE24469DB88722888F8A36650241E4211625D1247424B44412D441E16522ABA45F144443E162648F42D111D2147521CB431F73C18C7826E8757C4467614F6424127118528B3889E889B487E418532228D244247443AD2AB28F283492F14B481F8C4A1483F146681A145F2C814CF4A
-:805E80008322A242184B22C90F11235281221528528122151854817011088C44E481C4249028118514811241143258118B21111288128812141260814502881A041648E2814461816081441244924292425F7E0A5F64F416161F32F23331481F46F228211F33F332766F6BFFBFD11F12A7C61F29F9D2B14F6BFBCCE63F16F753722FAEFE6F
-:805F000017971BAB8BBB8F83B2E4FAE16D1E117F37FB14562E494F52B158A73183F841711F28F555BD9D895F72F733354F4BF29AB26F68F2C2283CFA48911F14F4A3427F78F8C2A14F6C5C224F6A3A441FEC5E8CCFC8F8A888CFE6EE9F0A5F61F45557EFA3F23B219F91744DF4282D5F77F73F7FFF79FFDABE3F32F71BEBFF69FD9E9DCF0A
-:805F80006BFBCCEE3F37F73333EFEDFDD6DEFFD3F93DB5EF42B3ECFE41CD4D49DFB2F617158F857514EC94A6B98F17F7D1E91F36F797F53F39FB1727FF96F6AEB4AFA8FA863E7E783DA3AFDDF5C3D1BFBDF3CF97AF95F54CD6AFA9F18C968F45F16E7EEFE3F12E3C8B13CFEBFB46BF144E736B71EFA2F33B31D7D48F46B26DF67D51DFF74B
-:80600000F1FE36AF4FF3EB31BF9CD729F81AD9CF4FFFBCB6BF13F3735B6FAFFF959DEFDFFF9DB58FA2F3C7ED5FD64EFB6A285FD1E4937524FD4849FEC8DE581F9EBEF1F6B7E5AFA9F92626EFC6F4F8E6AFA9F9873FAB3DAF22FF4AD49F34F51BFBFF58F9D8D9EF4CFD9A9AEF22F1F6DC6FECF79E9C6FC6F71898CFCEF7F9A7144F55F316DB
-:8060800076FFB3B31AF13C7CCF46F26B6EE7E3EFC7F3FCB49F9FFAE8BAAFADF9CF82AFBDFD7AF6EFE3FB3F3BBFB7F7FFFB7FDFFFFFFDDFFBFB2C2EFFFEFE656D4F97F77D7DDD1D8F96F6242D5E788F8AFB49481F1EFE71617F5AFBAAAAFFE2F27F5EEF2AFBAA8A6FEAFB7AF8AFA3FF5ADABFBCFD5BDBFF5CFDD9DBEF64FD9A1AAF62F3FEB3
-:80610000FCBFEEFFBE98EFCEBFD8FDECFCEFB30414200245022440023440A14934402441A44842C02400214604100222004001230222A082C08148A0482448A0482400100800EB54E028E14172242141816212C0118E242A21A1849298A218E0142289A249002848282024022084082EC180C82846414402261101000000704814048C14B7
-:80618000A8487F85032E421F41722AF2112483F61124A3D641B24ED141B24AB911B24A19B54A3934AF5439A42F547B24D812FB24484E954FA2C4A14FA264554FA264192E4A9E254D4A9E244DCA1F49D222FC912485F29124C3F49124A3F48164EB941D64AB9419B24A9945AB9443B24A39242F447924F842B44F82A4944FA2F43266F02241
-:806200004A1F41342217C12B1217C16352C169D181D242F9112C2F24DA85F2429436D8726A88AF745B84ADB42F82F448954F28D548AAD28F4558A48F59D2A4F4D82445B318F224C217816DCA1B69CF22F49124E7241FC932461F89F646821F817648E6C192AA4F81764A66838F447814F8422647814EA467812F44EAA2713B0D8480040036
-:80628000000000000040080000000000004001400A80010000000028000000002501CFC646C22216847114221204482E1843081698814840042A4454488A22890C40C4244178803188E0A22422A6212850823024288B218CA22422144114281843823A884A210883F42CA90082897228A141282B41452144C1C100C7294852214719E02285
-:8063000001C33228512848294148A84228182A044450221002250418C0428C2138482443C846874283C1182482466814286FEB0F29324289C2331A16844581C48559CC18A2478148589024418723244F81C8C84711228218E0818624F28118302887422CA63423125282444132C028CB24229344C62126C63889C3A8ACE828C54814127F53
-:80638000E302604118C48012C2448B120040A1482141211B4910842A8202D024C42445082212A0242C0400002420028B1248292108C084484441180082422E48ABB7201251164041180800660218C08145084B414C3214442688A2424082322281C0248032241A7222024392210041800185C12800814144434212842A4884F498BA001A47
-:80640000923836D8842132112E443889B181612285D218016846144808A840085D2889E4440123AB24A9AC2192842998111C0AC3512D45C8294E182668833225A1182B144D122E98881AE848C2188B41488926FAD11800D041035301114E2490181C08A18D1188C14374482492142A280248118CA45223222192C68053842121130A19528B
-:8064800084819C8241082C12612152182D1880C384492182CC2470420C282E13818C1398281608386027221221146820410C44848C22322C5042248B28428982838822EB111292248D1434444146A82183731861828810BC24C884492812BA480983A44A2B3100800248892A11AA42227022382843216582001303E088021C41440828845A
-:806500009604131402471230484C423818268482820120B414C214C93588444198228844244E1ACF59071B211018441C423C24151C6818604299189894434318E8411233446C8161848846182222141299483230895291884502213417824C1108490220121842084216C84A18BF7D0E48001B21124908104284C1111242440020084118C4
-:806580002200291244941420024522282402182840419C1682002280042182180012424188EFA247C13190284D3189C5244781456244C372914221B114EC41C4AC4303AE1828144C870383942849D44232184E827048C24AAA51141382713984D2286112278267321F8812042A2481C1182D8845C8148C88222D64C48B84FF610A8A8404EC
-:80660000502484248C722801E0811258818112404831142564884411442181C02449810244A024880086184414248121110890444624C2828001701408F042420090181A0212108102A012424244605100A0210022209134002140012081021084120424890118221810E288C2182002222901426F7E051A04484084848281A4348B412051
-:8066800002121A8424842594424901204604184244408442248201122180645418444A2928848894244B1482831C243484838228F8E28D20486541174432269414262C820484845184C1861404450825084149120117222608800228002828808202181C22422219021C113822329823230112849FF10690182820241808111121008004A3
-:80670000002004001418004144840000008584A424008002184144112881008200214489A4123DAB2012440181B048420429012890484C01004180028883021849622200284004008800A0280000403238188A21010044281840F1BB7260411C029D24467128043601946E181A94484D114698551044084784101404413014248584480412
-:8067800044142E1841419046424CC242444882488AF44422458854428C9434C8E1E06A6188CF330B0081400420345C22888001001B14124A488831484880011A040043044A081A3844184840114401488002004223280589440800704C0F4D288244811C21098C048113020028840089819288413850411140912500808152842032244520
-:80680000120428236812001C0225412262C838A028183028282FB30C8C648148122A08430141447048041A32811100414120524214182819088002221C022884813C8406004F1432188D245AF28214513811442241A412884D28211AF4C54430348E2485A825BAD3487228D898F745442B331AB84854881A958813E554044E548508CD48D5
-:8068800018302412412AB32252884C0400874828AE2445071F42B22442A1591668815EB28A696AD088A9314F81E883034F8AA2892AF234F97ADF93044CB185B111F12515C3B424EC413245389D4A8F94A61148D7444F84D3C4B481D14434146E444B76124D6457524AB225E1535264F42624E242A2482E242AE14351842A734232428AD4AD
-:806900004164262D354E54F052429F15381165F2CEC6A3B4C8F4F4382F249C368D148181DF77074A7618D94452881D451AB14461438362542AE182A234141E458D114381D18858248F81782284C828545458171143142658143E24411B214883014F421664444F22D241326DAA624A1B2229F144521F556282AE344958681A61C2678186CD
-:8069800062881FFE0D4001808408141214001214000080024212904128198492539044904490441149110119342450348C148444814487448444A448440000CF7A07CAE48151991E548F85FC1C6C8B458F4157F93FA4F2ABE183E2447449F881B1CD551F15019A794CFCB494CB24DA7C3C6C161B141F12F171C18F97F15818AEA44AE64F8C
-:806A0000AF448F4BFB41611F9E5A213F32F62121CEA51D423F5AFF1259AE349AC3E2BFABB9D7F91B71CB928B534BA23ABD2E3222AAA9BB8F8FFE71C5F05444DFD5F739299FD1F5D96D1E74CF85F455759FF6F21F3EFFDFAB678FC6F64D5C9F9C7F4DF551114F41A19DC5FCB496ED284B89CFC625A49C4F57F564C6CF97F1783CEEE41F547A
-:806A8000E44BCB248FCBFB75751F1ADE65F222666B225F18EA74F6E3F42FC1E34AE36BF382B2AFA8BB97F91E3AAF62F9BAB4CF82F32438CFA2FB2E386F4AEB8CED8CFCD9F380F41454CF43F319119F87F5F8688F47F538548D5E3FA7F6AAE48B638F81F64D584F4CFD5D511F15B514F594D48F87F794D4EFC4E74CFD29194F12D445F86551
-:806B0000711F32D35454884F4ECE214F4BAB225FDE8FF1B5F43E236F62B262E65CB861F4E5F5AF96F7ECB4CE343F1EFEDBF85F4DF95B51EF26FBEAD84F4EAADDEF4FB292F1BE9C4F45A5F6FE4560499F51F73C2CDFD5F15D6C4F45F7787C1F57F7585CDFC3F7F8BC7AF74C78DF84F58C9CDF11F155554B51CF4DFD3C7C4F4FFF4E784B98B0
-:806B8000DFD6D615F635A45F13F3F557CF92F42C2C4F4AFA64654F4FDF44F2F5F54F42F2B5B44F71F262267F56F6C5E54F56F6F5F5EFD5F7FCF4FAF7E3F1BF9CFDD5D4FF54F57EF6EFCFFF64744FE6F7FEEEEFCBF3BCBC8F85F5E8E85F180549014501418443022400008C4435114448441A0440044C02445048000000184001260124483F
-:806C00002008822001842008008281F08EC20028188C3248284A1121D481326212004A01141A142871482402002041820220022211416022444168262121A64122482B84482B14124CEA8804489841888E414F6A092CF4112485F3112483F41164A3D4C1F24A111D24AF14D981B24A19F54A91478AAF1439242F347924D812F924481CF9EF
-:806C8000244A1CF8244A16F1244A9E212FA26459ACE449C24A1F49D224F4912485F29124C3F69124A7241F48B24AD1C1B24AB911F24A9251AB9443F24A9443BB42792498924F8284F9244ACF6A0FACF411648D431E241CF1916CA3D441724EB181724AD541B24A3A85AF1432A4AF1431A42734478A1C73A6581A5F22C5815FA2AD815D4853
-:806D00009AF2264A16D5B4CC254DDA1FC1F224CA19D628F89164C33211EF24C824ED911D2CAD941D242DB34F88D27A21D24839A4AD3643D248BB2694B24FA2F4AEF84028482408004002400400004400000018000000400140084800000000000000000000704F0946A421503491B04581120676882341440A26383432188745160400903A
-:806D80002180840280020040C212388D42601218808144018064814888688822822CF47FA600822D1816E848E1D946785C51181F680594841A2468828034C8C122308C458846044B128C18148882B42499222149A8124508884363C187228B18A21688618C44368832828F4122B142B388C16589F2EBBF3044CE38C01515FC88349B415BAA
-:806E0000425548F5462838324C6128228382A12C844D5A4921381860482244892C0211681222214E88122D16A084182884839184303183042220E488012CCD384889F4A1AA00901A842B1819146481219A84518181488184B02494184381028514A42440A112101428024F2208402442A81284637211EC2221A8121E482048E481D42823DA
-:806E8000C8243A9422824C6A228F8C08180028141E24421110010011850418430141293124814160221200A452482800C024000022A0822800002082220140048848BEEBA02418301483012F8142648128002C41048AD22824C242008144893C48460849A22442C0228D822C0228182843916832C4301800A48A21444884E422E4281688BB
-:806F0000180822FEF3A0421800301427879018130200400856C8242C04184441832C1408804482018B28222062432840A82128C0A8003082004322C2222EC281418188F0A77A209148C0349C2102450140042E125141A290125024302A814311E8228C312428898484562250822004432106C48021121488834408421A048018022AF485C0
-:806F800059902138293114411850128C522889828381014C092480611130284129041884114A81012D14A01428290128008C128204A0121082548222002860841618F8AAF370420224830281104884090095240118184312181404200281C08828A28A1108002428802481851104284212002A018A449818800142FDC900100900184C41C7
-:8070000011048485C242004B428C0241225820042824482A111802002C02604120834804B048010000A081A44449C48C00F0182DD023C42218AB12418381D14211D8A439285028578129319446D4289224814D111883626428281628F4A8118B242B828A1104322424122842888F419612C0182212120028288958821E6C84428CC148AF82
-:807080007D0A22128541040015782401E08182810480230143819244004200250818122483014223223124A01212004384046824602416888944044C6881009FEB09504100001810020081412002808284022002A48024C448008004008722009260482180014602004A0242848B14A084A4EFB10B1A8222115241121974211804481C8488
-:80710000041A741892184A23018001808212C432A482A4496648490388298A28B244DA2422028880324810E4811822112802432245A8428FCA041848160245011410020062416082230138200200D0280880C4888129023840222C122246049082806384682124204408E0C40189EC82B4EB0487828F56A44400125893120447445D44CB89
-:80718000222A228541880742242D1225A2311AA38B8E8478A129045994844C548887888B648BC42286E42229C284004554444B224C628B20034A426822272525E221F187222412220021002284001048410110080000409444000000281042222101202201830400000000008004F02D323028168884041C82014860485144288A028400A4
-:80720000002D42B042218181988444001411148483428884040000C0844144228B2800000025829416FF210C84211A84011200004024AA224002800188100218828A0848460848168102848084111204000044888902880012A04890224AF289B100480040040040042A0200002002230218488800004081088C0A6A8402000000449028D1
-:8072800000240020022180318500C022222200004011019120080020080000484C0442000028214022212202008008884008400C0000F0D555103A5844422002005044C5B4248224820144002C542225A6114321098244001111135288818B4444420012280045544CC3122A0200002427246CA215EFBC05D08AA642480012C04180084DBE
-:807300008E289C062008004012021A818808002214142116D288858604000000D04482A6220000200C24211F170A004002002890811488100810480800484241224489440200000021A0812C0218008008820020018308002242287FC804228001181200000000000000002004000000482C020028200800200400000081000000446D85DF
-:80738000A01229C23228122E2112904111C0818378422808508480A2884A064262444648060028280022182282212A020000C08885588886129888008220C224AF570E25A21344242322810146882818815818112C0188000049041084944480044AC41226D2222231129E3416223214004E480030882304181004284A28B644B224F4BB19
-:807400009C242820830149012A02D011184818714821588881128004904445240470443448002A88A28225A2222438001A8102888A9888008200841280848424F4813BF026222D222E122B131229012C512239F812131F11B189F991898F84F888418F8424549111489558884F84F468444D444B244F46224204284554642E246F227212A4
-:80748000C2122B191AB89229C8122592822F31F111118B98DE898D888B488F84244408488558884F84F69CD4F026226D222AA1111200502229C8131F3191C19E888F81F88841CA2464141581445888688F44D44CB444A222222280425444286F22D226A8321AA1818A2828582229C8131F2191C19E888F81B888A44C42428044588848DF87
-:80750000140B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000080
-:8075800000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000002D
-:80760000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000AC
-:807680000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000002C
-:8077000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000AB
-:80778000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000002B
-:807800000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000AA
-:8078800000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000002A
-:80790000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000A9
-:807980000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000029
-:807A000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000A8
-:807A8000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000028
-:807B00000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000A7
-:807B800000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000027
-:807C0000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00A6
-:807C80000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04F24
-:807D0000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000E4
-:807D8000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000000025
-:807E00000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000A4
-:807E800000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000024
-:807F0000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000A3
-:807F80000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000023
-:8080000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000A2
-:80808000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000022
-:808100000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000A1
-:8081800000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000021
-:80820000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000A0
-:808280000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000020
-:8083000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000009F
-:80838000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000001F
-:808400000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F009E
-:8084800000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE42D
-:808500000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE44F611428188441848CE182140418822664484A424244442261258282922121298109214A8161445048424048C842418443A1424120981840C442281664218EF3
-:80858000622C02C2E0D94502BC548146D13864444C96142AF4C6212D251AA2188153F82244222D786D38AA94AA8C61816143A81C4722B09AF2881486B8A86488478E2C24C26880B41E98484E248B42642A45A4214C420C6342746A722488C1981A688129F92EAD00110044C4C024260218888A81C861233422566842800C884301C8290268
-:808600008841E08196480023240242E3188222119462804818042914C25AC14A68288881F05D363042222D198541021818601C258103C14C88022D2216A84984836881244121164482020041E6142C02108801400C12A01238814084028041084A61288FCA0D90480042484C22C4444122C024000000802341028041029082842008483094
-:8086800048004847848026064440040030261224206128187FC40D14004885018C14082841000044414490222502808808A0818361814A29088100100800460C100400108412042223A22100F0F8BF000018000000000000000000000000000000000000004200000000000000001F9205104152410068258454482190411C8104181100F3
-:80870000208264424021012128480020914112A08184481889364A2024A21410524820021086A25842BF544581078450421D4AD1899216288A410184B14D22B02444DC84B28251818302002594284C48A4A1824B824AC1A22482184442A084441485948830888143212C058B61411ACC1810F44D6D8003854205E094D26A22442618812404
-:8087800081342423312520829129484302141826D84218840E4CAA41B8138421814888A4148D641185A448224E9880D18408281820A8211A6C641FDD0F481100611D486190148C82011415581A004885548429088902404204202281080025220816240488304A1008405842484A018B24412F444108F048A9C0421A128282C12840642200
-:8088000028188C04122C3111182289024248440049D448021210D822012280012182C186382420060046618800208822832AC814F024E520024B21A57225D843B112E22201C56224221951824608A3121892188C32212846E4E49228C0484C927819E2448201683902382588061C1508C16886118891444339A8844E9884478442836686DB
-:80888000DF350F2C223336293212AC21A121902C1820014840480818421C06484E222E4826189814728129868182962200844942B8451388122864188484462498888483AE214B42822E5889E4970C420081C7122752284522129242A916D182911833313222A9426882902441851414242412C8211606001641A212236884820048412260
-:8089000030411A084C21822841C888424122FF15455224460C18351E5828414446037243810129321890886287414652182C81988412842782424C72430441438261448416150C501C80E148C151848448888608818C848141CA422E1D30184880024120E224831204A3028901206312248042B244018948820245281151A2128120064043
-:808980004224A21227114848284B24102412C4424C0188C0422257C42002400122401818D42141082984140800442284282889447244890400400419042022022281000084888820B1127414082604894844F45BEF242841C033A44352284782CC712267312AC11A58242816A8212E8849D248B14812193448E49935628183C43644C5127D
-:808A0000E452241134282E11C5124458C13921A5481936C8844CA4928F4459484781492239888D4466F6B62DD02401004541082086048C14028B14840014482902282E428840448A12042C04180028400428221A02806181200810A241218C0412009F8C011824C01412442D1144182825041021410324194442110440F8422A200484288B
-:808A800026486486222220028C342C22124283220258100242224881C2D084086F5E0F4CC6284400280020081026084064112840049048006028843C041A04140000A128141400824212618A0100004928022A14D81909121502221604128421250413824204111C9114608248891454224840684848104CC2121082942389322114424A99
-:808B000082822394244A02608442122022064F824488F493F54012A442001B49260800838214C818836442848982110450185414002608A81721441C0224884E1211C0848140140840042001802181A8411034223FA74941020000140040021800003426131501000044413022181281810022906A21401801002241400100000020F44A4F
-:808B8000FA00412448282942082800000090442818008400812D182C18184C982526D812432202100881400481400180110888402883881222F27A4D80024C040000008008414485C4282100C1422902444686027044010032802281014A02118C211421E441C8110081818140C824A068F0A36D0020225548801284722651426C0216025B
-:808C000026824104261208478210257921841212140281120014304135141464422002440040828132886416648440F8FBC240888294242C6221E08204482E18250429C614211C120A25082821E418228D82400285C2811429484248820DC02110A82110441481E211140889A16112241002FBD6201236244C82125483E47084568E22258B
-:808C8000D858C41CDD23878477A21651662569441142C571125242C65284CF12D443D2C881C228216AD213A481ACB2A2445C54A0568E284CA4235D14241E19842994288B358B184F4928B28C9C28EF2A0B4B34342D244B15C57212921828284826F242812CB384D12244D446C2352A5118D1878285548435FE64488D29E352283FE4722429
-:808D0000726262A38B952A328218AF22D112545D17121B428F4272182832652C49A11989048B811A8178148CE3C4646666FA74AA60212E2C242AE443E116E313924C36B223C2342C42243114221F3331183D622E284C84F4242A8587B4887324C2AC2924F818191BA1E9712243023E221D2893E684B24C92285F8181324128421A041334A1
-:808D8000481826E882A4A62F2694288C82F41A4E000000423044B044088B8690881228124480024200200400C21882188220088280840880849841881188480080140800F084C41416724654246F42F64444D5FD2F6589A6665F56FADEFAEEE22F4DD9CAFD189EDFF2F25F755D35BF91F12D2B75B36436241543FA644677F22E2A2F2AEA50
-:808E00009EEC38799CF614948FA1F8A2A22D222FA1FB13819D211FDCFCA1A19B885D318B4487885F1CC6311B88821B6C242F8828E28DEDA2F8EAD8CFC6F6848466F27146142E226D4C246F41B474F47D59DF52B728A6445F74F8BEBE2F22F27A386F41CD9655F75F57FFF3F23B19FFF252B7AF82E282D2B351B36D9EBFD2F2282A2F227241
-:808E800022FDB4BD8FB9E3A3CBB2AF88BA82F833F9BF93F9A9819D2D5F18FAA98D57928B319F9822F881B1BEB586F1983985F28A8883E28BF9B4A6EF8DFD2E484B8A8F21F3CDB6141E262E646D222B314F41F37D6C7FC3F24424623F18F41296A5BA52F39244CFE9F13F3BBFB7F733113F32F12F2BEF82B26636245D1335F96CC67772E5C4
-:808F0000FE2E2C4F36F6961B6FF37934F6981A25FA82823F31F59B1BBD2B3FDC5C5995D155F368689F92EA44A6B91E311AB941FD181A2F88A832CAEEE8F9CADC6F4CFC84848FA2F15416141E26AF42E222F276344F44F63D3DFFD2F36C2446F283432F61F9CACA2B35EFC97594F61713FFA5F5331333F32B2F3F96F66E684FA252BD7FB408
-:808F8000F45E4EB55FEEAFA6F6EAEF6FC8F116AE4FE2F3B83A2FAAFA2222BF33F3BB3BAFBAFA696DDF56F6292D5FD3F358588F86FE61417E715BB91E918F96FD5852AF88B828A1DF4F6EFFEEF84F4EFEA4A48FA2F3F67D800141B024011C41582400001244113011441185044C12514810189228218118901200702241581484436281220C
-:8090000020022001160816182819088304CBA7702402220030263024502228241022D248014C428882841224342400C0425C02810021C012200414008C240418200400428246044C48F141D5C0421F4152381F4132481F41724EF21124EB141D24AB961D28AF147915F84A914F83F44AB143F242954F82F442B15F82E414F9244A4E814F89
-:80908000A264154FA2641D2E4AD6D5A4E54DC25A1F4DC2421F4952281F4932481F49364A1F48B64AD141F64A9219F64A9259B44AB924B44AB924B44AF9244829F92448984FAAF45D4340FB116485F311E4421FC1324A19B24A9121AF166981AF14DA85D23AD984D438AB423CD984C4B17F82D418B926C1817FA26D114FA268592E4A9675B2
-:80910000246B19267A916CA21F4954281F4936681741A11F48F24A114CF24A93288DB349F24893439A1843F8423241B86D4829FBA458CEBB400800000000000000000000000089088001000084002800000040042800000000002FB70829214102100510B812742842688100E116924444442848284C4262220000273126F214222213312F
-:8091800022234848240214889C84A248848444000021846962824322F49715004C424C0827218004002004C022112C1AF1281219C42148111110411C131C5884408812D414C122148145313A14400118402114480449E44601181C44FC42240046582881503280149842C912BA280524C532114131472226A242621A422318431413781218
-:80920000D881D262815229282F5548581489427731C88187141CB2440822444884412446E4A16222361804DE5390121E2441001604001200002042A24A4416681411100522400841146128841A12042602000000608181110000904444A0244D48AFE101C024200112224441A01684871440424802460100401808001210088741480013A4
-:809280000830241A0200800114C0828488C0B2A2208249F848E9001223117418111882E1846283B02231121248441E888504842AE4911208304200818608890289B21282911418812CC1888B2447883E42831332225829210483120A1843A614C9029F57073014009180428462824E3238990410465842002818818180048001302816284C
-:809300001222014098242588D484A82520112231124221A48029C86458CC015903203212438171180212C3240181298121148819681484429302101802106888841034483870912401121A9A2840C23821221C048881A884222B1220A282812FC90532481682018C09296282508424180012848284007028820120153C184CC41818800133
-:809380004C716814A8128C021E4C124C124894283285212452841800122824F012834084841244244258A488472251254898122E4841802381312260712C0189082240A8421302212C0383042001102C044C88248218C88200124C5282494862219FF601004480318200928B8418001140124412440485048100644821004484C420248181
-:809400000141800A9100001218000018008921F41E6740046C82018C01678227814F844A432A019014C12C33141614127419440A8156B44C12C84C3AE44142184432544B128438C130C416685281884628E191984822A12061422D1849321846F2F692A01A8041D42481120822901A502813314810221808288428000025220181002D1848
-:809480001A0280012A018B1244830480028021482401122008F089870020028120C11281008140034410022812008400D04A810200296181180084000022843044811800122022044A922810F2D977102221912225023410811102651108118148241588321870110200004512145C14416C4262446146048443120482810017482D1487D1
-:80950000484C016042442140F4ED3A2008818412001818400800100810081002008301280012180081182290288181180022187022110218001212800428BBA2000018A04185124822118474182211081212008422272100241618028C411881321221142C8184011A5218811240117848048422460822A021182921F8F1D28084012860FA
-:809580008112000012C4005220044E2832121018082002901184000080018C4122028C82021AC41818C08812C880280840F1EA9900C0614214508120414A1218C32800400800104802A1301884241072286132882302268822420400840040088064A2808224A42122DD86001CE421041012022509130118305A21234121111242110250AD
-:80960000211815E22201442444004421200122C014181222881004410010040041BB6C0082818C91888100009480023048836481214A01C01840088100001361818118001008188420321C2F8281437418C118C088C9082C082082F82A8140084810210848D08204274190722412008C04848421212C018810588285023428228CA2121CA1
-:80968000071C03188B2914804404282002A01A802112021F8E0B48CAA1118941D888480821255298A185914825B241E424B15854884AE482B212C21884856AB185783814186A219D1A26B838F214322B224B42AB224B228F8222A332818D118F48F17B2C8B21D19561818988B888BA12A1B83AB168641323F89CD710328193E28332822952
-:80970000F11813A3A1111E4825E485F115122521F41A1C87819423548B838161218110F812129C4352848D11471116D287410829E18181E111C128519E18E08382C592CC62298D14BAF1181C80064E84183822DF220A20C12A2374192315C352959B181D122427C21E1A8D181082C1123A92128519D82311120225E2836221651CD24E4397
-:8097800032A217611E2245F11848D048711AF824243E280046A8516D1CD0C4A24447862A7824946229024DA4279B2084118131814E1211421142132104A0413448341A5438400114400185911214102802181504150411102112A1821D48888008A0482882140000A7B32423A8119F31F31A393B551E811E432F31B543F54113EFB4F54B8C
-:809800005AAFF5D1AAD58AD781F1191A2B141D5117821F21F118181F117113582125F2131B3F92F811114FE1F11717EF61F11612EF81F199B545F6363F2F51F2113593F1351777525F5BDB89F28527FF99A3339F38F88717EF89F234B4CFC5D56432824F6AFA26E41A25B224F2474824211F95F5183ABF91F35253BF9CF41B4A3F31F542E8
-:809880004933751BFE1A189FA7F31242A7213F81F11B1A37911711B7A23B111D11959B13B5FA838B3F11F1228AA552EC7FF1F1171E6F21F136339FFADA31F212732F51F1391D9B334FE3F23E2CDFDB9B21CF69F2BA341F1BEB4BFB8D1D43F824244F415164215F6BFB86E42B773AB3B4F3C273242B551F11D528F33A3AAFB1B15A741B78D0
-:8099000048784291519FE1F11B12AF35D32AF55A5A2F15F15A5ABF34F158582FB4D182F113191AC11924BD8B27A127A32FA1F1151B6FE1711EFF363E6FA3F1B2BC35F33272FF81B31DF31831CF63F31E34DBBB85D964FB1A3CEAFF19337D97EF41B92CFBACB4CF63BBA2F8B4966BF32B773AF124B4DFE64AB2D2B518F53933AFB2F2DB5A17
-:80998000A551BAA79437A42FA1F41A1BAF85F55B38AFA1F45A522F15F55A5AAFA5F45151AFB6F72A388D189D1B855BAA2D8ABF31F1BB3B2FA153956FE1F1161FEFC2F23E2A3FDBFB36342F23F31F38DB338F13F33C3EFFD3B3B5FB1829CF61FB3B319F92F39CBAFD9FED9CCF8BFBBCBCCFEBBBA2FAB4B66BFB7AA7334F4ABB7606290122B7
-:809A000084184062812440022484400884200112810010981200B02201290121100200228460814048628100208122282401F0F75480041812211608100881800142114A111198412815085018311081528185048D2422C0111A62121648E181F22411E012012681C41140741488CA4898224C2102F06593C0421F41D228F111248B141FCD
-:809A800041B24AD141B24AD141B24A9921AB9451AF143924AF743924AF147924D812F924481CFB244A1CF8244A87114FA264592E4A87592E4A9E244D4A1F49D224F59124C5F2912483F49124A3F68124AB161D24AF24D981B64A9945AF143924AB944B422BB44F82949A4F8284F9244A1FD601ACC5648D134CD618C1248D114CD21AE1410B
-:809B0000D272C928ADB15B21AF1439218F2439358B945782987D48B87FA285F927CA8B815B42922E5A87592E4396C54A8CC2DB9AD638A429C7349E24A71644EF3649F442131D6CAB3449F64A1143D22A99442DB64F8294926B4229F9245A5FA90384824800000000000000200100210080080000140000140000000044000000000014281F
-:809B80008FDA0BA02128188591118184854414C8818418807428069088901868002400848110440290140010A421412212988448800116C82489771884221104F036792024081392162C2801001400C8C12848604130142011C844816A0190245D184E282A4122014D31842A41088481899228501817888484281618210268281C21F48BBD
-:809C0000CC00E2281D3215C891890141415188228A01224F821422918816C218528301868A0581441D181B422C43911A124E318138C412C4A01218453849875A18818B12228B244B2160214342A1415F750948120049012184811018118854484800444004286044800260824445080041440080028C12E888020084008D14161128A2249B
-:809C80008001CF7E02008280080088000000000000000000000000000000000000000010010011400170E705421043C411D902665822814981E41B48186A25491564523D82AA42B8588144B4844143AA21AB443081C489B124822814034F4291288D834618024B118AE4120821169A14482694848E12888F8582E45D0A201443E412199C13
-:809D00002146584A450258368338821698145B482F5248B22842A81123C44117284416A834AD42308544188B224A0C314418C9C28166586A4381A16A3C082184499142322E828E248483A4413FBA060082008200880000000000000000000000000000000000000000100100114001F04F2F001214001118114248001400B0421181A1424F
-:809D80004416082A04154831211484400823220412141287128422280081402108844A280A4100C042EFA34A825212C01435941491624414114681553214265148428C442D61162855384728491208412E8423322881434871840224301415588449071382981890582190482A44E881229428F03EF730222111434121118144041142137D
-:809E00004102148446618514166497D0244445895218108428C22889624C11861421912389912185C42410011508004283A24281260884249F2E0690110025544116982142190411422541C1224B1400C30620722821845214221484435282240020110281418128529028881288564A88880C41184222481FFB0E568424028120814128FB
-:809E800004284368240018005022008C3542000082204402004844284444C42200418122C112250858C0142C120848AFCA0A904680810410120110241308001688011642818281624814421044490184914448890210280111004F11220200820048C0442483F1DEB4004044010045224284020020110200008301402282220282108401CD
-:809F00002200000080210120088428414410280840F23EC3E0441132241446083016814384822249021002129012111E288384522413822682D818084184110089820284122280011922584816882288048D4440088127D4004420018001271200008C041218160800002442000041800429014302411044140C1C016081002484444301CC
-:809F800012A849042CF469E3000080140442200420043044144CC248464828064616B42111A284844810088304008443E244024618E4828498448146082121214122004820F4575900281242124212128C21C812A449A11800428E484301001881184812001445C264C0224D2200002480425124848C02821D144289638424442003A6C48C
-:80A00000288F89024912840300282246140440014400200240382810C894134248012581024180142122140800100484005082402844D482148804E7354001C0244446280100150A2241272160A14018440100188484002D8890112118000040342C2041040000814112221220184412F4A7642088024982011004414180418444C4412874
-:80A0800040C4480024488742004844C5028122242848848C02464408844B24A014C41425A43400444A084470C8F1C67F20240112200100004400110049044631110041451201100814800200224800808242012800100188202221022382F25EE28001418448103448484A11C8884212215A68418D124C2161481A0400464294111800C4F7
-:80A1000021250800122003182581A481424423482844664123BA82148881110EFF68031244410090442C420100005C8341040030281816981870110C1110120144284021821418088100832802601810088188812B4281F0C24440084810011140084244848C42484A2A215438205182C012809811704804884431618C03484448224014B0
-:80A1800001400428004C3288124323483812413F370F162448944C4E4581448B21AD488654888189C3141651C257146F817146D44891868C11781444F4296D453851344C54C21C52A24D2C47222AB14192284AF41C428382548185418C8C117818F247481E144DE48ABA2461898147829CA1E41F840628B014E24202424B254664114A31B4
-:80A200001588524728CF44B344D16274287428B84454992AE4824148FA549287431891465231D724707AD142B24242618222C0288F81D216E1A6845848818EC81414A3321885926A6CA8C14AB18844D8CD0719F5342418121AB114C4112A644449642425DA416481311AFC1818CAA6511589B558227148924E213D118D811E48D788412F1E
-:80A28000C3C824240020D14CE2C6724424C22455B4C4E386E2841256412CF8442A2D1827C25E844B16AE3A8D444F62722CF46552002A11B12811911C1924128119C192112C88C482C0A2D028084A02004A120221830D12221221122011A44121B0268194128AB4220118482440A4484C024A02426FEC0F1F14F42121D7D14F52F658499731
-:80A30000941F41F43C2F2F14F15DDDCBDD9F98F8D9D7BD999FA9F992D8DF3DBD7CFBD4D67F5DFD151F6E688F814152AA5F76F7171325F392933F3CAC191E926F2141D24281F3313957523AF3585285E281F31517AF35E722B2D4F7989A2F41D175F1C7F74F41F19494CFA1F1CE48837134F4545C47424F4CFC949F144AF4454DD5DDDCF457
-:80A3800044455D45D57C14F742519F94FCCDCFA5FA7A72BD888F9868819F95F15C884FEDFDCFCD5F71D18AD188D1AA51AAFFF879177F13F91119957F82D2ABFA1212EFF3F32A3E2B321F93F73D3D2A52288F61415A77BD233E32CFC1F1888AAF82D231F18BB987E18FA9F91E3EE53C1847612B111AF114167FFE0C5F54A4634741CFC3B24E
-:80A400005134515E45CFE7F24B58CFCCF449CD8F81F14862BFFCF55B985E5AFF95F1FA36AFC5FD55577F59B972A7114D1AE5FE67EF7F51F1111185E97565388FB2FA2E2AAFA1D3C6A2211F12F63434CFC2B248544A8FA1D39BF24D61EFC3FBC8E62BAA8EA2F7F1FF5DFC3E14CF69F9B616EFCFFDBCA44F4BF8767CC7428F8CFD237D144FF6
-:80A4800046F63C748FC3F374341B159F81F17C7D4F67F64F5CDFDDF548CCAF89F94B63BFEDF55ADF2FADFD5F1BAFAFF372F8D7F4BF8DFD6A782E32A4AFA4F477EFFFC37219FB434BAFFD7D82F31ABB2F2153EE4FE2A2239F13F32C2CCFC2B258F55A7C8F82F2393BFF54F6EEEC8F6DBFF2FF88AAE7F1FF5FBC78F59A926F6BF37EDCCF474C
-:80A50000FEFCDCAFC7F778588FA6F5BA98800140088C04848004848004126081811100008111812181590118100221A01230248418124521011220416581608844004024F8831DB082D44132241150414384521411241146127142044443821194182A845184422216044220518612478212221281161488140C8324188844426824800258
-:80A58000AF44129488488364187F650A2E421F417228F21124C3F41124A3F61124AB141F41F24A921B21AF2419B54A3925AF143924AF147B24F842914F82E414FB244A4E814FA2E415F2264A871D2E4AD6C54ADE24ACF4D1242D421F49522C1F4932481F49364E1F48B64AD141B64A9961AB9459F44A924B42AB944B422F64F924482F4454
-:80A60000F9A4484AF9244ACFDC0D4D4B1D448D121D448B141B28AF2451412B141D2CAD1619E6247315E8247225F84812418D134343F116482D8147831CD9A64CF1279883F12342874126718895121FC8D2A2A169341F88F648121F49722832814F26D1C1F268961389F29528AB8443DA4A21B3426881297A9688FA24181F480A840000002D
-:80A680000000000000000000800188000040010000000000000028840000200400BFE90B1E44291182921490114352422416124862281C6148545814A90141501848244C14924C46588443524827861822160445382119322C81302112281004432432228914684848228AF27A3E9022A28001360948242E5420034341024841490443A46E
-:80A700005280022818288811228C04430120D28461215024184F22018924A4488492838802124148A0188639487FC70F36B4420112441332114312646341A322D2221911944446D41434122CA4419021428A9354288884B04142E8941388B254427814382126C738646094498462824961884228235284812C28A5285AF8657A9042282177
-:80A7800028181608482582842101412C214821018444430284400221874419D44852844461120049012110E4810228188A0482302420218444241868823F1202240016044C120E00208918514884A0428882892802244664824018988228888614260844188421804104008A8248784A0129220226184808F02AACE0443224A40087112A26
-:80A80000541C469588181562241E4C18497AD2988A46BC4C3216608D22841D4289C1424CE1A116C15681814C018631248887111DC84C68288C31488A249118218816FC4884C38402A04282428F9D054904701204648D641558148C08882384849184162ACC444EAC960C4224419F22941884444638229A5442814130814B12A485C148431A
-:80A88000412441A884A889193ACA164C6C869028842A2488F4E2A460224C4208C039102404181381D8C341CC2A4A68828C0821228C2992480046C218294B1164A8448A014420886118882C18280412001424E841280081006F5E0144490484210041220045282A6444211820420468818B12288200184038118B21128128236288800220D2
-:80A900003211004B1210282234444C2482C1481A8221F1E56480A442151444444428024C014126180400C08883512280C21248821904A244181302104C4404C146041E488002844508C88312880241852452422614F8E99C20028128841084A1410000C0181012880143480800C4848344881454484100217012042002001E8418200140C7
-:80A980008208A0244008F0A749C0644484454818449C24384410688841442011E88178187482A42484A448C110688B48128D3441002624D286198C068C242221018C22111828241C1424178802F0BE1E208852142861001242120080F448121002280084282228704881044185048B211844254204108482012661488921018A04842D2445
-:80AA0000482845A82447814CC318EF560BC0224044440444128C82010011225014501CA4855184402412A483441C622181818413084483480810011B4143144158C15081C01884CCC888804428F47DA84088044E1124830428156214E01442EA14094A88A482238118948412222051814113A448114B1849F181344E26122001860882004C
-:80AA80008280084309232C0840028002CF1F0E8A110428301218000020D148711408430100482241C1499444524818128400111862382AC138806181404828A6244383210342C396244E24441028F2D61A6024B4411088164C41A1148248A08490C591C8482A0C1B84109111250884C2002348E128160882008241860311503840024304E5
-:80AB00000048200820F8A79D000000004810082003A24418104218A4411884844284208104C1244E12481140180482814B41A04848841008202401100850844B5C002800448901280010611828122288228222882648080015124134221490488480A112208A014008106442404401800A4128C92481F2C8945025141400109112409418B8
-:80AB80002B18811114244219414401000085018494002A511441144800C0263624840A2081188122C1C88348E68824088A82083FF20560C8414481414144C4000044C3921820110511441948245C42202448080020410180B11802124A9148848148810084A0489048128814F0E1F81456088D411C81C881121E411816011654148C021142
-:80AC0000112D4489C544462201119901886184218E18E01A1592248C228846111408842C0128449028C304002A613286042182BFC60F70A418D24165681B184446B411712118081C21312957542F81E411D244B1448498428CD11982C8419D4846F444534E681E188B219E522D44299E5143B2187128F428249A43E88586F5C4C857842264
-:80AC80009165EC41A44889E448DAC4C1422F48A8821CE2A4F25D68B011718B427114518C83A3116F12513881821716C48FCCE9D1A18817148E862BC58F881AFCD8944C4854598B14648D388AB81258298E848D2C8FBFB841A1279AEB82FA81384B9945B491C8149512A862ADA8A0188F24D18828FC2818ABE64FD27A2478C45818AAF8428F
-:80AD000049E064C465D524026FC454851B61415E551AB112FD39825D4149EA83D624B965551817524E475F92721C51844FA4D4C6C2116DC197C11362186D1843943547D32501204158828F14318A56098D11CAF4142D83712529E481B8442438C818488C19F427210063022038423062846324314212232498228228138832812813082484
-:80AD8000C0124082C292814B82100400881188112115988215988211290821504240044A22085F3C4FF257557FF252994B119F11F55652BF95F56D2B6F31F4544A1F14F4888B2F71F45852DAE136F7C3517F16B6C4F46469CAF4E8641217B11F1CF8CE5675F349431F99F1E3E22D9A2E26CFC27A1AFE1F171F12E28BF13C348F83FB111782
-:80AE0000FF53F958526F7B7A1BF14383EF2FFFD2F3BFD9D1ADD837F818928F8DED67FFD67AAFDFFF8C88CFCCA6198BA24FDC4EF357573FA656DB4F41F15997DF31F1595FFFF7F3571347215F74F5CBDBAFFC5B244D545F72F343517F56A6554FC6C6428F52F711125D1B7FFCFC859D7F94F446CE7FB9F5A9E8AB11E5F74256CFF3F23E7FFE
-:80AE80003E61FAF62C248F82F71515DF73F31B415F4B3E183D8BBF5FFF79783EBAED8BEFE5F9D8928F8DFDB4F66F66F637F4CFEAFAC6649E18AFABFB2EAF247F76F72767B5FD111595DBE4F171373F52761DF91F151774AF9CFD1839EF41E92DF977FD5F5EFF73F3AF9FFF65E94F9AFAEEFC8F82DB55F1C18B9FD47C17711FF5959F1F1A1A
-:80AF0000FAA3B96F3BF2F4AC6F8DF4353F1B37BAFF3CB49F18FB8C1EFF4BF9C151CFCAFA584293FC7BF58F82D6A8F29F1CDFDDB582FCC8C26F47FF74FEEFEFFFEEECEFCEA6998BBA5F8743F37775FF7256DD5F5151D9FFD5F535755F72D79FF15F5D1D559FB8F98F997BDD4F68FDB7BD1F1AFFE7F7FFDEFBE5EC4FDAFAEBFD9F9A5BBD5F5E
-:80AF8000CCFC53CDDFB5749DFFD5D9BF9FFFB9BBCFE9F8F6BA5FCDFE157F1B67BAFE3CB49F9EFB9C9CCF7BFB8ADAEFCBFE59438F9CF4BA32AF8ADA99F28C1BEFCCF58AC88F2CF8BABCCFAEFEFAFEEF8EFEE6E49E9A8FAAFB515600501210042041210112204175114824011183044411874411874411801198148304421C01004D1284241D
-:80B000008C4402248C442241E288048E484482440082CF7201184C12048180C124002008168828A384A2274447828813929820044418C664828220294294121A92888E2418822901A981240681400424224A4198284881414B38F024421F41722AF2112487261F41726AD241F26A121F49F26A921B21AF2419F54A9243F24AB147822F1457
-:80B080007B24D812FB24481CFB244A1CFA264A1E216FA2E519F2224A8F59D2A6E549D2A6F491244DC21F4952281F4932481F49324A1F48B24ED1C1B24AD981B24A19B54A3924AB9443F2429447822F44F924484AF9244AEF52044D431FC15428CCD638E1414253C18D129E287CA8218DA3512C13E41411B44A518429D18694124F8AC51149
-:80B100006F824CF126D896D1827418F4225916D4B2F4912CACFC91648D421B21837611346A15B442D9C17242F41128AB2451AF2433348F2438244E92478388678229E882F5E5BF008248000000000000000000108204800244004001008004000000200228000000002501BF480144101E52614782242E442D164E1A8E228A44C244428410
-:80B18000C0481911267148847464088061918C01C3818161C2103214A9691218404114E84841088149012C12481488028C34288CF4DDEE242008128388D94208844489011D88188441124C0122430843017048140421C901860852521200874889044C054220341219018D1120044716181782D014094FD30725244C26D14978925C42638D
-:80B200007212E4C4D186AA841B82638404188301412C98444B14CB25F084481614981816DC843111128CD22884E144F182181CE284015601484C188C31314111288C1444A521261BD8942BF1363300100A8082885428C012102811588490443C21C214840000D02101008C0849250100860C1044142861241028911810028B240048C0484D
-:80B280009F8705000081000000000020042002841C210200000000004800000000440000810000840020F298A70044842840420829113412851248067012C8248284800484208411082E481281444844121830248443022800400800100848281A2882183465004400810010428241588264004A01888902841C31282024110842100800EC
-:80B3000058004C42982420020084008140081008288822FE7B004028025082201104000010CA240080040000008C22014142418001000000410000000042281A0840F4EFFE00000026020000120000400290180000141022110441426044000018000048000000812200002884DF5F08140040981830148982480880512150840000222836
-:80B3800080048984410800810020010000C0128302400841408404184004284F864E4224410400001280020044940040140442410040040088000010022024012081A2140000188006800241FFC70625014440C8382143618388892201186450481042D4480110841441428401C0844220041200800480B16281820110044148221890242E
-:80B400002849F232EA1024010000000000405181000020A2240030481881410081400410021880014008488100901822420000848F2D0D0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F800400000040042800000000D5
-:80B480002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000004C
-:80B500000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00006D
-:80B5800000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F001200000000000000000000004008001002000000000000000000000000005F5F
-:80B60000A502440000813018002821140018244018020000004284000000000010881208001811100122000000F0F67E501244122428400200A014106861001400100110083011204198244004282041C82342001400888025311841122412C118008F370F1100302284301A0026021430141224002100000080452801000000188062844E
-:80B68000288400204181911181221200841200AFFB0F614418000000001A04842400118100110081001100814302412002404803001400828004124440224104008FB103401402810044229018100200210000840000001004841004247024010089012182144800002002A0144100DF1A0415044598182D15C02427814CC414001421D9A4
-:80B70000A812832241C41884106882418181E0C224E5822501424111491338281F818284329CA4188385511816881172286244C382D48422B1886382AF9B01450121100643129C44181824240060824064818184004410084694148B24830143043440082E184289414828C94148102801284822484684C128845F5D0F4044CC189C012469
-:80B7800018224484100147982C031200008183028400262884010044E041722461821180E24158229018121588410284695284B02841A48122DF6B0928C9444202002CC2310045091082A8418D21504826A212901810410826288411011214192424084522830119112471643288181200288001278680E462049069652812440400004175
-:80B80000807128044084011622B4110218821884234124381520082881841400000084452122082480341841222301E08B0C10024100818442412110A348702418025430824008508415160450180022281810912883119848101202004884821A1C8E0881D08441F2D6B50029129E220081841A54244019A2C125FC842212281651482283
-:80B880001A74110850181554A68B21421D881880C8211B16409829CD122A8104251194182641A8148424C2818901222A418CF4C315205241401446042827120040014028548544909222288410341800411241A0124088C481008489012C018094828218822CB124843814818C8441F2583E10045425458A14C61894816484181901400CFF
-:80B90000989085D0844819041AE248242112054788202112523246020046A218401801100E2502A32144282141F495AC80022142122013932444211825114A14328243782A042A511422D01212021485424A02222424111848408229880211805141482C21286841430418C42C02EF280340049014C412418034184E1110A418461141112E
-:80B980001144041844100883118824028410840840012400110081130446A4140088890100844F6602100142008162230110582842254604824182E08854142922484401141212254AC28813186214C0481021545200411092440052822038821821F0E28AA02828214128444185C425234108100C124489A21220423421C044302441394B
-:80BA0000641400001601C3188521911412308249182131C260218024213142129048145F7D061244131141220218400421D4901190120028A012898104890284430160812238A021800329028084326A2E12280010241238AA6082222142DF910B4051481001290218104291120082824110648C1C2438811C9A478D1114C02852284A0812
-:80BA800081178424401135822B2892430442001284A288251414084110F8D6B91002245012810081211200005B858413B142081D181240221451483044496148411684112468112280014214819724441584412404A3118802282142416FF3061698124812C922012601284014C4228240434831816088218D24188088810899A212142DB3
-:80BB0000882A688128584952141782322F8231149029A504389058202E34A22318182AF217D6102458342F15A4118F61F2161483D211714228513B414169F812C1456411C741A28D28DE158F81D8817842F6294445C88945B428F524648147C9A9596639E121A61129D216F111332A92165F4981F425182F21C14146A2412CE928B4A418A5
-:80BB80007C28C222C56895EF42F4CE59E02353548514D4CC022E221F14E1A2C234856C84A7712186F484142FA8F888842BBE49E84BD184F8A121CF72B6A14421C2129F1445F8121227828BC2821F11AAA88F58A12215243182C89E488B841CE854D299C2144B41CF8411B658B812E487E184B4B2898106EF2D0E211F213213157423D38611
-:80BC000044F8142EC74145D222A1111D1887F51F217141D21971255A1115D415BC29D464014DA165F81935D74596F8562197184B312D221E288B183E413135F558431D26CCF8D2121F369222BFC4522AB043C81464FE482B128D1E2F68BE825988361448F8E81300230218A016200462124601424002288428C024009028002440022C0429
-:80BC80002C042603C382542C80889484482A08441224802288221128A824EE4424211E11A5DA22745266C42F44F4414112A5B256E515F511164B894F2597544F285977FD15CB444BDD5D8C5B994FF554464F54019D896F1C7841F5D7C7F5FCC2CE2BC5BF3BFB53527FE1F18F8C2F21F542482FE6566C7FD8F18B119FFAFA979A37923F4D93
-:80BD0000DD44D184F3A6A48F8CFD88D8AF69F98ACAAF29F9BCBCBA7912FC488A242B121FB1F51F1E3D4777D647C44FC554C51F27F44A42AF447419F97971BF9DFC11715E168FA8F98F27BF58B948B4D8FF929C5BB97F7DFD87C15F5CFD11394F91F9D6D91FF4F49787FFF5F4929EAFBBFABBAB3F377544FEAF8EAFA1F4726A6FE6F74EC66D
-:80BD80007FFCF12F3BFFF6F29E9F3D1B3F1EEB44F154784F6EFEE2FA8FA8BCC2FECACA2BA8EFCBEB8FE9C171344F7216F63773957A15B31BF21C7C8F45D51BD1EEF16A6EAFC555111F91F3D5D35F1DDC17D515F99F1F7FDAFB654DEE497FD2DB11F9C4DF75F56C891F17F54547FF99F85E1C4FEDDDD6D1E4F8168C1FBFF713335F61B78377
-:80BE0000FA1F3E35F73E26B73137B8BF58F92D2E3FFDFDABAB3F11B314F14C18EF6EFA4A98AF8AF9FA922FABB9BAF9263CCF42F52C5CFEAB246F63F33F33FFE1F15517BFA3F33C6CE781FF95F73B3BAFA3B31AF14849BF81F399997F1BFC5515FF88F9BF337FCAFB61698F9EFEE1FD9FBAFBEDDF7F78FC79E99F97F6DD4B7F19FC7F5D6F93
-:80BE8000E9F8564D6FEDFFB7AC3FBFFF3331DF63F6AFAE3F37F23725EF63F3D9C32FADF6FBBFEFFEFA7B7FBFBAFB43715AF57C58CF6BFBE2BAAFABFBF2722FAFBFA2F2343C4FC7F5647C2FC70241100434844722124116486281249234402448048534918524E844120219119812811810041C010018C012483440628114008C049A5468A7
-:80BF00008A14285148309E3084C013444100841484100184541189711108414601141181114484545984028F41B224584120411101282332112342583220244124DA225184811221902845F175BEC0421F4152281F4132481F41324A1D24AB141F41B24A9921AF1419F54A9243F24A9143F2429147822D914F82C4954FA2D418F8244A1630
-:80BF8000F1244A96E1A264592D4A9E242D4A1F49D222F49124A5F39124A7241F49324A1F48B24AD141B24A9961AF243915AF643924AB9443BA427934989A4F8284F9244AA7CFE0A2F5114485D2C1B628D141941A1D64AF22F111448D9419D61A9365AD924B42AF3411C4B14F81D412D286F442B14FA2D118D924EC15F2248A16E1A26451A4
-:80C0000025EB59D2A2F1112C67221E4CAF327891744AF21164871419921A1F49362E1B48AF24B311F24882222B9447882B34478129BA36B442D9A4F1547E00000080010000800210040000000088000000000048240000200800281100000000F0EEEC2412498241381426682541444951181888C4461765A4111664114C07835485844222
-:80C0800040418444A284C0B240048893114A4241386110089964542444812538422532189038F0A68100335814448463514A3C61A5842C0CBC21840819C11485514823282101265542144684792C311100424602D21621882161221C61814711160312F09248421A8412B818A4428C5814F0F3FD602117461285644127422F417411A214CB
-:80C100004C31441232C9748542F4481125D1C161812DE62064811D22861481948446DD213141A02D8314A6858A7188224162122D111B2453311CE09364748C4DA44181A4842F2592881E2412FF7F042150141068818542542C848D83D0380842113014108521911851858404511222800824004031118112409818400300244885223242D7
-:80C180001A14088170F70F40D41441681210048100402101514400220042484A1804184614244828011200E501432208442C813642123C018D818488908841421008DF614912643110341E2784122151181298895992C082122649F681184CD41C6181D44942011411704C82024424199414188D821391584B124AB1C862881902819014DE
-:80C200002D844D2218499482C4441A4AF828A1002C9111609100100C204952819081128541B48B934493311887544C4801604444872C814044224482411231881E2449E122481A21211132886998A421C488C4A0A181CFCC4142444544DC42324A4311128181011E891840468402004148A0424190111410848201121116548589C8344A5D
-:80C2800001481E482A2C069430158120C1C2444241843053C014874412400442451882058147821820126821008824114F841164183410942211190224A018484F282222014812134434884D22812631842260844841848110C8EF209252840026084048C418114312115928829416A1148124411828822032218126184902834102918883
-:80C30000837418D482012F8802116924B124012C8181013810266221AF43010031411B414845C81114818011438C81014181815322812118382444851422A118582E888D1449121104161922B4844288111802008961888128B04898B24A08F0E19614644331184156A542C4554A794408855183CCC1198D228834914A71218C3115CC18FC
-:80C3800048454214F312288F12995826584836542144D12532588F44F18A7424C608A71821A9D1147184E82299184E38484B168B924A0881BFC3092A012501402824011289210111201178148841880880C424225426C8240022822D12C098482AF891280060812E11C48006804108008618528428F0CEE440028D21C014411E2A81001883
-:80C400001812138111E44248044001220021174318128224181A840300009B243CB5416222684E22204154A434810024810048F06D762002245233420920322126084048414108448C34128418C0215124284D2814161844984412B081022882288815081138830200418A841482224E0843F234C24001544445810180844104224908F0CB
-:80C480001441100400801184022511099124418D121322280194440000528662814D1812C02238602141243218F0A851301415041183012212CB21442193120A002885D18101841A024D218502284441261864928B48414308F018211282818241008B421012F9AC521880A228903A0024BF410482124006134158A1001190283021C01204
-:80C500001642210144001C08845021114181281119020050824634320023420418004821218C1404204AF14E6C248C1209111066114C041C04484031441114482214403181250444128280460280A21819414434411C3121144A92231437812614134111444412849246418426F2F9E70090282901800448808642518488180082282881A3
-:80C58000388422148822AA7114388149011084A2288C34222C82180420280890A48286280100004889D1280814411840021118184901811228AF428111D218011C5118001440085110024004201AB114024311221595114415C241815082184C024484C400F0A59A701408488100A02441221D185C44A1280084444A53842AA112258892D0
-:80C600001828194808432121C2818C1478112891415E8C42160842460A424480BB44A1248463E88108C0282342E4A4091443C9161A01441F8482F142385F23614115A1119711653111D5F118184781161889E21281B124E2D222B1826129A17CD1DC628819119421A28D1197124B9517A24E1446A2526C7859B9115244DFA1F844836E821C
-:80C680004D364D22A3722868C42E2836C1244E26145B23157521D9177413F31311872256B43464441B3483D49892841B225CC16427446AD139A5138781A8449D8A412E2845FD29394DF44781128F44F8584C3F42E11BE151FB25229E349FEAE441F113414F127449F143418AD8AA71126818BB591E58A332828E8C6D26AB43614A6622EF21
-:80C700006749C214A18942FE241C45E811D18946C42187923E6A1362C88F45092F8B51153DA543C2294F127118F2252914311D171B2245743139892B1269B724F298A1881116ECA4C421AF1CA6AA1D2C2D222AF326722A94194C61C2ED249A84F45412B08492188C7814F8A6BC800228418C1282342200121400824422241A84020044243D
-:80C780008124442C08002A280480018880490800004004A0412800488014E8E2055F51F371349F33F225449D2BAFE1B318734DF744645F46F618281F16D7817184F6CFDC4D226F17F66D555F58FA4D3D9D21CD249F9AF9152D7F7A5AB63731AFB2FA3BAFAFD6FE8B87B9E2C8EADEFAB4241B285F5C5BF17F48F814248EA47FC5F8652FBFAA
-:80C8000093F58684EFA9D913F122144D82ED948F42D246F52EEC4F271FDA4EF4E4E44AF466267F1349F115355F577719F31171FFB1F31F2FB7815F74F574745F52F33C6C1B769D1955F36F7C1F32D1BB913F4F49FA453438F7519F9AF9333B3F3AFAAFA21F31F223A31FB3FA67FFFFF9791AFD988CDAFE99A98AF1E5FDDFF3F22F77FFF529
-:80C88000F427353F95F2412BBF93F7C486AF68DA3BF12B39DD1AFF34FB3A742F42F52EEE6FE75FEAEFE2F4FEFC8F83F12476EF334EF135155F517719FB151FD772F7521F37F755372F46F665641F53F369618F91739DF7DFDC55F35E494F26B5C6FB6C3C8F81F22E2C9F9BFB243C4F6ADAFFE871F12F3F5F7BFB6BE97F78F81E394F4AEFD4
-:80C9000044F1B53D1B884F49FD8886FF4B7ADDFDD9CFFF67FA6E66AF87F5A7A5BF75F56B23AD32BF39F98AD46E366B76EFE5F556D2EFE27246F4B6F41AF32C3E47C8145F53F13555DFF372557F3F773FF7794ADFF4F776745F56F7397D8F16F619195779FFCFFD1517FFF7F74673FFDDFB6C3D1F93733DFDB9BB4FD2F3A3A3FFD2FA31361A
-:80C980007F58F3B5BF3FB6FF9393A7C18FCBFF5C7C1F99ABBADF5BFF9DA6FF7DF3FF27FF7FFF1BA3FD67BFA7F7F7B7BF2DFF7B23BFB1D327F1EFDB2FEEBFE2FD7E7E6F67FF2E2EE7C6EFCFFB787887A23F8B092D115014C011800143A241228C044004E08144240180022811008912140881430226014B12F026128CF42411602240C14848
-:80CA0000141608C024126450481228F0FC22F082111504155C16842661816140018D11C011134104811018D11811441184921414181449218924881101150860346014112E12112D12518724E02441D82822120840F177E6C0421F41522E1F4132481FC1324A1D24AF24F1112CAF249921AF1419B54A39A4AF5439342F347924D812F92438
-:80CA8000481CF9244A5CF8244A16F1244A96E5A2E459C24ADE242DCA1F49D222F491248D121F4932481F49B24AF18124AB141D24AB9419B24A19F54A9443B34AB924B4427BB498924F8284F9244AAA0D2E4A1F41F62C121B61621FC1322E44AD131FC1F24A861E24AF36B915F24A92AE48AF743BB53C5A852DB56F82D452F1A15A8D944D2C
-:80CB0000C28F11E2226D55A496C5CB56D5A2FD912C2D4A4CD638F9916483F48124AB149E2C2F14D1C1F24A1419B24A1BB14A3334A14B42297334B842F1A248AB144FA2F586E40000000000000028000000000000004100400140080000000000001800000000F0D4A88012151E04439118153812B94198489129E1214811D1815221472199
-:80CB8000821368418110258161231042A26123A43C25C221184185362129E14102318D6111318651282842101C8202418978D70764AA6121281914012A1108001250584483413432115B34382844999622146470419821CB43D048418583699A8733198181424101211212A430181684214304821651241FEA032872A4409111163821A9A9
-:80CC0000711A5184811D1AB01D126291223B2127612CE5113A344351291F488261212221B021C522818F7C012B2589C21C166C33382E1140922417212E111082A34118EC032C0243E1A1E86F0A45524169C12442446081008004128851508510C1A500844A021441121D4A1C52A4524985A21213C891195232004434118714001788854205
-:80CC8000480410048210F47DFA0050241048281631488A240442304810025081898204002214228D2118444882402422D81461481C4884815218C0111220410110440446044644F8CAA9D02221012823D141514823A21241B082816128188D152A64721688215514471185154C624253855114831634244B1812538C62888469815141165C
-:80CD0000083082228638488B144C423C481220C28818416FF64D0218242823418812128804121882124D19281CC218122E484444148504232281624122004319942428178883F886114413815118B0832141C81800C10020C2884A01676920111204814D11C3C4216A918446822804A3042314145281181CC411C42042F524411781118775
-:80CD8000444C644A80B18124C814418041C42800208288345943024D484901460441C1DF63031248100480021AC21245186812604421802188019826C311608814635184422213C1C4100589A12125181884558481562821948842E2A0284241802B4814B4970F4C641451234218C8424501141430241C6881244113246144458854848993
-:80CE000001825628028015012C1138124C54181921112868112225821208122A8188C41842212428124AF29AAD4022011011126C824883840181121145280114288A4108122840041244C04418202104820038009244850112218021912484124144001F920B4AC111453122155882663624724E18A7118184884241430192444D18D85755
-:80CE800082204268454303421842187016231574980260C2484D198445B818129818488AA581422E1C4229C1844C98144CF2C4DE502400440081150811001413D1784118B21144A14388250815085018218741414A9214C684012061121781892181092E921A5412482C2801808B544880230248FD9700302124840000D084029018001778
-:80CF00008140018608156A889C422112C81147821C4868418418402101000085011621321891160441492801421212827F3C4C03250142241818400282888682921822281062145825B88201822A041912088D440044136412408438244260452662CA81423468A02128800818490848F793002285160400448B21800100400118C3C42CE0
-:80CF8000518260488111111544041214C014409434814912C834818041090000A0180022861AC884B03446824682E481028914083028809E38888248108C2108006250820080141882A48444290420018442184C24241621C42440043044448004416F4A0B82C0224008C0182088212108814088A2A419212C2504224384220146243544D1
-:80D000003041524244408884E441848424C1416889A44180882881CC144BC1A0814AF842DE000068404408200200800214250670214841A142184068488042048440017014881102508140019411455148100400C04400EF8A0D421CD2814402281229321812A829021288A220042A0480588288A0C1625E2100184348489411241C226884
-:80D080004149012180C218238108AE42722C2128C242200824EF670E260230141284221220018412A0128C81482861C81AC2A112181410618128121CC8141280981416014884D0480118122212381A822108202163428144F0F4C240084884800148228E48844C11A86860181840091018021826A88421100A40B9120884C041D1100841B9
-:80D10000005048808292448002001042F429C580B48392284FE5424A48A821281226EC82D188C358AAF15128879167841B954F46E888F928888F11654A134221F68411CF11E544D51DD844D144B19245A3543C81B11404E044152924FD78188373517111F934146BD14188FAE947A1418DC81AF84484EF8944032294AB12188F411118D29D
-:80D18000A8A15A8922AC8888A888986C712AB18934181C45F21828148F82E611A44111A962688F11B488143944575322C7D12E1C46783848F816441E1E221C94718DC84C24A4249634A248B08422CC1424EF7E0A2F264273218614AA243A915C328DA89AB9126A21928781A6912183D284C4395F1636831B882BC48FA83A451D28BFC2A2C5
-:80D200002247825E5860814FC4F89154701594219F28783CF44454C3A1142E41DD39197242E922B14491A8A684CB144149F2429C674143A8484F490E0000304230423042304230422024C8261220011240022444150224C082C01340830228000029082D811082140221100200F055C2144A5611DD26EF63B772F61616AFA3F52A6A2B76DA
-:80D280002F27FBD6DA2F24F56A4CAB852F8DAD5C8F18E124F4CBC1DF4CF8E5CCCAACA22FA7FCE3637F66F613222EA13F11F27A623F1CFD414467416FF4F48EC55F66F4162F3B235F72F6C2A44F44F64C4E7F54F44C47CF7AE21CE634F6CAC21734CF8CEE247636F686866F4CF4A4A36F4FF88C8C4F4DFC8282CF724DA1461FB2F62F2F6F26
-:80D3000063B772F6565EAF83A5638F87F77ABA6FC189F17858A3F4A2388AE19CE5A1F1EFE5DF47FFE1EBAF8DF9E1E12F8FFF69695FEEFE3A2B1F13FF7665EF27F6DFD3AF51F45254EFE4FCCFCF7F56F4557DD7B1FD4D8F8DFF4C6CCF84F45D1F6F75F5E566CFFDF54B1ABF6DFF4143CFA9FE42766F43F1A4A44F4DED3EFFFECEEFCCFCD495
-:80D38000C49E12D78D141F16F421611F12F236348FA3F35C542B127AF3783A2AFE1AAC8B98DEB28F29F4989897188F29FB6767BF9DFDCDCC5F4DFDCBC98F1FFF69D91F16FC2DAE3E21FFC2F2717B9F96F6D1DB6FDDFD5CD64F85FDC5DF7F56F4157557D1DFF9F9E68CCFC6F554567F54F54C75EF57FC584F3F1FFE59683F95F59D9B2B1A75
-:80D400004F42F194944F6DBD66F6FCBCEFC4F9D4D4CED65F554AF16143BF32F22F2FEFC7F3787ACFC1F13A1A2B378F2791D8AFE3BB6AEF2DFB98428F8BF9C9C19FBDFF3F3D5F5FFFFDFD5F5FFFDB998F1FFFE9F99FBEFE27AE8F93F2BF7D5FE7F76D6BFFDDFD9CDCCF6DF5DCDE6FDDFD7544CF31F7372EFFDDF9F4DCCFC6F45C4CDFF4F459
-:80D480005A79BF86FC79749F2EFF5F587F94F5FD994F62F126162BBBDED26B76CFCFFFCED8DAFDC4D6BF4E0C2130221042088460814008925081301181102808118304811018258408881004418449C94820116481608120410528124C224904460497F360182885010022282A210112890820C122578118484E91848D11A2460112592423
-:80D5000001C6D1846141841584118101881A04151C840211404831244C0118824280091FB9042CF4112485F2112483F41124E3D441B24AD141B24A9921AB9451AB9443F24A9343F3429547832D914F83C4914FA2C4854FA264115FA264592E4A9E25ACE449C24A1F49E232F5912487321F4932681F49324A1F48B24AD141B24A9921AF142D
-:80D5800019B54A3924AB9443B242792498924F8284F9244A1FBA08A41F41762CD241B46C5141CB141D248B141D248F4659418BB4518BB443F34A93B22F547215D842F836488DA14B125CF925C816D581EC49C2189E259CE45942E8C1C2199E6485E1497648F19124A5F281248D121D248D97442E935F88D228F124488F2431242C51848900
-:80D60000FB264829F9245A3FDF038480040000000080020000000000800800001004848024020000004480020000005012F062132041126441430628F02842181528918810614217221D14E0913415E042116844111F2224E144C1318502104486641A188C0230142118B18C51181410D42821418838AA844B2422489F2D4F0223691285DE
-:80D680009111814582C2142220820184252841982860842028289A2844148512BC148869412996111A5224281E8549C14422459128922061284062482E8216342441B8148F1104BF7603212725284531512012626422C5A1128C092889C221351C68955D4220B918B8A4641A1127117012BC1C3811163624D39132E634124D891604416584
-:80D70000A1122D194D18188290242D8C124C61284C4A32651E61125F9E071850141638248441288B1212000085138421810289014C0240E8440287451302290848801421A221C0442A01818250813400122DA2844C4298B81088F4B82E007022818201002228811002214821220028400100281800280020280214441C0100C182852111A4
-:80D78000185418820064824C1224046FEE0500C01B4D2224C8812430B2890880042618B991D21882D418018148811D188D2139C211182546B42CC44451137124823884281D3E8008200486011236882188E5810C005F750D00111E2916028A04282898820042428932211C7B2821140100903826C1211816522410B4844444D12522B885EF
-:80D8000021D2480144821112100100C084214400F02EFE009022242644028424D0824218022110420820321814844284148C11428102444E2890211840043021218308814281861489C9381220ED841B84047F230B1140912250922608124251188342CA42A0481641C11443120218428E241246880888114800104814A241860481860477
-:80D880008214124A21031248478440028483F1D11D800144C0410012281094282229012229C2248903892164814A81C88847924004105142181144CB52C02822124844421084022092884718A48A61A4244A1864215FD1094602844563432604490283026018402831141094288240012224244C12881105384142009011842810822111D5
-:80D90000A814860800460910420818F05217C051508167221F44621283C23412661891288485D228C4129A42F41428288323442984DA84F2221A269C88125348826541131434246416E881E649C242C18081E811628912807844483896278425285448A43F5B0D24484914C112C4002200123C2801224634311447814C188201424085449E
-:80D9800004004C020012902100004B94108804481884984883042088015F1C0910011280846111C02860890000C141221A0200102106112361114818004448100148492264484348B181241A4441349400701408862488F4669200441A926229148202A01818282482424A088B18898108133288E2824D118882148154240090258988984C
-:80DA0000828E25001901E884E014088C8164881628820C702402C7FB24B012841411311120822328248821883284118A03812E11812491845081008812C84688480159420884166181388C2188110981800883222186281A14F45C360020011228121009C322342400110014008A34218031888889045200D0182484028817824C02004226
-:80DA80004508C018444906182082E842012B12183F3102822180024A0200811008484004800200C024002A24181281240446044133040043442404444AA2A413E52481A414004118001281DF120E0024C02820420422420000100510454101001348114101150414902994C045494241114134241941410114112048142282888104860B7C
-:80DB000000400200180080014082042602188490428819081048628460114018044B28103282804211A1240000008001140020F4CA78001800280020030052001400112812004242802824011810322400001148224F12042A011E848098441149024A820180C18144FFC40825084880440213120989634280A21480011814228A76E2514B
-:80DB800012188B248BA420240889681488428C044888C048C0681C8461824884281280054280419442F0462924212388C122AB444218441CE18AA212469834A0422318419419D3C2118F12F28122E346A8CE6E4917843734121741118C04114356848C78A172246C5415A8D7C41BC44F98B869F251C58554C14B83C6381C2B218F530A1AED
-:80DC0000E858CC481F5802244D11122B121E221CB312E21311381889B61821240847145C618125E119D381028B821F182CD45913D81824D19951141E12214E8889D451F2E1A41546E414BA21A1451D285F1156481B611C98181D4165C114988C3224584B1A383E114F44F15489001A64221C34212A2492211F838268C5AA6A214AA8141DDD
-:80DC8000C445A8BA3A02321BCC4E41281F184898218E8218CAAC54CEC842DF4AF444252C446118ADA11B484D684F5252546AF9B4318B168A64884B147AA54C122AA514C21A7884B44412F2F653200460128224200288800888908211295A818815A8248410210442118211820000008581D41881742801268164124814120020080000FFEB
-:80DD0000730A4E4225B2327321F16B293E321AF115359F81F298388F8CF518988E92CAF492722F24BC92F991333F99D2CCF959D98F9EEC9CF8D6CD1F1C7C48F848498D489FBCF98E4C4F51D9A9F9C242EFD27E6DF465667F4AFAA92AFFD8FCED4DDF43F7545C5FDCF6C515DFCEABD81F1FBDF1F545466F44F6F474CF4DFDEC866F4EEB1B55
-:80DD8000A7BABAFAF4F4AF8CFC9B29E024F452522F23F23353BF97E523A6215F51F319198F89F368F48F83EB2DAF4C2BD54F54FC95951F3BF313B9CFD3E927BFE2EE8CFC87DDCEC14E3146F1888BAF8DF89C4D4F59F1589B2F24BC62FE28485F64F6E6E44F6AFA8787FFDEFC7C745FD3F3E56DDFDCA3EEDF9DFFD1F1CFDDEF24D457F6F46F
-:80DE0000F44F4DED2FF8C6F45F4FF394942B8B4F4FFDDAD83F854612E221B512B312F17A787E722B135F53F319398F81FB587C8F8BE321ABC42B555F1CF41892BF11BB18F3B41C1F1BB3E2FCE9E1DF4EFFC1C18DC98F165628BFBCF147C41E118F9DE12CF46EEC57C65F66F6A7E5AEA27F7AFAAFE55FC6F62444DF4F73E5F5EDAC8FCCFE46
-:80DE8000E9E89F9DFB5D5EE7C48F8FFFCCD4CF66F16634BAA7BB2BAAEEE4CFC4F56CD524211E522F21F35313BF97EF27B732F335359F11F318B88F85F7F878DE524AFC52526F1CF49913BF13BB38F3B41D9F9BF3E3E19F36FEEDE59F8CF418696E618FBCF45B9B7F55ED11F198188FA4FC6AE81FC6F461667F5AFEA5A7EFFAFAEFC55F9761
-:80DF0000F77575DF1FF7FD7D5F1FF7D9BDCEE1DF9DFD4543FFD6F4F8F8CFCDFD781A6F46F774B44F4BABBB4F67FF4C184FA20621B02201000060812001480010012004004A12210483140400432244012A081448452111244801204104444828008244F0586D40022413312248181A82A121838482812414412481021C33214A081C688213
-:80DF800014150819614418422608405414822216044C66121AB428A8488F1409144B488931144A228A21A834E07B0A4D421F417228F3112487141F41726AD141B24AD141B24A9921AB9451AB9453F24A9153F24AB55782AF14F924488DB15FA2E414F8244A56F5254A96F1214A96C54A9E24ACF491242CF4912485F2912C87141FC9F66A9E
-:80E00000111FC8F66A911D2CAF169961AF14B915F44A9143B24A3924AB9447822D944F8284F9244A8E2950A41F41F628431664341FC1726E01AF14F18124AF44F98124ABB45B298B9453BB4879A5F848B553FA4A95618DB15F22F54894A6FA588557A287193FA27C98C4CB8F59D2A2FC912C2E4A1F4994421FC952121FC8F622111D6C2F68
-:80E0800016D1C1F22A95CCD63AFB1568AF145884AF247BA4B84A29D242F92648A9F9A452EE48008248000000000000000000100200880000820040080000000040040000000040019F3D0B8022538113222176285414A2481642827441224136248228841489A224C30415088031182A911810C18445210228152816842488C211488C812B
-:80E1000041983A4849D22811088982B44809126308218512654112844D1886C84880412832498156354259A6140090482604438414250C322626E122417225D22841049902590123880953E8481164C1153886906416018BB920A12C1A52922267111E648C53944B1A4548222215014D4827C24D9123D4E1641122124846D884821824D55D
-:80E180008191D18CA1214D2249715419D243922A317028044C816211260486E4487132985826D56A51284436A1411ED94042045018004440A8841E4824704822430142222848812A5448400142402402108188220218C4621142134822A89416C8118444418182A04281F0DB1C801181812244C411122212188200001C1204828D21601440
-:80E200005144490451402804422A68412901141122901210E48164124810110221122028242824F8554C60649025F0122490462F826431492832239082E9C491CCE811DA41324943D81863823048912684B44832161D244188182153564136D424D1840160149084236898709854414E8444478878A36182D04842F4B5A980044D31287898
-:80E2800044128CC51388121948C282411E818CA2A14581DC416891684147844849324468614D41448A24DA223164111D24B01A42823141A01411150817A9114A48C4184829B84882C84486F4341D604125012444244D4322284381922200460847184581123928229411501C1041C81828001841131184D14111040044C3B882220C4144D5
-:80E30000450243889318002608DD44144C11C821001044212604222A31412C6122C422CCB4180221288D12414E241782210065D821C6482244C0224061248D26224302254648810826428429235828842DC410F8E5C500B3042183040010140143820100D12B82E0241B48051283981442C2811C11014A5118286984824108840060482899
-:80E38000904822228C440400122622F4B6D9304241100C2625E1C261413123311181214112522001843816880C004D22168C011282412A840D15243222008148420085420410124228A628404CF47B7A2448141C123A4847121245E1644123C11116287414C2324D48CD23BE4489A214381C718842A42417A243B6C4417813E825C2481E10
-:80E40000241B422CC32425E421E2A2942484478246924489887288624424222F2831148638488CBA4461828D44CF190C4D1244400410E48122C244142824130180018112894AD848820445684124811844208844840C26110184230200211140084183240222218244243FEA0A40022642A421800430248084248282A148A341180A4C43E8
-:80E48000156814C01125412A7484384A85810250681A324160C41B42422B4829D68122C448CB48B024AC2C24CD62424B28001F150E48324842460246C424464204422C0100144B215418418C14012241344885147588011258A041185084381E8C882F81982222814C381A4112CC08124A220150842AF89B3F00442E114CC41144140048B7
-:80E500002A240641124843A441A042124B2141230284436241481B6112130421001B424424A4284C110C134C14788401200248813048848602BFBB03C4350237A110614180C188180018478441004644440122483422121441C04240853213289021111018220490814880026081A081A0A10084DF8D0A82000012424816040018C60428D2
-:80E580001A229232301200804401004200301428001229228102111D4645A182192824044149594882C4E0820843F86B4100435424604600224241484008524D99481413B48891411C082C92A146441146322426912422001E4814409548100880128891888911A4A522A220048028F2D612241622011200D042011230120084241548086B
-:80E60000194204844609282D1846581890888858204181018C9121828A92248A42020080440818222A016081188F360EC0281685C231441C012008200440C12454100416855142428042828441C4222046482422224442242658410028800118421004C14304F0119BB044110115041D2860818082C18C8043840480C2412A8414031821F6
-:80E680008D8480112A32484503355481441E490012218008141634174CE283884448A841A0833022849C4E82748295124E676D7626914456842184C5181AB144E184E442394283FC4C61C5F1192119F434144F54F429413B42267441D262A4531F3841B31A44C111557111D435F1145119E4E1D284F499A5AE434E861D4D8F9EF186488547
-:80E70000F8848449C51C7EC8C48F85A3222AE468A2A8FE99F054144F245115637261D144F151152D284E468564476A9448301C9F14D45CF6317323E3A6DE46F518941D2A17224A4271119A46871146B428BE248AE1627338A4712AE7427221CE332B18A847A21B2429A2A81D821C7954A4112E2CCB2783E82676247248D8489A9887838F6C
-:80E780009E06241F83E261B21921F11128B02425B1848B328246E241CC3449B23151441D141F4121F44421142D282CF84C26CD311E1D5784FD2927C48FCCF44426AB453922447118982A8787CB82A76F4AD444F8A141A3A2219745588F84B6D8A8C849A3994CE4497D844818F4CC4C001890183028302A100A29289182D042088812890A03
-:80E8000089088821812180011100810022008400184002000000002400007F4947F276764F527219FF25651FF7F4353DFFF5F56E26EFC4F4EE6EAF28FA12BAAF85FDD6D26F2D7F4FED61738FB9D4F94D418B43CF5FFDBD9CDFD5F48CA4CF36F23E3BCFE4FC5A4AEFF6F68BAFFFAAFE2E26EF76F246552E254FC2F2292BAF62F64B4BEFE896
-:80E88000FA9ABABFF9F8F6A26F48FA898BAFAAFBAB88CF88F88888CF86F26838474C4F2CD8AAF18AD6CF8FFFACA48B8A9DD3242F67F77B3DBFF2F23F7D3FF4F6151DBF94F56C644F44F536B6EF4EE286FA78F86F64F4D6F63BDD8FB9F98F494F1DFDCDD18F1EF96F65DFDBFB7775CF5AFCEEF11F93F35DCADFA4F46B6EBFFAFACEE9EF4779
-:80E90000F77A72FFC745F56574DFB1F31F3C8FB5F79EBE6F2DF9F7A63F2F7A87F6C6E7BF3CBFC3FBDC948FC8FE5C648FC5F1E4B44F2CF82A6AAF4EFCFEF8CFCAFAAE8C4F464FF252525F52F631239F92F271429F17F57B756E6C5E52EAF6EAE4BE788FA5B714B5D2FDEDEF2F47F76DCB6F8FF5EDDBAF83F56F7DDF9AFBEDFD8F82F629EBE6
-:80E98000BFB3F14C4FBFB5F47F6DEEAD8FBAFE2A2AEFC6F2445D6E755F42F6292BAFC2F2654FCFEAFACAE8BFDAF7A7F17F4AEE58D839F9D3E1CBD88F85F16C388B72CF4AB2E4DE46F1B6F46BF54BAA8BB237AB242F65F53B75BFF3F377353F75F75C75BF37F7626C4F65F578F8AF6FF7B2788FA5F7C4C46F46F56C6EBFD3F32DCB3F9CF51C
-:80EA00006D5FBF92F5ECED9FA2F3E5F7BFB2F63AEB3FB3F3CE4F7FF5F47B2FBFE6FACEEACFC3F63A785FC5F571745F43F71D3BFFD3F25C7EEDAEEBCCFFDAFFE3F17F4EFEEAED9FBEFFDBD9CFC8FD781CCFC6F368DCCFCEF8FCC8EFC2F6EEC4CF8DFFA4AACFCA78980B630249012B12B02401A04100A0414440046412205148C024114411A6
-:80EA800044414288426322B4240122302484988C4481041648E181041A44A44185A4414C02009FF60D8E124001144C64141240242401482041B21184722148D48104555848228118D0A1847224082E1810024D111E28A1302286742422280288824C688889022C4218084C68986F4C032CF41124AD121FC1B26AF1112CA3D6C1B24AD1C15C
-:80EB0000B24AF91128AB9451AB9443F24A9543F34A914782ADB14F82E414F9244A8F14F8244A56F1244A96F1214A96C55A8F49C24A1F49E222F49124C5F2912483F4916CE3F49124AF24D141B24A9961AB9451AF443924AF4439A42F2479A498924F8284F9244A1F9407481FC186F111446AF111242356412B161F48F242141749AB3457F3
-:80EB8000882933812F5431B5A931A5A9B386E414F1A7188B144B825E81678286F1235A86C45B8F59C2421FC9E2B2E449D638B49142F1916CA7241B28A7241D248D9719F64AB419B24A29B24A39242F24712488518629FA245ABF3B0F8C0448000000000000280000002100800800000000800400000040040000000000F0E4C3C032323426
-:80EC00001638144450421621711288324844344B122671114A4364482266C8484344741CE142810349024D622A8416042D114C11827226A24222421AD481611C410024806A22C33444C88E28AF5D421324382645924121428C45942A48A4501212C698124C14382819A794163424218C462244B824351243021074420210C1442F417848B2
-:80EC800061414005230A1E81C6342E4F82B41464C44588322894F0328A24368292212D4E47154148A9711441DA8415386A4419213E228D121582E272A5614B61365442478EDC913289B34462421942847668043012482D46A88D656828174443712269464CD8247C2448C4142678287664EA8214F818A24F4B0F4112611224004C44A22198
-:80ED0000804212417214C811591458848882818C24049044C01212414A12026D424071110416542216042024C9811301F04822484E8400414A088DF67026010021D03C4108112008122448288C1438911CF2A148200820C41216452AC448100488103411401444B424088100400189820460448042F875732011328A2159B14A0122112FB9
-:80ED8000810A2981918A168119AC9243122804834834C1814485412861214961422933564342215224161C4AB8BA24F14E921642482A11C4D616E491C8688B1C2388534844EF190A27225028002981D182023F82082928918218295D485E8885D481C841A8869884148441126D192C018C01241AA428112614751E4248A6811E84295C225C
-:80EE00000010B144886291801184912885F43ED4C01590822453C14855081112200189410128222212281D4800C2801409841A944626F42214414100124014F8284428169C188181294164218D14C24E288F24282C42047F2B4FD34161259032812244612845122433225448006CA212421022849BC80044C842219C014612C414810040B6
-:80EE800002002008B042A8523084C4824051C256A8813F6C042014014606C011608145011F8204B024218804441169C2288B1420480220114843321826288204E322544881818C22CA452898414322424A921C84274482472212978A002504005458401803001668811C24D1184188410812C026228183124224210444144218200110B48E
-:80EF0000120287211688140A1088049026868101F0FF2F901161112B12478447124E144941121121934985C1186E1518873212164409582AE4A20881459842522781894542CC214B6100A9215448C4233228ACB2888596982D4449342883546843392629B81848C8828F7402611221400224118362C1211032144280B81494284830248949
-:80EF800062884624022322180424C0524420014C02106281204901218218C08610486844414E34709707253221211082E1810427241844134818144824048484480080140C428024354530819084412016A8342344114491824A29042A811494242604104204BFC2041D4442C058280080A284400846014260842A210448240020912420F7
-:80F00000028280A22122281084120C584A810824C042408481082AA8424D2826C2889FAD470244A4C06148902190261E48299445211A9422812094420018460248851208A4802221C4424E14126021482B480090128B43814C282808AA44624D83A828C28286F4252314848044041C02611A820100184110342223021A04902AA0214902E6
-:80F080000041815C8212044885120840582484260428844C6284228400445850842AF13D560024C421842601004226988148884A418404841820E584018964C4C018428C6484802111222C0112A81092284CF428C4A180138814289858C82A140232F016A4100170489152B048110482488125C822118131C41341941100841824182021C1
-:80F100008862C98018044492205514C12189025244812C7388E6491458243820088642E82A442101482088417411081111804249088004000000006082200140842182424454841628D92404004C044904102402514100F0AF3B20284814048012D812444202241664685048222582212291484A11184214122818AA414D288905290116A2
-:80F18000029604864428E281642AAC12440826B8226585200546541AF013A6C01A8C8204124644A4211828184C12C1281C220200872270243822282D11D018882504412214414A42084B480029E2240110124404A8168409004026123224EFD60B35F3A248A5DE8AB433EA4101957862B213FE1818BD888B426994516D641C9464386B4436
-:80F200002F14D18421F432422374187628D2482196486B544B818F41E151F634724B82444328B128C814274D2F34B624E2589382B2414F448CE64322A5488E84C2F6948A4D258E829C4EB3546118411F24A1542AE681F132141E7143F443428257348D182F311A5882A78687B318481AD428A224812116B852022485A4482AF2E418B0D267
-:80F28000B224E621D166E121B713887D14F842466F81E88A62A42F42C51A4CF8C2984B4245BE36D61892C647462E8343F23354004D225044811714CF46D43402AAC1244E2125F81185C7C422C74424297438A821621E5885C8494F84D654C1488F81E48C6A838FD613C48246C4541AC18C8B4247CCCFA656AC857418F86842CF259568875A
-:80F300008883F8DE18C9F48ABC8B374AF134C42C82F68818AD3CCFCB020000821800C082C082C08284240040020020022302228220182298128260882008000000001200280000003B9BF045424B26C5DE99F448484F45F64143257212B1A2F899199FBAFAC9415F75F5C8CC6E6697F4E7C61FB4F444441F17F47C7C6E588FA4F4216B6F7D
-:80F380004252536EE8FEF88EC2AF87EFADFDD6DA6F48F8FE94DABEA4FA9898CDCAEF4DF88F97AF8CFC2A3CAFA4F71A3E2F27B39AF1DA4A6FECFC9E9CCFE5F3D6FCCFAEBDC2D865D866B8E4B898F9AC8A2F994CD126B42652EEFD55BF9EF17474DFD5D56CF142711F1EFFF9F59F9ABAE9BE41B441E446F64949C7C61796C7C51F17F47E7C04
-:80F400008F86F54A5A1FB2B6EAFE31294EC8DAF5E8EAAF8CFDC8CF6FECF48684C7CB9EA44FCFF7989AEFA8F8DAE6BF3CF7CAC88F22F34E1A6FEDF97EB6AB1DAFADF64ECEEF64FC5A3AAF8DFFECFE2F4EEB26BE82F8E684BEB44F62FB2A9CF075765F5256F997918F85F655751F14F7494F3F11F2A2A2BFD1F1ABAB3F14F6DF9F2F4CFC66C7
-:80F4800026FFF6F66E2E3F35F74E5C3F17F46E6C8F86F4687A3D4B6D8EBF77E785E58DE52CFC7E7EAF9DFDD448DEE62FEFA3CD4B6A9AB814F1C48E7F7FF8DA88AFC3F75A5AAFE3F3527CABDDAF8DFAC88EAD8CCFE7F1DEDEEFA6BFD2FA34876F43BCE6BE38F1AC9A9FDE4FF176767F5252FBBFD5F17B795F57F75D7DDF75F553333F3EFEA1
-:80F50000BB3BBFBAFACB6BF7E53F6CFC6626BF36F66E2E3F37F75E5E3F17F47C3C8FA2F5686A3D4BEFE6FE5B5F2F8DF578788FAEFE4EDEAFCCF9547CDED22FE7F1F2F4CF43F6988AEFE1F9DAFEBF7FF7DAD88FE3F37E3ACFEFFADAFCABFFAF8DFC4CCEAFE4FC7E3AAFA4FF2EFE2F4FFB74C22B834F4EFAB8B4CFEAFA6772302400841460DF
-:80F58000128420414148214104288420A12480028100188141422B1283B424012A0141842A41081A642282E081448244062C228122C12482006FB30A21442542A412484E12441C8136422825728158284024F342128400182C0450482924C44200442C044924013046D022419414808992828019A41441004243126822DFD6032D431F4132
-:80F60000522A1F41324A1F41B24AD141B24ED141B24A9921AB9451AF147924F84A9143F2429147822D914F82C4914FA2E414FA244A1E214FA2E459E2A2E459D2A4E449C24A1F49D224F5912487221FC932481F49F24A821F48F24E111D64AF149921AB9453B14AB9A4B44A3924AF44FB2448A9F924484CF9244ADF5A089CF41164811F41E0
-:80F68000366C1D28AB141D24EB1619F248941D248BB449E2147925D81839352F547821D848F926488D957D524ADB85E811CA4A9E25ACF598253CE419C2481FC9C25A1B692E421FC932481E242F36E8C8C2111D68AF5499212F44FB152829F924482B1484A9FB2448AD123E4829E882E5A60E828248000000000028000020011002000000E7
-:80F7000000000080040000004004000000005012F0F9ED601114F011288044441598181A22522241866181124464901828228C9228C024250810422221748244321410C4182E84814634168982142294181A042901C8C8C9312440F2D43B90468A51A288E945A11483E17104842D181CC9588D144A521C8382C83442428D544C84942812D0
-:80F7800018ECE3C264414B42CB2416E421B244827A1862886CA6414361838D42C82B281EA82C99C4CC6846CD624B42857434A8C28E188595244D13145B41C284A6D94834414C95114984713C4222499CB14A921D85849826AC05783A84E2883224257828A6422113D48282949E4127438169CC54928391645889B28694A23E441AE881244B
-:80F80000367244484E8C4F29C63C1463F12BA41032112522911200C48D1384E08142A341856481204224012A54484538482081215184163424569414282B4282188487224C166481E5A2482216C8824D484C1854682AD448281328584822CEC70080016144421223024A01810080014A211208C048448400120000411241124004001004A4
-:80F8800000422024810900814508F04CF5002480012B122228C0240014148226D882C4240000008C08C16C014648942438424982012480B4241188B2481124080086C6244944A4182243018634247F2B0E4022215142182838212218001188C01800288100818881C16400002A41044C2101216043008315240842002361410060C1814088
-:80F90000E45D022004002D24422012644470210830282334244A01240048CC012081C14841260448CC0348402404812841100428B04438244A48842902414D82386F880A51202252480058891118A214422141204102490142480081C3D14A9248008932122818444C8911046688048E2C2008828929212101702892383024F0A45A241088
-:80F980000221601224512601118001218912681418242290341C0280048011020041003012400545014431804104885024C412400444DD2E1440121108258C24024200840014411884004901105412282C81C124C14884404202001210384220254402004C122224C844430481D0A44D134522124A448C947717814618226485504284C97F
-:80FA0000C112168881B244A121284061424D28A9A121459868160812442748126301666D846561484334C1B082110C1A3A12644788CCB6484264C244DFD70A2440815228190220021412240013021904412160441144253858292154244002224421120018004883221102208911044820D1420100AF7D010041401201008001140084287F
-:80FA8000101804840000000046A412002841100440142481C1280018100200850410C424412F6E416222C02264800118401842019012008141102C01802212481454244044042741502640CC24122224441212128480081881272241008072370D2400002100100860121002285084100C00800210148494344022120441414144809112B0
-:80FB000081411881908220014D2A41104414F4949A2487828B444E6427442116011800674145B52482A2128440084424AD1225A2113A2149180424441141D08C51A8CF24A444462822C1241024731444B434A2222200812140522227223A71340624000011000010114801508284120000004100801204000010040012220000008400412A
-:80FB800000444100BF660A818C2584044412404841144424820200005022901212988288005014111484A5C448424D5200000010C4242228100200502290121FA30C8424480022000014449028110000280023024C01882841840014442184C052000000104414982800001800222514F4F52A248004218001004004280000000021901461
-:80FC000080084400404104C4A0410000000044800200100800218051EE0021121221000011000048000000004100004004000000000081000000000000200400CF1F0783B14834424200000045544447228C2402400840522225A2111A21292888420411511554C885B84824240420010041B024222226018400242542A2117D78008781D4
-:80FC8000482A0418800200814D24282E28000000401212E44181C8840044411414214951881AC442000000405C4C812A028400004012F2355D24004410021810011414100118400400000000244428002400200118284C010000408204000044460410F413A500201102000000400814100800004400400800120040024140040000000079
-:80FD0000100800004004F0C47440E22191122460120011111181704208004100000041401844E442420424106641B014D16401121800000087848001440042414441BFCA483212214412A0111A8102000085714881114828010028450441C02422C11004414440041228102802001018724808818412414C04008FE8080016922221410092
-:80FD80008414141551881111248481800210044444401204434154446424611A0121214412000081840024100810C42440F4853EF026222721182B11122B11C0122592832F31F111119B98179987848F18F44848421F941481548985F844688F44D444B444F22424224C02284554642AF222222F21E222B112A1812B99C0922592822F317E
-:80FE0000F111118B989E898F84B888F44848424E488054C885E884F465E8F0262265A2321A2101002592823CF1111319EC897818D818A44442141581445888488F44544C4B242A224204405444286F6252222AA1131A2828082592823CF1111219EC897818B888A444420048848588F46AD5000000000000000000000000000000000000FD
-:80FE800048420000008024040000000000001F1F032084A4444A2404004242000000000000000000000000484200202424040000000000002028F8318520240400004A044200000000000000000020040000484A842404004200200400008800882088E88401482004004A0400000000000000000000484200008004480000004242420086
-:80FF0000000082008A08F0141D00000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000000484842484800000000000000C0
-:80FF8000000000420000002004000000000080A8888800006FB40B00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100003A
+:80078000310000DFDBFBBDBDDFDBFBBDBDDFDBFBBDBD000000004F44F444445F55F555551F11F111110000008F8CFCC8C88F8EFEE8E82AA2224F44F444441F11F11111008F8CFCC8C88F8EFEE8E82AA22200008F8EFEE8E88F8EFEE8E88F8EFEE8E8000000004F44F444445F57F775751F13F33131000000CFCCFCCCCCDFDEFEEDED1F1261
+:80080000F221214F44F444441F13F3313100CFCCFCCCCCDFDEFEEDED1F12F221210000DFDEFEEDEDDFDEFEEDEDDFDEFEEDED000000004F44F444444F47F774743AA333000000CFCCFCCCCCDFDFFFFDFD1F13F331314F44F444441F13F3313100CFCCFCCCCCCFCFFFFCFC3AA3330000CFCFFFFCFCCFCFFFFCFCCFCFFFFCFC0000000000009C
+:800880000000000000000000000000008F84F448485F5DFDD5D5000000000000000000000000000000000000000000000000000000000000FFE40F481800000000000000000000000000001400000000000000000000000000005F22020000000000000000000000000000000000000000000000000000000000F04FFE80840100000000D3
+:80090000000000000000000000400100000000000000000000000000F02522000000000000000000000000000000000000000000000000000000000000FFE40F28000014000048400128004840012800000028004800001082040000800414001082040000217F270C00000000000000000000000000000000000000000000000000000068
+:800980000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F481800280000000021000000210014001002400100004001280000808802880080880200003F7107008084010000200100000000000000120000400100000000000014000000000050358084410128004840818102214860118075
+:800A000002211A01148002211A041400B01281041480028004148828108204808802214800CF5506481800280000000021000000210014001002400100004001280000808802000088280000F08CBF000000000000000000000000000000000000000000000000000000000000FFE40F00000000000010020000000000001800000000004C
+:800A8000800200008828000000000000BFDB0C0000220000000000000010020000100280010000400100000000000080280200008FB90D0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000002100000000000000000000000082000000FFF401000022000000002100000000
+:800B000000000000000000000000000000000000000000F0D8B400000000000000000000000000000000000000140000000022000000000000630A000000000000000000000000000000000000000000000000000020020000EF1C04000000000000000000000000000000000000002002000000000000000000EFBC0E000000000000004A
+:800B8000000000210000001800120000000000000082000000000000F0119A000000000000000000000000000000000000000022000000820000000000004F76090000000000182118000000000000008002000000000000002210010000000000224FE60B00000000002480010000000000000022000000000000002002000000000000CA
+:800C0000283FB40100000000001800000000000000000000000000002800000086010000000000F0352B000000000000000010010020012008802101000000000000000000000000002A08F0E78C000000000000000000000000000000000000000000000000000000000000FFE40F00002800000000000000000000000000000000000096
+:800C80000000000000000000003F8D0E000000000000200100002420011002000080012800800100000000008220020000006FFF0E000000000000000000000040020000000000000000000000008220020000001F1C080000220000000012000000211200000000800122008001000000000000000000001F2A0E0000000000000000004D
+:800D0000000000000000000000000000000000000000A02400706A0C00220000200120010000000000000000000000002200000000000000000000F0B88200800200000000000000000000000000000000800200000000000000000000EF2D0D00000000120012000000000000000000000000000000000000000000A02400E0C70D000050
+:800D800000000000000000000012001821000000000000000000008082140200200200F7F20000420000001800800200002800001800001880210218004800000000802402000000009F1E050020010080020000000000000080022800008008280000000000000000000000D02B0C00000000280000000000008001C0222002200118827A
+:800E00008001000000000080440200002800E0CA090020010000800100000000280000000000002220020000000000004200000000F0993300002800001200001800120018800118000000200100001200000000000000000000F0194D2002220022220000002818120000188001000000120000200100000000000000002004006FC30C9E
+:800E80000000002800000018200120020000001818180012220000120080010000000000000000CFA3010000002002222822000028001880018001280000002001000012000000002200200400003F3601000022000000222880011200800118008001001222000012008001220000420000004200002F720C0000000000008082020000CF
+:800F00000000000000002200000000000000000000000000D78D002022023800280000000000000000002002000000000000000000280000000048F0B96D0000800200280000000000002002000000000022000000000000000000000014F0E1CD0080040020022200800200008002218083818801004001008004001800000028000048B8
+:800F8000110021F0164F0080022A222102282A82A22200A011000000808102221222002822000000001A0100000022002024240414F067F62002A022A0228002000012228001208123810180A1118001808102180018001A01280000420000804401C041F0F28C00200200282232002082A1112003221812181A02008001A011120028A020
+:80100000111200000000000000000000F03F1380020082000000000020032220022220022A01000000000000180000000082008004488004690B2222002AA2332AA2222AA22200001AA322A0222AA2333A81A3312A22A2222A022A021200A022800100122A020000A0CC8A0A004A442124044AD42708226A0448AAA2332AA2222AA2222A09
+:80108000022A021AA1323A03A0333E122B311AB32223A2881AA1A3001A51112A42A122A05580041AA1220000A022CAACA800A044114632424AB442F46F88808286A2222AA2332AA2222AA222A022288081A133002AA1312B113AA11228881A21A122A0112E212A022A021A0500123A020000284A0400008014A244F09EA18082A6226AA251
+:80110000221AA322222A22A2222A82021AA1321A012AA2131AB312E123218282A833BA02A011142A12A122A05120041AA133000080A2442200A044801442A2448F2C0900002220022200000000000000000000001800000000200200000000000000003F7F0F00220000002002001812002001800100800120210200200100800100000072
+:801180000000420000706D012AB411021B21421B2123B411B24291212B9419B24219B14229F342B1222F142BD212AB421CEB22C4A12E421E212E529E212E5296C1429AC2421B292CB59142B29122B491B242B181324219B24298212B84112B84222B84222B842AB442A8424AE822E4C80F2AB41184B41122B411B242B111324219B2429900
+:80120000212BB419B24229F142B1F042B1D0129B422DB12CC5B12CEC11CA528E212E5296C1439E212C34912CB591C6421B29421B282B141B282394212B841992A21B482324B2422892822AB44238222B8426F261980082480000000000280000000021008008000014000000000000002228000000002541717B0B22000000002822800184
+:801280000012128002181228001222188022022200000000002200000000000000630118828048018002000000230180010020044880011818000000000000A82100800442C0211148001C026FCC0C200C40018002800218801202800124202101C2A021002219022800420000002821002200428002400214F0E444A01200880000800202
+:801300000000121812200212A0420012208121010000000000808802004800404181048002BF9403000022400200180000008022A124000000008082010000000000200800004002000000DF740A220000802222220818141880050000204601220000004820020080081248000000142100004800E0E4052200800200288218001280017C
+:80138000200222A04200220000288004280000001200820000240000800400C7F4000000209222002041012004001842001400000020010000008200420000001100210000001F240D1800221001224800428004004280029011009848002001808224220222808112010080840C200288622428009FFB0728203411000000282800182626
+:8014000021080000244A828229210200001480018004001002A0428820028200400200CF620742000000002001000013040010010000001A0220020000008248222A0400000000002004426F1802680038400128428083024212228800221031116822A04128202301222848282200208116B12204A02448C800A20022A02480F41938805C
+:8014800001100100000048001061144800000000000000008001800282800200800800008848000097F31041013011110000199481111C8184288281026848402222048021090080A54100109112424242230400000000801402F05743802281240118184021080082002028044021022018111101200280A882802C21030040C142110046
+:8015000022800C24802282045FAD0C80440100100120810218160180012006284200A084000000421200002091428248002100001022120220F25BCA002061140011284200200400001811188008220022A0822800001CA881400125031450229042660148482820044A0222F09686140010611200806618221442820020280400000000A4
+:8015800020044A0888000020012100100210020000000028371A8001280028220022200200000010222C84C511184A82A4213800424820041C140180042904000024000048000017EB20820118121212111400881180918122111A02820000C0811414141400288A019AA4A14814112288221160122115024022542210822204CBED008649
+:801600008102000022000014001200000000482A818204480000002021240421000000108208000014F0E44980011C04820028004800281C04000020B882041822C8002082C8418800A04100001488004081464142022828002114FFE20F141358114021812392618A6214AA4231111561182A22A1241429B84124AC41212A78618124A296
+:80168000B226212284A4114A2C2528B41151214A16A2CC11401191412D2223243842242148E01684F2DDFBA01292281CB181432111611211121D814A24A81500A013A047A08242141A84A224171514424880AACC13830815418244A24C2CE2148424D4120200249042B042021426F29B82A0211C2533511238111C22848806111C89848875
+:80170000E1188904288A88062A22A441171A189A84A2884882A0188AB111AB1166D11231121511522225D2238214C241B0224C82E22622B22202F0A7478002288002008008888028C181221C28C3812214221400001882A0288002190228808281C282288022044260242242004880046D29F031211F13E112A2531F11A1111A011F14B43C
+:8017800081A24C15F1C1C117181B5C2AF2B1B11F18F2E1612E223F1EBEE1BAE1BE42F621211F16A417428AFC61612AAAA4AAA6E21F1EFE8161AAFAA1212E211F14E626F263631F1EAACC2E621F3252333D433D423F34B622E22EFE62422D222F26B662A6264AE426763E061F13A37F2AA2331F13A3111AA1221F16B681A2C41F1AFAE1E1CF
+:801800008AA1F41F1AF8B1B1AAA3F717323F3EBE63BCE1BE62F721211F1EAE552AA2C91F1CFEA1211F14AAA24EC1CAACEC1F1EAE8817111F14E627F351533F14A4666E621F36F643433F3296431F14B442E4287822F242622F22F262622B664E412E625F2B0A1F13D311F421211AF131311AA1331F12F2414119AA66CEC11F14DE11F851FC
+:80188000511F1EACB3987AF7A1832B662F1EACEA1D716AF661C11F17A566AAF6E1E12A621E8A86ACCCEAACE81F1858111F16F451333F35F5C1C33F1EFE41431F34F463633D22372435F342422F287822D222B242A666214AE422F68BEBF031311F1BF531311B121F13F331311D111B221F1696A16AF661611F1CF611911F17A5441F1BD31A
+:8019000011AB778E823F16F6C2C1AEA21F16A6661F16FE51516AE611FD416115611EA81BE6DAFCE1C11F19AEAA17111F17F451333F37F7C3C33F1CF4616335F323213D2333F4414125F2A2A22B462F24B622B262B662E216E622F292F6400114C011E01A0122601200121001130111308110210428A024200400C081C081C01348184002D3
+:801980002440030000002800F0941F0080012200282220060046110100200442008092411A022820048005180000484601001400001400200222CFA402481B21B01122B411324219B242B111B64299212B941B412B94222F1429F342913AD412A9421CE922C4812F2264112E4296E12265192E429AE222B491E222B49162221B29621B29FF
+:801A00002B161B282396212B8619B64298412B84AAB442AA422BA42A94822A84E822F4F2C180B41186B41122B4113242282D111B612384D212B311B6422173422153323AC4113B4229B92185F923C2122E5216F12152122E4316E12234912E421B492E42132926F86213133862F022811994A2682D838AD42282C4A22A84B82294822E42A5
+:801A80007F630722824800000000002800000000000088000040010080840200000000280000000025012FA9068214008011021E2111828A4201901100A048424880022011012818524A01800C11A014002A48012082844401244824004240F1CDD61021088621018042021214481C458202180028220062221002A024280012002A01880C
+:801B000024220000C08224C82C04002E42624081F4BE380082C041181820922111821C3A611C011601004A4802A021202A4101A01219A24120014081844402881100288E42248A4602230427262C264481F45F6D401101820021C01280018044220212004AA242004A02100222425800800C2A01982082020000481448000000004F560964
+:801B800000002C01220048A04800000020A92400241022140100880000802181011C01002228000000004200F02FC500202122022C01A0812001399D114A082B814001280000004840A212800328002400004E228288820010222224AA842280045F570900126022000098800888138108888088024042024800009A021A020020810118FA
+:801C0000C022822A8802400222202A2C0400D60F00802201360220041A042F110442301230114222000040810410020022204102400142008200008004200242F0DFBE002242100112121D42800288000028190190828002180011211041023200144842144800000088A024008850224220F274CF00A03418282A810228800100382400E5
+:801C80000021230400981242A24200821420210248008002422084082288304280420280B4E545010000002400400148000000001400000020A324000000008042010022210000002008008FD8480128181828002C41032814824240024001214211280012488221188018A2210011804481C221002002888048028222232804F0E1CE00B8
+:801D00002002141AA21220061800800120820120080000C02148282A040018280000420048809482002A04480000A0427F8C0B40210112582662240020880100214001001A1411012448C01316A1422082810412206412144A9882284AA22410220400420000F085381001001420011242210018142100008004802404000018001918313B
+:801D800012224280A8C1282004212148000000224042F28D7B800480A434A0141142A014204401001420A241288002282311822104282006002002008004888008008084082A0826028FA20C001A0411420020044230422901001800004229190220040012824220880224188800C880080021488880082084F81576E011042800002324DC
+:801E0000120128284082410122280086210800301288422041020020021B4100282424110080240223088200F048F70000000018A08100A03880180288A01223F122121818224A2101802101404121020000C2888028844881040022214800F063C100C04100141110022901502113010000203442112304200413011022212808884A2895
+:801E8000A228190148202602230400000000F0EB1200111001121984011842114800121A0225418228022A44A31414100111001301281180810129848222020010022304282121C021F0317320031C8404002001002582020011002011828809292881042048A148428888C8C0620000009042282420222484041042F3AFFAF041111541A5
+:801F0000011B5118484229A4811AA5282E42198121015012E022A5516E92EE614A9462122B45481B151321075A7841E1189831288AE424E311E914C4C26AA444EE8229269841480042AA02230A3421CFEA02229011C0211321E4110419241411F252831593822D1114132292824A8264212543D232041C415112381824482221AA2903E279
+:801F80001A292E08292206232414A2660048C8C041F0E174141A041AB241044AF431132D121AE3241122240523C11228111A882221621119B881A816182C212588C58212AE718A39418A084AA24239328328A82A8AD421F8428250224221C82F249C8228A0222CE89D021A42A1211428142824282C8882083C2881288218011242121003E9
+:8020000029012098118A0228142888004003220000482440220222242A042A045FC20B1B571F15F311111B721F1FF751511E332AE226F643432B441F3EF6C2C21F14D413A3AB1F1A58212F1A4AB292A9AA17141F2EAAAE2F26F631212D823F1DBDC12CE92AB2F2EF36BEA2EE18FCE181AAA8F95E422BA82F1EAEC8EAEE2EFEE2C23F1AFE08
+:80208000828215C1222B642B22EEE22F2EEE3CBEE2AE222AE22EFE2523F071511F11F631313AA7D57AA7752E624E523F3EBFC2FCE1632BEE1F1CFD81913AF3B1912E222B882E222F2DBDC2FD5111EABFE1AEEE1F17E724FCD3D15AB591F1A1232BF5FE732F18AEC81F1AAC8ABAAD45BEA1EAAECCEAEE2CBEE2FEA3E12F2A5E314AA6662A58
+:80210000E22ABCE2AEEEAABA62A4662F2E7C540E1F15F711411F13B321F351511F15E517B522E424F4C3C17AF741C32B281F1CFC11111AF281A18E822B223E322BBB2BFE1F15E11EABCC6A7E11E125F493D11E415AE437BED2EF23BA82B2A1F8B1E1BAAABB16B2A2BAE3AEEEEAEE2AFE82E23F1AFEC2E2355122212B66EEC22F2EEE3CB84A
+:80218000A23A226AE62EDC64041F1547F111111F15F171311F14F171512AF472323F14A1771D832F2CE615F513119AFB13311F2A5A123E322B992BFE1F17E32EEA14FC62E21F11F1D2523F15A5DD1E113EB32BD51F2BB3C3ACCE1F13AAABFAEB25F473F22BEE6AAEEE6E622F2EFE23612F2C5E332F26F442622B664E422F2EFE42222BEE39
+:80220000E02242F23169400100008004000000120020A124A024002004421800420022A08280012A8924824402000080040000F02338201201282212262261221280021225211312812202323081D0222484014814188021C4811280A2161924022A88240200800400488024045F910A481B21141B21421B21272419F2421319B242B91190
+:80228000F2429213F14291222F1439312F1429F342913AC4911F22C4812F2264112F2265191F2264192D529AC2421B293CB591D222B89122B4917262B381324219B24298212B84112B84222B84222B842229A842882E422F840C481B61A02146A121271419B242B181A2141B294AB291B24231A12B14B225214B31B21CD122C5B12CEC11AB
+:80230000EA2265112A6C113CA9213CBC81C2521B612CB911E224B8912236812394212B84282DA319C282224A28F2428222882B42882F22F4F1540082480000000000280000000000000000000000000000000000000000004001FFD50B4800004816321120011E4120C14142242880045260221490212228801182820188188008382AA462
+:8023800042E0180411144280068A328280280222377714328A0312223E8121002D212321023490212D1112522C6212288A02001800298182018021342212182B81158218012400822448114880642242408174334981250D126036C011D0122161162230434E21112A81E12462225A22281123C81100E0219211281212C25A828199122EF6
+:802400001320024601302124481B24482044C2C24021F62E9220820220A2812C01801222011301D0220142400128220028222829010000240080086A984120181281880400A22928022200DF130A00202102241280442201004012410100280048004221422A0118281400C01148002140A24800002C0820880220F21CC12022020014A852
+:80248000112602204402305280E52821E31224041C2444C1421681A112002828460240012813C1324A22888C0A800842808C820420021F930B0020811221184322045224001240410319242442212484448194222081022C140114A0211B1418208828A284200820880CC80028F0D25E208202002022210210024022042B1498322200423B
+:802500001041828181212402382200001160224A12822418020042108202280022BF5401121842204222021448182001282221000023028094911110011001284A82413211489081480082800460228848A084C08282A084BF490968A0241CA314008002502220840200002A14921124A898524222480048140000484800280080022002F1
+:80258000820023440348F08F7C0080012002244800003012001415A224210042002012021200210020022502282400402208000000144240F274D5146818181C21249222B042828451221224182400146848901146821EE111843621420010021820034622A8241022084A8208248842602842824A8824FC9B75800122282A010014000005
+:80260000482002112490222200004002200142224A02501210120128000021008008420000E034091132400122194421041B1280012AA181118084A82128422542222401244642024AB2229112D0121402142B428A44A24821100229A44823248424140280082FAF0B488086A441002A018224002B285022180021290800001091210000B4
+:8026800000238451214A82081002281CA4821C4811218A8882088800F0B1EB00480024000022201202282880921100481858682301E8272422132604281180829211481A042B2800004A0211210020022A08624FA10F00484A0316122124A1143B241190222100A0823880813821302100121A280125218482080010A281002324180229F1
+:802700000210A28421882448007F330E4220210120212211022A0100882982082BC248C280082C820100800221200412202A08A80080024A2888820200484222217B773011141946210129428382226414282C020014250126022B481002800440022001D0120119A414120028000011C0C24002100280FCD82620A221002268200180913A
+:8027800082001083088214131821031308111C110121484A024229622214A814142848192888224C010020C22220820226F293E780218C210223A114206421A041290180028820051A084A0242428A81A4122E4122C04148002200282A8584848402A88248A0C2808C82286812826FAB02004880C441284042010028001814483452195251
+:802800001286814181288281042C68112C2822021A2C214202106222C846224422020040013082F052BC7011A11C132382B2437212A12225226A122327032AC22223C12117291F3AA23113E619D11133223B44A0A81C8242A124622F24E426C12211881E611E4219E224266C2C424E22A82724CE811F1C062B284A642A3022601266F2C3BD
+:802880001580B38182B11164211E524A91115AF513226819CF1282E01AA8921B881CA8814EC29A08CE82883E2118423F25F522523B1223E221A2A16823DC227623B1E2B1E128BAA299A24868A2421F18022C98A26A042BC427128AB862EC388A7CF2014AA443284E314A25B2216615284AF153123421257212321211B062B44275A2C1710F
+:802900006ABC22C4432456F1315120ED24C6C229E41251122AE413A131111CB25225E12294A32B822DC12B4A2A9C4321EE42882EA2808AA428A028CF2A420100204801001C2881082C08200840321130113083100129211822088220180288C09211241124112440022400400200F04DA3A0551F15F111311AF751515AE415F561632B66B2
+:80298000EAA64C1F16F6A183822B28157181E122F2E2A21B2ACA7C41C14119AC443F2616E236F4A3832B222ABA62AEEECE21EAAEAA1F1EB222FA2141AE22681F16F621614AE41CEC12D411784132411BE4484E822BCCCAFCA1A2AAAAE44AAEEC6F8A0F7E711F13073AF371716AA6641D232B66AAE31FF7C1C11F192A28A8222AE22ABAE2C6
+:802A0000FEA1D3FE932BBEBEB11F12F342411F365E121F36FCB3D32BAB2BA21CACEFFE736A86B683A2A21F12E612A2371F37FC63613F34E41EEA3EBE41EC1C38411BCC2F2CFC428223A4CCA0EE29A2CCEAFEF453141F15F531611F11F211311F15F571615E511F36F663611F16FF5171CADF118388F831B11F1869282B843BBA1BDD3F1A24
+:802A8000E311B561FBE1E21F24BC23F661633F31F1B3A12E22CE618AE222FA6262211F3AA6A21F1AFAA1231F3BFFF2622B6E3F3EFEC2C23F2EFC63C33F24F241823BC42F22F242A22F2CF8C2C22F3EAEAA2BA22AEA2EFE7D2D145E111F13021F12F311D11F17F653711F34F643511F16FF12714AF793938829F8B1B13F18E922FA62E11F23
+:802B00001AFDB3913F1AEB19F9A1A31F18F841433F13F6E1613F1DF953632AE22CA46D1F27FF62622F2EFEB1212AFAF1B11F3AFAB3F32F2FFEE3E12F2EEE2EFEE3E21F26FEC2833F28BCC2FCA2A22F26FAE2A22F2CFCE2E22BEE6AA688EEE2AE340040013400400324483440321100200912422014A2241142114221422901002100C01109
+:802B8000C081481440A14880C4228082A42400821FD80BA02100181B612001111880013081001C0821222008200116312220022400281892A04825022038224821822724200480142202241F2F0B481B21221B214AB111326219B242B111B24299212F2439112B94222F1429F342933AD412AB431CE922C4812F2264112E4296F12252964F
+:802C0000D122A5292CB491C2531B2925B29132421B292F24B181364219B242B881B24218F14282A22B84222B842229A84A882E427F5B0A1CB511A2421B214AB111726291612B161B612F1618B142BB11B242092F1423D1123B312DA13343D123C5311F226C11488E212E5296C1539E212E42923CA56926236136112F22116126112F24981D
+:802C8000212F2482F242832242A22F24289A822B422344F28E57008248000000000028000000000000880000000000481400000000800200000040011FAA08421222122A41A1120000002446318200008A02A88200212001002902001011C1128E127A8884043083C2882C04008002A200DF33031621480124283116227172222C223582CC
+:802D0000821823252AD32221A438124A728282861132222C82298485B823083681899843008018A2242E421041817242026825B281844421F463D98025888225113111002986848214F283229812281E2216C242281AA8A123E82882012B21282938412304390846018829C412E8424221682E812A2C18D1228204482D221D426A48016FA8
+:802D80005E0D1412146022282322911212290818824230428200A89228489042100220011A8288021AC291113C218801884082141221042480028800481F530620812141022E1128222818128044018800B23882400211424001422908200100202288810400400224004022024840F293A1E01421C22122183210A1411C4811D1212148DD
+:802E0000E22106E82D4242200440012880C2122A21222282B4238991222C8818B28192828683B882224681488172222284A284232AA84888AF770E18121C2341023880821891111182A041C062488A2483082414114810418233A228A0411C4102D02202160286C2828A22042948818212C222E2218860288FB30D4681022818381119A293
+:802E8000411982011223542122298848A21220040020022818420022248A2221828828C8A14A180180420124102204A028488A04DFBA4B21015230310028140048232104242041022121141C24842904142014218304805212002502000022002221298804242A884402EF8103004220045021100200A02440020000240098002308130107
+:802F0000481422190482482304002C02118008220000222400D0C8064011E11201008004131111210800002822804502110022602200001002806218306120220800208284020000D0F80E1214121B215A02D021724102184683218C042582012200002111426018B031042A012213342231206638800223C2812800D0228284062221008D
+:802F8000B0A2080014400100001440010000249022E014914142002428002142480080082502904122008008008800808A0424AFCD0E20041C05210000100140420280344223015229082212221C2802283220622C12244AA1428A84123242C290218622040000002800BF810D0048102111828124082B18210018481800A01E1462148066
+:8030000024018018022AC882121394812001428800004210024A480222804882F8A1F514400160140080410320412204180028422044024260242C612412484860110090A120034880860810A348883022482400003F7606628024042388440120247441228401009200008001228A010028212C04802208002002101212820822808888DB
+:803080008888A884286F980C130100184212242818134403A041A0244823821402821200000088A08240820200C022288082280200820000212602281CF8EAF600002002100182189280022F2108120022D222E22A69221C81228222824881AE141CA98122A0384082188202882100242280028210022FB509000090112148480021802940
+:803100002804C0428008182004881446014200E012882442A13800004280088220840628482848002672F1031C8584044200004081A224004A2828A41822800200422014324248460114480000888064160028290888208416C2820000F0E98800A0421212482A85440188E031982100120000100218128811425012C041246012112A04A5
+:8031800000002280A4248012228848029022222302BDB9C01142221E41111B44238124C4814A88692319898C21A4149E92242A8CAB43121B426A25E11EA6D62F243422A22A22DE23F3126182222A24812BF4C3624AA2A42E823C9482484AA4A4C2B04244A2C2A21CA482FFA94EB15102002CA4116A64141286D2317582C341212C7182A2F3
+:803200009220B262048A848186880217212522E21C9C412B481C6812423B338AAA212A0C2B222A18A24A28294252322122267222E22A38228220A8283FA20F481C044AE11553221813D11286011B253B944622A5C52B411AB442843212721B842B8E21246E1118158182B142A2142CA6CD1B9A1C54112F18A9382AC442A04224C2AAA84823
+:803280008AA8888A94E2A880DA2282AA2225F2E2461428804281428242A121A02834922440220B122C0228922882281828312821A082D012011C081800002002244002002C02800448F0A66E147E6142281B731F2757112B646E722B761F14F4C1431F16F7C1531F3CCC222AA798CE922F22A3268AA8329AB122A24C4E423F14F471E31D69
+:80330000412B663D432BEE2AA6E61F19F2D341E011A3EB9AE822B262F6C1C14A84A8AA2A8EACC8CAEE2AB262A688EEE22F28F8C2C2AAAAAA6E422FA34561112A86F231311F15F131315AE726B742B561B651F521231F16F783812BCC6E622AEF2EBA4265248E822B44422B54E02CFC73611F15FC41414AF4C3C33F1EAE446AF633611F1EDF
+:80338000EE16A2B3BAAE8826B262F4C1816AA662AAAAE22AAEC8CAEE26BAE2AE22EAFE22222F2ABA62ACE66AFECEE8145E51482217131F1555116AF471522B111F14FCE1E13F15FDD1F33F3C9C422B3BFAEB2DB9F2BF22A2CC2BF6DAADFE826EE23D411F17D711E426F6C3C12F1EAE6AAAFEB1F31F1DADD91B3BBAA3D92E622B441F1CAC95
+:80340000CC4AAC222AB642EE24BCC26C242B66EEE22F2EFEC2C22B882BAAEAEE26F6DED5147E6120F231111F37F351412B571F23B532F3C1C11F1FEF1CFCD3F33F3CBCD2AD4C2BDDEEA22BDD2AB2E2BEE2EF2FAF66AAEA26FE33711F3FB721F662623F1EFEE2E1EAEC2EEE1BF7E1611BF9BAABBF8AEC22B662F4C1C3EA8EA6AA8E622BEC58
+:80348000CABCE2EC24B262A6EE2F2EFEE2C22BEE2BAA8AEA22FA17A58001001800481448000000A048002880022880024A024A22222402001880012248884002800482800448002882EF330B18288042A1612302181B29181B282D1280A1422921822912A242982A842822752102228229244822E8123191802206248A2606888A422208D8
+:8035000080223242222304C0433F4F0A1CB41142B11162341B2123B411F2421319F242921B212F3419F14292322F1429F342933AD412BB31C4B11F22E414FA22421E211F22E519F222D29E212F22A5292D521B292D531B2925B391F242111B292B941B28272619F2428219F24283112F1428F24282222BA42229A842882E425EB480A42141
+:80358000481A22B4117242A12123B411B242A8612F24BA81E61421734221D31228D912BB13849B521C9B83283D529A82ED19F22251922D538AC2131B692C81E214B191A2948A7262139182284EA1281C28A2A4824A2A9A822B4A882B424FDF0E004882000000000000000000000000000000008004000000000000000000006FC50D111133
+:8036000011002E13E0250282CAF183122410022100009822002842808181332218902100111822144EA200008A3282C0429042422C02A24A22043F4E44212402180018C042112022042C44711182250520242132C24002211022E42284082822241318D12241812634222D41214825024200E02802E018029D6D304140A141B021014A8219
+:80368000D412A8412E912B422124142D112B4118408221E1212228CA4230121827231B2416021C02629093282D11193222422722197422A2C2212384142244622286822646F22FC20019020090121221C082003042002004A0482820040000004A820822400114B042880400820024200428822880084F1A09A021181A022880A212402140
+:8037000021944100210011460128002014210416914280040000001C01004AB881140221C082A2002008484FCC024001141C022C0250221E226021121532412642A3212C24C3110039042622342280E22182015823471271226211522904282422C08121824A02002914228404DF7B0460123011142800002C031042512140214233611898
+:803780002890418052124240F1221280242102115012463211200248190890824220024821C8003DEF0012122828C022282E125012184A31512442282129818441011002482C240232481280B4424102292281210400292A74820320C2828810028084F47713002004400222420000800210020040420198130124181421122501100248C3
+:8038000048A02490420000A0422C8228840C8042029F8E4C31111C62151442C061001411222842582430412002211100986024828004221433820216A14220021160245023908122210022202848024FD70900800212400229241303140042121381240428A02411800220230480012082912214219021002018020024C0220048F0D17C9A
+:803880009011260128421632612C828424C221C04148208411812604194281166111662238124E3123841292332C021B121A92221129542146011092821C28C42220944290828A02243FF60B82C01111000024113C010018502219840100000000000012000000422822208214124102248008A8220042F076EA002800144A018011014863
+:8039000012208144711241020012230450238026B12104000000122C0420043022627082828482240E80248848F258860011C031182413140190111502111180031C011414140020C2411239042944220290211312312112423023214001421082022348820A68F0749860181811000000002A04400122210018800211142882501212A007
+:803980004142200480020022422242801401488008282400F01BDF0000C01211802204481001622502150221211400186021112126022CC222241F210212190380120214800882800823122204808A82B2FB080080022219A4259021181A8234422152002902121200004242423041008A014E122C01421C82044830212998422B82A04275
+:803A000023024810928220C8C19F8709688002288042C221C02100800400102132422111290711100224248846821101009012242224882288800A00004A880400BB71000080D4210580458204180011120000800100002848298204280028480020042800003304100200222220F2B31610B181122184020022000046410211800221904D
+:803A8000214E11C0112182000048141431144081040000800230228004800800241FC40D8218481800804101C011800218214041218211021B16484A081100221C238922011A9422805222130882422084220840A2842A0410023D8280E21A83C2411AA2314A061B76B053065225717122B4230116531224152122E112523139B2C29C1232
+:803B0000182E1221296112391161221712142AC212302330838A1682B44188A62228A882212821A6E122F4FFDAC0418214322E113314E214011C022E33A0442D413CA12133A1229032181D114E42190446012AF2426325E12424B7D244F11243171120E63434124A44A2422CA8821CBE62883442B0424402CABAC2AC82A8A88C4F1131118C
+:803B80001138423C54113A721211C1111B451911012B413434311532311AA421352184E52255314E43111B642AE228C6B23E224A81E3219331116A5222CAD631A222232466282738AE822724222B4C2BC42E42228A22042FC20D800122482C01200120220100322422200332200A2242230221A0924218A012200224200200002480020086
+:803C0000288A0448F05CA1141F1DF521211E111F12D611FA11B11F14F461723B541F2616F321311F3251223982A3323E313E313F33F323231F16F76171EEE22BAE1F12F261231F36F672723F15F721611F22B2F2E62FBE12E323127331D213A6667AE527F7C3C327323F12BA22F2C1833F3AFC414329F222222F26F642422BC46E422F2E26
+:803C80002E04CE82AE28145E511F14F411111F11F551911B3F1115F343711F24D613D411F441711D433B241F16F221313E113E333F33F123233F16E416E72EBDA2EA22E832F621832F37F773733F22F223232B476E632B221F22F2534337233D611F16A6772B773F1CFC23213F12FA22A23F3AFEC3E31F34BC82B822F262422F2CF442C21B
+:803D00002F24F6E2622B662A6224AF6B44E114F431711F11B131B341F751311B551F37F753511F22F253111F17E72153222F24F411532B332E112B323F23B133F373511F17E732F162211F32F8612317362F27F653631F126232BAE32BAD751F23F223611F3333236AA6776E623F3AFE22233F1A9A22CEC22B641F1C7481F322222F26F6D9
+:803D800042422F2CFC22622BEC2BA24AA2EE2947E11EF631711F13B371B351F571323B331F36F653711D223F17F361611F15D531F463433D633F13D312F122312F21B132F343411F1747F22221241F32F681412F33F673623F22F222232B3B1F2CBE72F731223F33F713333B261B227E722F26F6E3E33F32F2A3A12F28FA82A22F2CFC417C
+:803E0000C33F18B862B662E22CF4C2C22F26B6E2BE62A2266AF635AC20021C01182082240200800448000000421100100100002240011420022448148224000080820482288228826FCF0F4828182818282F12216114284E111982011412348001188001008024941290421A822465128081021AB46201803262E0242848824482842808BA
+:803E800022E012F455AA80B411A2121B2146B291B242B111B24291212F26B911B24239112B94322F3429F24291322D913AC4912E421CE82264152E5296F122429E212F22A52D2CB591E222B591E222B191E224B19132621B282394612B8419F24282112B84222BA4222BA4A229AA42882E426FE3071CB411A6121B21141962241B212B14C3
+:803F00001B216E821B212F24BB11F24282322F1439314E83322B843B431CF922521CF92382422B529691518E212E535AD232B181F222521B692B121B284E131B294A11918219F6428119F242A3E01428B2422AD2222A9AA22B42212E423FA3022008000000000000001008000000880000400122880000000000000000000000F064EC0013
+:803F8000108441022820312120021D92001B853B248CC2810000104141A1424C921248304213220140A1822018084228311C48A2488722228982348280C288F097ED9041AE11404BF42882141BA1311225C2832024BD82031213048904520068482902C04121222E8421332482011934B14691C1236411290CB0114422042301108C4421C3
+:80400000F4F45D80641C418311342A28191B11119221228E53582B1213A1144A22C84A0012E0182294212244211304434431514240C1C12AE118748822E434C1A2111B8234C8832292281042AE4220B47702141A02112188250129A1212482218028E8243821851101A014004814214222561182F222822821281820328190410042001AD6
+:80408000448254221242820089085BBE101401408302160800828800122902004601000085011C1282C24200C08140A22114822D117042022140220122801402232402F06B5E8082D1141138241C31121C32322D192CD221C141211B41311641632A19C1285AB2182272418416B25192525B349724282E1272132202128593941C0129071C
+:80410000144641834CF28142C64202898288AA4868421F1E0922169111812C9231D08191329126020011169311142221814800432414925137211E246668242840318120D118F28114960223444281441112D22128562246322882200EF07AB1400441404522814222011B183F24084A1182022968111B24381E28221428942862194423FA
+:80418000229172282840622110C1112A91421003C81229240800244A0A6248DF3E062155DA4164A2482384012D1A20C82430883814121A52422800244D41278498290317828018097062882152811D4220A4422004822136142844422804A116022E18446C0C1184520024000012252649A42822102601212184828089C442C0621433E42D
+:8042000028348480441884251402008139C24125542222250444812C42A2C24490A62082120844CD114890418240111802124001841442130128250C404418042200212C81222232812014A11400800C124288A2424400B04D4E92214D224C612249F4441348D08321A88133321A63A8181A827122311681258134184D8162E129C2421102
+:8042800089C285802E68221A64238584A1242F1824041416BA811202272490128443AC28A722126A3814446F450210511884248418602400804808113014200240C1428120058D242C042D485026420026912121208224840419941286281434421088440489022E420012911081212252182C21211128041418226140024521020033029A
+:804300001C01292121E484214181826A14A041800418800118210018800188687D9F14288140110811441811008022888102E08244084068144593188314C4A28501288129088381280428142908004484848304304A82200626029E172092283223022216082002289280E24214C1141180B82404002854E0190284891248012C946800D5
+:80438000261101400221001002202812A842302884DB11104204800280C1212002800282A280240881002372480143088324C142A08140081672112808114240180441219082D60820026210F4DEA2202812D141024AC22842848C42A1348001164214110490252823014C2262221F4411C1220050222C02262104000000428200904825C4
+:804400009442A13042C011FF760C504100005021201412E112C1281A283211C068834148C88C281C01301E00804101824864822014220442922128840083018304420021F0765400000050124430118850822C0811482133682482423188008C0C8C882B6194271884621608481502502288001C45881488041228880020043FAC038041F7
+:80448000081280818241A8210000422441001983C8288800252101A082A052C28921280A23022E5100B012042420342224002822882220F48AF3141480844148010040410489820241328383021C911289A41A811A08818131289440029042122CC28860A64001CC8191328CB188218888C11218101AF8CECA242E214B181D2825810114F5
+:804500004B1217919562114AF22918C898882F1C43F243F92E182F883314CCE883DE1168828483CCC14227218F26E583A1498FAC21558833E9347121A14225A228242C34138D28AC984829129A9AABC2822128429CF258287F9508B01912B821C2212AF221384A12EA12B2213B112189B12232611723165544891878C1BC2C31882B248FE7
+:8045800054B229B137F33114BE28AE11151848BA1284FC8233B033E224349342278442BB9144421A51828FA1856188842BB5221E922AB48884F4AC331460C216614185B841311A1584E38511A2129284821E7545B42633284AC681AF12D631022255F21643E4C7889D939D282B212B2C9B84A82D322E442EA289AC289CD211859C42A014BD
+:8046000012E36421429E885E42432CF258282B46282225F6B7D4004501004E81704421612460142004308124120000100129044890439092009082302A50385028D028082C08240000480000F0FDB214825F45F12929DFD3F6A8281F23F276445F66F43A3AAFB2F3D3D16E62B7D68FACB8D2FF84E66F6C7D27F7C6DC6E6A3F33F1D54DCF8B
+:80468000D9F9F1E11F1EF8297BFF74F44ECE6FD8F8694BBF3EFD323A2F2DFF4A4AFAEB21F976BE2B331F12F271783F95F3DBC9AB668F84F4D8988F8DBD38E34FBD58F14A789AB8DAFDF6F62F2AF83A38BAA9668F825288DF634913F27D7C8F83F33D6D8F86EE2FF756544F62F26A6ABFB7F7D7F52CF24B2D8FADB912F5E4A26F2FFD27377F
+:804700006FCCEDAFFF331B7FDFF6BDBD1F157F41F1ADEFF5DEEEF8EE6D9FB4F4CBC32FB2F2626A2F84A4BB3EB2FF77FF3BB99F9AFAF1F91F97F3DBC98B264AB452F1DDD17E784F4FEF25F14A789E92AF2DFDFEF62F2AFA7A7A2F2BBB22E686F64C4CFDF5145F42F215748FA37317F72B281F25F57B595762AFA3F35A581F5D4DF21B298E87
+:80478000CA2BDD5F62F5665667626F4FF9686ABF17F7FF6DDF59F9E9F18F8EF82DEFFFF2F22F2FEFDEFEA8AA2F18F872618FABFFCA48FEF8FEE26F6AFE8A289FBBBBF3FF7B71BF1DFCE2EA2B444AF5D8DC8F2BFB5A682F85B15AB5D8FDDA986FEFFFFADAAF83A3BA2B6687828FA4F53127347F4AF21D749FB3F37727BF82F23133BF91F154
+:8048000075773F33F333391F5BFB6163FF91F198DA2BD94F6FF9F6D43F73F3FFFD8FAFFFFBF9BFDFF4BD9D9F967F68F82DEFFFF5F4AD2FAFDBF3F86AAFAAFA6A68BE7A2F8DA5FFFEF24F6BBFB2FBB1B11BFFBB77BF3DFCE2EA2F24F4DAD89F55E5AFFF5E6AAFA5F17A588FADFDDA5AEFEFFFFA7AAFA7B7E2BF22F62828CFE4F4A31920023C
+:8048800040480100244021010000118524B14822D948328189028131810018422180092180011800004820018E482496082004003D2D5014008001C190188001818031112C084A0228501880029011141D1281B018D222043011142821192204463211207148021816180A18122901C049EF3F096D521F4152281F4132481FC1326E1F41B4
+:80490000F24A121D24AB941B28AB9451AB9453FA4A9343F2429147822D914F82C4915FA2E414F8264A56F1264AD6F1214AD6D5A2E449D2A2F591242CF49124A7221FC9324A1FC9724AF1812CAF24D1C1B24AD981F24A9251AB9443B24A39242B94478229F9A448984FA2F41633D0A685F62C41137162D2C1746EF3114CA7161F48F46814A4
+:804980001F48F6483259B64AA14A8F44B335E434712498126F82E414F9265A4AD983E85542EA557222F858241CF888242E5317C149B411342817418F34E841F2688215F44A121F48F268941F48F24AB2518B9443B24A09AF44B98494926F8884F1265ABFAB0584820020080000002800000000000000000000401884040000004004000027
+:804A0000000000F099BE8022D184C1141C410222A3818231811C4171520312832422480442222022361174F042111AA4212922011C681A197932C82185E28192239042848344484884889858508242C0C2AF8E0AA02828142C34C41B5A001A042A612486041F420C3932126C26422C81043314C1446041200858114A21014002C0818A2148
+:804A800028081308861172621822B838A4C18B189611F8718D80E28EE1C162411A94443B8322A13841A6D12141B451C2842489A4128E66265648A04124AA946156044439B551A8122B5299A141881B283C0C2342D2189A112C2808875E10584228218B1C89F51A4289256928CDCD0000113488428081842121348125B2218431212100A0E9
+:804B000014221001115429010000301120B128111128B12208428440C881B04A2808228882C0489C0D2601008012022734822A01344021812241032880826444264291111CC2120000282228181121282A8172420214005012802201324A224844F2E55120849331512691122A3823C0628A042361A18224172528221681E41334411428A8
+:804B800080B3428224D621A414562231125818262262221981042824D012012B14C2248227242E882398824828F0BDD72004131241039023F08222C2301312111835A221222521828416812442E11265126024801182218102282129220223022582012140C28212A6E222014A88026F614731213218442832290A33848403109A82A052B9
+:804C0000408121B41142813424D02203422C472185C4122862182C1321C211582848211411C0521C0C2248A1826A0844F01CA79042844812680012252462818825022424902214201122E21244440120022D268053122CC242430122418B8288271480B449084029862212880A248A8424F6712C0016882C52C2872200B042D84202C0C21B
+:804C80001AE2420114492142D882260180B932E424728428113149295448A0182688E811C448141068113880644130222C8138412428241058289F4C04001A484102842284401201441114444C8144028810289C2815022442000000241180120632002220A8481240489144528120025FF24382242121916A81843642FC22823821244DB1
+:804D0000C2126722412B121E412622A18418944E8419F2124262472A52257548A234202255248826E1C4C2A988298721E68804128F348821628A42499C12814A28E424F26A9120089021458212028014388121403111104504812688A24240C821248180120265082D821A4221414204154821611248882024114288A242008942F8DD13FA
+:804D800000002284401C031302123C081228989088C011400200337422422292222128821424480022000040220800002200424280F2B895002141184021011984841881258506482934221D182502009041104105A0210081C4114C722284110416919282385AC212D25E211A282339188826042684D49208A290214800F0122829228186
+:804E0000018001241782181688032812222280C25568211C0412100222802181020025220448341122810022682800DF8E01C02821008B1420042481282850421A04A22E428844B021082D842342024B8119A412488860212888404122014B82B02188928121880042882D446C08442904DFDB0A1200001120429124211282252228083497
+:804E80008284188A0200C0446200242A044400844C023011000060242004200400204438124781601400002438001412CC448102404208422112001C0400198183581426612180A14248410016024022342262342442AC02222081A12148AF8E05640036122448012D4242118842484222424210210482002414442338842981018288408D
+:804F000001804222328182180010C2149844242C215486442748F0E6CE1416E81831114621189821810048898802141C48F12811142120C521222BA48021084200211116A2281800202282823223111111408204409241001C044F550C25C8282B4221200519C43A8C51145C36121C6281488E24884E142A3481882D1480B1228428A142E0
+:804F8000139841821621018480A4122441186512140444004226223122624C02282127429FC50C3936812D121B61C41A7133D81131421835B188F452211AC5518E123CD239C63219E211AC629EA42B224B842127222F35C2621E456813A122748699841B444C92263AF32414F09124367281A4611F2222E5247411A24232301E3F2844C44C
+:8050000024264BB2A90F18AFA8426124824E884D1327A61CF112681AF111398A7143B24A3A218AEC87E958B422991629C911242F3A36614159F91194EA52126E3212882921B11A32242E1190231A6122212D9327322B813CF491814D515AD1A2A6A12A87FA66382AD414BA54F482BB6061325B222A019D412889F629621776478C6AF8215F
+:80508000C230144A7E713C82AF87F8584B11921302C0621F15E44274E6D123F8F1122DC4989A61212B222E81604124122F22D216B884A82242CE412312B242B282BA4C71A262244746484B144E542B22EB2A4004441444424424448004401104534112443285100561100321443948844114424401002440011C091C091C18C4824188849C
+:8051000088848816088FB20E3F15F4263C6B315F31D31BF41C56EF24916CAB754F45B738F249C23F14FD4714BF9DEF56F6C9C7CF56F2CDC95FDCFC47454F42D31551645F58FC23215F57F756F44F44F437175F57F1A1426F497194F696941E9417525F53F134344F63F23121474237337F52F311B51BDD1F18B3A1D155F993836F4DFBFEB4
+:805180007E2D82EF49FD9C734B48CD6CCFC8DECCF47CAE147F55F4267C7F21F13773F7D4CFF1F51E58CF82B648F47574DFD3F3C8DA3F16FD4744FFDEEC56F4E94DDFF6F46DC93F9CFC43436F4EFFA5B11AF181815F58F933214F47FFB6941F3BFB41135F7EF4A6A49E828B994C7849FD35154F42D244F2313147623F33F227351DA55F4C40
+:80520000FCA1311F42D955FDB7A52B33AFA7DF66B89AFDFC74CFC2F87E7C4F48F8665657BAF0575529F512341F3153CE8FB5F15A1D8F92F65C741F15F6782C8FAFBEC2FF4351FFC9FD6161DF9CFCEEE91F5DFCE1A23F14F527211F52A3BA1F1EFC61E14F73F714744F65F531533F1FF5F4772116F292984B9149F415154F41F334267F53A4
+:80528000F2243447435F5AFBA1251F56FA51A11F31B283D145F93222AFA7F7C2526FC7FC34F7CF82F4A6E44B734D547F4542F15353EF42F333363F37538ACFF5F11A5E8F82F62E641B77BFD7F7F8FA3F3CFF5745BF8DFC7171DF9FFF6DC9BFF7FDE3EB7F5DFD67D11F5AE92AFBE5E57F77EE13E66BF7B5945F7BF3D3522F3FF7B6B44F6900
+:80530000F892984B91C9F431154F42F324345F53F324344F43F2A5351F7BF3E1653F17FE15237F6CF1A3132F2BFB7E7E6F4EF5F24A4F67FF6444CFCFFF1C1E4F66B6E4062A011C010047121214841482144800249A041904120028214A9212901542490149084B921004224002346022482440044C026C024C028D24B0230F8216044C0213
+:80538000442031421E242128184331425138418531242B1453034100545D1280042B12120023922180822121028042014621412142A2412344284408F07583C0421F4152281F41B248F19124A7241D24AB141F48B24A9921AB9451AF243935AF3439242F347B25D812F925481CF9244A4E817FA264116FA2E419F2234A9E252D4A9E24ACB8
+:80540000F591242D431F49D23AF89124A7141F49324A1F49F24A111F41F24A911B21AF1419F54A914B42AB9447822B94478229F924484AF9244A5FFC0765B811169E216B141F81B244D181B24AF181242D141D2CABB419F24214322744842F546B824CF122484CF1A35A4E154FA228D1A4E411C2481E24BCE448D294F591284D4B688D5205
+:805480009E24C3B411724C81B24E81F24A944CB24A9B24A9B934B4427824B84A3924A9B826B44838A22F830284B01404000000400428000000000000000000004008480000800840042880028400002501F6480212209113539114841C210114182D4216A5846B242811A2821B12486210E14114A141AA25813814222213012D9188521694
+:8055000032184018C12140810412902823A48281838C047FEC0526641AC0212A64A2282829D21492238B86818A011921893428702A011211A3982223C238282422302289C91186220111828A0232A240629A183414198A82644242807228C1224F43054C6294E012B11136284B2183D212D31491252658281859A3842F47284228522A2EDE
+:8055800011181A7682E238B234C439328E122217281A32181E211B8127851B181928C4A212328114532212C14219A21AA02429A448A44A62162CF2214110A22100211741210028211B48188A14321180C421821C0A4211810020A4421240A482001002981281A0824072818811011428844C2202861808FFBC011800501410042051320022
+:80560000008C44244804421618881408008121901420022100800118100221191408248424908222006028FF16014C22C13585E122012E112CC5172880298C512112E024027034081922D2240439B21116227168022C512816011CA31287228E222A5822C0832A012488F148A88E48482608228266C828EFD60E44181644F81126C03560CB
+:8056800011381400181189158414044D6889511822412127121B4121214E2212002D1130313884128622012D8324002D881442214E8827248C0820C82885B2340532C02111002055262424984A081002A821800128424608801288411864218C022100282DA228240038601424C130A80022222280A4823FC50556C11A8B1444100228124E
+:8057000025463418842142230324002648482282A6826044214810922224601145AA2129A424871242A9D114C2228128161C28068B82288BC2522E822800373F204228248184211122040044808268862D2584282054244188989B21284004285216A112288480142808004A614146388258320000242C04E024F831FE100200A18C8244D5
+:805780008A820115022412241028484201000045022001428820149612442A0118892212028800008243A185128C92188C1448F88149B03364211849914A8CA341298257422184A121212DB28962528C2812638410840C4FB1F22442800529A6A418244D321216943242178B2C3228412E528CB848A281581282C3AB2C76B828B1229D281F
+:80580000818E4AAF940200814002401822011301A01460248421902840248222020041402241A225144423028302832471220118104A2804208188148804F0F6FF10144508120015828105241414190212145863B21808162294888484838424249228182C82011232002412902240088284008126B8285428828065247F12024820133831
+:80588000482315128814C2188124000045820222001420040038248286B1880482468894428C028082C138412302821220821122820181F0BEE400800110642422E022248433141823712162241824818C021008002A88711AC218241063882860828AB3322821140100A4CB14A1C688A134212A01809688812F4601843211284421108820
+:80590000420410084004228C6224608421002041420830C168001883A241818042228806A08140028B421088880800F0FA5AA0294022A124160224000092D0120828404401141820442141021002802102408204800100490200232188D1240380042288CFC64811D4419428301199963818169218938242023012202258844400AC0422AB
+:8059800029B2280484222B218042210881008289022118008428850200802192242984F28729C04100681004004022144108444929043848124200A08429212482048481128400222410922884A32441242101004A28B82204181248EF15091C628214101488C2314AD2282206100125A324442D480000008480C12820E1A481810422283E
+:805A00003018004E224A01266282864202901A1082A5184E22C0828417F640880146110913141258143CD16145C838123844299514182B414E1821A01442882116024F8408341888162881C482162803142C05B028A1C228C02288820029A94921F0F2BA807295F829121B455AB44A91282C8392288F31141154B1D02582DC21E14671681D
+:805A8000954C4A8531488181818FA422F468125AF7DA72181B313B219A826581208AB26AD413A2664AD3C8B188786488C1182B861E382FA583B48219324483A944DE367041E444018C52CC15E2237428F87A123F26A5162781AC391A1C695227673A522A2CF19228941A14018CA453218B4129728A4E89F442488A0183C3223E6829A11B7F
+:805B000028F018122393262E38A182211E38253224AB3483A6732AE184B928F85B2C144F13E412E29122D231F3146C271437114847C13D286E72B711183F21B21291346F44F414E86F81A21683012D4ACA643624BAD5A26381222AF8328A8B828CA8928CB228F1CA928F8152221E128F231C52882662219ED2A5FA9842812ABC88A88B1E33
+:805B800022CE829AA64225BA380B004001144002141214840000344003144001144011024908290800181002180084260224200442C02410082011F83BAB14557444F5181A2F83F26D645F45F15A581F92D14EF43A19AFA5532AAB99B092DB54B285FE3534FFCEFF4C6CFD2F1D4995F94A4B3F94F4894B3FB6F66B6B9F13F43C6E8B928D34
+:805C00004ADAEC1CFC8121AAE883F1381A8B738F88A8997AF76323AFA5F74A7AEFA1F1829A8FCEEC81F958F8AFA4B48AFB6C44CFCCF5F9FA2B234F48BC38FE786A5F9D47F155545D2D95FA3278CFE2F33576AFA5F72B2BEFC1F7287A8FE7772BF2B3B5A5B892DB65F3C7F77F62F3FFF6BFB4D7DFD18AF54858AFB555938F8AFB727ABFB7AF
+:805C8000FE7B4BEFE5F41A889FA3F4F2C23F1EFDB921BAF8387887A1AFA3F78A889E92AFA5F463232F85F7587AEFA1F18A8A8F8FFF1298AFA1F99A82AF8DFD2C8CCFEDFFFADB27266F4CBD18F8283A8F79074F42D254F4283BBF83F26D6C7F45F14B4A1FB6F55F55FFD2F15B7EAD2AAF295BA82B9947535F6FFD3437EFEFFF7F6DEFC3F33E
+:805D00001A485AF5495AAF94F448CAAFA2F36A7AAF85F67A6ACFE3F91A6B2B292B4D1F91A3323A7738FA9AB8AFAAF892922F25F643732F27F56272AFC1F388BA9EB25ED2AF81D9AAF18A98CFC7FDE2D8AEB81AF496C49AACFEDF974AF17475CF12D2B8F25B38DFC6B777F35B7ABFB6F65F7DFFF7F77B7B9FB3F297B1B7812B9B5F43F2F758
+:805D8000D72F73F39EBEEFE7F61F5D9F91E425F5495AA5F939A9AFA7F7FA6AAFA5F67A7AEFCFF8F8EB2F2FF6FB581F9BABBA8B338FA1F15A3AAD1A2F29F95A5A3F34B75AF51232AFC1F3A82A8FA9EBA4FC1A9AAFADFDDAD8CFE3F9F2FA2FAFB542F4D6D48BC98F8E5E96F02411003024842041638140081214C0261264C0241200428012FC
+:805E000082921228184221A0128001290118202201000012249220A924124A22D8C2028211188C22848241384284A061218424E0543121A119B4421101841413021B128121422492848008248C8288021A82810428A90925628200894208A260825F39032CF4112485F2112483F41124A7261D24AB161F41B24A9921AB9455B84A3924AFBC
+:805E80003439242F3479A4D812F924481CF9A44A1CF8244A16F1244A96F1264A96C54A9E242DCA1F49D222F491248D121F49324A1FC9B24AF18124AF16D941F24A9219B24AB985B44AB924B44AB924B44A7B2498924F8394984FA2F49696C04A1F41D628F41124AF24E1417268D341B46E7111F44A841F48F24AB25F88B24839A4AF34395C
+:805F0000A42F3479A4D812B926F442914F82C1916F226C154722D6712268112F32E459F222C89E2C2D431F48D228F59124A3F4812CA9E9C8F222911D2C2F449921AF44BB95324A43BB422891AA4B4229F936488D946F22F549BE8014820400000000800200000000000000004001400848000000004C040000000040019F160B444006529E
+:805F8000002887118B418B411A8E116C141B1ACCC81842390853043C62841992481D242584A1492482493244122038228CE98174280210C2111992418A24FC1248421E48622B42A1A28C26F257D824A02823C21126B218921A166342860314811B8423C84A112C7811F42852930D16041748254214C2186722846B211E24F0122349D84257
+:80600000038C51412982C1288F44291B2238888711112C922810489914481C28F4346F24412632241CE421C22829F121128D141847845A18582C282C788134983721BCFB81524521313153681A60324D182AD182741232A445717235126F8621B832348189271322C522436112AE499384F86A1289925826D88252684AE81CA2215F120346
+:8060800000241242128160121F8894121982B181E414F83148816044488148442483542287446110263924122290840084CD1210C828CD829214822069142004421C9412228148F7CD60124002008184210020144111E124688118118845180840922811402204800149013482216012402108B0421844028D82400288A281248F6A0110E8
+:80610000C3116088AD112C81612264112719148124162E02222CE292859141843B249011272136894578322824845223244C13C4112622F148121216022385B11924A82C221E482024868114FC8C3160121418218812161808241112508115123D428091212A5584831438413018181E212C8464834842002021082212182711002321C99E
+:8061800049882388280429242221542C8F1F0124400181B1242CC122412413681400182E828C21429289121424289023254328410A20819217213D242574124192218C0498214823C414A0248D228C0180AC2884F0FC61249902481A9229002B289C11011D14942991244048D24182618245C812816D42CC1901844C841A2105A22A618492
+:806200002214A082482238188140E61AC18867228E148B16872132456A4480F642861028F1284684901818124922444804814A438404602212502141909148891412229111253482207842180842A741200120011624860484005022281A42F4D9461446041065244068282041618200812482888351482004282860211044088304221217
+:80628000426021181200254438480040028242002009004FDF0C1C0485D4121348C8182B122D3C131161928511B8141494CA248B12CB1229314416C12C291208422546A4384E184B4120890487231381B18A2394368C22C41800337188F28422C92911F822121684846322F73130A61222C46623014081142841221108204805894208603F
+:806300004471565182818C0424B02288E222090042440018160880A1482304422E48189088430249F41AEE4002100116029022C02C9022C0182301142C0810C818C02200252882442822C141244042880141108C442201854421246382180048411841DFE2064238322812602140A2282C8182810185432201342448400800A60241445814
+:8063800044412D14482D24704804800481928089181492442141984182588908EFE2068210A81413C12124282A410235D88418482202282120016027420000102802008001A1221008243848C05218004082044200F0F192101281048D228984021011811481524219A4121812C044142140C442888A8481A841841C22028C082A44820848
+:806400002082010000850490A2004C032426F8A3F800121814000000813612088490821002802148AA28842B14A913012081042954222812181880238401301188C0124A01208885A1218A42F1BDCD00143018812481002D312200008C0221B023850A8100001042088114848043816444C9240122884682654800008C420282244221F0E5
+:80648000944A204682068828121289010080218121316138004810019084A021238141A4121218174490422800820040244464288A8402222A21220821825FC60C3088608424130112004351484181A8002012B812844122C441904142A025482004800312250200582CC44180B418842D022981084800284AB8660F268892482811860868
+:806500002C062C0515941129160244408401112741281842881200B04148A1C14215B848A1C2A02128520022604280022144E044A281409412E09B4422E2AAB238F2692813E81269211226B283C22E19311F8D4829FA422316B24372827221A2C781CCD818B166F2424A4B44AF292892144AD488868195121F323413ACE82435DAA02D3E63
+:80658000484E5A8A92168ADC84C8C1258A95181A38421252494491A8FF8C0E4AF483111818BCD18892322B3289E122352187144CE12191189F81919216E3438111A6511AE1A2C6C1004E582F21E284B41C51414B454B854721CAF1242232CD2C2E148021041F220430D825A6A427432225E443E3421D64468542F4CB1D802241E811B41817
+:80660000725312C8422B2116B11EF1222A8E2B70142A62422A8172528971431138420027312AC211B2847AA922BCA2442F41E28491322381B214C2484922B952A1451B354CA51949E524D2C2E22AA2C8C2AED21AA1BB8AF4B23A24000084660242A08420044243E1143214461344116414418511062110624870C8846148228604862C22B9
+:80668000282208E0222821022443C822413014288012047FC448B2E2F22123AF82A2328F2CF463E98F86E626F32A681F33FC6AC826D222E4A1F5CAC89FC2F3C3C66F745517FFC5F4E7A44F54F4C5D87FD7F6C6A6AFA47417D7AAFAC3C3AFCEFEC484CF4DF464E48FC7FFAFA44D475F55B838F89CC48F84A48BCF4CFC3C64EAFA23E36BF6F5
+:806700001F14F1F8DA6F65FD56144F42B316E14AE34E2DF4E4F44F44E18BF954CCFF27036E623F92E782E38347F29311AF87E626F23A783DC13F16EE27D7EED6ECF4CEDE8FF4F493975D344F14F4282B3F3EFA4754DF9CAD773F38F84ECE3F35F12ABA3F37F57A6CCFCCF9F8617AFE48CE6FE9F9A1A23F92DEAAF89C9C8F8EAD13CF44F507
+:80678000DCC46AF273F32F477FC1F1E8EA2F2595326F43F336322F6AFBE2F44F44E1245D468E88DED81F7303F01173BF91F2283816D213F16B3929F53A38173CB75AAF96F412326F65F1868C4E594B8859E251F14A492BAA7B459E9C6E781F3EFA48CAF7F1AFA4F64363EF8363497EC96AF4DC5A3FE5E43DFF1173CFC8F238388F8DAF237B
+:806800008F84F46828CAFCB3732F48F521318FADFF9ADA2BD54F26F71A1CBEB26BEB3AF2C4D42B9A4FCBE984FD5DF7242F28F61B319F93F2793887293F95F57B2B2F22F63A3A373CBF3CF63B3BEFA1F15A12AF2CFD111A5F29F954715E56BFA2F2E7A44F14F581949F96F7C486CFC4F45B1BAF8EF77173EF8BFAD81C4FC7AE27CFAFF7B2DF
+:80688000A65F61F13B33EFEBF3BAB8CFC7F734348F8EFFE8A84AF4F3712B5D1F17F2D8EAAF89F524966F23F13A1E2F2BBBF6FE7434EABFB2F8B48CCED8BF6E0F002A0118A01212221222842001120020A1242004282142A02420842184012A0100410048220000482081228882242408829FEF0F90215081859221225022281411294118CA
+:806900000A2922921210028901C04281201102260824422412248418302CC0121A24041886B84201A5021812889A8448F111E2D022F51124A5F2912487261FC9324A1D24AB141D24AB941B28AB9453B14A3934AF343BA42F147924F84A914F82D418F9244A1CF8264A16F1264A96F1264A875D4D4A9E244D5A1F49D224F49124C5F2912C76
+:8069800083F49124A3F48124AF26F1112CAB9419F24A9251AF747924F84AB443F3429447822D944F82D448F9244A8FB30B29F5116CA5F2112466F2912423D441B24AD1C1B24AF99124AB345B29A74453F94A2653FA4814578AAD147F8AD44AB1A5D548F127C816F5275887196D4A8F5952348F58F2245A96DCB4F49164473217C983729181
+:806A0000BC4AF18124AB161FC1F26A8515F44A33518F747114F848B443F142A445D842D382E444F922527F710320880400000040040011440000001002001008220080080000000040040000000000B0AB01181C1128C2244884112E1858A1481671C8014818382B1224442240388B150844418F149A226314B81428C186D01238221B869D
+:806A800043041058812460298C412681A42144C0446232F08211102198148C01867912E4A102A8821E884229D149C8189348914C8391184568C81742C0428F44C211AB5230182CA2828B24298621836181182F83C828121822181E2A8420C128184638221A32221847142CF24D5940212D81C324872C16DC2132388A71822868435E8191E1
+:806B0000121A68216284472126688847111D88972862B026649C2A7141E282984CA3172477928133812B878C021293022827C3814138424280E262A4611AE6217242011811C1841001160868E0816434844CC8488531218D1412A14144260A488594158361228163022A092C0924846A410C1281C01216C882122C418861832D2412214057
+:806B8000044FE705002428420028004A08891801128822006082812A0484002002902820210285628840040020040040882801411800F01CEC604126041100211181242021042B81C7288741C058412D884314113C2322A02129B848111202424180A12841488C21088C1418128868E400A96462828A024220F47BBA901440122104000079
+:806C00002988415821988C49088C542489384414261C110816028301218C02180022820000400200101228C81280084220F4C43100498284022490218120044E848042E641288201608285E22184A2822022A84221004844288CD128C84C42168C08834428146848CB420027844982C824120018EFC50D224002444AA224810040C848001D
+:806C80002B2129622200A81008841912023400440012001800282200002A08148200488048D8480189F8E12D00240018A140A4420029018991188081618244128E441842100816440840A8491220028C2252828502661804008011089012890112A800E731241004412811800188860820044249080080012004843012812112844100000C
+:806D0000002081312842001002181A02800600C0E1001002304342CC818278884218384883911243E3214208225212C0488503493113A121852448040089012598282082220488242008122B41182A64811A088177E730224424444B128C22024200124212A04229082841984318880422811008803158181222208202B022E181140C8002
+:806D80000213112881028182702408829FFA01000000002100204408825084244D484018480800003018218280021008220086988810688840180800000040F845FE00490243410C2189218128098180281138428904848240425884244284848002202102702218381886083088001200228B818C388C10C48882F0D35E00268424110CB1
+:806E0000408A01186084842008678442418486480225D84848028410280200404808228921988830880018810088814908418840F83F7E50888B444A1404108201824D8445B424A222A21281107842481252A28B111AA1898A8804811231887038C8288B444AB44A1208849088504C4D8C4B222A322828838118082484881AF1FE170000E5
+:806E8000400200812008002008000084100400442100000024001800182200844008884008000000A30381841A8404440048C044414C228202401808822490121218888C08001419410181AC6424480081004014C424268802100820582290121FA90D84424A2401200100409488282D8800008100254898148008000086018184124800D9
+:806F000000008048248802880012001002BF3306800400120000448002000018002180018884000014008480240100001048148802840000002180F1137C00120000000000100800001008008100400400000000001200008880084881000000004F790C8931482005000088457484B424223222004484400245A2111A329460881008110A
+:806F8000111181B048242404000083584449B824A22622128484002C4842A2115F8C0150881A840400008048D844A8242800840050822512061E98888841004041018487811A8414020000405448842E28000000504225F4AF530040048001000040488884118A088100104888020000000021001A880200810000000088200200F07CC180
+:80700000000000200100000084000090881008410044000082001280180280010081000084000000004D1A00E04101A011128084A84889D888285482004187818189088184430281414100A09840022112238802160881A08850888190188100800841F0CDDC2021010080010000820018A18C088484814181C42608C42544080000121800
+:8070800025C21220012200848488848784008C080000412B7D00001A41120440088800853AC882100820484858448141100800000020A118120018008D8881888242828648182821220800EF73096F22F212222E122B11122B11C0122592821E111F11B188E999F848888F18F4484842151981548985B844E444F424444B244F4222E24253
+:8071000002286554442E246F22F212222AB192A1812B99822C5122881E1B1F11A1989E898F84B888E48424E48404488558884F84F47777F0262265A2121A211102502229C8133B1119EC89F818888F18A44C4246591148848588F6484C45B444A222224400444584F226222D822AA1131AB8822828582229C8111B1119EC89F818888B487A
+:80718000CA240480445C884877DC00000000000028220000008022020000000000000000000000000000000000002FF7030000000000802202002222220000000000000042422084A4444A2404004242000000000000F0ECE6000000222822008022822202222002000000004800482004A0440000A0440020040000000000F08EA80000B3
+:80720000802202000028A02200000022220000002004A04400480000A044000042000000000000DF110200000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000040
+:8072800000000000000000000000F0723F00000000000000002200008002000080A4444800004200008084248404000000000000F07DFE00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F00000000000028224C
+:807300000000008022020000000000000000000000000000000000002FF7030000000000802202000000280000000000000000202424040000000000000000B0A90300000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002F
+:807380002FF70300000000008022020000002822000000000000000000000000000000000000F0723F0000000000002822000000800200000000000000004242420000000000000000009B3A00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000069
+:8074000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF7030000000000802202000000280000000000000000202424040000000000000000B0A90300000000008022020000002822000000000000000000000000000000000000F0723F0000000000002822000000E7
+:807480008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F0000000000002822000000800200000000000000004242420000000000000000009B3A00000000000028220000008022020000000000000000000000000000000000002FF703B2
+:8075000000000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF7030000000000802202000000280000000000000000202424040000000000000000B0A903000000000080220200000028220000000000000000000000E3
+:8075800000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F0000000000002822000000800200000000000000004242420000000000000000009B3A0000000000002822000000802202EF
+:807600000000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF7030000000000802202000000280000000000000000202424040000000000000000B0A903000000A7
+:8076800000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008002000000000000000042424200000000C3
+:8077000000000000009B3A00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF7030000000000802202000000280000000000AB
+:80778000000000202424040000000000000000B0A90300000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F0000000000002864
+:8078000022000000800200000000000000004242420000000000000000009B3A00000000000028220000008022020000000000000000000000000000000000002FF70300000020020028222200220020020000002004200400A044484800202404000000000000B02D0C0000282220020020022228222002A0220000000000A044004200EF
+:8078800000A044480042000000000000CF5D0500002822000080022A02002002220000000042004A04800400004A040000000000000000F75D00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F00000000000051
+:8079000028220000008022020000000000000000000000000000000000002FF7030000002A022828000028000000220000004848480020044200004248800442000000000000DF930F00000000008022020000002822000000000000000000000000000000000000F0723F000000000000282200000080220200000000000000000000009E
+:80798000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F0000000000002822000000800200000000000000004242420000000000000000009B3A00000000000028220000008022020000000000000000000000000000000000002FF703000000000080220200000028220063
+:807A00000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF7030000000000800200220000000000000000004242424A848404004200000000000000F0C13D00000000000028220000008022020000000000000000000000000000000000002FF7030047
+:807A8000000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF7030000000000802202000000280000000000000000202424040000000000000000B0A903000000000080220200000028220000000000000000000000005E
+:807B0000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F000000200200000000000020220200004848480020040000A0444800000000000000003FBB0F0000000000802202000000285B
+:807B800022000000000000000000000000000000000000F0723F0000000000002822000000800200000000000000004242420000000000000000009B3A000080220222000022282220022022020000000000A04400420000A0440020040000000000F089B20000802202000028A022000000200200000042004A04800400004A0400200434
+:807C00000000000000F0353100000000000028220000008022020000000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000222082020000000000000000424242000042000000000000F0CF9700000020020000288082020000222A
+:807C8000000000000048484A044A0400A044488004420000000000002F760900000000008022020000002822000000000000000000000000000000000000F0723F0000000000002822000000800200000000000000004242420000000000000000009B3A00000022282200802282220222202202220000004800482004A0440000A044000A
+:807D000020040000000000D0BE0100002822000080022A02000020020000002004A04400480000A0440000000000000000B0D70600000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF703000000002022820200000009
+:807D8000800200000020242404002004000020240442000000000000CF6A0B000080020000A0228002000020020000000000484800000042484800420000000000006F33010000002002002222200222008002000000484A84044200000000004200420000000000005B9D00000022280000288022020000000000000000802404000000B2
+:807E0000484200000000000000F0FFF1000080220222002200282228000028220000000000A044002004004842802404000000000000AE7E000080220200000022222822222222222A22020000202424A444000000004248202424040000000000F0292200000000000028222002222222222A222202000000000000000020042024240411
+:807E80000000000000F017D6000000002200208202A02222000000000080A444482004000000004842484A24040000000000F01ADD000000282A020000280022000080220200000000A044424A24240400484AA4444AA444000000000000F0D46B00000028220000008002000000220000004242A044484848000020842484240400000081
+:807F00000000007FB7080000000000802202000000280000000000000000202424040000000000000000B0A90300000028008002222800000000000000480048000048000080240448000000000000F01B3A00008022820200802282228202800200000000000048428024040080240400000000000000F044160000000000002228280026
+:807F8000000080220200000000424800A04442A0440000000000000000006FD30700000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000008022020000000000000000000000000000000000002FF70300000000008002000000800200000020242404000000000042202404000060
+:80800000000000F05C12000000800200002082020000220000008004800420044A04002084044848420000000000002B6700000000000028220000008022020000000000000000000000000000000000002FF7030000000000800200200200282222000000424242000000420042000042000000000000BF720F0000282220020020022231
+:8080800020020028220000000000A0440042000020040042000000000000EF5B0700002822000080022A02000020220200000042004A04800400004A0400000000000000008FF40100000000008022020000002822000000000000000000000000000000000000F0723F000000000000282200000080220200000000000000000000000098
+:808100000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F0000000000002822000000800200000000000000004242420000000000000000009B3A0000000022002002208222028002280000004848480020240448004800424248000000000000F0D7D9000000222082022828FA
+:8081800028208222020080020000800400004242000000484A2404000000000000F09141000080228222020020822282220200220000000000004A8404420000A0444800000000000000F0F3D50000802202000028A022200200000000000042004A04800400004A0400000000000000002B3B000000000000282200000080220200000059
+:808200000000000000000000000000000000002FF70300000000008022020000002822000000000000000000000000000000000000F0723F00000000000028220000202282020000000000000000424242000000000000000000EF9B09000000282200002280020000200200008004800420044A04404474449444444C5444430444444503
+:80828000440450444100F0E26C00000000000028220000008022020000000000000000004554444144450440445444414544440400F019F60000000000002822000000802202000000000000000040544441450400004400451454444100F08B57000000000000A022000000802202000080040000004800444554444054444514044445B4
+:808300001444445444451404003F1C0E0000000000802202000000280000000000000000206444474441400445140444455444445044414100D0DF0700000020020028000000002800000000000042200400444514344444474445140444451414544441450400F09843000000002A02808282020022008022020000800400200442420076
+:808380005044453444444143140444444544444454444100F05FF1000000282A0200800280220200800200000000004842000000444D44457444D44454440040544400411004002F790F000000000000000000002A022200000042004A2484840448424014544447444C0442004410445444440000BDEE00464848088C840130142921482D
+:8084000004882C0644126824002301822198218981188C2802401842C8488C8424030060420068C0644448428420F9167D20A4211848C945D468F4144846A4844420514826167C24F24832262EF922988AB148C9886728124D12F08812828CA1388147A8C30222812CA481B0A861846872281AA218436842C14C92182A81CBB8929A14F8D3
+:80848000318100841248126021200449014034840028326E828728A0412444002C88013088008504400821800A281200A21004200282588818F079F22084032024143C18448E1620881108460A46480E288284848061418028889924814D2228C02200D884121800A01218829048448D442064828448846FF4098004814184480048004122
+:80850000006160618001C082188288211881210010081008428448428982248402440020228101881888F0D8A50010088441604400000022284D2200208101822400219018841288820000810084488002004428490230243800A0815FE408000000000000004022080000000000800100000000000042800100000012484400B0B5081213
+:808580000016F41148422210282484C18149140843782102C48908402242184CA4C2128748245028A2CAA2212013C118005441101248048484283024288004DB61400426840245B81264C1B01498988158808408D02424D242A4419241004A9111A12223C228424A8101219B2988288200888181841860882012A21890488B128E18484FF7
+:8086000027051220C2241F8144A842C311684C8C4CC8C1496484824C38216934242FC48884482642381455A2C2224DA828218D421AAA861AB288032008D014184C588283413488818D22228A4184C6388A84F4842410044112C044290120812181010000248420810100838411C812402884012440A1292661810000000000002012088954
+:8086800001CFA70C22122144400812000042000012201302442410442422440824002822824B121A6222860884211110210442C0220012608842F042FD905614229962123F628164821A741814225138152851C1413C6282B041E215725148D18132291115C2143C9528D22A2C8191841E21248581E43126A28130CC8112118929A1A186C0
+:80870000384849CA488D444A8128F4F37BD04242210226420816281108128503400C2C42A82129226684154248091382648428524A288122A21A642226F21842909821CD416011108821C82881A28311C818008F48075218219D24141E25298422C4160042941811411921021CC41116051CC22415446241172184882302184918816391F1
+:8087800042132A022048084621298483384244484C242C8CF423C37012D424E261668258255C2C1D2481129E2844890252A4C220481858488441424B94830680C6E1157448263268C622041681014280278283D248914162842E8418691114B84CC242818DF5502880840180024810041880220110484484222144844911081221111284B3
+:808800008120042200184C0181488144122A08800220081E22F062768004810000168841081609C884008C22A31216A14180883222A021294888C1620041181200488604130242800100284244800200442F3F44E24451261E2C1688119E2863831528781198186084182384226B428D14CB248C81C8642F44D2813438882CB511CA6456FF
+:808880006C824C863112C031424308417826A842181246813828901423813288682885F4FD1C002824284210548181128B12008A844188481868811423119244002824608242241002C80080014AB1110248188C122821044EA422444150844A011F7104400412102692421812162831148321226181C02132162B3111408242224822D46D
+:808900002195442C81C152182C81C122184608800400421E88A021800128301400CF67054B142126982E902816941424823042604C21C1233482604449821452421420018412004444114B281902004C61A11124818009441840C4848CA114CC9988418D24CFC60B000082184D281A0212100221842190221240840152001121180018806D
+:80898000318400411304130480521489848801006082811881209642BFF20BA02121428120180828401688221108242014028A041082A848242AC84C212CD241022914A4414321C4225241212E12184A9124184244529842C42082019F730A4400404689042820C4426883014901A41924810810088C0219014449010030114800100221C0
+:808A000025028A0182A0484443088A04208828F679B4002822160836040068008082026117422A01688181108834288112996112C185817444618228682E1927D1430214156C3211C058008484622828413012822FDA4A8232146C04129018298404818C0868418880010048904241800800000010448684288A1986060000861424AE43B1
+:808A80004441421A884348F4FF1F80048440084088511412301820011212107252029A0400221641C124C011490189239418844344044810440400488488000050422A04E799D082024964421200262402400449524840085084801812C414A081480022E81CC2888284B02404AA044332442081C22480C2144820C434C44018CA88BFFEE0
+:808B0000056F46F12624F06E148D1A444FA3F12C445AE24C4208D04404C145E81293214D263D448E48CE484D148429E28371922151924F52725368C225F881C22BC447242371DCB4EBB5A264C45556285532124AB14CD28445B49C7248B454D348D1C8D128D9C8E325FA4C483F234582A4118D281A22B139C3242361227018F21882228F31
+:808B8000A8312816D62A7414622316B824B812918142C04815C2D8144C7311EA42D42491C48D155743DC13B42155444F657326825647DCA342881A6149C964444B422E844F8496444789C0544CFA95AD804272244648548683E48483B131A1142B44AFC531524FC1D382A911A3F842114AF55832421E122D4855268232418D1243AF5449CC
+:808C0000A9211F41B3548223F328343CA2A1941A75428136321D989A828CA8952AAC918B483AA827444B8B8782A27743004120026B12482190824888488812888098412880024224C01240A22855224802260324C081400234408304822008822098280082F0B6DC246F66F4161E65F62674CF42F21D1765F66E242B667F5CF79E1829B5FF
+:808C80008AF8C414CF29D12AF19E9E57783F38F22C3C4FCBFB28387AFB4E4E45F66A6A2B669FB5E4ACFC6F6F7F15FF18AEBE36AFE5FDDA545F35F4541AA7A11F71FE5BAD8F4DEA44F66266F5FD8E863F16A74685B8485C884BA2CFC5F464448F46F4ACE84F82F32C3CCF8AF788ECBF3E45F266466FE77526FE266CCF62721F771EFC343695
+:808D00007AF79735AFC9A1988F48FA9414CF69F19696EFE9F986363F39F33C5C4FEBF97A788F87FB5C5CE5F868EAAFA4F55BD92F9DFDDCCEFFF5FD1AFDEFCBF37CFEFFFDF557552F83F53C18FFD1FA482CCF4DCE641F5256BDDF7BFA7775FAF4383C8B448F81714C7C5CFCB81C8FC5F5FCE8CF82D3CEF23C788FC9BF1A41B236F61454CF92
+:808D8000E1F13E362FA3F23727CF85F64C345E525F75ED45B1C2EC24F65696EF41F19C966F61F136962BE6CFC7F3B4B8AF89A599CFC455448F867C32F24B491E18CFCBFB5676EFDFE74BF358C86FEFF7F6B44F43F71C3A4F69FADE8CCF4EEE24F62264EFE2F2AEB42F42A3928F88BB18FD98984F46FFDCDC4F46FCF8DC8F8EFE9898EFC277
+:808E0000FAA4AC8FC2FBB687246F63F63E76AFE1F17E36EFC3F33D25EFE7F676747E725F71FB58588F84B4CCFC54D4CFE1F1161EEFE9F92EBE3F17FF7C7C4FCBFBDA588F8DF94C5CC5FE6A4A8F83F1C9599E9BEFE3F35D7DCFCBF7BC3EEFE7FFB53D9AEB23F33E38FFD9FB483CCF69BE46F62565C5FEAFB76AA7CFCF89BB8CFD8898CFCE3C
+:808E8000FFFCFCCFCEFFC8FC8F8FFE9C98CFC9FB9CBCCFCEFFCCE58001188441844008001224008444802201200400420020342410242402430249014B124824122212A04100281A842241244104BDF750242847229014284B14286A014E121242846C214112A114D048A2488901852432181924712158482A311820C81112406816842568
+:808F00008252148C6214A08484884D4888844A48C8242688C849BE8CD024F4112487221F41326C1F41B24AD141B24AD141B24A9921AB9453B14A3924AF14B925F4429157822DB15F82E414F9254A1CF8254A16F1245A96F1254A9E25ACE449C24A1F49C2431F4952381F497248F39124A7341FC8F24A131D64AF14D981B64A19B54A39247C
+:808F8000AB9443B24A792498B24F8284F9244A4FE50E65FA116487221741C356418F14D141B24C91214E951D2CABB453B14A38242F14F921482F647985D812F327481CF925581CF925C816F124589651859AC2499E2526E8C9D214B49156181E2487341F41E234E8C8F248138E248D151D24ABB419F24A9443B34A3824AF44798498326F56
+:809000008294924FA2F53E88404A04000000400100000000002100800800002100000000840000000000000000F0C6173024105628109824108981220144C28C324981C1C05C1E21C9C62A008D12D02A61132C02184327012048692216184C0A00AC41489842458804C3342885644C80F2928E4011054C11889112844C8192484A823188DB
+:8090800053C1121A280213318142180081205214D084C4228942D2146426121228C22213B2252841D1120498C819A1282E928B483AC842A2843695445F790E1564442187218487211E24301870248826C38C4CE5A2F1815883420447B976B144313860888C81921E2F12312C112B2143162E34428A5181628353945F8802144944B2281885
+:8091000008C3AA2446C8582E48CF22C8482AB114A6F82012114404008445A1214212001C080081132104894202002114203422811813252201282C0822901250121688A1482F14012C29C8A410328444707B0600490118400249A14120081D4844C0121388012921084881003D485022852172580440022521611200131104180013292401
+:8091800001C09422608288F0F2E6242A24312212A3FA2354296981A5F12788A992432361482D185B49418C5118218D641B148450165C942326B4157274C1162022F822124382C2164D221A6483224F2AA41288392C3F11241CC1884B618D8262528E2418682CF81BCD2422244B12B01A5A238225D894F112228332831888601150121012DE
+:80920000A618845052172434542E124D61B46083822721412C024D1219A712224B482564281B1818111118124351284B82206283A888F79E14421880014B34122C01CF1408482147B4C9E148341489D981018B164601488144282E4854126321324480221272149122400819A32120A42C189227148C282688A5164C0842F0B53D0043013B
+:809280001D18528044C4114C318143C18814988911B488048C82423814C024844D48C82D9885548215048A32881CE444614289011601411662241442704AA14289A841448448AC29149428DFEE094A41686428442226082E8400C4909849C2868C45064125820BA480012E8448122EC111266281151824348880614220B121C42486B28CF7
+:809300000260822220048110A618488FC40820322841248149911A8A0432004C54812182188381B14C0180240811188002224820263822800821269C22828B81008880014D8880832B028344B447054AE1428162111E4683F2384643E145C2148A136888CD815B18E9D882C1C6702498428BA144462A18C84C1A8241EE96684222B21338DB
+:80938000411AD2484888713235281896A28386B1A22488A44189AAC1A0128B5A8143348C2E448FAB0800C5C22C004048011412A04181124E84169818128D349012C03440D12434C82A012054824AD2244824220950244C6216CC14424C5281815048491408B8A014849DED20A2484C5224425800122286A84280441A988820942182411DFA
+:809400004419529215828212081528988C82001342611484894318981112421480411808002AA48200821FAF05441424852152522442448D1148807512B1446142100221641400450245227814924886128412523894244006104106269688242CD858088846A8821840488401EFCF01249604188C028150848D14120000B02264224094CB
+:80948000412611D281C424441120422182046841100C3800422A213441128624112844840282844CC1684866F25ADEA061288B212880D262741C021002A143142684914A40594242444146B228642164512C02842187284AC24A242420441544011024B32884B41228B28201234424042642F836E30022A412421A044800282240081A3282
+:809500004200100113069130212A190893D881328812220013D212943126088C8262185C0A1882608A85648B8883218281E811F4426FC048008483418802A442244608008211108114281608888F1982282408E0454861241A68119044838304480010D841442981058064C388802881F2AEB9001414344718866515441814141048455180
+:80958000126011624B211028D1848291448341951138122428618086420860541D226485721862242C2218412281418284A4184484F0E7BB20319C1241408282A22449924800801134142E412246A24A412848628044018123024B41478183447848044414524142E046A821521441885694244B14C4414CB4886624846FE103848024427C
+:809600006482442C41622424E4428C324A192408800810828101888582420128142845618211688481302813210514CC188412088A140888207122084FA141A1322F88B22D1112915471A395181E12312F2414CA481D4C4F14F212198D3146D144B2C4A4424AE687D643E298F4413C1F22C6254E288AEA8EF4C8242F2465881A564D50483F
+:809680009B44CCB468F6234842AF5657182B228E3D45B5C8D482AC984B444A8822A9141E8123F2A213A0441F4B01DFC3F2A86E1FC3A8674C7422786BD488C228AC7419E424E1226D2C19E422F6495135045742D18B86FB221227818B1A271313F2128667229AF879212125D9136211218B1554CF11B112A6893DCC8EC9B9F851921A71988F
+:80970000F2742C3E926FCBF5C8884AF414AC8D288E686FC40543D114E4A1C21363F54823E44D3247654D69DE4283227544331E35EC427C6202A6C2A97FD4C219544D4B567422F38485778195721A992D1E88CFC2D2467461E1267228F667781E295F1252856CD21851254B3F1F25E1217488C8884F4293488F8812D844F52CB48B4A6E52ED
+:8097800083F58D9800001880490800004044081508111880010042000018002022140400410000000010022902000042FF4E0B4F41F615259791DD455778DF74F61F1FED2A6F64F48FBF3FBCED24F44A465F75F41E3AE784AFA5F1381A24FEB2AF93FB2829CF97B374F4A2C96FEAF47C5F4F62FC9794A5FB5251AD8A25F26A8AFF59FD332B
+:80980000716F56722EFE2368B55888CFA4F47E6BEFE5F54BC95D823D6AAF6EF459D9FFF8F86A6AEF8AD264B98EFC5158C78889F4D4DC26F8FF14D044F6D56595F32D275FF7F1256F7F75F716662725BF7CFB8F9FAFA2F22A26D771FFF5F76E293F3DFD22433F35F5A5A6FFB27A22F17C1DFFE7F5A383FFC2F97D5DDFE2F697B82FB1F3426B
+:80988000697FFAFA921A2FA5F88F8D3F33F32767F5FE3734BF87F72928CFE4F45A45CD1E2F22F7F6D44EFA2F2BDB11D8DFF8EC7CCB5DCD96EF43FB59FC8FC9BB2AFF74FC2F83F513AA141F11F43145DFB1B21ED375F24B67FFF5D5EEF7567CFD2FAFE2F22A622D227D57FFF5F5662FBFFEFA7A1BBFB4F4EEAFEF9AF87E7C5F16D674F382BF
+:809900008B6F92FC4C4D4F62F4B696AFA3F3F353AFB4FE2266AFAEFAB2BB7F73F72667A5FB232BA5F82C2C8FA5F34A6AAFA7F3EAAAAFE8DAABFECBE28F85FCDB898F86F4AC8E6F43BB94ED83F9BC98EFC3F4F4DCEEDA6F6846F111611F5BF61C28DF91F35DFFEFE9F35F7FED7E5E3ABF35F35B5FAFA6F246627F74F17F5F4FF7F3D99FA7C9
+:80998000B6BFB7F5BFBFFF9AFC7775D5FF293F3F3AF83F29DFD5F73C5E6FEBF9333B3FBFF5C6EF2FCBF7F2AA7F3AFA37377D27F5FF37373D49CFC2F27C3EAFE6D6AAF1A2E2AFEEDEABFACBE28F8DFDDB9B6FCEFE8CC6EF4BFBB4B4CFC7FFBCFCCFC3FF54D68FAABD770F2A014941D8224178244238241E48228424008C44C24828C024B089
+:809A000048024C12F24824290121422B824261501670244188C148454158148C048A4421494548A44928488524394882BFCE0D406412D014A121460118118810180543880342D048884404C04880C42126084D484AC2984CC2434C2202D0C122C4242F327181A4948CB24A216844B0489B44A8268899444C029FA3012CF41124A5F2112408
+:809A80008B141F41B24AD1C1B24AD141B24AB911B24A19F54A944782AF147924F8429147822D914F82C4914FA2F448814FA264114FA274D8E1A27498C54A8F49E2A2F4D1244D421F4952281F49324C1F49324A1F48B24AD141B24A9921AF2419F54A9243F24A9247822BB4478229F924484AF9244A9F9F063CF41164AD421D248D121D642B
+:809B00004AD141F24A121D24AD161F41D62ABA11E66438252F3439254E935782987F8294925F8215B82728F1264887593B1283D832F598252A7481D482B59116EA49726EF18124AB141F48B24AD141F24A9419F24AB259F2489243E22459844A7B2498B26F82B442F9241A230F2088040000000000004420010021008008000014008400BE
+:809B80000000000000000000005012F011A6E021244338121221182440042C618B000080922283289258440041218111A1418118003228478180028483220815D881CC914884781230128A91241E24228E5200822082B62844484828023528F4118817858D2455C84C155C841D44C3146412914D28948346342C19A2256283641518141226
+:809C00001421A7118301495116D6C8321038914B12948CA6C38C2222659843F41DE3E021A43C84181A22028420522415B228E8189158CC12119C21678217A8B0143414914F88523C89165C411D2817438C66858521E1948363915018001E2C5CF884488D21A71E8E198A61821CB21822783288AA244F127172F4A9CF00408262248C9418B8
+:809C8000104A0416A8148414504848850446F424488113020000260A480052004054221A92188424802101601443B14881A4348031148908EF8A0C008280080088000000000000000000000000000000000000000010010011400170E705212811115C914C6E2250442F84A41170284598842502482AE118586184288B414524CE23850A5F
+:809D000023011B488051482A2A951344491868184A12D4E36212488941B842CA424B112220C2A689E88131849F3246922210817118E84EC2410047C12B32488543889A424316E6680914A0318E484C7844D1215298221B45B09601858CA2C690139AC484CB2654104498222AD418C18C8AD226A417218E8641228F810BC2BBFB0020082063
+:809D80000880080000000000000000000000000000000000000000110010011400FFF402219018B022018B1248232441018150484F8154621128B04A4198280011548C441462140024282C81B2224148014A81120883846414004880A4340082288E48EBE2206213C021F06318B01962238E492351281229C94114228B4812844D21141646
+:809E0000541C2D24C1421622B63DE421386C386B148E42284062223E482E142223247B818A88C118828B144F88D248B2140AAC22048B18289FF54222A212830112B9B4289111214814103282518D1128A5A121815B4194C15440018C41E615E234280229E42826D22282C1221D68281A2222C181230800424B28844A2332284240A848FF5C
+:809E8000140E400126912232B048E2253299294198181889C44425840C2483021A42782244CC452C845684124D4832160612602281124C219442834A384858932568818C342443A8142480883B282FA80E1815082A415284C3322412418B12125518C812184911012614911489A241E0442218E112618181148E44A041E084911810F421F5
+:809F000088008840614624800444182021588212842FD108428CB1491281014001204898148A042A08260C812129184492841628082B48C0814681025160C4222880012C31414428114C843A142282208302231564242FCA04132202604414008314081902105828C8100180C2110000002003A018A042405414812022C228202121C94425
+:809F8000F04218608684200100BFAC0A19A7211D281CC356857128644248C4835A188CA1488CF12A824C54C1148D2425C114C34282B84802148691181E89424B82821985C2144D184551488F180326220A2E115AA2944C38142F8291848CB32821829948497148F22FB90011004004118901181A4241081298220020DA1281441404245AAE
+:80A0000002282084418404222800221287144410418226840448200112008FF209641094164800812218461A01215818808124292982210220213811116021701822410220113284960814800441430124482A2108826604A6F4AE8140810128B01284228481C8A18114888C1882A3424142002100846621022A042841001594888D824C5C
+:80A08000023021411849022E1442004888008B4B800884BFFA4A1114110C8121A4814682048C66848424228942082127223022C46432004112471180830420024225C412A04321968228B1A4011A088961298D1480118809DED160148D24004C62824828896212184418410042499C942604004641318422424041120120D282941468804C
+:80A100000452111D64804104B023440444688825022384FCB5C520286421801191481830188324129843851448341270A1082A05211146044B8526111201A248802461210080928140A118828B148A81054280444428144471A843E184026815024818422002211888181C04004882601142221114298225222A02008C0219041E612004A9
+:80A180004830284C0410E842082008A21A08123FAD0B8C81121818084443129481141814160410482408424004005211004248000086820CA024824022D443041419022B4118005842C0B8485F2B0E1818188383342C4512C14A4304524483016870210844504840111442521824422400408CA1240040044812001C3A228088018AC23849
+:80A20000228CD184418AF2C26640188446222281812141285841C24A221C8C2D98422086312249A21226812801162847781205128C021AA6258D2482B0145228B8284482A8342C2808102826B22644F8B363E014F4C23149D1297162B4117238548A5E1493F8894A1E388D4C3B1148814F86E5CC2CBCC4245C82144A12B112C472AE89141E
+:80A280001817152D631281164261A98AB854B61684C3285F71C6421723CB1B19BA11DB21F1A881CA01AEA61A69ADC8436E5426FC1E5AD041711C6443008F46F5445A5A85F422CC1CB82A84D98CDCA4F1242189921E482782224B333E22C5D134F22C21121B1543B323A63826B82602A5A4166B943E3A27221302422AF1181529AB24EAF10E
+:80A300002844A0512B822DC8184F8A86B8C892A84F823C8ABF6B47B11422D2A8F236288FA15682F021248FA2E2152377417151634C8B8D2F85A4811B236F41E871AAE14849F1214426D441786191661D5256F92442188E144AA51249A62211188F44F2C486BED1C21B24439CC31263EC497841F21446DA213148CB723E182FC1B598E32539
+:80A38000FE71CC140000486110461866882541182258124825214825490540022440220440224432411001118848206122488044012C82040000001F294F31514F42E362F22B654E42BF3472427663F318127DB7BFA8FD2333BFACFC4797EF6CDC3BF1F6D6AF36FBE3B3BFB7F9D6D6CFC4F671713F53F2426237187F75F56AEA2F33F37AFE
+:80A40000782F29FF5A4A6F4FED23F27F773743EE8E3F3AF23153A5B8F1EC1DF6C5C58F84D522F8D9D92CF24B491E818F89FC46962B224AA5CECD449AD9CC2DF21842AF95061F15A4548723BF12F25C16BF1557EA3732AF24F5DFB5FF75F96331AF7EFFC3D16F64FF6634FFDFE93FFFF3F3AFADFD17D7AF86F661712D372F64F623B36F77FB
+:80A48000F66A6A4F75F54A7B2F3D7F5BFBF6D43AF2757D1F63F2A3F5AEA23F33F35B791B3BDEF15F48F94D5E7F7EFFCBCD1F3FF7EB799E918FBDD964B5A2FBE4C44F4BFDA4A4EADD46E58AE9A3F11E613427752F637722FE391D4E4ABF91F45A76BF92F2185A7FD9F5BBDF3B13BFBCFED755EFECBC32F3DEDC9F6BFFD7D6EFEAF1E6F4FF37
+:80A50000D4A6135F56F745637F52FA5577AFA4E435F57E7C7F79FF5A794F69BB12F1141D3E159ED66F6BFB1717BF91B1B1E915FDF5A59FB5F5C2C2BFDFED24FEDBF95F5CFCCD9E6F43BF9288EB8BFD1C9C8F89FB76F89AD86CFFFFBD347F77F63676E7E3FFD3F33E7EFFD7F65C76FFF7F67C76FF5FFBF953AF97F5DDF3FFDDFDFC5EFFD7FA
+:80A58000F79CDC5F47FFD5D4DFDEFFA474FFD7F634165F56F667677F53F27737AF96F75457EFF3F3F6F7AF97F3B4B62B114F71F132372F49FBB5A76F61F15E7C1F47EF1FFFA5B5DFD6F7E7F79F9BF971F3BF9CFFC5C5DFF9FD76369AF924A44FCBF974BC8F8AFB747C8FCFFF6CFCBF85062601430229012284E08824C248148A04844088F9
+:80A60000A24828112880126144A024A024220020028830248028613292229A442149820412809428C024D0710543081820A42142129021001816082A6414823CA24146054A0146352112408444812424128134112612314411224842114A084280A848A04A8182809488AE417F2B0B3CF4112485F3112483F49164A3D441B24AF1812CABA1
+:80A68000941D28AF147985B84A3924AF14B9A4F44291478B2D954F82D418F9244A8D814FA264114FA2641D2E4A96D5A4F4D8242D4A1F4DD226F49124A5F2912C87241F49F24E821FC9F66E121D24AB9419F64A9259F44A9243F24A964F82F44296478229F92448984FA2F43765D032F41164AD431E2C85F11168A71419F242111B21AF44C8
+:80A70000D981F24AB18CD21AA943AD974B438F5429D31AB822D41AF9245A8D914F227C18F1254A83F8241A87594D5B8F11D2A6F1912C6D1A1B69E5F2912C4E121FC9F244121F8872445281AD961D2C8DB255F8429736D8626B824E9647834CF9364829F9245A7FCA0900000000200800280000004410420110080000250100000000004025
+:80A780004104001800000000FFC9021D464511911CBB14584D281393111524420843548123046816F1144389521422D14011043622F418444362854314842A3214C4004D228143D18101A9244118846441410044CA2266421F2E01219A528228283041EC84C4621EC8129311B114443348A968CC214CA4128E5422A312384A146D41433126
+:80A80000239022302218211D22288A72580413B64A029A622319D84188E5882312F884488A3128418601DF6A091D44274784367441A841D9D468237121B42415F82118444F84119242A9F21C834F24C14245A1342F4132228659C2112F35C2543D7415D48222D44A022B24288584C8146C322987471981326A2F52D1480828494264CC1287
+:80A88000266242C2324EAF10125112842B122092414681948A129041141914A84842118D24324C58818120044410282215042A094D1328228C04482184981288114E149E4818842058488A8412743A0A00001468421698128C8401885018848849042004442014942843028C012C012A014382021218CC9212280018C012402388E18294EC
+:80A900001886088043F8AF3FE01431129C51424344483121481721704138191E441E4443941C60848F44C11D87448361822D2946581689D141E424C2399018A12743522971110A2628E192344A8D1283C24A4E18A96CA98C94482698924CA21276B4282428F2EC2A3011189C11541481108141818164814C511C4664C142844F847111DCEE
+:80A98000844438289C8454424D2841AC658100258AC25622858111D828E2946286AC11384812D678827848A18487218C4BEC8298648023F238DBC0420021426213743882E4811412398142528182414820044C012952488D21181C249221182D182AC114221812211A32142C012062218724805122812242381212832618D84649924144CD
+:80AA00006346D484283244141C25A2284190112902837444024C21911E8B421242150822588447120088821412488143041891CC442288232181021B1212428D1440C234F075F4C0187048518242164828C1288B149484478181DC83180412D08214321444C12E124841844904471189058420B211840100412860419314C221486F2228AF
+:80AA800008842284C50283F41DC580220213224925120820410100200100144210C821416024001A9428228721484A010012288222100A208868C1811CE484A221421A8808F03C7C904122ED228D21833431468C3131588B129180D114018741411212AD41CB14C912F82548976250248C111895282A748822CC41181C61814B4122981D15
+:80AB000028EC428A39188A611189F12E82688B348C741824499424486FF5012F8A4144419414C4221538488CC281901815182A2884141284014A110420A4424249A4254931181880810200004442001D64218246049880A34281868841F848FB40141461149058008C041800202142091024019490288001001442280012000012C0222C99
+:80AB8000C4980084102412120200806882EF7707112128211502284224C1421881164452244441662241D818742244048004C0413011161804284845021281124008D042020016244824488448A412447772601C134101123048008B4310210480A134584C4188041A84028142C1488095281028011A02608122840022C66A4C4141008402
+:80AC00000022212240E2B803219048B0480229119933102232161E4246024082820214D028042D42C05249512870120217215022810000218112186941A218C08A20221242480480F42D159014204121240642482283841111088384148891148458144249021250811E410000808181012021428242A82818828890A8238838A88880085A
+:80AC8000D058490180445882810016182121043048400800100829020000000040C82828A01424208141B882921A6C82014C08812260822A283362824F46044256322C43410128691114248292124444109222272484C0241614840440012228441400C424101A8652262210044088410830122414830120F4D1FE00C7180088188001182B
+:80AD00003041450822841B124781002325210442004638480083A612200184810060221828C04482C08610822238222502821E8189F25B27C018A0412212824A3121202442C4438D624CA134244241280021C0144888696141A1460114212884A041282502001200460428D0480850488826921825A4188FF54CB21574D3E682D25AE43880
+:80AD8000A6943E181F55F55864224A93111487854D168F46F1484EA7214C13B442744CB151E74422A444A0414B4587841D414A013185028FA2662181442FA1A22136C2422B215ABC82F388888A48E6E23A882F627982F22285282EAC1E158E24ADC31414829D14196285162894222CF1511C20E664D52481E2A144F1444C6B432D288CC160
+:80AE0000484181C904D08451D82B4246E241B42813A4113A02185682817122942A2781AE9287684A381641E183A8A2824C7888D22689E1126AA77F9F0A4E144D1916612199D12886562815D82CB638E431761FC844AB4529B233A31246F2381483B13151784B422F6212B852754A951217112B128F9232128391224CB112119C2227A122AD
+:80AE8000AC81B12853C86D382E42184CE1883816258AF228288C628A928A94C81FD54F235424B024016184671248211082044004284824C0242044224422542128244224442444400444400444000000184118418D11418141421FB842F141433FB4D147C1627DC64F67F644441F31F272625F72F228582CF4624A6F44F45E12FF74D27FBD
+:80AF0000F51252AFA7F76C6C2CF559499F527218D28242B81251EE37B44FE6F62727ED4E2FA1F1141A6F23B322F3442665F23E7A8B33C7414554468D126F41F9DCDA21AF88F8981EA3F83C868F8168489E344F43DBA8E84BEB45F7DCCC9FF642F243411E581E323D31DF6BF27C664F66F75333FFF3F36D2F8FC4D121F57B77EF44F45E76ED
+:80AF8000FFF6D27FF11A52AFC7F47C6C5E5A3F95F57931EF65F5226A2F8CBD12F45ECE2F24F45D5C57519FA5F6363E4F91F13C384F63F33664C7A1EFA2F33E24CF41D18AD2AAF21A386FC3FBDCDE2F23FB2A28C7E8EF81FB3486AF81F8B2362F4BF336B76F68F8A2B46E74CFCBFBC938243F11D511D589F22527B794AF83E225F677255F93
+:80B0000054F42F258D4E3F11F5587AEF64F44E46AF67F21B47AFA3F73214EFE6F72634EFD1F32D49CD588FA6F24A888FA454AC5F91F1262CDFD7F61C4F8F82F21A1C3E384F43E323D762F13A3AEFC3F33828AFA3F13A3AEF62F11212AFEBFB5A1AAF89FB9416A9D82AFB8CAEAF89D124E822F89494AF8AF27CF88F8EFD7CD6F05155DF716F
+:80B08000F13F2EFFD3F379792B238F85F77D3FFFD7F77F2587A53B14DF31F74E46EF66F5783EBF71F528622F63F26E7E6FC2F3173DDFF7F14C5EAF82F658C88FA1F5DD5F5F51F13E3CD7F1AFB5F63C3CBFC1E1A3F332326F43D3E8F12A3AAF83F23C3CEFE3F12A2AEFC3F3B2A8AFEFFF7ABAAF897B84F63A982F2AFBAEACAFA2BA36F9268D
+:80B100008EAF8BFB2A28CF8EFFECDC5F650549011C014008124116280234482412241E488584A42411830428001810148801180080418801242022098440480224842C020000AFAB03141008141A3248114306808241E844C1484C02301483041840C4488148858464542281002A0100264288E18112286124289841608A00608288169858
+:80B18000288AF4A517D036F41124A5F21124A7241F41724AD2C1F24A131D64AF249921AB9459B44A3925AF5439242F14F92448AD914F82E414F9244A4E816FA264156FA27498F1224AD6D5A2E449D2A2F491242D421F49522A1F4932481F49324A1F48B24AD1C1B64A9921AB9451AB944782AF443924AF447924D842F924484E944FAAF4B9
+:80B20000A7B450121F41964E19F24E121B6145C2688D134CE674D981D6489B45A9B924B44A39242D934F82D412B922F442954F82E514F926885E817782922B52D655969E246F92F4812C69F59164EF227491344E1F49324E1F48F246121D64AF44D941F24AB25B284A29FA4A14A22F44698AAD142B4A2F44E98AF17C770082000014000072
+:80B2800000000000001002188008000014008C020000000040042820410400001470F20612D012912916A114405814581E2880C44846C9488B21C41A8428051AD48462944668A18002894284110212121884D082236A81128CB2184448788882C828001E448481A28328F2F22CB0463285008E42997818842114384119116241417044A1AC
+:80B3000034304283821108200220113415182812182410A12141241D182228200888008019042E161C4C48C18A9F94433214174C29416111A71C4D18811D44F0255820A6145784467828E5448134C21E28188B41EB2181833E18A0214436341128218361214E18143648942893CB2822288909A61C28688200498171834A689883F95D7156
+:80B38000A04240C128C21220011E483011214508A01426880142006014002100851124810100184022112281412844088221801924742428240A26F261E5004481001902008051810000001C0120022400004008800228580000001504200418000000220040DAF60418112022642184F04A1114C8608445824104244284124004282214A0
+:80B4000085222142440A24113014200126062816081A1891823048442B8120182898284329F2BEF7004481289011A1D018112148618464184140220518284124001088410824229022481604002821174200CA011820148401828C02228E14A4DD998041018024022442A04184000000118100002222142480121408408101200141008C43
+:80B48000015021824008290800828120F24E6410022884180000820000000064C02428804284042002000042130200100100001280080000188C4104417F8B0F22000022193214284200004141D021028064444800100400008002800200818001562208004444905200224280F859DD0012440042008181004008840084410084004008A0
+:80B50000008C04220021C02100281100000000608120080010E8EB4E22826142841268114428480040185484205242614C16C4482244420028C0482002482601140084141880041280181464A118821289C24460C87F4A0F00000022128186080000001181002A04005048000000221082220290210020918200000048001800F024EB0082
+:80B580000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE004800000000448002000000100218800800001400848004000000400428000000002180F1F3B5000000000000000000000000000000000000000000000000009A
+:80B600000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000006C
+:80B6800000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000EC
+:80B70000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000022002041020000000080040000000000000000200200000000000000F0C2AC00008144812281448304811002002714008C0444401248020042128400000044201842218412084812812218000041F08CF8
+:80B780005F2418244428390218212480022028A1183088458811348184101861821018410A4222800232819A1278110449824121113198111841A1809144988C025E61200180C2248122812024120800009C1484C1484004248410022024C148220080426841201862124A811218E181841168421200A01841F0594D1002618425012C014D
+:80B80000454208402288214922180844131808811189028111812100200218A082844D111004141220482141420812460489028FB503181902111468851271260289814402200851422242224002C024221694848301002821002062C140880188194462881482248289618288438832849F1101422C9121A166C2111F42C45848C829C8A8
+:80B880001219C448157A1831652D181AB212C42C4611C8444222811744AC02301289841B3111381CE222C11E2C824B7444A32818E01801239D1A860C42986B41424448DF3C0B0031A1269112263141272248A0412481943151678116823464002C04001CE482118401843A4801108133322722A8456811A218C012884603C4821E48A242C1
+:80B900004304F0F519A04119231281946146DC8231442CB81808271442E08188162126433861844142224D28434226482A210428271132225048168C01460688139481A4981E888821C0182F418898248E44CD3A201262446041228428C141348141414874841A120814568221B412CA82166282322061124F261104A824890510614140BE
+:80B9800042C84C81F08241004302228064E418F0E871008487241C93488444161881824113942184D02404182A01A42001C18088084001818480A14218282881200418100287412008C4260223087028494211244204430145820221189048190188411485E28601101C0491102201000048002200D0A401430880180821A50212008042CE
+:80BA0000F6567E1414C02E49D1483124414D32C5213212A502511D4870C224911932A9041285A428848489B2820120C2146508882CE1822121C22116C816484928154832C86C016722B02C01304440F4A4DA7022420419226481818422441413018C841155284302841CE381042C4454241611828221014A02A0420028004184248485044D
+:80BA8000299A21819088002223648838F036C7E054125458212442890211152A01214818228721128145181884C814110062816602200100242400182C04142D822482150483121842080081004F8805241C0226381145028713200A281192812024B81484041E81222241A6460A361224430849028C014381E1841312422201408D81023C
+:80BB000020011884210046F8247F00242041EA15220427A4419346582C47A44224200250422A88112812A8218123028429811288022884848044088416348824A89E222C2A93882602328872834872370929021C14C544A021898421043D445810145D41D1252802818448181155421494880000183C981840C1811C42D1126144881C81B8
+:80BB800001C0148328848128E8610429053F3309961585121A3119447028210120711412212122210221251905512490B18082E18822E11148888204422B12294108802419C882102122294808848042F15279400840321850810041211D1426C821422724814E2248191121B242820284401218110126C1284058223C8C01800121218167
+:80BC000044112818002B4218212A212218F2561F808412040030111211846C4801814C48114202811280044001482502150490114C2181312141952212241241A682434208302A8422008821889F4243410221462522B246213226624B4312642031124303121A624360481110B1148291144E11812A01003028002DC9421814496525702F
+:80BC8000111218C288C0228652281602C283A1244FEF0F84B028843244C134432404706A249428412842D3445118002311A4121E24881534418348824881088619810C30288011484441041EA12581C944184CCA888816D86226F97686241CE21A722188F171526554186E598785CE7483A1474FC454214F61C1216B43EF53D58254D92468
+:80BD0000389A9C25285DA92149C16BC3D41813091B2322172115F81382819FDBE222B51B9213C5D4447C923A897B818B881F11F88A88AF21E184A1229EA82782E0733ACACFC70F2A5424E5F4226985D898F127328594155512D7924AF382489176D298C22A8F1491126D351F92E8522264422664111F58B272D1B34EEA43A12249381982C3
+:80BD8000AB3286D82161249B241816E7253241C959B28D2235E282A3212AF638228F69592849BDD8FAC84822CFCF46715556433C526D45F571625E4C1F21F2226127926E7A9D12BB13CF45F14248ED941F6431C136E423568887494D188F4255158D12DF62737A524CAA31122F88AA118788185C6B2549F15221297D12C94AD092F59212F1
+:80BE000015A1B1A6A511E3E822E1CCB88258822921F92258181EC25F2804426100200240880888C084122C084C188102106144000011860486846148148614624840444204283428001441904424418512241404FF5A41F25356664EF831751F15F758148F877465F642484F66B8DEADACBF2CFC5197EF89F9F5D37F9EFD1181CF91F91922
+:80BE80001B3F23B1ACBA84FA444422DFB2E2B3F21488BE91BE7FDF5AD1CCF8A48487CA575A5D875F5A7A89FDAD2F5D855755BF935347DFC2F26527B5F921211D84DD8C6FC8DBC4B8C4EC42F23A2C4F62BAA2FA282C8E442EE27FCB46F115537F72D68DE251F55975BF45F5787C9F76F5627B7F77FFFBD51FB6F77A725FF4FDD7D17F17F724
+:80BF00004559AF31F936B1CFA17136FAAEB9DF98FB2C3847429FF2F2332DBEBEBF77FB39FFFF5B7988A9A28FC3FBBDAD1B2B3EF2BD8FFFFBFAD1211F35F11B197F42D3CD7547741DF43BB3BFD3FB998A3FA8FBB6A6EF2BEA62E3C1F2B6BCCFCEFE2ABCCECC4FE9FDF6AC246F65D57756C39F53F35579EF67F77A587FD6F64B6FBF7EF66A97
+:80BF8000EC2B66BF84F6D155CFC5FD7563BFB6F2A6255F9EF2353D5F43F18E81D798DD1DCFD2D29DFA3939CF91C3F36FB1FF213796A1B34BA21FC2F2A1221F13FE15833F7AF323C1BF17F23F2D97A1AFC5F14D1EBFF2B392A8A9BF98F98A98CFA8F992942AF23E388FAAFBBEBCAF86FC1CD88FAEF7BF37144F25F12727DD2EBF57F2596DD6
+:80C00000BF67F77B7CBFD6F77B7FBF7FF77AFA3FBFFF5B7B7FFDF55FDDEFEFFF6B7DFF7BF3F7336FA37336F8AE3DDFD9F32D29CFD252FDF7F3FFFBF36F77DFB9F7BB37EFC1A8334B3B1FCBF335A62F23729FFBBBBEFF7FF77A22F7F1BFA3F27E7CFFF4F13BB5BF39F99BBBBFB9F98F9D4F2AFBBA9E2F22F316986FE8F9DAD88F86FF54F815
+:80C080004FECFDD4CCA0120084188445425814402141A341641A446681853611850485044C02808192128902812A0100254148013C6181349A4462811484248648A24985022810081FC80C821554224C62121F413642688B16482B128C34428487142A641422422228124E241170245818704804163122121880A12124128732480014C49E
+:80C1000020C99282983288842892E083A48486F386CBD024F41124A5F2112483F61124A3D441B24AF1812CAB941B28AB9453F94A9643FA4A9143FA42954782ADB14F82E414F9244A5CF8244A56F1244A87192ECA96C5CA9E24ACFD91242CFC9124AD821F49F248821F49324A1F48F64A121D24AB941D28AB9451AB9443F24A924B42AF245E
+:80C180007924B842F92448984FAAF463B5C04A1B61AD421F4132681741A3D441B242F1812CAF44B981B24ABB91F24A9243DA18B9A5F4429445D812BBA7F442112E1A1CF924CA5E8177A296E1226C19BCEC18C2DA9E281CBC91F62AC21B298B841B2983B481F44A12442F543981ABB411AF1429F24A922AF44A9226B842792288F9A25A4F84
+:80C20000FE030000004002440000000000001200800800001400460800880014001100280000000000CF420E1A440114167118043051C68B220800221E485188224847111164848902464E9328128C082888106293E02482110C22223F2231C982482189822709EB8421439248245F494682622881696284172287442222C0982572414227
+:80C28000944233414252852D8A8D1583CA28948654218C11117441145126A4C421232401D08238281E212E1A89B14308163218A1818A111E688180618436A1483F9C0F233341A5621285611169044AB34978B69882135224482D211A54161768A45D52936312167C8668A8184784644698119546D822126824564808291EF224182A21E138
+:80C3000028723491C98B822D48848F22E8442321318C257224381816F25386800440A414CC12884201002724001281102A1A3884811130218115423125908250848221E01201811E281484A7221944229112102211688885828481A4248AE48E054044C12424112E1248A38204826081811B413C4208550822838484120115482112782277
+:80C38000024924445141C18400002A290850181281400418004120F8F41BA0161CC21815BA24A442897414683189F84A2183E484F1438657242849E854B9C5817828D4583135263188819CD422F43448BD146B82B01442829372A0825C71219424244518B928D12AA21A8229B8C1719A62A98B38CC624C96A4242866F848B58061528413D0
+:80C4000062443B243E48478525E12438484E8883D469984129512445C141884443A3522A1408465818AC451A8C8221B412B243111148448402A18B828B82804189B84121981825783488CC9480B228FC3FA5A042C01185342200218F2142C82160211A548413E612E885C894459928945548214A49C3425C6253A6022D24444222444B2852
+:80C4800017811C12044419C1128722A22C88C18AACC1842A09443064009FCF05461C22042E14A7126CF218242301C1148A8112948C411447288912420260843CD9290422403448191128028C826412214B12C0229A028460422949928889244488E18852825028BFD30412C4AF44022304830149128892384D48281116110225081C42168A
+:80C50000611143DA84086C24081CC2212684E28441021D621842401649711814658210811484A1214C0290361A22784C0B2011912B841800871449011082941880B44812E144A11881165848212021120112C042441422400822148C01202401299848478190820043820182429F44014F248151C1A12784259124274259129428972283C5
+:80C580002934151E842183768A742438A3441911B8825248372426B4810259B348F254224CB241C22228267931A2244F1271143A281AD8848451288233344CAD842985C52C43A1288921C8C28F3D0140342219B224E181921816B84A61812021048115684411341A8441181875481431182C04000084120024000011271212858182628973
+:80C6000018908822209218438243D8990244248044021260422841A084102245041902201654818129946490858C3C881460A21154144128422858901432130C8B1488CA420247824E18188C011EEA49F452497041C224288992414839943831A7483D824A183918518F42088922648428494142C241C30247224826415142244CA12180A4
+:80C680009418C02123042110C2182B84B0421331C8C6182272420826186288EF4C0B444884409838C441850440824118289482211817211281492868A830241A3424C04848812810810211001418002001414D224141D08408A44884F0D87B001158211110011B14C048002858306C4463A842868171120148241C49A841242285623148AC
+:80C70000801C88041E81134598A1281D84202468148C212411084A0110025F5A0A8A0289022584C4228927E184CA128A4432114D1244002821182213914430414062214A01611024322613312414490469A182830448882A4C846448291484044488367284F375FF608424108816331851890484916B824A528383C8888521C42C212994EF
+:80C78000A2818860A114503490484216EA1441088001602294239818502A41AB21299818922CA181242C9534003F5348420150161200602260147018014828A04A88B0281401008442264808981280048410082484833844158272180184888501248A444204424270224B021302008100004008638402484C54415081158822011A12131C
+:80C800001281A242121200C0281C8242446114422641018444114C115284424120A881884828404A9444004393422314724114E24132442824903282A72196614C412126421484B814CC224411241C1811F84228808C442801892168882348042880031A08844484E081F2E47B241D224F5AB21A3223122F41E6F4B224E491526C17241709
+:80C88000259F8461254731237424F84283CBDA2F92D1A8D85423A94199F426548CD244E122BD2CE484D298C4182E1838539228CB921924BC63E128324183BC1E7842EA84786232492F2C78E4C8442B6443745A98928F88E21876A8FAE8EED0160410F8412D87A49B412C522C218718ADE82F799C5EA18B6B8BE4CD241B251B289E348B46D4
+:80C900004CB225F8C28E46F92354AF2672426C351633462F29F45242BF32B4C2E412043AD22C94489F81B51AF731228CB3898DF51CCC4F48FC38718F41FD5A9A4B99AF6185D468B422F8681249FC111460443D4247A2ECC4421B1229F15B1C3F46F5E1E82D5C824352811FC4D7E4F88214AE4825F75C423F167411F82591A50A8D2247355B
+:80C980001EC95F11D243BAABEC6101CD25125C7211C82D141753167142E5DAD81678A16111A328F81211555C224358C88EA8497114B854E581785274E74B2101164801264148C1481412148454004890410000308110011190914421C644614C60481C61482444244002244022014002242024085BF4F064645FD5F13E16BF42F454563F79
+:80CA000022F61644BB264D449F6CBAC8B82BB2D819514A4DC4ABDC4B95CF89F914996F79F85415D7D18FF7F6C6CF6F66F53E28CD4EEFE4F45E582E365F89FD8C8A5E545F79F9C5E14F1AFBB83CDFDBFBFDD8DF87B4C3784DF54B449FD1B9DBADD5AF85DD8DFC57E3EF24BDAEDF44F8CED8CFC5F19E9CCF46FD8898CFABFEFC64F065645FDA
+:80CA800052F62C241F43F34D46F5B67BB76BF65D44FF6EFEC3C63F22F6DBB63FA4D1A3F5A4C86FACF9F7FD8F8FFD36F96F5BFC7655DFD1F1786F6FFCFC6FDF4F47F62DCFEFE5F57A7EEF62F39ADFCFE8F81C1ABFF3F123254F5AFFBC389FD2F26145FFCFFD5F1CBF16F34B74BF59FBDBD4AF8DFDFAFC7F54FDCFDFEF6CF8EEAC6FCCF9CE7D
+:80CB0000DC6FC5F59A9CCFCBF188988FA77FC242F376741F52F62C249F52F25C5C9D496FC6F66F654FE4F64DE78FC5F96323AFACFF4755E9F4A6C4ABDC4F2AFEF79B4F8FFBB7C5EF41E549F8697F5D4D4F647C17F56C4C775C4F2DF5F296DE9D27214F29FB133F1F53F3A171DF81FB31359FD5F7597A6F49FD1812AF47F5B8BEAF4DED25BD
+:80CB8000FDDAF85F24FC53C3EF2CBCBAEF2BF8FAD8CFE5F58E9CEFCAF918D8CDDE9F1B4FF375755F52F23C3C1FD3F34D47FD45FFD2F66F25FFF3F7EFA7BFBDF96BABFFBCFD475FFD4FEF8AFC8EDAFFFEFEF3DB7F9BFFBFDDDFD3F5A5859FF6F7C5CFFFF7F43537FFFEF5CB4F8FEFF5EED7EFAD5DAE8FE9FB323B7F1BFBA5319FC3FB2121FA
+:80CC00005F3DFFDFBBAFB5F5CF17BF76F5BBA7BF3DDDAAFCCEEA7F6DFDDBD9EF6DFDFAFA6FAEFDEADAEFE5F59A9CCFCBFBD8784FE4FD6B2530223026842148228C34248C040012404852818922C92450481142118314534819A92488422B124001188400184888860882C04824008A4424018242823F31078A440410E84106444150288A7D
+:80CC80003448304243A2144118482714124C0A4C48E84122022C6448848554249044C0111D24411F8106CC828192184898D058A9418DA4224A5184812A8441F9C585C0421F4152381FC132681F41324A1D2CAB141D6CAB9419B24A5985AB9443F24A955B422F54F924482D914F82C4915FAAD418F8254A16F1254A96F1214A8759ACEC4D28
+:80CD0000D2A2F4D1243CF4912485F291248F14F19124A3F4812CEB141D24AB941D28AB9453B14A7924B84A7924B8427924B842F9A448984FA2F432CDC04B4CC6431D2C87361FC17242D3C1D232F1816CAF1651412DA11D68AF3439A4AD155B4A25F42448AD917F82F442915FAA81F227D21AF8254A923FA264411CEC5DD2A2E8CDE232FCC1
+:80CD800091648DC28E248F34F991242F24F89124EF34D141F642971F41F24AB253394243F2429243F24292478A2B14278A2D944D5AFF920200000000004004000000000090120000000000840000000000158484020010080021F0B619D0234242618184942D361C422952224812424391454AB145C14687224324921859642293D2415102
+:80CE000041183611A8411688245112009011844D218B28174123A18491141D4829C9484C18840112460849F45BA73044B28723246042818B142D4281111117A481429642082328B48842382530C1508226629885961522A8446D21423CF32812164108184C7142E862C818224A08838462872D884998244E842A6819817FC50417665AF2DF
+:80CE80001B228311581C472126D992445814257168754238548636184E15272C26FAA44A26C8111E4517288B286391219CF128113D1C1B431EA8488F51324156392A23111128B388524B2AB81A3C29AE44248E488B244B4387484CC9245E8266A8182FC1F49AFA1002002128A3A2412428214818001B4142408404D048024A1251184522BC
+:80CF000018040045022128181189014561414E12160440D18184018D8200402408F08DFC90424429011440121144C41213683486489244464248038514052285141338224002108801255141254144012416088281129882A511C4828608122008B0AA073460B2ECC14446585248B49F2498415816981191872185F44481A74246088C1234
+:80CF800048992189F22441184599112CD82448D284928412121285D18411CA1C4443931A2961A2813D5C8652288B21484939228D448B218314F8F76924243028253C414091428537811B14199C1986497142489A449C2204228485D134621254508120C88284234214514150491D1CA170129814253A1884186B481C081829C8861245B803
+:80D00000181808EFDE081344C6112C11D428144401C9143212422941D82461448659628185545820124838682B12441C115242D0488198122CC111007018448482091E228CD8A11158A6896A84182242224884ED19502B244B240014402C8431218C62CA2548A41825820124C0188B41454148480819288182C42422421D1290481A420801
+:80D08000129012450257822311064825480244418C3428486FAE05402814A114410037814528C8112841128188418981919146068141981391142901128711C2F01128284CB12114219514841601819044821C312C26140441308A244424AF1C038011211162218D148002160823014031741441259444824410421414020000AB410080E4
+:80D100000122112221843011180000884C4188011218C11FC40714214C921123655149412853488E281D38961A3C14984F23486421448E444C35588515161454621908204166841CC7317011C8318B2559618216414818924823C811C126D486480616140A4781C7243FEB0D2112250100A144A714125C012100153842135148122D118699
+:80D180004804818487111812181AC248CAA2124062412200C0129012441CB111C212490248205148C0841E4828F079A200408A04904891C5C2824A2828489211C665A845812208890911218110011301180090818D1211C0858433081130118D8211701845820116062822C481DF710740841204444C12064028118AA88418218918123862
+:80D200008260398C888804C582410E242492218C044F218801124C0129823222228301102818029084A082F0CAFC101201130214412215521815B41184016011129CA214181800100800203114001884151294133012411281128282002821160C442988D282418441F234296024904424810024424C8411021184400441630482810041DE
+:80D28000298121684824E041426841448148448514528144884441D0419A1400458811145424844518E4320F8611C8212214848C62866018231448E12108254282014008189C180210D2184101448125180200251141C8882001908A46421E014602242A01A28243F8EB47400A8D4200190127414A813118148504118100129918D24212BF
+:80D30000024AB185C2B9140022115444174425028E4C41002514D243321A378212002410328882208201F01FE56044442181444411000088508412C812288280080088481014140212880082008486084004002008800800810000EF3C4A53141C1454184501468114114431482711AD1184A1C44911474108805128A481A18544721154EF
+:80D38000820060414C04241652412415582451D021622184103414450A6484438821F153C84068211914141A0811A183042514842244440142234441B123081C4181682124A648582414411662841981A41420011886888BC9148119CB982B81838889818161812182BF3C4551422738814D435416596857942573C8FC99429F39F18C12D3
+:80D400009E912F2C745C54226B126D421F24751A38888EA8854BF186442CD1AA511636E36271117A2458E64582F4531445F21D147D8895949175A2B2D1BAB939A19547611D8487888F4DF194822447A1A6FC8C188DA841EF9D055B445594219782F145E414F22852DF84D125C5192F84781351A98F81C11ACF116129C089860315B193B81A
+:80D48000887C687818711564E13D14A311C21289C9484764242B98218779272147B18781C7312F2153198EA865931B1E1B1E9249D88AB116F122146B11A84F4841F61CF72434837526DF424218F925482D24482D81274448C44115F183C186DCD9E2557B8A84B835A8115082157322489198CF8858144D142748123F41F18391C57819C500
+:80D5000042184D18A748443748AE842D2425F2892886185A46254AE4488892282743128B895EFF00000080044888488880A8418813811801130112308142001128118021C811C21C214821C8118214400126214801280040042882F05FC3341F24F4571B1F22F22B6D911E149F46F46126EF24F4D3937BDDBF9D7893F69B9BCFECFB9A9A6B
+:80D58000AFA9F12E1EEFCB7786D6CEF8B838DFC33182E0A45574C5F69A9B8FC9F91C1C85F21E1C9AF18486DEC44F48F9989AEFE9F99A9CFFC1E8C8F883848F8BFA2FACC9F129888FCCFD9E9EAFA1F92C2C4F87F61616EF81792697164F43FBBC18EFE1F85523145F74F417575FB2F22B2FD5F51D159F66F63577E724BF2DFD4B86BFBDFDAD
+:80D60000B3BFAFA9F95DB66F39FD9F9BE7F2FFDF567675FF32385F4BE1117189F1898A7FD252ECF7F98FF9F93F3FF771EFE1F19C1EF7F81F69F88755FFE8F99717BFE9F99F9CDFE8798FF49D8E7DA49F69B18BF969FAFFF8F91BB8CFEAF3FE7AE761EFA9F93626EF23F3A6B4CF8AF8889A2F9D4EF341427F51F52922FFF2528B4FC1F16177
+:80D680002D3FE6F64F4E7FF9FD53DDBFB9FC1B32BFB8F95E9EEFFDF9191DC7FAFF9B7C4A59932F937B3DDDB859114D8E45573CAF99F9ACB7FFF1517867492F49F8951F5F69F885579FC9799BFF9F8CFFF1F182987F78F9BABCBFF3DB4AF9B92BAF8DFF9F93FFA1D9CCF9C4DC6F69F11E9C6F7293126F4BFBBCB4CF68F937E6345F64F417CF
+:80D7000017FD2AFFF252CDDFD1F12D6FFFF7D7FFF4DFDDBF91F5DBCBFFA9F39B9BFFE7F1C6DF3FD971ACFDFFCFAFBDF113992F93F33D8D8D1B9D81DD8E7FD253FDFFF9F1BABFFFF3F31817EFE9F19A9E7FF1F1918675F58F8E7F71F18B8E7FF1F98F9FFF78F19F9F7F71F99B93BF39F9DB79FFB9F93F9A6D9EEF8CFD9E16EF89F936366BFE
+:80D78000336F42FBBC38CFE8F8F8CA00000020E2810400482440014410A84100001042048110088001001884188418126088240084000000852408F095BCA04810C2242184472212C714842D1280014A011847812C0A89285B1880D881048C215182124183182681046100100C4128181E28891884698889019832448428843F26012CF4E0
+:80D80000112485F2112483F41124A3D441B64AF18164AB941B68AB9453B94AB9B4F44A9143F2429147832D914F83C4914FAAF448814FA27418F1264A96E1A26C592E4A9E24ACF5D1242D521F49D228F1912483F49124AB141FC8B24AD141B26AB981B24A19B54A3924AB9447822B94478A2D944F8A84FB244AAF7B016D4B1E643CE5C172FB
+:80D880004CE1C1D21AD141B64AE1C8D616E1C8F642311F897242F2B548872453A294178329F832482D815FAAA51449E811FA274216F425C89E242FB2E458C258CE2C6D538E648D519E24E7348E244E138E248F34E141F268959E24AF3493648F3419C4B64B424E96B24CF196482D244F82F58D2A4048240100001008448002000000100241
+:80D90000000000001441400800400800000080011002005012F09DDE005542082941E1A4018D44183C483B8113A11844160A2B411283048984140283524294614502212D88184522211814A212496882C71112928928012184211249C81A2A21C12444CF5A0E2B142B2949011D464061811532881608AC748892412602835485241285850C
+:80D98000012C449C158011A8218362414992422052872711842416C15428A1601193187884C8111E248418608C419621F896472456724462C1C044253111A1118A919425EA92C4198A048C217443042FA45114B012143282578325440A12912761A883042F866118164328C1858F4261E283918414A60145381923118849E2AC3114B6A5F2
+:80DA000081FFB20FB01102D012018324714C425818112C28D8123124254298181240B84801424508601145C8242302452A1104E54204282981C41180618989419882C024124416880210F4E4DA005018404108448115581840214822C11340228821815124464542941244218110A84228221942021884818061818800843C0888822484AF
+:80DA800088438281F438FE30447C4112B81C14D3167D23C841325012A914D2C3DC8118E678118C912D41578881842D218B4185B61814D921C282282124412118A4519022C321021891853291218F2204652846242361822CF817FD001611183218118682429111941495028D8113D824A11880D11821E1D158248C1422D442618121222792
+:80DB00002826082CC2262216421A0522001200C0110088C122A138A012881FA64791446411811744A5B21554498334281032428662442D18255161C1239824444058141C721A443A44948501246200110012A481CCA112849885416AA819F8224A9082484188361428E4C941522118544844E04104441420447428145C28C8511D184C5179
+:80DB800012E4122C04141034218111443241221249F381442E98F028111648C82444492212921A18121240449424460AF037F3101CC44859425818102C331CC01BC46A210116480820622181208841118281311C2E4100CC01211A040070122181931381430A441002D029016C2143F262CB001052281210881228040080444402488142C8
+:80DC000042501444EC02504A412602E0810200848084280221118001403822508412190800B0510E54695112264B18883424167811048421465C84648C148F4194418B4160446368423125F42A15C331292D24324991241869D384A892482E8960314117621922218861412D2212858461C1218C2141F2B36F1002C1444911911C8443C2D5
+:80DC800048B0111428A1148498704861812912941811D081880800168404262801C0118420F12812842A2181C12825421828014024C8244984023FDA064011944419148144014825F81A41C8422A0420048841541045644130541009838C081410AA12220018121D42281D8288871A4019286828C022868831848AD2E301360883112882FF
+:80DD00001141489881800844131818022D8D34893B28A04290281C62124188CC781422A1826088A8A4A4427022D88202508228101802182638A88442418C41F27823B013041601212411166614851445621110044A511416040040081C14264802190149028C1AC54812248D212B214902301224143974461121420216064400F092F44064
+:80DD8000344C90111558420012A01427482899124A841208CC029084202828418A8802883018001248140010628141228441109414A1004098284484DF240E82181022542841114508812C018A210446E544114904418718254481140991478889844106822081480145292134121C2A2892188440A8822041A228401AF4E288141005D161
+:80DE00004921046304298108843B248E125B9425622818394882B142C288002721811E24105481AD8181A0284D83116118AA64144B811942041E8260418129381240B818081A188298B900C024001C21422843032628023184890840B2281101148126884A01281A120428000012421821948481254904241054484F810828408804EF2A54
+:80DE80000F44404172185284124214CC814141144C9482121781108808642830858186420880A4212331343604001484440088C011464201284542D224981545824881F2D8AB704219C848124448C9341225144241B411BC8213985124A028291211781228B488012C98242C18A4A4229400842D224DC1428B1221942822845048821A66D8
+:80DF0000618A81022088413492845FF447D214F194444971187E1148C3241A546299B112D1A8E833C84AC7842788EF217114799252E48C5B148E86CD288E848D1D437226D84C98A8DB441F2C88BB28E141782124722232229B2117426C129928997883E813D2234211C51C36E888389416716E4A4885F23C79B0724458B8118F24E545F461
+:80DF80004242BFE4E191D382D4E8BC11A46CFB8D1D479F65EC149C4A883B88271289D218F441C585B9C47A18F289B11447CA9AF2385C674216688A86F2121A4F99692129A5155E1186FC32124991888F28A9CCC42D164B8BA76889D128F8A4988AA8814F98EC88F85666141554191F41D2147526D58FD11D5114D9749457112F18D34BC160
+:80E00000152BB84D11221F64D9DDF3282187691D1C4F823122F021423D394676B21AE3C21974989AA21C92B49F481ED1D164B6AFA8722FB872D391F4A22E3C5283CD19FF255598AD2249DB26D2C2D32AC214CF48F31812C7227718800228618A8281026880068444407421088244111061441144001901002A080045012A896412501460E1
+:80E080001220220180024C025CA241804474E642A1751F93F2212A1F82F6486C9FE7F37A7CBFF692437F7ABEA6F783413F4EF4D614FFE5F76EAE2F12AA8A3F98FA323AEF3ABA9C49F8E2E8CF8CFCA4366FF3E3A342FAA7AC5FCBF1B47ECFC2AB335F5AFB31131F6B7A94B487B8FAFEBFA4AF87F76B4CEFC8DACE528A9D8BBF58F85B11BF9A
+:80E1000011B33ABB925B2621EF22FA82C24F44BCC4FC66EA6F5543F145757E6C1E1E57E19F95F77F7D3FD5F5595F3F13F7B7F53FDBF711D3BF9DF55BD3BFEEFDCA4BAD8BC7426F58FB3A38FF1AFABEB15F13F3B8B9DF9CFCA4B65F73731CFB8587FFC2F2F5B4DFF3F72CBC3AF32D3D1F7BF923C65D867F18F8BABA7F6BFA7B6C9FF2F28604
+:80E18000867F71F33F3E9FB8F9BAFF3F34F11B192BBB2F2B5B2665FA8E9B6F89FDC6DC8AF8B4BEDF1E4FB271F5156555FE1B198F86F4497BAF95F55F4F3F43F393963F49F1B3A1BFADFFDAD2FFDDFD54DEBF91F9BE946F99DBF6F2AEA9EFD1F1818D4FDAFBEDE94F66FE321B4FD3F3111B7FD2FAB57D4FDBF73C9EABB34FC8EB23F13767DD
+:80E20000EF41F31F22AB23DF7AFA62687FC6F68FAC9D2B35FEABBBBF1DFB5913AF11B1B8FBBC98E7E227826FEABBD2F98ECCCB88CF2AF9BBD7347F57F519651FE37317FF77DDFFD4F7777FFFF5F51F167F7BFB93111F33FADB58BF35F54B5DFFDDF56FBFEF4BF996B3FFFAF22FA1CF91F19591CFD2F3EDE94FE7FE3637EFB3F39797FFDA04
+:80E28000F27571CFF2F72A8EAF82FA25BD5F7BF3A7A7DF78FA1F32AFA1F3A7A7FFD4F6352FFF7AFA1333BFE3FBABBBFFBDFF4713BF91A1BAABBB67626FC3F9A6BE6FCFFB84CCCFCCFCACBEBB8410040014841884608920084044489441209128800210C124C02480B2240929011C014B82841440C24841860800481440648128001008AF89
+:80E300009F051C2511648143048F3441A414867442618142122B8412204847C8144331484183048591126082875443128898212CA121221564221E4862122428D0819288D0525184B882812289084C098FA60F2E421F41722CF2112487261F41B26AD141B26AD141F66A9219B64A19F54A9443F24AB543FA4AB147822D954F82F448914FEF
+:80E38000A2C4854FA27458F5244A87192E4A87592E4A9E24ACFC91242CF4912487221F4932681FC9364A1F48B26AF11164AB9619B24A5985AB944782ABB443B2427B24B842FB24484AFB244A2FEA042CF4114CC53111872415B44CD141D41E5141AD9615E4140BAF741BF1421643F8428513D242F127482B141F22C5242EDA563525F02298
+:80E400004296E53264594DCA1FC1C2429AF6284315B426E141744AA128AF16C944AF7618F142A459F24292418F240B2F244B98A26598B22E1A1F1F078482000000008411800240020000218001100100400140080000200200442008000000702241F1368130121604160817413441428290439470CC62284AF984122486F4A24186341446
+:80E4800043C888459846255812882122ACC282881E844512342C6D818D82888564648E3400901163440440D448024180D212014324C83819921A6043E022C1188AC6121A74121832188512B81C528141A08287142904384449F1421C473A168665424B21221485A181483817831838B0C342225948930816082F8891128E6136783449FCB4
+:80E50000E49720648C265829841415148682B824D412E1A394184E8E8D828A24712A748A96C188B23FC15882C3C856C12D144F88F122855B122B3443B888E349724118E2A8621C8E329658482E146B28471A20DA4971CA0112B08E9116C66382366DC1EF5808696141181A8261412A014E1216888854121022D12871848811C1244144488E
+:80E580004A488202142904218127224440541C161444681212421223042901444181002688321420F2DE480028813024484014082448002901290130A44A024400004890141E242C31184896E422180100001242281892008800860848814528049F640F1524B124119441412D4283D422C7D8A9C51829D14AD12844B48894148B49A19675
+:80E600002CA1698F14D28534422F14C3244F84522A84AB24302660414CCA26AE1A1AE24112120941A7184829541865480A2D248F48942A481882A46F3B05A0128514C4214440F8122827898395122381411294924188844604C048BC0418448D66163818AC45088E14434805881A8201930100925029C184B02EC8842D48468801F05E1F14
+:80E6800014512003436424422D44424602464852688B146084188D524B288B92124B871912C44266A1421074229422182F44021A32A249F21A22606200426CE298213442804802C0482250844A18E8B84A52380084265A484911C86844842230212121890C8022C2124C1201EC6111229844BC0113D28223C144414818401101003210A42F
+:80E70000128924C1444800C4124483F4F5FC00C417412F224484212251428B141621442CC2449932125488C411868221942618848BC114160A1A56850014188C0646148A42A1214D1213D82811541428C38281211202242224EFB601000000812200C0112349040083E1510243481C0100400600442098442C0A1122298221614187142211
+:80E78000C02112200126088C410400B05D49512100A1899214C1182D4CC951185E2123416524A49A44EC4922024CC134469224842D191E4E1978187618D14292242D1843348541896221429961134D11871126C6B13C8131148C65424A02A444841014E8CE0721444D11286542A8128C22828401890825342181134151845C6A88141110B9
+:80E80000842822018015A882122E421214284722002026018C021160818D141A8403441228483F9D0C25C225504A246C426442232111C828D0840841104452241084024D42360880C414424FA28111CA11294874128611A218811C02460460849044260442122648944412F04ACA404402118181C01828001828124D222221252AC29816D6
+:80E88000A8814008484561811602160B8B2813C8A416160149881809424384822203C3012034240084814D48486F4C4F0184812662228481420028812181A504450114281528425124444121441C4412A84860282002261C41486C44818C01811112181608414A91484008009F8803410000427012086C8211129C22001820011008408356
+:80E90000212132228CC442001124182420A481008888001014098884401444826884F026A1208811480824004C31E8830442104848B84C6882460622164612082323C4144508930341124314022302A084A0121238C088B042A14118A04180034C81F289598042462201144C22022120044A11B244C81200211412211011449C2A80014840
+:80E98000942841B044B218444A282202D084081E8CC08410088988A8C144C480F84612508221000000844C014C0800211C0211812220420448008125221144428888681190816018A0488904814420040000800410F4478C20024464624448412944E82201A1611AC4214B421449C4214F211244541882902882200490A624281110D148DC
+:80EA0000114154874C02890B898281088745CB848484838E24249882FF7F028C848204A02420147442021F44024A0242214A721228048421C0188B822C4846284804168141C128A0422021A1189082C0844C2884C68888A0811084881842F8BE4D146F2224588867912A52856D2424EF43E144F13A18AF847446F2C2448D1E15F63812158B
+:80EA80008852632D188F4992145568249AF13B38222313761872347432DAA17A31728223E5F2F2498D141F915892624F89B1ACCDA88F1A88B148F84AD8CC93C8DEAC43D448FA48D829289584DF4E4BC224A7324502A4AF4244F85A6CF01642283A88721C18B468D641F2644485FBB84887514F82712144D645F846264596364E488FE1C583
+:80EB0000142D428BB82581AB116992164B28A18B384A92A8A9E4C1028CD284E89845A44D8490C8EE48418E4418229F6E07F0142421876223E42422B42461248F826A241D2285C8122B24697846D12AF873144B241F22022C12589A8F82048DCEDD124AF843489F8C43F4881467584F425E7183F112129E9845F48CD48E454A0ACB121AB13C
+:80EB800058741424918C4F4491581E18496142C784CDCC278C3FF10B4200800448C0488848881A84A841A81D488819841A812881182184012018044140011C092601140048200982200892200882428285F41D2CD066F2323AA5FA1E5EEFE6F22D2FCFC2F26C2C706AFA8AA23F3BFBB296AFA1F99AB82F2EF89F944F65F39B9EC7EF9E134C
+:80EC00004F42FA8CBCAFA918BB68A3124F67F726EC8DCAA5F8ACACEFC8FB8C1E6F79F8C6646F5BFB8888AFD9F99614AEA3274CCFEDF93EFCCFC212A4318FC555ECED688D888D488588B414F11C184F41FD14143E24EFB30C6F62F2727AA5F21E5EED2EDFF2F22E2EEF82022B8AEF4AFA39711E36AFA1BC927826F63F1E4F6BFBBB9EE7EB86
+:80EC8000BE116F42FBACBC8FA859298F2EBB22F37EF66D8CAFE4FCCCDECFB7F78CBACFCAFB8C8D4F4EFEB6EF8FA8FA8A9D6F49E93AFAEAEC8FE9F996D44F4AF31C3C8F89E38773C4DE86C6181E58C6A854CF8FD7A8F416545E1CCFC7FBC59BF066262F2357E86F41F16E26BF36764CF46C222F84F3EEAA2F66F633232F25F69A1EAF84F932
+:80ED00007C1BFF55F3DEB7F774DFE6D917F3A624CFC3D934F18F858F22EA23F37476EFE27298DECEF4ACEDEFC8FB989A7FFBFBD7F67F535789BFF9F99F94DF7BFB83944F6AFABEBCCF82EB41A9338F89DBECD8CEDC88F9D8DC85A8CC4FC5F97CBCEF41DDC4FCAC7C37D2F06666EF23576A6F65F16E2EBFB6F66E6EEFA7F7527A2FA6F6E233
+:80ED8000F63F1FFE564A8FADF542D26F7FFD7F7FEFF7F7EFCFFFE6FD2F318FCBF33CBC343F38F83EA22B33EFEFF7726AAFEDF48E8EEF64F486B2EF6BFBA5AD5F2EFE3F371FA2F2BBBBFF49F9B5B7BFCEFFE8EEEFCBFBA4B88FCBEB8BFBD8E84FECFCEEDC4E98CFCDFDC49C4F4CFDFCFC8FCEFE96D44FCCFCECFCDFB60722100663022412F5
+:80EE0000200884200882288244828D24828524180844008883A482800188100249481824018C041608844048E481040020042FD901824481100C43C228C0242B1280494816C11453921A121C018D2411442E4283712492284880319822C0111B2841178120F16881104404A014A014006044478189828441F159ECC0431F417228F311240E
+:80EE800087141F41324A1D24AB141D24AB9419B24A19B54A3925AF143B252F147925D812FB25481CF9254A4E815FA264115FA265191FA26459ACE449C24A1F49C2431F4952381F497248F19124A7141F48F24A111D64AB9419F24A9151AF143924ABB443B2427B24B842F92448984FA2F48533C012CCF62852448D121E6483D241941A1F43
+:80EF000048D66AA968ADB65B6829F9A448ADB14B4A2D934F8A84FBA64829F8A45A4E816FA22DD4A4A4282ECA96F422C996F4224A178D259A618B421F48326A17498366488B921F48F46A1482AF44A3288B1443B84A33842B3447882B342F8A84B1A4F57A9F4008480000000044000000000021008008000000400800000024104104000097
+:80EF8000000000F08F5C001B215022267444120881162A39191054388448911E8850421D44400C1024C124B24C92242A082048E41281D184784124123A3A00301820C118222E1442E084111C3448DF420764828181D08262414CA212304890488B1863642881472A41C3B148A11A22426D414E228149125252D022046964224A92822D888A
+:80F0000015AA413014809C141A9429C8111DC821161882688180C111F0DF44003354288464CB426D18C028124F88042287419D442127845C221858E241F0184213A42C616C33244F116A42590248814E82431498194F8114C524212D684449C529F20025E82261428A84E1A4C11849B118F4B12710A421002302C024188429711138488236
+:80F0800021860886D84A31144AB1B184124404810021D022A42861282322F82291908248188498120081118F1429112801841004F0D1A6004041541A442332112B147048022F340110B442094200004044C8242489022800A021006041002C0841124284890185148421484408260848BFB50725C4142761124113D221114446466181812E
+:80F1000042478C2948E88168C89742239C141F8C8234C2218C7116C8548460A1186384D44182E18843D84832226084842788BC89388229B4829148444668224EB38321443828DFFE0E90143981518110D35251224191189911D228C8848C88C8888148C048484F2408163E1C47838422181823044322A192C1302282A141822C0112299412
+:80F18000144904C843B299C41822842AF496FE1006454254425CA212B0440123548223849444B042618143742431824931A1244088422204400A415A4201811287420042812D18871CACC8882489186841847022024608815FEA0CCCD4429111211A0800121880582422141008848564412418C4124490680028502300526044A156E442E9
+:80F20000011470220414B044C244120014812124488CF276B22484108246C428708102C4145983B12401101408006C448516F41122461504008741D348BC24014D38930E89421918041001828CD228013248A818489E2281241F83041211448D11824460880089410242414581444101288400A884C0121022882A22011512012E1100120C
+:80F280002A6115002C0121A0824222D14426886442F0A9FB60417911F3281112450881235184118E3121691544151C0985C4244CC41481415C92451E680000A74265286311548D2187114A732461814D211F2134241416318229944C9A2283F484288D142782D84126FA75869042D0240141281001128901184001425018804148B12484A3
+:80F30000CA8A502410A2284F82298841C4421AD22488126C812001000045C8122024022024B24802DFAE4C82D11A01124158241E4143218101232221311416341216061504D0820481191544B444514180810580B12881A3523C0228440082285B48400800E48844005F150440425221002141209C423902C223924230C5214240C81590D1
+:80F3800046228882848448818D44904190212441002044B84122044284A084814B8280088C58241AF8B279142341049064144810444134122C41854402100110440419E82418A4244420240415082A0400811889042A440420C842837A440248428800A44CF215D1408802004E24304260410080026641410126C918908241A44160981680
+:80F40000A98210C2411094834428248844115121908B1958828C384120042382024840E8C30949A421214002001A4495122001431126512483110412189044248311044C011C845184584118D058018489840400840049018604C04424A012B03241016051501860111C41029C4461C41C31421880119432224824438848A88212224004A0
+:80F48000141200421E4829A221244512C48280416228105228602285D4224228928226D8A80D0040260C480048800C4880488304893481822904806A24830210089400C02241C04414821038A98C2844182438847088240426648860489F9105822328611240311200212001402422044290288460288180A2411A120884604444520084A1
+:80F50000448C0424484100428004818018198444017F6B014558416C0430160021004C14D242021002811223A1182B4846C81243D4680831108848958314454894C4248149420460882964C4C02185044694484D28428C121402F344C2141F29D142C1278F48F417132C34142574D47618E212341827354E46671146775643F646212D9C3A
+:80F580008D845564282FE4E444BA13D514D4DC81628420F4425446D241E526B22419B7A4F5254B53D82434482E651B18428A44B4C7C1C84EC82CAC62472447A8CCCC198D988F214D9142271A1721502766341317144110F14192672453084E223110061AE281C492CCBC8458A64B242F28819214C5724958CC9D895C245C142CF2282E2FBE
+:80F60000445248A784255482E788421C384AFDC32EC441E5E4C2F24684AF125A42C346E522F2EF757014D2C41294134A82A41429E525D113F542542381C3546B312ED41AF181549F85F1385897128AA14DE314B9A87428FE78AC1373D8DC4184AC5143311549E2417118AC118781384C64164B681D82ADC88FA8C4A8C65888876C30CC856B
+:80F68000E8C8B42822E822788674CF4C2154144001144083C481C081481C0888198498412C1A010080022815224822482248232822088234822460324002344022482258280082F08D171416F22125F021658FCC7445F544465F55E141D157F89A883F18F8A8987F11B9C2FFE4B21F19E931F99A898FCAD9DDF1C8C88D98EF85B888B8284C
+:80F700009448CD4ABF19F88882AFA8FC824AAFA1F9589E7F79B852F174B6AFA1F9B99B8D789FF8FACA8885FACA889F32F21A588D82AF88D8BDB89A5D2C23742C7646D414B824F844483A5364FFF74B7112F2766416F22464CFC6F676646F45F455454F41D164FD8A9C3711AD387F51BDD2FD74722B116BD12FA9F988ECCD2CEFCCFD8CDC54
+:80F78000EF8DF9CE88EFA8F71A32CFEFF71E24C741CFC8F8884BAFA1FC5898CFCDE86DF952DC8F21FAB9D78F89DDE4724AF888888314F81C5C8FACF8CAECCF88B89CDDEC34C2C76E6FE4F686844B8AEF8EA633CFEAB14A44F351471F71A5111F52F24CCE5F75F552523F35F5575557588FC1D833F149795F59F157D52F25F551514F59F1ED
+:80F8000054DDAFE2F18F9DEF8DFC9C984F6CFD8A828BC62B11A7829F33D14AE188C4CBCFC5F1D21C5FD1F4D4944F61F5BA18BFD3F1D8FEBD2F29D4A8F4CAC895FF5A5EAFA8F8CAE8DFFCFC9ADAEFACF84642EF62F4E6844F28FCAE8CE5FCBCBCCD3E8F4546F357477F7155337F76F24F4F5F75F543413F35F557577F7DF55B993F39F94B98
+:80F880005B5F7DF557D53F3DFD53537F7DF557DFBFF6F6BFBDCBDCCFA8F5C4D6EF6CF87CEEAF27F67D6DDF71F29A8CC6FA42CACFC5F5DE1C5FFDFC5717EF41F5B8323F7BF97C5EFFF2F2C3C7EFECFC4A4AB5FF5BDFAFACF8CE8AFF7CF89FDFEFECFCCE86AF6EF8EEEE7F6AFEAE8CCFCAFAB4B4CFEAFAD2B7901210022502000024004002F3
+:80F9000044400481304882817048845148493148418304800122846184C048418C0400484484448CC42482004C02CB5850141A521440E14166345014E014011C01275411281185528538419882442A04178200814100444D412881C446824243744CE2886234848D82E034082470482252484840F868C4D034F4112485F311248F14F1116F
+:80F9800024A7141D24AF14F18124AF16B981F24A9153F84A9153FA4A9153FA4291578A2DB15F82C4915FA2C4815FA2E411F2254ADE211FA2EC59C2CA9E24ACFC91242EC31F49D238F891248F24F89124AF36F98124AF36D941F24A9319F24A9351AF343924AF243924AF24792498924F8284F9244A6FFF0A45EA41F628421E244AE1C132AA
+:80FA00004E1B2185C2646E14159C3A5F81364A43533A4B43144F82E414F32648984F8285F926C81AD2A6E41542EA41C24B4CC25A1FC1E2A2C4648D524CB248F11124AB16448B1617414E94CCB24ABB15B24838A4AB1443BA4A712488F9B648184FAAF59267608882480000000000810000000021008008001002804108000000004004006D
+:80FA800000000040017F2D47D12441A4214418414651864C21088388C5181CC4184841008001C24440914489349445A8C241844B28699A141084D81882881268C1182481B0110422848D4449184CA848413F310E263181219F2201269A1424D028A1140025C2145522513885C42684428F42942925D882F42218286521948130226B24299E
+:80FB0000C141217012984243B14C5186290E19CC881088D8842234848022342426C528FF8543C134538CC23118C72219556249E12138448928761292456452C5022C522852E0855A2E8A94124B2469246548137626A224A7228E44274430122B484C32982D268C9C184B1882A3122894249088466C4A467A24E818B618725C06349012C478
+:80FB800021104408841880418871110811851404F048241140D81802859184858108456849262101C470113844842244464108C091844A1204400444415E2800111440922147144481100210014022024825048004001502004502002D8100107811480288190448215022128800002260226FA30A200200491118133315934151236028EC
+:80FC000019924912218F110268C0220000264282149824800122250149C222204248229818422334848638542AA414002016E46A0800110069714D12011D149341021150121528022E5944484002001429420284440013082110480A23820888460825022321250600A024B0F602906100302110541A1016C12121882846221102212C0280
+:80FC800068A08100102244962160812168143024130340984121182F4482948483988480056022D024F3FBC31014143418504948142818942482144944C3889C236841800A4682420110451854480044174860411224004A11A41282100241290118A44425B84848046F390322146042510081421428118011024B618012028C814201686D
+:80FD00002044088142120080028116C885902584421062811CC48800210012442870BE0D111041022422412142001181200990190048141004164828A51212403A8400902988218112304110010042C861C248224A0846084FBC0819421174284255E1506942200233C812412CA141B08913063E48224683E214C21846B845210287448CB3
+:80FD8000514241532892148D8216C88DB02564D42A241802484F88241892827026A28542C3068FD20641441416042006221B41851101152834818DA4178320018214400400818C711804800800871212248021011214901A11241A44A441830481478800BFDE03000041444150324800AD12C0121028010000222800002508101812011667
+:80FE0000041002428001100112AD86A08426080000F0618620820212172111A48C04A6183382C25431915018431401191C14014D224221E1282190142261212C62883B214423081890828388442118010041614212222AF4EC67208202901561812914914A25025027135192841C01004603284002407C2A02506940064C52221810021233
+:80FE80001012484181D8831822081082448282F4974950888B444A24051141A4205A544D864F86AB222200844C1441328225E611A1314BA9CA7882020015D11181529A85B848B5483C61618242202178847444B424A22326044226481444721212A213EF9D0E00002542044048020084001088048200110000C0282400000000002100214E
+:80FF00000010088004800400F046B524818C25840500004014C4242229826484000024901213919482A8210060111484818C642419141201400844418D24222942020000109212AF9E0284801501002125024004284800C0114111104284011C0841209241350140888104244B18182DA200400428890440A814800821F092284082040008
+:80FF800010820240042810081400485012800188000050110025082924018800005062800280040040120249F1392100000020010024241002000014000044441302800280082400000000C800400A0000420000F0C27290188B445AB44201240011244514B424A222238281149141400245A21143A1A98A280880521150218518B848A414
:020000040001F9
-:80000000424242000000000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000000000000000000000000000000000080240400000048422D
-:80008000000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000000000000000CD
-:800100000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000001A
-:8001800000000000000000000000000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F131000000000000000000000000000000000000484200000080240400DB
-:8002000000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F131000000000000000000000000000000004B
-:80028000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F131000000000099
-:800300000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C000000000000000000000000000000000080240400000048420000002A
-:80038000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C0000000000000000000000000000000000CA
-:800400008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C00000000000017
-:8004800000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F131000042424200000000000000000000000000008024040000004800000000004B
-:8005000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F131000042424200000000000000000000000000008086
-:80058000240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100004242420000000016
-:800600000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0FD
-:80068000F1310000424242000000000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000000000000000000000802404000F
-:8007000000004842000000000000F0F1310042484848002004000000000000000000002004004820044200000000000000000082EFC30700000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000DB
-:800780000000000000000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C00000000000000000000000000000000008024040000004842000000000000F0F1310000000000000000000000000000000000004842000000802404000000000000D5
-:800800001F1F0300000000000000000000000000000000008024040000004842000000000000F0F131000000A044480020040000000000000000200400000000000020040000808888080082FFBB0F00000000000000000000000000000000008024040000004842000000000000F0F131000042424200000000000000000000000000006E
-:8008800080240400000048000000000000003F690C42420000A04420040000000000000000802404000020842404002024044200000000008A085F9205482004004A04000000000000000000004842000080044800000020240400002008A088004FD60100000000000000000000000000000000008024040000004842000000000000F052
-:80090000F13100000000000000000000000000000000000048420000008024040000000000001F1F0300202424040020040000000000000000000000802404002004424800000000000000AFDF0AA04400004A84848404000000000000000000A0440000800448000000424200000000808828B8E70900000000000000000000000000009A
-:800980000000008024040000004842000000000000F0F1310000424242000000000000000000000000000080240400000048000000000000003F690C42420000A044200400000000000000000042000080A44448420020240442420000800880088288BF8D05482004004A0400000000000000000000484200008004480000004200000000
-:800A00000082008A08F0FFA300000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310042000000420000000000000000000000004242480000420080044200000082828200F0D3440048000042480000000000000062
-:800A800000000080840400004280840400004242000000000088F0EC1E20040000004242000000000000000000000000202404420000800442000080A888882008F0A9CB0000000048420000000000000000000042000080044842000000000000000000888AF85F922004000048424848420000000000000000802404002004A04442009B
-:800B00000080240400000000008A08EF5B0500420020848424A4444200000000000000004842000000004220242424242424040000202828A888008E59000000200420242404000000000000000000000048422004424242424A2424040000000000B0F4064248000080A4444A2404000000000000000000000020040042000080240400ED
-:800B800000888A880882005FD402484A040080A44442484A24040000000000000000484242000020044A240400800400000000008AA8884FED06480000208424842424040000000000000000484A0400000048000000000000008282A08888F035690000424242000000000000000000000000000080240400000048000000000000003FCB
-:800C0000690C00000080240400000000000000000000000048A04448000000800400008008800880E83802484200004842480000000000000000008024040000484248420080040000000000008882886FB10B808424044A0400802404000000000000000000000042A0440000000000000000008288F0CDCE000000000000000000000077
-:800C80000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F131000000002004420000000000000000000000004800000000482004000020282808001E5D004242002084044800000000000000000000000000488004000042484200008008801C
-:800D000008A0888F260600000000000000000000000000000000008024040000004842000000000000F0F1310000420042004220040000000000000000000000480000000048424200000082828200D0F501424200002004420000000000000000004842000000422004000048424200000000008A08AF2E07482004004A04002004000000
-:800D800000000000008024040000488004000020240400000082008A08F049F800000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000000000000000000000000004842000000802404000000000009
-:800E0000001F1F030020242404000000000000000000000000000048420000008004000000000000F093C600000000000000000000000000000000000048420000008024040000000000001F1F0300200420042004420000000000000000000000800400000080242404000020282808005D1F202404000042200442000000000000000019
-:800E80004842000000422004000048420000000000A088F0B79780044200A044000000000000000000008024040000488004000020044200000082008A08F0AA9D00000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0AE
-:800F0000F13100000000000000000000000000000000000048420000008024040000000000001F1F034242484848200400000000000000000000000000802404008084042004000000000020F886E900000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000000000000000000000800E
-:800F800024040000004842000000000000F0F131004800000000000000000000000000000000004A040000004842000000880000003F1F0B0020242404000000000000000000000000000048420000008004000000000000F093C6200400002004000000000000000000000042008004002004004800000000000082F0342420A44400000D
-:8010000020044242000000000000000000004A04808404000000802404000080080020083B6A0000008004424800000000000000000080240400800480240400800400000000008882881F3B0548802404002084044200000000000000000048000000000000A044200400002008A08882F0E86900148CC1498C117424C8486F2294450088
-:801080004C41CC2324282820612110180218214004811058282042C8184861B024E58104302490184002C0284C22612184835486EF44485112854201736484521E2420C22428190244CC46D624E5E221B242822161C1251462432971126A811889014145083821844678421C68426B2466041A6242414C62C267224D5218272268181818CE
-:801100006F7F0A14100229018422462202E04102444582A2420022128112414014221102004400844042088418422280411C2422D242A24141180000CF290221918941410143C7124CC24180121148E184024484258204400C16A22150C2812001244428382901482384431C022220015048400830728156588457ED00408134484D4820FE
-:801180000440041004002931342816022C01100200C018000000848344448824C22449140428400230261682021824F04D9D000084410085044422008012124402120040020018200181818484000040448404002800440024224002C0126B9C000000000000000000000010080000000000200200000000000000000000008F940F21130E
-:8012000081518400811312124448B8489111800248188D224941A9412C02260440C428C04883522880278342021684143811412A418884558684409412B082514848281BDE30416410122403C0412121008137818083121224220248844064461A04814C03800121442342742258424A112232821058843084838112C888446A4848F483FA
-:80128000EA0015C212C44418601221448180D41891182818482961A24B2126A9416221284148411028121828E12483C3222C129418424A91134CA2128094184147888C41048863F9A8448984E271042D4116040028816034104298185012802202410000814130245226084D582824001004244C1246089082848149140A20921A84001040
-:8013000074C20124901228C024411210D13201001480221108200160440010089014B0248172240200414C140443024220444804250444100881F06E633422C024616CC451192352948CA142467211721168418C15182823345C624842A9B2423258268421D58428C224426522E422614245C8121E281A9628488B58A8A90C122CE44261A6
-:80138000A88F42E8A3C85C432AC42426F4E27924282592142141292503111813246431504100163828D0842404F02C426085901812C14C42644122612444814C2103842624A4824230184522D184D88232AC83152C6482B04D4E0180C22442591225135C812F2201211781121E48260818421838482C042A044902488218282E42442CA680
-:8014000021284424463C7428428E1842A32804424C1232841861A2109424EF120522424352848B212014186846A1296282158844080010982A421825C4244184169414008B1882224448240021281200471884A118CC44C248810040041EACCF280C6044256821484501E01241882164226021A0144301385E220018C0888311122A32146C
-:801480008C344216041848812249041654824A028D44222C012E1249044312C22A8AA21C2622F122311415020070228A22522280622112448052828562810060C3848304000000100228411210121808A18001B08404828812800184C1424E5F1414253628ACF14812871229442A7146F8221218AD12D4522D22C01E16282396288F42415C
-:80150000D882C428C484A9818221C498212043C418252244E8C2311A8B42E08844CA1A1ABC44F18244D068021638A2478484E6EC590D2210442442248272288112880600848B14009018200444411221444941442A94942841002845020021C01128101408AB84122002924C02AFA84182814201604142001384112105A0244E14248441AE
-:801580004CA2429048E082341481C01816A84223A242484A1222C21866082688A12584CBA418A90948CCA114C0A2A0838F448892829FAC0D400C1324C4411214A140C2221111282430241884244418124124881200C018202182815128282002290200A12018B84212322848A280024F22F116C48016012889C12A8180415C2884004E2245
-:80160000001868003028250241229218E088848204482128802401211884A4100850424A48222131128480137AA3088C41823214284200800400281241000029138814C418828445820421204198122004000010A22420120488404802450200F0C15524504100490414854201220041814110825448904400414449150400602220A121C9
-:801680002C133822A01220028004C0C88C11082CC21800A9011CF2F48814414006404464144144203141184176C23422C4124D121002000016981200819024482052484602844C8401D042A12128482AA149CC08892801A1CCF87EB100402141681283624246129142282991221200004A42084144000061301218101802800122902210C9
-:8017000088B8822208218820022842A0842B18F0ACF550244044873118190415048481100120D22214A44142E024014218420043644444672444405426441AC4144844484468805484CD4210C4281A243824844100ABF6C0682848200220C418842215041E224C94121084018126382690188F22A482488914884858180025085810482495
-:80178000044014C424238C02822488482C8588120A3F2443F3423628411D5123B141D58861242F843142AD2280511129C4244506EF86119818844F2306C5E4427132A4118915D44AF51C3289722EA8614F24A6126F837142346444CF2202C78250828D383AB186F8884A4B981AD1A6A8314D6C29D244E8914AFE2AE61074245B3116E4C2B5
-:8018000055841F14D458321D4D4136B8223142B034F242122A915616F4145466F62E64422127842CB244E5687452E2A1E584086E12182F6621C24689B21892282B43424E62188D448EA43AFCC8848994825E4666B238F482822D9298EA5728AAF89A98A04315C42443B248F238274C924154952CD4B9F211416B118F64B134B412E6628228
-:8018800064A64F8122C41CCF4401CF84CC28C145182869862D4C46022B112B21242E581E582C52823E141AE4A6FA644225528646BA44F128288DE88AE386247F985A882A913E5FD50D000000848004202201800228802201000018000000000080010000220000008200280092F0E67D347E726F52F224277F72A6661B67DFC1F15556FF7E
-:8019000061B54254113F14F473533F14D48CF216346552266B5549F444568B554B554B444B444F66B472A3454E422F41F5C4D62FA4F776622FE5D646E266F45616AF63F33E648FE5F456748FC6F62664AF66F746644F2CFE4272AFA5F586C6ABB96F4BBA52FD64E4AFA6F76C5E2BFE4FCCAC114FAAFAD97B147E763F34F623273F33F77C3D
-:80198000649F17A2775F75F51E16A5762FFD696B3F74F64743ED382C512225F432784FC6F6444C6FC5F57858CF84F54448EE6AEF87F758D84FC4E4C5F4D4C63FB6B676F65A6FCFE166626D6E8F62F23E348FE5F45676AFC6F67664AFE7F74664CEC62F2DBDFAFF4C46EF4DFDD6542FA5F576EC2BE7CFC6E4AFFF66CC26F8A4BE6F8141F32E
-:801A000025276F52566475F7795BBFA3F317167764FFE1F547499F52F26B613F35F71311DF95F516546F25F16622EF25F16E2E6F46B14AB454F14412E724EFE6FE72322F25F55A52AFE1F5DE96AF37F37E322FE5F3363C7E566F6355E26F63F172544F43E564F42656AF62F7266EAF64F43A722BFD4DC62FA9F936DEEFCFFD8CE4AFA4F5DA
-:801A80006C6EEF42FAE6ECCF48DAACFB2E77141F73F323632F62F277379FB7F633732F277347F75E56FF74F42B2D1F36F657527F31F17F594E526F64F17636EF27F76E6EEFC6F14C4C4F45F54446E724EFE6FE76726F6DF55E46AFE5F4DECEAFB6F67E72BFE5F7347E7E56EF63F23A2EEF63F372666F63F762666F66F76A7E6FEEFEEAEA47
-:801B0000AF83F7DAF8CFECF4DEDEEFE7FBFEFEEF4BFFB2F2CFE7F7BEBC6FC6FE84AC4FE2F2F9A4302420022D1184341E4845031440A341541A44A641444820810281401452481810022B12A0121042B822410884266288266289244062812C6288A0488D21128902BDDCF0A21170224134441A120489012642880120120238848D14504864
-:801B80004024128801218741433218294194461A32224441702262414180480886684440042C731408484414DDC8D022F4112485F2112483F41124A7141D2CAF14F11124AF26B911B24A19F54A9243F24AB143F242B147832D914F82C4914FA2C4814FA264114FA265192E4A96C5CA9E24ACF491242D421F4952281F49B248F19124A3F4E3
-:801C00008124AB161D24AB9419B24A19B54A3924AF2439242B94478229FB3448984FA2F437DA50A21F4156281F4136481E2423449C1A1741AF64F911448BA4512F245B848F143B242F147B14D83258842D914FA2C1914FA2C8814FA265192E4A16C58B9E25841FC9D2A2F4916485F2916489F19124AB141F48B22A5141E9D941B24ABB15CA
-:801C8000B24A3924A931244A5984297B3688F1225A7F830D00480000000044000000000021008008000014008480840100000044000000000021F0FE3E242411104D1811481118050010842211B4448282321441491204614588014952844301A850224400160483619422830413092124968A2114284428C426CFB80A20180845C254207C
-:801D000082E32264A11B148189488144386829D1847414086A41189244460880B2122465828129051281851288828482A14816A2282009C8418E283282678882866188EFEB07244281854568118119E282D141D22631512281412A0443B416942CAC21911427E3444889948860224B16535184818B426024C184A0124283D31881D2848182
-:801D8000E242881122B818688358842D4A00278367DE10120150244C040048811028480189618228484C12A424004542142401C0481A4222492201104A0420A4484622C811828054628228824C68884A7884F2AB3470228112022E12114B128426A22188501A10A2412826084881104808480090448001412042948482004F22018B12822F
-:801E0000001440428801A9A24246241918F41F4F004143512814C90160818CD4A1B1210145C88515C2484228A3E14201622664C4418C046D2838382263C4184342942228B024946C3098F014425E2A2CC948A3B98461482ADC429C442D9483E242B484A724DF670713C222188128AD144400A9D31818111A9C86142782222C32488C0183A2
-:801E8000962443844448429844C01244C46062412882424E244B212B181886F4186288428909416682E462A42C814B482E1843F4592D104214446211112A1138384212291301114A216484803124008184444230242A81232284C124206248C02484103828522118B5021E8683A88143189A144386B38484F2F5A1242C2404224814294C80
-:801F000081220111CB12290428218C028B42124AC2118B1845882224A441A042114450481869149128168622C42123849382138994182241C308848D82C4419247219F730F124612212141887128222122413826901890184562421656284C418881443214249442189B148447818B3449840425014443011260C4A3429884222C2A01692C
-:801F8000082A244122F5727D80921112C5411432884E14115022180042424021014810044008220000240020418441186982406844142488428A14024280058C1804AD191427241331114D384C519229D569C11122188561A14848281855921487638B411E24161D6884844B41683984A4418C1158822E44563614449B218453226122120D
-:802000002237ACA8214BC18AE4627888C44249E821D448F618844448CF17032A012111421088262251221221901848A126888204482048642200830128484449210140034D1284C31631481E447011B84848480218106888009841AF920916E422C1116850248551828184122443442201800289024122214C040080021014A4214B214849
-:8020800080128402122888A2124150221241422E8C60412303123F2E084211282430112810922380012541222212024602212004243224588112441E281004100300424932412840A6381AA284304283022604422612D4330924D081011400C9A2144148C0185081200400A042400432001042062012C2240064482082313484872418C43F
-:802100002091348B21C03280628824F0A4CB8042C6428711818322014012C52428602485224142010028160A8190284022524814840073532252844C0511214C9132220000414C21440A44CAC1429FD10B82218422414846B822C41800243048808402244840241404842361810048942B4281001287428C22922C2F243124162A08B0189B
-:802180008801A6242908486D181244143F1C0F42898396111A1485622148160A40034E28122C8424032AA112C3817224088410A2128432D44128844712004121402244126848304886820490442A082088B81D09184501002211201282A2148C311112002400800485022002000030128CC11280C1141840140148008098720042301848A1
-:80220000107224F2C89B0048401845381212208161162842111688212184812441040042C01216041812191204A01281728447820083311423C64214002081D14231C84442F0456FC02880048B211200A042624442AC012800602222108284818228013034409112218480048112182110824494224441242A140420C2482D14427BBDA003
-:80228000178B2C11318F8471647418386C89B22EA1231B264CF5511225BA428186B22331482828582F8231268F21B21292184283E321F61824C9F324112351444F3156528743CD14C786216CF37A154D82A3DA22E384B151A11CB84A83EC4CD264A341384F1DF44684DF36054816E792E18151461E392F3671127852EA81D24145B2231223
-:802300009A493E2A5E12124236A2165E5445EC240422181E221E12186901265EE885A43223B218F144324E482D247A31174823F454383A5C42F022C656F2164852B072588E1E4C4C49F2E55D144D227B12AB218F127631512919C232583C34421A7558CA497E118122272490622163A222C564C484664818922626DCA5A1412B214B3216DA
-:80238000D241A12225A8231AD16C66122CF2B8182C04CF2BDA2C287126E442D8C4F33C5285E846BB4EC8222AF5E8DF201444088440088C040000848004002004810058800458800448400180044021011A04960882A0412011082089F21D15243D137F3553B21F23E7C7EF75F662412F84B522F363393F13D73192121364812AA2223E3240
-:802400006AE723B322334449E122F26A288FA2F67A188FA6E222F664648FC5E427F626362FA4B426027E35EFC193688D22E9F24C4A2F23D2AAD22AD38AF41828A7A25F14F444664F6BF8AECCCF8AAAEFCF22F284C81E4847454E418F9D42F253537F33761AFB193B8FD7F7192F3F97D482F132385E182F43F74123BF15F151118F9555888D
-:802480005E621E124AA1372C33464B114F66774EF8A8EAAF87F168BA2E624F67761AFE3A3B4F67F6526EEFC1B214F31465CFE3F23E2EAF63F36E66EFA6F63622EFE5F45EDCEFE3FD382AAFAFFC4D494F6EFD3426EFCDFC3C3C7E74EF66F4224A27844B8D4AF589B9343D132F2357AABF23F37ADC8F75B762F758782B77BFB7F353551F311E
-:80250000D18A774BF858588B773E327E726AA7332AB766F44C584F66F76E2C2EE22B5387A15AE141F7181C8FF3F27A7E27216F87A7441E5487818B338F64F42E24CFE6F67272EFF4F68EB6AFCDAFBDAFA8FADFDB6F41F1B494CBCACBBCDAFF64624F88FCB6DC4F43F1A4B63F114BF353533F13721AFB2B3BAFD7F51D2FAFA7F63A38AF85B7
-:80258000F55B193F17F74123BF95F55B19AF95F53A382F27E727B762A3372AF546444B114F66764ED8A8FC1A588FA9E125F13276AFE5F53E3EC7E1AFE5F6566C4B774F43F23C2EEFE3F27A7EEF67F64E6E6F45F75E7FEFE1FB5AFE5E32AFADFFDFDB6F6DFD7476EF4DFDFCB4FEF46F66F42258EF8ABCF4F9E4E71B385012302270224168F2
-:8026000022400214123412348CC42212208122810242001810B6488221941690143026E022012E1212228648022448444024C92640248102C78CA0424414844A5141C0488B148081068C041242E024024A2142F4244828848148A0523024402804131108418C041D4445A241218CA4941688A841AB842064818988C4A448DF440C4D421F2F
-:8026800041D228F1112C87341FC1324E1D2CEB161D6CAF249921AB9451AF147924F84AB15B42AF147924F842914F82D418F9244A1CF8264A1E216FA2F598212E4A96D5A2E549F2244A1F49D226F4912485F39124A3F49164A3F49124AF14F11124AF24B991B64A7985B84A3934ABB44B43AF647924D842FBB448984FAAF4F1DBD0A49161AC
-:802700008D521E2C85D2C196141D686B161D4CAF64D941B2489B24AB944D48ADB15B42ABB44F82F442916F82F44A914B121CDB86CCA16D5A8F19A24296D5B2E559E2827491F8224A1B498D411F49324A1F49364A9E2CA5F19164AF46B991F448245F88D21AB19494AABAB44A4988FBB648F0A65ADF740A8282000000000080020000001024
-:80278000020088000000000000000000400428000081005012F0721740049011101518811434188064140030140042811884800481A014121094284C012844125244D02806101201424841222A240BA9C124C085DF474C011B18A4418C54829018602111166881209414AB18244B1424800448211002201242AA214614B24481111142B834
-:80280000124264418B1C49B298041A088282161444D84808821C48F8B7A740244C48441844480964C911E88234414243D18279142244821428B11A14622C10083A34129582C228E931544A1214A24144D048E28CC1224F8148C184424A0A3243A4298CD8A281C28127A9DF540B30112413612415081242121412180000C01400480000003F
-:8028800000001694440012141285A221411A144224041800434824121804430841BF3E0B00001C014215444288484801401882C4146044100842211002604180021604282A08A0412250289222008E48002849841104454804BB5110142311481C68812112481A14021608481048021228124400180049C2421E2841182CC4344919D6A42B
-:80290000684241305C2242124A01124249450285A2284412128F48F2B22B101421011281465812704288180281200446480444400846022C0100248C120456868211522820054A4182AD2142C0D8424A0121184B82004422DF6F03240081C501124412A0148111185028002C014A218211040000436245122812C0142E844B284CC8244473
-:8029800022C48902800100442243542840741488D184F82671C044421694222481818216054098244184420041424024F14812102421A41410840412A100901420022E1452701428024120288182516883C2A218125F480E28429112468CA24200005249321848184244002B162825845184288100811602B0483218412C144802818C281E
-:802A0000444412446881882E4AC3334A19A148124026A8A11FE4051845021400A09427841200160118D0242182820181480010060022160440044444288741805128008A84810880048541088880021F820C4B34449116314C2168122FD104802131188901582D24002B142249344840341A8044084460874C1144445824C183E288316871
-:802A800044B082658190848CF46294891448582C8CC8A482889FEA0D006D1228C028814820018C441124A44144C0241A84528418248524428424011E242905240010A621180016B4420181288909409812324A2981023822FF1B0F8044284188440200842304008448421800800110021012082112224200008440AA2100482480012622DC
-:802B00000448002818185F330A430241001014941CC32206185418441606264844446882288444E4444400220080220450228110480222814F249188214062228183324883D12842F8774A001840044140881488414848188804EC224482C1244014342A43422841028422D0820212842190261082932218328429859412168801441800F6
-:802B800024ADBA404184141804850410212202B044028902400820440812008001008C018C8402226021401288146ACC409818402268810012A082DFAC068001002901218463F44418214423A414844222304458222800000020042002200129828201123084180000442280039022007FF70A104202162822010040040064100221004466
-:802C000090188011824102284B122C840444226C0128284820814204002A08002438842911F41DC2C0148180030013020000111400408C021028A242100880420200262282020084188120022100400210A2A10048F07C7930915308421646154808184088441C08508449C412101C941441004442901400C012422001002849820345A23B
-:802C80002512438424A45243842224820870CD0E84804501004842216052C981524210082542081042884188CC280040420144A481681088140820114814882201A0124212101482F2C5B140348D18C3911479441293482143B22272143842EB4381812D645E6C2392424CE24142C444831104218721400236220428242425DA2C2482E124
-:802D000082A12447826AC854A0442C7212C8224AE243B972228891384D17143E1292414887611245CC68A447155E481D4881C41B1445B45264A241C7251634282A8432244C62A74742426041212E342827A32CE68285F1122420217128C622A0118F212491541E18582CB5249D4289D628A1331A36263F520855C154A41943C82483113CC5
-:802D80005487C28D32814E14D5416C84261E5C2AC41845588CC783855A8285548A1E14222D428B221289C4642366412E282289F222388D2A2F8522F132968D622D38857ADA0A6B826A32128F8301508C8188BF8E0C28801204234418C248218C14421882048C044881488014C8428982148804488004000040384284230429C84829E88130
-:802E000094821A94A21A8488848884889488DA0826777755247F12B6C4F5672727E41F72F6484CE5D6A6F271335E5C5F71F11B11C5F626284F64F2424C4FE312F664446E6C4FE252C66FA6F674386FC2B614A5774F45C5226F42E225F754764E6265E421F2167483F42A62AF24D44CB122F3C6E6ED228B22AF49788ED6225F469ED26F6A30
-:802E8000FA227815FAC2A8C7CE8CF8644ECF9747F161467F5354247F13F244565F57734EFC2F6FA55ECCAFC2F27B3BAFA5F75F599F11F36466E5F84C2EE5FC342E6F24F44644C5FC667ECFE6F6E4EEEFE7F324EC4B517AF714161F3454464E434FE7E724F466643E226F43F368228FA3B758F76E7E2F26D764F298F4AFA9FDBAF2CFE8848D
-:802F0000FE84862F28FC2626AF8AFE888A2FAE7BEEEC84FCE4FE26065E733F11F4343675F51C5E5F52764EFC2F65CFE4D4DDF16B6DBF16F2587AE5F45D55C5F66E6CEF46F2664CEFC2F24644EFC4D4C4F22C3E4FA6F64CCE4FC1F52E2C4F45E127F316142D236F47E721F3547C4E626F42E621F134368FA2F268228F85F54E442CF34466E4
-:802F80008FC4B2EAFBD8BACF64A8544F6EFAF2F26766AF86F7F99AAF89FF2E8C8F86F6AC9EAB17141D267751CFE3731FFD9C5C7F53774CFE2D6FCFC4F44F5D9FB6F6692B8F85F54D4BFF17F56C66EFC4F46C2EEFC6F46C6E6554CECFE4F42C2CCFC2F22EAEEFE3F7AC2C4F45E126F256562D236F47F731324F677742F226641E126F41F141
-:803000002828AF87F3383ACFC2B362F786A48FA4F77878AF85F74ECC6E5267467E726F6EFA68788FA7F13A78EFC2F82838CFE6F6B4A28001002C012C41088C44E2814402C048C048200100800228210020020022800122A0122002221A044880C4221A04482800F08C8B102411481CAC418024042B1490181A64548490442B2416B84A714B
-:80308000242854A48304830452244220C4122848E02201C0688148188A94188A048E48182298AA0492209298825E79C0431F41522C1F4132481F41324A1FC1B26AD1C1B64AD981B64A5985AB944B43AF14F93448AF14F924482D914F83D418F9244A8D814FA2F418214FA27498F1224A8759ACF49824ACF491242CF4912485F2912CC7248D
-:803100001FC9724AF2812CAF24D1C1F24A921F81F64A925F81F44A924F83B44AFB24482B944F82D442F9244889F9244AAE24F022491F41F62A431F81726A71117C667111FC2E111D4C2F52F911482F54FA1528AD924B435CFB3448AF14D984D45ABB36D41AF8245A8D914DCA8F51DA84F598256D428F19D214F598256D421F88D284B591B9
-:80318000D626F48128CF24F1912CC7241FC8F244121D288D961FC1D628FA15686CF914484CEB82D46AE982F44A946F82F442944B52CFAB0D2008000000100800000000000000880000400100000000000000800100000025016FE3092412100160841502404801104824042141302442420000005224220012281810088324024880048063
-:80320000C4248800484008A6F444CA80A1282041180144890180321820048381A24100200121445024002084810280410880020080C8229820081222182C82294241F8732140A21C4001608464004588B22801008385220524221A642530845024001A9441212881184A311800C04828004130228024A21822400240F11288DFFE0D18282B
-:80328000201118011189011001304841002141100400000000A021008002108802004888689880180480A14298260843F23F988001004100480018100829010038000080020000122004122001282C81068400818288801184291272841808003F55074444C42D214062811849020013811184F4144828412E444CB51894442869149848CF
-:80330000448C841224D224311849042812611044B84442988C426280085A4A98818448222A3814486FDD0D44502C1C420418422800800149014628C22490541E480029048904484084C244184C05281828200640C88C8CA484800843426812844B84844004EF3A0B12410000A11844800185811182941420B14402C044224C42084484223B
-:803380001260218400125042164214E8C20400288880A11C9886028422A81848EF38034682820280280120420800490121490120A1216119144244848604124C04284924C11283011AA24220C42860180081222081240C802826F1C8B340644418A183444C041304002AF144110012200243022992184048084118002011880414201408FC
-:8034000020044480282402842A018D22822420F1842C80028120B121082420011881242062840000008200290122840022002800240041844008000025280800480042EFF30B302228A146D8C14204200212184593147042C81422208133244E8100698134248C812184024862188180344880B4280400880021884A2288B2820448F0A3F7
-:8034800014B0244494188001187042211108811A04221800C02400A450848122420041A0124418D012012B1228418440C881008C04848921214408822848DF1F070041002120848124212401248112002220210220028002184800180010020048A0488024020000008820044F7F0D224448182242404204400143548400410042284800B7
-:80350000001E229022293224414D12422B4210042A2134388331222280081A022412D2502842841078FB0944204144344800200400001004208101104418941416242401008C051088011218121008008004488200008008CFD3011C8441418861411441400C20429B1443840218004112290200A02100A041001812200100220041228456
-:8035800010022C622488008002FFB70F0080010042404401141A84410400002810044800000000480000003042A024804C64888800002400005F5A03904848484006441641015601440080044A821404A02400000018844800000048818190884004800200000000EF780342902441002646222201224051298311721202442D2412432464
-:8036000042C426281064222844C02460C4212821619022412830326C618112181A880118B3088E14160CFBF460484B180018000000120000106445C01400101828011A0448588B1481001820011240424818040000008110484811F818C7C0188148601840464821C111C4182C2222C512522C4208D042014C012AD82442842401454122FA
-:80368000C118904210022002206242E084024224242880022508AFE5084D14821741181E84444C924416A14460942885524542614B442002A0412A8204498223B51234222A64415A04292421216141B022F1124821422E248A18B64808002C148228C418CD19F0EFE72076CC14344434485562C4699318121A24514585D8822151421E1458
-:803700004B242D543E146C524485C82632D042C4224A91148B44CD242921062480A1458C724844688249A1728CE1A18581E1211112583A89928CA601AF8B0D19E481817218A412CB142125127115D411913119E114F51232CF41E422A1112F24C2184397244B147024F424481847634B32221A62454D18ACA1451E168991262D12238231DD
-:80378000182E228B228BE8214289022AE8242C2AAD388423084285F85BAC90219021811B2887241932481A324828830442602422244082044880042100002880024C024C024C3242444E12A084124A28A18412422288322CA843883A84786847A1741F12F229299F93F31D7C5F77F7317B7FF6F64F485F47F771794E581F11F54D4FBFD19B
-:80380000F77C744F67F772522F25F72E2E4B445E745AA566844F62F232222F63F232322B263AE742F174548F65F476746F46F5361C446F43F234566F46F52878CFC6A7768F2FBFE2EE2FFDCAC88F8584A6EE1E522F2DF6822A2F33F3BAD8CFCFEF8E6AA6EFE94AF141717E78D055F15978CFE7E7A5F5434AEF96F27D6C5FC7E385F5787C83
-:803880005F74F45B5DCFC4F552127AE525F76E6E5AB516B754B536B764F6A4B62F23F236B26F23B762A6735F53F1745C4F37F67A7C2B572F87E542F234647E522B568F87F76C7EAB36FEF26BA6EEE26F86AACC4AA477FEF22F2DE6A8F2B2B18FABFD4E4C47442F26719E0D5F52D144F614141F41F13495CFE45662BF74F47534DFC5F551D9
-:80390000159F17F71133BF945488EFC5F556566F66F45662EFC1B146F422747AF524744FC6F624A44F63F332242F22F262222B734F55F754447E646FC5B55297424F22F212162B315E72EF62F37A6A2B27EEE22F47EB2EFE5AB88F8CAD11DAED23F742D2AFA3F1AA8AAF84D2C6A4518F8AF94588144B12CF41F7353595FC3C4D4F64F62758
-:8039800065FF64F41E1D5F47F711149F17F71D7B7F55F51D5DEFC5F576346F66F44662EFC7B772F734344F67F524346AF674C43E326F49F336762F25B732F754754F45B555F1727C6F45B31AF514122F67F216645E72EFC3F778422B23EEC22F43E32FFF1238DED89AAD77DED22F24FD3A1887A2AF8CFA96DCCFE3F7A88A4FAD0D41D0146D
-:803A0000014150241004204102141648044412200140044C82A124184A12160800901240022A410884000020412201005048F0C2C30080210100901212001843412181014A3114384382213248841024812584214528812401800185022200288180081800842184007B44E022F5112487221F4132681F41326A1F41B26AD141B26A9921FB
-:803A8000AB9451AB9443F24AB143F242B147822D914F82C4914FA2C4814FA264114FA264192E4A96E5A2E449F2244A1F49F224421F49722CF29124C3F69124E7241F48B24AD141B24A9921AF2419F54A9243BA4A3BA42F247BA4B842FBA4484AFBA44ACF5E0A2E131FC1F4284216746863418F166141A71644AF5649F44AB159F24A924113
-:803B00008F341BE4343B241CF926482D914FA2C5914F82EC11F8264A96F1224A96E5B264592E4A17892F22F491488B4213396A13794AB281F248121F41F248861B218F64BA15F2488243B84833942F247294A82467892B244F88F1CADA402888040000004004280000000021008008000014008480040000004004280000000014A0C2008C
-:803B800000004008002082040021844200004800001248180000000042184810028800800C009A0488805848CF480F200844821280A214200400802101100400004C04410010080080011280121814080088002004001041012F520820084C840880A214304422488002218110440220014B480012801101100852208104481002490800C9
-:803C00002800200486021483F181AD000000128100000000121820040080040041800484000000001A124814080088A084200498001188416FA10A00400400000000000000000000415084004008000000800200000080018810020088F03A4800400884280084200184200400000020020080011800420028008100281628020020041065
-:803C800002A400001FAB01008141810010081810084200000000284004C1122011084800000022008C810200A0148008210080087FFA0B0000200200000000000000000000000000008002100820020000004002400A00F0D1C400000040040000008400000040440200240000000000002200281002000000C01800006F93052800001850
-:803D00000000001214001A88232101C0480000001200222008220000180000008889010000224A88015FD705400400800200001002008100800200008004008128400240221102000000000020080022B04604280000C0240000001481A08189220180420400002112002688220821402201182042020010080082182084019F3F0D40048E
-:803D800000120000002C010020011200834402002004000000280024280000002088010040882288022F240C000000000000140000000000000000000000280000288850882003000000180020013ED2000000001004000000000000000000000000000000000020020000000000006F7A080000000012000000000000000000000000000B
-:803E00000000000000000000000000007F8901000000004C01000000000000000000000000000000000000000000000000F06511000000000000000000000000000000000000000000000022000000000000E0E10B000000000000000000000000000020010000800100000000000000800100002F710300400810084004000010040021F9
-:803E80000000400200200810020000840000000000000000004795001001000000000000000000000000000000000000000000000000000000F0E984000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000049
-:803F0000000000000041000000000000000000000000000020020000CFD3080000000000000000000000000000000000000000000000000000000000F04FFE0040410810080000000041001002000010021220082400180040080000000000000000B0570F0000000040040000000000004400000000000000000000000000008003000012
-:803F8000CFA80B0000000000000000000000000000000000000000000000000000000000F04FFE0040010000400500800444001002400400218001882810021880088400008042080000280000F0B236004001008004548588022148400428100240042810828401882810828441848842188204441828842148E041012810A21140C435D0
-:80400000000000000080041400000000000000000000002800008008000000288400000000BF6F0B0014000000540000484084041002400400218001882810021880088400840028840000800200008FEF030000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000004D
-:80408000000000000000000000000000FFE40F00210000008004002810020080020000800280040000800444800221484004002148400400214FCF060000000000000000000000000000000000000000000000000000000000F04FFE000000000000400100000000000000000028000000008800000080420800000070820E000000000086
-:80410000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000008002000000000000000000000000F07F4D00000000000040010000000000000000000000000080080000002884000000002FDBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B
-:0D418000FFFFFFFFFFFFFFFFFFFFFFFFFF3F
+:80000000C5234C820100504445B424A2222200C908401242B214D1D3085088A04429128201482100454CE886421218080025513221A011A0A84400404101D08811A24482240010025044A022480000101216B21701211004002410022481800442118820020041008C024200000018102491228001111002212484C048004A0200F0D78825
+:80008000002301148001000000001100200400C021004440020040022100005022884042088C84C41200000000FF480524186C612128215022464852221028E484C441428D881146041511140547428C8292448302001022C1124496A1281653222CD883180281A4508A484028A14600006FBD0B200115512247211622522300A12185027B
+:80010000424814421332810044450415114484A2222048421212E2210121292911224C4202A184424E12A1C14800104434D624231122810190120021002484A118B5091E41480014702101222221243042290140222158222C18842142022121704882044A8428048200412FEC056F22F212222E122B11122B11C0123592821E111F11B140
+:8001800089E989F848888F18F44848421F9454111C548995F844488F44F424444B244F4222E24202286554442E246F22F212222AB192A1812B99828E923592822F31F111139B989E888F84B888F44848424E4880548885F84448DF9B086F2252262AA1131221405122213CF1131119F8918887818F18A44C4214154151818588F44844C586
+:80020000B444A2262200405444286F2252262AA1131AB88228485122212D131F1191811F897818B888A44C420040588848CFB1050000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000015
+:800280000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000A0
+:8003000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000001F
+:80038000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000009F
+:800400000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000001E
+:8004800000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000009E
+:80050000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000001D
+:800580000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F009D
+:8006000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE42B
+:800680000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000000000007F
+:80070000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000001B
+:800780000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000009B
+:8008000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000001A
+:80088000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000009A
+:800900000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000019
+:8009800000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000099
+:800A0000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000018
+:800A80000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000098
+:800B000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000017
+:800B8000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000097
+:800C00000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000016
+:800C800000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000096
+:800D0000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000015
+:800D80000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000095
+:800E000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE14
+:800E8000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F0E1
+:800F00004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000003
+:800F800000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000093
+:80100000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000012
+:801080000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000092
+:8011000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000011
+:80118000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000091
+:801200000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F4661852581549460828422B02421614236
+:8012800040424EC4240085213858122744189091899285189B946034001E28E088C44120123424411400C026004C428202308812572730221C121889744834446E1449D434072214C46E842A24921237434EB2F6921888C9C8828E412D3525C29789B1694894CC8C68B41364149114C969C487442E484E825AFA1224B8364DEC147824CA37
+:80130000242B416D388E121ABA122875C2F2B928002814424240B81C34242C46249121414228211214106288884528C44112348E2482681941C4820026018908448314247A8242015C1134A123922261446022128384F46E36242A64812100C024001981214244C884E324022921C449124E1890847022A4188951488C98844814344258CA
+:801380001130D4C02410A441321A6A828442812044CA320092245F350900815049468C848244040000002280682A0050221A18015012001008118130418501E0820444440000001E22800800215718106114508100000028008002412564423218001A08002114181661848988344800810089042084020040441404388029088AF14F2AF7
+:801400000080010000000000004400000000000000000000000000001C01000000000000DFB70D0084002341040082A0144C4188721118944422830870840A6218222240C528838A3481008290482887141342028C28021C01490249283824811888F0A64714473114222771C029841C83C5818B1414402244022C22582C286048484D68E2
+:8014800024144123984129CA4218C02282172197411FA24162681282383242144004108292128C2185425884AFA3475124148114218D31811C02148B1420D12481C422197124126482830860884C84361344238A54428CB69A028A0216329C17A146C826932402E0843821C0117024022E86981283A41281416DF1C01160221644024112DF
+:801500004A21881821048110084A189422C0844D4289022002118E210048112918418142228831812E121A02004100007024880188841E54302428C116040028148AE214082021042C09850114A28143022E4828220012220092228281822100130100B04A9841252191123048122008F0332220C111212322D2344152782A410A3C18C872
+:8015800043414FA11844BA34E4214A9844C0417948548241B3A13425BC527822A6812382792223012024CA8699D11C818401CC211824181442A8C142861CF4A535C024195148290119114201A2254142E8143142961802E984529282846C9281462242022C11B82238222728182C028400004C19321C42304A167C820100A944A881100427
+:80160000CFEB0E1828214C8242046D283943A88413081044D42449E811A218E042041C4464C28143C2196816844524A128981B2823612820841AC119112081C84160412949041242C28918749109F044292489118C113122181400312604126084224E2211AC344181214D182C11A4121E289210210580614E828982A141201104008002AF
+:8016800000004866AA41846F3A02852454C122002548418912A12460128C8464493013444026018988018C42180418130118850217A48C218108441582C2114501142822602840C418242868FFDB0F1100101124220100200843410141842002501444200282408902218002001018484184814208A18301222184004481F08A3E501447F1
+:80170000125538224441242A1109112250144C849514248B126C0245B81154486788C43226CC388962811A42220410922D1AA8128CC948455141222894404808266228814416382C1E4889F4BBE6000016581812A71211181902482D81901811884D4814481C8204110010229814860112181222122C48180818C01216C411401281210239
+:801780000020848422F241BE00830418101A044100004B1842002004819011288582420400848184910011008C1868848111401838184008834128140880016B188081C11A8181181880A1A11884888028C1888302167184C19C2C4291811187222002822200822230B1A226621A112A2123222202181281008400282868FF3701004044F5
+:801800009424C4104A4448A81290184C2211444C2121028C010044118E18871120080018200484181400008001844082011200F0E69A40C524800221144901921C880200A114C09143528686810824F4702A216812C012264122022A5881180020C8881100100822B02201004810E8B70C2890244240B22804CB42C0288220881264824157
+:801880001244A24426588422405884C4842A281C08292828140A8800938A04400800008423118845885412BFB7098422812608450821128420022480A38116288863111A6248228C195814288002840024160248988911011200921218200184222001528283F4E6890016044381210185141226011998129081251153122788001582588C
+:8019000042412840031602258202C011128C028A8202819B21142800841200841028C218221F270D44002147810012002308126088842041280820010020118214224182842101100890188011482801800898128001122470360B84D014041440C22826810244902444138812115422904961924C8182192108008E118170828898422023
+:8019800081810A82404114C8284A02000081704228F1E52D50443885D6C823D18E714C982647942B311F81C1A813D146B81AA482A95B8A1E48277A2FC82162212F815BA454A7832E224F28EA83D428A952A728AD422D822C61388F91216E28878A121F81F948112A81E98361811688C12885B818638160811AC79189F642FD80E141C418EE
+:801A0000521C21D143614183D24C388A81A81AE142F8161915F814211F48E18149F118CD4F1839281742435214CD111185338184842882321938211A23D2119278871AB21C3229281889B1589818882189241128E2A1726238B2902147824D216352EC26C4228D1A2F41238A2AA2188286F88924B6D141D13E9825DB835B381FC27285B280
+:801A800088D88BC226354CA928367898A28394322B887A91828D888F81A9812E89288C5889948181C028A011269A128D185846B84824F1598D100111104112011124112440022C022400112811100211901310031828182814009012000000000000000020742F4FB134F3343D8F33F22F25957E11F75D537F12F26744DFB3FA3B23AF2381
+:801B0000F333111E16AF81F31D9D8F31F88F8555F5149A7F5BFB61C855F51D895F52DAC4F132143D1BBF9BF9F8FA2F8BFBE1CA2B8A7E792B882F29FA812B9F13A2233E321F3AB288D119F169511F13F3A1A13AE1C381A1DD8B22AA4A721A084E5A8F87B7B8EB22F657B6141F13F3347516F33F3D17E116FE7872FFD3F26B68CFCBFBAC2E63
+:801B80003F3BFB92B49E948FA9F93F9D1F13FB8D8DD5F49D1B9F59F9C3C99FDAF23FA99F12FA878B3F23D19BF9B5958F8FEF83E2BEFCA282AF95F5A8A82F28F2836B9F13E28BFBB8B29F3BB398F1B9B19F1EBC31F3BDB583F3282C89F1C8E88B228F2B7B1A321A87815AF52A288BEFAFA3F3A8FFF011113E74DB33DF42F21C1F4F61F15AFC
+:801C00005A7F42F26E69CFA2F222A43AF381A14F69F11E98DF7BFB1F17B7515F58F8949A6F51F87F4D9D8DCF9AFB2625EFC2FA38191FA2F3AB898FA6B6B2FBE8C38F2BE9ACECA9E92BF8A1D38DB9BAF338B83F89FB3228AEB11F9EF731399FDAEA83B31893188F8DAD118FA8F8222AAB11184E58AF87A7B9789F454AA1334F43B331F33DF3
+:801C80003C16FF161EBFB7F72726AFB6F6BE3EBFD9F939394F28F88616ED9AFFF3F1B7B7F5FF8F85DFB9F99B11DFDEF6A9AFCFB2F3A8A3FFF2F83B1BBFBAF3BB9BBFBDFDB3BBAFAEBCBAF9E9EA2FA1E12BF1BB939F91EB8BF338B83F89FB1A388F19FBE9699F93F3B9BD3E38C992188F8EAC118FA9F9323AAB118D184AF568688FADFF4836
+:801D00007A4F8E07000041302412200992200184441285048922091185144284410481888121800829498841A882848884608140088428168822110881F02E56A01A4449819214441884698132221688285842922D21112D94135B42538132A14422C01A1CF221828021088225328123022A08881122112A01000000A901A0414A43F19912
+:801D8000FCC0421F4152281FC132681FC1324A1D24AB141D24AB9419B24A19B54AB924F44AB147822F14FB25482D915F82C4B14FA2C4814FA264115FA264191FA264592E4A9E242E5A1F49E222F4912485F3912483F49124A3F49164AB141D24AB9419B24A3915AB9443B24A39242B944F8294924F82A4944FA2F432B7C05A1F4196481F5F
+:801E0000C1326A17C183D44196121D6C8F44D941B24A9B258B9449F448B145C8B15F82E414792798B84B52B85F82EC11F8254883BC21654D266B4C2E1B17C92E5A9E448D431F4932488E24AB141F49B64AF18164AF44D941B24ABB95B24AB9B4344A4382F9244829F9A6484AF1245ACF950B84000000000044001800000010021880080030
+:801E80000000508200000000204104280000000021F0D33E00384100831218341811260830181A14042C91141E2410488808440021C28041488A04122001190100818C0A12D022084668815284842018F8BEAF008216183428200100204208860855483481A480E24841388400811844AC6484882E4414212544089C02008C01121284132E
+:801F0000012001C012981816019F980CE0844148848242088901C9226282841A0CD1241F48D124439228CB181E88436848402A21C8481F81C488C1A714212744811840012041B83C28219111290A83351852A41E8A1212F0AD8900284901818418441001001281413014400800000000490421A042001200871212008100100824000012A5
+:801F8000008884EF760A00A021414481503412230420011121824482145058A200404A542460A2009684081C490400112384A286200410140260814C2828C448AFED0B41E042111209136182166882A08118898CAC848847811B48284113284FF183644239A22412A01482205C2249D252C1242E1113A884AAC1842812200856A148830471
+:802000008181242266082AF83FF510041634228541D4180185160812188C8988088A1184581486F128142A7864011CC2286341A414890A40E222080082821A820822420042C28121841068488014F8D3BD0080224104902813E1212224084842172482C44E8122001C4C83C84280042440022CBC8411D441F1A1141D341148825522868158
+:802080008A28C411604400841229E28C02E8AFDC014872805341450169021481469288328001C42A84C1811686D118444464912644110441150C49820447240000222810028342418818A22418272422850246F847B5004638182180412824A1128012342C1227828814208272289224124001A018811C413821C011608342184C428102F9
+:802100009126144428120218181008C0225828BF8B448241544100811224840081122440210400180041408802220000A1A0214118111A14260100408101522800A0811004B0F20C522A31182953418D112462842A41C82A924301AB1242808432B12A3114C304C54189B2A14168118544588247124A614190124C14222112392421818CC9
+:80218000511289853A12285022C02C18281F21062144450140941844291101488184291181588528125084281144881A120441004C021222284911A1121524022200110020014889A1492820C4488F9E0E41874280014012981441001841183014284860412051421088010098801188014C02D889B8148428120880628800100490288082
+:8022000011086B1DD021E224410624C11149418B02AD11341C511819E922781822C212848E1841A28C01881A041A482841391120112211763212283112249146911A1D228140820180012218F076C7005082484110A4120090288400321440711144343300111B24F0A114448180014A11A1124081B241A1861E2114122021011021210233
+:80228000800100F06A3A40011014381283521210B2181292242142418180210241854208211484122A1111C7A12850168391441100844119029180016C231248E222014C0B4487429F9D05869424108411082844284100411888302820020010844118244118410814410028A8220040182802000000840000A5B18D4922014941480884F6
+:802300008468E08461432001848922A118458222C8244308008032814488430A4028A4414110648841008230111852281A28A11480A12181F0DE2E00181440C11116011183011514117821444274824211028182818100100881008222A428213562688C03A34162117022098400801282028092243BE4002140084110C4184428008484E8
+:802380008382080028221440548183618226051A8828018100205118190860111614088118241281188124282011F29E2F40089C84C11180432132184064811C1214848108111C5141A9031909193883823100142B8212478259C14120044F14629242204104194241420244005042F024FF2062486381D128C11819B218E1979218CF25C3
+:8024000063811C21A15293381F24390B47115C28918A95681189F18885B0899111442AB98BD238014E141D167BF86CB281B111D194C228181D988F8181D3898181E282A9112B1218AAA1114772F0F57B2464672185648194F3711859869D16636282BD31413D1845E182A88A16C8417587322947F28C5254849457822A7112F1888686D1E0
+:8024800048022845F61E221C42B469E4C2E298FA3B148D12169D282A729901142B12A524423C12412A02AF82F292A67015E1825791E7441741442E161F5212E4C102229FA1525C97C14F41C33EABBA123AF32A146F8993B847482CB84932112B354FD9C2A816E98129E91769411B33132261332F99B95E7C6C021715B11E4331A4125727FF
+:802500001662212483B528B212028F8151448F9C06112111001430223022100221501240218812011160284424D0215848245024812240010065012130225012501241108412044100F074C7342F22D2124231118D8BC555FE5D371F14566EAFA4F6293313D237D1BFF2B7B4DFABF9AA223F1AF234166F41A13B1B1B4FE8583BE5F6171745
+:802580004B337F437116F69A988F89F1BEB4AF19F114367F7153F667613F3BFBD41ECF78FADC4415F76262DF72B281D828F13B12C5E625F62236AFC9F92626EFA5F52E1E6F635144CF83537637B2343F32F2177A85F118113C781C7724FF11393F15F42A366F67F73931BF11F21F1737B17F8BFBB53A2F22F233337F63F116342BBB8B3B58
+:80260000CF895915DFF8F91F1FCF83BB22738EFE9A9A2F91B9BAFB9A93FFD1F114366D722F21F1B3B36FE9ABB8EF657D23FF5A53CD15EF68F92A322D26CFE1F154452F62F38A8C67616F8564A223B336F2382C6F63F34C83F035376F62F61B1817C1CFF1F11D15AF91D357F3496B4F41F16A6CBF12D3B9D2D551DF4F7AFAAEAABF3BF92293
+:80268000B26F727127FDB6211F9AD2D5F189899D8A946F12F2BDBB8F99788DFFAAB9CFEAFAA8A847E27D277F527415D677F8BE8D7F58F2D9E6BF51F34B51F7518FFBDB9AF11B39B5F957462F22F3BEBAE5FA7A7EAD3A2B1165F41C184D1E8FB54AF33236EF63F319184FD151749F31F131397FD1F37C6BCFE2E347F73B3197B14FF17115F8
+:80270000FDA4BF6FEAFAB393AEB277723FD2F2A5A51F9AD2F5F98B8BAFB148F9BB299FBADBB9D8DFE88AFAACAE9FA859D74D367F72F337377F7AFAAAA87F54FBD9D59FF3F14959F7D18F5BFB2932D5F81F1D3F35F42232EFA8781EFA52442E2267434B238FE3F22C3D17D81002004110040000144024C82612285048001100008D24418149
+:802780002A08004302002B82842A2841414841480124C0268424800281D03C08472228C14418129021C02C1828811100208232212153825881541518180111203288002411142841190484001800150800848184218002FF65022CF41124A5F21124A3F4112CA3F6112CAB161D24AB941F81B24A3915AB945F82F44A9157822F14F92448CA
+:802800002DB14F82C4914FA2E414FA244A5E214FA27498E1A2E559C24A8F4DC24A1F49C2431F49D228F19124C3F49124AB141F48B24AD141B24AB991B64A3915AB9443B34A39342B94478B29F93448984FA2F42693C0581D64A9F5112423E4C12276113C281D444CF911688BA45B21884F83E4147824F842115F8194A27F8384F8245A4E34
+:80288000312ECA4E215FA2051F22E548D2A4E51CF224121F88C2528E64CD538AF24C118AF24E111B68EB121B68AF42E949F44A211AD25AB8B4B44A28F342A4BE483D842F83C4844D5A8F83038E28820000140000440000000000218001880000400100001A020000000028840000005012F0A5CA8001008441001244008444818483011078
+:802900002811948400104808000084328001A28459012812288042182101400A100840F53BCD00434818041A024919088C010082411008220090283021009420028140011C424401001C8844814421514881221230182A05894219F836BC00C64808841E24001844450822448C58848C0130281612348400AA015018800240D91803624033
+:802980001148012681C421496412831315288251288C215228265818C42F810B18444004001E84818001810000840000608210114808001008001311A42860412088010040880100A04100004D6600000084003081810011814004890242400100428440821214081012015024002849014008120000000000AFC30C1D2440CC122290118A
+:802A00008722882002508240C84810C424178242841428C018102111E1814202481110428241A1428148802481449842812A94184342C228428C04FE6AC024406C214008221081021009818460822814501814008C4148012661C18421001002274120024604800185020081430200006F250911008002191138828881002184C04410142A
+:802A8000E4842204800248002C0128002C444101401221C42818204428842144282601248322C448F0FDDE00235424184411101408A021404108702402442084381800000010182301809244818021982881414781160887518C0240044078188211F825FF00460800448400400841431244381816D12841382124162411541C008A010060
+:802B000013022850844220442504004120021240289418006602426F5D0510849128000000400880181402001608400150A446C42281004008000010082C0181002C08204204808201005FD5042420B11A4214054181008440455C4823D1241118282164498141C141A0388110282281024942142854848AB428111804846041168812C476
+:802B8000448381C2182A2131485E2200444100100800811A0280088113C212418D21001190818998461002244008000030110021848921C1821508100800C04800CF89090040342470140122441C0294009028C02460424C0100844C428802818444242002801408814008000010840281B01862488309AB91C02800201152280010829484
+:802C000044895424842484248C11483828846304882054862200251C440850224220110483184818688881901843081084814474350940440884450241842184901280518418441144002890284C41082081220120410481441281128522011220412401402A11088110783508148100418C74140160811C4448121C084116E241642116D2
+:802C8000242135440044491102C428901240118C1418522414004342C342A021242C04101854481881B0660728800318291288828202288445022032288D223028228143022628123828220089120429022C028C828C0200228C0284C0282A01002A051A14F235F240A42184418C1294224184C028005084204104C482844018440400842F
+:802D00001041410800804404406641831248341C301800209118904890484D9C0010C5481100A5524100121B845641311600198404484901290148824C11A414C1461431164A2194484921D44211A281284C61411A1801441A4834524604824014E453038624088302812284301A12A9011880538624182818444502282416881204A02139
+:802D800023110112008428818C921883022818441826029018000024F0D7562484414D6140010045410664168232110014812C04304242892188181408008501508649C221281683828442A14124648016C41A64244472485042F0BDAC10B48822121414FE14224165B11E12D128D4815883455644E54E5C574E4644124C5222656441266A
+:802E00001CD44412D688F4281A501612405428AD242E56C5322A8F48D258F2AC181B221081057E163042A57828F4488883715CDC4AF452784074841469849F33431C437429C21A8D221E188F64B51451938B112859E18676167812C8484F83F144488786451A78984468812213C14C154CB216B14C42B8447452C92C178147A18CE141F431
+:802E80001C12AB85897198D4281168A116E6444118C44C1884CF270F3B22124FD1D24842EC24F2281DAD28CC42F422592827118F44B4187122A81387228F21B128B12CFB2C148B4487422883BA146682A37728B414C224CF217218D246F12164E01262A18932D24A8331322884AC73164CF8142C2D886F42F3881843A1513E748AE12814D8
+:802F000074C80C112213213211221126122112210234C02280022880022880925128584C8245B42205481122112A11A1121162114A18A186A084414A1A8418841A242428F49C8C242564148F91D1DDF51D8CEFB6741F792D51A9ED1FBF94F169189F9DFD4C174F1183F11C1A3D25AFD5F5CC8E8FC455CCCF81F5184846D65BF7494FEFE4AA
+:802F8000F41C5A8FC4F4445C5FC55488EFF4F456544741455518DD17D7E17F74F5998B3F1DFD5D745F5CF2D95BAFA7F5DBD9CF8DF1D87CEFE4B596F9D652AF4DF14D44CF89B89CF88884C5DCC6487327F5155887D29FD1F54D58DD1A6D12F571295AEFEFC5F15819FEFC5E51CF91E361F1163E3FD1F15A5FAFCDFD487EAD3C8D18EFC16357
+:80300000E4BFD85D71AD8E8FA1F74C68CD1816F16C4CCFE5F55D5D5F5351D426F34F5DB7A3ED1EAFABF8D3D9DFC5F7C4348FE8F19B9BAF8DFFDC1CCFA9F38A9EAFECFE9E1EEB1D9F45F5D8A4EF49B9CCF91E16DFCA43D153A2731D281B224D314FA6F61E2AFF42D2D2F22232AF64B771F7D9FBDFF5F51E1FAF83F33E1A3F73F37757AF6FBB
+:80308000EF46F52624CB734F66F7662E2FC2FE341EEFE2F276126B624F82E3B3F2747665F2171D5F55F72464DD26BB32EFF1F2667E2F2DFEB7A6EF54D2CCCE2E2F2AFA4331D845F2A2BEAF63F14AD2E3F4E8EC8F43B45EFD18D4CF64F5FBB5F02624CB225F43F364354F17FE24327F32F32E212F72F226263F77E717F7DCFADFD5F53F1744
+:80310000AF43F3363E3FF3F373772F6FFF6A742F43E323F1242667E62FC3EEE7F7BA3EAF27F332748F87F514362F23F34E462FC1F17474CB225F62F27B38AFB3F3727ABFBFFFAFAEEFD4A2D11F33F36363CE88496C622F26F7EEEAED8AA7448BFFCB67CF45FD5CD2CF44F5C1AA100200000041122448C0484484104122091242400481000A
+:803180002100100441100440D8244808400200244002002009F01E43000044000000200112211220110200004008240040024522014002002502A1281800000084000000CFF50E4D421F4152281F4132481F41324A1D2CAB141D24AB9419B24A19B54A3924AF547924F8429147822D914F82C4954FA2C4814FA264114FA264594FA2749870
+:80320000D5A4E449C24A1F49C2421F4952281FC932481F49324A1F48B64AD141B64A9961AB9459F44A944B43AF44B924F4429447832D944F8AC4944FA2F4C152F0244A1B412E5217C14B161F81B46451816E1215EC467981BC4A9B248F24094EB584ADA548ADA5218DB549C5A18CCCA42D4A8F59D224F598254F12758884F4912C2E4A1F5E
+:8032800049642217C9CB1213B92A7111948E1B282F4279919CA25F89D2427894D84A3AB4AD8443F94AA463FA48144F22F1C35640280800000000448002000000100218800800001400848004000000400428180000005012F08A42000012800224000000604100404608000010A41418490240022411008002800184854108814048040074
+:8033000082C0226FBD042068C12200001881C021810022004008008110040081188011880118A4120000844902284004901110E8C104C01989F4AECB14608C812800000090212604200200502A001230840048812A1181119812F04318A41280028011448862C244001C01841E4C24881C81D2FB0600492101280029410810083014005025
+:803380008400400800411218440000000000008128508100811018040010C8483FAC0100001828830222001140080090281242000000002004004002002021820400001240180889014A028344F8D6239024004149021200800200181884100400834208302485746894244782228B162743498442C124412881188CA1214228200180216A
+:80340000312822524D181228F0B491902400C0248002288042010040082688810483420820022E48284782281A64434828112880C2182848324828000084C02832A0121848816F7102004024813218000000841218004100000010441C148404831212042144440012160800802101128901814A7144082608AFB9085084800844000020F2
+:803480001214149418002002252401400C440040983828200115081281818982012181840090141008608100BF5C0C40D848228211020021281841182062411800142784608526021A4408812082248104848004000028498102C018834208001C334118F0A81C8001608825040000840020010016082A0122004004224A212204000040EA
+:80350000820843514200001800000022111128811F4B0112414942321425040021898201491134381684412882538412464842A84144225222283E482248001548A2188116982200122818403828CC0100224E1810E8120700818C02000000280018008001144828801244440884C048800118000010448C811242180818001028820138E7
+:80358000F0543D301212181A02188444C418C422840000490290484982F444284C324400221200A025301430148C1228028916A421302889810484808202466482484658618002491242822221C2124400004122800126882211048904122A311CB0188291120090128C0240982880C6480048408841088091284800DB370000000000000C
+:803600000044400C00800200282A01100400221200222424000081400830480000120000B0640B45684212411A120418228C02008400220044424628025082844528E28102362814B828211214321860816810944800002002444883820420F2958780229228104848841204800100404438281018143424C148228024260400621200A02A
+:8036800042488483041260846041B01C04844212008944B835081844448301441244808282424404388422200300250849A2411840088C342489024CB42231284008004844282200128032642608284822F0359410022012848212020010C2124508004018A44248484A01212418E041425228424301411820311442183200121A04200201
+:80370000806186814D2812225F210C86388800AA012001001004104404850444848C0200A02442200400424008438281041028B2280481814880068114001C22B5370584238114143418260C384122C480022422C52202002180014BC2410020E29401608290421222289024001846043884428C31488084012548E4E8012F2372B4F82CBE
+:8037800034442E824D24168402A0228C41D4481162428902CC92188D6C165C484CC42432428F61B11421C214A0248C654343F322286B112281893248184F84028D28587048084B4289C2488B721361468D689CA3415F780B188212EB224F4182F128182B11A4C9422852844084013A322284B06CA622CB2246F848423E5822448B31288BEA
+:80380000632FA39128409414D0EAA3143E1C2E688F8454488D64E08272180889B14822F22424425088411C7464F88A9924444C031A91188783497224F434343644841212149C2C6742C51CE8423264F0444246F82C424D244C92648B668CB478C41A8D44724E782C67618F8222E183A244E042A2527E186A31484AB51465841E184E1883AE
+:8038800064818F868727366889F217D4004184401802A1100AA9014C41C814841880011800007048044220040042006148002011E48104001A041A0440250140F49DCBC0222982D2C862E82C42D4E8F11E3E1E224D183E1A2F4151EC6B11CFA1F112184D122F81A1311E182E588D188F8242F26656EFC3F15C1A69E483F11C5C8F21D1C6A0
+:8039000083F534541E166FE1F314166F2337124F45F358184744CFC5B12483041E18C5A441CD148B42CF4121D444514445EC8311F8623F50646FC7A5114F41E76AE221E221F22A2EE5FE3C2ACCE3A2F22A284F61B116F3282A214F22B312F12828626F82F52C7CEFA357464F6CFD16143EB22F42E283F13C1C9F33F1563E2F15F53C1C2E66
+:80398000162F65F71E2E6FA1773AF83C348B374F42B244D284564C2AF2787C4D448D284F426282CFC3A326C7C6CF66F46E6C7AF57E78AF7A4FE221F31674CD2C1E348F81F13E348FE3D346A111A7816C932A28CFE111F22C2AAF82F238222F82732C7824F8726C87C56E5C6CF426A2EFC1F47C7AED488F86D4CCF7487B6D76AD784FC1E726
+:803A000065F71276EF8151444AF65C3C8F84F24424CF85F144148FC7F768284E284F44F15858CF46A3558B378B158FD2E7C3F3666C1AB16CF7DB57244F61F23E648783CFC7721CFC3E3C8D2C4F63F33E3C6F43C232AB318D2845F63E18CFE3712E7C38BA22F1381883F67C6CC7E54FE6F52E64CF27FE7E7C8FEFF56A4C8F86F56C7C8FB76F
+:803A8000F71E7EBF82F7747C7E762F61F73E3AEFE7F35A78CF45B748F42C6CCFC7F374748F45A764CF85F714548F87F574745E588F87F578188FC7E7C1F5266C1E52CF82F4DA59A012A012A012901420222122011220C1241244D048028F44024E24C024184C028118302200200223022AC148402842088C0480028D24A024B04802DF2239
+:803B000001400444C1001A120400100410082816280418008440082E1812A0258412221281100800221A0400128190182064814008F0985ED024F4112485F21124A3F41124A3D4C1B24AD1C1B24AD981B24A5985AF443924AF5439242F147924D812F924481CF9244A1CF8244A87114FA264592E4A96C54A9E24ACF491242CF4912485F2EE
+:803B80009124A3F49124A3F48124AB141D24AB941D28AB9451AB9443B24A39242B94478229F92448984FA2F43E7AD082F4116429F4112427241FC17242D2417242D241F2429619F242A259F24892224E8347824E8147822D916F82D412F9245A1CF826C85E8123621D67A2D651B49E214D4A1F8D12B491964E1B28E11B68E3B491324E1B3C
+:803C0000212D841D64ABB41B21AD843AD44AB824B44269832D842F82D442E9A2F4583240288804000000008002000000100818800A0000140000480000000000280000000025014E881004400400200112004008001228400400490441188C8401400800008100220018000028208214080089F4585C008A22080060420000001004000052
+:803C800000814400001012C82400480000000000100881C0182001404801DF720B44CE28884400802201412002000000244460814486044440081128818148420081000010042608809218224A4148021489C49E000000004400180010180480210200004800122C244148040000000028001800100800004008F0D9EB0044000040080099
+:803D0000000000000000400100000000004400810000001008180000002200BF7D01008440110420110410488441044100122041082001100200810022000000001200000084402801009F7509401408400481184400100441100480011210010000001008C0240084000080018180011008841828005FE3050000110000001008120000E6
+:803D8000000084001240020000000000000000000000000000F0461F00000054000000008100000000000000224004214002008002288400000000844200008437FD24008504120000840010120400002006400800124800480000004400000080010000880000F0612A0000410012440012000020010000001004441400000022004181F1
+:803E00000020028142400800000000F065572400C12041210140880100C1000000420040044119810241482100210044280084100810080000000081BF850600400444400400400200180000220081000048000020024014088022028084010040A8840000D0A7070000200185080010010000000000000000000088220000000080020051
+:803E8000100800008001CFF90D0000000000820000000000000000000000000000000000000000000000002F8C08004100000012000000000000000000000000000000000000000000000000D0290E0000000020010000000000000000000000000000000000000000000000002F890400410000008008000000000000000000000000000F
+:803F000000000000000000000000F0639900000000000000004004000000000020018200000000000000000000800200001F17020010080000440000000000000000100200001002120000000000000000180000F0D7A9000000000000000000000000000000000000000000000000000000000000FFE40F0014004008000000000000212B
+:803F800000000000000000000000000000000000000000FD5400000000000000000000000044000000000000000081000000000000000000EF1D080000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0040080000440000DC
+:8040000000440000004100100200820000000084000000000000380000F03AC80040010084000000000000100200000080010010021800000000000000000000008F3C0B0000000000000000000000000000000000000000000000000000000000F04FFE00400100800454000048400400210044001002188088022180018840080000280C
+:80408000840000800200009FD2010014000048405588281082044480022100448002214818808802214818448828842148408481421882041E148002211A01445C030000000000484001000000000000000000008002000088000000804208000000F0FBB60040010080045400004840840410024004002180018828100218800884008436
+:804100000028840000800200003F56010000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00210000000000800221000028000000280048000000484004281082044400108204440010F22EAA0000000000000000000000AE
+:8041800000000000000000000000000000000000000000FFE40F000000000000140000000000000000008002000000800800000028840000000027E8000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000002800000000000000000000000000FFD70400000000000000
+:4B42000014000000000000000000000000000088000000804208000000F0B2BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD
:00000001FF
diff --git a/xpp/firmwares/FPGA_1151.hex b/xpp/firmwares/FPGA_1151.hex
index 0ef11e5..ecefb3d 100644
--- a/xpp/firmwares/FPGA_1151.hex
+++ b/xpp/firmwares/FPGA_1151.hex
@@ -1,8 +1,8 @@
#
-# $Id: FPGA_1151.hex 5480 2008-03-03 18:53:26Z dima $
+# $Id: FPGA_1151.hex 5615 2008-04-08 09:39:14Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000D8AE0A006AD6FF4000D8AE0A006AD6FF4000D8AE0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B51111551111551111551111E
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF400048DD0A006AD6FF400048DD0A006AD6FF400048DD0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B511115511115511115511141
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200001AA1111AA111001AA11100001AA1111AA11100001AA1111AA1111AA113
:80010000110000002552222552222F21F112122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F112121AA111002F21F112122F21F11212EF
:800180001AA11100255222255222000000000025522200000000255222255222000000000025522200001F1BFBB1B1755777000000000000000000000000001AA1111AA11100000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000066
@@ -19,672 +19,684 @@
:800700004F48F8848425522200CFCCFCCCCCFFFFFFFFFF3F33F333330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F48F884846F68F88686255222000000CFC4F44C4CFFF7F77F7F3F33F333334F48F884846556664554448F8CFCC8C8FFFFFFFFFF7F73F337375F59F9959585588800655666455444FFFFFFFFFFFFFFFFFFFFFFC6
:80078000FFFFFFFF000000004F44F444447F75F557573F31F11313000000CFC8F88C8CCFCBFBBCBC3AA3334F44F444443F31F1131300CFC8F88C8CCFCBFBBCBC3AA3330000CFCBFBBCBCCFCBFBBCBCCFCBFBBCBC000000004F44F444445F54F445451551110000008F8CFCC8C88F8FFFF8F83AA3334F44F444441F15F551514AA4448F88ED
:80080000F888888F8EFEE8E86AA6664AA4444AA4448F8EFEE8E88F8EFEE8E88F8EFEE8E8000000004F44F444444F47F774743AA333000000CFCCFCCCCCDFDEFEEDED1F12F221214F44F444441F17F771714AA444CFC8F88C8CCFCEFEECEC6AA6664AA4444AA444CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444444F47F774740C
-:800880003AA3330000008F8CFCC8C89F9FFFF9F91F13F331314F44F444441F17F771714AA4448F88F888888F8FFFF8F87AA7774AA4444AA4448F8FFFF8F88F8FFFF8F88F8FFFF8F80000000000000000000000000000000000008F8FFFF8F88F8DFDD8D8000000000000000000000000004001000000000000000000000000000000F07E67
-:800900006E80840100000000000000000000000000400100000000000000000000000000F02522000000000000000000000000000000000000000000000000000000000000FFE40F48180000000000000000000000001400400100000000000000000000000000F014B200000000000000000000000000000000000000000000000000002F
-:8009800000000000FFE40F2800001400004840012800484001280000002800480000108204140000484001002148000010F26B52000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE80840180020000001002000010024082
-:800A000001002100140000000028000080880200008828002800FF9C030080840100002001000000000000402101000014000000140000001400000000007028034818148002800414182810820416012810A21140012810A2414001002B11484001280048408188022148008828108204F05C65808401800200000010020000100240016A
-:800A80000021001400000000280000808802000088280000F04EFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000088000000BE3F0000200200000010020000240000002412001800000000280000802802000080020000CFBE0600009F
-:800B000000000000000000000000002001000000000000000000000000000000BF240F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000080010000002002000000000080080000F0CE590000000000000000000000000000000000000000000000822800000000000039
-:800B8000BF590D000000000000000000000000001002000000000000000000000000220000B04F0E0000000000000000000000000000000000000000000000000000000000F04FFE00002002000000100200002400000000000000000000000000000000000000F039B50000000000400200000000000000000000000000000000000000DA
-:800C000000000000F07864001200002301000020040000000000002400000000000000000000000020022004F0E37B001200000000000000000000000000000000000000000000000000200200001FE60300004022010024004800000000000040020000000000000000000000000080049053002001000000200100000000120000C011BD
-:800C80000000000019010000800800000000002008F0EB940000000000000082140000800800000000000028000000000000000000000020F4DEDA00000000000012000000100200000000000000000082000088000000000000008F64034A011C010012000082002001420012800242008083082B8280082B828001000000000000A8003A
-:800D0000484A02003F9F0D0014002001002001000000200128000080013082002400120000008800000082002004002BE48005180000000082002001482400002004002888200288A0820080080000000000280048280070E2060000140012800400000000824200000000000000000023020000002400008220880228F0341F100100008C
-:800D80002448224021480100200100800200421200908242008200602880022C28482204880010820200006F8F0D000000800448000000800182000000480000000000002C0222808808213082001082022800D0F10714001001901222102118010000004280020080010029280480080029080024004800008008880022F0FBDC808284BC
-:800E00000142000020CA2228481200128024014812218821008002209422CA832401420021002002888086081124860200EF580A800414000000002800200800240012C0818082088002200148002008190210010024200400602448F0F58E0000001120810412118288406214003082004621080020012001000000000000000000108117
-:800E80002204008FE303222011210420210498908220013B4812C0421A086014881502800828221846022A0800420011001400882448C200282B8448427029050000100100209221A0480000000042240020021800001A82051800822428008002002200000000FE4800121140010000101202230200480012C0424200824002AE12482C63
-:800F0000840280012C084002000040221202000026016ED5200280E122818101002222800120240412800260224800206228E028A11A86822202822011022222000000422A04208602F054E18004116015110011003122310000000000248822A0824002248824002280288202660210022400102206214001AF47023041481440021142A0
-:800F8000200482008002200118282218228822002088022098422984020028002384121202001022020028BFDB090000B012C411001A0458130211808184840400246800008228288A8404248001281812420028660200802482240400827F4E080020048800420088002800120000420000002420012200008A028004298406004002801F
-:801000004402101222F2547120017800200220828202000000000042000000001212200200242410021002400290220020022A049F920718121880241403114242C69281241120041842002C85022A8422822AA22110022922E821220222202204200600806222002B4220429182FFB10C48114856011130110010013100002880829222AA
-:80108000802181080082C0212008808404282C810242100228000021100221145B57001E1180C451522B311420A4444AA122122A02484248528082A4242B422A022A82682A2B82826842AA328226B212A288243816D222A462424AC62240522224266224482324042681F8A57C2093411C6114123D4114118046F2A16125511135014248EB
-:801100001858282A012A0429AD2288AA02282D225AC812882C9A6222A022222B2642212127224221002A022A7642E2225422C061AAF21439A054B011B2117161C21211121F1484A1222D821F285822002A81A12400126A53224E2242008062293AF9A2122BEB25222281A1628A781282A122422E6230221002212B642122282AA22210F211
-:80118000A8DAA0248002688002681848188001182A043A04122021040080019880088880018800004800000080041114488004BF6E09AAE416013A26777133133E216AA3157AF381A33B1B17313B212AA2551A83A216382AA3327E222CA26E2A82AABB3E323EA2BEA22B591E52238AE225A221E8AAAA31524A9642A0442100004AE422A60C
-:80120000262726232626F262C16EDB20E713F431211F13B23124B333E213F22171E022E62BFF11921632312AA2334AA2646AC4222B213AB622E722B622AF222AA2BBBAEB2AF383312B182F1DB7825A222E72388A62281E125E522B642F24F242222F24F642622A42D222E222E226F422221B662B2246B262A2446AF4D8FB80C7512AC211AF
-:801280004E211F34B12362114AA1266AF2B1B33B281D13311AA166A013721AB222A3736E722E224AAE222AA2AAAEA21E32BE232BFB1ED223AA882F212581A22A2F21B372E126B462E426B262B462C622251252222B222E624237242914A2442AF88927A07D1E111F11F131311F25B65231133E211F14A5376E62EEE21F21C912113AA34416
-:801300005AA1533AA5312B233E722AE622B632A6222AA2AA2AE22BF382312B393B7F2BAA2F22F232322AA12AAAF212322B776E6223E626F262422F26864232222F22F2624225A2442B222AB622A2226EC16FDD05000018A01812200112200112000000000000800822A01200200222E022812402224800240040010028F0BD6A001200345B
-:801380004800802482840800802404004A028004200880A82848828012022E828001800400002280A4242200205A79A0421B2126B11122B611766291212F1691612F24B981F64293112F1429F242B12AF442B12AD412AB424E912E424E812F2264112E4296E12264192DC2DAD222BC91D222BC9142B291A2841B2923B481324219F64282B6
-:8014000019B24218B14228F242822AF442822AB442A8424AE82AF4874680B41146B11122B411724291212F14B111D222B891E63432114E81322F1428D312A8432D812B432F1489E114D922EC11C84286816D112DD1DE2129BC11D222BC91C6521B294AB89132421B282592614E8219F242A219A284222D822AF442822A94822B4229E82211
-:80148000F431720082000080040000282001000010022B1400000024140000000000000080020000005012F02541200800100180D4212223240820218901124A0180840240828281C4824820011081220229082821244242802402212082220486F2B2F790111389B2210124C0410000C08242468204CA02A2624A0280042E41C862882A8A
-:801500006422182246820B88001822602200602C40828C224412816A18684FD7481131D1281C01144081149122482A883842422329210C8222422321220C4E2129AC144AB8C172222221233472A08228241222222302206624422098224012A1A41CB862F87845800180021082042818000012428022A134482848000028220042002048B2
-:8015800001008800502248200822230442222800F08C380000401101001A0482244021094820882208004842808209001800100220080000000082000000001F74012810210229248154211032128A64381229642286220600420080021082011220B4120288242C0928422882002018821482044A280620B2EF02001140914200244290EA
-:801600008240034A49A2842A0400480042001002000040029082232822842208008221420080A42400223F330E28002840818114211122813C821D1220420288228800002A04221A2801121846A21280081800000000002C0848200800E05F0418581116018022013113029A024228421280642200244288804422011400208204224800CE
-:80168000206224800800688A220288200482AFDF0A802621222401222902184228880024480088246218A0822832826021142C21848281840290824822008280A2484200806222460200FFBF02220080621200480021800400208A0248800200002480A4848240022001122290C28084040000C042488800427BBBA012321819A3242E1129
-:80170000281A926211009282422094128868884280324222285886022522248C8C8202800123898292E22C842C044A2824842882C682884820FC1F6C004001000024E0328104482002482880024A0200200218122011022C01222842200400200800222840A242420014EFA60F111001182400602480081C814202258228028800008011DC
-:801780002211825A2218C822A012A082242A11821202211082248414223282224224F0ED4B20012810010042001001248A9481001928082211004880A8484880A8282008C08100424200288008802822044200008F67031111121C623280542311193141142DA12123020040028AA128248210022021082011022351224282280021308259
-:801800009042313318928229B4222C98820034AF3B04000080024A0180A81480B141A814100240A2420000881A04218004828006288002008008880080288208200200AE5F14E011641256212101142114D0120800808828022B820040420223040029828282622128802201282582D222022D22602882260226426226482220F249668015
-:80188000014800A041A014C81880019890111890124A01988882A085A0C142232521513212C2802411222181048002484880A4488004822002BF640600000000109242008824142100001C040013081003888800C2211818143400000000200400880000F06E1D0082124200160280092C043C0818807A32A2214812240021100221C0527A
-:8019000000800121238461224800882008000000200414F05C48008084622828A0143440911282293241118021082012C282188088280410420100424886022180022008824A42028008003022144F4A081B11921F13E114A22123032B151D5216B2C3F1D2811812CE114682E121A928222A11A298A0881452582B41293152F82381F312C7
-:80198000421AA325E021F2318223E12483C4228A68228A2A9882422322BA22EC2AB2A2AC466214229F8E4A01130C3A748182A2141D4125F141411418139882B093F483822129B193B38224A9228840C242888E814A8C6C2D2CAA828AE224CC12121B4838A041233422291212B24248F28242CEC22BE446324290A24051224F7909141428DB
-:801A0000111C41E2214422B482C9421D422DA31F38F123E21C4121EA2248A2846EF170835222231872526224166228230237294A281AF222322F1438822E2223C22240A2A8242CE41494814022886C2482A022F0CA8700188001180012A04120011A0412281220611492148214184681218421A412A0124222A012808124022282228A4480
-:801A800081848284A2481C022880F295351415E114F121211F1256112931422F24F45341F013413F28B8B37883B393FA42813F19C8A22BA23D822F1B7E2171B1D13258331F38D133C5C21F18E128BC82C5422B18828AED28786242F223D3282F227342324224256228237282F2C3811D232F244AB242C2822B242B844A0228BF480115A13E
-:801B0000481F127221B121034AE4247441E33CF8C3813B8C1DA1211BCC1D833F18E829BA22FA21A2AEA32BC42AEA11F1838198214672C3F182C28E826E832B88AE832F28B8C29452181F38F8A1212B222E42212692822C98826EE23F18F8C1E329E828FC42822CBCC3E824BC4204218FBA0117111AF531211B3313B11231522F34F5535182
-:801B800029F953D13F3CF993B13F38B9D3FDC1911F19B9A2ABBB3F2AFBB2F12BD6BAD921F982832CF812521F31E429ADC99AE511E62BEB29BAB2EF29FA32721E223F33FB31212F23F352222F26C2222BA28EA22BA28EA22F2CE82CBC626A262B2EEE822B266ABC6226A222FFB80B1F11A1191F13F331111F23F312122B555E521F15B15249
-:801C0000F953913B9D1F11B992F951D23F39F993912F23BB92F9B1B2BEB13F15ADB319F1828117112B511F35E52DED29FD92D22F27FFB2B21F2BBBF2AFFF2B333AF2B1B31F1BB332E327B762E222B222EA22BA22EA24FEC3C11F3EBC22EA2EBE62EA26BEE2AAE62B662E222AF2691D0000400100002008822482248200200882004200217F
-:801C8000428890820000400180040000400180044800002B3700200226014248A0482119442108482008224A0828000020C842820000C880012A0800200882A048888A041188824200F0238380B41122B21122B611724292612B1419F642921B682F2419F142912AF44291222F3429F24291AAC4B1AE421CF8224256F12242D6E122641D25
-:801D00002CAC292CB4D1C2421B2925B291F242821B2923B48136421B282B841B282B8419F44281AAB442A84A3B84AA94822A84E822F44C96C051681C91214E1219E224A12127141AD232B891F242A2122D8113B34228F9428313D31238B325F1A1521CF923C21CF8235286E12241E1326D182A35812F22B191742212F142921B286E1213AF
-:801D80006826116612C122283C084E22E0240AA82994A2486FE60720080000280000000000800210021800000000000080020024000080020000005012F0C4F8204821827141A2211C8582843C128A0414216288804802224002802402B082E424020021129023001928A2840082488280148204AA24086024EFDD0542926018221480917F
-:801E00001220182288A8841823A6824AA243A212288042022420AD2112B846A2821AA8282081440221112C04200842C04215022121821C08CF3F0142D22892282F1221813152248A01A21C084AA148A84A2832A228301221822124602D821B522961242C2821072F1281440228C60100AA0442C0421542A2A488403142FF480510011146BE
-:801E8000014681028A44A248002B84222902281A04122880024222005A028A0228888200003C0880142208828014820410228848F23E160000134101421222C0834001141301122041210300001814224002240020026E111A04281001000048288224800220F85B6DA012281A022829B411022CC152222A14C2928602A2428E4214A84A89
-:801F0000A882800666022682EC242BC2621AC8A22818181C01281323C8A242228028883482824223828428860CBF210328221212001880C142131212C182148082858881A812A2A024C0222022A43821229602290228601368122A280800804802A88A242224A242006F9B0D188012C12129B44122C12212884A1282C18219810842311CF5
-:801F8000820C00202441838A64224821A22021311148121C022C3241228008428A04502280088A24F8D9DD001B4218001828212622062229228401C01288806228A0858288002C0C00281C28A11448C02148148828C86282002E814882A8A0288820A48628AF79051148281228481220058A04781421821A24A24126A1482C2222018812A1
-:80200000222084098214A0281A042088098042028A221A02234602002C02003DE8144A0110410148248001000019328200240000488022040042003410A2A11A080021802802214200230420128208C26F2349B11194211A42011AA441D02287212822C143121B2823C532D02182AE82288A04A021484829242124824821218198318814AC
-:8020800088212A6822828E22882F1428E42AC4E2206A222248A868EFE10900206112602200684230420080084A0900004A08202208822008122F220C2A2128240928428A24020024000082202824F81CFEA012004E21261201E0120528242C048094211819E211962214688002198404258132122999420010813A81221129140160120072
-:802100001148800400881466F239AE0000102124210220641130414A98814A1921042052210040021A8414022896220214601400281442249082142C0820122202424280F8518EA0421C128101226024E02628081A8201002218A02821181414A041271111A0120090111218238335127052820280880480E826A8844A288282088E21F0F3
-:80218000B3D6000048424A214401111682298882E112184201901111422A041A880821221129C24129222888C241601416012414882A0439C88142002229082002E074011180021822142022411121886812A021222813883812198294211120149121180048224001266122481C621221422D42005032C02240820200227D460011481244
-:8022000048182B4118198482A24218482C81071A44A224129012800121282E52122021E221080048290818004820280AA04A228A842228084A2224F867328001601214212C424142024081022400211814282002800100140040C321800490212004210024110000006800F07D16141C2464128041612262A014C681246411172418144292
-:802280002CC482002001111411284A018041612880042460241800881081082488800886A282E018061F16020048004061212C918118882581AA82A084C011001221901280E8210824602214223091221A061E2220042480225422282210023114002148AF2B022E41142A8252116E41221CC5212B436A543227251AE51CC4821F1B853403
-:80230000732EE21C011B462B2226E1117811C24237122F2564312CF112C2BAE41213E312A1228E93241B223AE414A6448622F4E121881F2828A828482A286A122AAA4A4E41C2EF960438001E414AA4211F35A3246AA4AC3B18CAB381ED1CB821A2142BA4422C32D1A23B111AE321942124422F13A9111B12222B212AD31299811ACB221E0B
-:80238000132AF412512F25E414612214888A9A8210E214FA62824AB8C29281292A8CE218C8829F3B4331511356111B163E1239914237233F21D131E111BA11CC21111E923F1B061F13C3512D113F21EA1242611410C15113E424C6213923024E222728863141111B241BA21CD12312532323F422422C748343F12342482F2AC242292298F9
-:8024000042422AA2626F110B00004002002200400228122C0220880228211022048001000021100200002248000000100100007FD149F141614E21A0711BC67AB253A4241B541F14F161E22F24F263D113A4E413F453D32B141B141B863F233B211D112B45156118211F12CC411B441F2113F1D2622B4D9AEB21F152132F11F1B2F11F191F
-:80248000D512F6414325E136B622AA8C3D833F2AF882812F18DC22FCC2C22BAE2B883CB8828884C8A3AFA20A7AB62136211F11A24E3B663B442F24B763F5E3723F2EFEF2623F1CAF5DDAADFE3F34FE63611F15B721F3A3321B2119F721711D21881AD531F551411F35F421221E232F2DFEA2811F19FB31B23F33F612219EB1DE512F17F622
-:8025000072232F14F261632BEECAFAE3A33F38FA8281CEE12B8E2F2ABE22FE83823F2AFAA2822B66C82BE8EFFB45F141611C063AB361F471733F26F471435E723F14E627BF43F741F13B443F35FD63411F17ED267463F261A21BA23B1219E12635221D8237351F33F412533B551B3126F3F2E22BED9EB39E113E711E132F3AEB1EFF527316
-:802580002F35F522212F34B482F8E2A23F38FC82A22D811F18EC2ABEC2BCE2B882E828B8A23A222AE22AFABAFB147AF6212117121F13F271533F27B773F763733F16F5F3732F2FFFF2723F1CFDC3513F3CFDE2F33F15EF37F753733F33BBB3BB33B321F721633D2115F253533D533F35B543B431E321F2D2F23F2AFB81B31F28F932332FD1
-:8026000031F392B32F1DFD72712F36F242214E432BCCCAFAE3E12F38F88281EEC1EE822F2AFEA2C22F2AFAA2A22BCE2B462E22AEE13F8E012A0126012E114826011440032041321120410200100111901180012A012A081C08002C88A412006022400124482C82C42280024A029E2880140120341146024AA1212B8268881B48A048281BB4
-:802680004242802B022A0400484A6222402205822A218121A1124823044280889482822008D022084A0888F07BF8A0421B21B01122B611324219B262B181B242B981B24239812B94B22F342BF242B1AAD412A9424EB12E421CEA2264151F22641D2E429E212CA52D2CB491C2421B2926B29122B49132421B682394612B8419B64218B142F4
-:80270000A8422B842AB4422892822A84E82274A90F1CB411061B21421B212394212B1413B84229F9423113B842297942011CB9A194123B43982CC1912EC21E81372296F12142823CE519C2421B29C89A66329A7242A12925A32826138198212F248AE21428B24228B2422892832B4229A8428F7C09200800000000000000200100210000F3
-:8027800000000000100200000082004828000000002712F09CBB00226011C01211A0431A822232424848AA041988C21128488A0121255221144A8308185602232136822961182818001180641800290410C2422C0C4880B4454F018611011BD219E621221101422DC1001A28612C228AB4222C25C2214A2838418062384621210E48C8233A
-:802800006111281A2268122F12942148628611121111A1422AA82414908113C261F088F8001B2C14130136B11112A241282AD4222A02C2A848262138122E5280285922861211A16888181BC34842272D463251281B288826822482A44246021490636286223641237C82A24214D0E30C00006E9148211226210119248484A1412C28A82494
-:802880001B4AA0421C838498413022169143001221A012822921213211261141011C3881100180020014114AC242BF5F01180028004A0180C212821C0810011B48103142A0140011904182118200206112800100246880041002208A0820088228F0118720A2121480248592112AC4C1A82880B812A4482E8220239821C2822ACC4220A413
-:80290000211123212122A312C8922971221192416A4841817822C2612113E4280424482B688268230C40F2234E8081122102202281A28280988188188641222C113142802406003631813120222121A1181213034210314288230460148A14A2822C08A048808842F2B94F20220180A44152144219A4A123022442488A12212268124AA8D2
-:802980008182423148482021092222C23C022502118A061902282F121412024022A44A8822290C00AFEA0A80042820846421284820820200682128292461222086A68200190814204431112C86048820A2280080241A8284C4C2C022A827220062C85F7C0B12480010020011242C84C2921146124181444222981118800848002412221C18
-:802A000002825819021200422502006840010000242240F2E6482084022001902248180088008A21081100008602242601123012688288210082110012904148228008004A1802202404F0935FA041280030427032229651242E428296024A69167061C242801A219842282D214213093D124A838A7812211C328186012280744182A4427F
-:802A80008A2228248498422D22A68222A4426246328D00002818200400000014D02218018001182A840200000042222022210218A09210020023041448880010026018CFEC0F0080022800601AA0481123C823A8908248B82008820042421984880428400180880214C848883428002420A884248886A2244280F273D70018004A01D021D9
-:802B00002214421201000040012081082214807882A24224002968226022120029D81211122124242202A024212834288012027F13083041141134420024C0411210412188088220284321229842302100F0522240013308284603408254220042242004248215228808221CF464560080042001128088082941A2342724400225C2118847
-:802B8000908111223F2108121812C04248002B41248021011B28C200000000000000F0325B000020013890124A01822011028A81190213681238221B6842C03220280620254102E011021413011128002200422004220042483F460512146014422424C06140A24286C3818A64212602C04222200821282B848014021127120000212186F2
-:802C00000382A60214110024708202000000214F680D80A141182200283021290212002810A1411A02000086C12100222B81002823A221221200A22800242822008022822202292604F05E612021288226824692111418C21100A014A0123C220400144240823481180020011301284212304214424081042014A282104281886212225F75
-:802C800024030019041582810222601118211A8201281488801351128011A2A1121248223AC4514001124824111200242004240020249481009042F0A9AA203181171119D621A4242B222E223F12B14123E421532117213F16772282AB1A2F2CB42281BB21B281E922F2C1411B42242CB3512CA22A4AF122422F2122C1231AF412823713E1
-:802D0000173123813E8231113D4142242034C2238274A26312A848146AF4F9D480A14920233422701341B292D821F941812D812981A88186721383E12564189E81B08148A22C1F11B4425822DA6F25292694111D233B182C82C2428AC12227191F16E23C5C12422810C2422E82CAB82288183262226683F2CBE2001C2162143E311A65212F
-:802D8000184A66122F18B682A4118E8116A27C2382D811AA2833836112142A5A322B363E418E1125827531A2214A2C22B122A1124A12F281911F24C1C2C0622AA2422A42128286E624028EA28AA42468E01D080080012440224122290224482041321100309130820090824221C218C22D118221821C012601886012480000800400000015
-:802E0000C76EA01146A1132E41CAB5522552134AE622AAA33F14A88A2D818A6A22222D211F17FA61631F3AE812FB21A12BA22EE3EE713F12F261A12EA2482B311F2CBE82ED1AF222211BAAEEA286F223622BAA3439F4A1231F1EF2616119A226004AF6E2A2272A2F2EFA82811B88CAA4444AE416F64437001E511F13E113F151117AE52190
-:802E80007112F342611F1CFEC1412F3CFC92B32F38F9C3F13A66223F38FA62A11F16F3A1933B221F12FA32316EE11F16FF31711F36F6F3A32B4142EEE38AAC2E1F1AFA21332F2B7E92F2A3A22F327311F351433F34F8E1A23F26F663612A622225B242B4E2E62EFEA2A23F2AFAA3822F2E1CA2462B44FBFCA0111E513AE313A14D2F25B56E
-:802F000012D133B142F763F23BF73F13AEB92F31B9C2F962322B9A3D323F13FF72C23F12F823B12EB11F22FB62E31F365E331F34F122E28E522F29E934E621EF23FE33231F33D222CC923F23B291F831233F11F5212317143F16F622216A8242B242F4E2E22F2AF262222BAAAEA22B6E2B666AA6661F7104181E111F13E313F171312F2752
-:802F8000F512122F31F152713F36BF52F5C2C12F39F982933F1EFD32F22F23F983B33BF72F27FF33913F1BF391921F3AF3C2E31F35F613731F35F5F3F32F29F5D2922E323EF25EC22F33F3B1B22F23FB12B23F2BFB1313BE231F27F663A31B8C6E633F16A66628212B442B6EEEE22BEEAABAA2BAC2BC22E622E616F6A433002002002A011D
-:803000000024922049220813C8229A04110028809212281880012100A01210021C01000000800411288200003F4A0C20810142282C01421308482420040023944120823881424081E418B22224A482422A284883A28282252108681C984123060021A0A4A225222A242224F2344F80B41142B11162141B61272419F242111B282B9419F2C1
-:803080004293112F14A9422F3439A12F1429D212B9A1C491AE421CE82264151F22641D2F226C1D2CA42D2CB491C2431B2925B29162361B2927341B682F1498612F1498612B84112F2428BA42A8422B84A229A842882E42C7DE80A46114284E131B2127241A62341B292988F442B3E01429F34283132B342129B9B39482AE521CF922C25E41
-:80310000811B42122F22681D2D43CE212CA5282D511B6925A2286E139234282E81112D8119B2429A212F24288228B2422892822B4229E822F4A85600820000180000002800000000001800000000000000000000002128000000425012F0619F0019111121012222212711AA9111244888C022198841812281512100224A8221A44920420B
-:8031800032812E111681011CE114221481C4412811402114A284008800009F644BA11282381A6226460212E2C22C04232581458284B1C1826814196418C81F2A4421041BC22C92212A042A8502864223B282043A081C088A84681C008643014813248AC261683FC80B601D143681820438239413E83CA11629A41C242E4288AA81C86312C0
-:8032000092D6E1123882486266A1421B14132422348211CE1121241349A15814C8132412A142142486220C42828828142D225FEF0E2A012A014E123022A0828AC41200120030114611011944412214810292248A22022A91212A013C812284260214A084821C08421414001C84024A82F44D310011142002421082A412482C29C81111183D
-:8032800011880000114222904128208421CC82122C08211214821400282714800888B042082928084842F07D6220822362122C64121A22E114C28123C8124248421AC4812CA6439E23329E414830814229224131312B8268381AA2422D1186B1213182B817242AB441C8824888272234192484048A06800480F4BD5820224181C242A0168E
-:80330000124A828409B082C4414219C16148AE1160154890C148234231211AA26868488AB212D622091429480142138CB84222081129242C84881222880448B0AC083021221128260110938123A2412B9480611188B0924282230814200258400318B2124061382A81A1388E4313020037242622480130428A24088004481FD90D48481A84
-:803380000228421922129272803292008880C22123A21224582CE112880A24C021248061183848488002A242212E838008601A0080021002C022CBA920A242202101421248801682220880880124C216024A21A4842832001A2222641220A8422B1811802142029041118A024222238208C0828220FCD644000022482400001248808444F7
-:8034000022248401001128003440021908227042E121021112280026812402808404828820080000BF7F4D2126828221C64266A1212324A66122218084888CD72181220A4E1162138E8282532213E21821A2162213243D2219012812221D224A2A224CA1841928642AA82282248282A0289ED900808182010024122448988A04100228B025
-:8034800042210124804411028012022CA8212290821B21A028460234400180040082000080F48AB7204141010040410180160119AA812814132201421421284A081C0826210900210010A11800144211001D221442480080280422489F4F0A0012111225311128304200800810810814C0218814002216429182268326884232212C82C250
-:8035000042196211290229023912110222B0228812022A280424BF1F0A22282880024601521991811148111C2421B222C48282100128462102888A24040021004800110040010011100200002100F08BE600484822C022204522A42142200523A6851832121C38122200601248182110611112158241A1438A911200004200002288002483
-:803580008800004F5B0A12200112602780456129008248001418000010911146C12182382AE424820A1A020028280028803221284041012A0800622046F1C2FB40911114421400112712A60228251102282B848A1212112218416122004A3122C8921880084002112C88C222E024424102245022408222420200289F3F410122481C414227
-:803600000222008001118890110020812201000010010022400180091582410224400228E024022420024220F47E622002286800301222981B4231422B419042104231824E81122A2852223252200442881286012C011400001180041400428200008280041F7A0D14800414190142000018282301A04182008A1402181C84082601141277
-:80368000341001800424182C0115022400281502248012022221F06411601214281A04114AE41221A4A9283F14C11111682180691123B1C1F932C18A41621213E511E411EC18A2AE1B5228888A0817112651121B881F28A821242054112400141B62002022220814F09C5E14B01194111CC2322391311B2539B34331C1283B442B941B1CF8
-:80370000623B1F3F1A92128A5112CAF121A12E211D222E612813C8C23521E132A5112E21122AC142223CA5121D123A42E31264242234142123C4828A4282B282B84286A4444AD4C2091B312A62131376116132273129E433C4412F33A942249E412D839AC7E35AF4A1A21D8190211083949213E626B163A141CEA12B858E2223D133522282
-:80378000A0211AF2122125911239D22392623D2139D2235221342B4E2F22B8225222242A28A62226F2AEF800188001184824482440A241249A44022413482201921002184A82281422B422012A0129012B822002268164126012400128820028822880F256A2141521E512F211411F12A2231B261F31B121F6E1F14A6C34421B114A72A154
-:80380000A38D3E222EA12CC8536EE11C33121B22EAA5232CFE72332B7D3B883B8C2BB99E933D3329E315E311B191D721D12252333D2337242F2452222D222115D3237262D222582221224A282264267F7E437111B111F4312117111F13A2231B451CA1461F2BBBD1AC441F3397C11F18FEA141DAA9F71F129A819ED32F16E6198BB161F635
-:8038800063D11F1682F6A2A32F16F682D12F18AEA81EB23D2239E211F712313B393F28D222D233D233F242233D233D223D233312F16363272E272A2552222F2A78223222622726CF540CF031511F12A2112E211F1323F441533F32E62AAAC446B242F2911323ED2BF9D3911F2AF2A2A12CF9435129BF81CB332F16E616EC13F271723F2E3A
-:80390000BAA2B681683C2F2BEB29E923C3321F21B711F1B2B12B911F1342B2217241E11642E132C2231553126A8248022B22882B224AA4267F224FA1111F11F131313AA1111F11F153533D133F36F4B1A11F3DFC53733F35F753C32F2FFCF2F23F3DF953F23F32FA13923F1DFD32711F195B313F36B672F671311F35F7A3A33F12F6C1D18F
-:80398000EE722F2BABB31F13D331D323B223F2B1311F2BF331312AE212F261631F12B621F221211D22343F16E42EAAAA22F0A2A22BAA2B226E226AF28187004001226012482621218244011480321110010011421142119011800118100218800118004001240000400200003F89018002282210021819A684004888484A2982282824C2BD
-:803A0000811302224022A4C2C68108984001204801004601001440A14800288242001CF4D83780B411021B21421B212394612B141B682B9419B242B981B442A9422F14B9A1F44291A22D91AAC4912E421CE82264152E42D6E1226C1D2CA4292CBD91E222B49142B291A2841B2923B481724291612F1498212F1418F14281AAB44228B242D0
-:803A8000289A822A84E822F4F2F3C0411906284691212592612D1219E62499212F241AF1428213F2421313F242922227142B42142E521CF822C246C112562162152563182D4213E822B491D61234912724136934824683E434084EA1F04283484E82224A082998422988F48FA400000021000000242800002001100200000000000000009C
-:803B00000000000028000080048221F06BC5003021144A014622848506282B813941018014022026042E8126024850221982949228C22B8212AA816A14823A446112822840014848282904482880C8427FAE04760118204281611322182D82130442484A92212931614AB281250113062111181C6C12421A024AA112421460118AC32121F5
-:803B80004882142CC4418814140020482228EC1204DBE5202504141A4421F13241426260322A911119A42413925222681DC22A24A425172A8221428E4210B35192124A22AF2446A12936B1A1C421424631818681641413489121422229246824A682AC82F06FD76012E012012220042A21D12288C4824800002714802101112042814131BD
-:803C0000214A028218908212208821B82201226022002004000000422CF4F2FC2002200140836222822601140012423A3442321001400142001901001860221912321121808162248210714221082223248202422004DFBD055816A112221B5219B12215D112651430B24AD832C41182393282A88E427681846A1C46C221237212B2218CF1
-:803C80009632218826E213A441122229E21228CD231F2884C242860300271488222308292488A428F0216DA01612221A92213C611123E214A148341A4851220017264A3AE22ABC11242468142C0429C2128A92512220082F12042C021542A11C22222C260C2148882D412262A22220280470230C10810158A0421582122382A2844631112E
-:803D00001A1882011622428182486112482146C12216028083E12592112622A328701192C1213083143100882121244842200E2FF50518482820812484024822C03114A012A0126641426124384A0188001308271818423C828285848188042044A128424601424002A288602CC2822CF8CAE100224A818202140020CD4129EC22242424AF
-:803D8000384220E2210EC01288881822218022A2181410810410E212B182028248822820222C82082A04260280F431D7000080840116021800008028049602004288283041802581818422193122002800502228400182008200800800285F180B182238A02512132401421A4E826C1429A4162CAC431B582CB29184A4348E428A0219C5EE
-:803E000022922CB18121A6948E12143907182A28C42182294481E214C8618848482A3882828288CAA284822CF23F7D000028800428211290411C012008C0228002000000460128182822280000211223022B828A0400800820A22400008AF4464B00821A92111222001890112823941122AA442233210013A2681413081812210026222202
-:803E8000A14228150248142022F222412E43000011A0822C08C8824A0825F2976B0019020000001C0300200429119112001212C8C08211290200188A04232811822318020000141121190200A0820028004F5808228280021341022420921116023227181C0482221C814111012826023C034200485219840124121C3312112420040014B3
-:803F0000222C822AA482428888624FA20548C04100481C814201001400A08218802102200200888032134216111201C05219030082002262402248020024249042882F430E120042AA0182221819010000422C84182282318146019011141A02172314214AC842222308119081136112114E811304141130220020840428221CF4C9698001
-:803F8000240218341C82022848302229E12422A4128A11E1210814A01282982118008021442129A961122B4211404282828242028022488248C282800824B091040048110021120011489011000040022028410100002219010000002223028221908122708201002082820221282FF2076019200460121C8402249061420029021100882A
-:80400000800615224212110224100225825221189A1242038280449221008824400222428A021F6D4FA12980042823412251122D22381C0129823112009012201242823122882063112E42C0118601601448A800120025622242248A422202224082042384F8DE5314228A02181F233242251152222712366221272125A1422BA61D42294F
-:80408000C2122123E113A364173134272339C3121C013E423AA1818671221332421F32828842012B2213A46222203283A2222592222229249E624EC32B86AFBB024A75B1017A041B132E221B312A2284F122211CA5145E121E1129DA11B81228511119B881A1A28215612223F831222F3282E324A4142D429AFEC1721F2183E13B64392ECF
-:80410000121D321486611439F6416314C081A0A8242F2C888228A228686E76A021B0215111181C32112AF411111B313D211B1413B61194228E42FAE121F181212AA312823E81CA9481A816A123211B113714312F2AA4954A2143311239B323B9137232F181822F225E234E832352233C58238E2222AA88E62E9862CA2862289B4D14400128
-:8041800022602460241246220112341220C12213410220281403190100390100290114C081008008884003140000000082F065B9D011A5341A83A24C1DA35AD113F461411F32024A7761C112171415F151D12F16B5A1D831513138F052811D83AA7111D1115A11281F34B431A6EEBEE11F39F961211F3712B181F79132353112242B621F90
-:804200003CAC243D2140932388218E822BC8AEA22F28AAE22A1AF2B4EBD011A6781F11D311A66E1F1EA6151F12B771E717A774199331F05113EAED24FCE3D33F1AF921311D132B1A8AF843518E812E833E123F127211F132122F37F56263BEF22EE22F2CBCB2BE31F421331EB32BB91233E12AAAC43F1CBC4296621F22523315A182212E82
-:80428000822BC8AE628A9E62E8CAFC1392141F11F521711F13A3227AF471722F11F153113F14F441633F11B161B751D2317143F123213F15FDA3B33F1BCA1237113DA11BF31F26DB31E8227A11E321F331132CF243433E41FAFDB2E23F3FFFE1E31F3366311D321B333F1273127281F3E2411F24A4CC3F168652311581E828A8882F28ECC3
-:804300002ABAA2BA62AEE26E42BF2C41F131711F1AF331316AE222F223222F21F363333F23F332323F16B721F353523F31F153133F3EFF53D32F3AFBB3B22F22F313113F1BF1B1F31F36F683822F32F231332E2237333F33F372732F27F5B2D22F22FEF3F33F3F7E32F333331F31BBB1F9333137211F3AF843C33F24F4E3E13F36D6235250
-:804380003219A8A28A88F882C28E422BCECAA4EACEC21F78061800E01A01002001121448241B412009121081022800212821200221C09110022D12A012601220820400822800008022D8440422130128B01104198691618016021C214A138132212088A1481C22621140E12261112A24C4921B2421281C31812A11018A52121B48259241BF
-:804400002058328022F84222822B24A084343D49E012B41162121B21621B2123B411B242B111B262B911B24239112F14A94B2F3439312F142BD212AB4A4E911F2AC4811F2264112E5296F12142D6D122A52D2CBC91D222B59162321B294E911B2923B481B24298212F2498212F1418F14281222B84A22B84AAB442A84A88AE422B3D80B41D
-:804480001104136124137142B2117242B211B24238112F242AB1423AB12D831B414E8313D212BBB2F442111F2A81F923C2881F2225B921641C2D13DE21D8CAD232A5692E53E014B991324219B24298212B84684EA1282F1428B2422892822A94822382F822428FF40128820000000000000088004240040080020081220012000000400254
-:804500000000280000180000F0279F242A814241C11419D2228565412C24162294484D81CA7211A2611C32113822224845384223820213A2A518569812482F1241A21284CAE1210248885814C0818E51008821412B5AA01480F2C6F8001F68211A889282192232413D38148B162081951A405842A844CA8104138EF2481146D12145128153
-:80458000082C84C382863184214362941F2463824C66922C342142812D842B144C22C628802A4221F8A88390324F1C82128813A325905483C1621A228231512DA8F0522843C28147231A282495C523C81813B24141A19613914823D1221631C22768841E649382926A8A36499021C68199242334842A14BC526A2A4880FA189100122718B9
-:804600001141A825A361341956128C24C4484CA8411C012521032A840289E222E4148204272214881248122A19A11280A8412F1401411A6234001D482928C12280022003F0327A0019722201100115885181341AE224012989C4811B41AB248A0420A4480085951112581418812C082411141D282D92408154221A0411888C1462884A02CB
-:80468000292ACA24128826F2EDA43012121AC8281883C5214A31628A33421DC2E088914596883288922293E915C22922B30A4E222286028423A4926981A316382BA18A91258F21E262B1193A248B281B422F228534811B842CD224688E49C4528A848602CF474702381826088941A114628381B49146E228D141618819CA9B62C2941B147F
-:8047000019A2868260C22711A04130522C6248238134313B12AC686124148D11412964142323C88833AC824EA226B842822A22042CF2A5648041F1822120314122158AB1215823244A11A8845220B4182882896284D092021984221912098B1812282A1122B811E21268834F21A26829628B2846836414105842C849A8416B481AA228F00C
-:80478000538F1419F3124290182B142A812691484C6182424E34430889F2328A43118274B892481F83844998884721897242C4244311A8348E2D1B4283A14184608313482483B8642118D1485242122132186A216625282289FD81AC002A5484445014844416C48888C0A42D1A244248D0411892441E82C014808E021885021A02462191D2
-:804800004848321E8848268408360122CB292B248C588460888326486222478412182F18054240239228842741AD212682E41134212110B884018C32386C0344704842021CB414041881462428018A3224242606C048904A6081208181E84C324288848C410848284EC5A0142941143E3A47832D7C374143B28ED4812796D2C90869F6189D
-:8048800022CF22D178D924C4848D84328554A28C64214B612F44E1E2911CCB432AB148A1121A64421E224F2881D34132C832382AE589C2198391881E84CE248B28CAB188B558325A2A84A486DFF8022681521A1A2214018CB2482181184122116A892B848022B348A34187148A04224E25840000C24B8213A48212818C32488241F04A8166
-:8049000044A0282724435128B04261822880528438A41F9C0C140014424E1814818B124218231139D113246111844821928184800432860800890A1A08122A2102404211058B848C23B112A4812602C08E1830181688A4811F570828641290182006B01108114312A2121C82821671514812119141A0488448830198441228150214544029
-:80498000048902467124012944119A1818410010220822BF6F44032225C22A2422B4111429622C1E282412850289846C282A24228201497222384110411431842444C31827942446D184C8312604160A2332488688042D12B60690A28684E44892445F13026011814828802206104124811201108211118104D9120188008C442461188CCD
-:804A000028C1181028A921100121206412141D24212281224418A0A1A9015F98058612A821A05810121822C8681431508200188C8292CA8C012C82C418918B84248021022428264204444004930281C08268193891008110D4381404143BEFA0214021012258008381A884188112C81A24220111B058829411112412008318DA582862118C
-:804A8000882420081518081418601286421AC88483880120012728823F5A09141140018711C01160140020041901814889011110180888141814000044001C91181126622144C9626A3012844141248008001012E49542011644C8288722502838D0A2022840082D4281255281003A944118E01274426221003522512284825348C9181CCD
-:804B0000E2823818108864114281184814001684224884F62812489FF44462C5281954220012428C051661448C94214881142002721012E4A2011A081CC44541149C420526C832488417216041216B213098860440A4282A8132942E12881046F89A8D106279AD2885F142782A02F01812AF18542389992889D429F4134927B18B84AB6802
-:804B80001964882921F431484127B11CF3129195F24C435FC878825688EF88E188D25183E242F21891974313F12C2255DFCDE68AA3522B2E46F1D44BA14D2241AEBA4CE122D844B9887A1CEB48F18DD6245721593211AC62233B11A787BF115182A88F18F552612FA171D291224AA324383E192F91F3724136F13949873487362AD828C4B9
-:804C00004A4044F32CA88E322E277C61291D47D11B282CF2281D1F41912A6AD179B812D229F9318A441BA12B1A8D8CC5B41432962FA994446AD822F67836142E718B123C3173818D481D736E6813F671185A3A2117541D185E198899F5224817248396B19F8486D144D281B649765138C85E11111AB111C184885B816B823E182F9161C423
-:804C80004F98C922250927116B418FA4E891B48A958B4D1F1AB8B233128838817AE148F344889F650B4223022D1184244082442341A2412C082C6A812C28C1A22024811222941281290169016B12302610064B1290143024008E48204121480464826482441285E4484DB294F1751D9FB3D3AAF4E159F28B638B469F12F3192ACF87FF8852
-:804D00008887C39D898F8DEEBD7D11F931138F89F9A9A92E3385F879287FD7D611E21AF173211F15DDB9F44B4DFFD1F119382B8886F59D951BB31FA5A3331F19BD18F911119FE2F11E1CBF85F77832FF13F3236117431F31B513E322F23A3A6F23B336C3822FA7E782AAE76F43B69349F215314F53F53B338FA2F6E14B8B159FA7F73161E7
-:804D80009F92F318687EF69F86F699BF9DD88F8CFD51199F9DF9D1B18FADFFB9E91F33A7769FB6F366354F52F663C81F97F759599D4BBFD4F4191DCF91A188AE841FD9F8B7B11F13B72CF391B1CF81F111319D1FBFC1F17372AF2FF36F751FB6FF73C53F1DF512312EA28FC3BAB4F33434F0E8FCAF86F678744B7A3F9847F355575F63F72D
-:804E0000191BBFB1F179492B47AF83F76B69BF95F7192AAFC5F5CB99AF85768BF9DA489FB7F573199F3FFDDBD9AF92F3E2F1AD189F95F5647F5F76F4218BAF17F159433FB1F5434FFFD1F1381B6F4BEA69F2B5BF1F72FB31678B335F51FB98949F71D3D9F32C2FBF87F739719FD9F983E11F119B119FB9F9A6A6ADA26F63F386B26F22FAEE
-:804E8000BEB8EF82F914C84FC2B7B943F3C7776F62F33B33BFB7F37B5BAF27FD5B7A3F33F65B7BBFB5F7F3F3BFA6F3DFD3BFADF5DB5BBFBEFD7B1BBF37F3636BBFB2F3A3D12B769FB6F76C6F6F72F6634B3FA7F55B591E5A7FF4F48F1E6F63F3BEAE6FEBFAB7B77F7BFB3737EF43F394B5CFC9F81D3FDF73F22F2FBFA7F7BBF7BFFFFD2372
-:804F0000BBFFB5FDCED3BF9BF924A6EFE2FAB6B66F69FB2626EFCEFFECDCCFC3FF8CEECFDE0518800180048C0482141648011411A04181190400114411101108811881001440011C48480340282248011486088428802208F0FF7340C1248D1111211D288B16130116088A1428A81426989822981781A81F81045D481CC248815887141975
-:804F80006148848249418499218D111288282941FC44116829E18154121E482D1426D822313400A92B0347122F440D2F22F4112485F2112CA7141FC1324A1D64AB141F41F24A911B21AB9451AB9443F34AB1478B2F1479A4F84AB14F83C4914FA2E414FA244A87154FA2651D6FA26559ACE549D2A4FD91242CFC912485F291248B141F496F
-:80500000B24EF18124AB161D24AB941F81B64A19F54A9143F24A9243F24296478B29F93448984FA2F481DD7026F81144AF22D4C1F24A121FC17248D241F628121E648F66F811648DA25B618F247914E8347A35683447898F14BB36D412DA84E514FB26C88F14F22612C6F1265886F5265986F126D817C96DC81B69ED4213B84CB181B26E51
-:805080007181B42AF18164AD151FC1B64A3B94A71422AF4439A44E14B6F842842F83F448846F2A75FD04308200008400004C0400008800002180040000200400000000000000800200000000F0A12C804641542258912E1148903829251128012F188338191B8223E812119141843348C42816D828CA1684A981C1424CC6C2960261298D75
-:80510000082B962E498CB8428266818711C04A9E62888C376822124A89F22145241321CBA883D12922934A83733E32858E2A222381880191E8427688942822192AE6149252253451C628A8488A92281C01137294E881C228B04811A1184A628811424A788298248443662843C1586AC82142ADF9241932F12287219B162792A3E383C4363A
-:80518000CB28CB2D1E2283A318122B12914E19CE228B843E43836214923BC2473E8D4216ECB9365829B851A8A18D228F52053B252D1EC9F2C218888B412B298E612A386C118B129B1C89982C5AB244A8694CE123A4161272CF150658D02C08206114103A11250200308188A214321081722108A02100491858828004C88288122200199427
-:80520000188C948268421082D42A2852282E4881824A0A4F9C0110C1111214112682A41210BA1104848D94100A8F343114850414411C02802401122C092D829014282B12286B1248221D4849A928B01134481D4885C44888434804819A24A4421F880F3941C224872256986A4F11B42961548F12352123289842905C4D128738884EA11E61
-:805280002196317846914E4679215818CD815B421538444E181E443CC821545CD81869348CCA873AB821C4598F13BC22D821A8813934B266B648C1281E2A498CE282C888CF5C491251214F116281D083227712B84472115A182B9488A934184A31182D888A55421F82817128413543422698481CE14244311416988225435421548B211EC9
-:805300002628A6B512685D8B18466A1A421D88B5628C86D4C22D6282ADC4D289EE82786403180028BB4142516691114A2242019084E4411512E91E41C4815248C9528111148D84148CE128243454821B214CA2921398434E887061889261AE115287381A344432625048128002421F8A03D02284624284802411A41222A3C4328146480108
-:8053800021882D12448844188488904886961C2B8212601F23058C66A343083664640043049042A2842CB4342412D422C2321CAC12189F97024681561434564629522A94448A84D242CA47188296D41412AA4216924C4AC1124A92A42C848103144C5642854532884915044381884A62148339819B1696B42444130864C24974880286B8C4
-:8054000088F1BBF99014409812E042618119A26142378119011A48744218B848410462181CA284418364124312887218128808221821B019C22860812883332236028185219124842D182289011440F6A17F14532562A22C512C8B128366225E2856D218D4829712F9A5413DC849C8268682357656E841C2828447843C92548F6A51242EA3
-:8054800019C922D848922218274243D29649CC141E682D229B428B8613F342318B84C581912627218D16CE248986018C6948876B400265D141A21415C412178145C1242A198128584AD028F11148852402436814484E24224226082E18822D5244D85229289118282AA12849082C6141888429A14885C1488F4422423214A9AA482894AF61
-:80550000F7084282C014874440441A1808701176112282D88764921228100460441180248C39448B1A4C5128828881282624889348255414362289AA82608129A5218524C82484282C82F28EEF40420224283880034C1134110040084421842284884008168349484101108104188100E041228402890210029082224951A222881881F54C
-:8055800008181348148251C154400423C8928031888B180000860916914833384850848091428822826AB1446142A889B4125841121724225480C8119686B884028608184A02814D11DFAF032081044430584452283828882017B41428140112142001459182124785498489641828541D28134492910031838291121B24148022141228B0
-:80560000D11202984D182188AFF50C2E4441271129044032448B14490120C4448142422428814440044424C0482028B14442084D1820813114495242424B211911A44116082186854214024C18828821E2DB4242C2182A24112A81062592482D125434284E821562289C418D2192941F8104A72889E1544804118123718451242825A828B7
-:80568000412308902410061001512181B8D0E248484E3846F09D720042480048C0180000005490184418411400856414502810411801120010041440022120480800B01404000000847F7F071813C81144584481604221412D82AA31412D142711303228228B8192C800632444B1842144529426E88168285304C424CC6283841C41222AD1
-:80570000089621F8384482C12962821A624143C18149F8D5F3244508498424B84868112904C88844801A91441448411A18145186C8188849085024860C1426446182118A858211020010E244033810189284199181825086F0E4D8D062615C695242184DD58F858355AAAF21C4B23729274E7B483FA4DA16C48BAF1136318E18CD219B8150
-:805780008F49BC84B444B89BD444F5565C43F48148BCB45FB41CC2B267362F126252CD9223DF4AE142D244B52253142922029A91141BD58B4667A22E8C5F296B821E9A885C782AFC965480749AE2617144F2884C76D841742CF224444334829817311E11CF5AC4987B416E149CB134E249D8547145D12871815F341593891ECC4511EFC843
-:8058000063C8C7429F41FF11441D788E2C4DB49E2221A7235E4535F684158B351F12CC2329D868B212F218A46D328782EF19F18624C7884D4149F1155C244B251951111A357681457352AC15AE1C4741268169241A71D9F6C81455DA4612F82118828C6184A964C42784F088115E96DE942AA8928629B84438943295B324F8141B1F845249
-:805880002D3AE323F883C88B391978917686F8849E8A318825C4A68B421E348F81A3A8FF4C08286581128246C128A021241A4222414648528124400400442084012014129894901600901600100445220982E08804860840054C8244F4F928241E422FB7A3333E768F85F234348B766AB348F668AABAEB22EA43B143B8D1FF44971F1CECCA
-:8059000036E242D399FAB8A885B881F55BC18AEC88F155111B919ED19E182F1979C1FCB4BCBE35BF1BBFB1F3E4A89FF9F28BE91F19D21BF2292D2E264CF221313F16BB61664324BF157E44B41E48B233B122FBE4C2CF88F8C4C86F17F6C6BF242F23F731735F21F11616AF85B335F75D5C4AF55C6AAF26FE86923D827F24FF4393AFACFCFE
-:80598000CBC7AFBDFD7A723F52D399F9A8B2EF51F14D5DBF14FD88C88DC81F11F119188F59F599DBAF3CFCF2E9CFCBFB3C3E7FEBFFF7754BFB5F78FA9F9D7F58FA3C26EFC7732BFD27274F6AF26EBC9F86EE595B11ABF94FC6F1BA942F8BB339F3A6B44F4BBB46FC8C8CCF82FB696D243E666F71F511162F6161875E398F15E584F56858B4
-:805A0000AFACFE929435F312316F6CB8D6FD4BDA3F9DFD666F6F43F3A4B4DF9B5B9E4F1DFDCCDCDF18FC48888F95F519189E51CE1A3FB969DE4FC2EB69F3B77F9EB15F5AFE982EFFF9EB4BF21B37BFD6F66D6F4CF227B5BFD4B9C1BE116228BF35F8CC268F41F838322B9B4F7ABBE6FC8EA44F88FA24344EBD246F61F427373F63F3121607
-:805A800023F75171DF97E784F57A5AAFADFFA2B63F3BFBC2D37F7CF9DFDFBF3CFCDBDAFF36F43F39CFC8F9ADBDEFD8F8D8DBCFECFC8DCD9FB4C4119D188F19FDD8DABFFDFDF6ECCFC2FB3C3E6F7AF6F3F15F5BFB9CBEFFF9BBA2FA3D27FFF7F76F6E7D365F7BFA5BBD1BE45F397987F19A92EFEEB3BEF9BEBA2F2BFBA6B66F4BF944E4CF56
-:805B00004CFF2CA55800C0111004458214648100149A04409441000044003144409481811881004908881004184001003440464842584810289128B0CD068682521428A1681CC1282CC16C2A28D1228844F311488B84D042638B701188A848D084249416924D4A824924F12482112A2D11E848D23A1111E8415626118B949A029242430BE2
-:805B800080698925A4484CBA84F4749ED026F41124A5F31124A3F611E4A7161FC1F26A121F41F26A921B21AF2419F54A96578AAF347924F8429147822D954F82C4914FA2E454F8244A16F1245AD6E1A274D8D5A6FC98244DDA1F4DD222F59124C5F29124AB941F49324E1F48F24E121F49B24AB991B64A3995AB944F8BB44A7924B84279D9
-:805C000034D842F924484CFBA44A3F980C2D581A561A1F41921A1741A7141FC1724A7211F448861B218F241AF14892578A8F247934E8147931D812F92648AD911FA2E514F9248A8D815FA2651D2E8887556F32DC1892D41F84D2A2FD9164CD518AF26A919E24E7141B28EF26A121A7541F41B64ABA15D212F834482B9447822BB436D842D3
-:805C8000DA82D442EBA2F582110040010000004024080000160800000000002002800200000010020000004800201448018FA2094D42432123C1184229571483C2C4121186B81204A96482008F412864448C413228472218366441524C042E54E22C8688D22828F222881314387187624438188318B448315412228A16A41842C0267DC347
-:805D00008022688829DA2644443818472426A242984286711588A141124392422E81812AD4848C044726488E4181222E1888811E814E228290915247882B3444D21337CA138801828A12D2589118A0424F9AF19C41F09692002B148426B248714246D8C18136466964182E88424D192B142A01648A642CC18B14C72D428AD224A7344F1C57
-:805D8000C148421588BD88B4892528061F21A2388F2438281F44B3143E62E916A18241D24B2912C9A34A414E225E85D67514F2BAFCB02444E42A2119046A01C18AA21212463291403848122847811C8284028952241004184CA2124C2282F22242828D82828354414A018117419892890181482114890198261828F2D283904428228480B1
-:805E00008441280418110025061843024B4A1420140449844228A1525E212D82E02229B1240118924A29084843D28104824A0183044A08204BA4482843F29179142312C114614F2364624F22A4128F12F181744223A1842F9164114FA1F841A68B14CBA427A1421CC5252846D6187244714264644D82814331B8CCA4A423143428253321A1
-:805E8000196643932881314889618819A1184F28A7129AB6BC94483E88388935882FCF4782041032442149648138D6A141198138132D112D86D635468E6C2F448BA41444442C94416CD24864452E1414821243FC825228407A81226E1E284E81129C14081A081AC826989AB288A2A54B282A0944E7AB1426C4214953481AF2442238237202
-:805F000041684224206484448921B228018431114E212244C33241002F28C47A4971A2C83828561484836111301484262481B48831481361845A2826C454848981B448638A6FAB4E021A04D04821E12192242E1429E1D5021E21B34942044684DE386121005221888721A42252A2F04282B4B01AC24241223A8CA3C28D3481242212442B54
-:805F8000872F648138A472C04481C05429F5FA5E60428C542BAC41420F161112C884282952241524383C1C0128172A44844D1949DA120A1283181862821144C0428CA325104445C641868409E0414A899818522068224B438122AD849F360912A021224A824618C848430623948848188C01A9D24861448091148A02C02422444412184B2B
-:80600000124A8292840012848412A0142218288C042012188401801908AF750949C11213933A2C341DACF118241E4443E616C9228738CE1F1D142594282936D88F56218151842E474938228D241A628A588A9218672A46064B2D293234388DB426E824B228D18421023246D8B215949A4EA858884C362816781884F8B5CF30221008EB1280
-:80608000682312712A62818582840160894C7115C824D0121A846188281112254A54A412225226881222110242174149D941A484922B128029A894224C312418F04214824AD284F48959002522011066214489624242804128E284210822C0280000601124184810A214182001A0C246043044104404B2608890C828C18148124502EFE777
-:80610000011210A82400212001A1288110140444244449C528186684A2282024820286C281842CA12400001A84042A0558484120A218188091228400F099EF0036024444328744A14284122480688D8D822224664668224144504229240448C094136EC443C424202101401424120880324A008524124424A8381A4818F863D22043686181
-:8061800000200229028800495242800118282584B442022011022224004022C4222C025604680080064C0C284A2112218414443C6C2A2CF2B1B5308221902230149024A0941E224A1224D122288589315884124C214182A424121829311496D44191A493DC84911436042E1492181248388C8101188C28C4440040A4410041CF1B028428AB
-:806200002A64C489028384915C608C442C411C086D4243024C334A48144B5218502282004240824382143224140000461424420100B2C62822828108888CF26F9D0000240018488042741108004100800422002601138244E22422821442021008824120020048102204104404480000AF5441822244582880028911624921AD42911812CE
-:80628000221524518200124C14C242C042382418E04261A12848448144A012445849413C782221861809E042012AE5843226CB28281AF44B4C4098186840042D24109442284C11B48282948210024A01100218800848200420084082068228282200C02442E8824220048880F44218F0397F9022A37C18EA82160E4F8724B426E541D28461
-:80630000E582D2A8D12C99642B1A2744612A7574E2817354A4524B462051111A218385F114312BF116B228F466528D221AA243585AC2144B215E444C832694A2114AA4452E18F07C3443D244F838584448BD9FE023C1122B328542A63185D6286344818F27F84812457512D42A51CC472326321A85BC28143A542F2192222F22A2142F26A6
-:80638000A4442F2432422C58A83B9C4622A11365D44432244B426046CF82F124487692E14E5C8E4886B888A1C44746E088FDDA784D244A2FF33A9324E083427446847224963267C18FA1F2E4D22B283B41236188DE8C5EC28E911E144FA4927267442A4745F464434AFC3242822D3236F4B4C43F4E74C4F4286C6F41C124252CB2C1E94976
-:80640000C8147A868432584C612283B948A8A14F42FA9C24682CF4482422CA78A8D88EF2B52900210040C2482284248A440160882882280000000080029082A0120000908400100400240000004022482428F49B482427226E3285D888F42C284761EF46F444442F47F5A684EF815D988FD3518AAF45FB66261F1485F31A188D2A8FA2F3FB
-:806480002C2C5F15B572F62141AAD311A1E67AE722F244544E62CF8FF94C4FC564416E242AF21115AAA6734AA4178F85F1482C4F26F6F3F38FCBD999D888F218888F81FD5454DF25F5DFF8CF29BD74B7B47354F4D628242E222B738FA3F2282ACFC2F234262F45F54C4EEFC7F536A4AFC1FD5A19AF93F38E1C2F64FBDA9E7F54FD1414EF94
-:80650000C1F13E3EEFC2F73E2C5F53F364361F3286FC13112F21F152122E324F4BF391F24FCFFC4ECE4F617512F22A6E6B335F59ED46E347A3544F41F15C78CFC4E367F733338F895B99F0F494CFCDFD5454DF21F1EBA8DED26BF64F1BB342F1D641242D221E628781C5548C6F63F34E644F46F66274EFEBF55A5E95D39A9388AF25F96650
-:80658000663F3CFC26343E18AD2C6FC2F3363C5F57F764367F52F222A23F31A1372B136F63F3B6B46F71F7FED88FACF4161C6E663E762E241F5BBBB4F734544F45F56454CF85F15C247E663F3FFFCAE89D8185F878B88F8FAF448B55EFEDFDDCD86FC7F7FCF8CFC475D541E222B232F23E2EE7E2C5FC3636AFC6F63C3EEFC6F73EBEAFA50E
-:80660000FD593BAD1BCFE8F96E9CAFEFFB51D76F62F33A18AFC5F36A7CCFC3F335354F66F627652F22F613133E322F23E123F3B6346F7BFFFEECEFEDFF16744E62AF41B314F3D5B54B374F47A1554D54CF87F34C3C7E723F33F5CAC8979485F8FCBC8FCFFF6444CF41F5DA5A8F8DFD4EFCCF3BAB46DFA6012B12302430240048206822408F
-:806680004248244902A0414A0246044614220442209484422034241002224843024148220082C04800281A140881F09CBA2088D22AC12480F24A12442AE1C8344A2840D828B9140440E4825442004142240010429442D0A68902B024014B82004889A1216212AB84488B844383084E1445882BC38445F8B851C0421F41522A1F41724CF258
-:806700001124E7241D6CEF26F1812CAB9419B64A3995AB94478AAF1439242F147934D812F924481CF9244A1CF8254A16F1244A96E1A264592DCA9E24ACF591242CF49124C5F291248B841F49366E1F48B24AF11124AF24B981B24A3995AB9443B24A7924B84A79A498924F8AC4944FA2F46B3380F4116CA5F2112446F2112485D281E426C8
-:80678000F19124AF44B111B24A3B95A37485B84A39142F147B34D81AF8174829F9255AB85DCA1E814FA2E519C25A96F522DB8E25ACFD912CACF59164C5E241F248911F49B26E7181B44AD141F24A864CF248B149F24A814392924F82B44239A4297132C8944FA2F1F8E60000000000200100000000000000800200400160840000000000F4
-:8068000000001200840040016F82033012809112182C8252481E482228850118195C822D424A524818E091562890232A21422212F6122A122D6249A286274369688160461C3C74484968844AF2481119046624C3E824E644A42448AAF4BE491022CA2993C2492A54144381673894981825D4A188E15459482C99812F54224764442E41441B
-:80688000C115B44A73442892448A82A84141804134D6184182874838B21C0883212C1941948C122A54411641FC2E2E00428CD21802224C9236CB528B1CE322BA29417488E114E11855A42A5C843D42581B2143B123F482254CC124122E4AA021823C66472CF444382B81CC21CC5442AAC4C4AE14C926BA69B14921B48423336C4D882DC49E
-:806900002C34651CF19428CF410A25A2211412AF14A141140011141224C01282A586C41213C8342287448C04902815B24812C6246D4A1A9282B02408419016284D811614089819048088442108324C024248DF5C05802202C3C26823022216182881080044485084301440A824008483A4124426088092140016B86401A112004AA8480089
-:8069800027443289084A288129022AB41B0C62402182C5144F811499CE2ABC426A1229F14219434472B8C1344B485AA8248AB238884468A6121B2198244EA8244F23288A9862121E28288562132C47A84A1782836223D6810D89A4615A8A2288A218460CA7EF200414401C786418C8C48B848B241681611149041D144366484D58221A0206
-:806A00004842892621822163C287229228604260831E285AE211327AA9812E82A2A442D8428B162E588A830CAA81DA4824F6F24920228282A2164F25224163821A32822229984A40B22828812428C4848B29848902219391C8244A08472282A6222501400E0040E98468211C491204884222982001F02D3E10E283C424361808214711CC4D
-:806A8000028534281C42512800482CC8121B1461464C7584B82828941A80140213243848221A4482C8184A81994880724AA468163A242086E1212A283118214B614E2AEF9D0B124D4881411A96268B2180614246A441A01220628649418896842D38385A02881245114888E242B18122532842684B83A02486B84802121A68418421624C50
-:806B000014022081D224945440F42AF12002004008286085008C54624C04418C220322888028141288A438A0418490484382018002003088438408828C38981283482C022A8808F0416234124126EC82E12463C2841C321C8D448364858D424D1285342262788E125823C1A849A584433422567A49B418C242381628B628C4642A85624878
-:806B8000A85E2883A868818886B41AA824167842FC8442128B818D12AA81E142A5583883F2FF9B20AA214014082B121624A22180421121048554848922E2543A14893225894808188284424322880921122E12001A94184889A161428698828289A14230A4209288414694441FC7074C8111080018202303E0820423014341341442A014F0
-:806C0000121241822282284258A012A012A04218188422AA0160828321221208222228818A220189C4224FCA03488D4418405218414D2141450181101C24048100424056848422440043011A241814880241008318880118008488224A21084118248082FC743830854084914812004440082488484B94C440244298840010880148288815
-:806C8000860812206C11221388022B2880944821908490C288001004281AB414F8BD21241628021400C601003C01122888222C084602188488006149982443410829022018028984021280921820041840042A01CB1230A44481F0D3E580C41400608426840242A5042941314249121A14123442004100223A0848830C8A82284C02240098
-:806D00001002402291C881842AC842882A0844212840F1BA8D008112418112124A011800462CB424019812586A2183C18A81811001381A02128082A22184608616886981444A02C022188880220180086062F0753FC02814C0484C080023028001281082020040140411441A080040840140041A04411548512800281C010000182110089C
-:806D800012F0C4C620221838586228684CA414805141A0588818800130298384013028404C018B21830C2021CC3826385822002081C648169884808408A08184821840F8174E4028C2442661414C081234624014C42422881302111880180B1880184214022814232A64819042301228902822206A44C021290144492822E2C25184256260
-:806E0000468DEF144744174849E141C1C28FC4B854D614E111A21791704C58419E9449F11414614F4585E212B314351841448814AA6213C9E484A9418A11C21A3AF41848382AF1321C1399236082814E281918082B462A2681588AA28C51828FB5B144F2F891A031CB498781197424AC211128214D614558821AD1A488F422C48F12C21CB7
-:806E80001432839188454258988F42D244E28188B322D328F2A8243AB834A28C8A4A11D21892288B328B1A8F83A2355AB612DC88A2188F880892384B224B224F81F22E244CB224648A5F444AB221E48243F448298B141CE142E147F46416B01291112D642B4D6B26DAF2828812216B542F8464CC8E9DAD142445A81365D44424A5494E981A
-:806F0000288AA8634E162A733CEA850CACE88148944226BA28A1576FC15A214BB84AF8A2848AE141C9849A3834282DD4BF6B03008443121196416111264248C248448224842C82C42220044042444244C2242C6844244488461442144284480412A04100904420410481928110F869B9242F457455FD24248B511F18F233A765F612154EF0
-:806F8000752F47D7955111267E17B756FDD4C45FD9F934245F5387F135159E989D9D855E772F6851BF2EA4FF95F57A6E6F49F2141C6F415952CF69F216144FE4E342F234664FC1F3943EBF93F22C2E27854E6AAB891F39F98A885FF1F986A4472A2F4BEA6ABAAAEA62F2322226E881A4C66F5C43F377655FD9F7282C8B119D21FF73FA53D5
-:80700000676F51F574757F57E3E151135E7C5F31FC56D66F4DFD911F6B335F7733625F56F49AD89F99F91A1C55DDECF81F1F45F45F5DAFE3F3D6FE3F91B5927B82F7F67C9AE523F7183CCF63F318381FB8FA2B29CFE2F25A488FA6F6DAA49F37F79ABC9FB9B9C2F8C4C22F4BEA23BB92EB6AFA1EA4AF82A2414F6EED6541F151455F536697
-:8070800041DFD3F2982E4FC3F347254F25F173742F67F71B1D95F35A3AFF7DF1D2C44F6DFB9F9DCF61F157554E127FD3F3D2D81F19C91C55DDEC58DD6F42F255574B67BE36AF9FEF229A249EBE2F25FF1272CFA3F23A363E3AAFA9F1B7A58D322FA5F3427AAFCDFFB1B3AFA8FA939B2BCC4F2AF1B2B44F6AFAAAAC2E3A6FCBFB2E1CCFC3A6
-:80710000F1A8926FC845F37765DF59F31C1CDFD3F21C2E5FD7B756F714567F47F77737AFA1513BEF85F519D76F65FCD6F6BFF9FB1E127F75F16232FFD7F798D89FB9C91C557F2AFE1D192F41F355734F23F2FAFCCFD3E72BFBB5322F4FF7B4762F23F33C3AAF63F33C3EBFBBFB3F2D8F22F37A7AAFA6F7DAB89FBFFF8E9ABFB9F9C6844F86
-:807180002EFDB2B44F22FABABCCFEAFB36BCCFC2F37878CFEACA27400100188A04208204001200280010080044902800100880010000240040024048220800820044124624F89F31004C824128C6282AE14144E241466281424598824B412D824781424129B29404845084814B12A0428258A082C22A012F224198188068816216288294C6
-:807200009820248912842888012814DBBCD024F4112485F2112C87141F41726ED141F66E111D24AF14D981F24A925F88F44A9443F24A9547822F54F924482F14FB24481CF9244A5CF8244A16F5244AD6E5A2E45DC2CA9E24ACFCD1242CFC912485F391248F14F89124AB841F49B24AF1116CAB9419B64A5985AB944B4BABB443B24279B498
-:8072800098924F8284F9244A4DCFD024B51156381E2885A121A71644AF1641F44C911D288F345B858F1431258B9457821C7915887A2788F9235A4CF925CA16F1254A82ACE55162B296C54A1FC1029E6485E141726841F46A1317492B141F41D26A91212F5413D53A3A34AF24092F24321429BB2294921E425E312022080000000014000069
-:80730000008100204282010000000000001400A042004004000000008121F02286001A9218CCE186C1282E439CC458288582588227A4412810A582236848CC842C160426244288A84841288CA84290A40023E418F218411A0216B412D281E18C2188A186844D2890A823113428D0C5072E1182231A412145A821A67118842CE31CA1814A2F
-:8073800078118E22417455E884B221417889E4A4828294112CF22418328B12CA913696A31AF0A218824F32E121140427F648846234481416E82882FCA21C126668865C84F6D38500F2381391481A12C9418B8522C3748232784E8844491242312429542C99E784B8384C282A0685C288889982628A9B4B29A2848E28C0241217811E224965
-:8074000064614F82E111A48310A18230AC2F823828A382E48432329D41E01201A348EC12C14866E2816212168CA8213C28B14278118832148857894A1A04514E2421441B12284B125A9214D26901984C9212822F34B1813646702883048C7248A348181E488DA2484C21A91447824448AF390B18442001114054281A2206108411344812BC
-:80748000008100002C14880100182880028028911A0010060081124C294144C814004840F2D2F3809432842889A421292682449488892151284A88014D22C24D282908188312992432C302282CC142D821888042982448A88C24EA8142B14248A8811D4846C8220082452838248E1441978B20F4221420C1483042432284218E21512C9A2F
-:80750000C414424F22A148261802122230442921032210221A02008136341282488AF2162814C284C0584B842841841284884B4282249BC980411888022E112250282614482802008100418C18021618896282450880C1524A41A182608688C0482281005042B0A84191182C01604841249014446DF51022021044322414612632B148847C
-:8075800024814D121012088448484D83203262188C0282222489622113210245A81249C12230188901420047289038584C0881828B1822BF210A2240012932221243144109811181124A0283839544384381426882008C0230128301422828182810482108282489168881291508494A2828212202CFDD0418124B21818491008922048022
-:80760000144202874110220182801244C81A008128A0428004210042214911084813881818091842A02162221220D88A4B828223024125323464C9E224B221819441257A18B2545248163258494128287624382683B238248352281A62832E424E284E3219B322815284225CE14813C82856C8E98C3C188F18B1141C229764CB1AE2282A4D
-:807680009898A29F180A18D01441382A1D289041141588481808002D12260848384B41308181245082812008000000F048124002181002006081819200892181026FA702A0210000002120025081400800E0144108840080014880046041805228124210048128000010A41484200300F099A22002002A0180618160211820C1121818A173
-:807700001216081862008C84021820E1210242481244430138002A11C418121641081A841198141880122404FF4A0F4008000018002A0140098301A100582D18281280840200181221485212844781184210844188C1140000188C4128A1210042F08349D088220780030027811094122AA2322A112201128951212592421E181896081274
-:8077800018487061511111855C884B644E4242380028442658444D158B222A221724C414002C522625A211AF4C06000020012061210018000000000000102812125842480018121200000012A01418000000200400D01F08848C24840400004014C4242228162201004018122281A9288C080014111441848C24840418200300441E242256
-:807800004A02001800250221C76150881848006081228440C214A0210000002424256881188008001A021410480848000000105444800348584110041022E1E708800400104202C014800200001008218011880A00001441508880842101448301204104280000000021A0113FA80D001812004022011200008001800200000022000020D2
-:8078800001440012100400000000180042220010F4A687008B1442422200120041414B222A2202210084244022019AA228824240545155127118088B4442422001121C01418CB124A22222A0418001242542A2111FE80F8C41A8414820810100404424A122001008002121388B1188884004406111406881A044001200004444A0720000D2
-:80790000420021216BFC00000025420214190140021200200184840000100828288001000020028400111220A114800400004004BD1500000000000089010000000000400800400800100290140000001800000000000000DF960112122001164238228CA111161208184022010000810022902821846144476118438121C1140010081959
-:80798000118111084258A04520A4440041F04CFD0018188092128011522118181221201102180084107828C828282210A81242602118002001C0181A21A111A01120015A04002200106478002001002B112413012001121880018487828481000083428864424C02001084218181F214141222001A041A81210418441A410400F0B1F8F043
-:807A000026222F21A2121A21B112012C512239F812139F11B181788159888F18A444D09154111C548985E884F44844CF42A4242E24222E2480524445E642F326222D222AA1111AB882092C592239F812139F11B18179917958B888A444424E48805488814B4497CAF0222225E222A1131221C0112592822D1B1F3191819E9885D8183448C0
-:807A8000429415011558888CF44844414B246A224204504245C4246F2252262E123AA1812328C811259282BCF1111119E989588889B448244408405C8848BF6C0B00000000000000000000000000000014110000004011010000000000000000F0136714110011111100000000000000000000000014110000111100000000000040420281
-:807B000040022552221BD90015011001110000000000000000141001004011011411001100000000002100240025421202D0FD05140000100100000000000000001511010040011115010000111100000040021002002100F0477E00000000000000000000000000000040110100000014110000000000000000003F710600000000000092
-:807B800000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710614141140010000000000000000000000000000100100400100000025121202400200007F14090000000000000000000000000000001411000000401101000000000B
-:807C000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014A1
-:807C8000110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F0000000000D2
-:807D00000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000009D
-:807D80000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136710010000000000000000000000000000141100FE
-:807E000000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F01367100100000000000061
-:807E8000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F71060000000000000000000000000000001411000000401101000000000000000037
-:807F0000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000008D
-:807F80004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F7106000000000000000000E0
-:8080000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003FB1
-:80808000710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F01367000000000000000000000000000000401101000000140A
-:80810000110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000009F
-:808180000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F01367B9
-:8082000000000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F0000000000000000000000000000001411000000401101A2
-:808280000000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F0000000000000000000000002F
-:8083000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671400110000000000000000000000000040010010010000000000000040420224242121C79F23
-:8083800000000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F7106110000000000000000000000000000401101000000140000CB
-:808400000000000000004042F2A1FE00000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F71061414000000000000000000000086
-:80848000001100000011000000111100000021212140020000F0875F00000000000000000000000000000040110100000014110000000000000000003F71061100000000000000000000000000004011010000001400000000000000004042F2A1FE00150110011100000000000000004011010000114011010011110000000000401202A3
-:80850000242400F06957400100001100000000000000005011110000141051110000001100000040021002002100F0EAB800000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F01367100100100100000000000000000071
-:808580000000401101001001111400000000000000004042F22C244041011414100100000000000000000011000014104101000011000000000021251202242100CFE50D00000000000000000000000000000014110000004011010000000000000000F0136710010000000000000000000000000000141100000040010000000000000034
-:808600000024241FEA0F5011001110010000000000000040011100001411401101101101110000001002400250222421006E54400100000000000000000000001511010040011115010000110000000024002100100200A76A00000000000000000000000000000040110100000014110000000000000000003F71060000000000000000D8
-:808680000000000000000014110000004011010000000000000000F013670010110110010000000000000000000011111400000000140000000024242400002400D0BD074041010011000000000000000000140000501110410100001100000000001012020000EE5300100111100100000000000000001100001011011001004001000070
-:80870000005022212100400200E09D09401101000000000000000000001001004001401101000000000000000025022100004F880614114041110100000000000000004011010011004011010040110100000000401202244002B02F04400115111111010000000000000000151101000010111101111111111511010000404242120200DF
-:808780000000FEF400001111111100000000000000000000004011011111101111511111110000000000000000E0310940114151111511010000000000000000110000104101001100000000000025121202002400001B564051111511415111000000000000000000401101004001001100001411000000004052222421254202F0B6FA5A
-:8088000000141140110100000000000000001041110100001041010000100100004042022121211002003B691001000000000000000000000000000014110000004001000000000000000024241FEA0F40110140010000000000000000140000400111400100000000000010020000211002F012E14011011400000000000000000000146B
-:8088800011000014114011014001000000000000250210522200D084041100000000000000000000001001000011141414000000141100000000002100405222F0F7DF00000000000000000000000000000040110100000014110000000000000000003F7106000000000000000000000000000000141100000040110100000000000000D9
-:8089000000F01367001001101101000000000000000000000014000000001400000000242424000000009F4B0540014041110100000000000000400100000010114101001001000000100200241042120270860B00000000000000000000000000000014110000004011010000000000000000F013670000100111000000000000000000AE
-:80898000000040011001000014111100000024242400000024B0CB061001100111000000000000000040110100001100110000141100000000002421404202007F180C140000000000000000000000501111000014105111000010111101000040021002002100F0FA1200000000000000000000000000000040110100000014110000007F
-:808A00000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F71061100000000000000000000000000004011010000001400000000000000004042F2A1FE000000000000000000000000000000A8
-:808A800040110100000014110000000000000000003F71060000111001000000000000000000000014001100004011110100004042420200004002BB6C001100110000000000000000004011010000110011000014111100000000401202242400F03AAD400100001100000000000000005011110000141051110000100100000040021084
-:808B000002002100F0D6B700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F7146010000000000000000000000000000401188
-:808B8000011100141400110000000000400224241012F2E87800000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013670000000000000000000000000000000015010000001411000000100200000021005F420A1100F4
-:808C0000000000000000000000000000004011010000001400000000000000004042F2A1FE001110010000000000000000000000004001000000400100000000002440420200F0656D001100111100000000000000000000140014141400000040110100000021002440424202006E724001114001000000000000000000401101001400B4
-:808C800040110100140000000000502200210000FD2200100114100100000000000000001100000000000000150111000000240025022110022502CFAE02400194402802002A0122844002288F3102282094421012821108901C7044614422289400412E48411004224C0140442421010010B2F14E11C12887115018C018A723222F22413A
-:808D000021321960228922721A022E12561862811618826621241A321A4E1842896482AD2113F419427048D158C44816B428E444A2344C022641B424A424224C62424A83232125F1CFDB008418100185420226A212101808002294801102420020413812009044430210011D48818C01002062411004418002224002BF240380521800817C
-:808D8000381226224181E2120122A45028182371420889C418A024108212281424C42827842AF4211A0000414144320014444849041A122406A041B0BE411111019481008400000080021828200200241002008110184141810400004A229244000022284084018001F089BD000000002200000010221202280016022120012901128C05C9
-:808E00000000841784414C8416880426042800200280210120B1DE0400000000000000602100000014000000000000000000200300008200000000007F360718283880916A141642212522262185A1C1200127232004898806A0142E528B384CA121448A818283D24B8182031411C91244183248890C2ED800427022A8412A24F21F444039
-:808E8000741242981943522130288CC2AA1781AC092C081CE2C88318488142D881621425944835C6211400C45841418644C4A255A84815CC3A4324AD28285814448444921634168A84846281249A08182B21A913C9328F3214D128C3284E1817828C9E12C682E112CC88105822228944C9882110A24116638B4361834496043E84282783B6
-:808F0000715A521C1331454B424962822335488614C8FC1A4824C5428982B11882727F05410012410040A1282921011220C134923031002819E444C2485433A224004152C02440D414C8288870280289290840C1480020514282422A2444F21C6A001149014024A26122E02201000018502813AA1451444D484611048440220481002270DD
-:808F80002462412B121644C12C4A4838284824129044200826888184A242AFB10C2236C22149E282A55291114B414AC1C11AE8812419F431462E899E428283219AD82A042181381E412E488F54A2928F6229C1AE4962544DA216011D88244D628AC1182AD81271887241984494286D28893754444E24285604271800141C912489241221EA
-:809000008124318129911888444E32912C7888328122CE1844842184229C01814ACB34182C0822224561218B28246863334883180885B14401002858284A0344427F9908222C9324A0124335284E211E24485A22282401519AA214B028A185544A92441C148481B448D26106AC1868C24C724431842B212594114351148CA8182C32318E7E
-:8090800048231412E962D484E2811C441CA4425A82F297A624D081454408704411C42181444028028158115B418F43F44A8427444A41C1284CB8187448A2838C341127415392841781C82AE48812122482171C41E44228044B4A81492219884874B2C21840F4A21514C04832302419022A418862C12621F9681280464A4402142301C93105
-:809100004219581210044A324815220249C148411228002222E885061A688252896442922428242842421FCA0712443031421228803414268104C01490845A020082844A1804E04112184408588092212081DA82C4888748212385011E2220012B812141B08804448D24819F394681C114188D212813E3522431214961121326B81854427C
-:809180004AE2842152348F4194869A84D43CEC8254219CB51C7218149829569C746B82322625F218242B124F82648A8763241B214B52823A048F48817454B894E2C8C1828E26984CE3C412FC2B8C10123124124304C02483C4288901890118846CB815A4142287144189014441C0428A924452210011D8802818024AC82C42828722909235
-:80920000488D12A221008C844208487FB60A48123026C0342684C11412A0282882496458292298241221190225A124584A21284288220A841021C282381228001C185418400840820C8428404428F6E84B80924C1C13C1121180E2240242400282800489918440344882883028200100240012812230612334121200B01212542122002322
-:809280008602488423083F980E302922424E212045210220C84518148E214CB284843822B85841C22002282084424A2281012C012426A18186A2828D8288313426018122002424684224F0B1E6000016088012044118158859412848982229A41424A0864323128688842422118202409888488420140121288200002318A88423988C8837
-:80930000239242C17F340D68200118481110C14848A0410090121C8382228444228284E8112413B1981414248242084816012400001008884489280218800200285F5D09213231A2004240A8214782160446A88122400A821819220188682AA84812411232491124D194614949243454104454184100406242124606B68461611A04448FDA
-:80938000AC080000401114120412218308469412812524484218041944488108400100008480160222200818248A42C2811800100888828988F4922B9012212156C44156C411441C5548888941114C11C44285215114421259121451140084494349487818352443CA22444B439084472A702432282A18181148D448E1C8921825C61C4130
-:809400002E182F2442F8B75840584148214008260842284E24444A43A214824A21041C0821800188238114022C41210AA4B0110444A4118C020044A5820288124B288028223812F047BED022F625792CB242F2411259715164114C668142845B2C86798592323EA277D28B848E842F1424278E84EC4E818688F3C44818850C8DB1444F116B
-:80948000312879E842E125F422944B882F4B382527228F38C8A111882E2443E12CF43492C46B812CEC4764846B42FF920D62441F12D114C5217AF424216D28CF339144CBF3F018C187455CD115B48491782F48F261129E1861CD322B288E2119A212F248A9E272A2233E262210E1C1EB23B252E61241D233C12AB49820C18A2481AA5B48F6
-:809500008AF6AA3287486A91128F28BD48F2BC1924188721237138A441D4582634418F4403AF1BCF1649A5C6FE86AB44DE823AB516A2821D755CF4659566DA147458917287153E1583C192A167C18B312E86C6C21585D245E28C6642B088D8C472217822DA5A52976D9825DA847B4298842E3A4F48F288A828C46FAA091002C1100E218C07
-:80958000B42248186288211AC4218648618854847011684417A844150A248318348849318861114111C111C11149598118158841C815844496482409928112A05A107265DE89F235673F97F2773EED167FB1F137156F6CF846523F34F9239D7D457F54F225A71F81FB4581FF54FD3C263B589FC2525DC5F782C3EFEEF51A428BE63F1C3CE0
-:809600002E5739ED862BA8C7382F38F323817F1FDAF9F812511FD5F5913B9F3971B77B93DF76F293991F1172135F733FB1D322F2D6482E442728E7E12F62F848288781EF83F41DA720F2355D8781CFF3F322297FE7F31F345FD3F335752FECF842544E191CFB16116F55F333713F1DF77573EF56FD5CD6BF89FD7E7CCF43F13CB48F86F4FD
-:809680006DEEAF25B678F79391BF3A7A93D139BB92FBB8333FB8F333833F2BFE1BBBBF93F351593FABFF1B1317AB17F15F79FB959F1F21F293AF35F39399A8CE4A3E822F22F8AC2E4F4AF44A6885F86C5C6F25016F64F537761F23F23B2B3F37F27931FF55F7243DCFF77168F4CACC9F16F819BBDF71FC55557DB7ADBAFF17FB76DF3F23A6
-:80970000F39B597F43F2313D2E319F9AFC61C27E582F87F5B1CBCF8B79357F9EFD34BECD984FC9F321A57F4BFF91B7EFE3F25375DF68F389377FEAF3AB2FEF61F3AB8D9F12D3BBF21F17E5FA2E36EF8FFD2CF46F29F93E3E2F43B962F738584F82F732F7F06476FF73F33A2A3F33F313139F15F15F777FD2F37D7FCFC6F2EADABF9EF18948
-:809780009BDFF1F955553F13FFDBF8DFBFF7F6DC1F27FFB3F1DFC7F7351D2AFFE1C3BFB6F671792F877531FB393B7FD3F2B83B6FE3FB3DBC4F59F335A76F6BFB9FBF6F53F37565EF6ADF7FF3A6BEBFF2FA8EA7BFFBF92932FFB8F81F17CFE8F83EB6EFEFFD3CB66F63FBAEB66F4BA9778F87FD6C6CF7898001000014008A040040026C02BB
-:809800002081020000002818003022A082100218800120280200348200810000F053165026124034241A3424128116346892832448A4498F44226B64514A382442438892448015A8C2D084992888442AE148C2921E244AE148224294848E28814052848143921A4B4A893194608A89C1413F870C2D421F41523C1F41324C1F41364A1D242E
-:80988000AB141D64AB941B68AB9459B44AB9A4F44AB54B4A2F54F9A4482F54F9A4484E914FAAE454F8244A16F5244A87192E4A87592E4A8F49C24A1F49C2421F4952281F497248F29164AB841F48B24EF9812CAF24D981F24A9155F84A91478AAF24F9A4482B94478AAD954F82C4944FA2F4F2BB7022E2C1362819F24A111B61A11D242F87
-:8099000016D141F4429419F6423159764A91442F14BB24F442112E482D9167821CF8221A1CE8A2AC215FA224F9214296C4438E241CF4912C2CF4116C85F29124811F497248D241F246121B282F4499214E35412F1433A42938A44E8286F842A64B422D842E5A250584000000000000000000001012A11400000000000000240000000000DE
-:809980000000008121F06CA56034144B21281A52418CA342681A641C921243D81AC5483E84322CC2C844364454481744814C92114428A2982AA181181819A18183A21214785188828F21220648211883628A6289480881222FB30E4C22031847248B12248119712279227268318119051E261CB488C4591E244899242A0430116CC449870C
-:809A00002C895582484B242AD834AA8215D42129E88758682EC827825923E8916818888378622848328C2AA1484E241CA8481FA60B7CB661A1212A612126B11822A2141F22F5C422E638B14F2168814F8432B5896314AB3846B245A12816CC4483A8214715B3E48CE287389972EE148B9247211B9453B93128A2828B2467328A72845184AF
-:809A80002A258A44B82294888B8223AC1AC66844822BA52F830E00413064164CC24826434831119041462131428A943849446482444814400544241002002E81284098921F8194148E48811AE2227981482198821688028D2484201208DFE306221289E1810216A8148C22329121822C41187211F848B100E044914442824A22C2212E1A2C
-:809B0000C08880842282921210022A011444211B4889084A88D42848988A4528A448608218F0889724594175A11224322327D22D461E41CC96B82698881B81CB842EC6F0148B2E485D5A86A118CC237688D5589412492422F522843E8A18AB1C2D854EA21F42C83243EA24888AA51AAE4A43E211C4598C21A9411AE622C1A2224528BF4400
-:809B8000E14CE228F4D3F2244D111514D942C222842827E62E415E25818C4AF81289C84F15382847884AB249B181842586CE41437622F1442A6028498AA51227AA4C02592291A41A9222128E242F889247145281C052121642342289A81443A1142CD46A0C28128A3318F021121FC4011289B8920292508687224E91165182442D14866438
-:809C0000C1B08C52181212288C058F22081A34812B87272822218A84384112422AB85858814A299D882E48AB828B824246A4288B244B28883FEC4F11C811182D2C972458488E1142181143263824143A6C884632194CB21298126286022D824412AC222142D881211189C16286B888622124A8145889F18114393392E64228D184019829C8
-:809C80008391838284FF6D0E26E4820416614280028B8248D09491486A781418D862C425008922C6186D1149C8ED8C2186C9242430418881800425849481812F63C4884C42648483240283288C034C486A8422F0CFC72044644220312C84A28821165822100A211210240481208204405452D08401228430220020923800284228008143D3
-:809D00008102232C3248821448A8AFCC08623661221D189B3423B72884B248021D189B348F28C48445E18AD468E46452414C341242760863784443CC648E2A43721412E884834883228298AC4E121592882F3261878D24AAF132494E18C6524889D384AC8688A746124A88B228F8DADF30844449C12441C43011241A4402218CD428219164
-:809D80009211892192A83608532A742228C11216859128008C0118502A20E28922C244881A440129488821C8121238928948A88424DF590A184A33289018211246058328C8288641280A824C387C12008E11884D426032D0210616A212264271E822430222843098322812221290428A81331828A078B280023F980A21A1122D24232441DC
-:809E000081828121944224148D4118800420481802132A8804308CC608465884007014C2824822008012A828471880828848944284418212448FF30A9A5284130244112E148184193C1848AD542C81418244E218D2842284024C02682C8522E2484268998844162128D3488121222188E82821C8142D814B14480041004301C6A88252EFC6
-:809E8000240848101228E148324848488B127081044C068B24182241001C34428C885482C0482C0890628C054229240C42200C48814188448382724824280486C6422400824FE3070010C122C1944411286081828638148A2182A418A18634C22221002004381901222782001D9882A800301160828212C081200112218181462861149E9B
-:809F00005590441A023213042092282091221428001CE1420186D412A2218082BA21848202800A121828182828800938822280820200228421222E864A222324F2FDD92424002522C8E180110288444811150A60288448002054481028280448C40040C5424810044841415812444884884890C48C04410044FF250526244809441248112F
-:809F80001924A44288808DC48842D021241AA4813F2211049011A01842C084806411448124124C3111904285C4C8C041809844424A8B32A8608520089F740E15489442818146C824181210C815EB124C82A824881C014858B042088941988886088420442121C84890A81481291A88825D14894494988C92185042886C018812292438C966
-:80A00000F034352F89D3A8F21D288E1ADF4BE641F71C248C059E1839F281998E95982BA81CBCA4FC885E8CBAA4F8A8A1E849FA216C29F661282B26286BA28F83F16E617E522D596E2A63EAA9F2823A3B8B4F48A32C4E22133A146F81A8132AA2298B481E7CAAAEDC6C3222AE784F8674F2E8143664FF72092F24644A1F1201A7449445B8E2
-:80A0800061B41AA29A8F22EC2AB56C3415CF91E485011AF113214F415422181732AAB44438481611A8C28B498E839E8C28411F1828A1D4224A61211B829648F488BC8F448212F1441B202C1538648F8413BA1892588A01CF194902CD422127225B612B1497161C7141F15869428F957812F6484A1B2C8F22A41F1F64B26438EA4E555AA430
-:80A100001DA57488E292D828E5887CD142AC44188D888F41A2511F443529CF4188D28AA41189A9F5621B5A8FCCF892D18DC41F84988C186FC1B282F984C64F65F88294883AE848DD7C0D1304008AD416811482048A0448C0482148211904001142245021C08285C48285642287443444400CC429C84C298814E2885412822147882182302D
-:80A180008120482408BFDF45F2C5423F31731EDFEE57267F39D111F1492BB714818B39BF32F26B8FDFD8F88BF32F22FA93914F71F15616CF22F31B198F8DF5B898CFEAF8EA8C878EAFA7F16AC22B198FC2769FF7262EEF8246FDBEF66F697D757B8AFE3575CFE1F11593AF85F5F775AF61F19F87AF89A8111FA7FCC9CFEFC9FF7472AFC620
-:80A20000742CFCB4126D976762CFC4D644F8D6E74F4344F277762F35771FFE161EFF91F13D35FF9555FC3F92A3D48F44FAEBF3BFF5FF859DFFD8AD9C1F1CF914376FE4F16A36BFD7FBFBF98F8BF93EFAEFACF46BFB8F85F1684A2F2BF7BA7EDFDFFF494B2FE2F62A6E4FCBFA11113F5FF8982E5F59FF584A1F7FF7AA387F5FFF3E34DF7F45
-:80A28000FF9A9E2F2BF15BF2DFB8F8DA787E76AFC6F47C7CCF69F92F3E6FEAFDA6F44F43F7A4F6FFCF43F246417F31F43A2BAD3AEFC2F23D311F73F34B2D97148BA28F4DDF19F359BB9F98F4DBD18F8AFA91936F13F17133CFA2FF13112BDF1F1BF921979FFEF862C89F97F1595B1F39B9267E99FDB8AB8FA2964E1FD9ED2FFF317367281C
-:80A300003F53A2EF3F3FFFD4561F1FF6DCBC5F7CFCF2263F15FF59F8BFBDED2DBD66E546FD6CCCDFEBF1249663F34A781AF9C4F4BF3747F2B6776F73F63B28AFA3F39F5FEF53FB797FAFD6F679798BF65EB2BF3CFF5FDACFD9FDDFDF2BBF1F3BFB36351FF7FB6EFE7F55FDE1D11F3FFD65D1FF9EFC79499FB7F57B793F1BB7B4F79D936F70
-:80A38000D1B51AF73C685F3BFBF7B53F1BFF94127F1BFBD4C43F3FF7D4161F1FFF5C36FF5EAEBF1F1FFF5998BFB9F9D4D62F47E566F47EDCCF6FF9AE9E6FCBF9EAF8BAFBE4E51F890621100221501484148A048C041214822048242804814004420088422A080098800100180000001A041E4820492411280870EF0E4904407844E1812213
-:80A400006481811A02D012E98874482482A1418B8441211688281808C01881008CA121848220088698128E286081896849608889218168888112236488252401F0E8DBC0421F4152281F41324C1F41F64A111D6CAF14F18164AF14B981F64A9259F44A924F82F44A935B422F14F924482D915F82C4914FA2E414F8254A16F1244A87192E01
-:80A48000CA87592ECA8F49C2CA1F49C2431F49D228F8912C83F4912CAB841FC8B24AF98124AB941F88F24A9153B84A79A4B84A39A4AB94478B29F9A448984FAAF4FA16E032F11164CF323511CD121B61AF32E141541A1D64AF529161ADB45986F9254889B93584FA15482DA35F8194A25D5A4ADBA788D2A7A5283D529E212FB264112FA293
-:80A50000E481F222439A7622A32946A32127368AF26A138E242F76A128AF74B381F24213A2AB3443BA4273A4B84273A6B842F3A41ABFD90B20080000200200800200000010021800000040010080040000001244800800000040013FBE0847211D2641281FE261152A618411149692A1160185F4428846C4E825C58822918334844E221533
-:80A580000446544229721211622184D2821928A8125C2168B28C44F411485A820812160AC624817818242AAC12F026512022091D1A4826924936A5252B926889A1484B81332131891222412B5849634B1942091D142812842ABC48B222942434646C61438823FA122143682A3A1C328132812314622C844932192249C4188511F8373420A9
-:80A6000071E20299F121542F34737891691B5213BB14FE2881AA6421CC911A17848F26D841022E524F11E285B212CA6B439815494654825AC8482727CD218DD12D845724922E821E271426D628BEA4D482F594212A68A21825A2486998341B1844C6A2942E1916F872FA302417414128A10016440224121C3184148AC484127084988284EA
-:80A680004C180511402261221C3222004022392412889AD218081811421280941830481068834C42089039002008880080080000000000000000000000000000000000000000110010011400775E302210514418817C22962616F821114881842948128425C38227588588B21124645845428832191C34C2488D184E262B8210418411CCA5
-:80A70000A3622952C526819418842948128425C3822F48A181284F88F4BB552054A2111E14891CE4761278468864112A13A188254298444A61238827581AD98822CC41116C6292811B894A14D648C418284E822393118604CBC41C2262444D482F12039B81865866282A355224AAC9241E888384F4ED97002008800880080000000000008F
-:80A7800000000000000000000000000000001100100114009772001A0220F2112814112CE188D428210120748508178144841C9244F021481417821431101118248181C282122501490845819288163868402181084E82488DB22A04451818E4B2462152128B12A9925C25C2448B12A396212D61CE2311ACF4841829E29174E282771225D2
-:80A80000E8882104830C2361E71A66CD982B212B86E42CE454214A7424D8A125348A5B182F2461388A31CA4A91CA37812AC4288BA14496AC298AE74AA186AF810E28290327825676192294284E3A86AA34231182F44A841DA817858F38C3528541210899C2812651221D48381F4488C13622442CC49696424468414827481F48B11888D832
-:80A88000220A1C819193802AD824128CF888442A6968EF2A0D10C138C02822157411022E4185B1411A41C8124124484C92142A985C48488344C8112E164816688821CA911829C241281149F2498210897242D28131584E8842A31C88668427878CA987322A51482AF42D6F8082011E421A028C1314622244B04838A2216C824112A4424318
-:80A9000044228228B24259284E142A014A01601690422791166C48481908214CA8141CA582384284008283A3168B9286A2418B21BF9A0B18901A890624420020312E2183C24848428C925818602419F1281388493A3240568425416822942222260889E74291688B828D3300C41110A41200201808AC442CF15813002644010040C8412BCD
-:80A98000142621041E451290844644018648880441904128846022424C214805248602812584011C44224808890883F4861A0000288288CF3B0228265482812942C26845CA412A018C3288CF1144F824424246B615246588E0126122A6B444F2132A42CC13EC1611B824A182158664338749EB382E4C8D812E882A31822C61998B8218C11D
-:80AA00008C3148CC08888332182AB48434A81F280518121CA12118800124482F3281744222B842014C6982812246C4484217881022B42401250229042D48282602002CC1642C51814714484211A048002D128289A341A8869818F08C3C60412180012638410080E428222109102C08301300A3480252623012428628826821981B1431140F
-:80AA80002E881212244A51128981B88241031A420683312889AA241821CF2F0F28180038B01242B24122A62118008D1280381A144B9280E412A1242A880888224812C0421190444332382830448672210480281108819058422288000097C214121C42688252D1644681410114823C38842E861C8168888D81CCAC12842C41092509948D13
-:80AB00002117845662818002008B18D02B8C180883744212491228734802872184248C03005F25071912847244312812204224542220B4120220722883012245B9244801268868812345622AA8828CB481240151445984321818918880974130414081828448014183F2AD7C20280218484911011052811A9842836412244418148D141442
-:80AB80006014704281242122A1121414C011A321D8810119A8241A68241994222130211021112222A2122216C4482826F1ECA1100481430211211682A21262006021148240048800C1501224C82644044C6414235A142508214100118001278888C840244102452281241108CFF90B202101151812088100288C880240118282024C0488C2
-:80AC000040C2E11082042480849865443880188102000080020000840010F26B1214501816110220E451E641D44101141D124D438244844192111818414E21C83608611111882321230100840024892224E41208249124112C8463214022240142674240188456184521420410D212514241284392A1183C3224E0424499528011812A31C0
-:80AC8000442432221C082226199A442A11952414321302408481822402001282286911F8C75F20B181823341D3F122179F1494228D12648B2488881AFD92383D849E8C3F3239845FC37A11E411B384A474272C3D1258AF2191142E32172C5E522C66181D972F55E223F52731A2CA941497B12E423F217142B288E81AF18111305122442FA0
-:80AD00002394148B31830436A142EB4590354C619132D085021F46F412612F12F611413B32AF75344F1F22E82AF22812C9F22291244F1EE984B41151921DC18D61524BEC17134CF432D1239A823B11B2504D87C15B9115F132242BBE4F14C1281BA8235121A95C316D494AF51212F0122827882F89AD644D12A4AF7745614267938722CDC9
-:80AD80003D6E7983F126141E1347461B152F2261398A61384554147561891FC1F288118C564D6E2DDF2AC8282E883FB222F2426CB7158CD249EA8FF148E289F6A5D294D058F224AC9F3C0CBB216E4185C148ABA55618AA12AF21E28296388B422E824B223E18C4A9D2DF0A000000108414046088440040048130481028180887447048048F
-:80AE000087448885948242218449480884C048E088048C044D48D084044130948120F4E1C7145F51F3453DDD1D5D37BF35D577F21B2A3F53F2191B25F35E4835F3C3173F3CFD97A32D843F13FBA481AE82EFF3F1F7D5CFC7F57554EFF2F222C28FACF741532BC55D1126F353C35F45F416B4147F44F574667F72F22F2C4F49F765667F7E58
-:80AE8000FFFAAA1F1656313732AFA6FEC343BFECF446467F65F776726B544F4454E42FA8F9C2FA4D544CF122226D2F145F51F3357D5D155F72F65B615FF2F25B2F3F76D6BFF32726FFF5F413933F74FE5FDB5F39FB2727FFF9F9AC895F32D876FA46C66B675F57F7B6371F36FC63E3BFB7F55E58D5F92C3FEFEDFEFA4BCFEFF6EA685FCDA7
-:80AF0000FDF5744F47F635245F5BFB4D6EFFFDFD73B17E319FB5F76BEB6F46EE2CF4E3F45F74F45B7AEFA5F55E5AEFE7F71A1A6F6BF9D6742F46F61C18AFA3F1FD4B144F41F31575DF42F11923BFF5F45367BFB5F63735DFE1D122F14A7E3F34F4CB3A3F3DFC86962F23FB3ABB6F7AB992793CFDF1D1EFC7F57555CFF2F3A2C28FA6FC6AC5
-:80AF80004BBFB4F41F1DEFF3F17BCBAF95F61EBCC5FC63EB6F64DE73F62F2C4F4BF37DDCDFEEFCCAAA2F36F54B59B7BABFF6FEE363BFA8F35656BF85F5684AAFC2F42C7C8F82F3888AEFCFDF4EE442E226F7BC48145F51F33D31DFC2F1782BBFD7F6716FFFF5F27777FFE1F377379FF7F7D3D3FFADFDDFDF7F7BF936376FF9F9B6BFFFD93C
-:80B00000FB3CA9CF87FD7E3CDFF7F7EC3F9F9EFC684BAFB7F57F3FFFD3F13A7BAFACFEDE2E8FADFAFEFE3F1BFBF5576F63F43D3CDF9BFB1DFEFFADFD7BBAAFB7F34B6BBFBAFA2BAFAFAAF28FBABFB5F57F5EAFA6F22A6CAFA2F4361E2FABF9F2F87E7C4F23F3687AEF930D00001C4128022602221220482281628828122811002821422159
-:80B080001082B2220122B022084B12702402001400004820C1221228122800F08FAE30A41249E18192142821482B16121490821E482182140045B8480889A34881C02126384830C82CB1C88211A1424C028E288B14112A4898188A366880E981344A10A8424088E9830426F99DD7E022F41124A5F2112487241F41726AD241F26A121D64B5
-:80B10000AF24B981F24A9259B44A79A4F84A9153F24A91578AAF54F9A4488F14FBA54A8DA14FA27458F1244A871D1FA274D8D5A2FC98242DCA1F4DC2C21F49523C1FC9F248811FC9B64EF8812CAB141FC9B64AF98168AF14D985F44A914F82B44AF924482B944F8BB442F92448984FA2F42422A0521FC1964A1F41522A4C766AD281F26237
-:80B18000121D6C6C99618F6493414A6982AF1439312F2439214E1463E214F327124E244F22681417A2C67125285D961E216D4A1F8C42E2C9D634A42985F18164611B6889F191645CE948D4128BD45AA942AD942AD442E98BF442842B424CF9261A6F680B0000000000000000008002008001000000140000000000000080020000001002AA
-:80B2000037F110C5316D1828284528D218D4A1C1133C1298114921742172A1A418966C42D014424452215CD4223411A8244281842B24823B2126C222144CA1244F12CC8116944129B193021888231432C2412F83A4841A8224F48FEF144882C014B5C2312D1D4993448AE2848191889143B144C15266041C71712474B1B8448204439128C6
-:80B280004E14B21B18281A321C1AE248C41153A18129D43261813829A4A1991EF8184135D89681814CE8830423836851F01BF8141D44172716781482922129F145289F44D112B32515FA281185C4544E2453BBE26189413662568E315A52328681343888A239392883F248218D925B431F24C1212F11E84124E7C4FA11824C84F624488D41
-:80B30000812E188D11B129A14827844B12282F28A6214B41128FA60B0041288563C1C7121220182A813811301123144434314605851424D4246441315E24184220911628882849012512D112818231912D931A6234C09448218287241E48188280F48AC450241391124C52328C62221022880142928113C1A2122D2340313414268802003E
-:80B380009044F02252424D4228248200224800C7248664140012AD12128843C886122B24478A40D242072B21285C8221C241471187122A65268581B881714431C125645149A2852E82224698484378CC21E225E281D6A3B528E9111648B298E214B9673821EC6B432F41D8F2B9ACB421FC22911B25B23B862F2865844AD868F868144E19C8
-:80B400003826C4141B141A668E9F79032B12136112436332C01119B252A2828901121C3541121F210A2B2D0048482E884908902A19F5126C266283426F81B812D4419C218B8140B48AB424B4417814C1354AB9428299588618F21428C4982D14381D1C2246F26D73407422C21410F248214C120A422581B841C884AC4815943434A839F2D0
-:80B480002814854174688122C75281821B412C0468172A222338246F22A1A147318968228BA4236C121978424282F51886C81B1C26642246A42C528B28DF66018D4428B022E49422420441812F4284322800261464864924D141084B4241B0413946681D14481F8218B844C12113816482288A9428990A27944A6245299AC18B4B460C1263
-:80B5000082426849A842C6BA346488BF3E022440944125440213C222424CA114328487448981711182DB96424882912180E881028A0280414803472A5628A11244614A42048400448820D882C214C0188CC82220F5D5432002848921711A34488152400A211A84C18189484448821414299482281008A11622042938242144861988412270
-:80B5800088528222852112038C01402A61261800B027064F2402A48F12C16D4FA2914C85E143744AF218224A52828B41C9F1942189C9134CFC22171514E48144147241F2245848518CB48931484C31822E15433E3489CAA8CCD243622E2642F8344A1B288E61337188C418882372448AF448142DD88B4A1E4446F8244D002841D0220180B8
-:80B6000002202481014284444F829438848B84C0251B52882260829A128292128364225022C01112188618D2C1240681B0488A0412892881238A022882BF2908148A11942AB04132180080042908A4428821928E1820A84228844284000043126488498134242081180440022D821608882A94884CC4D26CC184457248C4114728EFF40E4F
-:80B68000230484561244944489C6482C848992414B242504401902882E45881522C2991284424853224408004021E81122428496522842282F1831116122302400A0122918F87395002F28023021604214C021848561510088421B82901229B111B811C2410021644023082938A114502230228E24842384181848821441689241106242DF
-:80B700002911081429F4EABA401801D5021A041822812044D88186C84435049324120442411180A441152442120842CA420444518C045014B086210289B48484213812822098121002130812260914404202008DA1802A0820888494C122811289020035249422143082003218144E816011614C024814842149418462840040A4484A085A
-:80B780003B3A141190217880024954214A082E825012840087632826142844041782AB14161808481AE648024D48406842222682210418282269E441A841002354421281B06201250CEF5A0C250A854424018181C4002D148490212502211810028445B24401212C38184502E01401124041489849804438441018612880D4842149981259
-:80B80000112C888181F8F12A2034882F12112214C142142D424C9261CAA1412814824212409154418200614214008282431434844318428611544820F8821C46B481A128502100004816AC42C43C84E2A40D16684148C0814B810049518121A5042FC8B2220D12C22A3848111022A4149081CA5141C53144841C8212688181484120C42893
-:80B8800018D0180846448876810A26C224132802A8E3924CBF3A042B148FC9D212F22C1E881ED56D688F149148BF4698232B9BFB494F24B4EB93424A3847A24E327081A8424D49BB422C31484B4839C4412F343C286893521416A42149F23C93CBD217824B468B318FC1F6241CCE428F86F5CA888E13A76382CF24B7A6B61231A28CF24221
-:80B90000F85E45A7C4AA4562112F2A51C13B653335452CF1214C5D2C9CF21889281C7889C48AC652238F11BC11FC9CC16B165CFAD4381306CF8544F1481B56726436344A3A4CCAC8844F244B5251CE24175C4B4525C4C649A884F9A1A115B1577C45B14E6A418B911FE2C885296C4B4D29AE42FF3741D1215411CF2241D114A222874421EB
-:80B980002F24C142EE428FB4E4A6D19248C5844B58AE3A2F84732368D94B5419C8264FB492832FA1F5118445DD81F2812447E82F49D8C4B6B80577C28512E381526881471A2F24F18B621C7A83A25185C4E82E1E294836444FA1F17416C18F2899845F4D0D00004800411200008044E488044844128182874411421901101811882884217F
-:80BA000044012E91008C0448E081448144A448E088041308828182442FD24253752FA6F23E2CEF52D6447411F72A2ABF73535FEF42F2A8E81F16FEA1855F41D945768EFCD49CAEAA6F4F7889FBD241D7C65F47F54E4CC7E2CFEC751BF81C9EAF85F545462F42F4985A6FECF65E594B5DFEE446F11919DFC3F34C1C57B4EFC5E52CB692E91E
-:80BA80003AFA4381F0785EFF947481D144E26DF566662748DFE4F5E242CFC7A7D16D636F2C4C7357F72369FFD3F23F755F41F13127AFA6F26B2B9754FF5EFACDE7BF3AFEC3B77FC5F987A4C7E86FC1FDA2F94F7BFF9FDF3F3F7FEFFDE5C57F75F72F2DCFE4FD1B58CFE5F55E1A7D273F3AFABB3B6FECF6FE5D8FCFF5C4C66D47BFB3F3B333
-:80BB0000F7AF95FB4D2B6F45E56CF7DE98FFDBFBE5A5AFA7F2DAFBFFF4D5B3F31E3A2F65F57E7EBF81F16C6EAF87F5EE7C9AF5A472CF8F46F327273F23F737227F63F367645771FFF5F14646FF55F1C4C6AFCAFE71E33F19FA15D2EFC454EE6FCDE9A8FB46967F7AFAD6C1FFC4B841FC4C5FF772CFF4FC1B4BFF74F45B5A7F24F4AFCFEF22
-:80BB8000F9FDCEE88F85EF8CEF6EFE22619FB1F1BB39879E57F6EFC3F5E4E2AB9D8E83BF7CFCAB233F3DFF4A4A2B886F42F2F2D26D422F48F84C5CAFCFFD7A5C4FC3F944FADF1C45F37767BF33F33E2CDF65F367645F77F67B3BBFB7F37937FF6EFAEBE5BBEB7FADFD57D9EFDEFC484AAF85FDCAFB6F7CFFEFEFFF9E7EEBF9E9CBDFF4F36C
-:80BC00002B69CFF5F41B59DFF5F55F5BFFB4F6ABEFAFBBFFCE28DFCFE7CBEB6AFA23219FB1F1D3918F97FA6D6FEFC3F5E4F6ABAE3F3BFBDBD7BFB7F69BDAEFADFDBA99CFAEFEFADAEFABFFA8BAAF9EFEFA9C8FCEEC8FFDE4E12E1C100214842160228C0448244824482484241308823011000042004190844249084110026D111004204850
-:80BC800022094001644004008524F87DB2302210A2219021242822F062811688081C2848A4414A221382E414285258292451A2542CC4218C082D48868485722262488382041AD424C8682C8866244180D442A142241285A4424A48F2FB24D022F4112485F2112487141F41324A1D24AB141F41B24AF98168AB9453B84A39A5AF54B925F4A2
-:80BD000042914F83F442915F8AE414F9254A4EA54FA264114FA265591FA2F49825ACE44DC2CA1F4DC2531F497228F291248F34F9916CA7241F48F64A111D64AB941B61AB9459F44A944B43AB944B422B944782A9F9A448984FA2D45F092D521F81D628E14162281B618B1613F142111D24AF44B881F242951B21A11B4A2B8413F24A913274
-:80BD80002B843D482F14E2A2A5841FA20D4FA275C8E522644C2E5BCE242ECB4E2C3CE5C8E62255C14E118E6C8F16C1648F14C164AF44C864ABA41B6827444F8AB44AB2A414B2A4D422B32494822E5A1F9B0D828200000000008002000080042100000000880000000000000000004004000025018F1A4D0116116C222E13C0324521B4A1B0
-:80BE0000E18841C1184E181E488C24E444F1192493328219D148C8647048251432262CD8B461A7244113E843843822AA613316D12A68A31D1630128B182C1465841E486446326C30124CA286414FE20447228E221A381170181199B81604226A29348188593182268288819124123084282A21E239342822A0481AC424821963412522485B
-:80BE80002865188A721491E12218830160884B1A8A61422E49429442AF2C0E4C72C3021CB321018331AF499111CBA11CB848E11891685C84AC342FCA31282D824F12E1C8A1214C788865212C92142AD8A37331C28243B428A8431F258AA2A13B292D194AF823987332134B848B2932E3119858C9E8243B34222781688D416F21F4C5C6000B
-:80BF00001A929C50221781262121A428A061C04898161812443111180049042AA424E01C5282448C2484514149084D1200901A8049F422112014210424418B84411B2441A8F0EBB900004480028001508100290800200200008440024812200800120000211002000018304800000045F8396D142C3424004815440825414368228C0852CA
-:80BF800045925849224568184668114E2819A2423991248E112219D8289434A412522D21248E248C248294A119645240BA481891484418281A0823198428F2B5FA004C0244902184301211D0815282244A196484281A24328148182A64124E28271145E21881E4184198A210C25218308642222334812126015082A01444568822492209FC
-:80C0000088C45F874C2114028044041041420888002412411008811481008002228094148112C0218042082092414410A88414840000004180B252071410044400442494001001828400402504410000C0424F84120280018002233228002A8104002521040028215882008F2B4B0212120083942281442088C5489084208101A984218882
-:80C0800006002C460C28002904A02828248818201924D828318888C08820188801428005841FA70A442428411002A0213022008B18C05160920000C08844228100218200000018810000818004000080E888840100F07F6724111662411064842145C826152A82416898881B4883D118429248458184D2841884C228850428CC1812021804
-:80C1000022282483A8128188418983C148882491424088A86818521A0484BF440B4120424402228001884842124412200180212804004221D022A424200480082A0121281880C8482908200882205128482008F0BF37000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000AF
-:80C1800000000000000000000000000000000000F04FFE004800000000448002000000100218800800001400848004000000400428000000002180F1F3B5000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000051
-:80C2000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000060
-:80C28000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00E0
-:80C3000000000000410088400800000000000000100200000000000080021008000000005FAC0C18412002400220814202181604411C449482410040084112C011468802001E244128B0A1011448158424021120210100800200AFAE0D4902228119413811845532C82418904AC0180090518414266818411466024904221285321442408E
-:80C3800062418110CAA41810085642220C239424128C22292488021F4C0D4B124422221301348444238D022129C11410C441648284148C92814508492601188326424A8434344582021F2A018E25481148221A44224422110420A82480023F5D0C004008841840414822018C041608001B4144000011106244118001180090148440081222
-:80C400004184002521888184229128122008F0A95640028002281C618114128140A249811944244201424142220010012608AC2481A4283C18018226F28124B011828192181A8409A041248001812220F24E8A50124184167822D849518229443A292D221E2894153894CF28B34871596262471428995541C974CA61B44AC318181522A415
-:80C4800012A26C1B2481624229E2518CE15E71C2E6122CB9227882681429C1112225FC142A222A91348AA12145F833311041048D1226581816C118842381C2385018818E284E141A4287A4421E41414CC2499052911822214A2178C4021E8380B282E2423DA61AE24A91412289981824121440DE2421021E248A833228FF44454202812800
-:80C50000D02453284211BC121852182BC14C795154829394221504C41964A488932482019442AC22A3128E24C021444061115B843394B28AF11222C24E9120E1220589222143081844EF480E8B1428211A0442C9048341024721882722703A44E82411E946414784814282D98162422909902219881281D184627249046902226B2830944F
-:80C580008AA31213A8181E828F25022F48C3448D648826AC241F5E068150284849240144111C823A2C1C62418C4102C084E0229488448A84A8921221813012831401C04284181904142450184C0241220021004082C15292844F1802446051110012002194C018840043080018902110048024A212002B144400908881102812042C484108
-:80C60000038120041220020082BBCDA0142662412711A014CC1174181131A9166838648161214AC181444F14328C182A3C84289C31222826C212AC866842115662421F82180E1D2C2245C2AC4D821119881128B94239722CC184D0828658488CF844AB1004850143044240821282921A168861838D84504A3A84015C021082D2243498186B
-:80C68000005200004911410224281428981A123281008502384B424CA141B82A74A40E48202211113848282200167188028C51848351241951254A0313041B8488132104582F12A81A430900442854181110124125041002841281182908881822BD7524113018001210113121122D424888220058814200850200898481014C414101821F
-:80C700004438484A013012512901201832412182002180012902EF94011028922850612E121827842441823041463288141A42220248A04821482304298422C28421483508214C02C0141400200111601444408408008241DF540716C81119419149280028100843819A8290C20040849112001880180100688226342111148C42020011F7
-:80C780001042A5148021120210128242427226062308844240881411E8110284888014811C0110812481848804141440044400002004181218C044284800100428A0810022145F660F111110C1444019880134465183A18E111884A304138241011001111A041124283E814449C8145508142845582245D862442864812C41B922016B12F1
-:80C8000045981428A01212229F4A0A460800856231205421244812481C01464221B242C2528C0448D08214321221A97112B4882111F21A4121212123C1144301412820938227288A2404898C881802802848F2F24F001041086116912A21254868481048319210C82121901111822440022C3461104182D1218342422442C221514014CAB8
-:80C8800032424183A1281822124460211824F051F540488824468482024818534134154E3281174412141684011042814181180141314814827081B828C15190248450811819011D2C14281984140488248200F0DACB904386D188C211C754719F33F463131B6425E8A5A15487253B5C9F91F5D8429F11F14233AD1119B152A14546A144C9
-:80C9000017244AFC51121A74516B142F23C2C44F21355126061D26556413222D141D115C12F146312F21F782692BD5841BC2895C42889E822221282E9125B2B94D225189121982C4128C8132222C525DB3D1972DA1883D1D8EC844667472D68492119931822D811225E11891424F237781A9332F48C21477985F4112EA13D145E661512D0A
-:80C9800065D28AF1561481889949531B2B155E2649592C4CC112988812F02649144681F121118F8654A18FD3B24252888D1B1F1311E23868488D8B2F24928423F439481F21C2611C44A1411D828E4835924837241835D4447981A3822FA8ACA12F32F8341929B24891241E291654253417E1624652415E421C7284A823361CB6826821BA49
-:80CA0000E128E242F22DCB00008004000048248A044032849044241508846088400884C0885084100400C1302810088110088110280810280882F07278341F157541599919F44D4EFFE3F25B42BFB4F41A11BD2BFF94F141439F98F81B9A3F295D66AF987828DE6BF1731AEFE7F548495E499FB5F4CBCBAFACF4121AAFA1FD5A1BAFF5B5A8
-:80CA800032F1D95AAFAFFFD253BF28F892163FA4518BCF83F1183EB551F32FA252EBBF3EFE67393F8AFADADC8F1CFD416AAF82BA2CEBE2F38A8885A83B3AA33365F22D2D343F15D581D419B228F64D4D7FF3F34A48BFB7F71B13AFB2D3DBF11B9BBD2BBFB9B9D2FF47D6AF35F16A5FBF72F3371D2B172B441F95F4CB5B3F3CFC42D22F85A7
-:80CB0000F11B5A3F35F57217AFABF95B5AEFEFFD97965FF9F9B6353F24F712244F43F7383AFF71711BF7373BF5FEBBA3BF77F3933AAFC5F3C8919F34B662F4249C4FEAFB8E8AAFA1F132321AAB996F62738244F352511F11F539391B22DFE6F67F6FBFB7762BFB5B53BD3BBFD4F14B5B9F9DFB1B93BF39592AFFFCF86A7AFF24F1733A7FB6
-:80CB800057F542418F15F4415BCE833F24FC1B132F94F442432F24F6BF9F6F7FF7D6D4AFADF5A7AE2F6BFB1776715F13F118363F92D373F12A24BF41F1E7EF2F42F7A8E3AF1DFF81991F25F136B6EBB2AEBE2F49B912B1B2BBB2ABBB4F68F91716343F1575197119B168E2A6F6737FBF96F67B5BBF35F52B3BBF94F14BDBAFBDFD9B8BBF32
-:80CC00003FFD53D2FFFDF96A7BFF34F1677FBF97A5549F31F5C14BAFB4F45342B7352FB5F45A5B7F76F3B787AFB6F6D6F6EFEDFCB7B76F7BFB1777EFD1F26D3D4FE3F3363F3771FF73F3171E7FFBFA7272BF3DF7575B1F9CFD7113EFE7FB26BC4FEAFB96949E922BBB29EB29F9A4A61FCD0118200200608126814421490140080080021094
-:80CC80000111422110024142189094F02611C0111004414834408144034C224904002870440A8E4140417844038D11282D128C02704A3381188221842D228021214482081220F42412122A281C42941200405141181225224181C4121280044002009845F1F7B4C0521F4152281FC1B248F11164AF24D141B26AD1C1F24A921B28AF24B902
-:80CD000085F44A9243FA4A9553F2429747822D955F82C4914FAAC4814FA264114FA264192E4ADE254DCA9E244DCA1F49C2431F49722CF2912487241F49324A1F48F24A111F41B24AB911B24A19B54A3924AF2439242B94478229F9A448B84FA2F4D8F9C0421D6C85D24122D2C1D22AD141B26AF111246D821F48F24AB25B282C71B1988861
-:80CD800013D3227821E814792798924FAAE514F9248A1E815FA224D9A1E541D2B4ED51D2A46CC93CF4914C47221B294217494286F462111D242F4451412B3453B1423A142334148BA44518D28684D1A6F5A88500001C02000082400400120000000018000000400140084811002001000000000000100A9FCC021464005B2145880218823B
-:80CE0000ACD28148029CA8C22A91221322F24821125F848104898294454CA42449022866C2221424828421127021D82298458CC4C1238148384246C2186AB8A26141421228A7F824412B3826551281211538434558828818256881491133881B818744714119041728EC441299121D121494304218442E12142E182F51521445D341014B41
-:80CE800021800A142D1D14249243D248614460418F1214F467DD24452335221417C1C187221C64A1828CDA386842184399828722185FA482F2482319F14C111A487A88D2A124F4144348C7120026332C1371426288AF334454244413E249D2433464C66222C349784222D886012948B444B1283116FFD509C0244503260214104448225154
-:80CF0000288485B1218439A1104584041D4246240259011302244A82052312A112441413C11184219088111C1141014A21F248B44B43182024F2F49F80A42124842117413C8122048112B0844413948241814850844211424342818402C042288062222818921417884068243028194412D5286181181082142222048F2141611241271196
-:80CF800049B118322A6183C119AB122912985289B18294392AB13878259218875113D78442C828461AF8281399F51864993AB81E8287631E821216D2213228A3C3125B524B121C3A2817288B1817818D421C644427828366C6CBA14B2489B58C7144F8146220445221C12A3123D082315927A2222490842D812F51A28160A21668C1468463
-:80D00000140848A5714168854F84B38822241862212CC3321B212351818308897181123821138C11AE148F41341A81284E9420877848F4D8FB30213624612184C72153810212818C21E58184442AF284385442149C732814C1688D24E021621240E18A91322E1C230A008F288263311F4493244A82328827819413542B2082D6C2742862BC
-:80D0800046818745248E64004110223124248502A372A38C323249082981A15256486421222648A34AB884C111468468441321C915128C813942602240834892142A24C21140321824260C3E486C341483F3F7C5601310395124141B41428962441604AC6694695494412022D323824404811C8903A2813224195484104418C869224C0109
-:80D100002381429425A12302A418244824422112882F28F4BA6E00213024200128200184822001407381048D844CC811400474901840C22826488212420441120041124288188225A84128438621A1122008441FEA06130315484132151E4289C22A309385F218825DCA4414413E438F1798142F48E1487434199122F0192485B428618432
-:80D180002A79429A6887692E171243C1182D252849034D121AD224A4382A4122C1422A21522287432952829AB484D12CFC98D4404244E2418281428114E2C136282842E0247114880144228D2122008F4438211062184130241200418048880125128108348C9482159818F04A141A041AA43441A0124EDD8022224371210A3622011642F7
-:80D20000C81216734112817212711822652120E1888212431122D1864198A220925A219042163428A13886143C18B0448131148061222822281842A921088647C218128CC428442C028190851890484140A182608828004021041C928422424E143C8401111215C4421828112301221150127086111194484318241292443845F26A3640DD
-:80D28000420810024141431108220094400A8521D118021C2144344512760800100C00228521048283242384021A32424284200112800180D29A051B24422031151A14C8322238111482A0C118482AC924818AE1C2C12484A22A0110A183118004168428A14114400419082410128412120820182282028CE44A4D224894126712891281F4
-:80D30000414189022648618140082098211211504800128436089018001C4204278283A112403C28412001934242041212003016881CB83E0218212004288484187110021482882D29858454C219841401114002248149946438121602C100D082212634484F840820F112244024C28422122D44C02425F69F75003021123018E044028AD3
-:80D38000442835484884411200002AC8422A3888818084844402508544121064422149A818A08212284C0800324283B612180882214A72BB0111830300450A244421322118AC2151824003259128850110C224554245F224112D1143334E42244121501219C129282441128934411061818444004C62426041F07D4660841419040000000A
-:80D4000029788934864C82A4388A24D241012328989282CC53228824140088142C088C9238C848811092951A382160628022227882C81830828AE1888624F82E4C142C31812E211F3432188B1423D1EC52234665A3871519F8481627859F81F24B9816F8A246842E68829EA2DDA24561C21912E281D2A7F145444FE2B118B558541565C245
-:80D48000651D82AB4281DF789864DB1C4F887641A5143E3119911423F1A42832CF4223EAA9F31476AB594D8149E236031E41AD6E1E1884412E2226BC11D14CE22103A6E28951151B18AAE918B428F91C888F23F391918F83D511054E8449D2429194AD54721AE214F444248CF91214B24F82C1281FD581A3132FCF6181A7468F23D348C232
-:80D5000082CF233482CD118129668C290A2A28E464F128844FF149B263A21315E243F1212F17C18D12621AB1AF989B3D38AF74E481D4385C243AD227F241117511DA513A2CE6F8AB28373516F3596E17328B682D931A7A2258632CC214A721CF41C12227932D2889E852AA91881E4239544217748CC2168FC4A9811E166332424FC2AA2BFA
-:80D58000CE42FF690A40419812304420443844862802204102441100444084942819141821981182200882004F120100002A082E81C081000012004280F2F91E343F21F716151D195FD1F15971FF75B7527526FE43479FF4D52AF143E2AF4FDD7FB483FB6CDC27128F64F4424F7FF8F8C3CBD5FD4D45C7ABA73CCF6651262F67FDAA83AFED
-:80D60000E8FAD6859FECF6A63E8FB4F8B3B37F7272B7FD25AFFF6356A8F7D9DFD5F4EDE7BFDEFF6D6D9FBBEE2AFBAA8E5D86AFA1F9AE2E6BFF4F68F88E184F4AF2E6824F4FB7B4F36626AF8248F251726FF7F312385FF5B71BF11B33AF85F573433F31F12F2FFF7DD4BBFBE9FD7FF4F593B1CF46FCB21BAF64F5E2F3EFFAFBEBD9FFC7FEE0
-:80D68000BD95AFAEFDEAA3DF7EF916132F67FF3A3BAFE4F6D697EFFFF3AE7E8DCA3FBBFAB3A77FFBF43FBF7F23F33A18DFD9D99DF2D5F77F5EFFEDEDDF9BFF2333ED3C5F61D9EEF8AE2E6BEC4F69F98E986F4AF2B6A64F4BF6B4344F6F7B1E4BF353537F71F53A1AFFD3F319377F71F31A2A6FE6F72737FFF8F92B97BFBEFECAE2FF75F52F
-:80D700004F5FDFE6FD5BD3FF6FFFD7DF5FF9FA5B79BF98F3C971DFA2F38FC3AFE2F87363FFE3F17F5BDFF7F776C7EFF5FF362EA7AD3FBAFAA6A66F6BF522AA3FB3F32819D7D8CFCCF46CEEBFFFFFEFFFAFE7E626F31B295F69F19F1FEFCAF2BCBCCF6DFDAE9C6F4AF3EED86F4FF6B4744F6E9FCA243F26F73F77BFB3F17F3FB7F23FF7F7ED
-:80D780005E7E7F73F23B3BFFFEFFFBD7BFBBFBDFFB7FF4F57F5FDF66FEDBFBFF66F6F3FB7FFBFA7B59DFD7FEBD97DFA6F68FCBBFD3F87273FFE9F1DFCBFFFBFA76D7EFE7FF7E7EAFADF535376F63F3BF17BD8BBFF3F31219DFD9F9DCFCCFECFEB7B7FFF6F5DADE3F1EFB5F595F6D758FF7BE3CCFCFFF9C9EEFC8F9A634EFCBFFB6744F4B94
-:80D80000FDE4F6EBE3A0122002188CA4121A44A34126A348A04870818862812C32918932914C3281004C12922818281008501230222042C881842A486832001A048428822812421242829B4AA0181250812E12502484224440F848121214901213180A141160821042C11A468164152322914244181A722A215112B0223181189A041AC61E
-:80D88000819214122364810089228143F34938C0521F4152281FC1B248F11124A3D441B24ED141B26AD981B24A7915F84A924782AF1439252F14F924482D914F82F448954FA2E414F8254A8F15F2255A96F121CA96E5A2FD9824ACFC91242EC21F49F228821F49F24E111F49326A1F48B26AD1C1B26AB911F24A9151AF143924AB9443F31F
-:80D90000429247822BB44F8294984FA2F4769590541F8196441D28AB141E24A7141D246B161F48F26A141781AF44FA1128AD965F83D45AB82594924F82F4429527822F54F9255A4E955DC28BA45F2265491FA22CE9B26D182EDA17C82ED31F88F42CD192EF14F18124AF32B181F46812118F5629F94A258AF24A11A22F2421B3482BB842C5
-:80D98000F3A24889D122F5A6E40080440100004484200800000010081002882200400200428004000000400482800200401418026FA30525D4241204A37338341444B04182638227912518A41236C82913312816C4488351484827822813411A19B48C321269411414951A45614B1B1610634543A1A446B388E44134864C73A2B4185242E8
-:80DA0000233828824942F2C5E9008A61811A121473210A36C51810024C98111744458141C68162824604431A6121467C644124032A84A2142B1229432451294199A92895A28216A2122078116284248AA424644E142AE1119428BFB94F43644367812CB4187232450D4CE1959234A7221722C328A124937328311589E861C4C85283612C5D
-:80DA8000811AD296CD23942257882381D368C424164398448F42E1112239A2C7113E849AE212746AE44891942376A2D228614663E8A48239741E289F520E00A02141842E1244260100890154534124413221285048414C3221008744411624A22461122CC1244931113CC84485116124602412884825711448A44A002D1422006BFC302271
-:80DB0000116502184C02150C9082C012112908441518121438248D11405581001604124948244214260850182887221916AC210085C3484A21C82200124422008B5F142428383419D218712BA4411E24A6A8212AC4888CC1174984D342A52183A2168D1149362848286314B1431237438B142265AA84303169E21211344544411E41428B41
-:80DB80001E8E4129C111111E2C84D6E289F288448B16822A48F4E78C14212210226182228D1416E4A8022AC48837214064432D532881895614998562141782002D264448C843C22240C4214C9211114A62421932554A819E41154238414C9828203A4841882244DFE504261291363413D225511C132402B88041B8153842408CC124182E58
-:80DC0000184342480469446115156211478124C48E44218E1280124C552846148862812C98181E41182E18248AD58261498B34228870874841752815D22421D41873111402218A3444288844312130314B2110882434268E14557228240A20948346A434442F810422408804848B24411621E78468842091412B18E0818A048B288F3E0938
-:80DC80001212812B241110081E4844284931221C54828112308830241B8194008E111E68904828187021A4816411CC44146241414C1214C4124982A2821C512418418982C214708402423F9103260244405442002236C8121482814AA121D0180181184241144228A014444C6112221840A124901383880430485A42A41481108461244AE9
-:80DD000048452812022608DE1114267512157C2692418D2594212E48CB219E6290829C14C432121493C8142E14135CC113A42443F214698B21C32881E3243224822E114E251214AB8242858452848466B81292291A6C15C974429254E48648B698B2844438E86FBE0A1828211245229114C012001B4120F84A121508168863827012384243
-:80DD800024441190464A32241420995446542244690149014384B464614142127084882181A84238320028189F39054C8402223028210011001100208803322321031283440A4784844612418254848417228554A4806244224C12784411810193A11281228B42B02C010086F8833A40592832168401604120183213222348024A31825896
-:80DE0000412038861004286034800888190C4430218842400422008011222C44021002416A083FAD4F911165534111451284042A048014111108002418410042481302218100211002201242748288821681C4221A048A941620B2A2240824328280EB86016081222191141828148C621464C022114121242284284C8495268E18484818DC
-:80DE800021C044C85CA412AE444C04498542042004A1821B34818B248532448941C78818412280E4780A826302404804624860440000124400209422C028282A41C84414115C1848C444824820026848801241B44801151415B22C0827862A382410241CF494732468111215048522440428254245120125C452004304438112018042016D
-:80DF000025045C440122702884441401464444A4148E2586A44882803184123504004303CFF907800121233111281480058800188840011522988130848E1400824604002328482422042081988280A5282424004200442C011828818CF296C31002142A418102400111244042D121012C26014B148CA4924280140861C110C42881000073
-:80DF80002290248521147811423281184812984400814C028427245FCC028C024C443224213628041304461C8422020042290C9042882A21C1C28280E52481482382C41824484E828221821190826046803A8180856942248018023FAB493122A6F114262E14152C31221F41B241224852832C1212F11516272127114AE44431224F848652
-:80E00000C684478C148F82A4484F2454924C4CCA2447D22E4C4C55CC3AB224B6D128A22847448B52AF6CF14D41CE212F81B8C4C56843E48611DC4273142A5244AE184F24F67AE9244F24D6E153133F11F23811D7628B3140F1281229E43158511738B4B044C44232CF21D224ED5BA1166E784C3A2821C1B5554437115F4C3CCA8BA18AA25C
-:80E0800022291254422286944A2E4117C42AFC92821B811B549D892B958FA9D444EEC65784A9721284B24CAC82BFAF061711E3A1124552262D294AB46484F4416157144A14022993828AA12A2D122F186445889E8647188B425AE724F25287844A75C412D224BCC2B4447844612625ED28D8E2B644F664851942F21521382B52472827417C
-:80E1000086F122B496F29282AE822E1449A38A28AF88F183D61400840049018D139018489880091C081C081C22480114211C021211102101123011411321120150141222603240030020190800287DF2342F25E1C1F31C1AFF82D66DF22626ED6E6D17BFB5F59B198BD53FB4F5B3962F19D13258476F78FC82121F38F167276F43FA4CDC0E
-:80E180001F58788DFBA2CA2D6A2FA5F5561A2F81D4EEF19612FFE8F4B2BAEFDFFB7D751F2BFE77326F73F3A3E72F25F3A526AFD8F22121CFE6F22123FFAFF7E3E1AF49584CFF44FB2C34CF62F9EEA67BAADF82A2122AF294B46F92F6C8AF342F25E1F57718DABBD633F22236EFE4F666362F25B5A3F248863FB8F993B33F39D133F8938285
-:80E200006F79FC83133F1AF362367F73FEAFFD1F58F9CA5ABFBAF46BEB9FB6F44DCFAFA1F44F5F6F69FD8ECF6FC2FEEAAC1FD7F7F1E47F42F626277F7BFB63631F22F2EA2D4F46F26C2ECFF2FFE83C6AFE58F8CFCDF5CF7CCFCBFA6CEECFE6F327A2CFE3F236366F42FA34F4EFE3F6E4B3343F33F712542B114F22D2EDF2342E3F11721C59
-:80E28000FD6133373CAF64FCD3CB3F38DB22F81A1BAFB8F882D23F34FD53D32D866F41F1AF9D5F5FFEEC78CFCCFC49CBBFB4744EFA174FAD1E1F7CF8DC5FAFEAFAEAE84FDFEE78FF266277627F72FA73735F6AF6EA6D5F16F67C7ED7E29FEEFEE3F1AF8D7A4BF95F9C8FC6FF687AAFA8B8A2F82D382AF32624CFCFFB64FA2EAC343F36F61D
-:80E300003A766B136E229FB1F23E3E3F15F77D6D1F36F7FB7BAF24FC134B3D132D82BFB1711AFB16562F24FD72F23F76FF7674EFCEFDB4F69F9AF6ACEC8FA6F66A6AFFFDF51F4FBFF4F583C7EFE9F5AEEEAFCFED5DEC7EFF26267F43F3B6B42F26F62122AFDEF62525DFF7F73DDE9FADF96373BFBDFD8B8BFFEFFD3ABAAFAEFFAA1AEFEA05
-:80E38000F92E3E6F42F3A6A4CFEBFFACFF3E62B0240129012E1100482448144800244004004624A8248002421110219482422A082200908480883424822240A141744022480244824E24826F9708234884C12429411CC2248052221124112412141B4329B13114321510052E421441146D421441302286E41244541628273644144C621471
-:80E40000284E11821C1181A84A4E14D0427224880160A2BF160C4D531F417228F21124C3F61124A3D641B24AF18124AB941B68AB9453B84A39A4AF1439A4AF147B24D812FB24481CF9244A4E814FA2E415F2254AD6F1214A96C54ADE24ACF4D1244D421F497228F2912CC3F4916CE3F49124AF16D141B66A9961AF1419F54A9143B24A395C
-:80E48000A4AB9447822D944F8284F9244ABF29064D121AF628421FC1326C4CF262124C22F481242D841F48B64ABA85B24278A4F84A9143FA42B143D812B326D412F9A45287146D9A8F14FA254A837C216A492E438F5D42FA512C4DC21FC9E622F4912443B49136441B2987121D6C6E944CF648B14D288F147924B84A79B4384A43D242F916
-:80E500003648886F8AD5D407840000001200000000000000218041840800000000000000000000001200000014F0BE2D1033248591224352411126596820E482410A4A018180722618442164824142C52222C2588514022A042824111682B41882942849748944918291588C54824AE242A4814B214C281714F8C9192034814C6131244A73
-:80E58000912418124E34221110C4848667122782182CE19661C14149942811114D111516A44283C424212C3441594B24B2817142712132C1382722A0414825184792142141886018CE3922DF1C4532414714181B124465C1242A410C4B42266982214BC1595812282E122E1A2E4A9446743478246814116B823CD28431441D484922163849
-:80E60000415E86412CB381F411681CB4A8B434B4811234C2662B1152222C922416A4A186B631F8A441328D230028C50323A2411415C8121E64200141008D228410C415430148008594114448891202214223922114C01260221124C42521018C744845E84481841804488941F8DB61400241C4184C14264141081309115081885914189464
-:80E68000123246014251904154004944240280C2112845C1441828411028097042044604250218128903E763147315341224494291B9D97428C481A5413818846F88711412C1384CC451621C44C84164622D11CC22D441813A32122F24A1414D213526428251281586043E412E4146413112842B94241F8C63461ECC83221894E45F564C01
-:80E70000F2441130122011F1A2194D18143C48888811311257A1705C91441CB512E21403144724444088C415241E64182997424D221C1283D2415148372122903184194822418C38442A64464B18830389E122F896CE00614185D44292444119C42C81141649187884081388124824048D4148906139E15244058A0241204141A412108240
-:80E7800014241424E414A2411130422345F28912D08204984C62445F970884C02842976140194BF12C1210342827881054483414434118053562381B1816382C2508251254411242C024414F1629B1228881928250842C2152244249681441A012222CA412D0340A786B216014624508124604A24D282260C521484915489814124423C269
-:80E80000484B182A04124A820239A4829D3644121A562248412A042CE284323620324120921883989846388217238488EE5200109416A01218228902141C4441028A21C1282E14002811890828111222181691481800131202208241146294124862887014483A8190248054184483F26A8C60251E2445521457824C7218034E218594A1EF
-:80E88000178281248D5260C526CE1CC11694255486E9B8C4213E412E18286233734A82211A11B12461412F32A8244B182A84D228FE68122A21338243D44265C82B418748CB128D226283C4342E881F3304223028124E1216081F8112AC2121483486483494B011C421128112602210145824838101414684E1457226022216C412284D12DE
-:80E900005012304848101128928880A8418832811CB1AE480144200170443914004048012E48418411C01442448004004840881461C10015E28261114222C0412843D4260A2442272D90242C012B8441188118F0A5C9B0241428014120022634B580C1168605142282C1140089462102854161411CB2149218881684880880034301252458
-:80E98000088A8201801802822A311242328C0C9FED03162401814008142C041AC458414212207514011112205461100411271424200610981480624848302146420212229611048A0141C0122841897224F1758E1011D248342270234604492104118384624225922424524A4183228188C92318D02448240828841E442AC4844127848003
-:80EA00009882A0A18400C0181824822210081210F8CA691482242C01210019315110024293E11401004210050000421018110841C3014242884CC22480141425B51308184AD814036443420A2788416042FF694502450143B21112B4417244084531452293017044098C2442A442412226F42441212024A241481E844260411486C411500E
-:80EA800021301221234424F24214274C288261888CE941544848890829F8CBA80010088422A18022C1184C082912A881AB414167218284124B1840084CE22AA118882E824668A860282C28C242244AA121412081088828243028388048D124014C041F86051112211F842112012234209241001412411648021828440043C511C02150E161
-:80EB00002428390421008210042A8482C1442114402111265181A884C011D03C41C24AA04224240089142202004E3A2440828462244C0225829412282DC410D8489B124CE21401A904182D241235C4482E148C19211661C2C02441882824411084F22482846F1743D2256488103213AD22C314E86374D3B112D588F6184A8B11BB12E576EB
-:80EB80005CF65857E17B85214D24123C388270422468294D162F31FE2A274D828D438526EC8C7115D1223A2569BAC4F584442F27E34A55158C78C4D2487414348CBA7292728AF432118F44C8288F58A922BFB50227461E148D1E1FA155285312E2D1D513A232D11B954417D83CF451112914C1165CF4546918CBC4A0624D574B5216D297C4
-:80EC0000F9B8E8CF42A145A698164BC437313AD242A1581E611E522B238411EF21E82BAB2739692517121AC812181D72C55E8683F2344925FE83BC1416512723F328244B22541FD2B645B244514462145F14B142F45428882E3847887A86F1211423E242F3674445AB2297111F16F4286415618C4F88F1587416EC89C1E46D84AE22C7474F
-:80EC80002744C415F772224F58AC2423D422E113B484F982922F62D346F82CA44F8528E823F514944E22C9F88F8FA024004182002200E0222881081C28C28126C88215A88416088628C4184C12220490164261116B12118911B12818918811C39241811181D0480210C12148A0484447FD2447522B17BF91F33238855C773553467AF6E328
-:80ED0000618FA5FDA28BBFF8D92AF892821F1AFA91D27CFAC2A9DF9EF98DF88FC2E6CBF9F8CABF8AFA68781FB3F7476B6F98FAA82A2F96F4A9E4BEA8A5FD93D13F38F48383DFD1F23D3DDFD4F689833FBEFE62F9BFF5FD53137F9FE793F3791F7D939FB1F31A1A6B19EFC2F3FE566CF958184747CFC3F14A4A2FF947E156F4324EBF91F310
-:80ED80003A789FD151DC97B6EFC4F134347F7EF65FDBB7B3FFF4D7C7F89EAEFFF6F67B7F8FE6F992B8DFA4D7357326F4848CCFDEFDA1814BB21FB2F643E99F9DFFB5BADF9FFFB9D9CFCDD88AF19FD43F38FCDF965F78F84746FFF4F49F923FFFFD67FFBFB1FD1D1E3FDBFBA1B99FBDFF1F5E1F38D966F19A986F43FBECDE6F23FB5E184FF1
-:80EE000041F4FCFDEFC7F77F67345D276F61F73B3BCFE3F32C2E5772DF32D6D7F121357F5EF749BD1F96F25933AFACF54AD87F72F16A361FFDF1799337B67D712F4AFE38542E585F62F266E6EF61F12B619F19FAF8ECCFFBFFAAEFEFEBFB8A8E1FA9F9D5955F49FD11217BBBDF74F2572E7F33F67E723F7DFD1BDA3F5DB73AF3D1B3FF9500
-:80EE8000F891971AF99692AFE3BA7BFD189C8B512F4BE987F58CDEEF4149F14167AF61F23F3FEFE7F33FBFFFF2F26F477FD6F361747F7BF15BFD9F9BFA551BEFCDF57EDC5F5DFF59164FFCF17CD37F9CFF4F796F4FFD78744FFEFCEFCF7F77F67F37FF5FF7FDFD9F4EFEF7EFAF3FFCFEFECF6CFD96DE1F1CFCB4F45F58F8DE9CDF75F3D65B
-:80EF0000BE3F7EF8BEB7FFDDFD14E63F1FFF68719FBDF957141F59F83C1CCFE9F936B4CFC7FC3FBEEFC3F7B4B4CFFAFAECBEDF7D03650122D02201411668121A04001E48341E48441A041A4424C12440044E242901498192149084800921901290941A7424A2492282204924C824128522514800B0A90A581221501C190268450281681CD5
-:80EF800011018481112524418124041C884401D0826414261888014B528269A128C04424282120042B14001022C82580312488F0DEEFD022F511248D131F41B248F11124A3D441B24AD141B24AB911B24A19F54A9443F24A9143F24A915782AD914F83D418F9A44A8D814FA27418F1245A96F1224A96D5A4E449D2A4F591244F22F49124EF
-:80F00000AF22F9912C8B941FC9B26AF8812CEF26D1C1B24AF91128AF245985AB944782AF647B24B842FB244829F9A448984FAAF48881D0A2D541C6531D288B1413714A7211344A8E24AF4439918F443A858F443BA4AF1439A42F1439A52D916B4B1CB98585F125C21AC85216F123C816D4B4EC48D2B4F1912C4F2294412F22F911446AF99D
-:80F0800011246A58416F2659412F44F911244EB259B24239142F641AB442FBA44829F3B648886F28F543860082004018080060418002240000000000000000420084800400000000000000000025017F2905124445911681122A341813B411240420D4483452113D842413312830448A0411414232184523E38124A4214A913211A641712D
-:80F1000041429A28451123283512144CC1286E12241AF29822220082AD4B10A5182D18604484455B2118212C2164A58504148C015943C4111A0464248D4616D31441B8888482342489724114146128442D4243A21259AC414D821971284168218821E04182483414A674947128F65DE59011437D11887148042E48873124144622E4C27576
-:80F18000421C3C138731446C91119D124242D606C63813148393182C92214F8112B82C9544271286B183764251348C32A4471165F184111D7A366821648C827622A22147822F61E2427814E1E1D8A40B41502644608145034E111A840100424830811C128422410410479456804C8525A442111812404482C6121D4842822100119880315E
-:80F20000148892008822FFD3062B4200121430244C128864228CD41201852301801104114A42280428C0254152220040428401002C8102828140224804230444828D348440E8E706501237C151C46B43943D481644138858281841C06D1E484B242F31E2CC02844D21176241511E2C1A74223321272142472219C221145459D824F1214240
-:80F280004D219741491243A14A23944989D182D828E244B258622260426E188AF263682004941D14158C7421CA44161C518227888501E44081B144B11252841448471214215CC2141A42E331221382129321546048C04112E343444108A0486450284362C388200222F9032D22159214006913C4292024823412234121F12844832442B5E8
-:80F30000420A8912B844420483724196244220448442021615711462224D21112C2248E1266824918331882B2442482CE2C152842E588CF86199D0E1013028281149D49441286483412DB20016B418C442D0265224421568A4284B184CB444611244C04415223224204124A32180483464126922C2C2C932822AC14484812582C18A4614E2
-:80F38000FCF582809228414684941422283241824B14224449C168D01401D0282102828119238202E01214B82124583812283048422E184A618284814911121201004143E8C442482228D4DB4601442116321584400212C02170513841344918782448088816444124141812261482114484B141021C1102410021C219548100465822882F
-:80F400008002A22A9418F0CC561447334912C63C68169144452963448B813C21984916745894521245DAA442247611FC814247821C944C2F655214422531482C64481721138483912A4A32289A942C478489D9127222B9821493C21622183CA46B24A2688D4446F81CC50080046D11C4221A122A2182C61243611413D248D885942290188F
-:80F480008240084B82288012A42449C124224CA2125014121816043022484A01284558282246048184A961889841BFC14742341411162844A841260817A48B428444A4C028224D6880A214221C01240025742312B811C22512811249E68201401444C4A8A66441252A8164818400966688122A21A412241F340C1A048421168C4228C118E7
-:80F500008A121141B884619150848A111218084285312485812808184281C02222002C24B14212823252182324011288671D2242301483162602F07C7550241190283014508149C644807242144A442402284411489044C0261C91488014846646480041844944682342472146280310120200002002888CFC596824002844401142140211
-:80F580001844184E21403152421210422862221C810430542C4A4854124485A48200C086404E4804422648480410A2822E444480289224471CB0818101144E1442139122844C91414681614184228564218001494344964444688134168204241258425024842A6185202843488144248CC124244AA214228100F01E73005113C1227022DA
-:80F600000212141992122301002D12604247841506137442296482314B811F218A9141322D124100418081014C3212482F28040040A824239422008E4888800C3F2C050041808221424702284C88048008211128CE1480312111888014484C048CC1482413011400A0280048242825415448104844084634148941F81EDD502142286181AD
-:80F680004162E01184411812839424444A0143121811028189341868004420042124208253841784461841444882242414B22228B44401103212A2C12D241BCAC048B01404704201214C12021E64241C129212241028912412A302184888904822141AD818929121844CC1C828008C8412C12484448428248428252A0A421E4829C4C25F70
-:80F70000F44C11F184145F43923249E21185D518B227E41A26F1612147345E511A52148B561A63C147838BD4CB434D48557129283C428C9C25E78217C22662418D1832218499F91A14A33D3CA71C4F86F4E281EB42A7A424A572827C287846022E88EF8A6AE62F81ACB1E88D667F5B036F2565143C51281E524634426F21C1223B1437A6F8
-:80F780001AED413587E5E643D226A24449427116651417116E244D662D111B6346F152195E454E42CF14D584F542C56D5A431F2431444F2256224D6A2F2893644C13B168724528D456A6224C35864E56A84F423284E67462E8D7414235138457C287C47FA2F2312A17C28FD57114DE1857A22558E8942D9A167CA67E6AD168D32182B368CE
-:80F80000D3A87442D1CD9614A76B8D428E326F11E341FA2A2236021D643E3426CE28D44E7C36F418848FE161251AB412A441CF21E82DC948AF26E26522B118A4146E488F81B184F84E9900650100145024128880081C081C081C88841801110090114C12211825382482433281181318348149119184135124112211000000002840F49B6A
-:80F880009CB0417414F62A2AED4E7F74F46634FFF6F74A4AEFC5F4D91BEF1FF7692AAFCBF988198F88F12F2FAF8EFFAC3C5FDAF3647EBF3BFD2C145FD1F1374F7D47CFF8F51C1F8D8A3FBAF8242EFFF1FA6B8A2F89F9942D5F59FBC4E44F48F8992B5F78FCABC89FA3E39EFAE93B3D322B35FFB551B92F86F41B188F19F33C34C4EF25B573
-:80F9000056FD1C14EFE2F15C3C1E1C4ECABFA44BF241511FF5F43B1BED6C1F16F67777FFF6F64B5ABFC4F7F97BBF5FF7EBEAAFEC7F8EFB8E2AAFE8FBEFB9C7CE7F5AF26C7EEF6BFD4E741AF36D7F35FFA6FECFE2D2CCFCF48E6FCFFF34F62DF74FC9FBD46EDD2D55F5F5F5CFE8F21153B7C25F6AFA6A4D5FFAF943445F77E365D131D4DB92
-:80F98000F211188F3DFB7E3625FE1A126F89F9FCB46F62F1BE9C7E1C6FEBDB1847F256466F61552AEF63F253473FD7F77F75EF62F37F5CFF55FD5B7FBFBCFE5A71FF34DDAAF1BAA2AF83F32D954FA6F5A6BA3F92F7261C5FD4F5255F7F72F626C7AFB7F56666FFF7F5E4E67F73F6F647EFEDB472FE21291F54F69454CFE1EA31F15E1DCF89
-:80FA0000E3F3C784CF7EF284876F46F3485C3F33F25361DD94CFDDF514546E4EEF2AFB56D2EFC3F35E5CEFCDEFC9F9E4DCE7F4241F74F51B57A7F2EFE4F263633FF7F76F6FFFE2F16A7EBF77FF7B69BFB5F5CE99FFB5F93E1ABF33F3FAF8DF77FD7E7EFFBBFB37797FD7F73939DFF67647F677C7FFF7F577777F7FF87F7FFFB3F7BA7E4FDC
-:80FA80006BF37CFE6FC6F6E4E44F4BD7F5FA5813AF5EF8BCB6BF45F5A4A7AFD4F47436BFB5E523B65EF445D48FFFFD34762FE6F42E326FAFFDFABC2F41F1BE3CFE2ECFCEFF235110024B125026E0322151141A64221648A14124122C22912811107148048314534839614479A12418102284011880C1484B121044088C041A0484289AC44A
-:80FB00002248812004CF32054F381111A8218168C71640A22142101854325598285B42207242041C32252002484008214C62A24426415434282641543286EC3241641212A523784A012504A1B042332498479817C3D026F41124A7321F4132681F41724EF31124AB161D24AB9419B24A19F54A9543F24A9143F242B157822F14F925481C2E
-:80FB8000F9244A1CFA254A16F1255A96F5254A96F5244A9E244FA2F491244D421F49D22CF19124E3F49124EB141F49F64E921D64AB9619F24A9251AB9443B24A39242B94478229F92448B84FA2F4AEECD0A2F41164AF32E4C17268F1112CA7341FC1326A1D2CAF44D181F24A348CF24A1543F24A1147822F14F33548271473D312D8A4C543
-:80FC0000B15FA26C111D5A1E255FA264414F32E454F2241A17814D421996541F41324E1F41921E1F49D62EF811648F465941AF24BB11F2489443B34228F34294B6D842F12648B86FA2F5E7CD00C04400100800000000000000004400000000002608481400840000000000000000B0A304212126413422160977811415B842E18412486452
-:80FC80003984604438166411224581582447121454E022C44941216C88420241384D522651221E274372B294229C92411AC854E961441285341C448B248D144AF2251660578E32C4285D4827442FD284C24C4CC688141A7413C2445582658144224219C148442848244A1362411E268C859222181E451812A1224D484398481A08D601926C
-:80FD0000452A68281AD82CAA292C32A84414E4EFBC4C725164245D28281D6A59C44C2D11CC247494E8126483616F19541658874443A2121F2114D181B41458244F1844F12512D024C2151FC1044CBA189251809148484C52426D319E244B18437F21B8B1B48CF19642863CD243399C8D368E224F8284A125277F60221A024461167822C154
-:80FD80002C141D2C234428341140182281110432448022022904588B242582522250241245A2214F22D18184C84825825212000012442698225048504845FA46E82002182841C4A02121E0342101004144530320548470212814614419042782004002214003254104302A2014E114118108211246048903002FC204122742502A1228A3E3
-:80FE0000594245712E03621B811D1C8A553287182145311B144A3359D062422A41584317215829624243E312F914211622C1144C84F4211479E841F4768833A31225C212996446A89012C1C02144CCF4A15C60234118250826388A2810915220188441534814419321E442C149284552A14C4458418C110244164693241215429641435462
-:80FE80004117488965691B41381924914349240A41448342014D48BF390E80022CC21444182D1654A742112B251C91192C4CD4213834112111838451382A04124643621256822282A21A190123214104322562628C2642231193882C0218234528214204FF5E02458164424052612451102418E421024D1241249694122A41528449E1A48E
-:80FF000032A44F186161122F14E12102121D184B2810885414145684E124014815126424002B6143481808C11B212440F8767B8094123094464408241A021618A424182128827028054D22429160848A034C14240430413025448C0429C228402572818491241286988426086148C41289444F44F6D6E8A012449991888902C0189189C1FD
-:80FF8000211994828C18483116830443140240440210087024D848B682128291214C2199148088C21912609111905211202832822145E11208684753C044618CC1188724D12512F91221841F88C2431287214D1214882D8643614230445548D82A44C11256DC14054342BC629926194181D141B817128CC9542F12614C90291C718AB24442
+:800880003AA3330000008F8CFCC8C89F9FFFF9F91F13F331314F44F444441F17F771714AA4448F88F888888F8FFFF8F87AA7774AA4444AA4448F8FFFF8F88F8FFFF8F88F8FFFF8F80000000000000000000000000000000000008F8FFFF8F88F8DFDD8D800008001000000000000000000001400000014000000000000000000000000F07D
+:80090000ECE8800400000000000000000000000000000000000000000000000000000000E0EB040000000000000000000000000000000000000000000000000000000000F04FFE80040018000000000000000000004001000040010000000000000000000000003F8105000000000000000000000000000000000000000000000000000030
+:80098000000000F04FFE800200400100800414800280041480020000800280040000214840010080041400108204000021BF26050000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F481800280000000021000000210014CD
+:800A0000001002400100000080020000882800008088020000EFE40F0080840100002001000000000000402101000014000000140000001400000000007028034818148002800414182810820416012810A21140012810A2414001002B11484001280048408188022148008828108204F05C658084018002000000100200001002400100D7
+:800A800021001400000000280000808802000088280000F04EFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000001002000000000028000000000000880000002D5F000020020000002400000024000000200180010000000000008028020000200200006F6F0F0000009E
+:800B0000000000000000000000002001000000000000000000000000000000BF240F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000080010000008002000020020000820000009F320B000000000000240000000000000000000000000000000082000000000000F00C
+:800B8000D3DF00002002000000000000400200000021000000000000000000000000000000F03937000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000020020000EF1C040000180000000000001002000000001002000000000000000000FF
+:800C000000000000002FB5020000000020020042000048000000000040022200000000000000000000000000D90A000018000000000000240000000000100200000000000000000000000000004F160700000000800200480000480000000000400222000000000000000000000000006FBB0E00000000200100000020110100000080015F
+:800C800000000019010000000000400100002088028F21460100000000000000000000000000190200800800000000200200000000000000BFB604000012208104001021080000148001000000002800000020011200212800000000002002FDA1800228282800200228230118901222801222052A24280442586A818122011824180020BD
+:800D0000021722482004222004292802800400F0E6BA80022228388081040018800118002220052A0400481A842181A21220410200A012B011220420028044022200002002DF750600000000226022402148022840120112202804004A02000080010000244082042800200800480000DD8D000040012200000000000000200400280000A2
+:800D8000222022840822004800000000248002000000CF7D052220238201190128001210020000000020044820242306800800008880028880220400480020244221047FEE0228A012280036010000000000000000480080A42142002A08000000008880820400420080840200EFD40E0000190100220012100200000080040068002022EA
+:800E000002802408282088240200000010220200402104FF790718002820321100126021200200420022008A012002000022124848181248000000202284C821202C0442408204D7A200808104002219021420210282C20020E9282424A225002A88022002221200808404A828000000288002222442248074B50600002A012001A0812AFC
+:800E80004402800100008022040048200180082100822021815422E800481002002088020028FFAD050018282A2122A121260196C1322C0120210C002A28A824AA840620868201202A132284210948122A0C4200284829480162804A028084664F800148004001200148002008480018480000A800002200520000184082B222088004007F
+:800F00008088042A240440D1A70328200228601228002800C081002022220200202902422002282002004224188A23228442020066820400480048F08F8800424800110028283022241128124002248820028200828004482502212100008221802208102208002002800448DF42070020022200280000821A84A841A041202102004288F7
+:800F80008004000018A012A01228481225220880040026022820022860127B6500282004480000800428C042822200000020022129A882A880088829B84288018022288802000028232408000010F237E980022008110000001081020022008004002200424200002200001082182204102204002814220000ADA60000228850210022280B
+:801000000028130800800422000088000042210024802204292802001002284282220042482123028F680600002C020024000038002005881A028008290810120222702202400224120000008822009082000020048FF303A024008002280080028200200222480088822200202224228222022228222240222408000080020020826612BF
+:8010800029F49F25008004008004480028286028822440021002184888002121294881882102291C023280020000280028200400211427E60068A02490212220022CA22210A141421AEC26A1412232008824AA0824C82B26C8809A222BB1B022ABA138321A98122C24280C4221A0646E228A8A022A84226212682FA80228220010022A82E9
+:80110000A2622004A0228A38822823C2222B1C00A0883826825822486229062C2872820227222C044AE223A2AA2A0A8008C22229142222A424003C26F493B120222422A2226651112904212260228E911F18682100284A88A2226882A04428206428286E82272222242AC24220C6222F2AA188212924425222224082280228C0424A26140B
+:80118000F2911C000000230623042304230221A014A01480830448C0420080A128202C222822292201200642A084A08480082C02000000423FDE022AA226282AA2641F34F463622F2492622E622D224E42223F19F983A32B81DEC22B663E322BDDEA2804CEC22F2C3C222E2225F212122F21B522D822FC82A227282F29ABA82B1D2BB3AED3
+:80120000E22F2DBDB2B882AEEA2BECA8CEC22F2CAC8A4A8CAE44006E412E416E626A8656121F8B0B2AA24E282AC22237323F16A6242E622F22F642622C82F283813F3DBDD2EC29B832E127B732612623A4442BD5CAEC2ABB2242F2D2D22F29BF62F823C32F287AA2F31232B0A2F622822F2BFBC2E22F2CFF82722BC82BEE6AEE2858222BCE
+:8012800064884AFC62622B8AA0466AA4222B662A26F4F499A0222A86A2222CD213F26121682CB26282B262C4221F31F9C1C22F2CFD82822F23F322222F24B63295224AA498826AEE2252222F28E82ABC22F482632B282DA22D221AB382B422EA2AFA92922F2FBC82AAAE2BA8CAC682259222CAE428E42CACAAA0462E616AB662A66248EF47
+:8013000042072AA26A282A82F261633F3692622AE226B242B62242F281831F39F982922F28F862622F27F722222B532942A2D486F272E22B22242F24F422622B462F3AF682223F22DA22F2B2B22B2A2F23FBB2B22F2EFEB2B22F29BBC2B862AE2A2CF8C2C22B4482CAF4626223021B466AA6666AA6624E418FFB0E220040023440022400F4
+:80138000402108802208000021100221001002212002880080080000000011200428F0DDD30020029021220028220050128200004A22A224202402002A240428222002002E82481868238244820448248A84024A22828224045D4A80B51122B21122B611326219B26291212B9619B24239112B943AF442913AF442913AD412AB421CE92295
+:80140000E414E82264112E42D6E122EC1DE222AC292EC21B292ED21B292CB991A2161B2927261B282396612B8419B24218F142822AB4422AB2422A92822AA4842E424F5603481B61481321B411364219B64291412F2499414EB213C9A23AC4833AC4831AC48129D412E92AE514E922E811E82244A1D216D1326C112C3C11D81B4129B991C5
+:80148000B64231912B841B28421B282B841B282BA413B8422AB24228B2422892822B42882D424FC50B2088040000280000000000001002290188200400140000800100000000000000200814F044772048C1219021202184028228200C008081054A02284200112C04424212C82242A0219012426022280022201882842882A4828008223C
+:801500008F9A06128A83B1116221184A8252219A8432C2421824138402282302183041A622A6422322E11401122602821A622814881904F888200C2C5C218064182A240848282214F08E958031C1141E411621A1244819826122622A84014222002341A21220A668AAA142192A715281345180A482684A98122CB811041A849A2248A02422
+:80158000268388A4842AA482484824A214229B9C001AA2122826021828248A8428088A44120180A3428004119042102204001A92828001260180A482008220180221148800A22800B017048002400122200414408204112492002820944100000052218200000020818146820400C082800288002200CFB3041B24A082408202002110C29C
+:801600004182195122826026800418201402212846023220E22138618E221362222C8A440200304280081082C622202404F0921D00228840220200400300342488A042214880C44100248002521A02281829E22812018221A0242442304280881802222602424800CFED08130628100122C04200C0412B48181190920028800142210060EF
+:8016800024102208821904222C2282851102000000902242820022009FD90E8001104121430118113982288A2102204122138205E8B828422738146014482129842822C1414022228422C42100214A42220200402204CFDD0B14481A12011280A124800220324182200542904280028E121A2402121B84142A013828002AA424328A0421B3
+:80170000003420D422222A84044240022AE8210E281001182240120112482142E02401211322328188224221001800122820081229110120088024028004002008004A0AF083CF40818103E01281426212181A5232A0481B4116021A3421623B82481A4482C22238183C9811190924B012A41223238122C4124A8284A4241C123142244226
+:801780002A98228A0442A0A420F863E120021C14C1118031114240818608A04A2480011882282AA48420E4220420A4425A828882081411228A8208230200244824200400004226F1AB92001A0400004001242414110014181180A1481D8240012902E021A8842180288128A8824288D02209884824220028002124004822F0387C200418BB
+:801800000018108221180220B8238404140088004880048A248104881212104211412126218492228A02008A2404232408006028828FD40D004840022424003440022214208E210832281400100221908360140080820A00824022440246020021100222C041F7490011004A82364220044A812404004A0100809812A01822C82482002094
+:8018800048228824B4810413280AA04A8008C8800888282908292C88027FEA06404101803212188081010025821182238181E51214118284840223218184A484529212001124922303242480042168002440026824F09EA20012000040022140022811001428001002181A02A048100218502200200400230280028002210000109242F0F9
+:801900007F2220044021080000800814484A8801000021981800002008004800482002002004292802800880028200884F6E0D200842222113018001200220611420828158121846015022400200480012005021800421214A825422001002000014429FF70C00190480015812482100290631001488002B42828A818188044800142024F8
+:8019800034214820242622840480228402424262228004234CF1BB7780F4914190418828342420092423826434102324011E421F16AA284A988178282724296C244A88A4C84E12CA295411A219F881622998422722AA32E2A0442964242A56224E422A5222908268AE214AF4CFFF008AD111014827232B4129D112D422C5422B842C7482EC
+:801A0000014AA5141CE312A391806127230966A242C886B21245D212A8141B41A051A8284826A17A5E22682424AA9682C223288824D822A42A602842142B88DF2E0C4200E022A214181AA411B013011415B223F613811E411B8311828AA9481D111D418A245122A011882B488212882F219482481D8166A18416A292882BC44827242E22BD
+:801A80002682248418220825A2442AE8240C7F3305C011001166126124132134114A082C088812881200281100009012008001002240012C01002E8280088880082C082C0A4200FF4201CA8411011F147413914119F44253373C2F25FDC3C2EE8139EC2CFAC2C33B986AC6119AE92DFD91111B1F2F1DEC1CAC564A14B2D2CD822F28B8C112
+:801B0000A4C93CACD97ABE41A8A21BE24AEC2BADC4E82BA2AE62CA84A2CECAA46C2CB4C2AC4A23F82221AEA28AA8CC2B8CBF4F044AF4415180F461611F3596431D422F3575C3D33359232F14D231FCC2C13F34F413111B8A1F1BA918DAFDF2F1DE911F1CFD81816AAC664EC2DEC24EC22F28FC82C19AE924EC29BD32FF81C18EA11BA81B6D
+:801B8000EC2BCB2BC48ABCA2BAA232E2EAAAEC2B4C2B4C8EC22F2CAC6A23F821222BEE2BC8CAACCC5FAC094A84951115012F36F612132B153B141F38F4139335E214F283422F24FC52532D11BAEB18A999DAFDC2C1BAB9C1BDC1ACC650222F29E928F88282CE419AEC29ADD9DABDA1AEAA1BAAEEC12F2BB9C2AEA8AAFA22A22B448A8AA6D7
+:801C0000C44AA4884AB42238222B88B062A4CCCAF891C2A04C1D511D1117146AE631F3121146F253122F29D522F9C3C227141F38F442C13F3CFC131113F231119AA9DDFEF1BEB11F1CFCC1416AA466CE42DEC2DED22F28BC82AC99CEC29ED22BD91F1AEA18BA81FAE1E12B8B2BDD2B882B8A2B8223A6262BCC4AEC2454222F2CBC22FA22CE
+:801C8000222F28B842A4EACAAC4C2F180A00000000200140021001802201001100008009008880012E8120022E92004800804402002C020028F06F530011181122135122112C1141021440A1412521C12112881B4310A1842210022142292884219842112213081022488262242824004002004282A0484F2B0C481B211CB11162261B6114
+:801D000027241B612B141B612F2499612F2499412F1429F3429113F342B1222D911B421CEB22C4812E421E212F2264192F2265192DC2DAC2521B2D2D421B2926B39162341B292B141B2827261B282B861B682B8413B84228FA4282A22F2428BA43A8424AE822F44857808486B511021B41211986B18196821B68B81B482F143BA14E911BE7
+:801D8000482B94222D913B4A4E113F2281C8D25E812662142A68113CEC1182BC11C2C21AE632B811C48319968219B66238816213B842328128AA14A24A42A2302288272277FA008248000000002008000000000000800200000000000040010000000000004001AFA802821C812102290119C212800212484219A481582B42222111421733
+:801E0000244220112298124288222071220200126026132282622480849842230888A042006022630B192208141A12C1312121CE13869221822486E121B221446111428AA6249A8268222683262282867A7282B822DC1224A43827121991814E138842311429E21208108154224632612C08A2148AF43799802228E1128482012712237191
+:801E8000C2239A21B22413C4723A64251E414AF2824214929E412B42866225222CA2342CB8C1C1A2822F34612462C0111961358A2494232683E61228267843820824226E822488142E829F9C07141301C012112E11001224004888111C188102282AA4240033820282A02426022A04229227128008269221002400004825A2481304200282
+:801F000048378C0012A02180848104001100002819842293324888114248421870212284012064124021480218280062828034422200208A22A824822FC40F42A012A02120221191122F22E42124C11182334582C28211481911011130222862482622A44212228223AA28B01288B682167242A24AB04212824882084E822842C22200EFC1
+:801F800089024280022024220525021140416215242290117840114121A442186862484248182A0482190227282AB4A214022B82686E82806C2422802882A848884888FF7B0D2021A1212A01121081E12422951212882032412A782202138508482420021123921222008E232888821880C12248421002108208482162222228B0D608122E
+:802000004A228202B0410222488223A2182212800813021A9422C042482AA51438888042214112A13420818494412A642214682246212808258218022C24420248DF6F0F1148002822902142218014A216481E813041822A04238C01808102002D81271424222A2108800C98822048222422448202002820C8422822DFFB0E422011814408
+:802080000224148001400310828144A228C0211C82023448B0120200003022282222104221021042820442488880028848F0D91C6014001C82C42248D012268469241A48834491824E111C869472821B121F2482223621628822399A422490232A812282021682D421B28122A4421B242C8C08482B84882820822C023F320F18282A01228F
+:8021000060121942022428A0411892008822882A042084A88529012901202122C1C2802128B681A482002825028054224002A0422908422AF4BC830014001C024A62223C8204922C01181BA12F12241202622818A042E011843122000026022304146022282442A0423424404242022B28248848481C84F2F9DD00181921051A1221048A39
+:802180008201A01C210082228880613282828642224802121218200211802225848188182132411121000014002908B0A904001081820425214401298404501210022212482228E01284A8162436C22248209141142A38131A0C124210823841281304420030429022286621F4FC5180010018110038C2218221CA2222088A048220012D0D
+:80220000C100402181082AC82188122C88810424822122CA0280080028108282820421F0E1D4203411111110611211195121004A21112221042082041242882A24A28480828124442201380018822D31231C033042212B8421422322084A1802006F9A0600800122C042241819052428406212243212281CD412041B52184643922190429C
+:80228000400114291401004621C42148132414A12428422A08152204804882F8F4CE0000400112000000280000001022280182000060118004002A2482820200220000100200210021F0E95C00000018122A012240022083222102208102280098221200A04120A483292881812401800200200CC2208282044214425BD600800418421059
+:80230000021814482228422304290412409142141816A1821420C8422A68121C090048C80011108108A88002001011011012F289C8001180041B141AD611022F387B41818CB512A831BA7C21E1240E2AA84416A1222BAA421BCB1D611EC1218224AAA5148E114E43A2171914D218882866B2A3BC81021F3416221CE2242AA288114682A46F
+:802380004426A164DFD60180C1111813E31382A1442F2127961227212723CA24D421B34224B22221E823023C7C41C181185233EC13D32222B611A2612E821B113DC22D9238186AF4D3221631814E214A04A226830C82242823728221824A01675BA04116117111C131481732272317121B4112C2422C712252122C3382281A83B161B751F4
+:80240000A141AAE614F222122E32243AB812B54228A24123A2142A32112AEE21A2523F2495E2E012F8614329B84154224E422B422127224E62E82334824E4229F818F30018C011A01420062E834888C082801A8108888038114A02100120882128223C22421C082A88642200482E81E0120888C082800A3C0A4A0A4AFAE221A0551F15F179
+:8024800011111AB571BF71A4443F36F443713BD42F29F982522BD72BD52BF92F2DB562FD42822BB9A22EE26AE71AF852211F18EC2EF731332EE117383EB22F2ABEF1A62B7EB31F3BE623FAF293211AA5733F1AFA6162373C3B88CAE82EFEE3A12F2CF4C2822B6C2BAE8AB8A2B8C1BCE2EA2AAAAEAAF6A2A14FAC0E5AF551511F11B111B576
+:80250000F1B1717651F363633B346ED21F38F982122B7D5EC29ED23F3DF7E2432F24BC92A91AFAB563B7B1FE21711F14E436FE72623F33FE33933EB22F2EFFF2613AAAA23F13FA71E33F3A5D13587AF3F3B31F35F5C1C33F1CBC81F861E32F3EFEE3E32BCC2BCC2F2EAEA22F2ABA43FCE2E32ABAE2AEEA6AF2963DA0551F11D511E111B1CA
+:8025800071B371E524F273433F15B7C3B7D2E524B952B7D2F592522F27FD63532F2CB492A3B16AB6E2EF12E514F7E1416EE21F33E112F61133BE322F25FC72E13AE62FF4B1531F33FAB2F19AA9997AF763213F26F7E3E33BCC1F1CE826BCE2FE42622F2CBC42B4E2BE22BAA2A8C62BEE2BE22BAE2AA6623FFC05B011D511F141111B131B5D
+:80260000771F31F373633B353F3EF743D32F24BD52F592522F21FD73F32F36F4C2422B912AAB771F1EFF31711F12F661416E633F33F6B3633F33E32BF3F2722BE53AE62FF473D31F37FEA2A23F1BAB9C7A7373F373631F3EFEC3C11BA81F36F4E2E33F3CF6C2C22B4C2F2EBE22F2A2A22B662F2C9C42CAAC484E411FB703184001180012B3
+:802680000000A041A0412400000000201401181002188001008880896412200224000010012800F0D7DA00121811181B21262241B111122211022132250128324213A21411A81B42F022122022B122042612E12235112A082A91412724809841241926044210022982B442022848DF520B581B21181B216E111B212F1691612F36B111F62F
+:8027000042911B212F2419B14239212F142BF242B1222D911B434EB12E421CFA214216F1225296F1224296E122A5292E421B2D2D421B292E831B296E921B6927241B282396612F3698212F1418F14282222F2428F242A2222BA42AA4A42E429FEE0718198681A214B042012B141B68981B684A3A814A3BA12D91AAF44281A22D913B4A8842
+:802780002D521CF821521AA84296C1C286E1326C1D2A38912EC21A64321924369123368162112F1618E1149A212B84B0420A2BA490A221A82F28F463860082000080010000000000000000002008000000000000800400000000000014F0FB7D80022222001832121AE418061641C1811414C22CA2214AA142A04200122B141828186242C3
+:802800005812182C31812142C0124862802A242434C222628268000082FF5B07189641C1118682374242422722182C052C096A99823393112422181A8298C2290226E2288491221AC8122AB8216414209221112242248008211411002113242868181B244EA12AD4790922CE11E012013622A524182722B21AE41261398621CF812F19E4C5
+:8028800022C13216A21420DD222C8AB13224A52129B181A3414A2194115225912200468224842892422E4130C22420A886C0826226817A520B1860126028482021A4414601210011212214A024223822004022188282042B821B2148A0821146818201230288001904224AC241204811A184482F8E0818122211B01144120128002480B8DE
+:802900001144032C08460120829841B02244D12305226022122200282583C2124880346200488004222922820A42F024FA30611C22A112262362132872A04A29A449113C2182C38226E1220C56814241C2224A422381622720242126B823B81342818BEC1284A8242186A1483424247022A248C84242882828CFD2064212121B2126812443
+:802980001102209A4288311F21A8522C8248E2289441460114881462341592212602422CA2428E221B2839012868588A04422986044824482848E82AA44A88009FF1053691212840B211322119A2432842A01400111601338A02122222242A54222A84A1412325021212002819F28213823C024E2230818234100225622A00004A22F276E1
+:802A0000D840E112A1212200484E22121C21021921028840A121002381042986A1854A8201321C02A84002A048182C810421008084C46220021342028602283F764F010048A042000000A0C21819138214811232422828E018613230812B42334C21011C8168121448238404C0213582220622A04A00A024482C2402FF45066A01111CC1F8
+:802A8000218082B121044262211100903282118038114882218001188004258282018023328228802484181102148088724102A82220BC454BA1341422408122E421E4138481829212C62191A1243691911D2220C571422A5812199572822B165E812A847182B221211843C1327218422413C641882221421C34222828484AA2488220F637
+:802B0000BB8B40A1211CB51122822482021142481400122148280082602242800216418202200218282048A2482302243022192404A04888C02290222A846218FF860C281828124240512190212E1118211D821C9A123012221211480014002262C0620024803422281420A948204402240024D0220426022002289F210142424800A02468
+:802B80002331412388080012601586C1118023A841202A818121818AC13220A24100248008002522462204426A288622049022A08229F4454C001382C6412A8182820318200123011A42C2210021121CB452020088820020282302208141018002484280440288200222808C4271F603008002198101282123A44AC22084848831822A811B
+:802C000028124201122200002862001A0868221A982120880280022820840A23044810023F1D06224A0212001100463221211882138888A32421192862120019022420020010228406A0252B422AC88348822130421002002190420048B06F051A0458284222241D221400222382821283081A18622590A3C8420000222812251121022153
+:802C8000483100800280220848902280842208502242EF850A2001002C04A0141C082008004260120010020000000012882440820480840580022880080020042D821022F8BFE800860114122024044800103212221148201281241342828224022140811273120258208482052DC2402242C2828248244A0810014AC8C128CF810300196C
+:802D00000519E2140120A2128223081E6140912200142B84161162128A012A08128081488101322C820C331131112006422084928200261221042221827F670748AA84E31301F0632125911117263531B28AF181C13F12B171A2382F3C33311B1296F3A1614E511712130A4E122A22B12282532229E22131422CA5262F213A222F1C3911F2
+:802D80001F29E824A8462F2684D2222EA44428296422297421F242A2001C08FF5D097AE21C2381A2241B53121B322D6229EE22A484482CA1C81CF833C23A84F212A31B224AD1211282BA2281026A0A621B21241F1222B3B2622180A123AE8148822308232494C227282BCC6223E426A22414298A64122BC23B990013611213E413E514C20A
+:802E0000421E4266E119A1A92CF3228223E12192124611F18291B0422DA1834ACF4112228A818128A1923A3C822C271422F25163114AE714B122C622282E42222488242CAAE89042482CA4AECE62CAE27A05800122D0120126224101421246011001001130814215022C042C248824B822252822BC222178220114004880048A04482848E8
+:802E800024C023800228DFAF041A314115B131F311933B311B113B223B663B8E19A8A9AAFC835239A3FE3F2BEB2BB713E129FB82A322A6F1B2C22F3EAC322E622F24F652B22CACCA3B6EEAEF1FAFBA6AA3A62EA21BE3CAA299BA1BC2622F22F242222F2ABA62E424F882C22E222BEA2B223B662BAA2F22A2A2EABE62FED8DEA0111B661D39
+:802F0000211B511F3FB713A7311D112F27F7D2D32BFFCEE22F28DE32F542423E332F1FFFF2733F32F212323F1BBB22F2D1112E423F3AEA26BF22E426FE52922EE2AAFCE2632E322B33AAEF2AFF22E22EA21F2AEA14FAF1F11BBA25F2E2E22F22B262F2A2E229F642822F24FA62222B266AB243B2E1BAA2BA22E21EAEE63F26065AF5214173
+:802F800015F131311D111F25B313B523B333B3E3B841ACFC9AFB431239A1FF3F2FED2BBDB3FBB1B22F1B3A33BE811B762F1EBE22AA275AB292F79212E22F36BA22A3333AA3BE2E622F2BF331B12B3D9AF9F1F12B222E622F26F262622F2AFA4262242F28EC2ABAA2BE22B262B6829A222BA2EA8EF46F9AA0751D611D311F13F371711F3406
+:80300000F612731F32F372723F3CBDA3BB92F392923F34F143521F3BF9F3D12F3FFF93A33F2BFBB3B11B631F1DB861F6A3A12B6776B2F2B292F5B232F22F26EA27F5F2D2FAEF27F73212BE321F3AF842A11F17BFE1FA62222B662F26F262622F2AFE82C22D822F26FCC2E22F2EEE26F64222CEA22BEC286EE1EA7E150D2A010018C01248BD
+:80308000204822081224001228801221042880022888282290824218200218488044022440220882400148428220684E80311190214AB11112922126924180423281003C9241241388A2425021A0429042F0224280A5242230225022192222C813A0824822484270422242A2422422A04828485D4580B511A2121B216AB111F2621319F224
+:8031000062131B282F1699612F2499412F14B921F4429313F2429313D212B921E414FB21421CE82264112E529E212EC29E212E429AF222C21B2D2E421B2927221B2927161B2927341B282394612B8419B64298412F24A8422F24AA422F24AA4229AA42A82E424FA807581B615813A1141AB242014213A91419B6429A414ABBA1744231A16D
+:803180002F14218BB1A2042F2A012CCD812E4286C1C216E112AC282EC31B212E8219E622B811E616A8292B16112B841996821B282B2419968222A8224AAA4A282B42A82F22F43D2100824800002200000000800800008001000000000000008820020010020000000014F079B280021C222181032AE421848232412100882CA1A1212A2459
+:8032000082621228400242314E82B02281A9142A28A321808291112226C221132C22EA2488840CCA0222A2282228426ECA00AE1180824831121229826119AAC1414E821B941F25B2618874214231C24882C8272E1C869131282932714622863242864222088A86B642084221212110018A021C880442194CE122F84C1100CE211CA24312CE
+:803280001C91122A25962226C143228AB483C5728A346211708282B681E22122E828228134238E4213B11126E924A1481A282608821E23C22C621417242823AAC22028AA2419A824822E426A4881FE6D8F202201808802901212989A62140013C831922D221B424A02A0484A9243B0210123A22425A224222826221182A21648226022821E
+:803300000024192404880022408142F27A9F001902C01200122C01140080019880A24AA0421C22021112241200232281A121001C89028A04A082489041884821482088A24A0080F4F66280032A8122822731222842222A351229EC183413222D11272424130DC2304329926223612E1E212AA1412A88D2229431382230222E131C96A22C8C
+:80338000C421172222463181882382CC628A0442E8AA04E736200112E021A261122122902158A084D682C12234A0484E81281B842846722122D722A1522B1280822262211C2363112C021E2230822EC21CC22128136418212142A22B6882A0C24A08DF53022219228202001A82314260222C0114111A288176222281840225010082142A54
+:803400009152982CA12400A880621C1C86024230438848824A22880462428082F4437360142842121800211011511218221A042146A21211B022041CD42282290531F082531C8632824AA152212A8104001C6628428200428E21222382AA2826022C0286D2970E005621A2241911021AA2129810A242A0121A12128122338211A8A01288DC
+:803480006A016A011448000088298D424102002820284A028A4402214886A224489F5C0318001001A0341148226A018200C02110120222800422800422181228231281022442298842120148130800820048422A880428578630112811381216430219E2126522193312C25822123C66221D22322820CC2228722A35432C6618582CA728D5
+:803500002A6117281A2A89C481222831422A040086C1A2A82AA8822B24AA8428E42CB29C0A4880016601A06118C091480020D122021C01A0481C722122040080A1252302244224400227224092412C08881388A8482420042304212A84022FD1092A0100808203242E4218210050328082C311282064142084511248280048160113041389
+:80358000213821901142C8400324A0A4820000424226028FAA0A008006161241028280412129042018022084016022002424001002002180848C1C52211148882B844601422308A888888084D4A4052002123643E121A4242C4221962124202142021C82921211422092111542024811901248002112001A02242223D21218C121241488E0
+:803600004824002002222FFF07809441000020850190121A12021218100210612242822068218842681C166124883248004290810010420200242248C0429042F096D20000002682240213D422042A01122C211211012005149042221E412001292402002C068006144021328282002823044200002214FF19032A0180018082110219610D
+:80368000221128241420821181022180012100222840C212001248420080A448114022A2842348023022888002228FB70A0028000000001A0800E800A01848823424822858A0144800140019061C041196221902200480020088000000EE971081218222210118620019043042583C522100271416017846031C4242212106207441221284
+:80370000011110211411020019C82113044A982288808804E05104808204282110828111018082021218208211D22201181188184043D1226A11884002C84280028822884021840200C848001082747E051E11302158282F122234425AF2D1123B442992121E121A7262A2223F1181B2124812E125012E422CD612673823F121522D422A7E
+:80378000B422C252242A922219091B446A9182143BC235B18358128E2323C4C12B48E022A44E2084C64168AFBA09221A8422E32381C172122E5225E121B3316813824A944127312AB211D121E111C791141F1364142F152811E334B442F261214E224E421D81118E431F2761111364121BC1171C424222421D823B841DC313E424B8C2B4E5
+:80380000C288088A3C622262FFD70B282A022811167232E12213A242143C1511D222E1118B612827122E2123A64519F4422229382117221A85210929A81123A544330421C8288AE221F583C28E238E223C24A842B0A2022C8892228A08A024219FE209111021120100C082C0838088841A810888114A084A18A3242110211C220CC21482B7
+:803880001460124825010000204882044824822008001B82141B335A7121F12161F013122F1556222B711F2DA75C1F26B2A268282B381E622B991F1BF1B1132F23F3D2C2CEC18AB932E228885313128A98233F14FE41C22F28691C8AE828F8D2123AAA62242BA8DA5811222EA13F1898811B42B0C3AA8886928221888EC22AA6222F22F676
+:80390000B452141B331F1327F2113117313D122F34F662622B333B6E3F1EF6E1A12BB98E122B5C3BCE2F2AF8B1132F1AF1B1B22BFF23A4511F26B7A2EA227422F1C1C22F28FCC3C21F34EC34F882922F1C15C2232F2BF732B12A62342BAADE811374A1F223A13F1898812F26AE8C2B88CE422B8C2B442B8A888AB422A6662E6237FD143EBD
+:80398000111A071F137311D323F142632F24B522F671F26AF7E1E23D211AA8119EE235F131911F33F192B23F16F442511F14E52AFB23231CFA12131AF151113F3DFA4343CE432F28B64258112CF493532B911F18A8EC1F3DBFC2D811A446AEA13F1CDC11A8683F18F8C3822F28F8C242882B4688C82B222AA262CF6F49E113A13315A131FB
+:803A000016F213322F35F662722F23F323A23F34F463612F28D922B942F523213F3AFA31B32D133F31F3F3F1DED11F11F5E1E33F12E232F232331F3DF593D33F35F54143CE622F29B7535D131F3AFAB3333F11F981811F1EFA31B33F1DB941F463623F1AFAC3C31D832F2C7E43B1C3EC2CB4C2A8CC2BCE88484AA6662AF4DACD8001001802
+:803A8000001220418244220100130112301100281110021828209412009012200218008224823482340000820028F093C2001922922126321124686692412A11C112202413322125222204C04242221224421D124280024221281800482D821B4826021400484A286824A200802444F3D8DE80B411A2121B21421B21271619F242121B297E
+:803B00002F34B981F2429113F84292AAF442B313FB4291A22F14A94A4E91AE424E812F22E411F22242D6F122C2D6D122AC2D2CBC91C2C21B292CB89122B49136421B28273419F242811B282F2498412B84AAF44282AAB442289A822AA4842E42AA0B481B612AB41122B411726291212B141B296E811B282F14BB8192921B482BB4B22F14A6
+:803B800039A14A39A24E913B1A4AC9821EA11B42D22A681D3CA82D3CA8293CAC692E831AC4819A7642B181724292214AB881D222B88184AA4A25A24A42A229B822B4426822FFE80100000000000000004800200400008824002A0100000000000000002800000000004F2103201111B141013220C361299581F042114E1288822ED12B16B9
+:803C00000062624842150219C21118423E422C811BE13248C181211231B811342A841232811448238A88220200E022F47568B03134212280A2347041028822C0410017225A02112C92411812133A22681B521A3422E23382084229A7412A0118484A03482B481C98414E8120044228C22026A2861C28F8E21EB0112667121448687041822F
+:803C8000B3412205221B145226A2521EC11B412CC2424AA3421EA12934E13B34197432E125B22174F1C2126A791291414E311938122CE4128461348AD412E612641C2E81114A3242222A84226222E8886AF896AF0011002E11122A01203822136834403281882229021480818402A012800800A0242E92008021A182402148028004A2884A
+:803D00008280040024EF560A002212003C816622282F3228C18100122522DB22B3110482284846011C021421422322041A020011624829814403001041210A00002228F09D398032211901363173481311828D6122C0D22419884231C1A0121CA1142290422C21826A142928C5121A7C42B261C11313013391811115028A96E142234402AD
+:803D80004682842688AC484A282CF8436B2032211E211219723291512B24212DE21C2222881C822882F182612B413219A16168244828218603822985C1422CB31166113951211C651C193141252132210015026E8242428248824AA842F0BA1F00002081041C2122A18123118301335122A621410188001C041C8122C24348222C848904D2
+:803E0000008042020023AC484622041400282088848288F8A35B80044A032818001CA41280C3811342211B82E1186124102205422C13012722122CC2218098211B42298682810618142221222221422982A2C24200C02282F015C88002428024028012A2284229210220C421001223041BC280812C2421244181262205002A0C808EC281B7
+:803E800010C1C124886821208222844C22042FF70F20011C135121582A11022414602818142C02806216008022840111281C286428009830111118360321424A2A0888002440220C284A88A2C2CF360A4812283826E1122165221C14827A5231832C882188342292484E114258A2684A9251423522A681422223AA161B81238282A2433C7D
+:803F000021C82113A6A42AB841428204242A88B2422824A8A48AA4865F520C22801121042112221A022818111413932213412192220019042488A021181C3222C210A142C0111309286E12C0824021988282272422424828A02480026FA70F11C2130119C5122424224228000080428221691848425023682C0211001A242841C341282A26
+:803F800031212280848242012142E0220466220222C242A0823F7E0800808302114246D122021811821B2860312200003400404102162201C021202104602100002880020024202484082AC882486F8B0C228A210220822582011CC1221424241421E012C83212121800C03248422820B212E2248241414103001092422446011448906215
+:8040000000210080064FD8061190411001501200281218A812220000400158423400124846013C0428200116227422020029042501391A0200240088004F490B4A01124224408194112A7512C24190121C24E12821232108211011424281410226222181D4210628222D2119044A621428284228282008623062E2824062363F7904208436
+:80408000044002160121488081828884328124A069D02204B0228444311210C24125410200121A24A1244002002084020042408204002FA50A0048181812002800800A000014110014408109001C0120280118002002214001221C04C0414002000020F85C7EA012A6011C4222A2412A31421C012C021911220198868212028004114880A0
+:80410000849611224E222085820110238482866424002124A04221228848222A04F0DDD620888124048002001582448222A12425413122B0214491121418A081194441014001201491410040021411132254218E2100001002B0220C17C680A739904136A21239E123E516257141B3513131181B1425E1218AF8B21114EA8661314AD432F5
+:80418000C4412D134651321C57222CA4A129E61224F111111A7362A2142B42468294413D411B241F122294821DC266522223C442824AA4421CF4C2826FD60317111B4817111AD11155221C5412002B322B621C61212F11A81637122D331D223E3229094225032A32413D421B1116F211513AA14216A1113F148442C2213F1384A22231428C
+:80420000282C141222A42420E222A4862382A82C4E822AF417DE202284A326A02176B241F213223F262741D222B883A8281E6218138BB882781173419151191171D3A263124A3461221B242F2CE126F143222AA14217121B112C622429E426F22221667222A1441F3274811392624A8612A2E42B2888AA82D2AD4421440114C013006012DF
+:80428000483412148A8402240000203482008021043022422004C011480080044824008A040040024A02D023041CE317A3223AE618E23BF212212B223E422B223E21382F1A082F18E328BA1221B88321FA3153481B112F29B881E812F3717346F111532F23F212123B112B11CEA32D633AB661F221213B43173125A24415914317323D23DF
+:8043000015611215B3426222624AE42CAC26244AA888216F51013AA33B2A2285BBA2E321F323332F2385923229B3823B122D122F2AF82311213F19FB23333F13B712A5558AED2CFCE3E13F37E135D933F533623F17E717F71272DEB23F31B273B2317731B223E316B422F662621712373437242F147641F141633F34F441412522F46262D5
+:804380002B886A82B4A2ACA62B46AFC446F141611F13F731311F13F361611F26B623B263F611511F32F263621F36F193A215B3D3ED2CFA1212BEB22F287931F351712B551F11E124F541412EA31F37A3151F31F472223F37F612132B33EEC22D731AF621611F127233B25132422A52133B621553333F36D613F241C33F1CC8422F26E42463
+:80440000A4CC2F2E9A222BA68AE824FC67F4141B771B2A1F12F311111B763F36F733333F22F613131D213F16F763713F197913F153532F2FFF23313F12F2B3B13F33F333711F11F551511D433F34F463E33F37F591133D432F27F673717E722F21E62DFC13733B651F1363333F23A3672B622F26F263213F36F663622F16F663233F14F4DE
+:80448000C1C31F1CDC2234422F24F4C2C22F2EB242A6C6AEA2EEE29B1D800118602220A241141A044002002001112001001190120000422921A412400125832402226012483440830480220800F03CA9002880A218128602260280921292243214D0122A9A32601415022256112175224281A12822112112141B21220050321904110020CE
+:80450000420200282AA484147BB680B41122B21162241B212F2491212B1619F242921B612B9413F842921B422F342BFA4291222D912AE414E922C4813F22E411E222641D2F2265192F22A42D2DC21B2D2D431B292E121B294E111B6923B481724292612F1498612B8413B842A8422B84222B84222B842A84EA2AF443FD001A26A2414268F0
+:804580004A91212B162829A9292B248A929213E8142BFA4291322F14BB22E414B9A2E114F121C21ABA21641C2E12D6E112641D2CB8D142B391E622A5291CB19136421B682582D61298614A9A61212AB442A84A2B842AA4842388BA22F4D3E7802488040000001400000000008100100400002200000000000000000000008004008FF60B3B
+:804600001D241828342E414A42C241241C041B4119017129B2928446C1C3CB210026B146622613821224CC494AC312C03126B4A1D1638281081B282C4292E1232482C44120346689A4C282C82882E07D0823358116B42881E118C1142AD912012B92A608844AA11C442D882E142311A1124F88811441E841C442324323738286C464296486
+:8046800021441222481B3449648822188A9212C0921D4418242A58825883826154287F23075B41D24C61112717AE1141291391432368162E117041A624522B483C622C8523E1C87151C265AE4827452CA2218E644AF213822443E41461624F15A2122B21C8B0A1248892832A3822625E82484225366823AE14AC8622089F780F231221C273
+:8047000028808491C129012A6189409812922D8426C81413C134222002C02148441887114B4252268282215816001B61418C12A2612324011154124A22182888286144222F920A6110C2282322011246C14825810448428028A2941AA424A024484624624424838881820C2A249C94A082842A0129210800E0140814222082082820A44841
+:80478000BFA5025A22428451414E281866AA921EA1181A88E41128E8255A41836112C094136B818293C84139A1145B43C22F24A921CE188A61514AC22112A224871286C4181F28C4814AFA6192241A3844C22B84C6B228E4223C846A0922AF1301274622C018353428C0188E311582A141B011085AD816C8284AAB41188E218B41406116E8
+:804800001C61219E65243AAC81C6A8A41B1C481982C188281480681411422AC8418844C24A281C02274AE2484AF8396B2001258422A241126682B4B844212884A48428201101498E8182DC480C2D4448849A042B421812444BA1A082281662A28E14892138822A6835882331412C022889AE862001229F6B0A2944E884D24161848418128F
+:80488000218116E81421A11227241668481A248A4231441D4882411849828A62441D142A440631811A22E181189488901819C81A8C8242FA6C9230821A32182AA8A1881A6A8442BF2448018C23149222263144804454418C22E8162881288152229058AB1A8694642F82985158F01C81204229890183048CC244B022C4684129C4241D1494
+:80490000145A28120C4224808454A420F23B8D201236128C321448228525032800840087268420210232805448812CC54232860A68823011908422290192281E28008C110260812D884AB2180443012A01BF3B45E32224D322F214233E4885B12454612A011B122689E895B812F41288874327852B8229B34162CD1BC143F22A84DCC4589C
+:8049800058BF42F142241741E0421812E211A4128B124D2A6422767828B281068C32282D9A8D14256C283AC83289A9588E14C9B81884F6FF8400448941188486618142C4811A8401004A28029018228D248A2484C82422C2188B282F8224851901908492188E48881694181E2C2D111321A448241638488CA42422423228F0FFDF80414249
+:804A00005182432101108462A2824D4B125C062A091A22644481850442C85221CB2441830883922243189224611A72268AC4344E884C219CD1844018442852488384C6842228F0B6A840446882422082A224248001801868B24182001811203226103281200422444883C441A3010038483041008E648E12602241800C212638144E1A4383
+:804A800092F8401204437141186485412E5D960484863184704244488454419061845644E24201E0814CD284E344C8982819810298C14A3844A8875245B824119159A1449634284F81282259C2122098882F5E0F8412488304130400208434122D21799188172214244091142E11942A4861224D49112609264A42CA2200154232118291A7
+:804B000048A2251118326489324B9042422180C21828F06A746038468A41311400298411C28100528128185814482524842428088344642142111820A142921C4218E12412410412838C02421182E229728A22828C14C814148FD80846041D44212728144CA4124846C42892482094114D41D0848161846041904D2A9885422D244399146B
+:804B8000A0214141514394444919140C611480081142282048C4444487484028F24DC7241628810689922899421818480200122481814A62C8114D28822A14022182142227244848424042020020C5219021C0832CE84182911218328CA121188288F0DCCA143151C443324347241514352119981199C22890822F44082E4645088C21210B
+:804C0000D2494862C44122308928CF28A184C729124B841286028F1821D38218D22254482D482280C449824604448618324444C3FC256840085880120AAD12B06891426C257144011888AD1110033043901816C1B884241242215460181628B8112402821182838AC1324CC1112C03491598128818488A12022DFE3011CE1E4712643F425F
+:804C8000F42C5847116E2C2F44F368184E688B856E555B194D2243AC18ED194CF44294471143A631DD212B866DC92D2C421A75E9671687444AD74CE292F1446417881741B21FF1A5811F8C2AFE4821637271D811D424F8564C1F98B812D38EA4894F6C3872CBCC4B424F1CD284F2F757D032051FA1B248F1482844BF84B2137528F887C4E6
+:804D0000818E42A7894E828BD1AFA3716828F572114D413B541E25DF96E824E1B8642A3E1317D8DFB4A891AFE1B7A6FC2A885AD843A28825B688D842A1AEA6E461D49A42DC91C1F28FAB2115F97452CD889E94CF84B612B584E283B318C3142B822FDF485244F3D14AD187F614133F14E26214FC15431AF233933D3815D2527443DD51FE57
+:804D800017A71F4AD4AC528185DC89C544AECCCD241F45B34CF42EC22E246D6849E8A17394F6225A4F2DFC13134B376D13DD22E1FB74EF12D145FCB7D28F4D7E8AB142FA83792CD14AE26EE426F2221687828DDC25E4C8F838888F68F43E891440012E11C0924003348C64120000C022112C084A0842118314A12421421100422044416808
+:804E000012C083402241A248A041144880848244024220F4E9C9344F697446F624176FE1F45AE5BF97F73415E7C35E3D8FA1EB18D988F82A8BBFA4B89FFE7E6C6F41719EFC5CCCAB994B9918CF88F8FEAC4F48FE8C1C4F41C1C49FADF5EC5ECF8FE5ECF582BEEFFAF526366F6AF7B4B44F2BF386C66F29F61C1816FE39384E44A7918FAB54
+:804E8000EBA1E32BE421F1DCE8CFA1F9E6C2EFC7DFE4F8189C4E14CF42F1DC18EFCAF8CA3D244F44F4165CCD1E65FE6664CF86FE6465CFC7F65414CF8DFFB4948F88F8CADEBFEDF8DFE5DFDBF63634DFCDF15CFC95FD15172F41F79DCDFFEAD746FA67C6EF41F14A45CFDDFFEDDACFADFDEFBFAFA9FBCC5FFFFDF7B6364FCFFFB6A3EF89B2
+:804F0000F9FEB9CFCF7B9CFD3D39CFD2FA75B8DFC1F359791F7CF25214CFD8F8189A6F6EFC54564F44FC38F4CFEABA2AFBDC98AF88F9EF13345F31D523D499F239392F57F77B3BAB13BFB2F65215BFB2FB92B79FA8FA99AB3F24B89FFD6AC13F9179AAFF7B89AF35F11E19BF19FB1D518FBCFF81EB8FB27841FF284FBFBFFDECA3FF9CFDF9
+:804F8000C8DFAFEEFA8ACA3FB2D233F5B3F15F2BF2A7B37F29579FBFEEFABBB83F67F733139FEFFB3BB89DE89F99F9CDCAEF23FB2CF8FEFC7EAAAFC5DB42F47ED44BF1CF6EFD9A84241F1DF51B11DF93F339395F77FF7F7B2F27F17F2B7F75F1FFFB3F7FFBABA3FF9DFDD296EFFFFDB8CF3F3BF9FB3BBFB7FF8A8EFFD1F19ABDCFF1F5A97B
+:805000006B3FD6FE634B3794AFF6F6FEFFFFBEFFDF99CFFCF9EAAABFACFCF7F87F2FFFB3F1FFBBFBBFBBFFBDFFFFFBF7FBFFA9F9FFDE7FA7F9DBBEBFBFFFCEC2BF7DFDCF8D8FA7F16CEE2FAFFF62E2AF63FFEACCABF64DF2EEE2CFDB091880011820822422412248023484800413012004280000808221B42221F42211001042A81212A013
+:805080004120098A442288220848208122F8951E00008418198601A04942848F24099819840A80041AC421862814B2489213C0C883B1223D88250288822981B2622918E881F42881824E111D2829012B8484812A14220A8240F13F3DD022F41124A5F21124CB161F41B24AD141B24ED141B64AD981B64A9945AF44B924F44A9143F2429187
+:8051000047832F54F924484E954FAAE414F8244A56F1244AD6E5A264594D4ADE24ACF4D1242CF4912487221F4932481FC9B24EF89164EB141F48B24AB911B64A9945AF44B924F44A944B42ABB44F8AD41AF924484CF9244A2FDF0669A461E3827466D2817244C22845C2288F42499CBA19D24A29F2428717884E26B6F8481523FA42151F7D
+:80518000A2E144F8211A5E8484CE2577A2924D4BDE2145FAD12845A269CD439A7244E189521C1B68C3B481D248F9116429EB81D45AA843AD843AD44AA84B8F4438228F44B922F1BC6F0082184002A041004004280000000021480000002044010000000000004400200100100421F0DAC58002258A02521853856499AB183458138428A1F5
+:8052000043CBC28CE345721801881C9A41B0481134CC2CA5A14B862C034F214482A882184AE8834428954521824AA8C1853518460C22A8869824688928F8258F241F24210888C341214448084E212A058E184633648694128A04B014281208464432381611CC42859244894521284388D88432821E6247228C2BC82829426828472880C8FD
+:8052800096835422884CE11284F4ACCF2468272C8423C21C56A1414324E481F8A31816F1324413613C4849574276B814463B84A89BA113B484C45887434E948F61E42438616F2264858F2104D28C82F9A4482B415AB26471F11CA2282B2C6E9C4D8A478123044339EA27284D824E146E8892BD42C011008800701118182184068E4830348A
+:8053000088BE488880210100002185011AD284280115C4822888008E2885022182810011884588280284282280F4F4CF2012013024208204284A088714927081082084044181800830228141858121011AB2240829012412218CF46482488002008022C884B048210848CF8C0B1228874136C2118B424F213C184E182F857822B2190CA10B
+:80538000272C681A32B81E281F819A44CE31D88E2189D212C21813B12424ED24B22498886AC8424AB1136A42A7285BE1626C0716318868C81ABC4239C2DA624429C62A491C8423E482F82C66202282816242683E86841881425628542282238262825AC24849246684C0A822872136D1489444A42816A84A122B6837212E14A9C8D61A3268
+:8054000052A11B488AA424E82C2928AC1C004DA849FC14481A02228FA70B1814C112271184425846B832FC22828651188E18421DC8189281AE11E051A8181B28501200288A91614B1882A04249A182403221424C829434250820E42104284E26AA44022028C4C87F5A0EAD114462A99834168CD24A4198126D189496621218922AA824328B
+:805480004CB3C223641499A8281842881B94488A6681C04C2E58004A2A081E4421409822824A2124A824824CEA410420489358284FBC0A81233148444618034827424C14342230A441144C11282C44989249C24249C41115C4B8450816CA43E6AA1825B812A461436122AC42B888925419C49C95048E185691252341281AC81427815E8287
+:8055000028C29D61800243E1110A2212141B4189226A214883454822C4128514021038242428AC81041E224084214201008C21A12849C528222468A60824818B422B4180A224C02110D8384B723132141E264F9261865D2870597446CB6C2B839B1223BD841568389E442AD16AA82416A8148F12F424C36C26B249913A8961212A7512EEE9
+:8055800086312C1B6158289E241EAA8723CC63CD4CC42B8D828922AB4188E48F257AF8A42D83A21289A9C1842E88730D0081D02421E122012A2151284052814C2181C2484A33142BA482448488114448C6A542838824D8220D211200A04823E28122E441E214C84889B8117442011004491422A234488F6D0642964242280619913828819A
+:805600008988914241421811150228004824484BC2A0488B18286B148AC444C086181C283314406524C4241684C2A882448249A24A2849A121430445016F6D0D248120229126101431D40098812938C449012622186698444C04246C44021B81882088A8241CCA248282222411C214684004008A0441108638342441FFEC4E22210A11446B
+:805680001043C21438588E18001118888E281638448E184848E088042A51814200AC81A224A44C042582B288A148121562818328024601258108838802806C12282B340000494168114A22286424204414883343001B86842611C494921C5182881284442E4982189011144004232603298284819C8843123844902821881601C082F02D85
+:80570000C52062112501004C216633818E4114A5A184008AA4148A242A61D88A11DD42C8214229048A01493448882AA91A122CC2A8517044210423924110A214282782464442A62846844284F84C8B4011B214D421012906CC012C0A25A4183F41B24E210817424121C8100840521445D83231216422418514481A3811161198142B2845D4
+:8057800068424561285E21D014186241844E14814440C488817FAC0FC0487048E491581885022100800210586110C31B44180014C4840024112490521C441801447023081A3281420018212084818201802101CFB84112213A1925024E8230414125911582112B58142118888100429442814E1160114A58C2A2812E1816044C4452488492
+:80580000132D14C8112FC401B91192499678C5781A022F81284291124814643F280B8C0648605443314421831454284624842258412123054E151F82241142C114218B81004816782264182861844B281C04648C684982A289084CC5824A820149889489892882382AA2FF810D33B4C9237143964217382F11F44258AF22F613B289B1491C
+:80588000A8DB412B561E511F74F143622F23F658344AB241F844592CE9349C1FC7863D415AB884638A4BE82A77347E25B837E5383A141D24471C371D67218FA7F8462D6F42E91AFC438875A3413F54952227C629B283E18A88A4618E118AF2C423243E43B21D12C7839F6FF14C1445942C59D1C434C11887249F659D8D6B84233138D551A1
+:8059000084FF5BF81445966444B564922771CFA4F18A592F22F44D412787CE8C8AEB74EE74321426532497A32EBE1CDD52F2A9921F8536417842DF4C28B8ECF588824F8D89721421B824F828292742EF3A0828255A5A1C51942B639F247331665583FE16CB2F2954172788967389B484F88491CE883F3ACC588F8891885D4947884EE65872
+:805980001A48F2118D2F615B68E7214AB498A1889742BDB4AF8BC9F4C9F4C9245B581A3488AD3283BB88DFA2F12C821E8C49F72844CFE3D842F34634CE144D864D8A6FCA4521444108484048414821418144414862814C02001011081041149128008881214221841480488808341648638114964822490224122011F86BAD241E732FA548
+:805A000012FA15578F84F13F1CBF85E542F212526CBA5421F4EA5D87848AE624EC15F5F4B42B957EB1AF12D488187916F3C6CBCFBEA7118BD5CF4DE56FE111F134366F42E259BD4BE44DE58F6B682F88FC25AE7F4652474FE9F1585E8B841F24E182A21B4E8A6F217F44F45C9ECFC3F19596DFC2FA24B64F41FE14242F99F82D65242B732B
+:805A80002D688F11711A724AF82D5CBFB7E366F35A7B2F6473429582AF88FE48827F4CF84DDC5F34FCD1D2BF8FFD363D6F33D6CE14F486936F3CFC64E22E348F35F5C6C45F64F4B5BBDFB7B7EAFA14F5DF15F614755F1F7F97B716EF8AB8F3BFD3F5A222FFD5F94CD84F4C8DF6513446F647C4EE2C7AA9B75F81E99AEB4ABF16AD892F4268
+:805B0000FB2732241F31F73363B5F914179FD4F27B38FF87F32729FFD1F129A3BFF55D31AFBCF2CF8F6F58FC42436F55F5E2B1FFFCE9A3FBEFCCAD8D9F54FCCCDA3FA8F82EAD9FB3F31B5BBFBDF5721FAF95F53EFDCFC1F2585E3FACF5D1563F2BF789849F98F86D6ECFD6FA5EC4DFFDFD595EB796BF65F179ABBF39FB5BDBDFB1FD5C8ED3
+:805B8000EFE7FB3E466F63FA8EAC6F4BFB5644CFC1F28812AD94343F13F73931CFD151FE3F74F27C7EEFD7F36F3CFFF7F7EFB7AF9DDD9BF88B89FF5CF8CF9FEFFCFDDED9AF9FFFFBD96FD3FBEFE9FFDCFCDDCBCFF8FC838FDFF6F27B7F2F31F5C9CBCFF6F7ECEB8FBBFFEAA2FFE5FFD7DA7F6DFFB773EFE9F8FFBB3F1FFEFDF9FF8DF1CB99
+:805C00009BFFE5FD1FDBBFFFFB5BBBFF8DFDC95FDFECFDF2BAAF87F97AF22FA1F892BA2BFF5AED29E972D2BF0522800145034722100424001A441441B6914412514860441146044E242901219012B0220822C011909248141A24822402200848281220880228F0DF5B208802A0121DC84A21019A3642D028094A2888210B8AA4348A84017F
+:805C8000882588422881EC14A282D222C0D180A82883022989D21A084A282884140288AE48004A2208A2DFA40C2D521F417228F21124A3F41164A3F41124AB141F41B24AB981B24A9945AB944B43AF143924AF147B24D812FB24481CF9244A1CF8244A16F1244A96F1244A8F59C24A9E244DCA1F4DF224421F49522C1F4932481F49F24A56
+:805D0000821F48B24ED941B24A9921AB9453F84A944B4AAB9443B242792498924F8284F9A44A6FBF042B121E6C6B421311FA1164A3E44132421E242F44E948B24ABB84F642134B434E91412F545B842DB17F8294924FA2C5915FA2AC815FA2644D47A28F19D234E419D284FCD12863F21148EDC29A724CB191F24E8219B24E89F248854C92
+:805D8000F248B18AF24A85AAF44814228F4429C2842F82D448F8A2587F230D840000000000442400400400828121480000000014008400000000814004210000000014F0D1AC9064114494839213290742BA94C283C2D8248B48182B4246A68415A23414AA21222A34182D6A18424D282CE484C9421A68251C9212C0E88F2AA184C221BA85
+:805E00000419AA1829A418CA11E489D422BE243168DA02B01A0C23719294184D221D44C30293E52112C51AD60152122B2C96241AE84B6458CE141934C1002D2444E8499A9218281EA82AB482A218412B2111318922B179088BA42331429810A2942818112114471C816FD70E3A644543513C8B249D145A9251424B3CC3BD41628E422784E7
+:805E80002B524B834F28E488F441242F7CB215E411262128383AE3B422E942B4AED121A4835E288B1E2B254A8A21C3481F82C1E8C81CA74A8B4AA6F1A2468A2519B28435A82D624D312726984D41128F7C016512118852342821842E121125628918129882232402921882881B4A2848442242888031482C082C381165022E83822112A9E7
+:805F00002841228101A049A0419810B8218448F847AB40820280216124C400884823249818224C4128348444130B4588080042690C2E92A05280241108E04882813664802188084212809422A01422890AFF17436345D012D124C32C4D484D11325E228C9B181C09184B841EC8668238355AE284314CBA246244282965838A21E3246A447D
+:805F8000D286B461E14882E24A7112B24CA34143989C86A2858F1AE41204372DCCB88494341A72186429CC681DC0845F5F47C212281124C323E54481A12189C818162184F85884888088A5D246ACC14230848021A35812688E548AE448B611E248A2128D84214F8482C4148B282C046846C1821EC34D88C6B414E22412247998A428894853
+:80600000F6E8373044901249038544732488B42281A8842118B048E34156825C12247129A48387424226224448B2C46228268281212404321229B1A48198548E248AB589810A808401128B1224481B142888A72D701C31118CA2422F22B1114224A52154274B8CA2212D54188A329226712402122B21664844841592A40022A4D39A388C1A
+:80608000B58292641B81321114E012942800429F4421C425224932848400483614F85AEE248141418F11445184528545381244128942C244902C46D88208824D421285024C6142AB818AD424B288C414118284111A2402388C81D1A40149B6293834239884682C4498781A72C88464E28CA484EF46074A02004410982280460840488801DD
+:8061000018184C934C82412AAC821028942890142A84C1441C8205448C9844228A16E211C4880024008442002C33BC8200BF3E022D454381721138345D381A7451E421926136B81842CA5A56AC12874B99B222584289E54E915C8F2228924427C2448B6849B22AF84C3283F328D41935111AB211C8385B3499239D472F8144342872AF2419
+:8061800038C41C246282AA8461632ED4C3321C8CE8570A2A11118C5232502C8C126841290818412018A2418D14324C082849C484002F82056045604880B2224C34248200221E2826E188C681C01140C4482744478189E28814A8484A82F487FAA01418248C325148890280A24292E048611143324492A0122420C4428044220530442B4843
+:80620000008904004800244A020048246044A081632286848232481E243E1D902251910053418472488218D248D226012F842284813428302144A122008B42440040EC41C461204804284E124B248A442462442F1588435884006284208114048CF8816B00281285044868841694442A014200002A243145582A61410022632421A5248AF0
+:8062800091841008284094541286820A2C06008AA28428CB18A0488A22A2422088F45A77400848121D2828C0148018C88481A81382584889994488802882681220210A86042826219864C2288284824230528AC12828211825E88831228421441889899414F0C18FF0822418C453422C4286B219C214892C0411814B2422542244431804B6
+:806300003860412228494122014688261894683024481146210A3EC1482829012939246318944A8A8298888449F8F148008CC441003048158414481458848982282104809311602C1384250421861838488C21521444006888604A41104286E8443984184842282088044CA1288B42FFA20F1608408261111448800229838206818800C068
+:806380002820414208002218284001848400502424004100448110048181002084043E431004704222062C51284D215218448A152481A12184C64121A4140026210200424B28B014180841124B12001014041200800488121A1844083A6842F046A7C0488D254925414444810400448022648881222048241866189824984934244BA18092
+:80640000468188826448C81288842284C6061674828C9424842528242401129012F02349247091C912D14F14B411B22CD488A5261A8426BD3C68488F9268442A78C8B91C742584B312E12525C6215A7442A2111E284D724F44FCF2484D244AF248444B24C32EA24C1AF125467B8C4956246BE22C4D78824AF4624247CCACB488D444AF4660
+:806480005EF847491EA426F8EF21B024F66C148781367822F824441D327B261E43CF28F854888DA24E588D825AF61C981E3C4BB26E215AEB94C4848D841EC31B4249B234D24402F6A42928E6F88941848A64414F48F3341486B2C2C2642E182F4B7A4966118AB758C2D8CF8928B2B4C124C6E88128CA48D048B72D0E2F458152552D769F22
+:8065000041E31461D444FD1C6E348B122F8241365519A16ACB441A8468185F43B88436241B282D882692582B4E4F4AC5882E18CD841AE5C2B8A4C284288889E244CC882672C2A4441AB1C6B2729894E3C414A9BB4AFA56882382036AFBEC584B8C4F8B0E80012601003400822182252108824486887281886289441788448C019800800827
+:80658000888008890981F0288270280124400224400289028120F459CA241AF2742C2E243E648F84F25D4C4E243E349FA1D58CFD1A3AAFA1B2B2F11A182B295AF598188F83F3B911D7135F29F16C2CCB2FD7555F7CF4EA7AAB12CDA41AF8484A2F66BED1DF44DE981428ECC4F9383C4CEE87F6A1A9AD4C8D2487C88FD1B3FCEF83F338DC37
+:80660000C5F81C38CFC9F1D8588F4DBF91FE19588F89AD998F89F9FE885F7E0F4B775B625F63F33222C791DF95F46C258FA7F32C6E4B66AFC3E387F5587CAF85F512417AF578589F97F27D659711CD5EAF84B54CF54C54CFE4F46AEAEF47F618845E444E762F6FEF15FF6C6C8F94D444A4448F42F73838CFC1F3646E1FBEF26B6F8F45A111
+:80668000374F7DF9FEF67E788FADFF5C148FA9F99C1CCFEDFDFCFC5B6B2AE422B3F6FF9C91EFCCFBA377247AF23565541F733343DFC5F561663F53F31B7ACDF8AFCDFF48E88FADFF1D9F9BDD4BF7FEF8CFC7FBF1F95F17FC9D996F46FBF4B81F14F9C9E94F62FA32784FC1A489CFADF45ADE8FDFFFB8B8CFCCE48838C44BD8BE348FC9A930
+:806700006FFF58B48AF496BA2F29F15373BF4FFF72BAAF81FF9A9A2F89F98E8EAF8DF9DEBA6BE98F8BFF98D8EFCEFDB81CCF8EF94FA5B074F73531CF71F133335F15F55D58DF66F67B73FFF4F47CF8AFAFFF5AD8CFADFD1D9F1F1DFD74F48F8DFC7DAD5FDFFE31A14F5AFF6AF84F8EEB14FCC1C1CFE6F6746C9E4C9E844F6FF7F2B68FC5BC
+:80678000FFFCFCDFCCF484E44F4CF4A4B48F8BF3B4B44F4EF6CF45BF7EF6F6BE6F4FF37F7DBF6FFED28AAFADFD5E1EEFEDFDBE1EEFEDF9FEFAEF8FFEB8D9BAFBFEDCBED74F4CFE63E23022400129012A41280222001A4404440019840200420010180449080041302400908412452221024048C448448400008F44029EC32008188C224297
+:8068000048818421018021C1144588F314483880A14128C02167228081E22231188828182880A212A012108282A121A0284282301428844C63818B242218222773D026F51124CF22F11124C3F41124E3F41124EF24D141F24A9219F24A9251AB9443F24A9143F34A915783ADB54F83D458FB254A8D814FA27418F1245A96E5A26559ACECD5
+:8068800049C24A1F4DE222F49124C5F2912C8B141FC9326A1FC8B66AD1C1B24AD981B24A19B54A3924AF4439242BB4478229FB24484AF9244AEF4A042D121F81D628257148B111764AA2212F34B181C6121F48F6483247888D114B4AAF1431B12F54219B122B4B27144F2AC5142EC24E852E1246E1A2695DBCFD58244D8A1F85E222FC112B
+:806900004C4DC21D2449B9917662D341A6928E642D1719F648A259F2488243DA28B984B448BB84943A6B4A29F9841AAE274008480000000026040000000030220000200424001041084904000022008008000084005012F022B5800624897128314429965429D14828C11842D04868849810D94164814D389C926441842534144889B241C9
+:8069800008493444162424F1A1149246A461156824241F4862251882672149810120F824D889A81630448FEE0B6D121B282B124962448311C828541A62144A88D1C2652418837422B414D82282A6844B4186B84892424A83F221161E812E1849E189A292224BA12884642C497452B2A4812C25481B8198818C22B988F21824302414CF1188
+:806A00003428BF2F0E6F23B44102167C61745826A41661C381658D76146CCC128A64428D946511E2C1F419246F81C24CC238321D56381DA811CB284C7C189444724F88C15249A83439E148D72294254BC1B023C89492289289BA3C684DCF28A24347951E44DF7C0D002F228112088342CC118A4201241A44C2488D1240A1428B34A2428A92
+:806A80008452A2461484D281289514522A81A292601286E42441744802889A4472114802256581006082100126F8FBE7003024124F24E14106124306A981B44801184781E08854184303432124223424448CA1248C218401589288124180018006190400002A14B2244434A4428228486E742428362281C228E09122C418818A961860812E
+:806B000063A82C67A24CE34D22E44A844678C83484241A5642B9614449081A7A2498644F266118AA11684A1B583EC9128F62E442591246A9141C7DD4A1812E8CB0D882654B728F45B824F896B20024A0218F2422460989019884128D12888D9445E88AF1A8541A962418486AC8C4906216346A528A042849E24128082A088A419161528F4C
+:806B800042D442088180A9186A4934644688997438896A48DF65452222B314024361412A21E54214B84A22354890144A7222324414448AB44442588430246C416811C441181AE884A1244C3793491168421AEC81880219173341521CD41444628A30B44B4282C24B144AF23DEB30442658188E6842214C321F408A2834883B5229150838E0
+:806C00003B21301886E68281084971853A58301883FA482213724248C8542244811021E84472112E64928CD2483812288C84022828616816D44AF48F11701A32144C82A4128D1518284249B2548221B12C18383226DC14243818282C324181668201881AC64211291121C13C1129A43814360410084D2280C164AC44816284893644186ED1
+:806C8000928A81048F12060027219220027014881518080088588140842815A424CC0848221022018800A8004391486B1A2A34114A88210144114216827914C21844406882828FA54BC2544CF11C23182AC1214CD3873218CD42D28183F9845248237354F818431B1A453838E8CD418B68C64664648383C2583FA8331828833414473128D0
+:806D00004C521CC986AB862E494CD842B521618283C841213E488E688D226AE1622164864D488744DF4A012428218C6224160C1243A42183A2412415981886883224208138143890285018485221E022249812282A0C98122C514160418F1481122A612416681490124B4185044C2B8923F8CECBB024F58A24412A411832182B16224BC2AD
+:806D80001229CD2C9844238131328E2C1C0C4C22C124004244001486B544A1284B34428497496048409484114A280411241118614004244C944483F4C362100210081A0284168421044200821441184D18148AC14442C1008B2143A2488901148C34811F41488194182C94851D284A61E2131111C888218C6A4842860400E02201DDDD30CC
+:806E0000249A044158444C1482044100204414848824A12498438828180440A1184162281C02A21A241A04128032C42604284A01412292229A6248418C6288288DFF601170183442248344212C1242138831468429628CA9042366414222242C2182A4414F88448414426848482128112820F29144141242381C014F152285198108221A16
+:806E8000882912F4DC69241032222844A0422816E428A224EA21C19282141A24624A24863144C2222B2CC02480C248A0C14A6881881AE4840856C8E822481C28A482A0484A012442221A14C4448161D012F46B68008504C0281218184820480490248924C2128984280190424901000040C414001438412821482866242211080042101C8F
+:806F0000042848424B414B82CF170D200184290440088D14004048281A120400004C0148848182400828004082012048981A8C119C418C421868818302268838182880086FFD024282A41004A15082814B1230C2445214414A8801268482416824A021481E4849614C8C4288B4192242848208190100918A911182473C82442BD21828C012
+:806F8000A42A1142F83DF44028C24116F412818F440A40034044AA245084178A40120C502282184B126948042120415142440081441A52489884882042041A42240446A841D21E488C5882F09C5A244F61B4AC34141A6121EB6BAD1E21A754EFC8F871368ABA4AF2C614ECF942A9AFECFDD2E48D163B492AA9D44F27F11684CE421849E284
+:80700000450447884CB19439842FC9FC54328E81EE4B4D9943EB2CDA44DA14F265489EA14FC9F5618117141CE861E1586A292D644CE4447954B4A8EE42667285B4740C237692D4C87264FA8C6DB0517628A83248C8AB142C0C4B4693BA34921C4BEE8DA41D218684A824AB822E2416D488F3A1E82B55CD424E448C17BCA1AC468F4171B8BD
+:80708000E4C4B32471E17839FC8221CFA6B161A2111AF358581B4CAF85B466A51CB628E888F21412EB1DDA7A62F88C9B9031AC43D34AB242E1C4015AF714423A13A6411E1C8BC1A1474115217212F844186F41B434E248E4AA54446D426E4841C7454C78C1E8927278B46152585B312819522889E411A1DC8F41C9448D8189F6288886524A
+:807100001C49D148BA3CB84CBB34A2D246CC88CD5849FE35B21021120111241145F2114826E288446289248A44022C224832812018281848022C18C882812C082E82C083800829012D811046482141014008100800F023EF1417313FD5B321E272F34899DFDBF37436CFD2D214F346181F15A32287C6EF85A16D1E121AF314B64FC5F132D5
+:80718000181F2AB124FB3C38AFE3FA2A66CF2A771AF8589CAF41F94652A9F4486C2FC3FB422BAF13F7D4666DAAA5E8E1548AA771A7A4E5F7DA58ED9569E113F3685AA7942BD58F83A2974F42F268884F44A99149A4D167A24BF37032F6937FBFC3F3181FCFF7F37DBDDF57F62C2D4F51F3D53D4F27A336DAB714B114F114155F15B7C4EFE2
+:807200008FFD34381B776B99CF8BFFEEFEEF68F8CEE2EF87F77C9CEF4BF992D22F21F43BAD2F46F662236F7BFF96B54F9552BCE7C58D88AF75F54A49CFD9F8D89CAD9DEFDCFFB8B18FE17346F54AF88FE7F7FEB8CB368F8EDE44F914D8EDCC1E94CFCAF98A19245E427F43F738336F42F3E978AFE3F373332F27F24F78EFE7F1D3F52F2B88
+:80728000FA5A28EFE5B1DAFC26377F17F77EBE6F4DF972333F1ABB76AFFBCFE6FFA2EC4DCC87A17F57F3F9F7DF1CF591DBAF97F7B8BE4FC6F2B5FF6F4DB7855E898FE9F85A5A9751AF85F1CDA9DFEDF54DEF8FC4F779719FADFFDF99FFC5FD2CA88FC7FF2CB46AFA7C1CDE98AFC4E489F924185F4149F27547FF6BF33E3FEFE3F3676EBF68
+:80730000F7F77E64EF65F457727FFFFBFAFEAFAEFFD2D2EFEDFDDED6EFF6F57FDBEFEFFBFADE6FBFFFF7F14BDD4F2BFFECEE2FEAFA46ECCFE7F7FF1D9FFFFD99DBBF99FCFCE94F6FEF6FFBB3F55F5FFF9DF3FFB8F8BE8C8FADFFD955BFF4F6DFFD9FEDFB49FF9FDCFFB9B1DFADFDDF99FFC6F9FCBEEFCFBFECAFEECFCAFB94D8CFCAFC8C1D
+:8073800098CF8AFA1D57A01210044180210148200112441F814464812812000042C0241800201218042E111004418CF42411160882149220490444001281E04422180B2C6141A02123C868272A4843022B16102A9112B2253284244F82044B4A4A71A4820A83D184E449826141E045222209448B121222A0828A04CC2206248481A229A12E
+:807400004A4E14E04422285494CF52042E421F41522A1F4132481F41B24AF11124AB161D64AB941B61AB9455B84AB924F44A9143FA42B157832D914F8AC4B14FAAD418F8244A56F1244A96F124CA96C54ADE242E4A1F49C2C21F49523C1F49324C1F49B24AF18124EF14D941B24AB911F24A9351AF343924AB9443F24A9447822D944F82A2
+:8074800084F9244A8D17E012F4114C2D431F417248F111244E111B2126F181445CB191E644B28596184B438F14B9A4E4147BB5086F8AD418FBA45A8D914FA2EC15F8251AD6F125928745BCE855E2A278D1CC821E6CCDC31F41F24C821B28AF24E148D23E99612F44E841D21A9B648D914B424A39242F4429DA42F92448884FA2E587072020
+:807500000800002860484004400100000021000000180014008480040011000018000000000081F07F376034325C712A64168CE252041C91684A22B3188414C8141C395886328126B18CB11838848382A621451128B1C46148228C62484988283A1253F638864DE24C28911981661852488A742208A618E228644448884B282FC20B2E1475
+:80758000822922C1921A94824D68872249E828C189148D844E148C24C6249F42C14C432544258458C3484AE1544251282662C52F4184A352639116266C211C84A12166A74AE661191F2CA148CC31C429EE41247A38B488F284188595488F2C0C59B4C242158AFC12228E24418931C84F24826A878D84C381B1817658A4A12D814D131E888E
+:807600001E894B8126E85C22C4414414C3686845D8187338048E141694662E14D9AA184B825F21D48192E51FA2B421594883F42642888D32888354A2874443B83CF4F859A012122B121E242E118C64148C66324C827911488124D484842152584D484A924444488825A82149F14821185223A2256924F824D2B022688146A3416726122285
+:807680009A142869248AC49486A8244B482843EB442A1928F885C8C042440081174140044818101A218404800800904488840014604124008094218192200982810084818A24248908888028828874E1023812451A04244813C25822A146C841492411341843B644C228182E4487428302460464830889888431129E241843A8823048C021
+:807700004826028118285A48C898C3B248C1841E48C93818439C1441FF16032A04008118481D24522283914894A014448991644304182A5484492608502414C01C0021824886A182928324C8482A0800A01486A8148C2A99844884924302482FFA0D182741C5C24450412140285442B02274440148008A922850242816084D480083088836
+:80778000482981C13489B12414082001248184166482832A34884C9148E0813884818A34942D148F9B0119010060A24A611216482AA8388143A41413E244D2C312A412290122C02400400843536884104401891124022E844828238509128A81114AC4128088E2418862488303221AE28211C81C0085B441224608122948B81A480820440A
+:8078000008C481244E215628011692882800286928028216041A5484818189D62825084A088440C8141868003F6404412444142831224200100912544220B1981288B49422240A4424812A81420232AA0420018484830200280084A3442C0190E426CA880022FF970253C2221644311417A24A015E212A948A81249E44875419CB2445F94E
+:8078800028942218822A244A344740E8826122C31B3A386AC82686011638844D288382228482C6288F21A41846C8C88C5184122B428F43B88AA2D200AF6B0918128342782802221D6C8184B0919218C0128C744822031E48A3343485448822325829011870240200411A028418B044495C2816A8945028926C01008D8480118432A47F6F54
+:807900000B0014844068220000110014001200400841401848080000002001100C00000018824A082081080040F284D69014808281226441465814462124041B41108882D48474485448184008800144C4008022020018241AA212204228088284809A88202108892838C86B6400302148228384224481644448A041148002462404160849
+:807980004140480841810020028112004428120000804828AC8284188882408858221F980E8D1C8B444856086041251814514455A4222E21228480455848C5522225B218A11192128440041100878285A8444AA414858221022284474845B434A22A2280081840D22218E285F9ACF51024010000000000810000588181840084282800003A
+:807A0000800100000000220082802808008008400881DF7F028184421F410400000044CC22A2244800005022901A129882880040114101848C24A44100000044614C228282088001002129F171694028B414040012288C044084A4248100410000218001891808004001818528A141007012082508214C082882240000002508EF8804805A
+:807A800004004100004584840200420000218118800800260814008508480000002048042800000084100218FDB300000018004001800400404808004008000020020000000000000000000082808208005F880C893148124384422401004D44844B222A2202814142834452A2241A2121293888001011115388B048242404120000451419
+:807B0000B424AA2A2200004002244B11F77E10548C484A04000040445448E082028004001012028B1188880022404101848C81840424100282504844A062008008101A16F2874500129011000011000084A04140488802001088022830280040021200122480012100828004908200818100B01D0400000000002004800442001008C1801A
+:807B80000228000000000018800200008240028001400800005FC804411249D151014524018C1401818014A8144A544412620000002A5288902800180000181A81420221A088828180082421828222888518044FC1024024012812001120A4448B44844E481078486884101858888568822E2800002A020020812101206181264208240024
+:807C0000828081081E88850800C13FCA061684014301802102004018084800895488848441100881226082002424001200109212104282A8888A3842C28200008410083F360F6F22F216222E122B11122B11C0122592832F31F111119BD89658888F18F44848421D49114895588C4E488F44F42C444B242A22E24202284554642E246F223F
+:807C8000F212222E122B111AB892092C592229F812139F11A1989E89878489A444424E4880548885F844489E19F0262225A2123A211102142592823CF1111119F8918887818D414A2444591148C485C8488F4454444B244B22224400255444286F2252222AA1131A388282502229D8B2F1111219EC897818B888BC48244408405C888CB4F6
+:807D0000DE0700000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000024002450222552220024242400000000410000401404001014040000004B980000000000000021002100254212020010022440020000004141000044415044410041000000D05B0600000000000040024002003A
+:807D800021000024000024000000444441000044504444000010140400F0D8CC00000000000000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C000000000000000000000000000000000000000000004014040000004441005C
+:807E0000001FC1090000000000005022212100240000005022002100000000000000004400410000440000FFF60700000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC1090000000000000000000000000000000000A9
+:807E80000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC10900000000000000CC
+:807F0000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000000000000000000000000000000000000444100000040140400F0119C000000000000000000000000000000000000000000004014040000004441000034
+:807F80001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000A8
+:80800000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000004A
+:8080800000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000000000000000000000000000000000000444100000040140400F0119C0000CA
+:808100000000000000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000000000000000000000000000000000000444100003E
+:808180000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A03000000000000000000000000000000004E
+:80820000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000048
+:8082800000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400435
+:8083000000006A0300000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000004042420200000000000010
+:808380000000004441000000400400006A0300000000000000000000000000000000000000000000444100000040140400F0119C000000000000002400240024401212120224242400000000000000401414040000100400009F4703000000000000000010022424000010125222400200000045140400004110140410045044000047E24B
+:80840000000000000000002400240010020040020000000000444441000044504444001004410000F0E55C00000000000000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000000000000000000000B5
+:808480000000401404000000444100001FC109000000000000101212022410420200401202104202000000004144440000400400004100009F150500000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC1090000000019
+:80850000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000446F
+:808580004100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000024244042121212022400000000000000004004001004000000001FE30500000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000D8
+:80860000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A0300000000000000000000000000000000000000000000444100000040140400F0119C00000000000044
+:8086800000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C00000000000000212121400200000024210000000000001004000044000000101404002F670F000000000000000000000000000000000000000000004441000000A6
+:8087000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A03000000000000000010022424000010022440020000004514040000415044410010140400003F310C0000000000004002400200210000240000240000004444410000445044440000004100009732000000000000000043
+:808780000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000004042420200400200000000000040140400100441440000F084C700000000000000000025120224210040120221212400000044004100004404
+:808800004440040000410000EFDA0F00000000000000000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A03000000000000100210025022242100002140022400000010140400401404451404101404410000FF4407000000000000EF
+:808880004002400200210000240000000000404414040040044544040000410000F0E79F00000000000000000000000000000000000000000000401404000000444100001FC10900000000000000000000000000000000000000000000444100000040140400F0119C00000000000000242424000024000040420240020000000000414173
+:808900004400000000440000F0BA6F0000000000000000002121000000242121002400000000440000504400440000100400D0F20A0000000000005022212124002400000024400224000000000000101404100400400400002FAC06000000000000000050221002000050220000000000004100004400444100000000002F550F00000014
+:8089800000000000001002244002000010522200000000451404004100444514040040140400F012140000000000000024242424000000002421242542420200004044140400001004411014141454444100F071A400000000000000000000000000244042424202000000000000444100411014145444414100F06F580000000000000014
+:808A000025121242024002000050225022255222000000000000104404004100000000F093D60000000000000000002542125222240000255222502221000000104414040040441404410000444100F048C80000000000000024244012120221000024250250220000004004444100000040040000100400A7CC000000000000000000008D
+:808A800000404242020000000000000000004441000000400400006A0300000000000010021002100221000025020021000000000000441004440000000000B0B901000000000000000000105222000000100200000040544441000044414445140440040000004D4100000000000000004012020024250224210000000000000000004109
+:808B00004440040000401404008F3B0300000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC109000000000000404242020000000040024042020000000000004400000000440000F019AB0000000000000021002124DA
+:808B800010421202002421002125020000000000000041400400100400001FD40400000000000000000000000000000000000000000000444100000040140400F0119C0000000000000024242400000024002400244002000000000000440000000044414100F0EF7400000000000000000021404202000000244002000000451404000099
+:808C0000411014040040140400E062030000000000004002400200210000240000000000404414040040044544040000414100006FAA0400000000000000000000000000000000000000000000444100000040140400F0119C00000000000000000000000000000000000000000000401404000000444100001FC1090000000000000000D9
+:808C80000000000000000000000000000000444100000040140400F0119C0000000000000000000000404242020000000000000000004441000000400400006A030000000000001012120224242400210021242425022100000000000010040041004004440000E7270000000000000021004042420200005022255222000000000041402C
+:808D00000444444400410000400400F037BD0000000000000000002121254202000021212502000000004514040000415044410000410000F0788C0000000000000024002400100200400200000000004444410000445044441004000000007F4E0D00000000000000000000000000000000000000000000444100000040140400F0119C15
+:808D800000000000000000000000000000000000000000000000401404000000444100001FC109000000000000000000000024242400000000000000000040140400004141440000F067370000000000000021002124502224210040120210C242484A248484A444428084A44448004B444240040000410000CF4C0800000000000000007B
+:808E000000000000000000004AA44442484A048084A444424AC444490400000044410000DF2B0F00000000000000000000000000000080A444424A04000048004A64444B444200000044410000B78E0000000000000021000000100200000080A4444A04484AA4444280A4444248484AF4444442000000444100002BC10000000000000058
+:808E800000000000404242020000484A240448A0444280A4444A84044E444324040000400400007DB60000000000000000004042020000002400484A242484A4444A241484A44442424A64444A0441000040040000CF6C0A000000000000100200404242020000002424A0444A24842424241484C4444A84C4444CE444241404000044415F
+:808F000000008DB4000000000000000000002100000024002180A4444AA4444AA44444414449A4440046044604444100400400005F540E000000000000400240022110022502002400212448424AA44448401404482084A444480000005044100400DFF5494121414811C4482A6482214849018B1244000044682001252824120218891132
+:808F8000088185420416088448488C61814800222244006C42042C8222216181BF170C681D4831819C44D42CC1444E24498382420449D284C22476E4822181439818160223213112AD2421188B12103428222816889418A162622CE2222422D184084F22D868023827C323D92839882C6C447C08111211818148CCD122220249014400005F
+:80900000228001810048223012C3028002810018180042832104100282801834222428888C4A28C818EF1D022A44021419440840B44403228303408C82544848224048082418800116084074228CC2282064A18084E12284061845082484411A321880012CC4469FEC074041084120344C4800000010848122222181110200002301400848
+:809080000000840028220000000010041A420200FFF801C04800408402002200444C220241120000122123012440088301000081201408840022282241432202214425029812F0D4B514009011000000000000001200880082000000420000000000000000410020080000F0D89714281E22856481331541229218462444CA1848100819D7
+:80910000068C6282C459C6282219D28414CC6840081AD4868101002100831188911AB028088C016082824D188668811818F0F29100541361128CD248346846C124A5C1124A9941C331474ABB8494986598452324C5184E81A4468C62141223A1426908882AB4248132B44D224B68E5C2464AB181E4246A3118D02218DC226A281E42A27661
+:80918000B484C44842C2CFB24621C233919CB312541C8D622E4116364142882F94C142441290614113924856EC926186872219924445C8680020941C1A02A01A4C82449A48A3E519B482C3138B29248721642E828C88B81ABAA491548CA141883F9702409414702881043028C42CE18104478146E18AE4446889A14D482902463481D08469
+:809200009428192491128B2469289182424B122845026F22489414008C14022018082CA241448C94884880F4531240428461416364C1141D4C85828601420011A0488901814343215218454834244611D248E28284021A92C411496181241308007028618924118100A0848688288808CF6409636622442126286623124371143A485E284E
+:80928000981E495AE8C421126E4A276B8289F494289D8444682A91588743CF13286441848D144531122CC18A225EAC83F3441916C8824F81EA28041B844E984B498F417A44388844122E44C149A42CBFDF0A27662634141686E482912143558423C5488B25421842479530448B124D82814F8136884908841889F214482F813A684E28849C
+:8093000018804491941638A8A14984018B81118B8146829814CC588480A4814CC88880F8443200101262C246642191128D2429011A68948A012C32884D823288E0516292C5B14492244B41261115941428C41F61929412A12932541B389341C8822674E80213B81994C82A8194884348A842448E442AF4D9384002382818442C6141278141
+:809380002D18AD8442182698146D928E548721869144921816140AD9E18834448465988244134C785492182A44481882839122198286C1986CE1536441981018082146C44421AFC50D2B4341807444D881123421422AC4142229A4128148844C66843285413E287026828B911288121181119604898884C12418958438143088CC082784FD
+:80940000812840084C12F814A896688263F1C1AB40844144888291488400C01824C2482828211E2424426014A6810819628232481223140628284391241A382482830282448082886888288AE14128B524052888428FC7052B614143C32862D44D4A4D2B8D128997184AB112E481F818462A9CEE4E168F5BD424B49194145B34A66B423964
+:809480007271C82C12ED5214E99446478832221A32141A9A268743A6E24221A842888AB19A7419C4983AE8888128C51EA648FC48844CF4D4E950241200C9A12118124290828C42820443C11226083281848180588490528B28200982184694924483428C318189012661C889C128248A44047014D848A2424CA14B28F0776630428414708C
+:809500004261211442AD236296632C18E044A84244872486423884203888200226D816B98241C41416B411128A68891E884C489E84C08180C882C032144FA4A282C280084AA88180785E04122B12854288028003844344085D9884103225904123042E1160261311080013EA845282434C314411E014021024611244111C5A184388711837
+:80958000C414421888444022A41E00441064924992682904C634238CE4881418829418C21CA41819E34807AE442B288C94114C042A9828A2202AA982800B6AC8116A49A886132804C282828483228862482841C2A748CF730F00A02100402404842E8480024148803164508181C01141200116081486518244844904484448814189018BAB
+:80960000124800432208424088C1C81228C74F20041424121218181C028800218305218923829288204841228142814225D1A4411401534108921991A29122121091881311430182801818048245B8B20A61302C4448414841814D18A02143E144C88236244654814418442485541A8584514881480089C1141840444C0484441184002983
+:809680004218E424084614180810381CF08A3580C312608184AD42854188052C41440821841E8135821142011906184081542284460146013562841912111108205141121818828C012200123842368402FF1C0E5034C02160922285031C8824411493212D8881124A9898848C08148800166118142584682230A41B1292418C32A1153251
+:80970000A182823635881502249424408C028A8304E08302262AC262C012421829021A124886AC248041028C42229221212218222A28222362886018002508682001D04844C4482287418006418C820A430190464AF2E1B3242F21D1827328518ABF96E586E292D4A8E412D228D598A9C68D44442CB46A64141E555A7611F2482197521F91
+:809780002252A9A6F219189D2115DC83D229F125CD4729CCB195D1D1515489ED817241F11C179B3853F1841CDF12C1951F29F3898987395B488F79F484888FC1B488AC19CB82CE848BDCEAB882FA458BE0463411357C15C2225D461B145F41F2484A1745CE468B1869789FD24AFA14323EC25D22A6D244F2A31449E318FCA4211714411280
+:809800004F11C1912FD21AF8288148142B813B911D29CD844F881E9182A59981C45F8914B87252838D816BA2A7426B24628C48A85147C21E5E47C6EF950B2847622CE24223B11AF11A222B1639F1A4A81B212FA1E2ADE194EC9C61C8AD1CAF86D89BF9EAD81E88CE8816E844D882FA62242AF16862B6A6499AE2C4F39EA2AF66FA8422EA12
+:809880007694B4A16143AEE84714AEE48F11A6E9282EC918F82D1417841AA28A45A8229E144B22124189B41C0F5014501450145014124503262241244134114411641A44B41154484885845448218198B0241DB824054712A012844F260143462806464348022C012C0389028110F8A881E021F5141E3E1A4F62F6486A6D2687144F64B257
+:809900004AF39C349E9A2B912F82F941817B982B3BFFB8F9BEBE2F29FDB33A7F3DF9EC2CAAF8F6C51F16FAE4343E391F36F7E763BFBBF86B6913F85678DE5B2F79F3D2D14B3C8F89B9A9F849C81F18DA59FC81F51BD4DF54F265791F16EE44F111559F197318E8A8F126462B118782128F82B324FB2CA8FF2247F252122F85F73833AB72BA
+:8099800087346F66B262F24E3CAF16F7BCB4FEFF2F29FDD2F89F1CF8CFF8FE72FFBBFFB4DEAFADFDF3BA7FBFFBE6AC8F8EFCE6F6BFAEF8E6943E391F27FED7F31F3BFAB79CDECD2F4BBB94F9B6BB3F5DBE94FF9C9C9BBBDEE61F4CFE89E94F88AEDCDF46FA3CBE9BB2CEB6CDCDDFB8FA18848D9EEF66BC32F9A4944BDAEFC4A4A26B13BFF5
+:809A0000F9071AD555F4191ADD27DD2E7D27FF54D275F2571C7F5BFFDB86AF2EF3DAFA5F78F8DD98FFDEF3FEFAEFE7F2F6B67FEFFB97F1EFCAFAC4C4CFFAFBA5C5CFC2FA747DDFF3F3F7F3BFBAFAFFFD9E234FA9EBA8F3D2FF2F19F8B4F48FC9FBBD94DF89F8E7E3BF58F8E1B59FCCFB99F11FDAF93323AF8DFB13D7BF15DDEE7186F8F431
+:809A8000F48AF8283C8FCDFDAE2C4B7FCF86FF73D5246F65D77FF63F37FF56F26D67FFF7F64F6CFFD1F75F5DFF59FDFBFBAFABF7DADAFF78B8FFFDBD37EFAFFFFE9EEFD7F1E7BE7F9BFFB4BCCFFBFBECEFDFFAFE3EAC4FD7F7BD3EFFBFFFABAA7FCBFBF4EEEFEFFFBEBE6F7FFFB2B55F5BFB98ACDF4BFBFDEEFFFBFBBBBD4FCFFAF8BCDFE7
+:809B000042F6B8BEBF36F7CE9AEDCFFFB6FCAE96EF88F87C748F8AFA2CBCCF82FFDCDC8FAFFB6CF8BF15042A012A01228426C2482284A0482484C048108102281301801202201484120441100400004D11122008840080048220088220E87C0261116552814F2C31115041429674226181214874F048B412AD8619D44839A4184788145561
+:809B800058181F22718894148E218492251A8129F12881174860C8A113186841263111A93884256182AF4408608146741498282E413FD9056D421F41522C1F41324E1F41724ED241F24E121D24AF26B911B24A19F54A9743F34A9553F24A975783AF54F935488F54F9244A8F54F8254A87555FA27498F5224A875D4DCA8F4DD2A4FDD1249C
+:809C00004D521F497228F3912CC3F4916CEB141FC8F64A111D6CAF14D981F64A915F81F44A954783AB944783AB944782AD914F8294984FA2F4B45CD0A2A4618D421A12EA41764AC224A5C2648F66B91192B88A764A23D31AB925D422B931A4947B432B944FA2E514D8A5ADA51D489AF2224AC6D53628DDA479D1D824A1492E431F48324C79
+:809C80001B494B148AF44A114CF442951F48B648B194E45432B44243F142844129F92648984F22E5E20184800400000000000000000012000000000000108404481008240014000000220000F0B5B5208461818481482E583AB419B214F44228218492812694394F815E25884F11C238608800112E184A8133425062414B142B1223382652
+:809D000014D13241442A71D802168168298C998A2E188911F486628C054E2824CF51026B21333222143D54ED12512563442D8192528A51842F183199C60483B868A148C843C821A6048C821492858D94C98181B22118D441419A3C8AD184AC12836D2414893A888911458131844AE8818AA128485C78C4D8AE0E4B415E288C52295375521A
+:809D80007471D81276586475C72E18B28817898F42F915288B52937812E829E28A614896282818E8A184218318D1226142CBC2324B8129B227D54898BC1634DC4E124E134B828E188B924D119729813E888B148863DDA229B448D224F897AF70221291121048182671222388811478141812A1844348A44A46850413C224C02122425D8256
+:809E000087454D184430116512114CC811482220628881112018224924D84823A224C0848C94C1001D2421120000E041129821834448F231484A618114128884A048102101448416443A18C8286901C54308824364482724922E911E48409818924447814A22823834812AB4C941B142022A912E83321E1E288D1415784831C24A31139012
+:809E8000538676217422B4A8D11C762871F4514845688C8C628417A589C5962CB2442328F342942E811A88E818F2922DA7438973217834784449C88289E811748114F4D2288A36844F81944C998414FCA355006432CB218722CC816141841F44828C125928126E8925D5847188E15431894F8842E4C8A4841412899518CCC9142E528381D9
+:809F0000AC4A388A51492E8897218B12488C2A153C298A11921185C4844B83838AF624484176048CF48897342AC4211002C02881118311EA31A414D021C4146E12281AC228221B14814098288354214604235286883662615C088835C2A486343C15762C32D19889648846C8911692484B414C2891C885314843622114183618984C4B4254
+:809F8000948E245C4288C48245E8289218A74186A481902414834182716843A6524F1822628149A5481674890644CB824BC29217C884274244297258E442645D1E228D82844D2881445C3428C14308842D88DF844B322840A441886721182443D422411824B1A4846412E1CC25E8C69125ECC141409818834C248802B021E184091602C1F5
+:80A000001A644294E0A1846A88851481C5C11F254AA4212C01421263A242F083E3D041544213812289C288252803121903008C01148C05804C88281804812D2481AF12912842282601122C22A2144AA11E40111242081604428C58184B18230148490125477331E2423118C3A1612D3D65D836E243944286D81821E1C87516681A2B81530B
+:80A08000A4426A71318CDD81758822B82AC4298D24CCB218368A1E28EE148B694D219E24236948A9FB28528F46E1216CA28D54AB4A2F9964B346B254B84D39461E8C811E82C321C1644384F8DB81904450142841A0128481122D12282C084247818564818D94550845081B42851464442492415E2141812184C0248B1215141431241AE408
+:80A100001248049098150884284B41AD24484C088943F8D3D5602486C218902217814C41011F848991822118983888889688A48180988244886A314592133888304486241854412E88130C841308821941381881C014A21252C014008823F86E1B80014180912242811C1102704C41014260342430481812844E82222450A4121489612222
+:80A18000124E164A223812872226F2912440062CCAA22C0A18214824888B422E8249B2249928484F1B48028A06428C0181208462244042426214254951288551811C52811C4444414201960D26841404211290541A1258C1B8832108A082414C6A41414BA14B189882C816A4181F9A0E80C122190110544800294A81196844181860144535
+:80A20000124408405882148845236441429692484A826122A2248148002E44447846A441804482040049012149F28FD820B31822018D222E48C014228903480088608621400822381E2480B22191149941681815C8841AC484901241A2102411044B21C01849A4814623022248446812C826F11C5E002460A342121E2822162208B2C18274
+:80A28000207812B1A8C5218219A21882823812818022E2449282289C084C885218448D85E08288821D68584C0A10684440842282110444A736400C11401164144221241120012581022448122180140280044810884408800612A100002024546212272420084220442804483FF10D42828480280C4A2104182C61241344033018189E21F4
+:80A3000012850194501810A884408262111412188115141134114C810119044241133411E04A042741202882015FD24C72210A2C060028302880CA4488898AC4812E84212A18B42488D892028F120988722248628644092886C885481282822CA2488722848144886B28242C81018682840469048FED0723F1B8228456E385EAC2B81C6136
+:80A38000D42AE1219B312D814F44958A17142DA21F86F3228885F2188C17D53ADB28F12188860D1B2711C57911E4B8B1E8C26449B944E26A43D288F254128FAA52988AA212AE1E2E1449D222E24441E21161414AA2428F42B444B3D4D444E41585F474D1242E422B483F21912885724851C18B31AF3124B812E829F28A82822F2834118B58
+:80A40000881F2CE58338812B9A93E8883C84CB86B9CA492F87F521C42B922AD8C1F8949A3FCDA48B2BC55FDAD124F1A8AD2D8413F938849E244AFADCE18FACE88238166B5530446F41BC44F344B244CCA3378F48FA2494CFE8094E3518CB2229B123B112A76649A424AF92E42AA45416F9114B4B81EE51277187113F1CF72653C942F931EC
+:80A4800021A7152C62932C7184E52DF3C849DF4496568356186C15A4A13F5B984153F164945D1B4DC28B4115BA31B4D8E5A8FE8184FF6EF4A2F22CE1493892BEC22AA888412B2C8F870317442A51412352412312312217812220023014281A84A241284828484CD221844282C282282C014F220100619012B06201430220084041C82482A1
+:80A50000448428844E248446F436E7144F5CF6352F85FE15575DE51F31F94E266D158D39AFA6F383A125F3F2875D8F7F58FA16B3DE954E41AEDBED9E3FBEF928E81F1BB956F4E38AAFACF13B49CD887FBBF91E1E7FFA7889FCE2EA6FFEFEECE62F6DF4C397AB99DF79F9F1717F4BFA6326AFABFF121A7D27FFBCF81A122F23D171F1473538
+:80A580008F8AEA2647F2621BF5FE2A8ECFC6E3C27368F94762342F35F523639FF153EECF67FE6B237F35D41664113F3EF2D2942F1CF1E2B7BFB8F8C3E15F37F2323417188FA9FD8B8A7FCDF9ABE81BDC2F2CE58CF868AB2F32F25E5F8F9DFCDCDFAFB8FCC8CB4F49FAF4B5EFCFEF4CFEB5FD9EBC1F1BFFF9FD3F1EFE72B2EFEBF67E5EFF17
+:80A600007DFADAEEAFA3FBC2F26F74FC56D5CF83FE34364F21F9F69EEFE2FB46C66BF6EEF8EF8DFDDFF290613E62DFB2F2383EAD6AEFCBF34F6D4F64F74B7A8F2EFBD3B53F1CFAD3E32DD22F2CFD74B3EE9D2F3FFFEADBEFE6FEA3C12BA29F9FFDEDF14F1AEC22FE394BEFC6F6BD9DCFE6F7FD8DA7DD4F4FFFC8CE4FEEFEF6663F79BDBAA3
+:80A68000F9BF97BFBFF7FDEE9FCEFABEFCABFDFF54F66BAFAFA5FDD2B23F74F94F9D4F4CEA2EFB74B6ABD87FC1F5A2C46F44FFA8F44FC6C5D9247F6FF73333CFA1F31A3EBF97F675374FC7E626F77B789F1EBAF2FBF3B17F3DDFBBFDE7D67F37FBF2B63FBEFEFADAFFA7FFB9D89F83FBA1B25F5AFAADCFAF92F63231CFD7F7B8DBEFDBF74D
+:80A70000BAC9AF8FF61CEEFFCDFDF6FC4F6DF3BFB68FE1FBEDA78F6BF1BD978F8DFBAE6CEF4EF2CFA5BF9CFA7AFA2F2DDD77F94E9D4BA46F66FE74F2FF4FFFF6FCEFCEFE54F48F6EFFE4F9F7ECC011C011C011004834481440A24124005028504812000083048384080098000084408841084880440224488004480000DF420748282562C8
+:80A780008862841C71110C19A21490181242122C42A814901880421828028C418469448CC12445A8244B12123CE841024C32268489E141A2828429A8414C084C23C384B24634344A18F437BFF022421F41D22AF11124A7161F41724AF11124AF16D141F24A9119B24A3915AB9453F34AB153F342915F82F442915F82E414FB244A4E815F68
+:80A80000A2E411F2254A96F125CA96F5245A9E244D5A1F49F224421F49522C1F49B26CF19164EF16F18164EB141F48B24A9921AB9455F84A9443F24AB443F3429447822F44FB24484EB44FAAF475DB7022D141F628521741A7161F41726A71117462F1812CAF5629F948B14B29AF1438B4ADA14B494EA14F88F442B1678A4EB11FA8E1445B
+:80A88000FB248A1EA14D4A1E21ACEC18F224DAC6C55A1F89F224D81F49B428A4288F32B981F42C921F48F468928AF248151B21ABB48CF242914788AF6433344EA6844ADB86F442B44F8AF562CC0082000020030044820000000010020000002440010080840241800100000000000040018D4D8081514A3845414854181693888611FA1130
+:80A9000088928CC8122E1813718421A284131214818A54921B143331854C32822931244B14121425722492114371A411E8C1B811048D314814874480326444818289E54493441D8170447182A412E1AC26C5682C688449A3419248C116B381C4442C327889F821188B1C6A31884C44281698448B2493F11824CB484A28F242A14963838DDF
+:80A98000114D284E284E181E45624788182CCC9825AC184B242D1C84CE1249BA38C48494F03DBDF04112C226CE1C4F14925ACB428D8216F914884F2895187698189348E181C6133EC983FAB84387154112C2836C8487111D14937C34B1A8F1449846957C13C5272E182D7236F948341FC97211648E4991141CF2B24830D42E44296284494C
+:80AA0000EDC2682EC3D11467415908411694122881001146824221C88143C8129A5442224400A24A7381C824241CC2424243125826A082B0222801151C04428C94141F88049E48245518088D1443420289A1488148CF720A008280080088000000000000000000000000000000000000000010010011400170E745B2220459412493281447
+:80AA8000461444F823119A16C88823C4424129E123A818541A88628814481546E814BA1964882181584E262B829015441A38288E21424952E2221AE53808218C9414D2268258421688B388F4FEF8F022623015CC3528A88714646528A1121F18068C582283B42437922C082685E281B1894C35442E228C71589141842318C8144B442EA288
+:80AB00002159413C388A4A61444116B82281C6838221844B338AD42208441AC12883F8C9E70020088008800800000000000000000000000000000000000000001100100114009772E02201614C421131288483A22121112552813412208802A845884288420821288446C1422849A121882860414A41140C2E12B02801904420E844034A88
+:80AB8000220143C824846F19491341E18251218936321E444F14E27134C976A11A5E884E165E8449B436EC45725478C8D414A51E9243DC2174446283CB164B944B874F22694218221534762F21A8122972222EA2C2493AC449227862DA2829C89462852264484EA84F8D32188BC1281FD5021121C9415412239278C97421243D52922D129F
+:80AC0000168268452A21F42844422A852152841D4246EA219248B24B844F337C6402121363628A2242C67840084F24CA2488264898868604CF2402228E488C4D3C28841FD24CA221112392216698114113B248D11A922113B248D849C455212F48B4148A7188D414F88468988A844244C83443C43800384942B442C9122CA1216449B264FE
+:80AC8000E84822018933422B1848182A8C81B4442863428A31D42CE2D84161424D48C31288944A10D481E121A412430125CC268D2489E58211C21427234CA841308C1D948CF51248271C4991224CB4898182628863C6942887414981032122144B14388044588220C214812C1824F6833C80E4810428284C4382412412912482148A12710C
+:80AD00002224B4241482C8122887242AA4D240A42148C96881176441496152421118C048248C222264448902EA014084C2442449C41200AFD6012C011127110085840285348891A3258C810944122A44384844860410241214022042428201288122400C4781418C02A54234144C02CB14232128034E28885F8C044C371426952BC078849E
+:80AD80004C91154F8491818C735AD2586C28182B426E1A4CF434421E2856B43464648DC41D44482FC4F1813423F5268889A138442B12271226B421391838184CC1228C417428C13287214C11C42CC0766614B42A85D984622EEF1B0F24102861264445821288B22A1181084C71A5D84811C432806888608828228741262214044974483422
+:80AE000022C44D92108412CC4C872284438226C448A0484A01A5448821490442F0B2820041004622226111807232110220252186085289B8840200440040E4218884B8446242228198824CB2A421112481829282200880084B84682F41C8A884F0E29B141A064C81A2214210B8445114422622A418843314B2442134A52C018314410448B0
+:80AE800030864844448183D1226C8860421604212840048880A821211A9814888D124C18284502CF3A0D8082022C6141352844088821181D4449282241880B41888200282800882324C2141982B142819214C02281560410044A0248984B124468240082888CE2D80C4418118741206444216902811584880141A22312A281A0141260487C
+:80AF0000249843A414180046014860C1488448008712818045024D380010342281002334447727149212C04487448001428E144A82A1947041228E3844830C006682082842672196128491158443614948A2A02492449041438384880A214D22288888218AA6858489D212F8D7E30000404141C818848C022E44256988884144384921A439
+:80AF80005222828081E18108002442471300A62401122021082144280000204238C8C0242200EF2D0B1CC22D4C4181C22850141460199C08608183814101001C1412C4481110118C1411C8812C04004800A02422463818422400928522013018211062844F6F06008D211A02842944A2128860814185422438462400CA02268421684C28E5
+:80B000001A0C124E84220022444400C822414B142228214298411082B244034C8102288E24EF610684814846584143111102124186041D24404802222614941429A18418244D8260248821601485011608488E4412822908608884160429B224148414220342482B85F0D3FD1412C74A45A436243F24714A56128B114F48098F1498984EF7
+:80B08000853D885B134B262220AB236B658AAC818AE412B21291C26FEDA5444AF157245E48CF131544E4C2D344A1853E424C7824344145A4148B626230CC5A981E1E1446A4218C742CE481D2180DDF9B042A8183433C78CF43E211E5A4B143024FA4EB837251B41571D4F68A8C1A7846B5C693954BCC2E948F253284884F49E486725401CC
+:80B100002F29F99482844CCA242F24BFD639882A08CA9A362B1436F45218CF88E225E821CE821A718466416E822CF82A928F45BA1229E4A6D246FCB37DF0412417819713DB415D758C548197414FC2F438231F1BF483122B48878889E524F682568F29E783EC44D64861182E141954C4246CC4168845D452A442CB1817A4B6A4624321F17D
+:80B180008C744931B89ADE1CB62862422328B88251622AA32A6B28CB6BCE4C6F2AA16C8BCA828FAEF2E7E10045014008100420098444124048658154164861814645484548C19814450841D0140118100CC14800414881488150484844400220011DA2F044444FC5F11C1CDD448FA4F44B4AA5DAAAF14A488F84FCC85AAFA6F74A4CCFEC38
+:80B20000FC4EFC1F84FC5849FFF6F4AFCDCD5D55FFADB99F18FD188155F18D1FFFF5D4ECDC737899FB9898449E8C8F82F2B5371F19E38C7BA8B834F6282887C32B429FF3F37B7D3EBE2B938F8AF3BA984D84CD8CEF8CA4EECFA8F8ECCC8FADFDB6FA8F87648A6F4BE8CB4FF154544FC1F71C1DDFC1F54141BFB5F75A53E5F651511F4CFDE8
+:80B28000C9FEBFB4EF8EFEC4CE7FDDFF47D88FB4FD7E5E6F4EFDC4D55D1FED888B8B8D9195F94CCE67657F74F59F8FDFFDF89ADC2F11F588AC8FE7F3BB6F1F1DE58B7FA8FCA8EC3EB22F4BFA3AE85F73F75B598FE5FF36948F88F19ABE8D8A4CFAE642AFCAFAA4A2CFEEFCDEFA6F8FFF5A488AF8A6969FDD42D155F414548FD1F11D148FA9
+:80B30000E3F37B3AAFA4F44B53AF85F591819F7DFDAA223F1DF79D9FAFE8F94B8AAF9DF44EAE6F41FD45D4CF59F8A6F84FC8BD45F58C896CF856467F55F48C9C9E821F1CFCC8CD8FC9F8A8884FEFAB1C8A2DFBBC284B6E4F4BB2E2F7793FAFC7F6383EAFE5B9A2BB925B8E6B886F4CAEEEEFE1F8BE9CAF87F9366CAF8F3F882E924BB714BA
+:80B380005AF51D35DD1DDFC5F27169BFB7F65E4FF5FF5B599DB81F2CF753F39F9DFFCDCF7FD7FD7FDA2F3DFD37B7AF86FD65D4CF19FD25F94FCBBDC5FC84819FF6745EFE56567F7579DEFEC7C5EF89F9DCBCCFEFFBB6FEFAFFB8B4C7CB4F4FFB74F2EFCBFA7AF85F77F77E48CFE6F64ACE2B3AEFADFD42422F4AF9EEEEAFCEFF76266FEFAB
+:80B40000FDFEFE6FCFFFF8F8AEA2AEC2DEF110044302450218844302248420480428928D24D04822018242D048124294120081002220028884881E48141A2482040000102811088B24F0546130A612108181324A1311FA9144F01128881240D84A09219280D4480A890880054DCA83A41286D42425898492141628E2413424004480162269
+:80B48000C18243014006444828343F680C4F22F5112485F2112487241F41324A1D24AF24F19124AF269921AB9453F14A9443F24A9743F3429547832D954F8BC4914FA2C4814FA264514FA264194FA26D596D4A9E244D5A1F49D222F59124CD121F49324C1F49324E1F48B64ED141B24A9961AB9451AB9443F24A9443F242B64782AB944FE1
+:80B500008284F9244A5A034F22C54C2CF1116447241B61E7141B21AD121F49726AD641F44AB25B61AF54B834F44A954B438F54F83448AD856F8B54182E1A8D954FA2FC18854FA254184FA27D98D5B6CC244FA26D886D521B68CD921FC9766C72919C1E1FC8B26CD1C1E244F181242DA219F2429443DA623BA42DA6478A8BA46F8A84F8A49D
+:80B580005A8FBD0E8480040000000082000000400400008002812042014008000000000080120100000000BF640E30122D32241C21344215B844E128A5241628D9A121C1844C71316851C32972488181C22823C2124E228724A87890884BA4185D42D014D863B92438C246584A2522161228C5484CF524184E242F42C4C42260424B842296
+:80B600007F6C4FC2448E2415D44142B42451212C0573C2982B848523C8C48B12A3D442ECA2C863CB1849B284D414348291611C813854CD829E22433712E68629831288342898788AF618841322038E142948028C512AC3D48234D82E11CF24581480E446B114722267514995412143B476F81CA28C3DB83CA118CD92CC64531B821BE1B666
+:80B680006A16444B43278827BA164471822AEC4A94118B184CF38864174123647A8AE1222424942E4AF8628C6932284A91144B2DC12762CB34E3C4248D42C9BB24B158FA95B9502650120028211F81941211230434866844222CE188D46851842554844A198102B02225B42431182F22E84492C21229AC2150C169E88892981A34221214D7
+:80B7000012E088142223042CC84821484A5824BF9F031410022C01AB141141124E1190121181821041A2411882428C0451811D1A81002C2D812C11C62449496822107A11D42869414AE18144022D831E4829A84821431A48784824F2C63F341E26124D3983F248248C7124721CE281C448283E898D8296BC44E1D3F414AACCF811C4CF18C8
+:80B78000B2CEF238414D294F12F84A242E484F1122C2968B1C4D53C9F284688D3643A6861E811538821FC1B458E8487328A2248B2884A28E588E481AE442F828464D214C8E65424A212BF4D7CFD0628111823264ACC114A5848191518B281886B448D118382C448E42871147822E9185F484298F44420D162B91125CF1528E8D44E26B41FD
+:80B800004E84471391296852F014288F51A2852DA812C298883D8243256E2C4E842847828CC4984AF29B5EC021F01429818C11326813714A344828137182981B444B438AD18338154EA42B588CC461482162DB21284D88C68884A21A168C3222881E84848F24B1C831822489921483343889D482A4148B82A59625225E8420E14244F2BB24
+:80B8800078244C917241CD2318400450A43247841A6A9816A4144F8248921815C81A8CC911C0142A681318FF24185C421E4411568812B84431846081205A128C6A212E4843912248243E888422AB481604AC89C5184FB1450184462121348336688187225210042E1484652881844C74828684E29104C9182A04481426B88B021D12914A3E
+:80B90000122838422E118D442C064B2C10A429452104B042A11221C14E2600DF2A0913420410C8C421244822481C41280400CC82228202C3644282424261A02198E0410460256011C912D46A88C1141A0419484828C818462214044E281A02C4481F8A47D141D24202C5924825E6822131286B522B438D1112993414CCB12CF128428BC32A
+:80B980008CB21CBA18ECC471219C842E4E9B1467211538482F11383C1A2AF521121E414CF114884782C7219B928B587C35882ADC82C61A837841F418428B85481E422AF8221C1E288CFF184483F4C88990121245B11182914141842344084889389485828418045121C02148002848C6B42641C442874484408242213842446722286A61F9
+:80BA0000411C08188220522A43B2488144140414BEBE00472A450881109144441282222448C01812492CC242004A0180941283418168488810A44942491558842688031811A48212688A447112A886418C71840A438E21F82F8F10041100182483011148148140826818004B184145084698822608484026311486A42190228902424C44DF
+:80BA8000381590182384641211282002C02110981810F48A7D14288260412813922417A21648C234901225C488412648B81888B448A982228210221294188628E44834784974224C2248E4884274841868C844382C01124518C8488F418222083A0422148F43440223C1111114C0184224854429880858222182254208428DC40000882B16
+:80BB000048230584C01840084880024AC132484483429288424A512400482B1200848CF277D3001844444311011884484083618C8248203414824C028244461C4D648300AC8841242898242D84882B812C89AC8448208AE12CC14212A21860888022614180F8DECE204482A2218368844880820A8CC444418B411A825C432E412E15869110
+:80BB80004424422E111246012A782482022F1249A8429038221544114118A1281D4C1180B28502418118278743988A89E84894261FF20C49912110010014311586844301212D8829C11210088421A018282123941484006022C01810622220322230122182204842242828041144482185F2F17DC0228216081F41B2C4D14A0218839428B4
+:80BC000096C888814448431208802129E3A8334829644340247418944248203114902880142422C8488289641A1212890416B484061849846256F0D669249C118416A884268861424E228886C14411A81044A81288242A845242144B12E084482422A1421548B18114648CB0840427291882284CCA1222A544982249612A481213182A02B0
+:80BC80002981F4FD582426F19514AD185D21AE1C8483B321741BD22D7278F8A83145D1C8D44A38168E24AFEDF424916AF532154B665E62CF257862D984F25C3183FCB2822EC84F61D421E4457ED4638C18C72A8332915FE4B285E285B5C178FC7B71F252A82D11AFB636D1CF74E828638616B431EC48A114CBAA4D4743F883A5C05686625C
+:80BD000012C4C5F151C52F74F154342AE29C94421AB8D9918496EAC8F9599847124AD2ACB8C4EA41C88886D82CFE7242214382768CE68AF3C88C4362421A7972C49847C88D8C2B592D846B282E224CDF4E34215E221AD844FC32188F87B81AB24CD52AF2348987425E5C7E918DE28F544FB116B222F215241AB151B228D38452B84F84F1A8
+:80BD800012841F58FA414A2D8A23AC548F26362298278927598C7488F8A4141B428654182E461E5C5D1C5AB14AB816E188D188FF26644DE22F41C6A24F22A6828F87F12881CB11218EB88F28F5A1888A911A4845F484D4AAEA8CD12AF216E8C02826FCADAC20742401224822482248432228A249241A8482C4261B488D2213D14822B948C4
+:80BE0000328128118D242998289880180880012541D83441C88140210886482108008A4421282438489F674C7345766457441FC17519FF331D3C752AD4FFF31F9F6B991F32F9A3C14F49F1CA6C4F85FB9CD66DA66F68DCEEF12244CFC4F644D43BC44FAAF88C6C4E426FE4FCA616AFA4F4E2CE27454F67FE4A4B2F62F242C66F62FA1A18BC
+:80BE80004FC3EE259CA4DFA5BDE6F449426CF8FEF2BF93F9FAC94B55BF84B438B354F17CBEBFACFF3A188D18CF87F19818AFF7F2CD52345F42F2747C4F41D2D5F4292BFFD2F7243BEF42D3EEF19EDE2F53FBA9BBBF12FB9C14AFCCF2F4B8CF4BFB951F6F69F987976F6CFDE6E4CFC2F7D7D6ED8ADFB6FE76726FE5FC46D62BD567E5BFDDBE
+:80BF0000E467F726636FE5F752E44DC48FC3B93AFB49C78F47FE15326BEFDFEDFC429AFF76FF7BDB2F77F9D442BF86F6787CCFC7F33C9E3F87FD3F1CEFAFF56E78CFC1F13E1E3FC94FF345666F72F625251FD3F3596FBFD3F34873BF73F25F7BDFF9F29BAFAF3AF3DAE86FC1F1DA54CF2FFBFEDE6F6AFB67D7EFC2F1B5C5EFC7F674D49FDE
+:80BF80008EF7A58BCFE27E2BF37E7E6F2BF16A4E2FEEFD52414F6FFECA5A2E7E2F22FF32F2AF81F93FADAFA5FC2DA9DFE3FBE777BF2DDD71F8FAF6BF93F9DAF91F14F5CFCE8F23B166F13C9EEFEDFDFAD8CFC3F57E7C8F89FD687E8774345F27F73F776F41F3452D9FB7F77F7DCFB6F76F77FF36F7FFEFAFBFF2ABB3BFADF7D65EAFCFF539
+:80C00000FCEACFEFFFE7EFBFBFF56FFFFFD7FFFAECCFEFFFEDFEF7BADFB6F63F33EFCBF6FCDCCFCEFEF6FEAFDDF4F8FEEFACFD54766F45FE1496AFC3F91F9DFF74F46FE7FFE7FFEFFFFFEDFDC7BFBF7EFFFBFBEFBDFFDDCFFFECFC787EEFC7FBFC9EEFCFFDFEDCEF4FFDE6F44F69FDECDF2F1801450118841400844192149648618124007C
+:80C0800016482601400400004429010020240241B0240922484100004864C02450481A84229128E0DC054302ED11A01211144C824124568130144A78A48851812958814E8496B848728112B821B4488241D4A40C4DD8524D881A928412888C726821F8481192348E488D131F88D428014E1184889E488D2641282E484C7224FAEE89F026CB
+:80C10000431F41522C1FC132681F41726EF11124EB141F48B26AB991B24A3915AF44B925F44AB743FA4A974783AF14F9B4488F54FBA44A8F14F8264A8F11F2255A875D6FA27C98F522DA8F49D2A4FD91242CFD91248D121F49324C1FC9B64AF1812CAF24F9916CAF24F98168AF145985AB944F82F44A94478A2F24F924482F14F9344889AC
+:80C18000F9244A5F7E0367B21B61CF22741138241D6CCF12B111B624F18148AF46F98124899A618F44B821D44AAB485C9B444EA12B4A4EA54B184EA54FA2EC519A51DE2449EC18F222C95E2449FD9128D81F4896481F49324C1B6867241D248F26F991648F66E949F442A15B28AB143AF44A8443CB824F8B24F4B6488B14AAF119E520281E
+:80C20000280100840000400200000000810000004100000000A088000082008002008042024114F0D8AB70160285D114826114498251128B2C2A61288B8143041789541B961E24A68435448F1671814E4AA224255142E912B442084D884A11D424EA81C8389CE8424923A3822F22E131A61A94CC658527EE3AF418642B684C92328B28CA1B
+:80C280007224F896F18034A16C6221157C9AD418352443534188830483315C43B418184E784221B818388442AE44479484478652821E884F8231B45227289A361222444C44A2428D848D1486442884886818188119981C8B1444149C81F813AAA041CE2126342616B6C5D11881F323144EA949DA283CA84A81B11C7C81C444382742244B0F
+:80C300001C1937944FA2BC84B42AD412B4167422E888F111641AC8148F25C8764EA4A668C25784B63421A3B184E342B924B5124A98541BE1A7472B145AE28AA1436C32211C33B48FDD0D6502853111A5413864444084011845784814D12871B158481B484A49D848D8A104150847829084442D884CC2CA80289112128830428E248502A5E5
+:80C3800081C48186182898285788274445981286B84848B8B20B400428200180018911110800002145082608481C52840000160412000088440042108202110010042004182E48B024F43341C012190344814483C4269149223C2818B048C1242149A2842812437414110C2C26C1642183166224A2482F512AB5140A88848A032015810D18
+:80C400001241898DF212482218851412C484818FC20DE041024C4268414243C211448B1426698120440426225C84188946C44C11AC044F22042841421A42C2114AC1244044A883429012204D8111A48180011A442AB128C484C46FAB0912250100104842288208008C811212042840641180C22412008394123082422E8480298808008032
+:80C48000641200008CC4268924024410044AB2180A0049428811810140180884144488412901001181001124002AC12C4C712288614480028441004714002001182064420040482454844FD20DC012194154248962426F9431188084A1418C01448C8182C81C43818894284226726488C174412344A84141182388C134901889E14813C216
+:80C5000028890A8011222409A42A8481212382F851948002100200106425001002180044601443010042000080028602111011162206181880046098118116284148A4420022CF220C221245114E8662412D484381344270583211E048412E231884351500481C4622913449514ACD321A34842514A1121762412781424CCA4581884812A2
+:80C58000128D811334D847818D1226C81489E64182644AEB4F00B022011815287211146881811240480418406481548283648240F248242024A2249028185229081884411E282C21A1128C0240220180024280012884CFB2050000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000073
+:80C6000000000000000000000000000000000000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000015
+:80C68000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40FDC
+:80C700000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FF4E
+:80C78000E40F21002002400200000000000000000000440000000000211800862801004002000000F0DC94244C42C224A432426484444A0889082001411B1400203124824011244482282401805441458228421438A44082818208584088824914E284024904C739004414401418012611522100AB815189612889C828884D48D08104473D
+:80C8000026400883422492A2424C422203174185E2380219E18441241411082117418282842242418828F081517022449624843664844542084A489288F0821854844CB8433128824628716128A84214858464224C28248184622419438699282748845B1A8145A21426814882951486884A4894424E288242F0C5CB004001214001473221
+:80C8800040010018126088004440044421008180B2220841100445012603A041004008400120890244C024F055129016C0125024008460812A41084308E04468818553844C51844A02502414002C054812296C41222841114304C0688182181B418800D048028100208474544DC1621E2213C2288B1287114D311D144E21490A3A94888DAE
+:80C900004127C82FEB44C36449A61A46E816D949D11474262A36146B4147816B828F22E9429888CC81B885311489F326888B828D859F4AE141E8416E47A82CA8141D4C29D5C2495284AE441243B78404A6F843D92444283483B21882713401461104804869C8CC51218B61BC84311C8E289C01260425026CA1388810A89443C1844CC1187C
+:80C98000218348C8212E5C432A8B89A1415C1462898546C828121E244C0C68AF51017223313210541AD09421628B1AB23844E868042BC22F44183424CC2A9455496674846B2417414E148443F42A124BC296524882368192241FC2B82494858E1C824E184C84D2218C48A841252442C4C48004488D82BF864AA134841724894244140425BF
+:80CA00004866412432A71185948484182A0126C224856485B044D821311448421150C1841AF28E114E2451A245280E84AE1120E3826148C130424F88E121088093328E448CE68F0D21482E14128CB11842D88441044484A24830228A0486415868121212C0898314D81428323284198842882624120240C864B014040080311821282818D5
+:80CA8000822118B04109902281114221601218C02822008001648432188100A912820221128032224144301218819018281229040010428802418843C24842002FF749911270117C3219783248D8C1D28241942A26285883A449C948648BA136D848F114284961A48C724A75617814F882413E4213D128C2A88D2426F46215222CE3820811
+:80CB0000AA048B5239830583C182C4167828B214E86289B814B228A5434B498CF21BEBE0228422024B1444411241800129A14144228812148002810020114204284004122C68414501C1163828444A48E44281828242A2418180028800585F2F0229110835A4146240C828A8402824081834890412885A821122A81210224124312230189B
+:80CB800044128C38885048411412221349014A088088C438228C2248348423FC44886084324C2201148B24411D42308B424441223481D0284181014842941144308A001AC4282065821428C41522847422C41281184C088C1444362460244398484860821F790B24009029102214411C8104821E8800292202221126A11210F4221684843E
+:80CC0000101448068C08418891601A1C01008082128284286181908280088E146F2D0B160C80227158443422250440568429121481450883420442824C01100441238C321213344224844840A54182004C32C89018802292884D824F820125886282F0BD4AA04884258402416200428820341480C411621728A04192008884114C248401B2
+:80CC80001223C182882505009021412E48CB8288136E81C4830842282182C024287048F1D95F5021B011524121221289A224230281804482E888A418188886210220624283C18818508441C1402501C1466182250C18B02201000038442410A8484448F01A9D3022280084111140684840144878821808001721844284904146011241C880
+:80CD000011234881024221481082618261481744203852685821218015044844211FFB0349D22401D02402451841344846484282E14481146228004A528160A4008C841884A81C83082D44181514440448B08482684160811E28A69284A342D42885082AC4248388086F450D15081FA124D112D4283111484001449068504A80C12422009F
+:80CD80002F5229AA16A082A048935182441C4A0884822CC44222821A04808442042888A92128420818F0126843F2712A241E249A41437358F914684E25B7A24E22862254A883B45678443442AD189A92B88B122D58681E246AB184CC7C2FC27284B8D85984ED858FA872984C4AF611458F987828BC4854261D2183B2B8A31A1E1193B8884E
+:80CE000088FC84886636E4C5E86BF836884F88D88878C4F4481D49F8EFFB302481E3B116F2256246931F49D411B429768981944648ABB91F21F441C22D18277219F2A4A11F13F121198EE26245D138914245E86969252F429926F977173824708412F16825EE145F241852246AE28423F2F412A1782D3E8E3218839442AE148C34846E1C29
+:80CE80001FE60B3F34F5222E1F42F3211429F129143E484A722CFC468C8C2844FE881CA4CD8916B1682CF11281524E884A5C829D211332548F41D84294418E5843E52221ACDC2C514688455B81EBC19E7547448F45F287CC3EC11E38AD284A948A1AF872C4AD282CF728264B642AEA22BE8A762E041304000040C34826810440A249F0149C
+:80CF0000482C1244121518141831481901304800184214284128214821104218A248214062880044920000F0828D144E5317C445F11E789FB1F1532FB55B2AF5F845AC8F880887424D922B384F4CF98BD9A7421FF1F1262C3F11F1685D1F5EFC7BE95F78B8CB31632D8627E52F757451F35A222F49FA786B2F48782173E7D519D21156C8C9
+:80CF8000BDAFBFB4F41212FEE83F76F3BF1AAF85FC188A6FA1F5C664EF26BF6EF72C3E6F41B132B782EA8195C41E486FEA4EF264536FD65574DFF3F77843BF77F16F2BE724AFA6F6C2E3AFC898488F44F6C4C8CF69DB6FF1CBDBAFCEF4B19D4D1C4F66F1FBDD1F5FFFE7F51F34FC6E86FFA7D1E6F856162F5CFDC5DBBFBCE6C9EA3DFCBAA4
+:80D00000B41776FFDAF48925BD648D4D3F7BFA47454F49F9F2E87F7EFEB79FAF87F4A8ACCF81F14466AF64F5EAFACFEBF11E1E4F63FF2C2C2FCF7F6CF8863E8F4C073F24F721646F32F21F3FDF35F41F35BFD4E656F66D617F5CFACA8C8724AF84F2C696AF8CE98CF9D7D52F26D2B7F3A2A97F58F87B595F1AF8E8185FFAFA4FED7F17F180
+:80D080001A1CCE98CE5F1F75FC52C32F6DFF7E685FC9F991B36F28B42A7821D9A8F211B5BF99E141F1FCCA9F56FBF3D58FA6D5AAF35E5AEF6CFC2E82EF8EFD684A2F8BF87C78EAFE36784BC28DFC2F3549F24572EF525776DFF7F37C7B6FD3F34F6FFF62F26F687F5CFECAC88F24F44E486FC1F8FA5A2FA4F5D7D72FAFF5A79B6FD3F3BA69
+:80D1000099BF9DFD9DBBCFCAF8C14BEFE6F67F1B67C8DED8DE4D5FFDFDD66FDEFEDFADFCB7AD1F7D7A8EF2AE86F7E6EFB6F6F4E75F3CF6B6B4CFAFFFEDF79F5FFDE8DAEF88FB9E9AEF6CFC7E46EF8FFDECCE6FEAF87EFEAFCAFAF4FC4F2EFC8CCCBFA60B18B0260126012248804401A04940081200421321348128B04802003022102414DD
+:80D18000048810044988142428C248C048004CE281D42822C8243048F0AFDE3082280029C1481C5141E18A0600846C21918A2A0480230A10081614428479981424C4988218908815048CC2119A226288149200641288844604A0424C6818AF340C2CF41124ED121F4132481F41724AD241B26AD1C1B64A9921AB9453F94A9243F34A914F54
+:80D2000082F44AB147822D915F82C4915FA2C4814FA264116FA265192E4A96D5A2E44DC25A1F49D224F4912485F2912487141F49724AF18124AB141F48F24A9119B64A19B54A3924AB9443F3429447822B944F8284F9A44ACFBC0145BA11D626B511324C1B21C7248CE222C144AF44D981B648BB95F24A824B432D1159F4483147822D11D1
+:80D280007F8A84F92558984F8268114F8269193362499CE448C29817C949AC49A5E349541A9E24A5D1C1921A9E24AD151D24ABB453988843B24A39A44E844782AB846B42884FABE4550700002400000000000000204404000000000000841004002021020040480100000021F0418410C11484450228621148638868189B841246048745FD
+:80D300001DE8496288424598A9001C761882F18A262E85107284C2944229D12201828B214C742C021E28493288948E494D1246BC444116644AC8628316A4284E6860628E221116C8261524713CA2214A62A318808831881127611B94148B181BC243D1181C0D3B24453911187D88818C44E21238A45C68C88733465618296981141A88A299
+:80D3800021608C18278A848688C11486049641742E021536648449413422484F2281F46284CF286119178682161468658F64B2A531884E121B688F51381895641CB3D7C191B17C38811578C4C2964E2124D64FEC1338562D4D672112893214C342699AC3D168B45408AD8449BA44C1C28322A1A1AFF60122122541382215A41215A8122035
+:80D4000002881242828531914211895884281B4820022552482B1285141208826B9280483828B02848C8118A82A821428A94122658488021C824484C18F483D19042200221488901228281B048014C11948A00411848148400508444880083048200221E28236241436441A028A04881128D844821B28F442281818403EFEC439114396200
+:80D48000811C61814D3143742428A12178A99882ADC52483D84193F44F22958157884D218E38821C7A6112994199D21494A863CCB4CA13B294C225256818CDC289B281B328FC19A483B1482322C942C02C438B048A342C8B184964425F464AB14601841693181B124944047048022B84CC08A7481D9822481188D01808A66122304151C2DA
+:80D50000899882874E8A3582AE144184112746221B4322CB182628A4848A81718294282B1218C440A8814A21F23FBB403221380046941826A8122A29938883D11294142449B214CC3686D41CB14582C388C04115183C28152462441222001722289E288D82163C84CE1C1922B91882128814C84449A8864A82ED4192484C12F411A1C011D5
+:80D58000181002188091288314C8611A222161D10028B05188028843C1881418A8584D28421D18124C44A84211A9321487188369144481144188A0212883163412262A993A80F963E524902413E4822114469224406443818C3AC5A028C43088CC64A24CE4411228A9844A410480283185A65C21894164CC0000CB218688B89C248253C293
+:80D60000428420048228648624F52E18C022604200848B42465812384830422444258228412101129447142CC221A722AC5281C412A42A041A22862123286247282452442183118814B8120812B04401888B24F09E7624142983B22221148CD42E97294B241AC64827855D422C311888C0888C91714E344791418AB243F2122825DC1282D3
+:80D6800024CB488B348B8253B242E24211CCA82AF19C41884662CC49C88116381849A441AB288B421E4412C99CA28D148E244AF8CB3FA012444541482231280016189821889244535A4A121C92448908281F88444468142A31884D1885C4128694145218E0320941288B121FC18241B84A81C28284811200213218A283041FE54D02490172
+:80D70000A352243824449022608828418A21421C810841D081D1270449C442411292150A1AB8886421141881830828D084442142C3314186084022018C81440822F79F60210044848189420812C045141E4114198491843041221188806428118501482A04A41128A02888328E3A80235368C028428304206284A084823263C82A70B64BFD
+:80D78000E244C1280021412924D2C2171481348C8A1496448280146C810022682658842E42828762428D122234000000814C6288824130882284888443928818234EA82860C447B7400191121B21211129144169852B825623611440E222C8122C2398244088018850812192230C2182942008CA9112484242214E2142822BA4E304184B0B
+:80D80000242145A2849082F09EB3A028200241841881004220442804C328210A98008C1124210222BA14088CB2848238142844212810084181413081240080031888812CD814E8230C4849E4212412183444418C31440082D028429412004084A814D0A1413842253184601383240100922002438114742801400480A841C8906C83120425
+:80D8800043025F7A0C0044418012026021121538121D22921782501C252408151415814141012B41003082A012001440011C11828403148480012441218023915AF0C9F750211826040099219444502822308C0040B814941C8092444C92881A4478C814480888488C86241508882D488117482128418C146814422E4812161CA82143048B
+:80D9000041608C9F43018CC2221E41121C2341041CE294C22144A4282860222A41682AC088238AF4221463822862542531824C41012184C04140A128800281C0A480026200454A12A44221226F570C24CE242E2245D448F1141C4F46B468F4583D9D2C22835A3223782231258F29912863F622246FC1D81482E71196A42D88AD41AFA2D451
+:80D98000257412F8A982CF8165231DE58A83214B86F25A1A3628F4388C578685F849281E88C6744A688C2AF44C184F82F962284F45B21294444F3274887C68026E652312E781F2112B249FA141B621F46451AF35F44129CF85FE499B4B44AF4482F223118ED4DF888D61C2874953E6B6A43257A65BA4AF8AD948D18283F8CAA8A388E81185
+:80DA0000C4288C688214AF48D368B246C2676B1245B14842C182899E38367448F688422E9ACE9C2ABB88A8E68E1E243B11CB111E1D2F223124AB222551864522D18191C21B184F41B499CB416D8C4FE9381816A2281B885F1458EAA5F45C474065551F2EEE1574C28261A62357439817188AB9A10E5F138D34884CE222F4A1419DE88A949D
+:80DA800016522CBC12F21414AB484B22A7C88C13F67C6F100111100111204102248260881412148214304892100100984488442A490415A412159C121534221129119112B0220118412C0200002081B2CC42A3322F31F22A211FB3F62F2EAFB2F258235F64F238317D6597123F13FB1B543DD33F39FBBAB917921F129319CFF3FEF6D57A2F
+:80DB0000FFA189AF97B68CEA2AF32A2A9FB6FABCBBFFCDF615458FEFF242C44F4DF57C251F1F7F41F13D3CC7F1A7B3DF79F11D9CCFFDFEDBCB95F61D59BF81F6DBC7ABCC9E92EFE6F2DAC4EFA29116ED1E2F4DA55B45FCD44E8FBB45F323313FA7F62A315F91F2291ABFA3F14A2FAD2FAF53F33A39DF53F13939BF7BF9979F3F33FAB2B30B
+:80DB800037928F4AF2A8A3EFFBFEFEDF3F5FFF21C9EFA2F7A4E27F725A93DFB2F2FF6BBFAFFFD5C7AFF7F2C2C4DED95FC6F2E4E45FDCFCB9B8DFE9FD3A9BDFD9F37F86FFA5F25E4ACFD1F17E54BF9DFED3E94F44FC9C9EAFE6F3DEDAEFADFD829A6FE7F35674AF86A446CFE7B5E442F221312F23F72F245FE1F23E2FAFE2F25B627F65F7A0
+:80DC00003A317F52F22B273F12FE9BB95F78F59FDF7B228FBAFA24A4CFC3FBADAA7BAAFFCAF2A4AC9FD2F3ACA54F66FE2E2E9FD6F29D9FBFA2FF95CF6F1EF6EAA88FACFCD6AE4F47B7A1F6A823CF6BF3BF1CBF8FF55CDFEFC6F74A48BF47D5F9F4697B9F14FE98D26F48F82C2C8FEDFCEEDA6F2CFD3E1EAFC7F52A484F45F74476DED43403
+:80DC80002B32EF63F72F344FD1F23833AFA3F15376AFF1F33A35FFD3F23B37BF92F29FBB6FF979BBFB2F2AFFEAFABF35CFCBFBBDAEBF8BFBAFAC5FFAF62D6E6F7AFE6666BF96F66D6F7FF2FFBFFE1FBDFC7E6AAF86FAE56E2F2DFA71718F1AFE2C278F2EFB2F9CAF9FF77C95CFEEFBCDC9EFD6F6785E9FB6DFB9F89A92AF8CFC485CCFADD1
+:80DD0000FDFEDA6FECFD763E6F45F778588F87F76C6CBFAF034901230241008441008414842448445028123081000028212819281412880818200222482248002212340012A049241A0400F03816B084245128D028418481B44241E81401985B492148296188184B4800188C44D18474486122567121082E98522242A0218908981E48C17E
+:80DD800012C38294188A148884E9824462884C034C2AD8485214FF790E2D521F41522A1FC1324A1F41326E1F41B24AD1C1B24AF98128AB9453B94A3934AF1439A42F347924D812F9B4488D914FA2D418F8244A16F1264A96F121DA96E5A2EC49C2DA1F49E222F491248F22F1912C8B161F49326E1F48B24ED1C1B26A9921AB9451AB9447FE
+:80DE000083ABB443B34A7924D842F924484CF9244ADFDE0DACE541D42EE481326A16346E288354C18F447981BC4833812F447184F84A81824E1545F848912358588E5885E482EC41E8A264515DCA1E244F924CD484FC912C4F82FC81444B421FC8326C1749CB861F49B24CF8112C8F4638118BA45B21AF447894F84A344B43AB9422A93939
+:80DE8000364CC818EFD20E00480000420040042812008504000000400210C42100002280040000000000180000001002EFBF44022343C421AB148B21C56251241BC2181286994420C4329E41290883518443318885122C34412F287424688849849814281C53618C3228C932188E18F449712438282788AC45A4818D248744924CB124AC36
+:80DF0000248F42B144029F660319227813921C003B418C72184528984212182CD84822CC284E124F82684E8A93C8444E816042C418CAD14224722418E8413C86B2166449822B824CA2288608524A038CC1488A04C3324889412468114AFA8B21246025167434381A124725389741AF12A88121166C45282784628F3388CD844F297638F43C
+:80DF800044988749AC788438248D449887664E881F44427C18F4688619F24522C97298F428842F81E88861CAA74147824F22A42C6A7118A41C8B8646B814CA487E8846B22481A441FBAE6032283411428C521A150C48A0411C088843C2924824261828086014205421422949048A0212492989810228431281088961818502814144844CA4
+:80E0000011C42486C834A23D9A702242444158364C32242846410828244180943241A88288848122420045421402224248122522F82492162402249E2889C8482931110060811884890323048324F2B9452021C1142F118291581D58AB41257AB493188B9483C91844CB12C5A268C9C4328F12C1319A6288E72A83D224041913D485919857
+:80E080002AF89224438CAB1225C82B8338AF31152477129428A72481871581467224C8B6F044388B281A368445F87A48006371150235C2385D5883563ABC4328010049D64AB22438242AB89B92198C39288C3E22482141418591288E62AAA4482A21C12251A6180F29A15863F512283315820456C2144992224C140A4C4CB8750F2903F030
+:80E1000028114331442C82213484126E888C791A1494182C81B448880128288225441854241E2330149230141694822B28A7493618C2A2115F883228814048C819818489E28891182E18E22A153824AE6AB01184C16141366442812982D44853A48C92224D4184855484222382722498421115628129180826185C81002185542118C39172
+:80E1800022360446A6124D2840A482264A042B2143212483828881B248F9CC27402464C125224432148C7135283454804298542A21314C8BC116286161288C6243884CB22831840045A1829068822A2438144229C128858185321AE042C1118A012AAC21218D44284EA68C41E2850B10041881A17044430225018488501229C8111446242F
+:80E200004818E448048504443120C2681884124A011114D0182A01E0816818188A241C844418C848128C4408F0BFB560414C31284331188722169835E3D32456282658829C941426F41A845CF233C8CB24874146D441B22D485E84837228748611982945C892806715181594324E248712C93422C386BB8821E88895C2968464CF2E128C50
+:80E28000B11CE682BC48BB28F148825FE50F1C044D1370664254248C643416E81401308487241781E0810412A816082C840244188912042A844248C482288959412C21A9121781188425A12130152432C0484A021004183F630500490140921481248184301284288341B424E821188412282404472883212104248C22E214B828813128F9
+:80E30000802182C4721E4888102412C818004A011A02C426348826F42B8FA041C1209112288984B4486244422312A4388918144B495181181A1433A1AC3C31484512712C3281888E4849128208450329012012014E18181364348440622400421844E08D06290220223214288021A118218850221400282CC1814448C14E22818D21894464
+:80E38000C2411E224002828048C82284AA81294888021200388A12888808818122F065D80012504284214094232C0A17448511A821A0811110A3422A919224141A84188108812C8644082A04888813048448CA01144664214246042082F438441A286481842F740F8621711408848321411874421804A812418492C308856268C0144C54E5
+:80E400001A50244885A44800AA01310022100881001881C0148061818CA21222100418822F94054181220040884208215CD28481C888124190142021522889C9941142874100D282202204002D288225088CA121ACA483CC0289830C128444812810041F230248404202001200824400124B28000080681814A024008828214658488828E2
+:80E480001E4400B02421B144A228424140A4481021841872420818892118F4FF8E24302422438212480125B11402482155028814F0218C44148E44E121224436C18118601200A0142031A80026480189A261228A440811368806124921BA8402224F190A4D28213904112828445684385885441102118382023246443822284941DA244897
+:80E5000012DD83C8484041088CA228488C29080060884954484D228E2381824483C18C2A0830228CF82885F04224C399142E26AF92721282D3E48162E881687CA19163E8A3781474A8D149FB34181EA64B938FB9F611C4CF1A722CF828696F84C4815F8CB4387AA278126AAA1D482AC88826F328281E84AB21A489A6118B251F8232181E2A
+:80E580008585DA18A4241AB22AA3654F85F364B4C7411E848FCAF8EAB1F0241228160690188F8314F83F5DAB6127A466F3198815F238188D1485D9847AA451286E41CA564447B625F813535B148F51518683D292A5646EC44BA42B165A25C2282B898E588CE15BA68A8F8EEE8AB512A82A8D581F19B122B928E186C94A2FC239888528DC1C
+:80E600008413D4B6469241CCF12A216981F12428458166244B964BD93538A6C788A877181BB815642135B58751C81B94AB281F64EC447A12D62178D9D6327AC192888B2885A1A14CA229CB882CB12BA2C28B145E181444CF44E5847564B2427455E889D868A481C36842922E38838AF277B510011110011904480014122001001228009206
+:80E680000080014084418408181504158458412951C12117412117880090443084A0480000D0C64DF151637FE3731DFA33334F51D145F31D7CDFB2F65251CF62F3545A9FB5F1838D6FC1F999B9CF81FBB5B11F13F98189CF82B3F3FF49599F957CF7FFCFCDBFEAB555F4519B3F34FC761A7F36F492F84F48F234119F7BF6B67447D8BE3F30
+:80E700007F7BFDF6444F54F5782B5D877FC7F2E123BF9493218FB7FD4FCE3F1CEE44F7E8766F62F4E7F85BFE2AEF88F41C98AFEBFA74A1347E623FA7F7193A7F31F73E1FFFE3F13F7CCFB3F75B58EF2DFD524C9F95F5A189EF48F9BDADDFD9FA3DBD9F9BFB818F8FB1F3B7B1FF9DF555DD7D7DDFDCFE49EA3B755F65F4CDCE5F37F14543E8
+:80E780009FB9F5A62EEF93F9995F2B4BEEC98F73F1AD571F3FFFFAF36F7FFFF55FFF4DF3F8322911F91CBBFD97FF59F9C87C8F6DF72E623FCFFFBDB48F22FDA64C4F91F9BE3ECF2C47E365F6327687B12D13BD122D326F75F76F63AF95F52CBEDEDE9FBEFE8BA16FE8F99B8B6FF9F3BAB1DF5AF885A9DF88F993D46F43FD59D14F7EFD8F4F
+:80E80000857FF2F84D5E5FF5F54781BE5FAF1EFC848FAFA8FC16522FEAFF93D148DFA1F39A949FB3FC9AD8DFCFFF63C28FB7F22EA48FCFBF61F458EBBFB5F8DFCD5AFDECDA6FC3F566784F8AFBA4F4EFC8F61C88CFEAFB7E2F245F77F63E768FB3F36633BF22F33A3AEFF7F77E73FFC7F17E9A2FADFCE8EBBF18FA9E967F5BF994AD8F9BE7
+:80E88000F3A5A54FF8FABD9F7F59BDA4FD55CF5FBEFEAFADFFF2F27D7FDFF4F5CD888FFBF7C8E1CFFEFEE2EAFFA5FDB2BE7F5AAFEADF2BF96995CFC9BDA8FFD9C87FEEFDC8B3EF46FAB9B99B128FB1D97FF9D9D18F89FBDCF2EF22F6F2FCCFCFFFACD4EFCAF7149BCFCAFA82421004219012848034248A0440410884708148164114F148CD
+:80E9000024138802830481882888422A21F42291E0120126C1481CC148148C246289341240880289028100F0F5313082122244241A724C42B84821592216D82828594853093281128B84923085F0274A9014142925F52288F022888280D238081CA928228089C211488119240489A14B23343420D24829F2AB44C0521F41D228F1112483DE
+:80E98000F41124EB141F41F64A121F41B64AF91128AF143915AB9443F34A9143F34A9347832D914F8BC4954FA2C4814FA264114FA265194FA264594D5A9E24ACFC91242CF5912485F291248B941F49B24AF1912CAB161D24AB941D28AB9455F84A944B42AF44B9A4F442B44F83B442FBA44889FB244AAF1F0FBCE141D438E5C17248C12466
+:80EA0000AD114CD43AD141F62A948E68AF1412F4489143B2483B242F3478849832AE4829F9245A1CF824C81E814FA264182E4A82BCA428ACFC112C2CFC81648D429E248F24E841E224F8912C87268E244E141D28ABB41B28A9A14AA9A14829F3B5482B346F8894B24B5ACB3400004002400100002800000040180240840240044001008026
+:80EA800001000000842604000000004001ED4F502190133223D24A058C823419238A88C84C17816143F1122199D8822C09C9684824224D12A4CC6448186D828A93A82B248288A71121159C8822429D128344C8D11391424068482246A6822883C864811BA1C03443094412249522D5529244A446480223B88132A28DC218346841281CF488
+:80EB000062881189E252C4822E1A8A323885C614982743224485A1182F1491811C0396B1119228849817C528148B948B38421E4C2E119621B817025B214E142052221E44B02891258F7491AC838CC844A91AF292268E2B8938CAC60283B816DC2AAE282E1873D42EE828837AADE2C27112BC4A98944A721259125B81ADD1E011542987147A
+:80EB800047838F147239225D848C728421FCEC1222CF24C1B8471F1AF82B5840022D1116A41284A5833442400224841C31A5A0411C119132414C1201114426285484122921A8821A322282418481E012888221492109E014016083A048281440D89B0C4B121004008712800126A12825018845084124009A8468884E2424008314245422E8
+:80EC00008288124901456181261181C84822822A21582248184381895448100881227F9E07112410784226D126092F12E422A8188116D2E1051BC28CE288741468484912384C5C348287424C6142E082889924224D2A2A94A14C4258228761C72C4441876DC331423618D84889C468A0181AB45C6843590249F4B265001044187612621B7E
+:80EC800090338833A8823CC11C29386128C24D18008889C8414A48824104229A546260482B341B8226143512154A6C484C24D8C221321860C83058208DD148342C288128AF88031E25100248101C8224A22184211C04478881C1244338248C6544C99826C312849248C30828A88C02430184842F4291C121812E5C8229855AA21A84C524FE
+:80ED000098904C981815044974E70154484427414AD24865828D1410442EC5888D3180412182110820964219A38245F2482480B228C1441190284682741194214E2481501419E24231151628928A10021A32114B128129C9341AF24357B01292621A4248184204456124822CC214411A6452234148C434A11E468C41C8828812245698524E
+:80ED8000218D23863C128582E841241A04928522E2814438A4B0220983E441288B8408446184527F350680012841141062858301842C0410C2844542084B9200414944110982814112604218414012287122E241C2186024812A24849411284784C44D212022223488AFF14FE27182A2216F8281D243654269D114B41444E2A463A44781F2
+:80EE00004E12363117C912921C27414C9118C44E852571186542AC65846D184B6125E2428191844062D24CB22248BE21B138F424128A32284A1932411E24C9F448244B384C3228288C96882FC503201104C3441848981884A908B8111084088D1422898AA424582822D0A224A8122884874880D22264414F12094A61812B12C4148CD4182B
+:80EE8000A141218E488D1282B812204134944CE112F45FF9901422241E262662412A0125028904008D42602420082024084240220C8022048634A42A188481C212E082840A4634384280C8248002A24B21440026F46613404264418112482934146881211E4410031B41290825582181C0481B822F82212144068221828C188104004781E1
+:80EF000044122148CA01448E120020A6588951488682A8484918F2E3990012400281184601144C489348000000218280044C080081C28604A024212800841A648200C02248004412C6240241422A61825246F992DA80040081290228222B82144488883F4298828121408814886284248CD6288C2128824464521D18C0438F198202143DC9
+:80EF80008470445A18202826C4238A04814F2284048444006FA204A21281305412284D28800481E3480284006088A0486088888410089082A22484228843422A021084223842AA412841418512684200422144229F2305457848E24265848902008145588400469888108848080084C05880881404222C4448840C40552582881B14536885
+:80F00000454B81172412211A8801188721E02211A4218B124C78E802200212809448C044184890413848207C180112848521810117214111290C15486814104208980010181288028A42944A103884211318240810F27AAF00419066C0265082212450424482C0826024908246840824800844852222042C0224481843CA92609416845149
+:80F08000242C484AC8844384981420840184C35412884F660B4E2880060040012A2848041F842202448A6248800A2D844818688C0A43C4588418468114C41813C841304812112414144064842C324860642014A1439022124FF301412F6C82D26824F5162426F2392889F26AA4550A118E89C8B1C82B1824A1468848542829F8185343F4AA
+:80F100004642257862688C244DA2E7442F46BC62E113183414B721872A46D96AF247822562258F8283587223C8241E2A6D128D314D268A64C6AE15E7425F110E2E6489F124164B1227A28F26B1520227242C71CA7418328E9724372486728242F38A841FA8E9486A888B868C3888AE2885C28583A4E8E9EAC835281E6B828A12E718DB612A
+:80F18000A15C6D49DF41B525EC91F141F43D282CB84AB5C9DC48B218FC68846E484C68124B87C9F314615AFA36B5A0144333182F85D24883945847742E448689CC414ECE58CF8AA2C187C48BC28490488F14E488B5D1F6446A428C66814F48CC122E414AEA8494814992C18F487339F6A828411B9122D28F4834A48F4ABDD2544449B155CB
+:80F200003D644B588F41B2C6A41DAD3E8A442AF8B39C00400886088051812A5181188011C41145C81143C21143C211411C1244117218018711301820812804841C410884A04114126081608120019648012029F439E9E025F55216A5F812566F46F66232EFE6F7392BEFE7D633F257D3DAF8594BFD8DAFAD7F5BFE5BCE6F62F69F9B9FE1EB
+:80F28000F399364F44F4FD31DFC7FA2DAEAFAEF775555DC91F9CF52636FFFFB7D2F478F86FD3FFBCA47F7EF757266F41524C2F4BFE727CFFDDFAEDFD5F4C74CDBDDE81F8B89CCFEDF94E4CCFC6F7A4AAEFEEFA7E51CF45FD949C2E848FC5FDFA48AF520D4F61F112566F41F1181C7E72AFA5F75E5E1FB7F67666EFEDFF52D69F9DF8786A0E
+:80F30000FFD9F957F7B7EDBFE5FCB7F7FFB9D9EBFA83667F52F6DD99BFA7FB2BAA7FD6FF311B4F81F5C4D46F66F7B73F6F79F44ECEEFD2FEFD2D6F6EFBF7FFEFF9F2BAE62F63F672767F5DFBADBB3758C7C42F6CEC29A9E85F75FD43E54F4EFFEC8ECFEFBB6AF47CF44FC8F92AEC8FD4FE7A583FDE0A5E522F61761A781AF67E6E6F66F2D7
+:80F380004E7CCFE4F74F4FAB55AFECFC4252BFBCFAD311FFDCFC4A5BEFACFC5753AFC24AB9A4F857D18FCEF268198F82FC29EB4FE6F61C5AAFA8F4BBAB2F8FF64C5DCFCAF2AE6E6FEBFA67F519FE1DAC5D15EFEDFCDEDEEFE7F36F7FFFE1F1ECAE8F6DFB4AF8AFADFBDF9DCFCCFCE4F48FABFFEEFE6FCFFDE5FE6FCAFBA284BE944F4AF38D
+:80F4000076A7F054543E34CF41F3383CCFE7FF7E6EEFC5F5447EFF76F64E6EBFBDFD4B5BAF2CFECFC5BFBFF5CA5B6F2CBC46FC3BBFAFB1B9E6BC76FFC98F8FBAF1EECEEFE6F6797BDD4BEF68FC7B6BAF8FFC6CFEEFEEF6BF7A7FF1FCA6F49F1AFF9D2FBFFFFB5F4FEF6DFD7E3FFFDEFFD95FFFF7F3DBFBAF8FFFCAD85F75FD7694CFCEFF86
+:80F48000FCDEEFEFFFA79C4FEFFDA29CCFCFFDF8DFCFCE7EBB09219012C012A012402208004002240082832408828304422094848028142414044B820000484582044800140040064C028D2482BF4E0E43024128E72284418423429488704A628824844A688825420884812C94280060482362446181272290841B21211261131174913823
+:80F500002216884918A2412D842AD448A1424A0889A149427062074D421F41522C1F41B24AF1112CA3D441F26A111D24AF14D981F24A9351AB9443F24A9147822F147924D812F924481CF9244A1CFA244A16F1244A96E5A26459ACE449C24A1F4DE222FC9124E7221F49B248F19124A3F4912CEB161F41B64A9921AB9453B14A3934ABB4B7
+:80F5800043FA42B14782A9F9B4484AF9244A7793D0A4B511562C1D284AD1C1B64AD141366A1D6C2B841FC8F64AA241AF54B824F4428545F8428545D852D886D452F8245A5CDA84CCA52FA264582E4A86E1B264482ECA17C42AF89164AF22E449F268921F49A486963C2A1AF46A8413B94ABB15B24A38B4AF243A348B34478AA9B9343442E3
+:80F600004D5A7B18008200100400001604008004810000000000004001004100480000000021004001005012F0BF9F244414811A324645C2382D7844362AE2888444829821821149888892112A088A52856922B444B21598286130248214209922CB1A286A29D3413184308813C88880A1382AC82482B014784418F4DB7BA0128E221821F7
+:80F68000282784403249C88D812F227188714458A58A3164D88CD2729184864439A82142B0248138485CE48224361227262AF11224442C28C41411469C4221826AA1141859D54846F44518F048348A23621B8CE4830563A12C211662444829726A524116FA258A4EB82746C964489AE242242DDA23413214828B8329EA48D442A2344B2894
+:80F70000DCFD2C4153C66241AB82372143263882DE2C222A24D663644849B848BA21ED8821C4642E845323B22889B8A4D1147812F874182012D128816222C4892131488A06D01808A5138118514843C8A413D8180250811024045082A01242221249811262411C69C1180012005C6181188E48444984038B3449F41B1CD02201412810219D
+:80F78000841482C411111882244353121225171458812800601124144844693418488AB2220124C082008C22022502428264200444D048210843F267439044241F825182259C34DC7312C87E166BA43E421C741AE49CC1884D1A8E241A245141381D841C1899268C321249F12A14812A11542C60443163512443B324D48411E6419C128BD9
+:80F80000872648F8471A8B144B81C931128B1AA9085A2285DC1E42B24441F21D2222C42216344A8F2164858D411C24F1821C8DC38E2C8331341691124112430884211631124C712458683E44416C84F844121444459214237618322438188C194AA28416A6812C81C19888C981AA144CF4DA4740024018D241B1498291261127212A714214
+:80F880000118165214237842444469921C6218144C922824112B41008341889222D022018A421444686C906228837419344A4187449024A1A014A082EF4B0E4D4843961821312584D224614187428E211421497244D1227188C2124309256CD4A02486E2884138228046E14211E6C94233484CA42812A1254C94341A68461A22247218C44B
+:80F900001889C1282483961221876620F4EDCC002B14542064824185B14882149812448183A2824048021393A24D188125C834826481842941C18A3014830946094604AC02708812C112A61CD22424DC42089280991249F1182417B92400508136941152210012819E4823215185524184448218400460438901180022002C2231128112C3
+:80F980008A2341C148124088210800874610C82880048F890A244C2151324A628249D285A125811E8A16B84A11589443318ACC61884532381B1A16DC6864A8457828C4342538482D112664C243118131161E288127844B18CCC2115226A6214628B112582C426F8278486288A3A1282E584B4126F41854904628C541D8347111E42401E1CA
+:80FA00004C6612112C38144E12178A4E12D062015CD884042220225182A012C012822F8268412BC2D01228D124C1282CC12489E8894421918A45A814960843A234901A41C0489F584922C412142C5181121121121748160819816948902200292CA8184189482288211164488981410623684829DC4288C88C8286341A4C11622822C420F4
+:80FA8000524245C22490284C88D224887272072241484D416A5184101801461131841C24147284C81219981984282D28240094C1218034281C022C064912F811242B128D24E02C22C824224E1430588C61248880B244B842124818B4E6032C41410240C94230448200A3041A32141843C1488225482C1182080090148A443482822C15043B
+:80FB00001098810023052420949246022384414822440816048BAF40084848112495141C823482008E16004A823814441981998543B821410260898425B482444808C8188221406244411022044314A2844048220C4014C218EF650B824144244218204121412338388413D41218144882210130282460521004800541D021341883D14129
+:80FB800011443841C014704112688420C48444444608800185F2DC7F2052221163019048464402186C115424412C34194472CC24125E82241C01301200405214A12381022506834102828820C81638892A8821B922388286283C841A087F2C0163641138002122200242974224200150122308881422444444184502A3D88208C021400810
+:80FC0000282400A281702844282208902828002260822A04FFE30D160410011444246451A18C01948001810080622112C0121002104404100500005184442508410088A018A18881102289043FEC0F84814904855224B041812111748244021443CC42902890223082A01A83820A2420511A14884048A441810000421784214490246508E3
+:80FC8000400810082126F44857C0728E14671149115255FF24965F1532C41E428671847512C3114F45C112C741572B6B5C9E8287411D9827C22312B22E72189284CF689892876350C9644502A9D164989C89F884A4AD1C12E5122A33AAA7212FC8AA91CB838E2C298ABAC8F21CA844EF42F1E3C524474611157612568824C416D652F2122C
+:80FD000014A13B81AD589FC8FD55422F1878865912D817A1AD284F8AE141B288D81518E431C11421E048147722DA22BA31FC81A4EF62E8E93839257C241233E48AE88256212F24D38428246146862E02A78E2DC48AA15F281FCB0B2371168BF241411F36F51A181446B814D531F8C5198D3A361274A2C4428F47C69AAF84D248B821C1A1BF
+:80FD8000C72A47218E222E9A1161EC7112785CEA8CD54428B842B142A45149D29231B115FC48421EC2EF6451414BCE89E445F584C88F24F48E4229D12EF8C8486C446842C948FA622F8002288002281428881A8228810888228822144021C82100000020088A028A028A82A128248C021E68400800124008004880047FD249F142643F52B8
+:80FE000052245F13763D7C2DFD11149F26F335357F5ABADBB5A37AC8F2DD9E1B1D6F4EF8C5651F13F37414172FDF41BA9CF119919799E5FC2436E742C5F69E9E2B99CF2DFD7A5AAF88FAACAC1F3FEF2DFD64B2CF8BFBACA88FA8FA2FA32BEE2F6EDF26F16763AF8CAC66AF8CFC545E2F45FF66B6EFE2F32C2C47C44F66F68EEECF86F65860
+:80FE8000186FE3F61FE4142F26F433525F23F33761F7D3D7729FD7F36E366F44F5D5C7FFDDFDB3B2AFACF9CF8A7BEE7F7BFBE7C78FA9FA5121BF237237F61F115F51D1FDD9EEE22AFA3C36CF61F19E1EAFC9F95C4EBFF3E568F28C8EFFFDF5F1F76FCEFB9C9C4F49F498BEFFFAFACFC3EF6CFC161C7FF6F6C7C72B77AFAEFF5E1E2F65F50B
+:80FF000046C6EF6BFB24266FE4F46E6EEFE4FA6EBC8D4C6FE6F721DA147E543F53F524265F51D1DDF259591F57F759125D157F58F87B7D3F88F8583ADFFDA9156F4CF86D5DDF59FB5434C7F7CFC1F21F198F81F12838B79A5F727A2E5C888E82AF88F8DCDAAFBFFD8A28CFC8F8C14BBEF24D528F29F99E12AF8AD8BDFACACA2FECF83A7AA8
+:80FF80007FB4F4CAEC4AF6DAFA6F6CFD42D6EFE6FF2EBEC7C2EE484F26B6EEFACE889ED82E1ACF5544F142623F6151257F57D3DFF25953BFD5F17F377F57F7D5C3BFDEF69392AFACF1CD8B7F1EF1F397FFFCF79C967F5FF8EE6F6F43F8BE185F51F82C2EFFF2FA21A3CFE3D3ECF1981EAFE9F9DCCEAFB7C526CFEAFA47471F7DFD3EF48F66
:020000040001F9
-:80000000F81348448C582886DC42A161830A4D2AFF9C0F2E191A7424413424001614684118E024281838242D141E488D211AD4424288B124C4A4434244022E52812A1588C824434284016A012641C8111391124820018225A44240584841441CF55D8C40841184C41418502141128224824C21592410424494824984480290522849031257
-:800080002522022548E282312123C141382A0113621144141490444A02C0286C02438282F11D4B8014A4411C01140070A40122A02800828E162049C411245A7884026C481498488822888288888880844894821200421A024B18208122D812442864882928E86B0B00180044444C015052301812221381311200161402004305424602239B
-:80010000846444A0124A01205A12C848484248808404400228001210C8218FF408800243022A143222260412149021A0422822492902222B6143022228864288832222810611B081040019880226081044184214048041A8483048EFF909114C01000050221218008410124421288198114141C24164480012442684A4422B2483AB128295
-:800180001E24168403228290210000404188644300842FEC0218843018504A12811881248311180100002D412344043414805124000018000021180021384691122382418131424C01842964827022147622F22C5100004844180000218811412088A884908880A8184A082142200290823082820000822200C021C082C044B04A084213E5
-:8002000001822084F9E75D202C084182241542445284D02284014F22119112441844184A08800421123018214C64282823C1311032224482140000004230222002348D2489C119F0A7A9608389A2428D21228C32248C468124C22C48890212409122146890468083C48122482A844CC2411242250A1A4C628442424608424662C4422840DE
-:800280009244423046002B84485F770E13F594142AE112918445141644A11A242F82314955E841F142814B9813A491A42B19114D144E13292221D64252A883F4B292284983FA32CA48829E31184D214B183F19A4211B64112D261518F75C4629142A44D292F12112AF843B8C46F96812CFC2062A75A80813A4121E1364265F622F8184C16D
-:80030000C22D188F58E122C212122F2919C68149A284BA9482CADC24D456A41823E6A12274A4F2F2862F2824EC33FB38B21D8227298AE861AC922E4822AD41483EC14A24084F461626A2648D64411EA41CE681F26F4410843214CFC146F46A2836917A49537C374B8D219212821F417222D254E248F2D7344EC46F59A7844F4846F7422497
-:800380001E124F26C4742A85F44244486A8133432538222AFE5B446AA2244A41A1B7424A438161641E924CB2C856284784366686CF28A9C8CF360900103C81872411831431481188124A286114224621533822142214230218901281188001181110811191181189018D919098D04809890998D018884404F05D7F144B6447418FC2F2290A
-:80040000618F45E494F648699754FF43F7B56DB71C8EE837124F44EC45FD25257F4EFE67E55F52F949691DB25F57B315D94292225F18A4722E526B444AE4298984E431F499A11F38FCD3111F116118DFD4F444473F94F151699F94E324F1F6F83FADF88B9D4D92AFA9FB9A8A2BDA8FA2F8B2992FABD926E488ED8FED23F83BC5145F15F688
-:80048000444C8FC3F3296116FE163FEFD4F659153FE3E78A76C6FC11792BA8CFC4ED44FE55557F58F937352F7ED4BFDB13FB77355F1BDF71DF22FAA5E369E126FF5E583E7A2B9D5F74F2A6A6BEC31F8CFAD3D33BDB1F31DB13FE5DD95F7EFAC3691F857659FBAABA2FCFFF736BBF97F64C9A2F2DFF5246AFC7E426F8B2D82F68FC2E6A6DA2
-:80050000DCFED98F2EFD86CC144B744B63CCF2343C1F13F21C363FA5F3256E4F53F3FC36AF6FD382F65979C7481F79F141431AF12787CDBD1F3DB4A2FD83C16AFBC1D52F2EDC35E863F326126B464AE423E313E729FD12421FA3FE81E11F29F7A133BE327F76F67EFE3F17FB49711F14F2F9AB2F45F44B123D23EFEDF452C66F66F3244206
-:80058000AFABF162E867966B8CEFCEFBF49CAE9AFF3D43F15571CB738F41F3743C1F33FA5E76BF24F2377E2F71F1DC163FFFF393FBAF85F58C141F7FF597977F4AFB73D3AFEDFF17937F46FD75655B9D1F74F4E3C35F36FE54566F2EF77E6AAFA3F6F2F26F3DFFF6361F2FE423FF93F32F2BF39113FEB37F3DFDFEBF3F1DB749F7494B3FA1
-:8006000033B6C2FDEBF3BFB476D6F662D6EFEEFB6E4A2F2FF163E86FC6F2EEA8EFCEEB9FF9E8CA2FC806450118000060224082044023412248222824684482460446146244202422842924022A082E82800826A2482240824402280048443048F01E2780851244044C56221E644244182818844C11044301C014804142011224E0822151CB
-:800680002628182829291122B1462121840219222448014E86C08622892892823648049F61052CF41124C5F2112487341F41724AD141F24A111F48F24A911B29AF143995AF443924AF143B342F347B24F842B14F82C4B14FA2C4A56FA2E411F2245A871D2FA26559ACE549E2A2F591242CF5912485F29124CB161F49B66AF18164AB141D9B
-:8007000024AF149961AF1419F54A944B42AB9443B24A7924B842F924484CF9244ABFE2072E4A1F41742CC2488F36C14C8F16C14CAF16E1C8F46A959E4CADA15B29AD9443DA1A33342DB347822F147B26D812FB24585CFB27CA1CDAA4E51DD2A2E551C2DB8E252E5A1FC1C2D21FC9D628F481244B161F48B662F191642B141F49F242979E68
-:80078000642F14BB91D242B9B494924B4BAB94478A2B842F88F442B447A23F830186288804000000008002000000102102800800000000000000000000000000005012D088092220014342D82243D14211981140115421467C114412944245A821445D8800481C912E412CC41416E246111222931241125AE2444218628220018358412FA8
-:8008000024088E182E4483A1218A2145FC75162447318E1624455A21103418816721867812B818E82861481522321D1B285D128A61548B48482F32EC44721A44E4216815A96126C8E041E615D21648C6921F289684186AC1424905221C04428C832412181218782C81F275FDB01472D6421214041A921218644F380199D124E9280233422D
-:80088000632A56D42668148E444F81DC122A269181AD824E114AD141C7924E248D62783727003B782EC42E448991428F441384A2428446346248124A921A8CC3883E45A741BF7303250118842732846115582E161868818840D585C4144781541189313481114265724894141E2445125822422C61411486D424614924121868240012148A
-:8009000082149618628A8504201128F2FA850040028110042240021C218101001C011CA14900002858402881450400440080020028244011849144008843024180E4F60C121604382AA4438B4241488C11C2118113141A94C24912C224D048421431214CC241112F18612114822901A041209914121889F12481B2444200E08824A28323B5
-:800980008111389266B884C4228FF9061818902283262114240421118C7141024482222D114113A168002822424213493A119816048004200128122A28410440014AB944C28218888C9292224C88F48A8414604420014A922C20C2184522412191382442412002E3114411C1141C6A3180013C04408811A4C14112128415A428224D420072
-:800A00004342082A011841D08624A4124F5F0F28284088214444A52541818085211142CC31124186A418221449480183110196F4142848121C9211222C0A12122C821224D21294188448822B182241C098814B844286F8AD3D20046C2281621200D018811202948C04004C240100282518E88214021A042123012008406224A84800428409
-:800A800042528B18418C64A8C823081A2421027BF26041101355122528315A8190414009118C220124A01249D4818188A2242341724408830210A2410013111C0C4039BB1A88084003304420020000DF9B0443052952181671424966415648D82802169818806241111818439A54363981E9D22866A2122D4D522E9EC042B011C611222A6F
-:800B0000582EC9A482682D2B1F482273421928F19843825A38E424001AE44428C4885F340F2228456341238282D18124721164146014118F344118286364411882208218214508004FA221810188C011C012120089A148881A3448404658284B48A89618288102CFEC0E00608100200112811200100410288102004400189014461402404D
-:800B800004123444810048888081048019840398008200C77F40522410C3248CD221012883C41242160117812041D421218CB11438292624D494924485C61880C8124C01921C1122612930122228648B85811528041425A28418A0280028817F3D0B104212210212122848182944018D1144105438A02116C4282843C4148001002444C08D
-:800C0000142041928400A024D082D4846114429081800882220000DF790985F848464A6485418942110289514C47414B232A22021880A19424272825E34181B199EA4C68E889C1148E4437111D11118D889D18AB444E514E128582810243A8184544BC24A2223612B41226818148D2227822B218F12A4B4002000012100810811108244E98
-:800C8000180000000020020044008001602100000000004001894404004400CFD30B818C248404412022014C11D448228202000088250225644198868108814011C11184812F81248404000000414C2282420220854454229012AFFC0B84245812800100111144806294424008420021808182480428001440420848241A280182881451B5
-:800D0000151488024800000021F084790048000020014084812201000000218001882002A0214601400848800188122800448002000000882180F1CC670000001800200114002001000000002200414004001212000082000000400800810000003B9610B848A4454200001114457414F424288B278322840542222425522612419E848A99
-:800D80002888045011171111A558888B444A24AC1810081110054F82A2222200814840522225E241F1BFBC008781444A240218180011D04411B271028184124800242981A31189A28844000035014485084A8402808804405464811B22008280044012F289868001C01200005218180000004100001004004912022880880125226128144C
-:800E0000C01400881450818024840500220000477300001100000040081400200800001100002002000000122C0180010000100120040000005FDE0C10021B119014A0131216812101F04158245A8128240600004122411008001212442116729232124480A88C001501852884A54420A1420010F4F5F100A0112428121A011111129D1124
-:800E80008C5188144285180C480041402452812E24482A82224482C11224121819A1A81A911810414101851853114280A844424004F041CD202151420000E08481511130183B15811A84448801820045352428282445044F420192249012188280A18812A21011110842404258C800860400BB89F026222F21A2122B11122B11C0122592FC
-:800F0000832F31F111119B881F98F848888F18F44848421F9454111C548985F844488F44F424444B244F4222E24202284554642AF322222D222E122B191AB88229E828592239F812131F11B189F991898F84B888F44848424E488054C885E884E4B1036F2252262AA1131200182512C2131F3191819E9885B888A44C4214150115588948BF
-:800F80008F44544C4B246A224204405444286F6252222AA1131AA888825022213CF1111319E8897818B888A44C4200405888481F4F010000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000D8
-:8010000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000012
-:80108000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000092
-:801100000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000011
-:8011800000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000091
-:80120000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000010
-:801280000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0090
-:8013000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE41E
-:801380000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000000072
-:80140000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000E
-:801480000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000008E
-:8015000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000D
-:80158000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000008D
-:801600000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000C
-:8016800000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000008C
-:80170000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000B
-:801780000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000008B
-:8018000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000A
-:80188000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000008A
-:801900000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000009
-:8019800000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000089
-:801A0000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000008
-:801A80000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000088
-:801B000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE07
-:801B8000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F0D4
-:801C00004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000000000F6
-:801C800000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000086
-:801D0000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000005
-:801D80000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000085
-:801E000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000004
-:801E8000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000084
-:801F00000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000003
-:801F800000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE44F41E18102481C8444688241222621DE
-:802000005248446428641616A82820088423A81818299882114A314442873614141225485986A04200133222100828406441441E22828210F62F85206414355881C911EE44724482F6825416041C22A8A4153C22684733522F346B819E42CA21F4234215C4119F41329A87189C3B8888468CC66914481C954C87696E1C4E242DC441B847A0
-:802080001A86C4456722222B422D3A4AA861A3816D898F8B0C101111D88411188842C2841422004A02444B418B128226018682449241250228188601902844C03A11114E14814B84816C044432809841220085C24232844E8284CF930A139438250842214C4406181250814C988494230254721A4488E4882124721144318682F0C4288430
-:80210000501213028487240016A214285C38228886196422004CA41280840144AFCE09200400008924A22400410049022440220818248298003481121890C100000041844302420000401254224422828812246F290D006014114C24024904260428002124281042A2180000A0188C11914814C2C048421C0450814822002800430244444E
-:802180002238200921A081AF35090000000000140000120011280000440000000000000000000000000000280000F0DD3A80542481444384022D21C5016082481981994C84414C11D242A82449496898453234244E888502856423504119D3210B19012605895A822889028044120487622A4804844B824D88BF184A922413019D22813587
-:802200007442082283D538E11114180225F182112B218CE8812201152882266434CC37242E948674C2026C6124004428CB1223C8254E1442AD8448E028E111784288C118988CC1184B424312088F8B064B2445425829CD421C1258124902169B218934111879C492284C19928628CF1198288C084335242F8458488889DC220325B511F24B
-:802280008112A0214CD214922185C44A448904905187244321F1249288442A04C149F86DC2103211C0244034422885E181041E48248048581A431168831848004E214D421CD282C5242E924461901442212841118D1282419A16E28822022C2918028184896381444782A884CF1301407422414803264254281285210110180412181B4191
-:802300004E31121C322590444224424D1287411812A02126823224282C914180542410A841462208802188238101009FF3427224218181014646B12871126194161228D12361152D5A1E2825D6141A16744491148144A138611D241CA224A1263214213B811C7112B18C91274939D1A3688220D21248289144238116CA42818742A27A28CD
-:80238000F2374324512CC1118450229014128C1101242C9141AC8192128696514CD44181312110024469741411280112212928F214216C6863441AB4829428100824124100258801C4200587F4204284221161441D228952833994182D181814ACC1448911B42341C4314226454CD484E423041CC2227654823225A4211C3313218B2114BC
-:802400004E911C48481482B2C33148884223212788361A38A88A22F23BBD30232226E21461445450814E114A31B2A02441142932142932216033C0188082814EB428AC24288954A183D84831421212836C822E1862478244428C6444814448C2C30212C443C3224A12F4A92660812184839628303C2C4144914458293211841170440112F1
-:80248000468224521821181E84567816011190A1418124400442118216C118865414BC021388B31812C22A4452882C8489FC4F1200181084A11290242883425181812064812782844CD12802004C026C022810724C2231142612A12122842118244124148902008B4141A0414305248418C42CF2968360131A722862136E18598261425902
-:80250000E192B183D6189148184817232CF348252A213342481668B250241E444CD341A62484253838250E268253A4848392384C6CC3B7418E2C897428039C9D548B1A2F84422411BC8A21F75428AAF4AB3F50A200C44112C3721138624818482151854358484045C8318012842282C24A8319E2548265482A781194524818824A113122E7
-:8025800011804481141804484CE18354421AC424805824DF44012634412144334264341536382514C82281803124122E131004450841001692446022408121A21223420128002A81021661442044420282181014548260825DD260842604214415422442249C22211886114211260828478248411A149422290441414002410080A24121E9
-:802600002C4254241042E234014280098885941282004CF8BDB35084230128148C12311A488011020042003260811C82210286C444301180110286814422211223846122112A84034A11240521212850224A8284046F370928008D116C0220041D382A1401844200001002408221448212821C018044E1848832818068448001414014092B
-:802680004449144CE442480841211E42CFD301C02243410200C032111C81419311122C81022C812181230224009A041223220572A021200112124C44024E244222420016220229885184604826F97D335021842411004C8242652440022004491144849424D024044396282A18D81422925120114242A812E02144542240C4843022400204
-:80270000212A082F11489864881840E22E0D181811204102444844A0840014490A2230843084103482482141460240140221146448212220982100504200003044608870484498846F5B0C190547118D2412B74240190190211341420100284603842AD4810492C0222A11010080815882008E44499288184334412224412301000086B256
-:8027800048222881F49B8A4058414812004A02212211C490228189240242290248292182013A48219442C08814297828C14924193C219D224022B48102511081424494842002002D42F01B58143AE412023A7322D299F2226485F61114A6E611E5A251238D12124F24B32431243E127F2699344D314F2571643A244E4A2AF797485F2536EB
-:80280000142212A0291F12E12124E33188E61BB852F188827B1245E111E4143242174452704424AA3565FC3A144A58861CCC48CF41024D14D9D144518B5165764573257946B84D7523DA11482838432E4C4C1291244C7412EC46E842D64147A488244E2426A5642F11412CF165821E221BAA2D231B2233F64C2645A4361CE224B461D162F6
-:80288000E411C2482951622B9A2D8C6B888BA28426D448018F6CF289E3F041232F61741353741E3522B042E332D61282B242E21151138D511938129E22422883D28804D022FC22346365222971A3D221C4C32D122994482714CC31821E1329E42252461E462F4ADA4432242C55362C146421414486F2C482EF88A64C4F84B126F9E5CA00EA
-:80290000008150184800890889088800C081C081C081C081400510614860486048218644211824088AC411C011800118E024014A011880017096031F44F4742F3E2A8F82F6292C8FD2F22C2DCFE2F276367F76FAD3D92F9CBC92D989F859BAFF6AFA36373F2AB1F3F164255FDFFDC5CD1F5BFB3C2D5F1AFA6E7E6F67D7CCF4B7944F3AFAA9
-:80298000F7F197886F497984F1DD711F14FEB6BC4F48F29554AF84EC4DFD9A489E372B912F11A3513AA5455E144F21E16BEB4DFC7456E7838F877556F854945AF5F4E4AB431417647FE5F5292AAFC3F239248FD2B24CF61E1DEFD3F73EBF7FD9FB113ABFE3F31392BFA5FB3F766F7BFBA3127F4DF5B6B55FDFFF567C4F43F34E1F5F5EFE77
-:802A00006E6E6F61F79E5C7B134F31F1F7F3EFFDF514964B917FB9FBD1734F77FF14B57F4BFF9E3E2F45FD1AC86F5BFBE2342F1587F731327B776F65F542744F67F7B4344F4BF3FCFCEFCBFBD6B8EFC4F85858CFC3E7E242F243422F33F73436DD1FAB22DF92F22D2DDFD6F65D1EF7FC2F55FD48411A7388F9D81AFF4EEA53E312E927F143
-:802A8000E7A66F9555C64F47F7ADFC6F56F66BEB3F17F74C4F5F73F521273F1FD7DCB812E946FC31195F5CB613DF21F83131EFDCE427FF7ECC1F59F325F47F53F341562F17F542615E544F24F5F6F62F48F834966F62F87C5C6BC4AF84AC554F6EFDBC16347F21F51F735FF3F31F1F3F53722FFF4E66FFF5F773567F7FF352D7BF3DFF1F66
-:802B00003B3F19F1FB1AFF47F594952E914F65F537366FDFFFBDBD4F67F7CDCE6F56F66F6F7F57F77C5F7F77F5D3D73F3FF75ADA6F61F1F2762F3FF777F73F33F793133F1FF31EBD7E72EFEFF4B7B73F4EF673711F24F673713F15F6565627424F63FBB2A44F4DF7D4EE6FCBBBD6FA4CCC4AF46CDE7742F026118001471240022683240223
-:802B800034408384022C120180022821443128A0242120021470220161200226032603240082248244B048225848825F14058270226141217062A1213011241220417211085331421289226114221411282C459111282C011880912118C013684D1240C14446814483441284022C52840042143F51032CF4112485F2112483F41124A7144F
-:802C00001F41B64AF1912CAB941F89B24A7995B84A3934AF3439342F147B34D812F934481CF9244A1CFA244A16F5255A96F124DA9E256DDA9E244DDA1F49D224FD91248D931F49B248F99164AB941F48F24A911D24AF149921AF245985AF643924AB9447822BB4478229F92448984FA2F4373AC04A1F41D628F4112483E441521E1B61E336
-:802C8000F49128A7441FC9B64AF29528AB14B2AF7439B44EA1B6F842852F8BD45AE92AF548B52E8A8D851F226555ACFD18252DDB4E258CFD512C2DDA1D648D931B214AF9116CAB941D6CAF14D941F24A9528AF74DB85D62A3924984598B2478A29F9364829F8245A4FE80884008004000000008400000000008008000000000000000021DA
-:802D000040240200000000006F6A0713E21102113227621846685182121682388830182A0C422381B124C1244C468864913682C1224C21011AE211F24482111843A2348B4A2592283384A328211542810C46123422868264864998C4DFFE42C212821FC19224841115382126D81452811C4258611FA12454822F212222E284124129984265
-:802D8000292212322823B148A2422D2241882249023C18751401C287613487111908901A8E32A082EC0549024E1126F2343410714288624289615216D981C61D4C7214C93226D8B4C84987248E28282C2451284943A829278423A8121218382AD121612243F328914A624612473217415608AB2877851B126B81311312218C98422E841E7E
-:802E0000282C58242243E821F84B65B022B111D21C11612210022213081188C0121246229122224A13C12549042A5418272289522287442A04004D82112028F681242148247028214802A92143022764A0248CA4144B423FD60C242829012513C111442031281002210041184B48202A1404258212064D18E02221019226C2246901241102
-:802E8000C184E148184042582241284820120800DFE80969D314D185C221478228267422D2813242241C41AB814D112BC11594D215C212C3361C9189362846954D837161B4427224227444727412E158011C427822384C385CE622D894A184A7181A8C482548E242C8F82D882A44E8442AF25C4424221116613226055C932424522414A15C
-:802F0000886582482541E121CC242E8C8C8484424451864268442384B41494915361422342322831411B248F287241A84113082512348424A04A820028F08E7C60614C932E50281302257221088C2241311213A1142449CC1244832441712458281CF4422C185CD2862122D342912221A6024D1184D048B418125C4216C48281D8834811DA
-:802F800022B2446AA18CE28244B88484F2FA11A043832413042634222D238D13188328148804101214C3183442442E488481428D82002504241242C6E48244598428A0482100412289511282A3B138E8A881DA843828648388F2E32C403844D02102252114044A02532281A8213842890160E1438155211EA419B2188AD421E145A24846EA
-:80300000748508122C51841A3412446D1826041094244223E422DD8424821414A8612F41D8281284F8EA7914400281890290182885C41224821249044D88292281322228840024112922023223A2124D28221302C0211A14416882122C821408C412002001489242428FE54E21418673251AD834C2425D2816D8842139232588BD14044E98
-:803080008C27621C913817C31A528489D2825A2856D18274112295B2688D36C1181F4271224448C4643D1CCCC428C02222812B418F798461822A684889DB24E288318C8624F8BC9DA04200602220227122831688840920136281002149A414194434218962222843624461822AA124C8C0131F8182012E82804124845628F04886128B14F0
-:803100001618E289E4442233482AF44DA650422012064424460119018A1144014582031A280110046022842121112819841BE4685424122C4858422241504226824202248CC4824B820047284480C4484FAE0484118341123813C110982499B8231429384811C3E4214248284108601212182251241928589684238292844812122142167D
-:80318000846144181A8A898201522723282284A021E0AF0D80011922412232246188291422C11200440045426814111586088045226623106842800120084129030000102882221224048884C2449FBA0B9024608114284A2124658480114228913210022651218684280B4111452811110480049CE42294482842409928830446190A0090
-:80320000478141C292212015C2225FE50863484C03204125414246416212111A0212241216144214440A1283E1C43222002E124888206841812942221104202482D6248C810824604298442140F1F4AD20412102250650221E219044449022232404864822B224810121AC7241542240142C988438111A3C24898882E481022018428284AA
-:8032800048C8229441811242282A215282648DEE2082021524C221100480621E80028DA4222AD11822084222A0188C62121199A8841C0190125082205828418C92889084380011825280618218448384840BAF150114002A41113422261134221240022216622400818C429818281002C0228A1264466C2C64424227822001822C31288AD0
-:8033000004248924A21822282B484088211808AB24DF8A0236081904364498518C912111A2C4A02110028012138512F384411D18804A2111142241C13AC088D012A4841C44982244140044902A30187044184228245182F0A84FF02425437A2143F334363B125F32D577D1635131337842197119A335D7424D5230182A59182F42F125158D
-:803380005F78F528A8241F33D1125464237421A41929FE4C4227452F45D44451888F84032D282F2236144E452E221F26A44219D822F152288D222F44F852A8EB3D27AA4ED446F828494AF26EDF2490288CE34351814F6172426C864D48EF45F864C83E7227828A7122F812222548E23A43F231144354282815F324688D281D2E3B118EC2CD
-:803400006D234E224F6FA13B8AD424F238CA282B894F142759C18FCAF21688497112F8DAAA83DB88B8287184B89CE562A442497AA8B828A431E5FC31CA142B111D15902F2541A9211AE613A2223CB3816871212CA4947E24ABB325F81F2D6D288DC9822E8823F8121521C3E79AF2252D9AF924C58558C34F22BAA1B882F282832E42A76135
-:80348000C722CB1924824A840247249219EC43E122921CE04151241AA18C2E422FF84601008182814881488501819088D038081C08888008811008000081001011120115D82418C112114911C11217882008860882200182F079E2146B225F12D3B9D1ECF73E1CF7533FF1E3E4F45E7E4F75F5726B3FB7FF9A9D2728AF88F12C2F7F5AFB6E
-:80350000B9B98E98D7523F99F9CCC8DF19F9C5C7DF72F86D651F32F27457BFB1F171D7BFD9F8D84C9EE69ED53F597B81F3C3A71F2BCB114F7EFE9D87CB33CFFAFB7CBFFFF5B13AD319F3C1D5989FBDFD3E166F69F9BCB64FEFFF2EAE6BEEFAFD38384FC2F4C195346B335FC6F721326F61F7BE1CF7437FE5F7647C8FE4F77E7F6FEDFCC240
-:803580005AAF82FB9A1A2B5C6F79F98F9D3F31911ADF5AFB8BB9AF8656195F7FFFAF87FF7CFE23235FD6FE99B99FBFFDBBBBBFBEFCBAEACFEBFFD6FEFEF23F98FE999A9CF1C6C1D731DFD3F2ACBF8FF7734BFF23278EB2EEF41F91E125F53E162BABCF6FE9AFFDBEAEEF8CBCF2F978594F43755B4731265F13A5114F61B33EF3252D28974E
-:80360000545F31F31F1F3F57F66BF32F18DBBBF842527F6EFE2633AF865611DFDAF81919AF84F41C181FBCFD2E86DFD6FE393BDFF7F51B1B1F36FC97872F3DF48EA62D426FA9FF84867F69EF3BEB2BFA7562EFABFA7F79CFEFFE63B42E263F5424E125FE1A9ABF1DFD3C1AEFA5FD76766FC5F5A8B88BDDAF8EBDB8FB2456FFD841F3361449
-:80368000DF43E723F35F3EEF43F1352E6F45F36D34DFF4F777772F6DFCCB33ADBB3F31B942F53F1EEFD8F9F2D2BD1BFFF2F38FB89F9EFE89891FAEFFAF8EEFE6FE3B3BDFDFF79DB9DFFEFCB7B66F7EFCFEEEAFABFF96F25F7FFF9FB6AFB3FBB8BAFFC7F7BDAFEFC7F6DCEE7F46F375772F26F292A2FFB5FE9399ABDDCFA3F17AF8CFEFF9EF
-:80370000C2DAAFEBFBDAD48F8FFDF8D9CFE2F5BFB6A01280016F220145012440220112204102241311288922481481820171A092424322840198302230240048248C0400844C82140885249828F0A28D501244261301C0121A7624A1412E81401171421194222289094C124451A1282481611CF2221240624124204214AA29241624022395
-:803780004234228285225122128843938222211AA48470E6092D531F41722CF2112C83F4112CA3F6116CAB161FC8F64A911D28AB945781AF24F93548AF1479A5F8429147832F14FBA4481CF9A44A1CFA244A56F5264ADE212FA2E45DE2A2ED49E2A2F491242E431F49523A1F49724CF39164E7341F49F24E111F41F24A931B29AF1419F5C5
-:803800004A914B4AABB443FA42944F8294924F8AA4944FA2B4B8062D4B1F41D624741128F4112C23D4C134428E4C2F54F9816C2BB447882DA35F8A84F8A5482B9447882F1478A6F842914F28E514A8D25E85656A1D2D82C6C58B16C5C216CCC39E4C2D439E2445A3694F34E889F646831E288F74E849F242A14B48ADB34B484A79A4D862FA
-:80388000F1B448986F8A94924D1A3B76608882000000006042800200000000901484000000140084800400100100002800240028001470410E244131168104805442A9110A90182001362189F88218182A147842082B42945227A2182394E8891322331196A281124D424C68C2AD41CA611323D222082432322286948C824E2840F19F6C10
-:8039000024388A83318419323421432341B4119421194543C124295168222D24688B244C21644A44E02284223424122D144E84A2468212112544E89402414446088444C688241814AA4226487414197C54062827CC2D1147184241214B16441848111F46C11319C23429F11429A682F222428B342075A2E868A1421B4229E48472222475A1
-:8039800032FC6891A3AA2527121CF11241128724578CC12D4C4E144F8661222241CE2829A3214722867468D42892244711F0D7A990121A021226A121002D12C4AD11284008009012439898E04443684400841A122211221C042081684842442228148234D028088084088182888C1458848F8609222042542800CCC21211214814968811C7
-:803A00004416014100106444414429044842211223423424D01251418D821243124102818414601422A0412F44222244280497143459942116499321E062E1245114CB14197218512215544127331382D9E2F129522E4441111411B02135141B42CB2163E242914449012328912836C241841D5224C3724CE1314243824826CD242185227A
-:803A8000FC2218118D2488FEAC24681C528141004CB26C11D34A14C111314CC811261141D186316A2E4400459144C05443A44226A84269220530A216321916141AA82125C326488302115014233424184D682396629024F0A21D100538157229022C014C611123924824178164497122A6819015214414401164122341D124152441664378
-:803B00004441809221C623314540186D11B1252288A43830422188834139482CD8D20B4331124838C05241430100411858412152463381212731184C7114884221A182114182B04201781CF4265840A821222828401211081220914446028426CC82E044F28581702288A22400262125F44B243091DF2182482935282D8241004728100109
-:803B80008D84788D8289C5420016C82A504361844681324461400443B414422221C6448622C214802A41C21424CDA4800440A114412829024B148142C08420088B121222224A0A1002214461126268821A041200172188128608288B21E0122458821082088A91142968848994882F5E054387836213E02483B642A2244931981992828E78
-:803C00005549B128B812DCC3B28191223E816A711144DC8688741A926C13C414E024E1A2C9521373528641F118224AF112248A02F04422282E42A041411AD842C4569249E94831484C71C8F6A4E250A200A01415941416541E48141E4818844602A04121504282002813022C4114A22C2628044644C12410B12408814C2262811C51812C14
-:803C8000496824800A6082A9223848228F47062C721412A114182418268134818228104234410021A624AD2C8A33212112102141828414220244411C0144C51132281D228127269F2822344C8614286441A88942480483ECA5483241604234432402210028213081216B824C28281142159448C82A0885061C3811962298144434141B213C
-:803D000044889E2200442180282408A016A0A42304808481F38BB51484406122400424264124011C113641A021A2130800284C0844216C02989084484024042723442C1308482A048008142A04211216042189388444EF65021631212C440C5242008CA32411C088984A111B1418088114D014A58214002254002C8442027031282812118F
-:803D80004971210C8117228C9412448484008502009D2214102202181932122304424311422401298281012B1248C041431241414294224024229122554A5186901441440041801402888686D442042728482880048F15052213011005144084424184110414442672144111C811672180132266124428C6622422008412110042490290F1
-:803E0000826144481524842121E8840348288C83F87BB7004C4244642240140582824800908C11312058418608400844101975288111D4480442144482250124284024028042312C0000C01810F27AC52029083B2180052C12B145314115021931512C415882811582038061242223047A480460243062C022282511C1613D242591421CFD
-:803E80001281022123012443125428624B4949B848E2B20C848004135284444608004E2C142C020059018D14859214212418442E81002C2C634114124018888402004C14840C151482621221C48424280021419BD630317B2A221F63819425136144448ABD444318546C1AB44CB711B11512B618F85D32879D4B1913DA224411A6225F8216
-:803F0000C8317F21B844FE44442D2445F1454227911612A71215EA4252E41D421FEA7446F2A16923FC484A4DA5E57A42F4245247A22698624548BAC8F4FD2FF042318E147594221F41215644259B4387131F12BC2232132B194E11273B67A82E9A8F19F1231521B887344B244952622C44A73836E4C8329229E2245168144B121B222AFB6B
-:803F800015A26942B222544489A26A8D822C92871E122A94448D8C2F4CDB2852882748474B4FE2B2F84E4162113CD21CF426212FE1D522B521C6215F4462291F14C4131D8137681D848752275815FA84288E4D45B421E66178E1B924FB69257127155F28EC16C5161E124F82B46312D269D256719867588F5654179F14F262216D8114213B
-:804000001944B5E3E445D3A8A1291A3442628BD7D8982FCE0F1004E1704C028734501850181285014C2881084CA8418848888C44D482048C048C0884100200A17048028502890889088D820012000081007FDD44D264D2D5F234324F42F2847C4FA6F73B7DFF76F66B68DFDFF63CA89F32F2181CDFD9F8D4C2FFFDFCBFA7FFFAFBA3BBDF85
-:80408000D8F88DFDCF4EBEE8E286D2DDF4682E7FF6F26D6C9F9BFF49191D45AF83FA382C2E227F76F664215F5151357F1AE184DFFF746AFC256735F98FAFAFAEFCC181CEC89FB1B11BF11C4CAFA6F69C5A2B319F82D288B28CA177CFC1F2E585244F63F6256DCFF1D1EEF5C6785F97F77D7FFF667647F465658FD3F229211B335F59F95DBE
-:80410000F87F38FC1F85DFFAFA3FADDFD9F859ADFFDBFCBDC54FCE77C5F7E6E67FF2F62F6D5F5A7E45F15DDBBF927218FC44236FF6F666237F55F41B29DFD2F749215F66F26B4ADFE6F22B263F38FA6ECEAFAEF86AA25F79F9171D24EFA6D6ACF53E388F82C268EF83F33C38CFC3FB98FC242E225F71F73C3EED2C6F43F37C76BF73F347EC
-:804180004F3B445F57F739341FB3F311315F58F8D4C3EFFFFF3BBDEFD8F92BBB8FDAFA69B9EFCAFD3951AE3B677E4F62FA2E667FF2F6F3B15F12F54D4D6F1BB274F6686A6FF6F666675F7256FCFFC3F151347774B754FD4F35F187E6BF66FEC9C94AFED793B5F12C3EAFA7F75C7E6F41538885F8961C4F47F74C7CCFD34AE223F63D374FFB
-:8042000071F153162F41F77977FF73F7474F7754DFDEF679B11F93B111F38D8DFFB7FDA7E7FFD3F38D9DFFD3F3BDBD9FD3F7AC9CDF5FF1E4AFEFF8FC6587BF76D2F7F2FFBD5F1AB5F5F53E7F4F41F46D6E6F76F666677F53F713337F5FD331FA2F6F3FF6F467272F62F28FEE3FE6F6E3E33F34F69F9F7FD8F834366FA7F77C7EEFC7F7285E
-:8042800029AD68CFC3F77C7CCFE6FFC8CFA012B02201008A0114822603001001842C321144111001114A128392854A820822302420024302416012481440A24164482884444842C024824F710721443415B4242151324C2242A416122511D142A1422D1513D142722118F224481C91444EA161142642C552E022419454282D411741652287
-:80430000691411672428411127121121C0815042B22184A92218C8425F4E056D521F41523C1F41724EF21164A7241D64EF14F11164AF14B911F24A9153F84A954B4BAF5439B42F5479B4F842954F8AE454F9A44A5CF8244A16F5264A96E5A2645DACEC49C25A1F4DD222F4912487221F49726AF29124A7241F48F26A121F48F24A921B283F
-:80438000AF24B985B44AB924F44A9243B24AF92448A9F9A44889F9A44A7F5C0165FA1164CD411FC1724EE2C17648D3C1F64C111F81F64A951E2CAF14EA88F24A154F8B744A25FB4215478B2754278A2F54E12AC1954BC21E852F2264592F2264553CE85982F5D12C25F2916C897491744A7291744AF28124AF247181F448161F48D628B3E3
-:8044000085943A4B43AF24B82494984B42A9F9B648A18E52BEA640280800000000002800008005000000000040014008800100000000280000000014F0444D24240011831454128D2119012351A218411180C1641885A21448422602241644258156482CACA1160224122001648443165628008024D824024A31422604627028F25FBF2026
-:80448000A41A2C2811641240843621421B121944334424134492412111200134284062184911029048430380118681614414302488228864002820482248CC8149F41A122442D2C01189C4253185B51194214361B22A546153043B14443125EA2124A4411A52128A3216248AC144211B483289D44A4222C51241124423744411D6A41224A6
-:80450000A28243B482221282A5846486E24244F118421F46092428860241002822704222C11100002AA414400100100251142A51482482181200200112C128008800004128102202848843F21361204264121E24235241A50200141260818112188032212100484601502185312281002362452C311118124111C18001255281818A149A6F
-:8045800044444121220080F4171C30112712230112222A61618E3247121833924B5429514293921F7012B464817134C8242528C47A1E282E141237224B124CC1142D2240562424816E1842424B8423146826882130122C8572B462442A242409EFC40E1C5243394206282165022952211312582818412A9117225D124C041E2C472484486D
-:804600008C2171122AD3823212C0146D621814230125D881C44442420029068A44A8144721444CE344220220E4E1091828181A2253418983815B411816C2414D11852211490823228301221C0468B332254061421686820163412611A42184E06821548291AD825022414826821882848409AFE50281430400225022C4C011142444113043
-:804680008842204402DB1248812236180841224220082C08424448178580D2844462883422A9088318810140440249F2D35A402A0463124885342DE04422D88407884B242460118F488152688A068843038244414880F3411280414478413481108442044C941542842E41102414E1883144842C08C89FF70C001941221108409118400291
-:80470000944009004414000044212C0412AC18482C054241842C0121002818C0280048272411932492288A51482628F1D7F600441243321A4D2148C71225D98421D118035441308858C3C12414AA34354A18C8221285144484B81AF2144A42A08444C41684B4450126C44C6413491AD81284644C428B1496984C16C484812EC4EFB20D24D9
-:80478000400340480241681C8854228668141518128188544810084C1294282C04588982049812450214135822842220A24181190686484218022822894888026F7B0C106132482814141126232112426111809444168202121820844216942224104401108441A41849728412C4428014344260238400184002831404B0520E40524850EF
-:804800008444442825548400843022191A42D42C34454286359C40A4210019B55418414441829944C044420021A88282182270843121304482411A18228104DF2B0A80021160818301134131122501A02121202201210000428014023A04A024288001186828400222260442100200422222214242AE2540024828442B42295242818A134B
-:80488000815622184400293184A1904870291411C85D11842C422AC414150845A1841A840881348100148121811141B014122224210725F2BCD9004682028428C4148902281414192884212402802241022212C022304444442644C8428032844281648126062D14207232022210364443020084245F6E063481112827124001C02380025E
-:804900002814000040022B21224E1419C22284323D3890184A8111821104C014124400400810016124220000001FBC046212008841C01241C42069818902221854484CD68494A44C8C8C412A0146451281088E44182A8408C08242A01C1A28044A0948441A2A041827114A31844422BFCC0D8E25130A39011123D1480280014C02394142CC
-:80498000021830140012424868000022483841211200288081019032428082810420223422C011F088BA40080021278128290548114490620000232838821012B58141D481D8414408762A4549844A18C84149C9118BA488894491425048816C26041221832402D04282F4A9D1C0212F3D52323F31D42B3812A77263721EF11C1B2C8151C1
-:804A0000392F21BD61B181A4442F4391BA25B2421CE14845C1816E618D422D629F24217138F2964DC374D5BC863A161AE2493194642F8C526827AC8ED3C2314E2AAD421D4A45415446267444E63721A41545C942CBC41413328928284C52F51E2815DBE1D241DE13B241424C81C212214D2145F66D44C48749CB819F477C21D42CE18723DB
-:804A8000F214496FC6C2694A81D428E3218495C480F594A185928381212F22F438148B8238E7582B246B5246F242328B228AB43294865C04DF6F044D422257822247828B3659E141272222F322832A117916B122C21624DA24F834124B962692244B64165C57579423C2D37F4421E241A3422E141F44E2C8D114E846B828F53444583EF43D
-:804B0000D04481862523B42181A8514388952289C3244E32628F1F014414444068348446034A084E81C08249C4814003348C44C14840081008831832880010011150814652814632114A68814A48C8821288128816C88284881688F89C55144F24F61732BFE2F2393D8F84F433347FC1F51756FFC7F7FEBB2BFE3B75BFCDF997D47F49F91B
-:804B800014D33F56FE9183FF15F7C2CBFF93FF494C1FC6F7ADAD9FD27224F46444DF55F5F5E5876D3F7FFCD8E48F87E6BFFE71673F1FFE95951B994F11F1F4BD7F5BF5D6C42F97FBDE8FAFA8F4C3494AA29FFF59F5D3514F47F3D4D44F4FE5C9F12BF8AB8E8BAEEEE48FA6F6DB18144F26F6973A9FD2F27B7DFF54F65B773FC1D547F56F33
-:804C000075EFE7F336341F1AFAF1B63F11B512F114D11F57FF9292EF45F7E4EF7F17FB73345FC2F3FDFDDFD8FEA5A55F54F475F51F1FFBE1275F77F54161CF8FFF646AEFE3F3E2E41F9BFF91144F59F1E4E73F5FF397C76F5BFEDECFBF9DF1A644BAAFEC7F7DF1D7554F6FBBC6AC7F4F88F22AAAABAAAB228F86F7687A5F8E042E263F31DD
-:804C8000F727227F1351EEBFE6F71F1DFF76F3673CEFB3F732343BBBBF95F313523B555F2FF3E2676F6FBFFEFFD3DA6F577B42F128315FDEFF2525CFC2F8755DDFD5F5D54D9FF1F8734F8F95F678288FEFEEEFBEF2FE95D4BEB53E24DFCBFAFE36FF5BFEBAEAFFEBFB6EAEBFD1F588E2AFA5F31FD73F14F4F4B44F44F474D4CF61F1B338EF
-:804D00002F87BF66F47C5CEEF2AFAB41E162F29B337F12F27731FFD4F61B3FFFF1F14F37FFD4F3BEFA2F43F361615F3DFB93D36F44B5F5E35FF7F7F7EF6BFFF7FEEFD3EF13F368F15FDAFBA5A4CFE2FA595DDFFFF3F9389FF2FA7B5FAF9CFAF8F88FE4F6B2BE3F5AFAADB4BEB5BEA49FEEFABF7FEFEBFAFEBEFFEFFB3FFDAFC3F1783AAF7B
-:804D80008CFC5F9F6F54F474366F69F964E6CF61F3B23A2F87FFE4C44F43F5E8EA7F6A0845016302217024222162892292608920C9241220412488122104421941949490844249082A01881004180084000054400485843448D04802CF3A0A2681429121C7221118C48571115C3228145125032432460228C0142244411C72222874227A71
-:804E00008881A529260861124084C12865E2881248941A1A522A4180D422210222214142F05138C0421F4152381F417268F3116CA7341D6CAF34D141F64A9319F64A935D48AF343925AF343925AF347925F84A915F83F448914FA2D418F8244A1E214FA264192E5A9E252D5A9E24ACF591242D531F4952381F497248F39164A7341F48F621
-:804E80004A131F49F66A911B69AF24B985F44A9443BB4A39A42F247BA498924F8A84F9A44A8FB608ACF411643CF4112C46E3817448D3C1F64A134CF64897684EB71F88D43AB3A5D428B1A1F4481213BA4AB127B44AF8A45285D124ED11E82264182C64582D438E258CE4C4D232E8C9D638E441E234E841F642839E64A7349E646E971F49F7
-:804F0000F462821B698F6438B489B894F442A2478B886B4B29F8A4529F8E0D2088040000004004280000000000188008000014008480040000220000280000000014F0299120280180D2210211841184132209C022180012400C282096188421421604252C280222142741182694424A1222A241804414C222120024188302685F39023048
-:804F8000A10000002124008185111241228221828802410000122800002424184100004442640088200442904222001641F25E62001B3C0080124201103621221128260123024022021A028A93188423219614106A1883426282542F4124410646144294462042846622422044C212281CE121D2BC0F0000221100A11181909884219012BE
-:8050000080218358841004480000004400211200802284228482014A0821800121224008488FA1092C11011902005018100A00290180344200800800104404004042041180020000304200000000000041EDF714A01280014D11401182A24114218024820420121308804298123012289048388132298142E2114808844183942400402252
-:8050800004212CA24120014483F4B22E1490213021605110511A2CA214150230522242244222250100408A410622C0481A52284C2391212413180881447024220400230421222180014149F469FD209112800100001008000020040081828002004C0100002400A02100008C04000000004A010010F8A96D4001211044214114081008209F
-:80510000440812214420082024121844042880440288908486A812400241004042010010121408006F440500990240820460240040010031001AC414101804228084014400580090124434180026080088F042140000208401AF13090040022840010080012584018100002200008485012081818242021164108A840130820000400800F9
-:805180008001F0F7F710411249023C8254148100811810160894001AC41400412052844120C21458282B42882154442341A91429012282400260440010442881018FD2090022100418004821001142122412214120884228241208871418000012002C68894722100241842100134822110821004800BF46050000301110080000008400A8
-:8052000000000000000000288008000000508820030000001A0100001FC40C000000002001000000000000001004001002000000000000000000000000004F620E000000000000000000100800000000000000000000000000000000100800F0C9770000000000180000000000000000410000210000000000000000000000810000EF6CBD
-:805280000E000000000000000000400800000000000000000000000000000000000000BF9C0F00400800004100000000000000000000000000120010080000000000000000F0CA5500000010080000000000000000001002188008000000000000000000002A0100005FBA0E00000000000000000000000000000000000000000000000010
-:805300000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000421004000000000000004002000000000000000000000000CFA7050000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000240040040000000000000046
-:8053800000000000000000000000E7CB000000400810040000400440020000002180010024000000810000000000000000002FE10800400800000000800400000040040000008800001800000000000000003800007054090000000000000000000000000000000000000000000000000000000000F04FFE000000000054000048400400E8
-:8054000021004400100218808802218001884008000028840000800200004B11004001008004548588022148400428100240042810828401882810828441848842188204441828842148E041012810A21140C435000000140000484001000000000000000000008002000088000000804208000000F04B5700000000005400004840040078
-:805480002100440010021880880229081880088400840028840000800200002722000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00100240010080040028100200800200008002800400008004448002214840040021E3
-:8055000048400400214FD4080000000000000000000000000000000000000000000000000000000000F04FFE000000000000400100000000000000000028000000008800000080420800000070820E0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000080020000009C
-:5D558000000000000000000000F07F4D00000000000040010000000000000000000000000080080000002884000000002FDBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6
+:800000002B7B54F4B99DDFF8FAEFEB6FECFCBA7A7FF4F4CBEF2B35AFACFFCEDE2F6CFD42C6EF637B2CF6E2CAEFAEF6AEE8CFC2EBEFFB244E9F5E0E4110042100484100404208190416081A4404004411858401211002415014800125415814004021412249648924822048244804CFC10A8A311121901816542ED024211128511243411103
+:80008000D442012D86908843938884886582024449211904252811026116484204822C414482522810322450848D2200361858143F1D0E2E421F41722AF31124A3F6112CE7261D2CAF26F19164AF26F99168AF14B985F44A9643FA4AB15B4A2F347B25D812FBA5485CF9254A1CF8264A16F1264A96F124CA96E5A2FD98242FA2FC91246F9B
+:8001000022FC9124AF22F89124CF26F99124EB861F49B26AF18164AF24B981B24A3915AB9443F34A924782AF247924F842914F82E444F9A44A5EB9E092F411648F12E541B228E1C1B66AE181F268119E648F46F991688F14BA81B64A39A48F14BBA5B44A3B25B83F8A84D18595B84BC21E814FA27498E1227CC8E1127918A5C217C52AB8EC
+:8001800011F428C215E4267911A8821F8924F681442F62F98168A9BB15968A4B438F247B24D822BB24B442FB22484AFBA45A6D9D0080240200000044C024001002001002000000001400004840020080484104288001000000F071C124181429D15A911895542115383890A880D11444018CD9423418169949884961688674269914C1838D
+:80020000E118C44447222A84F814428614B283229213421D888591898221860210CA5424874488A48A42C81C43F81B71145932869426924529924A472159D4A1E431A4181D4885F214881D164944826424AA51491D2881002B2448259414AB1284863436212818183D1C43486E43274949D141248F21492488F81824967228E448044C6884
+:800280001289F4A4E324455143A3D118E68114D782542D8D6193B48D37826E1D95C2987CB18865241E4856E3337C815818278927688695166C044DC32E5C26B644E812984E6B82428E21AD121B18478459F81A811F88611C4B482CC914448E28493C3887648CC2482DA24368C18F29F4CD87A01240634165C1283412490121129044544055
+:8003000016048481414C130426A824848741184088921612241229D1411204AB124441442B128008211264924C3884408812F4D4C22032111812401804418C4443088C048C84C148A524121201844A12041890429046800180A29244228CC6111788812084344212200100844C084443F852971425051D2CC4CCE124A1E1C57218622112CE
+:8003800052144C417112C2484B8330584A9854871550241C32428C944249D1848DE3A4722864444B24864248D81C1195226A9121EE122E8287138CD8849C882CE44271F2EC88A2C15E283816081FC54801121F8211341C4E184B424416AC14192145C114156285252854828C9782481D48814C54250042448F488184124A34648289436485
+:80040000D1C432198BA21427281229985482422D229E48828CB42C084C91841F314A322511411608241A480AA121A1C048001AE4C24904424D1112203222428F21042B4146B214C2481E244280928281222E43114648892A366946388881124961422688A9142A4108FFC14262841098411745293421896523842824221852881E6825249F
+:800480000826E86601403A4822882538442903C1321885A441400486E2417242D44288C1143A24628888324B828C2862414538829A14F434DC608218198441D8842221084D1230118742931C0444248C01882449A124294181C1C426C428841E412332824722469A448E24284624318889014B424430382118845249C218816AC92AA04221
+:800500001F5408184C82922A2819C14869984A4011881142280181502E41844048C42291181400281885041C418211820330211A04118182484140288524021048F2889F141A922493F2221883D1416385E5A241A1149911CA11CB41988F41524A1E8A8526BA6C81716842C66B811E441782482782266283AB281AF24214441AD842A21266
+:80058000822DAA8F22C1946E14181E4880C48422AAB19866814C33C428C628B247052924011147368C64121A3428163422C0128E480042100285044410081E212444478212584449414423312630441249D141240414288D92868861818744414A4298388688D114F4E34D10810212264812D428314442210046021A04004C120244421052
+:800600001C88C418422148808204322081C44800324B1812504281A24D228A848201890881823F150E24128042048141901C8B2C4604B028C5888388880824492169C8478424A082284148601145A2214810048542A12119014E2140A118800528418848608222423FB6460224B43449B411944448DCC14918A50148203141185210414890
+:8006800004B110D12241440840A242142C32481821608724C048860A2250344110849464439818E044C9258F110D1D48141A041143022601220023C48188C169111862889A849C221024A4A18504284002408208841C824822E42402211C88984829022924E128416182100485F235B600210060A18453322810010040024121818C018174
+:80070000488094494684412802802462244068A1432532422223848422169A1570842242243414008C7188F2989C806141F0221883021C210114442E444718856255421C01838141142444B24108808224051C444101122880C2228081E1822891444C91444A22A51200242A84C218A0422FB1074A2232241584482442081E848288811249
+:800780002243880420041820080084288044840558440000A02841002110012180712212080000DFD809437981084032412C622424105A214D421124502842468E9441814A0850C229C11242212391122150122812231282011110C4248088816C288248A081B092824811F4CB536082D0813448118392113031A2135148E0C1120990287E
+:80080000A0182B28482D1A8438A0844084820A1C84081608C894811820C411A1384C21B2120248822394291C014B122B84709246A1449A62918782BCE495D5A9F1245C1E376CF52688AD883764CF24C5232C54A38D5AAFA5E5281BF11484CF4DA94C3B24AD423F1384A6116B442127244824252194482F2398128FCDC4319AA4518FB6D391
+:80088000849215DAF8B352DE455E22182CE84638C949F88898C7819CD76CF2E91FA0311B1A242F41B58CB22DF2126513352A8B8293D911944C1D89BF89F1DC1C1A34848285BCC68EE182C48C8DC9C42449D84AB618A2644CA11449F871529A3312849F23C23227A42B2466B51674D8A124281081F5C4642B6C6D422E38271423A31A4621F1
+:80090000F8211524573225DF49D23172214436248D235D485F9DC2514E2288124B4688CF1C2142A4451E19AF8404A5524443F448188FE73164262A9B4127211B66282E462A134C098B432E112D22822F623DB22E13C7C46D1A6B882F22B83481B316FC3874284CB29CE886CC5F000000422004422002A04800201A28324822200A001008CF
+:8009800086048604860486041748F0814490418811888488400220080000EE4C141F34F43731C517E2CDD572D71BF65B37BB73BFF2BEDBD939F68B81AF29FCD78C2F28F887D56F6DBDB6FB76BE7F7BF91C5C4FCFFFEAEE3F76D4ECF423294FE2F2323A4F23F3B2D64D566D841EB6FF58D864F4169E6CFAB7A5CF67F2B6B72F1DFB5557BFE1
+:800A0000EFFF67A73F3AFAC2423F7EF94F872F28F364462B514F48F8CB82F5F43818CFC2F324946FF7FA77DF3437317FB3F71F1F6D462F85F15F27FF97F62767FF96F6FFBFFF7DFDCBA3BF98FA9796FFCDFF8A92BF18FDDED66F8AFAA6BE7F5AF8B6B4CFCDFDB8FA37324F625B336F22FE262A4F23F7B2B61D132DC22F65FFB7DF2F29FD16
+:800A800072FA8F61FBAFBFAB8C2FB7F712137F7BFA3B364F6CF372F63DA32F24FB1F876F49F1E6844DE66F6EFA7F7EE5FF2A3AEF42B238F84E1CBFE44EF141437F13F52D272F83F3783D2F757113F13377BF13F3FBAF3FDDDB31F48BA1A5735FF55FC7FFD5FD76FEEB913FBDFB93B1EFC1F5DCCCDFF8FFC7EF5DCF7F57F77C7E2FA1F13C5E
+:800B00003A2F63E33CBD52F1D4323FD4F2E1E32F21F78C2A2F43F3F9F3AF23F357363F25F5BABF6F6FF322A62BE79FB5FECC562F24FD64C67E524F6AF8C2826F46F63C1CEFC2F324D44FEAFFA933343F31F43F33FFF3F3561EAF8BF33F67FF93F67F2FFF93F5BFFFBFFDFFCA82BF98F89797FF5FFD8F97FFDCFD76FEED887FF8FB8FBDCF34
+:800B8000C9FDF8FCDDFFFFF4FE7D6FFFF5F4EE4A6D4ACFA3F772764F7CFD12526F2DF7B3E77F72D62AF69C32AFEAFB4F47AFA7F7F7A63F2FFE7A7F6FE4FB73733F19F3585AEF68F546D46F4FF9F6F66766EFEDFD5E4EEFCBFB2E3C8F27FD6C6D27F4F024113024842A4168121628220186088A4415011648B49164441246147148044418FC
+:800C00004218280022E0120140088C448244E28144A2412041A1488054288A9428124282EFA302341341024714126714D01AE1415412482521D11A91442B14908284A1824A410A24144D4A81241248522522442241A221241A22022CC1246AA848244D482C284234B4214118431A18F4A151D032F41124AD121F41724EF21164E7341D6409
+:800C8000EF24D1C1F64A9219F64A925B48AF24B934F44A934B4BAF34FB2448AF14FBA4481CFB244A1CFA264A1E216FA27498F5225A96D5A2E449F2224A1F49D222F49124AF22F19124A7161F49726AF19164EF16F18164AF16B981F24A915788AF6439A4AF4439B42F4479B498924F8AD448FBA44ACFB30D25F91164A9F51124A5A26185E1
+:800D00009361AF24F18168AF6691412DB25F88D62AB1B454384B4BAF34B224F448B1678A2D314F8AC5316F82EC11DAA2F488212F8265592DC99E252FA27C91DC82FC8164AF22ED49F26A819E24AF12E849F46E918AF46A1582AF14F38128AF64217B4A24FB4214478B29F1A2482D34AAF5B92D20280800000020411482021410040000008A
+:800D8000000000401144020000000000000000000040012F4A458182518229C14950144B42B0146414A13C34182C91484688F6241212D902624A08E12953C29F64111872428494484E2427442E124D3844218299D65872724F621522A711D04874A468811A92142502C3480CBF7645626182135128184B25AB142CE1A3E43862812C391856
+:800E0000572C46FC14814B292D8B46E82428A54881222B2448425829E241C42822AF61C2A418223182211FA2B514A28142828D248289082B84124249DA4A2C94C55B611362138CF2939D1412272C16381A3784483D144D2287255F22914D23795BD4A6F4442827C84A61A64D482F216CE280A649257284E821344C6FB461852CC24427A7A8
+:800E80009CD62C65442B14965C221123C1288B422F4AD14AB216E8A22823F4481468AC83F114421CD43244CD151AF287453026121480E14132481A24A24818843091181B418DA61388034E118A1428A2242C848281522481224449882292212342B468E148E2145941871460145038827084C8844F8A0443C834A28942F839B780118101D5
+:800F0000810044401842180218004348118408462108211002254A0410022411005041210028832218021490889018122002F02AFD1411002B212A54144D48249965121E68257148420321C9924242B129A1414CD221024C062823A4A51820012142222F8278A89248C0846372115294589492442F88C4245A7282265448214CB8846286D1
+:800F80001FB10A11111229A342544841279426A31435384211215024C6048423288172214282042562245A4804502220042AD828024562284922D1496284838858241C18C4EA4592484490A44CFA4822EF450C8921041008C180413828506828122126083C54141846C245989024822860822301190184241722468868841141401182533E
+:80100000214C819248221882181618120260BD9021D041134C24A24230241121384865182412561800128644014071440226C82C294C4404481490245C4814A424412215628C4280581421282328C8148CC4848481FFE503486C0225E212D1821154969C04460923C11210642142861A0890288A9444282712CC2108001E429825C22440F2
+:8010800001112A652818448AC2114002C84C148821B42804182A31244F85470218803248241218901218118480941226C8124800201154228418241248321A02282004182118144321D48111882281D528018C1134248182418008CFBE01424122ACF2182123227115D82DD42121611121E991442CB22CD118411828011698C4274426CAB3
+:8011000054C42D38222B12186CA428233444703451521564524B5869D149E1B2A82C52565228412D1426B882B288B4244528918883F2C8877022A1216D1344436481672620028714288B145022434182F442820043C82100311C9212824D48C24322810127120082181A248224028D1100924E818C44341460884634843841EF6F0E00248C
+:80118000441400288180081014028D118242A08440418212048442008400001004210011904100002443880842490400226FAD0F0081203242901228A5C31214A4925086216D11238138244508424002259688D062C1624221222652242488288A51148012C822162128C4188C014024480422427F610A002480120223012598822185C243
+:8012000092508639D1428921C84445022C2402008E48301427A2150280526244860210148182042901002182402404212848EF430485B848B4483444144220628214474145B524B224220281142904A6528225A3111AB194B882788A0624D011D411048D2885B848E424248422490110792454454BA26AE28261C900484C481652221AF3AB
+:80128000BDE600002120012140010000000048000080124112240242002180018A011212800800000046180820880290F710C848422C04258401105242414C32288C029100804802296141988288100840414118C84823944200000044414C22820200004002299161400A48144002100240041C128204A0144003218041841804204242A7
+:8013000001401882140141800200449028000012422410024FE702A041800110912100150428200400140031800188000024140084214800218200004490282004000010021827B95022121800000000212400105A84200200008082028001250200800188820000008100484241480000F016A8248D188B444A6425240000504445B42489
+:80138000A226A3021001422440A2111AA18B8E818200100111A5781AB848A4C41724822100004554444B2283262201004002241AF145260085084A0412000021A4450C2AA214001100502225041A11B8840828404141012485084A240216024A48015044A02224008004506225E4940D0010021421244200211008141394884800401421B9
+:80140000120490448002880020D14231120084000081212004000000008F8C040049012260A1002100004800000000100422002410020000200818801801000020048C080000F0864D00406621246B111A5132501225124242114251818811488200144443022220020010022C110221128301420081A142801402A0440010F41387701231
+:801480002221C11128501A502200812181484A344A844262111014044C628244612CA222422308241223E149E128A9286B180011110050884AA4144E48892805822841F0CC8A2490121821211542222244420181467A488841511C1E4100110043021D21414C14682125022502250224371188881823AA880040080050840000009FC404B5
+:801500006F22F212222E122B11122B11C0132592821E111F11B189E999F848888F18F44848421F9454111C548985F844488F44F424444B244F4222E24202286554442E246F22F212222AB192A1812B99828E922592831E111F11B189E989F848888B488F8424E48404488558884F84F4C27CF0262265A2123A2111025022213CF1131119E9
+:80158000E8897818F88841CA2444511114155889488F44544C4B246A220200444584F2262265A2123AA1812B8882142512C2133F1191811F897818B888A44C4200405888485F5D0C0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000000049
+:801600000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000C
+:8016800000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000008C
+:80170000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000B
+:801780000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000008B
+:8018000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000A
+:80188000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000008A
+:801900000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000009
+:8019800000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000089
+:801A0000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000008
+:801A80000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000088
+:801B000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000007
+:801B8000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000087
+:801C00000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000006
+:801C800000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE86
+:801D0000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F052
+:801D80004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000075
+:801E000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000004
+:801E8000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000084
+:801F00000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000003
+:801F800000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000083
+:80200000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000002
+:802080000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000082
+:8021000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000001
+:80218000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000081
+:802200000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000
+:8022800000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000080
+:80230000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000FF
+:802380000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000007F
+:8024000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000FE
+:80248000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F7E
+:802500000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFF0
+:80258000E40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000007C
+:8026000000FFE40F42408814D4846422412251205248821415C422A48B2117288503207982040011499189492914284441C118C041488C3814308400404CC126441E288D2224D21628098E191426E191D61251181D48B01C7468C244E849A281A245D824E2A244343515A625B2924E924242271D337192F32C928689E79234884F36581CEA
+:80268000488B14318F38D48458844B2587268E647663428A93B5824D228126924463818F328283D442F953E4001120D4C1048422408102CC121401249194C89180844544220188141E2890C84C422C14D8128114026A688121964224E9484128221202844A22044861BF124C816227120046EC6441823484A0818889081784446C62221C20
+:802700003112800848C260314C5284B044034602C011818282466841206852201221485182448C441482116888F069F1101108840028896442424400604228211880422281C182901200812B1811883081481100851118148824042220124404264282C282221218F086A6200491140040042820024042240249018A820821881134881942
+:80278000014A5818104801480053046042262404000044E041228181988220E9AD0A000000000000000000000000000000000000000000002100000000000000DFE405601100211F224102184A123822A99149908414904424884501A82B289011A0822E481D44282F4834121AC212418308290483422894A1822248484A9842803444843E
+:80280000902C1A62A67D9824124432D44A02181C8584188181F41682188427A84C921282582816C141244441915945823188124444141444C97889041934844F9A512222428368289024166A218728768224D88494842BAC14181C8143228682511218C2812B212785CB4829C18439382463012B5826011DE22C18C41515E852BC48325545
+:80288000F0821249810271478887688DC4702841FC412488A0244AC842B02214C84241460AC3E245C2C81FB50A214450C13011211A24844201241301848502428210C4118002001224E082684460411C0100142024D82899212B821028A884412C21F148823242828143F227FE5024284058284418106888001C0818118D848424130816E2
+:8029000008204452185140084810022A014F12410411221D244AA14820C81180A1410018124A2A08F0E81300742E14126B121AB62464854C736482821862E84467AC22572C26D4283634118F15E232180966D482B152D241B32B24BB48E24D8276C6911310621A42541AB424183C21588118236468CCAA41C9A248CCB148E38DB288F4A2CD
+:80298000FF4014134432144B1416E484E14231882188825042F318928C2186D14212F841288602246021781D1A8982C1224AA924C60716022230242AE44288CC2148141602400884424AA8288A9648D7A80049B222C1188332222A04814B24281073882421E4C8924147228B4218132191218714F04C21E5012664148AC64849422263114C
+:802A0000264534814611711184150C928C014AE141FC82244AC1349847831E488321F8B165A0141E44CC213114C301A5C1441886AD2538C95D48914E888B12AE15E45D88A622311188C81044214508A542B461918C2904404A2418B28541525884284AE1411826B2226146C12394824CE141F2BA2D30231904C048148122702CE261042CDC
+:802A800042018AC3124400C04A1D641280C8271AC484844029A821248148C72147826856110C8C42C4141986C6848430C84216A8419022896481EDAB00241932220029040040220440624224812A01160448AC1684818242661236441408480098208862622C140820190A1E28418728204264C482702F0E195514268BD248C1112D4A839D
+:802B0000C24445C85230521E4445E882E1829D322F98D22833894F8C82448192424D132AE448626593D228C288CC63314D82C01C1E248CB611E8C268626E8F454868121AF8944896783234E8AF240B4B6129946CCB1CF09F3B302212692121440C11A021AD811A4672810813584245C8144144125C83B448188492141484901444214A82F5
+:802B800004248648C2442480012D118C6424404448048F444348240847821F2A4802282422492121414808460A0088A025818634240080052DA41924029048848846881234841110C849284634811934D11428C0186282168418842212D4C2B4AE0A12200200460213644282E0280148654191828724B02A188478216292902800603140C6
+:802C000002248485022424A88418224C8182822124440425414208412A21F2F998C05644898281C46484001981B1880418183AC4881D24807411A42814212011C4C86014C04400824889237224C1648442828D342598212182330823882298442B28C800F038354021840450A21429420125C22246D8241208212114290148214188422AC8
+:802C800014641A84491CC242501C2111006044306142A800424E2488602183A212A01246082978DD02428425CC22384362864848518812432208118E1146480129852402292604448D4282118A23628220284801863184446018153492881414920036248434142212148F554A224204844120C12485C4C826C822248C12C8884D483028D0
+:802D00008230284684CC824902224C18482844318460464712824E212128463811008022285141424C081212848B8120F2A44E00003048120029120210082D4224401244880A2141854408402114140142431841120448801A18A241208144148261818008824004EF470E412844A3114298244601841C04828441DE28441C269214444453
+:802D800017468842008006928C3184141128124C42C4291441C362212A28E42448228164234124CCE26241CC4484C8FE7A4018C2414644C3420026E62882E3C88595242A190441C8AA64141C788222C21490834845D8120849C841A22886089A24088088384440D24141A1281722432822088C8C84918245E8C60C4C5448282D56698102A1
+:802E00003F44C4446B263EE18F23EA2854642F296C32BCF847414BCA2F42B1F4B1A5B424F823A45148424B445D8987888B8C2B4C8829EA383AE25F71D352BAC452F28F5AD444F21D614F2973A8B541A8122F212CE91C9464AF42A8232F21ECC1534E4942E7CCF2F8C2244D326B62848F83E2747626F615322E289D228FB878887A82989494
+:802E8000A024EF81B6594274417D84D252C4281B4C48CCF636A84D618E248E662B445D5FCF41E864766858C45D64AE88221742837245A88CEE982F9294328E513DC18AF246153F21189224F04414AB462E187E141A18F8F3FF305324C77230188F85F56A487066D941B142A154A787AD988D1C1F4CF986548F8AD22AE2859EA94E847CF24F
+:802F0000C412AF2E686493322883D61128D18123E858342188815B18341B6CA88F8244F441845BC52F23A229171419DC84E34FE929F18E948B2A4B88DADE889C3C6BC21F640113245281904122843484A0418004168842488204000050482428244002244224C01200100621502492244824922C628864922492441270C843F3574735D752
+:802F80006BF21223AFB5715AFE474FAD6EAB443F24F4DF31A724AF6E546AEF41F326173F17FD638197969F54B118D588E614FC544567184F627523F9644C7D85EF743492EAF6E2222F34F44E641718676B67635F22F24E4C7D47E7ECED188FE4F1997D1F1CFDD2D15ED41E52CFC1FC2EECCF8288F8A888EB178FC3FAA8A84FCC6F2B3F9D2F
+:8030000041F252423FB256EF6F73F25A1B3FB3F2664C8FC4F64C43FDA63F7DF33212AF6DF78A86EF41F12E17AF8BD9197A4DFD199DCF4BDBCEF2A4C56F74F5A6AF2FA65ED74FE6F6852DE7F83F31F94757EEE44F64F4CFE73D23DFC3FE15847D458F8EFE6BCB67A8BF88F1E9D89F9FFFF5F51BDF1F4DFF55549D49CD4C4D862E34CFC3F1F0
+:8030800078144F87F72A2CDEFC2B9873072B675B628F72F22A2AFFE6F66E6A7FF4F46367FFA6F6474FBF7DFF4AE2AF25FF4646EFE5F1E4AAFFB6FC6BAF9FF6F6EE54BF19F1EF6D5F14FC64F54F9EF42CEC5FF2F6664C5FFAFC884ADF79F4F261AAF64C4E5FFCFCE3451F5B7535F72526FF7474C5FDCE489FBCFC57777F1DFF93D53F3DBDCA
+:80310000537F43F313C16F6BFABE9C2F23FBDAD8AFE1F11ED8AF8FFFC8F88FCEFD34AE243F15F42922E5FD3E2EFFE5F5372F4FC6F46367FFB6F61FBF3F3DFFAABAEBDCEF6DFD5E1CCFC3F2BF8DBDA5FFE4F43E9EBF1FFFED6D5F3AFC64E76FBAF86A6815FB626C5FFCF6C8487F59F9D455EEE6EFC4F4C7ED5F56F4BD976F4BF86725CF6EAE
+:80318000FEE9E12F8EF4F17FEFEDFFDEFB3F7BFFF3E27F2DFC47477F74FC7636EFEBF92EBEEFEDFD7E5AAFC3FF7C7CCFEDFFECCC6FE403430240F82612208244224803248A04130817884C028113880200445048108828842824024F12084D8148490849A8481440A1410000004E24124A22F81C75708202C02880B4445181421E2C8326D0
+:8032000088018981D4428314BA34F44A8140A4484E24A0248092C452D048322413948412008302221E48262111A26921D052A84A2534B4211AD44278848868123FF70D2E421F4152281FC132681F41364A1D2CAB141FC1B64A9961AB945B49AB944782AF14FBA4482F14F934482D914F82E414F9254A1CF8254A87515FA2E419F2214A96DA
+:80328000C54ADE24ACFC91242CF491248D121F49324C1F49724AF18124EB141F49B24AB981B24AB995B44A39A4ABB443FB4294478B29F934484CFBA44A9F450B26FA1164CD421FC122F2116CA3C42C8B141FC1D64AD84196B25F89F64A1445D81AFBA4481CF134481CF926484E915F8285F921CA8F41D825A4291FA26449BCE45DC28A1FDC
+:80330000C9C2421F48D628F59124C3A429A7141F48B246B1917248F4812489BB95B64879B4B84872B4F84894478B882F89D448FBA45A1BEB0020012100000000400800000021000000004001508200008118000000000000008221F01C27701232342504C4490185944824198B528141838D58481A34888B1282261464CA22285934441B3B
+:80338000298187488CA4288280D32482B811721438A326A42C89A4838922810C484F84CA44B68404481283F188646F9A094A2268214991422712114A62124306244E828460461B61302143386913842914314483C211492432111A624143652B43641812A4E8188B845C0190811C12E93138842088A41AC326E144621AD01509424E342579
+:8034000012C448364441AC2426F2248126628EC44E18229B12D081E282F1814217424961CF1322C84D17451F433C281781428A71D421E344E1F482A8121E6C8AA2681CCD48384F98C2312E491E816B84CB86414E84B84D282449C7184F89F49D2EF022129014126512016885C144184003884B4846A441884398284888004B4228006048B7
+:803480002E184C028223228851812D821311CC2420088008004A282384A414802AF24238808142022D1148101118611282188C14128112D4121221044A020000C0824E214B824062412F22F111241450224814192402211D488800000048004243F857C92460214428435258378389F744A12D8AE021442119E181BC81C448444DC899B171
+:803500004148BC45C84AB031341CD341452881C4D41C6448881694321C51148F24280143C5428816381913B856C88C8F4A35184F2992141E844789F0D488241822642C126454818374C154282681081A08132D32482844128A94685304E0135484164CA4421260681CE14A9114502215C245C24A81622490821212114A39845E8C18D84175
+:80358000414F8429F82E17002C01E01251281B122E11263A8180351346581284195C2415C4C91784144488831402181413183BA442584D4230A353A11212401B01492134498C588182618128842626210944DFB9081448191232248581D41A8201356482281F284138131221A5C1121C18C8241E882B84AC4C81228692821E41004C5152B8
+:8036000068B02261218004204484A8212C0489088061412A488621F1847800290581168861C2102162C2142C12042829DA14C1244C82F264824813159485C726856218481651185869028B185850482814B849E14394383745842B6853813442681628224478220816BCE9498205452811120224424A8188810512814D488304832401117D
+:80368000442428C044184C314428888602484416044CC4929028869884881C422838141827C821428223811808BFCC065223D184D22831181CD148962846A112A816A9144D138911B822DC6171247128B211C22C5C56C125C22948CD221B3C6CD44131481E828E242741132D2321614719A861C9E14CC2244A1839984D5244299C62184AF6
+:80370000E344E881E8821848F89DCD5012400347228424112981541A2824822413D368C148814B41888A14A2484E844D428D2529042A21AC124200614445C22C2412298892189E482D118A324213A81416D86848081229128411F4ABBB244449C2244183011B2185F6411448C02A8415A44185451438242641E612984540112122444404D3
+:80378000112E884200112882191292A813B452D21246C8B111731118C888002A514A5888421F320C1E28850116120127843944121108008428899481C840012240A242241D2216E122048E2444241524CC24881562485142C08489B82208418025922426A62188C88883012F7B041A42121808121236084C24052C8644814C411165414B78
+:803800003443342416221494424521445114411045788184C82249E24482922328843051A02848255424008C0849E4C23124A6FC654E248C941228390226140185C222A6028644A228242C7824921848A30882488A01142048A48100A04A2400001A08C88241008B14A082200250C23800F0E17E602848341A1418812264114001141886FA
+:80388000048444118011020088118216081F82240950414A4204489024522C4283CA281885167148B218C482A0212C1898841814FF710944388D44E014F248224820628183C8C486C8828361824B428188002242149021A9283222126908418222104211846488861AC81C1843C48C23449C9210CA18902480C4482D64172C0081180021ED
+:80390000101238811220444C02808DB22298828880C88240364424400242280028406228482534849041A04218008A0222200110027F4906403511D450484411B09832431B4A21A3984444393822219041481188192421048E41222AE414E114C221822814708801199414258124F112821C242844810427284C08B8844C08FF3A0E482462
+:8039800048281012289262C02644804782041A2495D222308A4692184849082413652160188E424894882C04204101001144804232841816048400218AF17CFE245E52A6C22242D085F3486835F2152BEF14B2F4BBC314A91416F861828CF842284FC814F3247419D64D8494C18E1473E44EE65951418CAE134BE6192EE84E6812B062D8EC
+:803A000074EC3EF55E428776AFAC74C7DA36B3C8FE44D1B73427A2CF4241B88CE1C1FA82264D248B3C4F11B138FC4E13005F947118D198D3B8336A1F11B14C914A172185A3224EA887491F44D548F26D4287321F2561693FA9684CCA6834A72819C662157161FA5231569683442233D211C6841F2262E86A32191FC29A822E94D891E0A19D
+:803A800012B44895C226E26112928C8B1A8CE8E2B444F2F6CBF02624AF41F2271C774333447626E292A616AED83D48ACF886426DCBEF2AD8867482F595D42F12AAF646B122E812A298467162435D2629FC24427F1AF1844583687C4FD44EB28782581523D846EA18B18136153E21FEC81F13718AE441F49481CE2AAF483B22AAE183F15284
+:803B0000C84F41B4886848BFCE094200224001241A040048A0410040486681428450824A5282C018C0185082100221100A188C04846088228C048062892810280882F05B6FE066F6312355B218D3ECF96262EF24D43FF6466D5F53F3DFF99F94F468864764EF44FBE5A5D5F21E96CFF17927B337F12D2DDF4272135BB3EFB2D1AEF4266342
+:803B80006F1DF96E2EEFF3F2A3626FAC72C2F981227F42F2A5AFB7BAC75A3F12F4BD6E3D427F31F173139F36FE9EF82F18F4A99D3F18D9BB52CCCFE37122F43282EFA2F8CECA8FC4EC48B872FE4F56246F63F23B699FF3F13931DF66F77A72EF35F56F63FFF7F33FB7BFF7DBBBF84BAB6FE1F1DE967F5AFAEFA85F537134F22BBBBFA3FF88
+:803C00006FE9DBA21D9B3DCBEFB6BC47F42E6ADF9FFF7F6F4F6BF9FE7B2FA8F2A66CDFF8FAA6A45F7AFEAB2BCF5AFEEBAD3F79F19276FFFFFF3317BF6AFBC3B42F1AF8D1F33F3C59F7ED2E6F62F822362F23F98696AFAFFBCEDC8F9CFD6E6C9F82062F64F625675F31F31F35FFE3F37767FF47F45777AFF4F67B75BFE5F7E3E9AF2CFEDE02
+:803C8000C66FADFDE3EFBF5AFABCB64F75FBB5A3FF99FDEFED5FDAFA8193ABC8AF16FE42634F72F6BABBAFCEFBB6A72F53F7CCE48F2E56E777626F6AFEA72D3FBAF26361DFEFFEDB9A6728FFBFFBEFE3AFCFFFD3419FBCFFC795EFD8F91C1C8FE2F2A6166B9ACFABB8FEFEFAECFEFC6EF81FFB49F26466FF52F2391FFF53F37FF4FF77F77C
+:803D00007F5F7FF7F77B3FBF7FFAFBFB3FBAFECBCBFFF9F9DFDFFFFAFAEFED5F53F35D6F7F73F397D57F56F4A5AD1D439F38FC6E67FFF4F626663F3BFFF5F7FFFBF976748F48FAA8E27FF8F8A2E27F7AFAA72F3FBEFAC98F3F79F9FABCFFFEF6FFFFFF6AFBEBB8BF9BF8D9DBFFFCF9CA9BEFE1F3BABEEFEAF3AEBAEFE8F9FAF8EFCDECBDAF
+:803D8000FD64ECBFAC09230222C01280C14845012286482149658828922C0242C02482422128219092422B928008290863022A082E921E482E82860884E081448404864822282489022FF6064905184C6214686A3111A33691214825C1482D1149B4423884A714C0B4865848488151812A74D8A4828751108884A24290888223648145421C
+:803E000048C24866628881822948886A8A642618283248F01DC4C0421F41722AF2112C83F4112CA7241F41F26A111D64AB9419B24AB915F44A914B42AF147934F8429347832F54F924481CF9244A4E816FA2E411F2274A96E1A2E559E2A2E549C24A1F49D232F49124AD821F49B24EF89124AF14F1816CAB141FC9F26A911F88B24AD985D5
+:803E8000B44A39A4ABB44782ABB4478A2D944F8AC4944FAAF4685850841AF62E421781E3E481764EB3117268D141F64A941D24ABB44B61AF14B925F44A9147832F347835E854F927482D915F82E514F926C81EA16FA224C95A9E254FA265596D489E2C6D481B61ADC11F49F24E819A82F1816C6F14E1C9F262141FC9F242315F88F64A9157
+:803F0000B24EA447838BB4B6D842F1A2484CF1A458FFA30D8628080000000000000000000000000000400100000000200240040000000040013FC4054A424218488193284816348183088C2464C1504968148902D4414942041226284881032827822614840A2749849B2849C28423023082815A2864886E12E048948A8381B2186812DF7C
+:803F8000B147432189321228444822832481513882861591214A12225824D38AE482984887244E28A9426481450A23B44661241C241E0426C14224138522C5894A49315231822C864882612188481442AF3E0D68C69A2818144C3248228584B88C51182B824DC14CC1219742296218C7221F624815E481028B288C433818542A2104A73488
+:804000008F1264446A48D2146A8421274430128D814A51122F422488D828A2E1257294C298868AE4916824FF82052521414228222182A41413013048501820840410C848899A4487442D42302482A450225E2422442A480412F081282E118E24628028D828B11124A448004290122220E2B20C2144271244144C128C02281450388242006F
+:80408000A02400AAC4214001008D21C8874888839142002002211788C18488A08413112201504240048B142084F4AB9F0018C1E08196112651841624888688147881A4681E282F125CC31C94641C518419483C6167868D4400248564442880D11231852AD8258DB2A2D123C95283451182D818F4C4118C84F8A84281844982E18138887B50
+:804100001E244006B041A1215C62824120069304C68528D232EA8402221B834D2913486926CC84C42860C8884E1800160211821741B3F21224A531C28384DC120146282D3484814548984CA0C1F08A150018CD21418342454824A128118870820868168854141C64444800441422C114C2244548A6240019C1A428292C68889818234101AD
+:804180002968115181216A18022A8111C8C84F714E821592491144192482280127E2182C1A18044311046088164891828889782482924212848081018268890A121921014C9222001A428111420C1818A2881242EF1E0114811E4618831388A41428481D8415886328831468841160811444282751811C888431984384521449584864C9CA
+:804200008294141DA42A2444B81214423628C1284C082A0C4A51428514124AC82A8F920A80121208181698A546A11212001C051062A1136142628846E884C266414004818621242296214844004425A64820A494860129084D48122B42844860814446043FC7063B14237212D482B118324156D814E111C2328D82948AF151886508278559
+:80428000F413E18182C4881499FA8822C5D12482D282984CA84684F22458C024288D145C624359C1C82C65464C7883081249D848E52621F24812438531B2C185E4A4B2360A84501811411628822684E4122141024284441210D4183A148B244964442094145218850196041D24294CA482824682D42201241A2642988211248287440045D0
+:804300001828A814F01755001084A4412220021C02224288152838826048448B5800AC150940048C0442C844282E128810982110052C42A824201468140020036200C9D4AC4F021A74210A11C13011118146281102241244D03AC41114228721282E924846914221214651922823B24B598213C284194524244801172988911811230800B3
+:804380002001818A43F23EC960821922022412287048041902409484008A42A2688004142280C2884100008DC1A024A021402428C462124220142244648248C339424C1C281AA4129F3E032420F1112681192454245068884881341144143024403414142064822D48181548A24810828104184823A8143C032308281228888200A0424986
+:80440000382886944400E7260012650181165814902182805261002712281411112840912289781C41C2487042D12148C488290214881CC8232C28042818212D11812D11B4182244212C0120C25843B228430300522A414282041C0420823A88820081243024228820C481442100A821437483420449142892284484A21F4822E21842826C
+:80448000820429248262224A3214248477AA0028001444891111C212848514D2218502864122258111110824104211411492481480A141811002202A1861812480088A12A21240981824812908BF4301828621511690412C322441412E824800101C12048A12442842C8418A021018084B82228388021E41804172182235492744482004A8
+:8045000042004146242404524142C756C03A4148840011488C821C51C18468406122A88241A81335121C9412142A18014C011814004598222A24882D082114C04244683841830189116248430989049FD448F322228E152AF21111181F114471135744C7922D816843D242FC8E82A08843F2211BA6F18194511813E2A2D8289461E95424F8
+:8045800025D611B42AE82AF8268C1E413D6676F195821F1967122EA82F24B18132651FBAF231122E21135291AE81A332664FC2E28DB224D2246A4246762874410F18272947714E4E1AB222F1292249E212F481D28F2272585A89173417826D842E2486F3C2C4674183E4126231AB942F18F2362827261718B528642C8E5C2324F1E1AA4146
+:804600002B982825FA543689C4648F96B892A3142B6C95B2D24DE244A5214CD12AB124E58CA15E49B394FD44687F1C0FB021D68131269D49C7C42F41A446BD2846F481481392428A4171B15B33A8C11BB46B235E5C9F82C26B9B44171C94564ED19C95824F34C2289F2C96127A91292694888AFCD2134F18D82244F31AC4F042C8B05A1CF0
+:804680004688A4C521AF415CC28F85DC88C2123F620B800122704442A816A014A016C014C0168418842484000000526041215604446044401448144814489488908810181428015018124410F8A623346F61F2332155F717158FADF11A5AAF84F46B39FFF5F31B7A2F85B742F37A1C5F51F515BC5F42FB391DBF93F34BCFFF74F5351D1BDB
+:8047000073CFC151A8AFBCF849594F53F11193BFB1711FFD8591CFC2D324F21E5F7F3BF915755738FD2FFFBBF3771DDFB77E4FFDFFBD9F96F23FBBBFBBFBBBBB1FF3F19B9DDFFCFF7E7CC7E5EFE7B732F7B4F6EFCBFFECEC4F4AFC26267FEA42F316263F93D755F315359F87F778388FA1D7DFF77D7EFF66DACEFC2A78BFD5F7C1811D8931
+:804780006F42FBB9BDBF93F3CBC9DF9FFFB59D2B73CFC3F3BAB9AF9CFE41C9DFF2F647459F81711FFD85D5FFD6F7B6B66D64DF59FF17755FFBF7AF27FFDBFB7DFFDFFFFEEF679FDFFBE9E1DF99F7BD37BF93F399BDDFD9F9CDD7EFA7F77E648FA7F77A7AEFFBFEC6E6CFC7F7BCDCEFE7F73C36347F51F111415FE3F2373D9FA3F37E3C1E1C
+:8048000051BF93F62B3DCF7EFA82E41E622B34DD4D5F58F834255F5AE928F85BDD4F57F7BEDD2F93F518188F86F7CBA99F96FE2545FFF4741FFF4E5C1F18F47E6D8AFE9EDC3F9BF9D4D63F1AF61CB6BF9BF3F576AFBFF7EE77BFFFFF7F31FFFBF2FA369FB7E728FEDBDBFF6CFD3E3CCFC6F34C6E2B774F6FFFBAFCEFCFFFE4F44F62F3FBCD
+:8048800081347F73F33B333D3F7FF1F2FB3AEF63B733F35D2FFFD6F33D7EAFCAF8782A7F34F55F1D5F58F834245F5AFB2123BFBBFB7FF7FFD3FD31698FA3F3E9F3BFBCFE6161DFD2F65F5F97B1FF54F58541EFDFFEBE7AEFEAF6E5FB7F7DFDBF315F7BFBBF295FEFF7FC7B6F7EF7FABB7F1FFF3FFF3F56F7F9D95FB4F45B5F7F6CFD3E3AD6
+:80490000EF46F7ECEE6F6FFEAEFE6F4FF77A7CCFE6E7E6B75A072D113022B02241681870242348022486482148022882421301118B24101803002A1898828001002F2281E4328864121A2402200800826CA24828400457518081921284A11644C2245081242810456282748028234488E288043F8214984685C4428014A84282488A82A9CD
+:804980002825A241228AA414169412481848182AF44222488D144846648218ACF4968EC0421F41F228131F41324C1F41366E1F41B64AF11164AB961B61AB945B41AF643934AF5439342F147924D812F924481CF9A44A4E814FA264154FA265192E5A875D2FA2E549C25A1F4DC2421F4952281F4932481F49324A1F48B24AF98124AB941B59
+:804A000028AF2419B54A3924AB944B42AB944782AB944F82D448F9244A7F6E074D4A4CF628521A324C1F4136641FC1344A1F41F662841E68ABA41B61AF6428F348853698822E48982F82E414F9A41A8F14F124824E854FA2651C2E58874C2F32E548C25ADE2CA49E648D429E2483F49124A3F48124AB948E24AF44E948B2489B248B944B7F
+:804A800043AB844B428B944783AB8423DA48F124528FA9058482480000000012000041002C040042180000004001400800100400000000000000701201BF770C004001261118869425211192112424A083C0228420386C13180420888404A91288040013B14C21982444465418AB14145800218901E0210C0083F24FBB50248A431A242264
+:804B00000122008C2402889024154402811384028221224664C446912C4392480049032C0A248003A284430C8184882508420044132446C144A7D1009285C24128388463021534461322CA819024142480D23A242298A833B88431444D48882E4C4CD481C428844E1460847011924C8A13B48442D484588694662858A28001D024C14340C1
+:804B80006141EBEB502428400411004228818001245042B240080049042200460128240028A02821800122304819A4148001008304A048A042E082B4EB01002B1210144182344890124001248C14280141008810084221812100824722120000242880021200428608002AE444AA420044411F9F0E284C012422C05413012B242A3862894C
+:804C0000C8141C046CAC842D6862E8281D488CA24862C4A042D028E4C2C44820C444290B85B22411B8429998128B2C2CC4A8A0414843BC8C768802128C52484E88814E9A0024282428119042801432229014106AC88A259444C8228948280C450A2E4290488CA4844302489A02842F4102239CA8C01842824283282464442869A634508465
+:804C80008B84C48F2106224981014130541C61A4221A2A9489601442482127822828304128842A840481409224843052640040C228121218E2D0820258C0848B828B8488302810042FEF0317448944864168811A0423817121A4142C82011608561284450320449884002D1816C4824200412AA4424C820100434428410438008A23488695
+:804D0000C1158A810243F4568E00893418006D2128408844048C121C5C2243048145724418B448721A22948818604883021E2861823281481022714402238264244E844A82060022E088048C4424942ADF6B0F210081430421002824281846110100208281021445424168444002442A011012341226848681028048410840881444489491
+:804D8000810020E8490515048741A9811496627012A82500186D5145981A6944121874524884464254D240D442D128C1825AA2128249012664422D24484724302646A8181364825810A8292A48CC88444828484AFA688C90420010FC1128180060321A16484801A041443A442512D881344830184883382450A44480B222042921A112128F
+:804E0000224880948248008044042F442199984150845F2F4D0230142242286222484912221202258403220025D44244820262842C1688622C640010240C81214924C124818C24088904896286809848100824F0ACFFA01418281210321212808402450128420016624100002618820426842402002A440821214E228100460241602242C4
+:804E800041808881B1488208888CF8F4C940C424001800484146218464145400230248A041C04242210000008A260600848810820242208A262608C282C42881101802484FA90D140044901414414048C2111AC2684F84112401002031184100299814103242006A012E42281822102804400880B18822010088A0128CC24449F2E78D0097
+:804F000042184345244102240014400424008469140880010000424008444824008C34244828302442202801002200A0812212F03DB8A01441CC1688422446024CE21442229112100222490610044CA412A6D284984426088722C022423042004448008448001A624A28424008288B21412508881FAD0F288400D022C414442811290141EE
+:804F8000C01118444C011216840460842122C0440000008092222812801406002120C11240822A4802888CC2244F4806A2A20048482084043042482C442302901848460842005844004188622944120888280028C04880A2421A3C4C8282800844160182871A42CFA70F84121C94284D89224184142114CC42C22184C41218411022711652
+:8050000028E2444184282AA4128049112282034821000089C2848844A021810020062200F0DCDF10F2C82449D24C32842F45A7462F41D432B646E414D28287924C4F51D462B134014F4195124FC564448F846442AF869452467464742AA442AE488C8C042AB424E12A622B8C7252A242A044428DC4CAA8158B6B8B995E14293884228D4465
+:805080001E31CB23A3FAAC214B42DFBA0E4A229B183AE17536245D344668448F32D22265363F447541D783D18414B2246324418112122B64644B2A21284E4A4AB242F8C2322B262F254282848C424274488852CE87E226C824284D8CD0884CA8822B819E88E0A8089CB948F88517F031544961534618483212430215342111473129D12853
+:80510000A223207128E865941269C51643816224C7821A9C2449C1224342C2448B244E22A121A7462A96244A2582A62C2AB4A2EC2481A4286885A8286AF2284829C1A8482F48F23EE51031241508191418B1288194181088048002648440284428440884128416C48856041604168468418112A14821108214022143181214321421412040
+:8051800028F4929D341A71247524F12521D7C43F33F3575B7FC4F51C1D7F53F367683F96F27316B5DF8BF21E162F21F13236AFC5F54A4EE5FE1C5CCFC1F12C62EFA2F2AE3AEF81B53CFB3C3C8FC3F2A694EFA2F53236214F64B566F5323626F83E1E4FE3F13C4E2E38CFE2D2EEF2ACEE4B8C8E822F2EDD24F15894CF6EFEAAAA6F23F37A20
+:805200007CCFF1933A8F83F32CACCFA2D23D4EF311314FDAF62C255F53F36D2E2F27F3527C5D7EEFD7F77F3D3FD6F64369BFD4F611158FF1F13E342F21F13232EFE757E4ED4E6FC1F51C5CCFA3D7ACF224AAEFC2F62C2AEFE3F3322C4F4AF7A5713E344F71F14E144F26F5BAFEAFABFB2E2EAD6A8FA3F4485AE7E42FA2F624EECEC225F256
+:80528000DEDECFA1F95896EF64F48E8C4B138F47F71C3EED1ECFC3FB48EACFA6F5B1B4F011313AB531B235F37477AFE3F37672FF47E636F76E2D1F77F76B211F35734DFC5F1B8FA5B132F33434CFE7F34218AF81F1565C8FC1F16476AFA2F226A8CFA2D622F23E2E6FA2F3AEAAAFF7A6226F41F1444E2F45F482C24F61F32A2A6F42F27E05
+:805300006C6E7AEFC6F22C2CEFCEEE6EB862FA48B82B11CFADF9C6C4CFC8A8324F26F32F2CCFCAFB3A384FCAFA647C1E4F144F41F7BC34DFC3F33D3C4F76F66E7E7F55F71D66EFD6F765273F17F77973EFB5F54445FFF5F17E3E4F43F234348FA6F31616CFC5F554548FC5F46C76AFA2B226F62C6EEB33CFC3F224724F2EF6F8EF3AD323F0
+:80538000F462287E46AF2BFB86ACAFA2F2747CEFC7F66878CFE6B262F66EECEAEE26F64E882B99CF8DE924F48A8A2B324F26FB3A388F88F9BEBC8F8EFE6C6EFF3C0961B0240126024150240040027416081224484412460428C02480024A1202230200290822000048228A048E484008128148818242F01DB6200200241A248422924146E6
+:8054000082C211484A3124002880810424444842002C6448A4460446044C72240280240481802811088584C48443084398B8504843D8CB014F32F4112485F3112487141F41F66A111F41F64A111F41B64A9961AB9459B44A3924AF143B242F147924F842914F82E414F9244A1CF8244A56F1245A96E1A2655DACED49C25A1F4DC2521F497F
+:80548000D22AF991248F24F19124EF26F18164AF24F18124AF249961AF243985AF24B9A4F44AB247832F24792498924F8AA4944FA2F415B6E0A2A5412CE4C1B248C16CAB121E4C83F4116CAF44D88196BA5D68A9B924F44AB1224E9147822F147926E814F9241A1CF924C84E814F8265182E5A46E5B2ED58C2581FCCC21A1F48D62AFD8174
+:8055000024CB141F48B26CB181B46CF181248D141D648BB45B2989B884A43447834A7AA488F1B6484AFA2458FFFF0A200800000000004001000000001800000040014008000014180040042800100410022501BBBD2008004880240200003042240021850284C06200108831484C688400802402238104482840648CC0C8E0C48802A04893
+:805580000028F018269F110D6018800192214421200448440042414230846800400224800200482B28001004410000000010250400824001FF3C4501C22081A481482604304420128444024140C2822A0428218A01241883C2841304248A226486241248442002418C082EC490444922044A08244031387F3801100100100221002004214C
+:805600002004234448440848400284800484800400400420040042100889480100802802419FEC05200120040000000000004008400440084800000000000000002800800400000080089F5A07484302002C8104110080080080122282080000008200844C21044818809242808108410000814008188A22984810F88B6A8084028004232C
+:80568000041100000000222189820800100842820080810448128032420000410080041008182A88488848F88E850049010012000000880000000040040000004048040000008021082200008100000048005F2B0A1C0100504840840188000040042220040000004002800200002002000029080000413022840042F0EF8500100826E2EA
+:805700001285041002800148004281000040344840840800484004214C020028293418880012008822184844224C8281F2A4F1400400440011844A41014001004400402404002001000012000010384290144480041088110220084200E0C80F59018160628C81442121358180410100496482004442008420214802800200212840880462
+:805780004C112C0800811032242C211AA8424458284F1D0C0000D0410644850200004240040042004084044100004218440041602260224818B042081880210820140422001FA4030000301110480800001008000000000000000000000020220881A021000000200100001FF70B000000000000000000000000000000000000000000004C
+:8058000000000000000000F04FFE00000010041002000000000000000000000000000012000000000000000000F0A37F000000000000000000000000000000000000000018000000000000000000F0D73E000000100424000000000000000000000000000000000000000000000000007BE900000000004400000000000000000000004064
+:8058800002000000000000000000180000F08CD2000081008100000000000010024004000000820000000081000000000000280000F0FC25000000000000008004000000000000000000000000000000000000000000F04F95000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000044001E
+:80590000000000400220010000000000000000000000000000FFC6070000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000800100000000000000000000F053F70000840081004400004240040021004100100218800810020000810000000000000000002F870EC6
+:80598000000000000000000000000000000000000000180000000000000000380000F0ACF7000000000000000000000000000000000000000000000000000000000000FFE40F00000000400500800444001002400400218001882810021880088400008042080000280000B0140100140000484055882810820444800221004480022148E3
+:805A000018808802214818448828842148408481421882041E148002211A01445C03000040010080041400000000000000000000002800008008000000288400000000BF7405000000004005008004440010024004002180018828908280018840084008804208000028000070220200000000000000000000000000000000000000000097
+:805A80000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0021001400004800800221000028000000280048000000484004281082044400108204440010F2448D000000000000000000000000000000000000000000000000000000000000FFE40F000000000000140000007E
+:805B00000000000000008002000000800800000028840000000027E8000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000002800000000000000000000000000FFD70400000000000014000000000000000000000000000088000000804208000000F0B2BDFFFFFFFFAB
+:2B5B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25
:00000001FF
diff --git a/xpp/firmwares/FPGA_FXS.hex b/xpp/firmwares/FPGA_FXS.hex
index 20a9299..a8b5cab 100644
--- a/xpp/firmwares/FPGA_FXS.hex
+++ b/xpp/firmwares/FPGA_FXS.hex
@@ -1,645 +1,650 @@
#
-# $Id: FPGA_1131.hex 5480 2008-03-03 18:53:26Z dima $
+# $Id: FPGA_1131.hex 5615 2008-04-08 09:39:14Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000C0F809006AD6FF4000C0F809006AD6FF4000C0F8090000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B51111551111551111551118B
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000E00D0A006AD6FF4000E00D0A006AD6FF4000E00D0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B5111155111155111155111E9
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200000000001AA1110000000000000000000000002552222552222F21F11211
:80010000122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F112121AA111002F21F112122F21F112121AA111002552222552220000000087
-:800180000025522200001AA1111AA111255222255222000000000025522200005F51F115151F1AFAA1A1000000000000000000000000001AA1111AA11100000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000000004F44F444444F08
-:8002000044F44444000000004F44F444445F55F555551F11F111114F44F4444400004F44F444444F44F444440000004F44F444446F64F446466F64F44646000000004554446F61F116162F21F11212000000CAACCC2F2DFDD2D22F21F112124F48F884846F61F116164554444AA4446F65F556566F61F116166F61F116164554446F65F5DC
-:8002800056566F65F556566F65F5565600000000002F21F112122F21F112120000004F4CFCC4C46F6DFDD6D62F21F112128AA8882F21F11212004F44F444446F65F556562F21F112122F21F11212006F65F556566F6CFCC6C6BFB8F88B8B006F65F556566F65F5565600000000CAACCC2F2CFCC2C2255222000000CFCCFCCCCCCFCCFCCC99
-:80030000CC008F8CFCC8C8255222004F4CFCC4C44F4CFCC4C40000004F4CFCC4C44F4CFCC4C44F4CFCC4C400000000CFC4F44C4CCFC4F44C4C000000008F8CFCC8C8AFACFCCACA255222CFCCFCCCCCC55CCCC55CCC4AA444EFE4F44E4EE55EEEC55CCCC55CCCEFE4F44E4EEFE4F44E4EEFE4F44E4E00000000CFC8F88C8CCFC8F88C8C004D
-:800380000000008F8CFCC8C8AFACFCCACA255222CFC8F88C8CC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCCECEEFECFCCECE00000000CFC8F88C8CCFC8F88C8C000000008F8CFCC8C8AFACFCCACA255222CFC8F88C8CC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCCECE98
-:80040000EFECFCCECE00000000CFC8F88C8CCFCBFBBCBC3AA3330000008F8CFCC8C8AFADFDDADA2F21F11212CFC8F88C8CCFC3F33C3CC55CCCCAACCCEFEDFDDEDEEFE1F11E1ECFC1F11C1CC55CCC455444BFB7F77B7B00EFEDFDDEDEEFEDFDDEDEEFEDFDDEDE000000008AA8889AA9991AA111000000CFCCFCCCCCEFEEFEEEEE2F22F22275
-:80048000228AA8883AA33300CFCCFCCCCCEFECFCCECE2552220000EFECFCCECEEFECFCCECEEFECFCCECE000000004AA4441F14F44141155111000000CFCCFCCCCCFFFFFFFFFF3F33F333334AA44415511100CFCCFCCCCCFFFFFFFFFF3F33F3333315511100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000008F84F448489F95F559591F118D
-:80050000F11111000000CFCCFCCCCCFFFEFEEFEF3F32F223238F84F448489F91F119198558884F4CFCC4C4FFFEFEEFEFBFB2F22B2B955999855888FFFEFEEFEFFFFEFEEFEFFFFEFEEFEF00000000CFC4F44C4CFFF4F44F4F3553330000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4CF55FFFC55CCCCAACCCFFFFFFFFFFFFF3F33F3C
-:800580003FF55FFFC55CCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004554444F42F224242AA2220000008F8CFCC8C8BFBFFFFBFB3F33F333334554444F42F224244554448F8CFCC8C8FFFFFFFFFF7F73F337374554444AA44435533300455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004AA4446AA6662AA222000000CFCCFCD1
-:80060000CCCCFFFFFFFFFF3F33F333334AA4442AA22200CFCCFCCCCCFFFFFFFFFF3F33F333332AA22200FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000CFC4F44C4CCFC6F66C6C2AA2220000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4CCFC2F22C2CC55CCCCAACCCFFFFFFFFFFFFF3F33F3FCFC2F22C2CC55CCCFFFFFFFFFFFF8A
-:80068000FFFFFFFFFFFFFFFFFF000000004F48F884846F68F886862552220000008F8CFCC8C8BFBFFFFBFB3F33F333334F48F88484255222008F8CFCC8C8BFBFFFFBFB3F33F333330000BFBFFFFBFBBFBFFFFBFBBFBFFFFBFB000000004F48F884846F68F88686255222000000CFCCFCCCCCDFDFFFFDFD1F13F331314F48F88484255222FD
-:8007000000CFCCFCCCCCDFDFFFFDFD1F13F331310000DFDFFFFDFDDFDFFFFDFDDFDFFFFDFD000000004F48F884846F68F88686255222000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F884846556664554448F8CFCC8C8FFFFFFFFFF7F73F337379F97F77979AFABFBBABA00455444455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000CA
-:8007800000004F44F444447F74F44747355333000000CFC8F88C8CDFDBFBBDBD1F13F331314F44F444447F71F117174554448F88F88888DFDAFAADAD5F52F22525455444455444DFDAFAADADDFDAFAADADDFDAFAADAD000000004F44F444445F54F44545155111000000CFCCFCCCCCEFEFFFFEFE2F23F332324F44F444441F11F1111100AE
-:80080000CFCCFCCCCCCFCEFEECEC2AA2220000CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444444F47F774743AA333000000CFCCFCCCCCFFFCFCCFCF3553334F44F444441F17F771714AA444CFC8F88C8CCFCCFCCCCC4AA4444AA4444AA444CFCCFCCCCCCFCCFCCCCCCFCCFCCCCC000000004F44F444444F47F774743AA333009F
-:800880000000CFCCFCCCCCDFDDFDDDDD1F11F111114F44F444441F17F771714AA444CFC8F88C8CCFCDFDDCDC5AA5555AA5554AA444CFCDFDDCDCCFCDFDDCDCCFCDFDDCDC000000000000000000000000000000000000BFB7F77B7BCFC1F11C1C00008001000000000000000000000000004001000000000000000000000000DF8D07480065
-:8009000000000000000000000000000000000000000000000080020000000000F01B24000000000000000000000000000000000000000000000000000000000000FFE40F48008001000000000000000000000000004001000000000080020000000000F089A20000000000000000000000000000000000000000000000000000000000002D
-:80098000FFE40F2800001400004840012800484001280000002800480000108204140000484001002148000010F26B52000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE8084018002000000100200001002400100210060
-:800A00001400000000280000808802000088280000F04EFE000048180000001200000000000000200100001400000014000000148002000000002F49054818148002800414182810820416012810A21140012810A2414001002B11484001280048408188022148008828108204F05C65808401800200000010020000100240010021001472
-:800A800000000000280000808802000088280000F04EFE000000000000000000000000000000000000000000000000000000000000FFE40F000028000000000000000000140010028001000000800200008800000088280000F0F2B900000000000000210000400200000018000000000000000000000000000000F03E1800000000000001
-:800B0000000000000000000012000000000000000000000000000000F04BF2000000000000000000000000000000800100000000000000000000000000E0DB080000000000000000000000000000000000000000000000000000800200004FEE03000028000000000000002400000000000000000020020000000000000000003FCB0F00A9
-:800B80000000000000000000000040010000000000000000000000000020080000D02A08000000000000000000000000002400000000000000000000000000000000EFE209000000000000100200000000000000000000000000000082000000000000F0B19C00000000000040020000000000000000000000000000000000000000000079
-:800C0000F0AC9E000000800400240000000000000020020024000000001100000088000000000080F229F300000000000000000000000000800200000000001001000020080000000000F051820000002004002400210000000000000000100200000000000000000000000080E2F60B0000000000000020080000000000000000000000A1
-:800C80000000220000100100008088026FA50B0000000000000000000000000000000082000000000000000000000000003FC80A00000000000000000000220000000000000000008200000028000000002200F0CACA004001001812120000000000000000800200004A0100002800000028004002000000004FE909001400002001000041
-:800D0000000000000000000000180000000000002828002400008002005F8A06000000181200000000000028000080020000420000808208000000000000000000250C00002200480000000000000000000042002200000000000000000000000000F0894300000000000088200848A048808402420020040022000000000000000000002D
-:800D800000800800F034A60000000000008280084280084200000000002800000000000000000000000000001BF100008002200400000000420028800400428004200200000000000000000000200800F0BB94000000000000220023220400280000124248000000422004000088000080080000000042F0C25900006200004200002002BC
-:800E00000000802804200182802102000042008008000000800200000080F278CF00000000000000480048002004008800280000800A0020810220020000000000888800F0F2CE00002200004200004200420022428200824248288001008200001828000000000000000000223F6E01000000000080021082040000200400000028002A65
-:800E80000448000082882800008800000082882004AB2920010020040000C28800420000000000002002000000200400000088200800000000F0337E001820011800200400880000228242000048420020A2484200480020082800000000280000800228BFF3020000A0242004420000886220028008002002800482000000202808200C49
-:800F0000822008820000002008F091F800002818001800202402420000220000200842202424822804220020820400004800800400A8288008B79F0000220018800180288828022280020000000000002028044200000082000000880000880014EF88010028000000000080080000880080048848008242C200004800008200000000801F
-:800F8000084800009DE18021011820010000000000008822004880880400200848808428220800002228280020026222282002224D9500200200A014000000422228282082020000000000000000000000820000800800008008FFB50E00488001180000002800000000218021840842420014220080040000884800800600880028882158
-:80100000143F2403121A012A023A8481812104C280A88C42222828284200008A2884240488288AA84C00828024082028A888800248A086200E28204A01EF9C0F1880828181014A044880AC8800480022AAA8880048484848004A24A84800486842A08800228880064A08000020A2822A8822082F9E0400221212421212000028822AA422AB
-:801080002822002A0200A02420848482A6844A2402428002A8422084082882A088A0288008422888882AD22C070020222804421242000048288002284880040000000018288002288022842284A284A084A084A084A084800800E06D01001AA3735AA5441AA544484A84A44CAAA8888AAE44200228684AA444004AA4444AA4446A24A222B5
-:80110000DAADDF224AA422AAAAE24AAC666AA48A48AAAE6E8AA8C88AACCC8AA8EECAAC2A6AA6AA8AA8AAF07FA8004AA4313AA51D5AA4554AA4544AA4444AACA88AA88C6A26222222E222B642A4442B11A05C4AA4444AA4466AF44141FAEF1F2DA2666AA688A0222AA246EAACC8AAAEEEEAAEE28AACE4CAACA2AAAAEE2AE222B282A8AA2190
-:801180001FDF09A0511AA133525AA4114AA4114A84A44C8AAA884AAC64282228209442A05480A8444AA4446AA6AAEEE14AA4ECA022488AA888AA0A284AAC22CAA822CA8CAA8C88EAAEA28AA822EAACAA2BAAAA0A2FA601A0511AA1171AA1451AA5441AA5444AA44C8A88A8C46A2622A22222EA9242244AA5445AAC44424AA426AAEA1CA4C9
-:80120000621B644AA4442AA6AA8A28A8664A86A8A2CAA86EAA8AA28C6AA4AA2AA2EEEAA622AABAA2EA2A22F2D56E80012280010000200882000020080000002004A08220022220022A08220000000000008002004FEA090000000000000042800228822800208404482022042848284800000020020000000000888240F139CF80B41122FE
-:80128000B21122B611324219B24291212B9419B24239812B942AF442B1222F142BF242B12AE414E922C4812E421E212E4296E12264192CA4292CBC91C2421B292CB89122B49136421B682B8419B64298612B8419B442A8422B842AB442A84229A842882E425FB5034819A652132116B142B111B24291212B9419B242BB8192122AF442B115
-:80130000222F142BF242B123F242912E121CC9C21EA12E4296E12264193CC4212CBD91C2421B612CBC91021B692392412B8219B4229841299A61298894A24829AA4229984229EA22F4DFBA00820000002800000000000010021880080000140000480000000000280000000021F0EFCC0080820280012082020000488A840480040000007F
-:801380000000188848800800208204000000002280082846F171918021088848224880045822C882C28008A0218A02202288061842284A02422021020022808108A028488602828A040082001488DF7603200C2A8884820548A0432262200C4A0880E22822041A22A82C00800211200148208804008800A8602A004A0880028602288A94C4
-:80140000DD8001220000002800888200A04842120000008021044A02422029020022808122048004800800200800F086AE000000808102000000822882A88228000048004200220080080018121848800400000000820000EFA60C280000000088429220888404001A24048242002001808288014800008800202828220420282C8208208F
-:8014800002009A020000000000481A088800222082A9420000001800001220040080092004C2284200200400200200FF3F09220000808102880000424A088888420088488004800422A20020080080810182000080282882088200008F3D051120210400480000424222208C2108120022885220840C2228000022881200008008200220CA
-:801500000420220200F01C74800120040000002280282206008004480012200A0000000000800820080022420000200488005F8209800100000000200800001A84A682000000008025044A02820000122800002800002004822002F0FBBA400100002004002882C82084048A019A040088004A02A041004200001820092028080000004233
-:801580002004A8005F9F0518121800000000200420822821A442282024024800C280A242200288288800200200800248800480220A00F0C68E8084210120040098123828421218800118200200221212A0814812A02C2084A22880A421A800802402002200000020F2165900000080020020080080088888802828810888000020024A0311
-:801600000020084220040000008002200800AFBF0680040000208202000080010018008880041220084A02001280098880290800008800002222200242CFF40C12004200284A021200120012001228884A888182210820A13418000028002828002800004A8222046280042004F03F5C800428000022A0422028210800200F20872404A0E7
-:8016800042424200C26218200800008004AA04484842484248CA0248A8A024B052050000000020084800000000001A08200482000018820000800462000088000000800800822FB90A00182200000012120022481A2801200620220400184280012A040000800480084200002008200200D04903188A0100000000008008A08220A41818B2
-:801700002820085A02000000323A842121228221A14A000020048022A484004081F454B900800682120000008002002022A22490428023830842222882460120084800480048488004282800001904282170FC0620082880842284A237121AA831A0811A2121A13180A4145A898C840858A0554A81AD211A24A458121A08885AA1C942C240
-:801780002004424A2C24A4846AA4441422622E414AF487D5A0418A212224280128A088184A01C822A018AA01688AA9A18238884AA34520810292A02CA0258021A268484A8188848824820668A042288888884001BF120D4AA1411A0300222200200A004288A08EB27AA24A68228AA2422A23A954AA88A2246AA4823AA38222A22862222AAC
-:80180000A26AA064A0C40080828228A266822880FAA734208401004220064A28A184A0840012000000000080210882202822088220082002888008888008002008004F4A0E1AA1151A82A64C5A014AA444AAAB19CAAC4E42284AA5993AA1DF2AA74C4AAC522AA2AA2AA25218DAADEFAAA9D87AAFDDAAA8AC8AABAAAAAAEA2AAFCCEAAC44F4
-:80188000EAAE4442EAA88C282AA2EAAA2EA466A022A0661FDC041A8125A122CAA4154AA6226AA6FFDAAD89CAAE8C4AA4119AA932DAAD72EE622B442AB462A7EEAA82A4D4DAA5FFA21F1AAEFFCEE1A2EAAA7FBAAA6AAAAEFBDAAECECAAC66CAACCCCA2EA4CC22EAACEAEAAEEE2E222B226AB6E2FE15DEA0551A858282A45122226AA6FF1A2C
-:80190000A1881AA6C8A0559AA9926AADF29ABF72A7532AA3646AAE52A05DBAAF6CAEE13AA7DDEAA2AEAAA7AAA28AAEF59AADEACAAC264AA4CCCAAA44A0EE2AA6EE6AA666AABA22A2666AF6AF85A04518A022481A85A2662AA2BB9AA1CC8AA4C8CAAC119AA9B34AADF2FABD72E723A5EECAAEE62AA64C5AA5FF4AE61AAEF71BEC7AA2AE3A6D
-:80198000A7AB62AAAEFB9AABEECAACEE4AA4444AA4CC4AA4EE6AA6EEEAAEEEAABA22E226A6CE1F1209182002002200000082200182289242800200280020040020022A012200488004004880048A048A84024A222801200120044220A421421280A48400124A28A294124A88A4A4A02148A052808582A52418281828A061A028A0484280B0
-:801A0000084A08A822808408601A2F170A481B21181B21421B212396212B141B212B9619B24239112B94B22F1429F24291222D912AC4912E421CE82264112E4296E12265192CA4292E421B292CB49142B29122B49132621B282394212B8619B24218B14228B24228B24228BA42A84288AE42BF710D481986B5112294212B1619B242B11105
-:801A8000B26218B142BB11B242297B4221D21289D412BB22D412E922C5912CEC11EA2264182E529E213CE419E222B491C2421B692CB49122B49132621B282316B16298212BA419B24228B242283A42A22B842B4229E82AF4B3470082000000000000000000002100800800001400004800000000000000000010026FCD081A0400800220BB
-:801B0000210388004200B848884200000022122A8181011800108181A1188008284A0200880080A8820040F1D19200828E218214402112018222822028011180A418428242A22B24488028840A9268982A818921982100400282400200421001C26018F0B5BF80242C88082820021882A2A22004B0118224E428242428A5284A22848828A8
-:801B8000A79213011A8229A1842081A2188008282260220000C081828E422008CFD80A186012400114C0112800008812200882180000212022010092482022C111821C010024A0840080084200220000FFD405001420120128000000008800822002004800000000002002001800004002200800820080E43D08120000221148229214D289
-:801C00004818928A0480828482018848282224222A812202182082018022880824A282008224002038224820A282AF520D001420022084021412421818C800282022028848222220A2212002128022810200180088880021908200248A820420F213D180010090211428A081A04800888008A0842001004840028002000000208288082412
-:801C8000280020080080080028C86DA10012114E214224222824800188142A0448002282202202122828808101426200808202A248004242800C2022084824460240F2A2AE80148121040040A1120020248208004022848184A821200840020018484AA281208481020060220028C8268182022400F0592B000018000048001400120019C6
-:801D000021010048000000008001008220010000004200482411242022280270D1478124013842902222172400148219A41488421C812102422A852408220018108221868124A2A13842B22200002682046024A22C2284A28400F05E5700111C110100001A820100000000880022200222001220040082000042004842488820240A8002BB
-:801D8000212200EF7743110100808602001100821800A041002001200200802182011280818808210024884810A2488004282908002882BF3403800240221181411201382448808121444222042022042021240312200192281A3412218A022828002324040048808484888238229FFE0419410180410122A0420018420020084002000082
-:801E00001800002028022A8804228001002C22020048008220882228022FCC0C6842200500802188019021006022001888001821202201308222A028218800809422A0420028801822322248200210025FAA0748221410A142326200141200008004000012288002002800880000C8A22B28880088424A8802200800000029F86A960011D3
-:801E80001081120110010019811201002882002180298888830220028008800100800248212502290221822182800800AFCE0400000011290100292C02C0520025022180040048001842184A8201522486022100201402009042484222239442209282285FFE0D32181218362181412121041400A084120048240028808201182818808922
-:801F0000A21228AA81228202002180A28210028E222221000014F09283008004002014110142111CC22140820200100218122A18022908401102004800902248200220840221804452210021247FE807282A0650214A32211A061BC4112AA91211A0152562222B42215682280122AAA132182A81A1423AA11A29C182182CA81824A01A21D6
-:801F8000F0426229E82444022C944228482C5222130428AE212E82FF3546F11141131121E51112A11139C11214141304C601A0114A6821C800481A22041220B112EA21A1281A86A2298AA2611AA83627228880028A92228A6A222328642A2F24382248202A4203AF470D6A418191112AE113C52162171122122B411731481F11A248800674
-:8020000024212120C28228482B2342220088B22AA1C3AA61222B888AF24222AAA242226622B262B4428448B242AC224AAC8C299E8288882B286F5A480122008223062326F14281B042082B84B04228810888488848882C84C252C052822C052C0D2C051880086E82008008888008002048220882F05C1CB051F5711117111F11E531F461CC
-:80208000431B664E633F35E52CBC41F441522F2EFDC1431F14EE24FCD2D2EACE42488AACCC4AE426B6A2AE642B552F26FE92D2EE622F27F7E2C22F29E926F6F2F22BA8BEB22F28D822B642B4C2AE262E622B462F2ABAE2E42EBCC2DC22FC42C24E422BC42F26B6C2EC16E62AAA22222BAA8FCE071B751F1325F111111F3DF771531F35F32D
-:8021000043723F35F141421F2CF8C3C23F3DFBC1431B845EC22F2DA966AAAEC88EC24AE428E822F3A2E22BCE2B132F23F2B2F2DAA4BB17312F25E517A4FDBEA22BFF9E822D222BAA2B222B262E622F26F6E2E22BECAAFE62E22D422D422F2CF4E2C22F26F642426AA6222B22AAF8A2A26F434BB151F5317117111F11E111F1636117362F59
-:8021800015F651112F147441B2C3ACAC3F147C41B3C2A55D6AA666CAAC8C29048AE926B222EE23E122A3B72BF23AE33AABFF2B32BAABFEBEF22F28FB82A22B222F28AA242E622F26F6E2E22B662BEE2F24FE82822BCC6E622F26FE62622BEE2B662BAA2BAAAAA8AA1F224AB141F3313117111F11F111713F17F611111F25F713113F1C1C83
-:80220000F151523F11F143C115B3D2A51DEAAE664A24B482AC44AEA22B262AEC27E523A3B72BF3FEF22F31A3BB3BFF3EB22F2FBF32AFB92F28BAA2FAE2E22BAE2E622F26F6E2E22B6E2BEE2F24D622F842C22B6E2F2AFEE2E22F2AFEC2C32B882AE22AEA2A7A2709001C01000014004001140080020000280080022822A082000080082AC1
-:80228000080024400280048A048A842208F0841440912110819121181A42011C28C181C081C092E024088880288228021882188AA2128021099A022825820200682382048A04D0220AA88008A8A27F9D0C2E411B21B01162261B2127261B212F26B111F2629319F2429213F14292322F1429F34291322F14A9434E912E424E812F22E41514
-:80230000F22252D6F12252D6D122A52D2DD21B2D2D521B292D121B296E921B692B941B682394212B8419B24218B14228B24228BA42289A82AA84E822F44BA5A0421B41481B2166321166B211622613E12699214EB21B214E92324E91322D913AF4429123F342912AE114B922E814BA22611C2B12C6D112E11492921B2C29B181D6229521FA
-:802380002AB91194921B682394212B8419B2429A212B84A22B84A22F24288AB8A2042E429F6D0E828200002001000000000000100200000000140000480000000000000000004001CF7D020000181818001C02121601142008000000000080048A8188018002002C822404882002002C040028214800DDB720A4181282408104001B421460
-:80240000C880148124A128481214A048002890B229812102006E12888082044022022830822486221241228828088E2122B7BC20A41C128212141A04C0211984A1528044A148182064211420018200232984B1812288015223024848228004822822234A2248424122887A8282641A28DFF30900002001002012C181400100A800008A04FD
-:80248000800228290118002022082800230423020000242A04000000F0971440012240013412004A010000242024084820080021282904184248208202800124008A24022400822C0A290A00003F960D2200002132602282289842166214308220220480022024220112242822B248002A41022385820822C8C800100280A484C8486288C7
-:802500001FE802110010118211420220082C1101882122000000C02240A241241A021A0422002490121002A24282000022212B420020025FCF0522800200262121222827210448100242C28024820848802102002AA4824220A2212081248208428A22042190828880288C2C2424F81E430020384100800222802426044822221280A824D0
-:8025800018288212421388A21488A024A0611A2A0428420022220020044AA2240048482C0840F21AB9800442002001144601142200208C840421008022A18122112002800820842801000022800A8002008068248800EF6D05122088210100420000208111022248000000220020019800110000120021424820880424280028210042E787
-:80260000388005202101122214423041001852A2800529888601A8A041141CA24198A04B88729601888024012C220248284A0848622902422E4282886024DEE7000011000042190220840430422A84820400220028220028000022001A02000068200848000020280400D306420018800520A32800802484AA3400800200280082222D42B6
-:802680002812002200002001284280042902006888200221001F1D0820018011011042012A080000181832422024010028002088038224400200124800280000100200002C88F875190000000000488248824220888802A061420082008A842822098081011A02002248420080068024028008482880B2360A1081060080210212881200AF
-:802700004A81A214208808A08618A08130120082800282A021284820012002002821C282A8482998828880F844CA2002003200460260118001480000128248002004122001181800800123824202226220220890422160240000C8F09D58001111180010021220022822A08100281200802802308282182304008002242002002A082110BD
-:8027800022080028A08200213F490748000000008220810800002800208202A0824256A242888004224002800428000000000022200280023F934C01822004002021B1210828002084028200280012283800212142481248212382041228002064220022428024120240015F1E0600190400122110011880021800180022218001D88084B1
-:8028000001C0211A0200482422480022002324840223B882044023223222F04283008E111180824132421AA287A681032022AC416AA212A0212A84A234001AE223E428B12286892C81A42380824232222A952228002006B0420428882B681D82A8883C82F29A17202488A24118144082A1181272A2484A842AA211A0A38A212404824862DE
-:802880004AB812EE2521A118A031882416229242481AA251A022A046684A5222A8CE622B4C2A4282022AE218C4822F7F06681114181248181823521119A9881A29041AA1BC20A1186A0C222A88AA12188A2324F8822223A17622188AB4227112A2224A02226AA4442ACA222D822140928288CA2432222B4A212A38824FFF0E4A428182A1C8
-:8029000028422842126601420048281A04122800A024002004280000001800482A01884888C08280082400822482A048F0BCB2144AE416A2223AA7453AE721015AA55D8A89A3DE484A86A8DC80A1112AA446A0A8CA2C0A622F29BCC2DE22B87226A5236AA6223AC3222D4229E6233242CAA8CCA064EAFEC2C225B2C2ACCE2BCA4E8229C8E5
-:80298000212F2C2CA2CC2F2CFC8AC3146AE61216A1516AA6735AA5446AF4A1811BCC4AA7F84280A2A81AA13322EE522B66282BB8CAACA21AA287DEC22F2CFF92123F1FAF413E216AA6226AE622D22294423E322B55CAACCC8AE82CCC42CEE225B2C2EC2EBCA2EC2214C22323B24286E228F8D9A2146AD611041AA16B4AA1326AA6751AF37F
-:802A0000A191EAAFFC484AA48AEAAD231AA1316AB46284A472EAAC82A0462BBB2F267622F272717AA221FAAF883AC72227222B643E322B544AA444CAAC646AB6C2EE287842A2EE2BAA2E822D822B222BCC23A2888E82E78E144AF421211B225AA1516AA3322AA2331F1EBEB1A9B29A2DA444EAAEFE7AA733BAABD62B662CA6EAEAAC221A24
-:802A8000A24EFAFFE2F22F2BF9F2F13AB731A277A0732B2227262B663E322B554AA6646AE626F6C2C22F24F482822F24E42EBEA2E22AB882E82ABAA2A8EEEACE82A7A2200226012A012E12001220010092200182000000421842002921A4128008230221A01200200224008228480028A024F08A6E00000012002A216812820042AA2404A8
-:802B000028A03422A042888042A22122922200A012281820068004682440020021C0A280A84888822FD404581B211CB111A2141B2127141B212B1619F2429119B24219B142A9432F14AB432F1429D212AB424E912E421CEA2264152E4296E122E419C2429AC2421B292CB491C2121B29621B692B141B282394612F2498212B84112F24286B
-:802B8000B24228FA4282AA9482AA84E82AB43D09181A86B51182A161211B612392612B921994B219B642A9432F14AA412F140B2DB129F442B12E524EB12CEC15C2C29E212E42DE21349E212CB4C1E222B581C4121B69621B692B141992821B68211B284AB28106222B84A288AA94822B4A888E428F330D2008000000000082000000002165
-:802C000000800800001400000000000000000000000014F067A480220218004280A5421A08482004122842A80022820000822028820800888A0112184200482C04214824800428282004F0BB9420A41811802421812262112814189800601112188A011248001820A124124A0148124A8801186222122E8248238228622C244228242C82C3
-:802C800038416A98211422DF910968CA02120048224AE212844BA11688428081A341B28602121A0C8218A0812AA4811922882421A48520A124284AE122883462C826E22244C24228422C2282C662134481B26D0D2041014212188021010012001001800128000000005800800898802101004002884800248048812802F0C72600122E1174
-:802D00004001621218802108002024810228A08400001880082200422001121800480020088200298804008022F8FDE980021081110248226A982318A0181C25290248C2482002488082820318009A82A1282820889232188822218A120221C22A841292228002C2F0CA4F00A021113C016280E224923188A0815621A9241268482A0422B1
-:802D80000080A2122880012022812202923821800C801A022182801232220080086FAF0F22121400001A848108120000002008A0842004001888200292428812008083012C02800882484A92824200282026F8B5748082011B14484211004240218204200220022C2CA24888124882A04128208208126282001282148228602200288822BB
-:802E00002B84822826024248CEEB00004200A0122022282282A814800422A0842C0200322A212828A2142200382820A11421004A024200488AA4282C8204805422628224DD35800180020042001210024003280000902100A024002084080000222800000080080000800800F0E6A78083012681244481022282240052112828222882A89E
-:802E80002002227268822AA425202A88810292382818306188680042C282A828200821688246F22A6E00001200A04180849121A048002304004248281B4888000018A042002818280021800800809282007042A248A04A282004BFBE0F4200132502421984810888121120828108288A0180220420A4140042488212820018422008200285
-:802F0000222148C042800482008228E7460000502100182410A1122C82229112218089042A0548002031822723AE42128A0248000020A221880020042502001022120200EF4B0128222262421326A212002880080020240480081268C248288024010022881A026A0820882284C442802484A442884200426280E46A0F20810428008084B1
-:802F8000420148208488A4180000182182800100800148824800009200002800288821422288602810028F5B0F58808101820019A4128002123420020048128004004848684820A28348A086A082004842A22248C622024002808C02288814FF840E001428182814283288B01104C298728820812882A2A1222089A812A218AAA1420020D3
-:8030000002A2808282010000800A00400228886829D85E078082041001250142308238142A0423018004488028088078120200480000480082102284080020280800C88014022FBC08202111210100304112488800A02420288A0828004818000028186838288002A20080A24821884290422882290220022A34427FD20C26014800181446
-:8030800080022A0C8009C880250462882182188028088220C88120280482408201A882A02822888A223282622410B2420821B058062A848382612322681A2424E21621213A411D4256A224181242CAAA87A0462008EE325AA5122B741A2721AE15CA86A122382E421AA2128AA82C2ABC22082488C6C242422424426A98E22E83883FEC074B
-:803100004E21A01113054091122E32CA87BA818BA3984AA1B82B119AA4986812822E128088A4511A8CB8522EB142A864A822884A82A88CA82AA98962A02428EA3E6224A8CA8AA4428AF822A24822C248FFE7031232112E611CF75121111F12B2119481112B461EC216A1832B422AAC844AA48A2A84A7A18AAB4E5A0870A202AA28A28A1A7B
-:80318000A4E822A28222202894222A2CA8442582AC4C2934222F28AA242324B8822284B642F25E3F10810118480021122148211221402201000012008001188001222002000029012130228220084002002C022800EF864911A1241F1191411F24A7772F22F623632B553F29FB43833F34B6A27183F1C2E22F2EB4D22825A9224AA46C9A66
-:80320000A9EEEAAE4C4AE526FEF2A26ABCF2BD62A8486AA648A2CAA8A2AAE228A8182B22CEE22F2ABCC22C8CA2444AA4CCEE62CEA2CEC22B888E828EA2488AFE82C23F634DB171F721611219F541727AB722F621715AF1B3B33F19F931B1BAF983812F2EF8F2922BBF4AA88C6AA4462BDEBAB9C2ADEE4AAC555E522F2FBF72BFD2FD73C133
-:80328000FAED142E28AA8EAAAA4A8E829AF972F22F2CFEA2822B466E622F26BEC2AE444ABCE2F6C262CE822BCC2BA82BE42BEC8AEA2EEE6445E111A3711F1353113E321AB162A6677E721BFD3F14F871619E3286A2CC2F2AB1D22921A9AAC82B6FFAADFEEAAEC41AE127F6F2F22F2EFDF2D22F1EAF4C6AA63B2AA2C82AAAAACABCD2E52376
-:80330000F2E2E22BAECEC22B2E6EA22BE8CEC2CAEC2EE22EF662622B888E82AABE82ACEA2AF6B2FE147E711F13A2231F17E327B771F742423F17F751531F1FFFD3D33F17EF2DFFC1C31F3CF9B2922BBF5AA8CCEAACCEFAED2FADEEEAA2445AE527F7F2F22F2FFFD2D22F1FAFFF1BE49AABA2AAAE88EAAACC2BFD7AAFE6AAEA2EBEE2EE2675
-:80338000BEC2EC24EC24FCE2622F2EF262222F2CFCA2A22BEEEAAEAAEAFE929D60126012601220824481040048341280048A04200428200428201402182002000000244002A0482400482C22882208F0178B202201808164141246A1411C2101128004800188484A014A0852A025208184A2129200A0282622018A32422880428224240259
-:80340000A221A08480621A6FBC03481B21181B214AB11136421B212B1419B242B991B24219F14292322F142BFA4291322DB13AC4912E421CE82264112E5296E122E519E222A5292EC21B292CB491C2121B294AB191B242B981326219B24298212B84112F2428B24228F242822A94A22AA4A42E42DF790B48198691612CB111F242121B216F
-:803480002726922F22A9212F24B281F24292924EB1222F1421D112BA92D412EA22C591AE421E812A65182DD28E212ED3142E5213C8521B692CB99186B111B642B1813262112394212B2419A2842242822BA4809A424A6A22ABBB000000000000002800001200000080080000140000480000000020080000000000BF840B2212A012001004
-:80350000014001868101800428208A024220022082A4248218000012008A258808484682A24848480000288082087F47094222194301321922A2258E2142268101422818381222802429A24848008880A9258A2283082A8882880712808622084022982250224022044621F28341A0246A41C12180631219226218136412121868221AA4D1
-:80358000121A028602921A222C0688888039919880084A888328A4148888428088A286244A28424202242C248284F2562700A0121200004A8102C08100000022282A0448000028484AA242282A018002A0128218208266240048240000220088F028F900281828180020820420041482380013A12400000080024222A082000092881218FF
-:80360000118004480020480200882004EFC90122400114142A2124C18180019890114021810E222211C2288001382282AA218124826812A0214E82800CA22120748202208224AA42230622F086EC2002182213110142181B848001881488400113A424800242001222382888321A2284022621A8A1301219082E82202404218810A28290F2
-:8036800062A042F09722002814008003220020840113810318B28002148222000042228888008820019A04488004402208208204628800F0B2540000140000808101220000428024081822A0210000001A0812004800002448000048A8008800244200FFFC04480062422A6112101101283A04A0824212220046820448525882A014004082
-:803700000188A04828428A02280080928280A22421002AD4220442F0A8C280010000A01280240A0048800812A0418820840A20023052424882281820810120081902008008208882028222003F7C0A1A0460124212800258822800202284840212C8182AA4428005A01423058A2428A2180028428282282F140260228848822C0228282C33
-:80378000A6482842E01E078200002826214111A112A014202488288181A4842004882A04220080240112009812800200000082808428080048001F790A42001304001C041A22BC2184C9411811484242115200111001111222001280250428222044810482308182C21C02A0282280846422F03EBE00381A04130446021A62281D12881340
-:803800008418418228928188882A9811A082000000828221288A0282882138A2148A82842204218800212918828802F0443C2008800200424211800152880014A0820088882082010092800282888681182122088A24880462A084211002000024D0A90A00201821022C0280820824A08218421800002820018A828814B112044810220256
-:80388000120020122182880828200620042182A086FFDC0332188024028022E114096848100120220848A681044A024880128181088024042812A0410000A2000082228622BA2228084A42F149380011221C02282C02004021A12812148A011CC41122181426816112882E51A0121400001041918121B0A1118102902100114002004810D2
-:8039000082F4DA8400221880842404213011602230221820084001124021C88130928800A0820024001C480100880034800880040028005F6E0420082002220023240E2908B0820182382818184AA21848202321220142A0A422800120822221020024002142224280088200EF83098A260400488081440218C03160221114200114218091
-:80398000018890411C8C24E118060028198492810010810210C12120822822642424482B84A2BDCE20A42D284262A0462E222364152718AAAC57311E1119E311B461C8411B214813E21431114A92211CD12121B82169118A210A46225421141186A1672E111D2186212CDA117A8113E2188AE822B882784282482242A18AAFE40F321B18C5
-:803A00001A8114A1442412581B182A8321C89233E213B8828132D1AE114E111EB11A440186A12116C191DA542152882B44206811281C3B21181B21421902A82A044612C122E026A442A0884A8212D2C8096822F021211CA622282F1464232EC21F25FC51212D81DE41866228888E41B888B2821B28AAEA1A2483A46A7AC2214A89AC34AA83
-:803A8000AAF22AACA21B8AB692A219A8882AAC822A0EC2211BC8216A8482A2A82F2AB442A4C86EC24AF6A3A200002200004001244001301100281B41A0419041281904150224602240022400601420044220044603424002240082F09566A019171280A42AA86E422F26F442621F2496C21F24FC61D22F3CFC82B22E323BB67AB371A7AAD9
-:803B00001BDDCABBE1AFCE1BEE421B477AFCF1E22F2EBEC3ACEE2B2225B3E2EE2EFEB2932B882F3BAFD9CEC18AEE1CAECEEA86E43CBCC2EC1CBCC2AECC8AAC462B446EE22C28A44C2B6A2D1FA01117152A92411B2EEAE226F462422F24F6C1E22F14F461E21F21F7C3C23F29E923B362AFF77AAF98DED22BFCFABFA2AFEECAAC137AE72E3E
-:803B8000FFE2F22F2DFDF3F12B2A27382F2EBEE2FEF1D18E823F1BBFD2ADFDCAAFEEEAAA664AF6C1E32F2CAAC42BAC6AE42CAC662B442BE629BCE2AC4C6AF6C2D9A0221F12062AA2262AE224F462622B761F32B662FE41E32BF5CE432B19AE323F1DA56C1F1FAFBB1F1DBDB2F3F171AAFFE1E12A7A31E127F6B3E1EAFE21E32F14EC2E8AE6
-:803C0000EA24BE62AAF3882F2BAB881F17AEA31F16AEA66A064EC22BA41F3CBCC2A8CCAAEE2EBEC2EC268AB442A4CC6AF6FE33A03B1F13A6231F16A2266AE22434422B761F3EFEE2F11F34FE52D23F3CFC93911F3BFBD3D11F1CF6F1F11F12FB71F13F1EFBF1F31F12FA61E11F16FA31111F33F233F11F3FFFB3F1CED1EEA21F22BAE2AE70
-:803C8000EE1F3BFF83833F15FB83C11F1FFFA1F11F1EFEA1A16A86F6E1E33F38F8C1C33F1AA846EEE2EE622F24F4622229A4EECAAC663FE80C000080642200482049A24114122819842201110000002831200221200214400122601220021400822800820042F012C980A52190212200482A319142190200822882382200382220021882EA
-:803D00002A21252284A82400A02922800100008882218200298A3442A024147FC104481B21221B21421B212394212F1491212F1499212B94112F1429F34291222F14A9432DB13AC4912E421CE822E411E22264192E4296E122A4292CB591C2521B29241B29421B2923B481324219B24298212F2418F14282222F2428F242822229A84288BD
-:803D80002E422F2301481B61221B41421B212394212F2481E22499214A8BF2421213A384322D811393322B432D111F2285D121AC251F2228AD4256F12243C681952129956129B591B242A121271419324219324219B2428AE21428B24228A2842A84BA22042E423F83052088040000004001000000001012018008000014812200480000A5
-:803E00000000000000000000F09953000028211211681230410011106111111A0211A0281912342142115A88226222522A641112A8601141934281082280082180924600B04428A128F0C35D244282969411412E8140612420011A8454211A5424208822293C14428242181830428C112438122821180048A041282E412C84BC28844CC26D
-:803E800041426028812C840214CAF2CD11802498942E53441B12601448C051A016111425410532602142B664154C681C4814926289D1419242621E21125A0816914413B211A4284862C8622EC22419246644248146E22824218AF24D96100200804881C212000048A0412C118128C28182200222121842212820991210820200840026013E
-:803F000021860800102208C024008AF49FC3006012006014B022014A11A1149A04B042014422283220C82410081229012220228805411022110220081200004018088800225F3D0C1A8212642249B228110419F433882A4802A1128422A14223918482224A022816B442926449C4284F84A8284F2821010000132421011A823822C6A24118
-:803F8000882084622E28202424F4AE5700281C8212921800211CA34140420820044812800A0040184234542844108481044410C21312122028282184250842848120288484F4D6458003413024284714B041338AA8344AA1581885C232814582E2428881A26826846241681A1612B828AC28AA318218000042002003238218020022E82382
-:804000000200223B162001461409881045681212209E484120410250224400A025E0888201835148A29A128402C824448B811230288A8192114243A12448160800250A2A81F21E81001842224D4249422882E12821A8212B124C082422448B4842246883818278112861488800138211C81858224880822402009280C1889A0221C014407C
-:804080008202446F8901008081B288012C810224000000844C9224004411491204240000442120180243010030121008A129144208008B342A0480F4BB3F000087136249127825C2181B128AB122A1C14141243285E64C626620D484018AB22124111C028C912896A628A041232248025822C028828342B14A51A2588D421608E02601207C
-:8041000042F4571C802111044562812021221802218E48000081004302134254842022091084C21816A4820016342486880129218129014B498800C014848B2422182AF4286A0040284428041412006621A1810043313220220830A22C023882182145081847211A988641C0120049C1A400182C088081084200C01800CFA3091021322818
-:80418000002506212081D1829448181889AC48583044104222C42288322528038C29044242D0280483311800148200A0282184428B282110082C047F320B10044112302C442481828124908C894204441024166444414604424D824A21816428828524110822489044111B41808481044818001283022B128C81F6792300282818B016041F
-:804200002912582481485025484D4114612398C4184C919280180AC98812A8482862422C22A82100218A2402A226082A844108688C83C448708208A8816EBB30C48021518400488016080000402202B6A2288E220024220041202848140A002222262401309438222008418924018100C825F1F2BB001241260A410054414082E149220267
-:804280005843034400108401164464818954A2208111440C1068418301400440022C820167218124244200F013CF0040C8441008188192223048460828304842004448188843C248A4A08243880180C4488021140890140090822622219288001882200881EB1A0040423124322782284D2286A81228008C190480238A022B212444000045
-:804300008812240088205128120010A1810020012001400820341842BBC4D084312448C01284185C95131E42884428282A84648884A041201826829188812048048B42262126E38231245884806882BA047822250C2B6100701282B682849A8821F0117E8021E9C3C222C189C624382D1121822AF422184F488C58149D98A7424845A424F6
-:804380004B9A86E261522628C353CC8B81AF810281127E4247864B8318A42FA4F2182C9A28F3A1145CE149E221718248D22A84B1CC522C842C4118A8619CA8243FF406484752F0414C1E164D18C7225153F3145A89734893482B148F8AA364D0A4B542A1A31E144AB2243DE44A724A1AA28426A8461E5A5EFA6EE2188D42274883B118316E
-:80440000282954488D641E211B6989A4624EB2292598421AF14218AF21058AF48268AD18EE52F0173B50442885B23C618227652D182F7754E88F4CFA32881A227518BB547438F4D446DAB2B4A24C4F2A48E44112E24878A4C4788E326F28F18496CF4828AA1847482F49AB544F42021A81E1849314498CA8922022A391328CA843CAF25A86
-:8044800068ADA2888A3818AD485FD6010000A0846014200400001001001A041A044880044880012100000020048714B048088F24088F240888222C2842220222F0DE5AA05C3E34247F71F39A5AAF25F74E5A7F24F22B5CAAFEDA988FA6F46A4A6F64F456E41F16F74949AF26BA52AD859AAFEC4BDD4F2FFC86C6EFEEF442488FA4E429E96E
-:804500008EE72DFDEAC8FED22F6FFFC2E6FAA63585B21AF14E5C4F4FFFC8DC1F5CF9AC7DCFC3FEF8F8ABBB8F8BD58AEC88F9CCD6EF4CB542BB42BEE2EE2EEC83A3BA2F82F4D6ABE044E5C3F71C1EFF51F7D4142B31AF86F57621AFE6E12AFE9EDC26F242666F64FC5EDCDFD6F741416F46FC56D44F4DFE94F46F4CBE84F8B6926F68FCEE98
-:804580004EEFC2F2ACAE2F8BEBAFFF9296BF9EA6777E658F4CAEEF8F455728AF21F53A384F4BFBD8FC1F5CE81BFE34F4CFCFBF6AF632F42DD28F8CFD243EABF78BF4AF85FE6AE82F8EFCD2588DC83E586FF60E4B543E7426723F5FCACF69F356345D66BF83F16CA4AFEFFA6A7AAB64CF44F4DCDC4F4EFE4C4EAF26FE46F4DAAF9D6F4AAC24
-:80460000932EB2AF8EFA2EEEA5DAAAF1D8D2CFCBFBC4DE2FBEBC72E76FFFB2FE6F4EFE24748FA2F21212EF41F1BCB47E348FCBFFB4B44F4FF318942FA7A53123FD1298CF66F76E7C2F8DB5E2F4EA8A8BEC2F89A99D8F82C5E2F0C4548F43F3383AFF57C31C4FC5B712F71565FFE3F1E4A6AFE9DFAAD3AEF4CECEAF8DF9EDE95FB4F466CE73
-:804680006F45FFD4D4DE944F42EE27FF24B2EFEEFA2EEEAFA4F4AE3EEFCFFFBCBEEFEDFDEAEB2F2FFF33766FEFFFF6F44F43F7282AAFA5B132F3F4F47E34DFDAEE19F8FC3C8F4DF7B2BA6B31AFACF1CA584FE8F94A5A8FADF5F2482FAEF8CAE85ED87AFF28583FF60541A01230268440782402266281248244164864814C824404288289E9
-:804700001212184294121002002120026B120012411200200140048130489242F0D15E0010684180D22A5141898182213148414A11C11248292181128401446112100846C418DA62224694124C8241182A215241008092121002892111A248211A0494CFDA012E521F4152381F4132481F41326A1D24AF34D141B24A9921AF1419F54A9117
-:8047800053F24AB143FA429147832F14F934484E914FA2E414F8244A56F1244ADE212FA2E459C25A9E24ACF491242CF4912485F2912483F49164A3F4816CAF14D1C1F64A921D68AF24D985B44AF92448AF243B242F247B2498B24F8284FB244ABBF8E0A2F1114485E24136481F41326A15F44A121D24AF44D941B24A9B25AB9451ABB44329
-:80480000FA421147832F347934F842814FA2E114F9248A5E214D8ADE2125EA5DC2199E25ACF4912C2CF4916C8D421F4912F89164218E642F12D141D642D941869B652999448BB449A4B44588DB8684DBA4F58B99402888042008000044800200000010020088000000008421480000000044800200000000E0C10C18E0811202494108254C
-:80488000289282101144F1442200822748444482840024B0426162484AA221418212239112A0342E8119028CC1289215981884804204280049C2282AE4944F7142242A081D1222C024D084846182C0182381082E46894122C82889612289C82626946484D028BA14D842082D164222108C688588452822A8422A847892048618880226C2A1
-:80490000984216017FBA483354E21E8870113224844722844786433128114439E342084F2482C98664C118AF21822822C2A289C12423DC61321445522C5602184924E218860218884B78628B184C88824A042226C28A2A6483124FE90400260220010090820016084821502880289288105824446924048992D28A0292A02121844A698172
-:804980001C483C288C0215486281401828028011042AF4CD8610021830220000442C0140088C948248188608410044008082840283018200002412428C24C44880020090823228A28800F0FBCA80D2240140E121E26224311430486612319245020082305842192A229862242E4483B11222C1248243111283022C82C22420021E21A2428C
-:804A00004A88248CE64502C200486868FD248042341200284A921241448B412944C2984448884292A014601250242250422A81224124819182212240026B21A0247048810A424888623E8418A2A8822082F4631A10220130231861200160221440522800C08884492428822804688123852292884440012022024284422A01628880042936
-:804A8000248204202484F2A1D640A412DC24624136020028182826048004008522CA44CC0390149AA214850200639C2A2889912488C048008C015220014D11004116440881830489E6A3018C01120020451102821844262AE1520883E18B041100A44311210800494609430C99081212901C24100220221808222A316148152882E2C21587
-:804B0000F4FBE5242C02240061418440081508542410C624444180024283246284220012302800100280028382A238204208292801841418AE118800D072062D14235121281249F31244111028C93150412CF16483E041A23CC41B824AB2245128C334216A21141862428427424324C2132282C068412283A21248E081429219182236287B
-:804B8000A5418189E882945885F45D29208A961C5024008421284008842140445848101214880441812A01200583FC228880C8445812608185229182122280388400444312288B024CA242CF6248215434008122812100101248424462419821238272242824080040023A48424408414445684422400400004004288424C022180048DFA1
-:804C000097460283C1441228120041002212400230222820041224422458252864430012208288880C20218881A12800810012002888282210F497F320081084010064982D128844821882108401004004211002126912042D4212F032424CA6128022012200220049014C011886081212F03F3F10815241004C44022941044C141208107C
-:804C80001802641800008C0130128200286048888180084183624A0000001004290229010026F8DC531042211114088124403614004002841218498804C8824880045844828028E2480158121A12A814A024892124220443040000840060286BA380860228499222001280C22400210020424A04400610226A2200302210D8A221C242C005
-:804D00002480880118830100800200002880F2EBA580110448004441004004251414D442415C2400169414104494844C110424621800228282C88800000028881840840216088942C838817EAB40318214008825041002502880010000001008291104B0884212888424244182014024020080044008242424112F88214131C45F260636F9
-:804D8000288124E14138148004584014C66800148502202113024B18804902241828142C028C0668644CA8A412C8286828448016042228811A023022F0E6FA2415237A11A124981A1804214B114121A781C829110227691E1229B8545348188E86411242002F21D2228AA41983D24C818C712654448F48B8242221B128A11822004C44145A
-:804E000044B222C2322531321214CF48FC7E7E30128E284116C42841855A2245D4225C224E2245548A1686D8B8110880A411C8A0C489A14116E22275A4A812EC62224AD422A8212F2AE8A1A1DC2B224AE182B864024A86A264884314042608B08893A8283E11F09C9C146AF71515259414C7432F4653424CE42141A4312A485224414572F2
-:804E800016D484B326D2E412B224325445586265D26631AE63C5944339226B242C22FFA412CB658AAA23419E444B388AAD21228921428831183E244B2124A7813E8A8CE182C1286E2AEF690A1004006220044B84A084800888800888488848A048800448800400880000A084A084A084A08400800118008200F06ABA147F64F743231F41D0
-:804F0000E142F7585A6F63D3EAD446E425F542126F26F7E2E22F4CD844B414F18684DF19D94CA891AFAAF8F6944F43A6C88FA4F442826F6894464F64F4E2A2EF82BEB4FB6848FEB265F4C8C22F4EE8EABA86F8B2F2AF8E2EE446E24AFFE8F8FAF3F8182AA48C1E5485FC34241AF222222B333F2AF222288F8283F3ECEE9F9A4BF145573F36
-:804F8000B5F711153E748FA4F47254CD4E6D444F65F5C2862F68F92222AF8EFA8CCC6F695B66FFD9F926A44F637B2EFEF6966F46F284C4EFA47546F6C6966D444F66FE64A6EFCFF2B494DFF6F4F69665E58DED4FE96EFC86842F2BF3EAE842BEE4AEE48F8D2FFCBC7C2AE64ADE44F41C3C4F41F214262F22F23A3A2FA2F23A3AAD388D381D
-:80500000AFADFF6A13147F73F337771F11F134341E126F67F7121647444F65F182D62F62F33232AF8DFB84C46F2151667F19F984144D14EFE2F2B6F46F4AFA64248FE4D922DC66384647642F2BFF3EBC6F4FFFACAD4F4BDB64F2C6EE6F4FFAB4E66BA96F29FBAAE84F4BF5B4344F4EFA28683AFF181CEAAA241E5485F824344F62F212325E
-:80508000AFA2F233BA2F89FB2A388F86F76C7E87E3147F75F53F775F51F174344F24F436344F617146F454161E562D122F2DBD58D34CF436166F68F81F1DE7CA6F43F1AEAE6F43F7A6A44F66D2CCDC66FC16866F45F1A6666F63FFBE2E6F4FFFACAF6F6BFB27266F67FFF6A64F63FEA6A46F6BFBEAA8BE744F4BFAF4948F8581FC181CEAA4
-:805100009A644D448F83F124344F62F21232AFA2F2A2BAAF8AFB2A388FA7F76CFEAE289012800140C812842412244002240016880200001002214418302220022A09290963022A0122120000002880220180025DD6A0481E242541D424A121004044821208000021431222034004A0124C322244412861904628E048021004982880024187
-:8051800030240021842902382E429FD9064D421F4152281F4132681F49324A1F41B24ED141B24A9921AB9453B14A3934AF1439242F147934D81AF924481CF9244A8D814FA27418F1244A96E1A26459ACF59824ACF591242CFC912485F2912C8B141F49324A1FC8B24AD941B24A9921AB945781AB9443B34A7934B842792498924F8284F906
-:80520000244AEE7AC04A1B618F22741134281F4116FE1164A9B181D64AB991D64ABA95F64A9453FB4A9443FA4A9543DB1A39A6AD954FAAD118F1248287514FA27898E1A27898C5938F55C2DA1FC9C2CA1F4946F2912C181FC112FA812CA9F9812CAD141FC892325F81B2427834B84A7834B84278A4989A6F82949A4FA2F5619E400848002A
-:805280000000000000000000100218000000400100800426020000400428000000002712D04104160415041818A11800872112508481538201008112101468248B41411032282C2184218221823814E08601404428440847814226081226C81848499198F0C33A20328289110620C188969114821D88927084425822182F81586850488642
-:80530000141142041188416929F4148290942829088438204124A11818321995422321246384186614C84814F0D37D207142185C4212248039914371949812A28483D834229112278824A443918451E0282511C48241693951491D92B8B0428A381C22621844188C38143071612324028B148B124E14AC246111127FA90C43021C012091B5
-:805380001884007081881144460880518440082481418314019028248041A41200806181004112421E28E08184C148380026084D488908DF7B0A24901200001012811101400600183658488C2484044312088301424512081A028021D124A1482230442024480321001008420048F72D90261451002D244D12184542482338122CA5411912
-:8054000011D2222A148226528422CD42816B41612C7644119C1A6061241F440260A828832144C212C0A28488424965821694582223528422C314F43ABF2464151201702244941221B1181123A1142CC111502212299144844822AC64C24C54428C14C6426C1168412722174220A18123A114428001C6C28888290481188904218C24324842
-:80548000447F970A28C01400200141402308304610828AC42883A242852444446281A02119144C08208104409824A3880263148202147052244224312822441024F428AB40140C2CC1220029414874885421269848308243110216120843223412A04884184150340030221A8214A8418A02AB142901868102A0212DA4444C328830364AA8
-:8055000011C8C41FB94D0281422601414C02001004132A412202C088248419014D1841924C0490411CC22A818400844344941841801408C914A814282C010000294204BFC309004441410041332302002144284014048601844482842504858402908400001504A400109412166211008490488D82128942182842F2DE85504244F0112257
-:8055800045122462413D2843124811FA824116D4228A03608899089F42D1249484C16B4146C4144902444D288420A212854458A41EA8448169058632118024B1149A4E82A31858C26881F0618D009044442250248001880084006441441221840081008481601426221802214041A41440A2412416C8118C1628512800478218223816C8AD
-:80560000244F28F48827004561C16501409414412A01002418114958228041082489028442160227813034204128038122491278468242682181D026040000C481440081BF92042A11821468424C112202862121088644A29218C0122642221232842F882402435A84882410820888292212CA8840B81108009F41024C51811223B888F3F0
-:8056800082224CB282B228751AC422DFEB0D002585410144211144250444005021803818108828440820442A14A224268401428128814084D242C1424D18901AD012C54249C34A49C16A0000126ED3C0182212622002344018014018D42408444182828200D0620481C0844181B0849622884110819882882488130410C4221181304800A9
-:80570000404402DF710D82214094124051414121001084248108122294812054144912A1121150844184484461002912044124D4004011518624844044088122F0ABE100934412414202004C1802100255226181250A2022110285426E284189452249110A787082682190181088042548042006488044141C1282E2734342088C42480490
-:80578000182200C0820036124804884421C0888D84C20041000021114038221614840220084100844D2880081002921A2201EFDA0A400C2400403211200116341221281110044341140120042128450240041044890181448144004100000061000024E08B4141289143181578148151821042420C28280049412828283842901221C92883
-:805800002404844E891C163642254894C224C0A22A98298827845061482826926CA0248054824821443FA40512C65264E783807114F4342124B606846C514C3AF11CA657382562C92881AF8AEAB87188FE44886845BB84C3294911F829144D281F8463421A55854CF92A21865C248F48FA14888554184185D2286451557324788A7A287C4D
-:805880008C18B882A81585069BD3142A712118F94114174155D42251C16D118D811D16882196E22412C39449512CCB9B1441B046E83874485C4A6A586487A584672D255466214F2E5242A7AB1634248F49F826421F68F142482D54A5B8135144DB148F84D448A3444B512F46D6C4D2A851C81849F1E7442424E7512F9143732E71321251DE
-:80590000221514361282412161AE11237118949225F2829CA08468A1672242AF61344A2F485C668C6E269A6CA42D848F2282429AAA2D2884AF12F2818247A560923354222B222F210C2F2C42D222D444A26232AF22E2C305808102288128890189088908890881000012000000122009922029220982002200A01280011880019880090007
-:80598000F09AC62477725F54F22D2FDF63F71D3B6F42F2252F5D1F87813D811F99E888F89A182B91EFE5FFAABA3F18F98E988FA9F92EAAFFD9F8A4AC9F9DA9C4DFDCFC6C6A9F95F52CDC9FF4F9D8CA9E965FEEF764F2EFBFFEF2B22F46F733A7EDBE8FABF3ACA6EF49F9C8E47F5FFCE7F7AFAFFEBAA2AF82F31111BF85F45F466F6AFF1A96
-:805A000012EFEBF2DE4EFD6A2BB94FC5F51C1481DFCA45F237175F64D6FFF11F5DDD2B7F73F3273F7D1E97C1BD8B3FD948F81ABCCFE1F956F62F3AFB18996F29F9969E6FAAFA8F8F6FCAFAD9998F8DFDC9C94FE6FF514F6FE3FCDB1FCFE4F59A84CFDFF4FC7EEFE6F7FEAE2BED7F7FF73EAEEFC3FF2C2E6F29F9CEEC5FFDFCF3E1AF2FFA0F
-:805A8000AEBEBFB2F35B799FA5F44B786FC2B79AFDFC6EEFCED7DEF69AB6EFC5F53C34CF42F31933347F72D111F61D1FDFF1F131118D2855F33D272AF3AA284C18B812F39A182F2CF5A2A22BBAE5E888F884985F59F926A41F1FFFE4F6FFFAFE6EEA1F97E685F4494B8FA465694FF3FA6466EF84F1D24A2F4FFE3367EF6AF3B83ACF4AFA44
-:805B00009CB4CF4AFAB6A4FFFCFDCEDEAFC87819F94171EFD4F54E444F6FFE26342F42F94E6CCFAFBF62F6525C8FC1D1A8F1AE55347F73F11173FFF2F35F195F33F11F3F7F71F13F26BFC2F3A32737188B88EF81F194166F6EF5AFBBFFDA5B266FC8F99498FFD9F9A6AC9F9FFFECFEDFDEFE7C6E1FF6F6C65EBFF4F5D4CEAD84CFE2FB6C21
-:805B80007EEFEFFA66EE2F26F73777EFEBF27EBCCFE2F2B636EFCAFA15AFFF7DFCCED6AFE8781BFB5B49DFF4F56F4C4FC7F6BEA4CFC2F96E44CFCFFF6A64AFC57518FC2C2E9FC10A25011C0145034D114021410300441228928524C824902800218D24902800432214062130248440782402348200348454400485048B241008AF8E0386D0
-:805C0000425424841840022C41044002185121822908218628247848041269241572189442874122522416048461908284C988D422482804812A14AA42253224284138F0F3FFE022F41124A7221F41326A1F41326A1D24AF34D141B24A9921AF2419B54A3924AF3439242F547924D812F924481CF9244A1CF8244A16F5264A96F1264A87AB
-:805C8000592D4A9E242E4A1F49D224F4912485F29124A7141FC9724AF2812CAB141D24AF149921AF2419B54A79A4B84A39A42B94478AAD944F8284F9244ACF5B072AD4C1B628F41124621D2423C6242B1615B444F911242BB45982B924F4421143E2547935D812F833484E917D5AB85F826C515F822CED8264193CE459E2A274D1EC22E4BA
-:805D000089D418F491244E11174929F181648B144CF26A9511AF449B454ABBA4B44A39A42B94AE48A9F92648986D5A5FB9048C0448001008004004280000008210021880080000004008480000000044000000000025012F9A0626C22410013023199119182C180182121129D88421711812518110588480542419220148440028253112E6
-:805D800084AD614C5248C1101882410100890221224528C128C5F278C32442822C51A42417C1184072C441E18804644C2801D02832418D2496040064129144462B72B40ACF21828208262A824142A1A12068928C02C6429864809824FC84D2844801CF3E4C314262D02404A741111C1179443185854154249A4221588416D82855E18C0163
-:805E000027818186A44185D452E2110417AD702812886284A392282D682654424BA1105884836142464288822248D424542C96541827C17F8D062642C4121508112B12C01292248A0482441221122C128132850044241001A42843429414282C18C112C01150188420782281422108491408297221884288027FCF044150149012400260F0
-:805E800088808208301188400644824282008902108442624440C41230228461C08111228C04482113010048004008E0534A0200254854281487514CE422011825CA8449588425958B481F4442688294C4465C4B2D424B1229A412A9D44888381623145414644C42A9421624738222AA14168844624483E48804C9E542148831288CB29E4D
-:805F0000024440133814241137811018C232844C2858415C88081D44812A8894844658B4660229E4219268C45042002514C22885243291A0288B24481638421066848C2C6444001628021F794E021044028110C444B800882144160A3598442342444849582440E8410241C0824E842C61441614D12442541242442E1324881242C01142C5
-:805F80000090184B428140C828FDC824814C6114508441814728502A811B122219941428403884418416042483D1823291008415085B8221302180D1168124328810C122000028284C3538452891284CC112F0FCA720312A22C3048100001184265424112C28583238A411B024014B41202884429414508144842C2484421208106C414065
-:80600000181E58421AD22401241843148444028F860A40121802250282182011121212486C414308228684048D4128418110072428009014448100100448811424A018100844828100262CF88A7510D26251A1C164C18145824142E822012714C4CCD86229B8820261424B1284CC1492189023814711608A21E072052A7114C24828830802
-:806080005C61221508814928912825E421E2C8D14825C24481885EE6A01828221008214042C8131508412D112250854C7124D8183814D02184722448814414143822444100448D42110041C44284248425220143A11445085048124C03FF5E480210384E104248C618C38101A18C28420486C4824483A4822002874484C6461198429018B2
-:806100005062462401404841081A4802164804121608811A081A0818442F8504180000843816081308238181A281B01808694102A048881820C421422816DC280418204284843124448041180340181A02A01840180280F1D9481482002281222184442848002420021001539148124265424201124200D0840400444C140260844044043A
-:8061800020014582018110944482F02E89E061D424220112443200508231224189821182022D381004C198602185018880D2148421C1868714001A888101214219031828482A44482402228422A9F453F910914400846024112D28190270C8120161482118804C0488C0141148224538221004294112014008200944000084218041049013
-:806200004850189F5104002418508444444008441024C988211C014D81A0148E58800D308410C2484434904825884448085041C0880012C441281200121A424814023BCD001881851284083890128382018E1845088A833AA2811282502420F442281220019B41298202468881234104A20022824C0228882282874200903281F067FF50B5
-:80628000248A025982815248201412820260248290111411452143A84246220260122042045C2404841602502114411211856124128012C41890664781A901844CB4560B8C022B21C0E412240090248506284183121882841B026392184B1216E822688325E2424184CB4388418444C820C4141800123844824AC2444821400822122B52C5
-:8063000026B2EA03256428216D22858218BC1C7142F88513CF81C43B16388A96FA8414236C68156428F9A1CA181E426724EF6104EF6557218F41926C87C5C941D428C1427D48895824878945F181288562292489499884241A6A822132703462288343D96875554F213596878116F4D41485E4E151A32429C222124AD2E5D948D22AFA38CF
-:806380008A1A21F13E8C56B458F11848C7884C48F8691A1B882A71447222D821E724F212A361A24E1116A61445B4115142188D984D241B211A512A8C7568F454368B818CB174D388F1361845A41AF02FB1F025126E242E129F8264824FA3A2264CF2182487832312928AB0646982183F12FAE2931D311CDC44E24CEA46AA686AD112669247
-:806400002F14F2A2184E144B822D44CB545E446744874138832146E411614D70516152681E1C414829C418C748A7C890284E588F257264F86E7F0018841880014B12800998000084002008000020112109922282A028A028A0284681A28428460162000080022880022847AF342F29A23689F22D27AF65FE22A66F87F63527AF26F7891398
-:806480002FA9E323A2CD1F11E16DF7BEB6AFAD7D1EFADE4AAFA2F256487E784FCFF5646E2F6EFC6F6D7AF17C662F2BFC2E7E2FE7FD53C8BECCEE7B2F6CFCE6C62F6A7883F3BABAEFCFFD31126F4DAD77EADFCEF18BC88F22B4C2D986F4CECEEF64F5A2B84D822BD7C5FE4A6A4F4487F44642BDD7343D236E22AD2A7F76F6DE66EF62F26AB4
-:80650000689F12F17C7E5F7BF2B62E2F22F3EADAFF39F97EFE6F62FAEAEAF5FBDECBEF9AF2575B2F8FFFF4D4EFEEF72246FFD6EE86F36DFF2F3BFFBEEE2F66FF4ED94FCDFDD44AEFE6F666462F6EF9AF2DCFE7F77E5C5F6BF93E3DCFC3A3FFFFC4F58FCC8F21B4D2FA1658EFC9FF4C46AF8BDA6CF87ADCCD1EEFC4F54654584F25F5A2A8FB
-:80658000345F77F63474CFC3F235358FE6E6E3B35CD47DF16E6E5F73FA596F8F2EEFA4F7939FAFE5FDBCB6CFEFFF14164F6DFDBABAEFC1F56A784F86E7EEFFEAEEEFE6FE6755CF46F72D6D8F8BEEA6F7C279AFCFF668FA2FE1B542F681436F62FA1E1EAFC1F3595BEFCBFB9818CFE9F96E7FBFC9FB6822AFACFB1E5AEFEDFD6A722F8ADB7D
-:8066000024F962E26FEBF9FAF86F4AFBF4D44F2EFFA267345F7FE763F73E3E7F77F37A76CF63BB5CF51D25EFE6F725B7BFF6F6F8E2AFA5F68F87EFE7FDB4B6EFEEFE25277F7DFDBF3FFFDDFDEAE84F2EFFEC2EAFEEFE6C6E5FD6F6BD2FEFDBFE2E7C6E26EFAFF6FE7CCF85FC767E6F4CFE9157ED8CCFE6F29ABC9FFCFD1E1DCFCFFFDCDEFD
-:80668000FFF2F3BBBC8F27F3DA9AEFA1F5FEDEAF26F7BAB8CF62FB72FE6FEAFAF6FC4F4AFBECFC4FAEFFF336501600502484450222400260812486487291182859481242828504101218221404618001218480C4111E48418C041A041648264124011283044470470F2C2101C42112218485D2411202109482413025002591448100615032
-:8067000084144512084A420A214429411446180410118A0248A304508470249822128942F1DEDFC0421F41522A1FC932481F41324E1F41B24AF11124AB941B21AF1419B54A3924AF147924F8429147822DB14F82D418F9244A1CF8244A87115FA2651D2E5A87594D5A9E244D5A1F49C2421F4952281F4932481F49724AF38124AB141D24B2
-:80678000AF149921AB9451AB9443B24A79A4F84294478229F92448984FA2F459E3C0481D442C54C18F14F18144E3B611F44A111F41F64A941E4CAF149B44AF14BB14F442814F82F442114F82D412D386D412D124E514D9A56C155DD2D2AC61593C6519ACF5D1282CF4916C8D431F48D228E14956381D64A9E149D67AB981F44AB453B84AAD
-:806800003B842F242988F1844829F9864829F9841AED1820248804000000200428000000002180018828440022004008480000180011442428000000000017B9A0127029C6281608AF2154211214A918324850125817295D188824B24581522450162F84522526CC81EC42024C38128823815222884D41264294428D4522249CA44821254D
-:8068800024142A11C22816A42449F8749C1434A221B0832432A44B249148114011124C81042D151E21204AA42428604183024784302812A1441514C18CE0B4025518613112237C4268218417C88132604ACC8141F88815F04547A02123DA94F228421A24922A1F6492111473181218D248A2141D5216BD83E121E2225914226C42F2841150
-:8069000083732C912E8E494199825148A544D182C12E48663841261822F11D42435A2A8743466AA8815E22818E32C36122CCA15A4F21F8EC37400125028D81F04492108814084601251181084411204A84844262440041895222908212491881082D8344455141273420846434825441004490185048F0584E0000448144A021001091882E
-:806980001002811382014008488841812A641126021048480400440088200218104808222410088014087F23091832108261A38C44611424182112425A28641125E2489435828611982C993228104218584883922442002903A9C25A264491288C3582882A98C1A09481788448C1124014F8BAEF0018002091481246012512012458301162
-:806A0000218A14241801C41F881244B822341981C126180C412432248554282008128288404188298213C24800428544F8991A208162244183912C2119026041B028892428146812696113248618A842C0388200222111228C04814280A2144C42C1288B242112493AC8804628440885841102188FF1031190180024C9538212200800848F
-:806A80001E8116422158281148121C12541425015842880012413981028C022A48021161A0148460218041028C314818007FAC0D2A8101A021402194221111208804441088028902804408504A19021582A448A12800890250818144288502260814806488832128044226086FF50141241D2441414792000010011416024A0800188494F6
-:806B000000844450A4508412203842901218508221823443011188C0148110922243014140047FF4014F114252489014877215042311214821C84185621852A5A1288119C1481448414114E185245434A0481638263721383678280291A4112712A1A0878453419842AB81A723433958814881F0FE7C00122E114422F028128C2402140002
-:806B80008031148800902A9018131258A144E01512328858908242000085A22888444941541284001800006044124C02DDF7400281110018000012184881800140180800810021000082000000A0212011042100842184444100830440D89703441824224289441381A1849214001944120854107181185828401848088441C1800829085A
-:806C0000241678881412D9414808C0188180813888888100C4002F520B411246982142424001008001110000846088004068280081440082248100814338121414C1103218108822181404004140F8BCAC50A88B444A14028413112221DC44D954B124A2626648C2181005855332A5B218B11AA1898B88840050951D81118568888B444AEE
-:806C8000B442418812C894004554444F828232328189884808AC542A25A2115FD445022100100400110000200810480800400C100800002400281818001200148400601800000000F01C87104888840400004015C424838242120800822502292181918888400214111450288C248404418100401544648228000080582290161FA70B16DC
-:806D000028A44400120042204C958819C281008118008421858401880000E01208508280042118000050C1A228008481120010025BDA00480000000044800200000084218418C0841410044001400848000000004C088C124168882100221002188EC400002400004001008004000010088400000000000021800800401888088490480058
-:806D8000000080028F6307853A484142000080584445B424629222000081242542AE113A21098200501115111118B24824A414800100844554444B82142218400840522225A611DF640A5088482C0400009081D04488962110080082401243B4388988180400881541485888C8480020028881824586A222100800002421BB2B24005012CF
-:806E000000811001C08800841250480081004008001008002502203314340012100100804411084308002012F4CD2200000000000011A4000082840000410040088001200212400200004011410184000000880022EDCA10021011821108118886018958139714508841008884C1855444261441584400200800212411214321010015890B
-:806E800068881374884102C1122008006F2643C21240021004801481D418688885082410688120180894850810088421A082105222A01996021800D018A8881519589242861808000028447FDB071042440200001419180142828A018C18588885088441228481002001242C4222A1234418008C8112598181801858818941C88880820878
-:806F00004332242F980B6F22D222E222B112219112C0122592832F31F111119B981F99F848888F18F44848421559111C548985B844E444F424444B244F4222E24202284554642E246F227212C2122B191AB89229C8122592832FB1F111111B981F99F848888B484E48424E4880548885F84468DFF50B6F2252262AA1111200502229C813B5
-:806F80001F3191C19E888F81B888A44C4246591148155889688FC454444B242A220280425444286F22D226A8321AA1818A2828582229C8131F3191C19E888F81B888A44C420048848588942A00000000000000000000000000000000000048420000008024040000000000001F1F030000000020022082A2222A22022022220200000042FE
-:8070000000008024040020240400000000000000E0DA0D00002800280028222A02008002200222000000424200004842A0444200420000000000000000EF9C0900002002200280020000220000220000808424040080044A840400004242000000000000F0F45B000000000000000000000000000000000000484200000080240400000042
-:807080000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000282A820200220000002822800200000000000000800420040080040000000000008F8E0F0000000000000000000000000000007C
-:8071000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE202000000008B
-:80718000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000202222020000000000000000802404000000480000003E
-:80720000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000007A
-:807280000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000070
-:8073000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000000000000000000000802404000000484200000000009B
-:8073800000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000000000000000000000802497
-:80740000040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000002C
-:807480000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F131000000000000000000000000000000000000484200000080240400000000000049
-:807500001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F1310000000000000000000000000000000000004842002F
-:8075800000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F1310000000000000000000091
-:80760000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F1B7
-:807680003100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE2020000000000000000000000000000000000802404000071
-:80770000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000002D
-:807780000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20205
-:8078000000000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000222220A2222828002200000000000000004800002B
-:80788000420000000000000000008F1B0E00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202002D
-:807900000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100E9
-:80798000008082820220020000002A0200000000000042000080040000004242000000000000DF9C0100000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE2020000000028002222000028002220020000A044420022
-:807A00000020044A240400424200000000000000CFA40A00002002200280020000220000220000808424040080044A8404000020040000000000004FB80500000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300FC
-:807A80000000000000002222220000220000000000008024040020044248000000000000005F190A00000000282A02A02200002A02282820020000480042000048488004000042000000000000F0196200000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000222222000000000000004E
-:807B0000000048420000008004000000000000F0242E0000800280028022A222000028002220020000202404008024044A240420240442000000000000F055D900000022002200280000200200000000808424040080044A8404000042000000000000001F1603000000000000000000000000000000000080240400000048420000000019
-:807B80000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300002022220200200200002222002200000000004242480000000048000000000000001FA50F000000002828000000A02228002002000000480000A044004800002004000000000000BF7B0F0000282A8202220022000000D4
-:807C0000222002220000000000004242004200004800000000000000EFE50E000000002822280000002822000000000020040080048024040000000000000000009BD50000000080022002220000808222020000004A2404004200484A2404008024040000000000009FAB0E00002022222202000000A022A022222222000080842404003A
-:807C80000020044220242424A444420000000000005FE102000000000000000020022222222200000000000048420042202424A44442420000000000006F6A0B0000282A82022200220000802282A2222A2202000000000020840400420000000000000000007E81000000008022A2222822220080A22222282A020000004248420000481F
-:807D000048422004008024040000000000F0C9910000002222A02228800200002A220228220000004880240400000048000000420000000000004EA20000000000000020222202000000000000000080240400000048000000000000004FE20200002800280028800200802202800200000000008004428004000000000000000000F05876
-:807D8000A20000000000808222020000800200000080A4444200004842484A2404800400000000000000F062FF00000000A02200002A22022A0200000000000000002084044800000048420000000000004EDC00000000000000000000000000000000000048420000008024040000000000001F1F03000000000000000000000000000023
-:807E00000000008024040000004842000000000000F0F131000000222222000000000022002222000000000000480000000048000000000000003F3E0400002800282082022A0200A022002828220000000000000042800400200400000000000070850D00000000000000000000000000000000008024040000004842000000000000F07F
-:807E8000F1310000002222220000002200220022200200000000008004000000802424040000000000F044BC0000000080022022020000002220020000A0444200002004424200004842000000000000F0699D00000022002200280000200200000000808424040080044A84040000424242000000000000AFF80800000000000000000055
-:807F000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004F61
-:807F8000E20200000000000000000000000000000000008024040000004842000000000000F0F1310000002222220000002200220022200200000000008004000000802424040000000000F044BC00000000800220220200000022000000004A240400004220240400802424040000000000F017490000002200220028000020020020027B
-:808000000000484842000048A0444800002004000000000000F04ADB00000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0357
-:808080000000000020022222282828200200000000000000004842000048480042000000000000709B0700000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000028000000800200000000000000000000004A0463
-:808100000000004842000000000000D061010000000000000022222200000000000000000048420000008004000000000000F0242E000000000020220200000022000000002004000048004200008004000000000000F04666000080020000222222000000202202000000428004808484044200008024040000000000001F440800000086
-:808180000000280000002002280000008024842404004880044842008004000000000000F0ADE3000000220022288002282200200228200200004842000000000000004A0442000000000000CF3C4341210450844D485816880420C814808842C6222460311212008200B188199198882641041C02944D42842E4822A0410014C44C424CA7
-:8082000044D2288206962804AF35062A7418433949130585D46254241E4417411294441D242D4423B214E4C1E23B242AF848824D922C68116711339994B931885484CC581A2611C819483781436449C9F542248E257B1222CB1A20382223F25A2416E428C1BA20399EFF760320010083C412122522440544448E2342A024211188201904F3
-:8082800000821C21018882C958C10084002588482212C111288A018644185482A5061881460267938076480220014184441218928D1100602230182B48113048502210843184390841702102228C32112CB4111434548981A418217021180822214B14324A4A8A08C15FC70E10011C744548648443040000000018498222210829012C48DA
-:8083000001A19089134108400110110883B244024228404404410040820260295F66021450818100004844000041264644042C8132128028C811161201811281000011104884041064424100201222820212881298F06A8B000012000000000000000000000000000000000000000000000000000000F028D900550222002571430841009D
-:8083800048212154200410D28481C1224088C142883A04002217480086641248122811181A022212419022264894148062C31A048DC2142C81711851928514D18461224889E38815111328480211811485B5812498418515541C26542155E812783E92BCA424138148E18148C2A9144C6A9845282851828C68C9460218A3088A018A42F818
-:80840000C6D52071111418598430132F8412D24831C89042A4504120041194821A682245486841D01238423C68811E848CC285138138841C82840A1C2A212328921A4189912229C216960CA24F81A24924F7AC40022D132810111C218482114103881012110825F415489041144185B124045F828172249228241002149648721168124420
-:808480008D81C4200186C884488100800128849C0E4110440430421D24434418128108290124828100410060A24C127118C4184032182904A02800148247129018100240181884518400814944A442BF7D022A01382E114B21C031848444882B8133C11D8CD858584194174C8F22B898A424991938439048C448469344C3A2A4850476320A
-:808500001549D212C3281302AC21E211E4B2951119C1141A8892424E221E285634248C312844FF94072A0116449114C031100C829250181051248D81110043061043F84824C4422440AA8284008A8192228942D1140232248324C11183C11844C0448342342416044CF43A691004221E242230421D2C4285542234199914AB18478811C0D4
-:80858000CC8B822F84091E898442260214C3E191644443E2A16444A0522D25441641A12860A1841B411B1225014182222365A2184A419848C322F2FE31242285724108190121100850282E144144814C312186222262454125D82441318244001C3214718E1643742C8165414321014C12C43822222244241A22A1A4841E4422C321C432CB
-:80860000B0BE07128142400A12004100442242008454814181844116089260824487214211221481440084548412141284121616C828430200840024846F1902400489018C41D8822251A21229012116781241184248120813211402151808008128818011228282220289324481195118604844813034224A811248C424CEEC2013048380
-:80868000711861A1848489418EC11A1821453811854439848D22834268D1895422C019859428F021188D4241AE18514163A12143C138459128C3E29432181CE2916221C728853428E28F4182A13460841E2487426E221002A50124C0122824400210E42441C812228503446B41105448150200419016284522E4128114840228411249812C
-:80870000921800803114004E24848D3400B0560F440031418C010031000040084400001400147044B1148421242464A12024024C03001C024284148484190142422081210485F4546D00212846C43240181428180882824486511E00342074220A864832380041258C2A81884202C842490A889084974811283084902428824122226042A3
-:80878000F067C7004C312483648B41100828008144218244004588418C424414C421844446484128224803118D8214462812088601004641316130180081004C21F2185A00D0828413822608100485440289428401860211228E182548F822188944132141188104480048A4414400CB145A0220028584012816083024005D2290144E24EA
-:80880000181841160C22440020497498028180014004419041100220881278111829022312D1184221862202848024410868283014222122122F220184C048440018002C48820AAC48542188CD21841188844126884818328886084886A838484C5884230848C24322B88801850412800481818100122A1112F2EFCA0080144208002518A0
-:8088800048080010083084108304400188801408400490412820021048012214190880840C422882844482F0DC7220C111430121148C4148148C18181201441150182648081440044244812416614484206212112048718832218CE192248111781A4123E185823114891318C81812683F5B0984214800004C04004445CA28100200005079
-:80890000424218C083421321044001524558248C568200402411012E14443800448420021002CF8B054431C5F418511E12411A814254548184CC514983528477C1C505F412C554A12558C4B44A314C6718C974C548E942041F63F2414226E48AF2841A454154821AD384F5A851952892124664848F4261822226D488084B14444425054971
-:80898000A134262834269D188141E522C28829928A6169D94A1828D2943829A5E184D414524CF011448D2A1F18F4411C566A114B22121F8171C241D1315228AB649B668C427128215944181DB8852CF83A415AB61894248C93142E222E244F230BEF140E167214E6217326D6C86247848D4C848F8818928886E2A8487E81C381B088119259
-:808A00008128874B2AF4888389F2234125BC1884914A8BCC8F8CB3889C484F423282297821E1C838A58BAE17C89F56FA51281416F141611F9191158CE844F3D84883A1238F816181B038F646830018100423046148248200204864880000425048100844114488812A1848012A0888842A082E81A082841C488818840888800A890A284F39
-:808A80001F0247617FF2723A6E428FE6F671775AF124662B444E4283A8AA3A7181F51A3265578A5F5AAA11AEAB35F12D298F82F266681F38F8624227B64DC11F197811E565BD43E4C5E736F7BFF735726658139DE22B441DAF2F147424D4C8E546FDA5A8AEA22B8B9F24FD8EB48F4AFA98CC4ED4AAF8AC8C9E9A4B139AB952F443965064A6
-:808B00007F33F722226B228FA3F13D175AF12C6E6FC4E4A444ECAAFA9AB4D5F71E3827A875F1A1A19FB1F1A3AB35732F7D28F462763F58F8E1F32FA6D29BFC9C8D97D15E562D211E7C7EFAFFFBDF72D246D6B9B82BF645615D2BAF94D6DDF218F91DFD4FCBFB21332F51F35DD6AB9D448FC5E546AF88C7C2226B13BE947AF749A32467616B
-:808B80007F73F73A2E3E36AF83F23B39CFE5F12E6485DC6CF88A84AAFA98B85F18B81CD97EF88A885F5AFA989A3FBA5A137F96F62D29CF8EFF8183AF26FE6223FD481F9D58B57F3D79EAF1F8FC8F2DF5B7FE3D237F1AFEAF2F7F783AAA9FFAFACA61DF4BFA893C8F4ED3C9F82922BF85F6C8423F11F928148F47E44CA5934FC2C338EFCBB2
-:808C0000AB314F46F7779C2465F43537AFE2F23E3CCFC3F26F75CFE5F12E6485FC8C86AF88F8A8AAEF89F98583EB9BFF78F88F89DFDAFA9D9F3FBA5A137F96F62D2BCFEEFE878D9FB7FE6323F7DC5F49D9BDF1979BAF8AEACBEF8DFDB4BD1D277F58FA8F8F7F7EFAAEA4DFFAFACAE95F59FA9CF9DFD8F7199D9F3AFB1E199F3CF41795AE0C
-:808C8000B48F47F7E87C8F83FBB4BC8F83F3BCBC3E244F46F7F7A4100449411842088440088440084044080011815048114A120130482322A412601200302484264138248C2442081A4421018C442401124C02BD4CD02401A021224418444084281818D428082D8111441518F825482008006528C14886018E24848024581A8A62121B48D9
-:808D00003091811301288D11002E4842221884288043F1766EC0521F41D22CF1112487141F41324E1D24AB161D24AF149921AB9451AB9443F34A9547822F147934F842954F8BD418F9244A8D854FA264515FA265596FA27498E5A2F49824ACF491242E431F4952281F49B268F1912CA3F68124AF16D141B24AD981F24A9155F84A9443F2FC
-:808D80004A9443B2427924B842FB244889FB244AEF53072F82E541D63EF1116487141E24C7161D248F22C124AF76F91124AF24BA15F24A8143F3429557892F34638B4E35778B8F14B825F148B42ECA16F527DA96F427CA87592E5B87594D421E286FB2BD91D63CB491F26A1217C9E7168AF66A111F41F24296CCE234DB85F24A9443F24AFD
-:808E00009443B34249F84AB469B44AEB22F588B4008004100400400100000000000000000000001800000020020044200800000000F0499680810244000010C6484816181808E381514113C8183028C190284058C2116934284038211430112D225641198A64141C8281084420A221280028288143F2FADE408451815024437114181C289E
-:808E80001241814804651141841154123E4418193281421554143C289481488816C286221EA4281CC8263A482412287141189A181CF1884484812331184E22848CE11116F8BAB810A43484404244184448141D618A44A41117C1444D111C7813EA428563111338E840C98127147B841D2888AC91AC116E843CE222B824B439480C46B111E0
-:808F00006291A968C316658C83823222896124262A93181AD2EB06184041142491148424284248188410142201410081478200544552480048001123228111C11310821608420040048921012240A82445F8879840021444902181192404181B481400111811401858841C085084285782444568148412200140C124148C12121102A502A2
-:808F80002110082314840881224484EE296041269412A5911424161304948284A3D121D18444542941535114632864411744864423443249392291348B42812E451D242F1201218C82B9216143178146E812511816598123D848CA348331248B144C46C83844CC0E416C022588912112350491821C48895142548911761401278849C4911A
-:809000004888243025482942E181926884444722111012499A211594128429518183511810A414164C842526C228C4BF1B0218211C5141442494424280C14829116184101101154C4448544144D462A445591C584112B05142A121144C22A2A112329142261952122489B8287822042A48184CC814F06DEE50862054149B219891C1442439
-:8090800000444200882002C0482185951422A21228282D24121D188722433268488160414140A1124318411802C9820A8A016901442C55282F99023E4860441248230223820A2C124194124C429414D043982413022529A8818486424404902215045018004842B01484528240840281282420842122824482E2F50F0000441B8440C288C0
-:809100001C022484002D2840254148042624044415642412849485044440448252122128C0181483E182410144206181256C82844008F02AB8142744005361842B16844722411D222411A11A147426C814146368820051CDC188C952244CB5269128659228844D282151242618335241588722324568831782404CAC922D18C9098B1222EA
-:809180004608225FE20D2A0141F024111134848302224082028018C431415CC248890244C02100D018921416044CA2420010841234118521490121004082D4281304414A41F8DF1DC01282804112440820440400814110941440D8185481494411C148465884402804168126840200C44842620083A241241A2406460684848002190A90C6
-:8092000011902A80341200821D429011001904001248120060482048014818180022532432288B4219C128260D4B92238211F844188210822111A2282882E0D8420282A1C02818424100200449021400144509142485018312410441150822450800811480023028178883180185014442400446140426F446F700411342042212904844AE
-:809280009542922920A224140050344121000080C1A8448C521450411908109481800214A012004048080069028688B142F161312031210021580081288C145882811048098D218480024048411104130145018312112454491548181C9C284422292101128742301220A214122E14921467F6007014424802100848000012001400001DF9
-:809300004800484924484812444805482885840244111146041C04819149622422802401228461841B7E008481262408004C150412800243C2142041B418443426408432284084E216814508228081218182A1188004482818481301801118440A2A24F4B78210348E2146034D212544440420011481005302145189449649151C04893487
-:8093800011479440044123C14413924543026227142441454868142B2414518110748824430440F4C5222426084812662418081021D14124818204416082003022411884880080A2828D31884194802C140118201122483481288244492882443842C82304DFF7012D1286C12A8961846F2412420453B8497543125B418598684971214184
-:8094000014519441949514D58552118A48D838022E282E24281321C2441D845F12F2A1644F5272C2CD252147A4EE188D21B51965884D2E4849E184911EA5FA8C244F32E984F1D73E003F6861411B236B281F419D5CB04CE4444493181E3181181744150416791448F4594C1F42D48654D887528CF44C4C181743CCB45C51844D8C5CF6840C
-:80948000414F1272187118549899A171C37665EC13988A19A1548F94F16955231222F43C8256F82424188AC244CFAF493234CD28B16D4E26226281C1CC8142AC4184207624511845B42953589B542712CD224601C8C306D7514F88F47D211DC48B118D1343F6412493F524288C041E4893C2482CF789241AE283A4831E464B8189C4943E69
-:8095000046442E24CAE582AC4549B2210F1004228A9484100488602200480028001289321181824C82118831881931882A210C8222822068120000844008800200004280F24571E063E3A3F119133F1256C89F93F11A1CF0387897989F9FF37A7BBF9151118F81F124243E35CD2CCF91F3141857314F41F1141D6F88F884848B665AF1556F
-:80958000154F48E8B6F623989BF74FCEEF7DB5BBAB885FCCB889F29DB88ADC28B49A7C4DF773772BE6BF14D139F68BC4C5F481E26D44FABB64F2C4C235F25E1A8B93FAF93E688F9B062E361F1E54DD3D418D2EBF9BF71214F0787C97D8DFEFF77373BF9353991AF324653E35CD2C4F11F314145E49EF85F711119B991FD8E884FD551D9F4E
-:80960000D5B58CF8FDD37F52DD18FDC4F88F2FF7373C19F6E4E89AB135D3CCF6A1E339E626F27A7EAF8EFEE7BD1F31F69AB517518FA9DD6EB4B23B149E825F66F76A38ABB34F4DF94C382D66242F63F235579F31F113194CFC3557AFC151447AD799F859DFAFB5F51B2995F958585F46F21515DFC3712D7C14FC1D55FF57F6342DDC41F975
-:809680006DED8F16F64C445F51F1D1FF3FD1F3E8794FCBE2E3FB777C6E615F5AD648FA183C1F16F27C37AF9F7D24F63A32FF77F74A149F22F78BF1CFC8F981D2EFA6B6B6BF24F7D4D2E5F65E58EFCFADD38F82F56C33242F62F2B755FFF1F1571F46F46547AD1CC5AC77DD8D9FC5FD4B5BBF9153998F87F56C6D1E11DFD37325751DFD14FF
-:809700005DCFC7F4312DDFC455955FD57444FD4C4CDFD8F87C5B7F47F5D85C4FCBF238BA7F47F7C1A5DF5AF63DBD5F53F3CDADDFFFFB1F7CDFF6F27F77FF7FFDEABC8F33F69FD15FD9FC9DDBEF26B6F6FF44549E9ECFE4B72AF74C444F45794CEC9401690121804108108444A1411484508128118111830481003048101834480041001052
-:809780004448414801221220019E481400402441246944F0F585001F4172284214E841164A144448428801424015840144414611545843E214122431211084C2181932241226014302418C522844830214114CC8482D24806382A12244F07B67D024F5112487221F41324C1F41324E1D64AB141D24AF249921AB9451AF443924AF1439246D
-:809800002F147924D81AF925488D914FA2C4814FA2F418254FA27498F1215A87592E4A9E24ACF591242E421F4952281F4932681F49724AF18124AB141D24AB941D28AF245985AB9443F24AB243B24279A498924F8284F9244A3FCA084D521B6183E2417446B111521E1B21A37611F468841D248BB453F14A8543F34281412F147934D81AC1
-:80988000F8174889F824524E11ACFC18255FA27DC8F1215287484F32E518C21A1FC8F2241A135D281F48F22C1282ED131B288D111D242D971D2C8F24D381F24A9443D82A33A418478A297122D84AD9A4F5F811402808400200000000000000000000880000000000480000000044000000000014709F0118412502428D14588421182C4603
-:80990000611118AC01104241419424102442041D2615984C8324845284130221A3018342413921123953A23C4141C848C9C12C284422381818F0C7C4103282221088220800912044140491C48B522111188181514211842042341241267214021982F221121263125448CD81841226E881D4411C8192414C843448490C867124F8AA59601A
-:8099800021C6542220F428145A0821902C213E414C410215584A2E192551254C0116742134C411C9521A2A441E21522885024621E211F21A224191D30299538433F2235841818C32284B244826E8242861198F41F2D3CF1002221008400812461101D048010042002281840010014528844534241F414282921A00191204CD9390121608BB
-:809A00001F8864144361544084C4340090AC002008880080080000000000000000000000000000000000000000110010011400775EC04223D1819148445531488C62446D4222281C0188846129A4123CD1412A22F584482D861581E11262819B449E882931882CC824232214C55412814E8128257244CC41112A018825BA448421036C88BE
-:809A8000A1258E485EDE80225483814C9124262554A4A1C0411B92708888B456116262411CD888882249B121C4261E19813D4256A8188984684CD022921186781894A4262594241638221C15016D8E814A35122E824D1482128D28424D14002008880080080000000000000000000000000000000000000000110010011400775E00400112
-:809B000020314468246024202481E18364247042312144208404455848220000440000181301288046829412908848184351224800818428F0AE790016C418C184418C51844B41418A0160AC70834441048826E1111859186FA442828451498752259B286E188D22221F247124D14232281912115127181AEA983242148C012384321C8B27
-:809B80004366AC2849339C816DC10040110841526241200C60A812631A01141420C849902465D842244394241558825A52286014112932111041734154226AB81A2AC48181E04421F24418166844224044E8530730148C4144285184C45642C41220A4419059422526A4821D241C019C744208815081B480422C8262214CC2148C6212286B
-:809C000080822141111288C5125022A0428392884F82B1180A4FB1410248800141412001214B81004180018224844484650184858418D14A8172181451281C43184218614188A6688114124012248231822381118404841285F467F7002E44859423008901463448902584421C0310141D8401542512282811C8184289011302904844240F
-:809C80003048368A412211C2211B21433828210000222224002D2C208501410040044418001018489C28200481100800800213241458429011181534140000100889085841814122104808004FB409231544DC120341C341E4414402190B48160D418742D36824404C5D84A17018041C53821331484096111B411885321456AC388C6121F3
-:809D0000161162128C8B886441A728121820421808E0FB0D841A02440000C04C181088028489011094180019814108848149B5489214895282282444451101842B828460811011628121402442C4482880D184F1E975004144D301144447111018080015049014444811841048120C10C482C018124001392201002D144A092E154934188E
-:809D800010C2281024149418221845982CBFA2024214801241140234342071281204130180114288C14842C14210447145480444C1444A6241418514524881550284606483718402842D428F28814104C4988AF156F120811108008041081248E014421818A1C1831801421244342084040000602A288824972289E191241442082588611D
-:809E000048002B48818084820122422F150B0020E48421618448230100208818248842216185182D41904230128446388115820442400116882104282813051829A424E044414464442074222802F052F7205848181241152441E84124C448A04810C4448C044C914C14450185131454414798141048813412520013181101849B821061DF
-:809E800098A01812822624C8128486024440F11185100481811181854311D11C215818841001108408002448845825088A0142421484848488211A82D41218C1144858382280C4582442812C94188001F0EFCC50828004A424400421122180D128185121268102884823188401884244421CC8148941024C0400102425446442425028847F
-:809F0000215028430826840142412E4C80412831251240028118001021041041488144011488404801842125C84A721C022D21330A93213122811148110000580083018C08228CB1120884138104C01816411264246046148B242004C2130410581223C111124A48420289052D812054921248882044018341024C88942824881860288849
-:809F800030282328F4F93C24709DB91861529B11D0BA4153764E458C9149C0411F18984E85B1942715C5415F1191885D4B2C88849441145F2C781CD888D4847112928D1D226D121D11DF1241F18E4787949DD31F9451119F54E7A821758AF612182F287C484822F18C1AA1896212129F6F0C4218841784143FC101AF41B118F111188B8119
-:80A00000128D8111C7C415213862974894814E481C3448FD4463F54819C5E981D48AF48343274546921C1E4325F1B1A127889E28AB511D187B5367CF8B414FC757821AD624A4148DE226CC564F8C51EA7A628236CC24C6F45329E0414114B41CC34CC5B31534451784A532422B244E2A4E9C604513D451F8249B4AF55188811725274194EB
-:80A080008D1661C676854421D421B198E486A4266E44B0345822178452282844241A38428F884B3844439586AF41ACD42D841A9B148BC9CD78EFCC0E42002200004841488094124829D18194221914321110111881120219489412442144254144415412441440011484220084200982200820F492E2A044171185D448554CC7712F64F4A1
-:80A10000424639D173F196923F13F68893DF79F91C7C4D173D122F3BFBB3A1AB157FD97D44FCC1C845F6C3C22B321FB2F642CA5F71F94643FFB8588B4F69FD5441CF13F561626F78D926F3958316721FF7E3E8579416FAA3A11AB4E8FAA894AD88EF48F812148FC2E26454826FE27296F494B8DEF89E88BFB449F246545FD4C51C1E4447D5
-:80A18000617761BFE15161BD1A7D5BEFC8F93123AF7AFB88C76CD277D113B195FDB1A9B5F8C7C57F55F4D1897F75F18B8BAF8AFB616B7DCE5F75FD4FCBFFBCFC5F454F6DFD1E48DF97F547677F7DFD1F33DF39FC584BFF65F4EBCB7FB2F4564F7F5EFF5457AF2CBCEAFC4ECCAF2FBFD2F528648F69F4DA48C57C34F6B6B89E986FCDFE8298
-:80A200002FA0414F4114F82D3595FB1717BFA4F44E4FBF24F54E162F6DFD7B698F9CFFC3818FAC7C53F159495F55F974F78F35F1D5DD6FD4F5C1D9CD1F5F7CDC667847F74E43DFBDFDCB4DBF9CD874F4DA9A5E7C1F97F765653F3BF72B3C9F9BFA5D16BF31F4C28DDFDCFD491AFF7AFE5B5C8BE6CAAF91CFCDF916DECF4AFB4C444BDC2FAF
-:80A2800026FF86946F43E34FFF6CDCDF5A0F1AF51C548F81F17D34DFF1F11B1ABFA4F45747BFA5F5465EAFCDFD792BEF9CFFD3D18F86F4584BBFA5F4F7E55FE7FE595B5FD9FD5D1D1FB9DDBDF5CFC3AF25FC474FF7BCDFBDFDCBCFBFBDF81A43EFEDFC522E2FB7F743625F5BFF29379F3FFB5D17AF11F5A9FDDFDFFF591BFF7AFE3B7D8B25
-:80A30000B78F8DDF64F8FA9A6FA9FDECB4E74D6F2DFDB8BACFCBF93E2CDEC6CFC6FF363F0080414802404861814048410811301144132134118304830446147348142204422A0114D012011448141E48341E481448A041248C041A4482D4480200FD21A0184445A12141165814A014601420348483044243D248885458114048C5488111B2
-:80A3800050A14018084A0228141F8112E28144D241024434963848102248548423648188324E8447981FA1072CF4112487221F4132481F41364A1D24AB141D24AB9419B24A19B54A39A5AF147925F842B157832D915F82D418F9254A1CF8244A16F1275A96F1244A96D5A6E449D2A4F491244DC31F49523C1F49724EF19124A7141F48F25C
-:80A400006A111D24AF14D981B24A19F54A944782AB9443B242792498924F82A4944FAAE4DC0D25F2116CC7221E4487141F41562E1D64CF2491218F665141AF249224AF3438A1AF6458852F247BB5D812F9A3488D957B5A147F82AC217FA24DF1245886D196ED19D286EC88D2B4BD11D61CB491F24E831AF24C811D24EF167181F462151D5B
-:80A480002CABB41B28AF447124F84AA443F2429447822D946F82F44A944FAA718909840000000000440000008002000000000000000048000000004480020000001002FF1108311381312441004558238200121014810154504295141418011681B422091120411441C22200948E24E1C22082414148140812382741004018F8DE72A02491
-:80A500008646381119D612C149C058919C018C34818AA428E18883484821A4126088511041694427422D88C884184E241CC9182129448134281A16D21A24E419148164268184C0321816681122AFFD061924D58211F52441311D4845D883948A51E082C58149849A16401858364581311886318418B0A86164551281485C1846B4430A24ED
-:80A580008974A194422E481A4482048F4854146826021A3212242C911889A1215F9E08235241A0212001801191180080181128C885008CC424101841D1214401288C2805122212AD124001C1822682D21891411C01814889414824030084AF5E0B1041215116843011002048820400004189011400481C02441908840028002400C08296AC
-:80A60000C412008240C882100800818483042F6B07105242250C45914B45480219351227181CF983429112B14F819412142E414459144447485123CC522832C110D612514231142A71323811812D818D111B28A13486D484711802AB2426B81CA412122889F2C2F60025121156418433440C21112C89C8813318032568A441846244444192
-:80A6800070221851166D21302A850449224144032A311A13B886E1184198812D88908C4C28119848834284C3188964829FF50A104174180254841901E024011429851488116141181941416114C04514008C1828012450232440012812A43013224011D228414A82028B14818002EF370A281A04218143082428242011124441480251847B
-:80A7000059E2419814006D121558821D14849481132298220012001A688869123214134112641A83013028101809009F524E11F22846C4412A3818004CE144881284C811AC0241001800B0220896084400001184159248188388364AA14C014C8248D818C1188B1280198421C916128C08F03ACA8001C0114CD81258484414C01200824402
-:80A78000004118444008591404002B242021014440222832111210011100222004894208412114428A21F28C94303249119C17CC7218114CB425D124C81218884551482141259414165C148919948441E41165BA110617818301E415823482892221349A54615CA2811688839141818942084B18A5341A89246822BB32208812022444007C
-:80A80000214822102249410840012841181B4210120844840028882820819921A90189891242445581A196882149648320018218F036EE00118CC14281455A2410491A5181A9C18A84472181B48D1264884484308629118A58834048412884811482982211101802851152184121237118C218269A280020039F930E001502145018444487
-:80A88000491108824942010040B8484109414200304484C0484845D8220842C98251281429E28211E84841C214189114400240C81832001F76028614041032811041440881001CA2284018180240018441811004298102408142414101804202000000214008248400709E0E2521011480447412120118484031141A942141148211D08428
-:80A900004908844541AC18308124A60A30813A882214810617881884812C440285944824E08201448122246B4A002C410140085421400118805884406541188C810800310086182528210882211481A21A12082511048400941100382416081008677F004024440225098721165422241722894802E5022195420411847124105E325012C1
-:80A9800082289998122C012F2894192318020013013546840218842480048C01F0C8BC14001284150410082028094008190988908115840482C1481400842524011CC4449848102C48318414504190A19012102204000081DDD9407186415484448604844061811C5138112504411810148411441418C111145012182786200413A34212E7
-:80AA0000A0818C42084711241901914002002414207218019FE7024508AC14D12818011A44A24824862498442481248814860183B8122888014C18028180412188C488D0124438221512C16289C844C024187881C01440C412185042F079452415E22851151FB4D42E5822455EC8CD1227288D989F21B12AD83B5C22E7A48D86E7311651DE
-:80AA8000B9374416391485F28E8219711652A22D8C15C2812B7825D228A4412DA12F2EB1837B2BF3928522289539168A012D22AD12AF8114B84211FA6222878217A18189C235F0A5315014922450514C48C11131CD54242B8C1D1244858118718154216B888F1139818F484D6CD41414419D13818C7118BC389A8415B291A5219456D8A188
-:80AB000073817923F882861D8D1FD1D42471518948921185480A2D2429B114E1826113A4BEC4144455F5181CA544784D19FB1742D41781371194967984F8358C1E346F9241D88EC9144788CD8415398450EE9D4C9D85435CD2B72966618C178C2F1C69661DC1C7228A3328AF2452383A9618C5529B7035551167B116E241D18861218354C1
-:80AB8000821285089F77030010024220242124290442822009004880044890418044044423420444224440244424064A084A0846112454844241100441F0B3D12425F2161C45CC468F6CF44A476F446455CD427DC6AF849411AD4C19E428F8D3C3E57682F19B91C5B886F448D91F9CFD48CA3DC94E537FA5F545C51F58EC88FC94865FEC93
-:80AC0000FE56762F54F494D54F65F696AFA7E97F61F8D7C45F5EBC42F4C535AFA894C3DF9DFCB3B1BF43D557F45D6C45B456F5424425F44D44A18D2C4485F2476C14F0114D8761BD4495566BFF64F45C17DD42FFB1FC5E5C3BDCAF4ADC4BF46AEC7F3BFA3E22F7E8BF1919F497D37F54F58595AFA1D9D7FCCDDF7FB1D1FAF88BCD5FE8FC13
-:80AC80008784CEEB2FA7FFC2CCDFFDFCD2E23FAFFA9B2E5F6DFA9BBA8F8AFA42624FCEF38A46FDD4DFCDFDF3F1BFD3D7B1F45A43CF4495162E24AFC4D4ECD16EF13A142E1CEFE1F1A1DC2435D34754D515C783A5714AF8174FE3F14F962D968F14F41A33E73CAF38F8DEDEF5F78B132FB8F9131146F987C91F9999141F34D8FDFC1B1BE554
-:80AD0000EF7C784EFDD9CB6E618F83F74C4A2FFDF571623F33F72F222F73FB9AA81F287A6FFCB9727F6978C3F31B859F36F799B13F24F11B11CF24D542B13AF3363A5E41EF41D18AB214D128F18DCD1445F419149FF1714B5FBAFF74744FFD175FFF61F15F87AFE5FD1B91FF197BCDF7EBCF6FABFBBFB3FF78F1879EFFF1F15A19FF98FCCF
-:80AD8000D1D3CD1A7F74F81CCFBFA5758EFFC487A7B4FFFDFDDEFE2F2BFFCECA3FFDF5D536BF2B7F8DF2BBBFFF69FBC9E3FFF4F2B97BBFF9F8CF1FBF55FD2B33BF99EBB4F15F57CD12AD1E8F26F46E4AC7E1AF81F13A384FA2D3ECF1E92B100414404118044501144003548444965868131138818150483110419483801918021C092284D3
-:80AE0000148434842C2841430884141224842812811281F069AE4002C5420415542810083C618181000011508430140000448485112154824A42022A244121011082D2345181141341028901211048180240F229AEC0421F4152281F41324A1F41324A1D24AB141F41B24A9921AB9453B14A3924AF143B242F147924F842914F82E414F98C
-:80AE8000244A4E815FA264154FA2641D2E5A96E5A2E449D2A2F491242E421F4952281F4932481F49366A1F48B64AD141B64A9961AB9459F44A914B42AB944F82B442F9244829F92448984FA274D50AACF411648D121F41764EB21132481D24AF24F1112487441D24AB345B21AF2411F5483343E21469822D1567832D815FA2015F8229F1BD
-:80AF0000269A96E1A261112E4916D1A2F591282E4819941A1B21A3B211322A13981A1D24AF429921A98BD21A2992923698822698122F8294B22E5A8F1D4D41289841000000004480020000000000800800000000800400180040010000488002002501FF87084418841190114034118210411A1108D951411C484248084110841188485A6E
-:80AF800014812200E02201008008853165C02900814311421A04238501F0CEB7001748008B2185142208B0122288014001100214D0814491486012400181404404345170184144C2141110120281204188018400811C61222FFB0944471D81141678140990112C982486C1181428D094414501354A784861418924880386115882156842CD
-:80B000001058214A130244A0181415F84421419483028487211058866024181C6121EE67000020022186048001241018019082000011104441084005100450417011081006241082028011840100294108228FBC090060410080521810028110028100220000004008484400100100000020840200008001000080F46DD38011040012810E
-:80B0800020018C0112201804430264205441C4604414281481112C84022130319031845110111921382140020028124508890628DF8E0C184460410084228C01A19018804844280249024845410C490410914845412202318002401805402882880210021820410C8306F0123A0000001800118001400200414002000010912800800400E5
-:80B10000C0119031001091411440010000280000A024EF1A0B22100100000000001008004100101818016041008400000000001508400140080088100C1240F8D2E340041006818001100110022100411810040000005022224800281211218001618400184001100810021008FF15040000602200400800004004840000440084100800EB
-:80B180000000000084418021090000411284202404001FAE0F001161C02A800181110021401804451804415084811100890180820420221111028144554888498101941034188648724488841148F8A43C30240000000000004002002001000010084424508200000000122480010000000000000067E4000000000000000000000000008A
-:80B200000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE004800000000448002000000100218800800001400848004000000400428000000002180F1F3B5000000000000000000000000000000000000000000000000000000000000FFE40F000000002B
-:80B2800000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000F0
-:80B30000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F6F
-:80B380000000000000000000000000000000000000000000000000000000000000F04FFE000000000000008400000000000000000000000000000000000000000000F0A63B0024144011080000400144008124180045082881C0110000240012008444801A028140420190188004218440048FC208000018602181130200004049028114C6
-:80B400008324A82430481128C0225184004110021440112881410411818004101488A21444124608FF5F020014401108840000144014095028004008894209194112440800241200844480381244810025014048944824188440042FCE08002180012C012601000000248430118324E84402428002281100100600144041A8120040410862
-:80B48000482001808244243148F08FAA400240084081120818820081161852815084008140148402525901201104001051121110811141311189210100A60848448200AFDE0840051150C10028C1141810021424D81119782448095110124844C2281724819012141424C11847815042265A48450848143448C481C01884284C1104CFF14F
-:80B500000D5052001019214208204802508130921011088451002800592314C81241144012C41245490240041442942400809A18482001F094BD000091400480423C1112008118219944D1489824910041254448245582340012100184111211449D228C5149301118168154848481106842494804FB6A001880112841644284001486420F
-:80B580009428A15012F0281424301447A468129E4100001A542182814C096604802108110048E122830445C814504823128204BDDF144484444800004018542822000000000029110883AA2484001041581800424C014008508450142002C042840010823244EE9500400212811608000010080044140088004004902228000020420400E0
-:80B6000082602242800130442002001890188C013DD414411845220183D1842142085018295842004001450800848C064E284A922800483088144C43244204988988D2121484C14281488012140A8D14211242F069510000901800444008008485424812442103824CD124044116410222800121800841120000400811103448304843015E
-:80B680008042983849F4F882402142012110C414008011481808209111408244880480A1840040040041110048400370140140488901428142100812F06C76241811004D124181400281000010028110621211100181855161400441418034141844C0111841874489220442100441902282104444D2884A82110423D182312140581800E3
-:80B700000020145894380081148114811830240013810200446041008487122C418401142841591204260880830243F2DD124004414144101181D14802800196048A01831868592008442B42116068C8821964284C94842181488810A41484008901A038830400A012822121482F9E0586011442004118200483044242800120020000116F
-:80B780000018604141100111004412442428400488100410048188120045E9CB0A001002004248C048808488824DC18224883CC4884846886488881389043012001182C04852A328450811106C44132894884A180810041212F0922C00545800805142444901180012001180218124011842D949044E180049C11812124582041344012494
-:80B8000081841904811D28000000884428F0D591001A021C41B815924830112800164892281C41281241032200200283134101A3211242147141189241128410154181011482008228002002686F5E4E410C4B4141001289148C215148A028828A2468188E148331888A61581199118118020088141AC8821E8818482C88084484184051A1
-:80B8800041481A92718614028001122312D2B3071AE1184252464FA1813249C7D1524D244AE181B158012668241D113AF11219272185E982441C518CAE684B1126C881211E82944C08153241C7242B11301895E411161133151B41148C7A98B82837848885828222CA24142D48AB3E5041174157411D12A15751122B448D1B428183446853
-:80B900008C528A7118E81852418F827115F281211D114658115285789D31111A14B15662211D88F01684164DA4451908182D368D542A5118881B441C99854C188882B494A8112B12224E262FF64B531643C2115244224D1C1855B438410880B88EBF19BC8498818B8819B882BD52B888CC412C541115F142B44D46178C4D144C99246F451B
-:80B98000F194848E111911F885862B5C4F9551ADC5589485FD44181354185744562DD446648284188938141E3443F2785C146012003022482130221240084110841204418B2443314845B2484292282C214C22E822012C0124008C048424844148148C048A0486088440484428F45AE72425F4252C645F51F5181C7F727212DEE7F44F5CE5
-:80BA0000EFC696128B555AF58C862B595F48D8DDF8BCBE6F89781DFCADA54F4FFF8581CF755477AF36F7171FCFE2F21613DFE5F51594BFA27B82F2189B9F19F88283655EB94F49F9D3D95F51F1393CBF53F33C399F12F34C5895F9694893A874C7E825E482F22828CFCAEAA3F2282C8FC3F346443FCA4FF116154FD7D774F11557EFC1F138
-:80BA800037377FD151D5DFD4F42E3C6F44B548E445F7CCC66F4DBFC1FC8989CFFBFB8F8BBFA8F8A3A34F5BFB84821B1115F1A5B7AFB1F1252D6F48F88F8E7F61F93CBD6748EFA1F8978B1F59F9124CF5FF97971F18595595F72B2FBF13F32929C55C998F18D899A132C51EA2222A52441E18AFC2F2283C4F27B7D84CF227245F4256445F4A
-:80BB000051F13C3EDFD2F25F455F54F4797FCFE6E7C1E185E585F7989A6F69FD93933F19F9AD3BAFEBFA8B8BBF9AFAEEF89FD3FA495985F969EADF53F22E2C6F5BFBDFDD15F3A8292F4BF31A881FF1E919F81745F5FF9494FFDDF51D1D9F93F3373DCFD1F1151C8FC514F149695FC9F84DDDCFE8F88A888D282AF2A4248B3B6FC1E145F548
-:80BB80004C5E5F8D45F33635DF53D775F14717EFE3F33D3DFFF57547FD6D6F4F63F3585C8F85F45458CFEDFDB292BFBCFD9795CFBAFBABAFBF98F8E5EDEF9EFFF9ED1F94F54D4E7FF7FE2928FF52F27577DFF45411AF8AE269F11C9A5F59F99381D771D5FF9797DF5CFD4D5D15FB2D2F5FD1F11D1C9FD5E414F4C1C99FDDFDECDCCFE4FC2D
-:80BC00008A8889F228284F4ABAB8FB243C4E74CFE4F7AFE390141004418445214181041E48A041A0414417813011100111101118014180010014901490141044484108844048040081100881E0F608271A40213122804118880648F0844881821447888D234381B924849844B024243124424011046048141504158498412413011584A19A
-:80BC8000484611911849042220881184C3418779E032F4112485F3112487261F41724AD241F26A121D24AB9419B24A5985AB9443F24A9143F242B147822F14F924484EB14FA2E414F8264A8F15F2264ADE212FA26C5D2FA2EC4DD2A2FCD1242D421F49522A1F49324A1F49764AF2816CEB141D6CAB9419F64A915D48AB944B42AF24B92451
-:80BD0000B442F9244829F924484E944FA2F4D18FC04B1D6485F3112487341F4152281D24CF2491218F44D841F242B215F84AB632AF7429F24295842DB52B422D852AC5852BC216F52688143F826C512F9248D582F8812C211F49561A1F497642F19124AF22F18124E911F14A944CF24AB151AF2431242C3124893924ADB42B42AD944B52EF
-:80BD8000FE2C0080840284002008440000000000218001880000000000000000000080020000000028DE1AB02261228128811185120814904824921634A8188684221208818828214A114202186355240044130241841544B81A240190411941058C044998844318922844F0E2540092182445021981B4181462832B811484158801128552
-:80BE0000A18151201111041122444B1800C0841C2151241217221823311411240012208148644422188304415641729A4E826225842225581216092C15311C2928028751892201178288642061196C021D12A810021F414426D8184174413412194212C11437812410E4142153418846286442884A4812E44124F19BAD808182014140C289
-:80BE8000488120E281446389200943093285018100200444492911024180810244A96141814818004021014144824C518421260824EF430141114503810028C04800100411545052534105A042834482420818282420A2252D8111454188012C81040092200826081608102202F0CA130012004C52831781841611862364812381D86261BF
-:80BF0000818D21899288841C214418D31412181682D2830442495112A02129338115A8142511591826C8922631111002368442342880912883F22AA2408451615024118541681146044281412411294158928C1104608427841127220012941032241C91811C514350814823115B8184121909822022A2214481212240F873F100140089D2
-:80BF80001288810225A812C012128249519413C2244718853111422214264458A48032628064214E2220A212178812181142202238221C4102814941082280312822DFBE060041122141488430228418471100444381921540098158234E9844448F42088011011881418C02421328912880018D43280023820922908A212242DFF70B84EE
-:80C0000021A148482100402418A24852284200800640820120A128001130412180811412110486C812C6180444A01200840081102251A46EB8209114112200168442C9183AD4180281005022C014224D282881001C1298122518181244440100100800148B848C0110080022122100002D8560211884182954424A018561C22A64921812CC
-:80C080000012222711182681421808814F14C12C2D3C10094C54421418648C02C99481812A51124D1884912112242284C01270820828E4EF7A0B4054162800418C4222D16829E114C84890446440B424145884282CA4A48002822508290160810010018049B848A8481848400880298242088081F4F5A740212251421268444C440220C869
-:80C10000426021222C01C08820941814422E44422982312248412024541290A22D1148000051188216224122218244240400B0690A446181135482B0210484CAD284A1244188844601428D2242800846180211008200444015D44153180000881B812008803C224C98544D8881881AA4841229F861B6140044260848C1141220888882080B
-:80C180000088186CA21800008081144131218248158808009082814214004428818004A14200212220F12546002C011819161182D22282081542381244408102881C24422162140000460A8D4218221A120111A28113140282A024118AC4893228228CAA14002121A8DF720A8A042810820212808222D4141881A88481428C384122888C51
-:80C20000A8828848D012018A250443A8412468862408AC11A1581011D4812102141A9884524488C8808842F158F4D04142045C0210086024442D214062241413C612A012511D4412142A5141294404A182441C6148254154A23048462198211352848A241448030000420000F0F8650028122041A8244A8201403A488C44280239622244C9
-:80C2800082224AB2485123896243284C041211004A68882268A220019A846213202824D5282455842843A2212A242481C27CC022006094B502E512081E4881145688011A38185883C11411142002148C38881951238A54228E344C0318A41418308218521A1811F11885002282A02118921882F0DBBF148489D14A9612284120A124201A01
-:80C300000228C0824488154423C2182B24881827114CCA535C8592241814008C4889849181848D111024B48402C028214821000043B22224F425FA10F19222EF22522A37228F42F626263A7522A2E6AE248D414EC283F548926A7C43E292E481D8C2BCB1A2471B939B462C68444D642F237514F4B34215D427E948B126E11AB882FA8C28C7
-:80C3800031BF31F8D841E011BB41B184E814F144B48E218E481F28B142E94DF9244C833848CAA1424B886E112F28F73CCA144D26E041B135E6917741AB444D238D38214F85F121A8D589698119E212B152E942B2F553545DA19CC6823B422F9234514F94DA11C4112B678E442B411E641F6555441F63F1A82A281D98B7A1A3EC197A19F192
-:80C40000114413B2297851D188AC634F22A2954B844BA31EC21AB8322481F888A5E012F4241C845C31485098462C25D82A78C2D242F283486127188F41A828AF345138296D8883E499E214D225E33211F1C8128F846A188314F4C98249D23144C181EA01C69141E044B384FA9841D0687952512829942A2E6C4C25A2144A822AF2B1EA14D9
-:80C480004222003024208264221A242248B28444B29444A24881402499281308214C92828159088890129082008488208204842041224822089608824482F03D35E033E3A3E243F23143DFE77763F3434E1E5EAF83F3282A4F83F3A9699744577C8F81F628AC8F41F515933E2CCF81F778784F5FF77C6DAF96FE6121CFC6F75F794F45FD03
-:80C500007864CFE1FC42533F21F9584AAF94BE928BFC333C8FA2DA22F71A189FA5B572FED858FAFFF8681BB89F84FCF9DCCAF54B194B2FEB55CB6ECB318B7F7E224F4DF744542B2EAF2645F115377E628FC3F33763DFF377437343FA145AAF83F388E88F83D399F221255D15CD1E8FC2F239354B111FD3F3B4A8DFFFFF36354FD7F41B791F
-:80C580002E21CFCAF83C3C4F55FD7A61DFE7F462736F75F54C5EAF86F73C7C1DC51FD5C5223BF99FB9F91B123B119F9DE549F1FD3D4B911B448FADAF44BFB57764F45A584F42B618B378A7556F41F544547E32DF13016E656F43E46173197F79FB6725BFF67432B662F5E8EAAFCCFEA9E99DE11F3CFC1ECC1F3EFEAEE15F3FFDF27C5F5BD6
-:80C60000F7F8796F5FEF97FFA1D81F1EF66CEFEFD7F675755F3FFEF2EA7F5EFF52936F6DF4C6C67FD8DA25F4A7641F3AFA13B3AFA5FDD3D22F15FC79795F16FF7D799FCDBD41BC81F2C953AF8CED2FB6E2AF6ECEA8BE38EAFF9654DAAD3EBFB9011F66F636668FE1F17F2F1FB3F16725B7F66F61F17272AFAAF6CA489F9CFE8FE37F7DFDB3
-:80C68000DADA3F3EF6EEE36F2FFFF3FD5FDFFF7A796F4FEFBFFFA9FB1BEEDFF6FE3F7F6F6FF7E7E73FAFF6E7F52F6DFD92962F6DFDA3EF3F62F6ABE72F2AFA5332BFB9F99B923F1BFBB9381F4DF17D3D8FC5FD494897A89F38FDEADA4F6EFCEEDCCFCEFEE4ACFEF8DAFDD4D4DAED2EFB4838A01230263022503400860800481081022413C7
-:80C70000A82412422014231401201426B4260114C01150324880641212228A44410848288C04A024A024F0B5277084018111248C746262812A217128121128112811288241C8143285011C2242A5125217825221302213949428892191881A4401492948A14134482C11842343A4410038143F1D072E431F4152281F41326C1F41326A1D2B
-:80C7800024AF16F11124AB9619B24A19B54A3934AF143924AF147924D812F934488D915FA2C4A14FA264114FA2F498215FA27498C54A9E24ACF491242CF5912485F2912483F4912CA3F48124AB141D24AB941B21AF2419F54A9243B24A39342F24792498924F8284F9244A9F360226F3114485F21124837611346A15F42A1315B42C58411C
-:80C80000AF2492218D17228537218D1543D212B936D41AD12585B2247C1891468F11F22342123CF41825481FC892421FC156221F4922F4112C2376819C121D2CAF44D981F24AA2514E1343B2483124A7244392122F8294124F82F546DC00800400000040040000000010020088000000000048000000004480024800000000EF67064118C3
-:80C8800000250A20C21416C12812420022844200130987426200104281058130122B214155A21812204828D184982852304142235C42004CA8251848CC22F4C968341C7382022A8116352848228552219098889618C421848C1284B648031508AC043048448E4A4385B44492C5468208144C6415D01482F4841184428928212178180484BF
-:80C90000869A44281E4126FC281C3436240524682505484C42712408830B8430218C14487451B258D284E29104C22502114694C89B14484AB1296D644E85231841C4518147138E44C99944482E882CE12408830147888C43827474F818241F71033410A22181302828181658321242829843120828800A2002840083840161702642048052
-:80C98000212124081098218901468184318444008AF442142280F4F5FF00804108284110BA1122822224180844C011482150184004141048282442342228002184224041A41200008C54282228121892422228F025D8142134D0236141630199412114820D1542C45A1E282C819211605442284295063CC5164F3214014A92541CB123D1F2
-:80CA000012C2312621A8242B129941F86811279A2F3502271160855224288314880122371B24402311921638411D18A5F14122228A226418212CC518B0129241210020440A48244E261C042E442F41A6212663121381A2282C221114C84A811B1621B901232242A212830C3822B0CE0D00301910060012A01400C184498241210117448D3E
-:80CA800041284415447111D2485181200250211824289180641293A1121B12131A02428183252501128304C0221F210F1812898147021844001538629092684800811011682146D228A42194188002839515408402830850488D4400608B4A12688284264418084362812128423FCF024B428542822414185221222C94941230448C02166F
-:80CB000044C411448041032A011882862894831051288D4292184A2121470144814A014C11E2128C04C84A23C252222584C1225E7340420414008421134108008118200844002828C1401C8414415824A042290246020020012213045018180082128216020041F0E2D6E041562687211B21428181712F118274913852905642481E84003A
-:80CB80004414181C924CA12D24C7114293287482911A2E44AD224C241702184A7214D18424C241488AF2411A89618830A4D6A82D122E16834334242CF4A13A0012002490120084214C0286981800418D15002688014A4208186082444812002928919880410844811289810219344800842C82048021F2222360426CE1424144042226A28A
-:80CC00003424200812814A51818C0200190584608210141445A138302426C1212012618C22894128852491484814812281204448E4813214F0F95F00001A06421582018A02C04A8A2428286C11479222608886B182241801008328D2418482848888B818284104A08288188902902800822318A21C230882888F6841012A0410189D2480EF
-:80CC8000028C5118244229041213C8188534A20040E12431210022288812881890132C9128988863C4114568124822890824A0241088A62100225E9A009048341210524200428829011841C014104221921224242091491621048440044887240044800280018821284A181892224302411004CFEC0D234A022E58414633116C01281224CF
-:80CD0000888883E61408C1282449C189C08821844860884C24488C8121644865E148624383A62412B5A42C424E2242817014A11CC10012002288DFCA05144189110400000012A0211181004999158823B4121481C14115684190111A24A44842C029402148C11120741291A81609284A23021882200A893192F0ABDF00222A0490140042FC
-:80CD80008A9148A0418521911444682082241128E484212211A8142A08403828228C014002A04800201888248808824200240029F277FF241724122424461A480480414238212411119C814411210285411108819E42428941042604441E443285568121C6C42423424C04908244514D28614C762618841304419FC10E84804428010012D1
-:80CE000030841D14802248684C822C044D4122238CE11C11A282119140415218189B8184883904130283889D211518C124B08166861842201828A8282942FA22D51465E168D1A4F2786685A2441391142AA191566298348F296C148ED84D188B124FD2DA18F221C49F9F4CE118181BA11159C1444F54B83166DC8F8965C42E611F4C9C1AD6
-:80CE8000BF287982B4396849242E1C5B881CF21141212EC8599964888FC87C84F22864C72A1E3447812CA1A89F2B06112AB23881711474196F22232284C2C82CA8D713F419D8D5D151E8599E19318681E3857858E8B4F81A28288F95FC91188F886318CB8228A21B1926F191233E219F93F184651F2676A8F89B618F1731114AC8AA23E869
-:80CF000088F4E9882FA6B322A14245A81443A2224362825F8347E222B6141452942F8411D45662612B61A6921C9B11259812236A458B4D578456F224166F24039B583D428AE416F42B496487141B43442C65424B718D844F21C3C445CC222784884F45AF842D6C8FC6FD28388B468364145C311C47242BA429E881EE28B888E1495A24FE23
-:80CF8000292014022148144826022008820000A04824118100310090819085814908450165014D81844150145014820044404448A64844400485F4EBA7144F41F17214CFC3F224668D4225BE52F544462B748AE3217192F36A4ABF8DFCCAA8CF48BDDCFD9841227E532F2BFBB8A85AFDC2432BCC8D583E284FF5DC17C4D14B229FA7F62EAE
-:80D00000188F1CBFB4FB91362F99E9A9FB1231AD881F15F2D8CC8FBCAFFE4B121B222E222F46A4444B648F25F51A18E2211BB28FA8FA28988F8A7982D44B49F115353E3CCFC1F214744F61F113172F17F762645AA5324F61F112132F65F7D3D3AF99FBCCDCCB9D8F11F5343D7FD6F4B1F1AF9EFE98D91F3DFDC1C18F8EAC335D876F15F532
-:80D0800019791F12F239ABAF83E181F3A9A91F3CFED1F11FF9FA232BFF96F211217AF7C3B3BF1CF9C9D15F75F122222F4426F4585AAF68F99AD866F22264AEF98FC8FA2AB88FC8E921F13776345F65F516468FE37216E625F447461B134F62B142A7E4DED61F39F943E23F2DF5CA88CFC8BDC8F534844BDF4F79F9F7B53F1FEB9BFB889B49
-:80D100003F18E886AE77DFE5F5CF4D8FDFFDA5A5FEE7EFCBFB48645FD9FB91A67F59FDBD3E7F7BFBB3745F5FFE188C5F78F3A9FCDFD6F4117E2D22AF885A4CCFA4F456566F67F364846B8C4F4EB894F9BEBC4BABCFEA9BC2347F77F73E36AFE1F35E16A7247FF5F534352F63B372A7FF8F6DFD9193FFA9FD9B9BAF9DFD9C9CCFDDF9B5BD33
-:80D18000DF9FFFAFAB7F1BEF1EEE9FFFC9DB9FB8F862C88F97F79D1F7FCDFDF5FD5F5EF6F4E7EFCFFFF4FC5FDAFA95A75F79FE9BAFFFFAFAE7E55F5BFE7CF4FF7CFFFFFD5F5EFED99FAFAEFECEC8DF44F45CDE6F6EFF76724F6EF8EEECCFCFFF94B4CFCAFBA4A4CFE2FBF8E740012250248441200224842400114484449285241808812016
-:80D20000048130482A0120840114901284188426C14824842049C3482CC248008182009FCC0B828061810025A3210000A714C08148881B43248658181B4A42821429541840D1810448812A35812A247822518122484E8213291491184883044088482804188043F236EAC0421F4152281F417248F11124A7361D24AF24D141B24A9961AB4A
-:80D280009451AB9443F24A9143F242935782AD914F82C4915FA2C4816FA264117FA264191FA27498C54A9E24ACF491243CF49124A5F3912487341FC9326A1F48F24A111D24AF149921AB9451AB9443F24A9247822F24FB244829F92448984FA2F4AE44F026191B61E11A521A1E24AF365141AD121F41D248D141B24A92252B844783AF140E
-:80D3000039242F347125D812BB26D412F825581CF826C81E213FA245F4274A1E214D431E216D4A1F89D214B491D63EB5117244A329E71613F84E1119F26A151D24AB3419F24A94322F6408AD362AC4342F82D44AE9A2F576564008480000000044001001440000001880081004000000000000280044800200000040015B822083C11885A0
-:80D3800034111489334817814C068C3C4185146812412711539288960C10C86849D22C2135B6283639244582AD12224C611A1E845D488C9BC19F21624486011198148F11C4288121288190248E2824DF1F4A4232A551182D4E361C611222141F2B44C198299884841F849128843266F144284C841234433312084629F81242204211742218
-:80D40000410288142E14B028C8228AF1281211894582354485B294D421E4C122641128FF58082F2162558751A42C15ED11F2284181544F28D581E88254484D8899D2E1E591D285E282F1214ECC82A4214E2CC6F3112C8D524B924E2986334545A2858F1112F444218691125CE41398149B122534214B188B1231145E21AB34C4211A66249A
-:80D4800047A16664131E225FAF07800216541C1A12082E11682681C493820000208889444408630221008B212E12200226222162488948E816088B86822111981E48812044D8425881289088F0F4594041146281871228242032111413E8140881111CB125442168448281828180028364822888818800100240682219146888200151853E
-:80D5000021018C544800412824AB950013C1114312641193850189C822420011CE1441885018818D412E41466118304C1C14417445982223361819D422CA2136C18986385213CC181CCA711C16012D8886E2B8148883B28814A44A1283F235EE105124801281335123011C2932C2130C91CE1449F14481148948C4818924C4893048488D45
-:80D5800041444639822088847A212231888223A1483D482E81844E21407284288849C8384142414BC22826DA6D01901116D148912C11818012181101001114221031488C64121C08302411608243C2224E2883411112C22114818C94211281130F16011191B914223428830820018F450A302C242A4564821D289012222158C22C28812210
-:80D6000021548189110424892232328974C222C242869144412114E118424184812318448284018AC1114C012F4128148868886158F09E8FC034302849140230181142A281C902428846240228214948420216242138841648541A1AC448101832488A2204188323056022B02428446814818A12342229362489F1D8ED304213C114843854
-:80D68000216128480028A041854104C4416081424143A448504189028001200840041428448C04868528880848844003A0341008D0974F62464F12F12814678361A3D292C2381964228A420858B3C1244C71285458812D18431474246A2A49F211484632A48B143D14A3A414821145421448A124A48B498F41E2448124E822A81843994C46
-:80D700008141818B284A73A2B82CA4128467AF8001002A0141901248A0618B84824282424820432408484240742208201844D482042112E048124804C0838218001984012F24890443086044F09B4E244412388CC12C84904410042882814D881D88A11984015D28482008151814388430C24724848302144C44C18444826689382482274A
-:80D7800014281C0459289222160CD048828402BF4B0C1242250242121219B241C3218922088214800422008C4831226C843118001C4499284CE24408A8288CA2248982122442614228100200A0822249868451848B422F134C02E5414401852126C1288400402601C0264014084032654C024421901480014E28C88826024100D144882052
-:80D80000184884443448248C06224C8241F45C3EC04822C024136142A181005281A35581408C0148A7162B4822234189218188C273942428104454248018214404121904A812821111C084218888988C2808EFCB099AD421C2114100141946B18125044842B04141982813041418114548792188214421113944406812501411112A4865C9
-:80D880004213827264612434C811252491E28744481E286183C4A8442715608200196424C05480C12419AA81413819A1281061810013988288822928B41102815296AA4112821903810090894904292168841C9272422B24848038428C082901DF280184B0288432222A04002061442C8168442081C984AAE142C1641E2448185048C09424
-:80D90000438A08822B2812E02198148B411621810182400100800882494101431294828FC80A2044D122612149152231448618A124223D4230448A941445324821508417228442D03888F6428244297824824424642244C32224A284184A48422A0A2544C284414A42CA848048B118B8750226981A4400111484A041400C4C33881211006E
-:80D98000174988279123021844196241901420412181440E8A8598118061848152E04411A8298212006112122121226F13084AB7A712ED8431164F64943315F1111889E484C5481E189D5E278817F81CF111D24F94E46C7422C8E1CD946F8288D859D288517996D2A87C847238522A9213F5218115F421854E441F1294811CF274588F1445
-:80DA00003653AF123463AE8118CE422B88CFCCB894D422D396046EE4CF5938E8AFB10D63D218E462F1132415F233315A648143E493A3A18F26EA285412CD958B958F847C2865618D394F68B23C311115F3684CA24D451AD845F6F6149FC57482B434F62E4C4B42B0A6768AF8A4A14F45F22424DF8AD818382143D221FA987281D655444D3E
-:80DA800024282F8638648E844D32813CC3AC3F774362215E1A2F117224E3865788D4CB762E615F4C7821A11843B6D438514B42124982BB37D8197DC1E812B28856376F81A5214F82F7629115D112F944F88E144AEBC8F2D4661E824B31B7818E18125E541D244F48E8682F8CF8434A713D817E122B428D268FC8AC37AFCF7894688243E137
-:80DB0000B70C400183028501850183028302248C04178828131828C12482442388128102009082C081D0120118C01100C011C0138418800118100842007E4C2416F4511D3E2A5F3266A897E177D5DFD4F14C1C9FC1FBD1D98F86EAC4F81D997F59FB343C5F4DA5DB5E568FEAFAA636FAF771712F2B024F4EF3352CCFE2FABE3CAFA3F7D7F1
-:80DB80001D2FA5F3183C8F91BB14E323FF74242E24AEE47AA6A25AAA318FE1F312B6AF85FFD89A8FA1F916129AFBB632E7834F6CB9A27837F22E8ACF82BEA4B9265243241E463F75F2362F7F53F6595BB7E5BF83F22838DF46F3D9ADDFD9FB18B88FE2FADDDD7FCDF974244F45B531F55456FFF6FB26352F93E357F725374D416F4EF7741D
-:80DC000064CF73FB2EEFAFF3FE5A9FBFB5FB587CAFD3F3482C7E773E642F1BFAB5E45B674F4BFAD4E55F4BFFC9FF2F47F7A4B5AF8BF9AABF5F21B183F9B496AFA7FD86B26FAAFA2C3A6B826FCAAC9ACBBA2FD8044F61F417558FC3F2351D5F79F15A4E6F55F42D2DCF45F43DFC1F4DFD68284E28DFF9F9D7D58BBF5F55FD74341F7DFF46FA
-:80DC8000A76FD1F9F6FC4F17FF849F4F38E846FA1535DF32F2BE3F2F27F7DA5B6FB5F78EA88B6C5F9BEB2BF793F1AA8AE257F7C1E5FAFB953C9FAFF71733AFC4F75BBBAFA4FF5BDE1D97BEB2AFA2F8F2122F8EF9AA8EAF87F2FAF88F8AF9A89C4EFF244F61F71476CFF37317FF575FBFE7F1574CDFD6F77534DFDFEBDFFFF8B8CFADFFCD92
-:80DD0000CFFF5CFDF1B1DFDDFDF5B5DFFDFE5EBF6FD5FFF4CD4F5FFF24AF4F3AFE776D5F55F78C27EFFFFFF6E7EFFCF9D6FFEFCFFFEFF45FDEFAF5F77F53FB37B5DF5FFBF5F15F5FFFF1F51F4BF7E93E7F7FFBA3E5BF9BFFCFEBDFE1D967F8F6F6EFE7FEFEF66FEEFFADAE6BBECFCFFFA4B4CFCAFA7E851002271250361084049A0482A016
-:80DD8000412041A44120A824128110084A92118B242921941490141004490845014908450360882048A54864484482448281F07FFF004C92184442191294214991212A28C81213484518382485120515A82426428144D48404592CD4A23848A02100A1828014A828422888482542682490288AE424219218484C2BF8CD17C0421F417228F2
-:80DE0000F3112483F4112CA7141D2CAF16D1C1F26A921D68AF247985F84A924782AF347924F84AB14F82D412F924481CFB244A1CF8264A1E214FA2E419E2A26459ACE449D2A2F4D1242CF49124A5F29124A3F4912CA3F48164AB141D24AF249921AB9455B84A3924AB9443B2427924B842F924484AF9244A4FE5052CF51164873215B44821
-:80DE8000C12CAF14D1C1F26A1115FC6A9615F84AB25F89F2489257882F243385A9B324D412D882F442352E18147DDA1AD2A4E419C24A9E252E4916D5A2EDC1E2926448AF327481346A867C4AF18124AB14CCF26A97441CDB85F64A9243B24819F442B243B2427926B842D9A4F14C8B0082481100000040040000000000800188000040414F
-:80DF0000080048000000004480020000004114F0338C34180022D941C42C9312240818207418C184414493514184004A424214F64128C41C012042080090141A62428C044242841CD281446A41C128188624018B1443022F870B4972A6E2124144D2287211024E8963C2C89B425825243441839C68448E782AB44C0245B825B448422251F2
-:80DF8000124283C284844E864722C225C484B0491883392CAB816F8229A818924CB488A424872C4C7612E884C2644C7218B144F285B61461274E23811261625C5283974463528426E8224544F1448186CC6C8428A44B24E043C427A65C421A56844E11106182C634284A08414CB55992225847A298CB8745C8311B86818F48D54832284C0E
-:80E00000E341A82147265E2C47115AF22FBAA012601244CD128489818228A8841B4180B4480142C0155F89A4248440288404354A01899284404A542244888058418908872480289818491482E4248814CA48008912F418D300001002188445824232911001486416C8211287441518D884044004422CC42484004A021052812AD941021383
-:80E08000018C6422121C28D112082B841082042024F2D4A690151663425CD114414225234328D2286498EB1846ED81382148414C0449E54224C2468183A6418D14A37141E262618223EC1198864322512494488D41AC54811227844E2118835424AE4826C28886C2A24CB688921484AF6E034901412441241116382422D0829C8127C8C3FD
-:80E1000084450222184141890424846688914821248351828A241D422641F832812211191518B8222444417882144222C882B022E48882042D6A4071118232151C014981622184223C419811118338258C4595448CF4411843926C46044148439158275626642290214C88021514984589542814528532311AA841144EA82BA4A4A0A441CC
-:80E18000901489F2BB6F40042D24508230232084011A52244AD11246C8644F84D1842911884142423A288C21582244160420419814403822411842268412041E2A84AE18412B8420618810B212D448D184F11C1A244820C1410010D44112C4282598264C084E2418403144298262329014494471821C58284A5A1848828486914200230508
-:80E2000012118BC142181744602648C5424888C128100A582FF80310441886018C312821248A410111122D1200100883DC8464440049041842A0416C42042B24120030A28C481812A882004008C800430400B0F10C4C44D62C03843018443D24248F2952289097142E5C2B618314E1447122A83C514654A48746518429314C291A082D1486
-:80E28000241D7412A42CE244B112285D414A4BA821178525C8CA48691832188A9124211A941484BF870921001594127022C1284216041B2180F442124034148D948440B848420230586181215684E54482082C08008012C828A14C8488021285C4488B8410C84840189844FF1D0D4810214261842504424D28131128018281456884842218
-:80E30000884C1418157222024D2112460C4C41A824460228002E1189C9288B41190283028321446821882E188062422220F1F3C4000047A1412922220218422141460448424CC2448542621218008400841C01804208008C2AE1A4889481288120A4120030284B412308A9210449C84A3FB7041024022091444C0424860A84812782241887
-:80E3800024835941422088024B488100368221023022112948C2A8442B24213052289E212C243A4269441808801408001FD7032222447048143428105A1211261412C21241009082C08821463844406284002C725822011A64C442130882A048250888218C28042200888C240146781408B7B530822221454A1858822961844400008033AB
-:80E40000181100274211411312182591816A314C844123382420362641A06143F124411863C251481842443CA41249081E64E0411288021FD40D4608200448504840886441284C861111E48124041908888C8492222F4284411C1182C81A501E8496116249856128814846119218C01181C0822A240183280C2318F498644011C941196279
-:80E4800012194211C1253C24B22164151114002222478260828C46024820068004288C61211200008400005022848212403A4825022182488157A2502484A1298184914187224D11424158148417A419611413311119014C145142154499416C1801DB1E8BC2002814A44D1185114451244D2190248641318115C8A388184382E84254281F
-:80E50000A6C468F035A6242618C4642042044822298241542A282144212032824B148269072E18B02C489844222440E54401160C89048002C0168E12E0C8068A121C04424782822014E222E5FA0A4D428338257041F644383B26CF86952B429AA6111F5641768951221E481395284F71AAC82E88CF41F8684A255281C72244C11B141AA642
-:80E5800062228C35223F24E1A8BA836848DE34AF8AF886413225E868F143B8EAF942D1259244236121EB418CB48248E884F4882843F1D61E3421455A72CD2C47828342C8246E15EF717246E222463A4E6AF11455A5D578E3DA34AA6F54F149214E396D218792CF727A42F594E3DCE1D164ECCE1E8E1EC7641F41D744723154CC2AF92D4877
-:80E600001F64D7C9F84A7657651B2287132D2A91DF88D859D9A4FB2A58AAD84CBB3CF344D243BA44E8A2F4BED3B061F2212489F27112AD611F61D45C54234D4A1F82D4917143381A1D4827A117824B142E485E121528F28644AA54414D642B441E6897867AF42C22AF12B11EB81AA22387241E4129E412711BC883126E2215E812B752A82B
-:80E68000489B419E284AE4A632A84F4CE8847362E284F42A2489EA43B448F1DD21002712842F12011C0147126022601248344844114C12C12213982813B84812F14824114E2411287181415014D01448D81488D4144858145014841448748E48444864926412460487441F1A0C5F16F6242D45F414558FE2F2383BAF86F66C2D8F87B7729F
-:80E70000F63E72AF33F3521415FA1E344F2252CE2AF261684B762F2101DF857D2EBA65B4CCF6111A6F221A63229ECA2EAA2BAB2E2B873116F2B43B8F83A26A2E22EF3B43721A12A2818F2AF822A22F4FED4CFCD9DADAFDC2C887A242ACE822AE824BE62F8FFE351C147F16F66C6465E461F5682E8F23F16A6AAF67F7727C4F67F63874AF2E
-:80E7800023B35223F41E147F42D2C6A1347E72CFACFD11942BCA4F85F1381E2F84F468F62F61F15A5E2741DFA2A4E95FBBBEBAFB2C333E4A5AB472B7BCAA338FBBFB3232EF2E7C6A7226A18ADF6EFAAAA2AFDCFEC8488F2DF57262EF84F4A828EE248F84E2E2FA62E82AFEE8EAFF5D47F325277F7256ADFF71F33B3AFFF3F37B78DFF6B6D6
-:80E8000077B336F11A5EBFB2F24B785FF1F15E5D4FC357154F16F73539DFD6F79391EFD1F551D9CFB2F16543EFB4FE735BEFB2569B8FF3F5B4DF6EAD4F4BEAC7F6376D4E465F7B7738FCA5141F66F2BF373FE5F57F263F45F5B5B59F5FFBA1AABF8DFEC5C5DFA9F9D6C6EFCFFFAE1EEBDD6FE2BB3EFF7EDCCBF34FEEFFA4DD347F72F227CF
-:80E8800047F5FE5F1FDFE7F37F3FFFC7F7795F3F47F71716AFA3F76B6BBFA5F55F5DEFF5F5377F7D154F16F73533EFEEFF33B5CFD9FDDDDDCFF2F34769CFF3F27757EFF3F7372D5FF3F5BFF5EFFFFDBEAEFFE7F637775F76F797D7DF5BF8BD9DDFDBFA9FBFFFCFFD7F377F57F5E5F4BF6FFBABABFF3CFC8F47FF69F97E6EEF8FF3BE16EF65
-:80E900004DFD7E7EEF43FB7E5CCF43FFECEE9FCA0D000024302412221E482484200184441E4844102801D048024450480022420029012302002CE1810448241A0448240048818A14280882BFA60C86C1244128CB121A148A5422448732C0124508431112E42462828D844B484A422AC442288CA4212A34982B428129052AA42881828B12DA
-:80E980008A1402249283028F2408E0838448180842009CC47AE022F4112487221FC1B248F11124EB161D24AF26F18124AB9619F24A9253B84A3924AF7439A42F747BA4D81AFBA4488F14FB244A8F14FA244A5E254FA2E459E2A2F498252D4A9E24ACF491242CF491248D821FC9B24AF89164AB841FC8B24AD1C1B24AD981F24A9259B44AC1
-:80EA0000F92448AB944B432B9447832B944F82B448F9244A9FF8012B421F41742A5141A7341D24C71611AF367111742A5441ADB35B218511F14AB6118F647315D84AB217B44AFA25128BB41D828F44D2A1E149F227488B216D439E214FA2E489D2B4A4684D539E28E5A1686F16E188F266118CF24295CCD23A8BC4252E48AD962AF44A3649
-:80EA800026F842B42782AF44CA126F88058480040044000000000000000080410800004001000000000000440000000000002FFA0C244484211228423B5225483488391148119844211D1A50488D248270480440C424483041466421812844235149A909284284981D841E4816C8121B814820E48238262D88324222483DAB3443A2181415
-:80EB00002C82721207444415C211C0518E165B588B289288896122601284142748472220D14AC884882A094C95821C1421431491122CA8162F843222B021280483682400887230281619B8B90528431538221210F24215A1244B18148B421D16496524988591128762C7221C0AC33186431894242908C67161C41281A94825D414728A141F
-:80EB8000810283E388B1243814322A3583889042816F22E882692284897118F2436B5026400127221F4122841254418523C111828D81478A2019080081190426021887444908989054282C341189214122E124887462123148178820314848200A48182A8482F4278C2002412800411D4814841800800821131898458901004215C22119B5
-:80EC00004454820080042C8132261518862204811A0211608818264844084828848524F2462F141614046D12543D1CA26311544268221C541E471427C255AA42512911E5941378444954C245DA48334A824F24B818884154222811A4181FA8041D342B218E2285F281228B841A64119904211A7A14E22833844AA86146F44FCF902444410B
-:80EC80006F2142741269681E4444258C81621421302825CFC1444147812641C8414D421447223E4D4125C88683214104296212411668C421130622813398424230418312369845A214418C9C284D422FF20F18001011841219014A02501C5B84612042EB1441B14801C1502C9424462828840846021602A912D31228D2248173882223722E
-:80ED00008188D118C9180022122E822A084325F2718520C12200112483342225355140918448298281B881031004A484821228230840035240481424642810881208852228022642A8821024190C218072CB0F1143C128484E8410045026111E284944C12285341424B028F182284B212444241A02833B84843694249184E400874581C957
-:80ED800082A2412188A02534846B420010D882C4421006F0DC6C3022C016221A0812A04120122281C848204444480420C3424249440121472480C42423A81242218880C88449E82221110484821116048B281200824AC21889F4BF6C241B12442502534552A4221741560226816524AC94144B493E8525E841D282C81412C429149221124E
-:80EE000041C974278232348C38344314B21C48388882F6B628B112582C9A6282251295122AB828781822984C23282661866F7703A021CB1228004A01272415643216883881400800844C22922848884B4270222A0812493448211042048263C22C000042118988544800418B14004181F0566B50244160D119F12118702244C88319049325
-:80EE8000C418222D24A482242880441108002814461802226E822241233289812218436C22497422622C222314F98451872189C8A4922B21830220F4D3AB30411E2281240018121128881B244908004C18A814448881882A0C41804C245A288504C482200D82823F48028618D8498832188461844084D14A022168833828CFCD092100236B
-:80EF000012582610034484104174481442D42439819114007083C222118604109C4225AA284448004D2A62101284014088012185240162404C8452249D9A902100841A028142271481418514D22122C14823366840122C2202A0C18B828D1230842A0886840184514821841038122490188038884C024218814F88A158815821FF660400A9
-:80EF8000412454184901448800001601A49081881110C98640181154831082220885A228F082114182418F184124484742428A4108452882010018F04B694082814441480200402AF42842193222005562A5804491C21419454144C144004423420E45C8142C224422140485B4184821245841144A8812146444C014A348FCE83880712184
-:80F00000821102844008448E11004D288988024084241842A241822AC48200814400800888C9849A4C8928928822001800481888842C4428221C84FE4F9520A848890149685494874481464142082160448813413C4D8411104954411041180284840086D2181286146411142522088711A021281244006022123214F05B4824460848494D
-:80F0800081242244C24481C0868828498498420088214EA8218061218884824B34A01254604226082A043028001218484C081A222A2A0110318423D84222F8B4EFF01121F225B612F185314C71127972D25E7421D8495412AE8FB5F614382F6272A294926F28744A4802A2C1544DC817825C58C18B8E43E22262CA86B224624647B32F823F
-:80F10000A8226E2A28CD248D12CBC1F0C3482B192C741444D1C838A88B214849D2EAE54ADB9CFF8C44FDA1244D425F2822511C83F13C2385461C21C89BEE482145516A824E8246DF51C8648D8187881D8315C8824E1314C728E7188C54A84FC491A247438728242B4857416F4C94CC7FDA51816748CCF28F8E8552882B1BB9F85D98828CFD
-:80F180002DF22C3E27124B235226E582F8A52A142394128D1817E227C43D484AD11C6484CDC78285B24964811BC6CB44CD48DB298F85F185837F88F461618CE43DBE83F4312465F25128486D362D84A1C5F248A82D844BA81DB48F38D2A868488F25E839EC82F882123E113E1166D288C81BAE644F277114F48416D28FE5A988C964294ACE
-:80F20000F28DDC00430220288284014D11408244064C82041B4864118B241183044A123118115A12228108001484804401C028148C06848004008A542882830483F45B3A10F131314F41D1117455FE677735F343525F41E555BDC4BC41F443C45F55F5CEDE4F2EF6C2C24F74FC16954D8D6FF8E816D698F85ECC8E86AF9EF61819CFB1F959
-:80F2800092132FAFCE144CE168F29A1D8F6AFA82225FF87A83EC48FAC8443F5BF9AB288AF8BA38BFA2BB4BDF2292122B88EBFC7018E84AF8C8C89FAAF8A88ACF84FE8898AFA6F68B723437343FB5F5181AB731F775FF75751FFF4B53FFD1F5DCDD9FCC7843F94BE9CF65F58EDE6768AFACFC5757EFD9F1878D6FD8581B8D89CFE8F9828616
-:80F30000FD8FE55FFFAF39F9968ACD1E1D191EB4342FEAFA82A21F19FF9A92EF4AFA88A27FEBF98F86EF6AFA9E9EFFE8F897B7AFA1D3EAF3869E2BB8CFC2F31C9C4BBBCF89FBBFAACFC9F98EA8CF48F91C1A1F4F4BF111151F73D7E6D1B17155FD75673721FFF5F44B5D5F5CFCD89697343D2B7FD5F5D6D66F2EFECECEAFF4FD4797CFF868
-:80F38000F8878D2F9EF68989CFECFD8286EFF65E9BC57B97F7E8FE25743A6DCA9E1E2FE8FA82861F79FFA38A2F28FACACA3F3AFAA3A26F48F88A8A7FF8F8EBC62F2BF19AB2AF29B8CEFD14141AF9A414CB5ECFE8F98A98EFCFFCB8884FE4F5D6EB343F73F33B77CFE1F11F15DFF7FA7F6BF7E5FF75F44F55DF5CFCD9983794B5F95D57FF1E
-:80F40000BDFDEEEEAF2AFA5FD77F59F98B897FDCFCE9699F9EFEC4C62F7CFC6F6FBF92F21517BF3DFCE8FE8FE2F23429CFCBFBAD2A6F68FAA6865F5BFBAD8FEFCAFACCEE7FFFFF9B9FAFEBFBBABEBFF9F9FBDFAFAFF59E9A7FE9F96E5CCF87F71C98C78ACF8FF57E6AEF4FFFFCF48F8FFF6C7AFB18D016012184694148434861882484E0F2
-:80F480008144638844840085240800210081888163026302630249014B82502412411200204144C824924492852401F07BD42002416012116581041504132834152B14C0A29A645447882714114A52A14E84518952A6871CC02424812D828210D13A092CE888543880588125C2488D1213084898848D82484A68888744A26F11094F22F4A0
-:80F50000112487221F4132681F41326A1D24EF26D141F26A9319F24A9259F44A9443F24AB55B4A2F34FB2548AF54FB25488F14FB244A4EA15FA2F458215FA2E41DE2A2E45DD2A2EC4DC2CA1F4DC2421F4952381FC932481F49766AF18164AB161D6CAF16D981B64AD985F44A924B42AF24B9A4F44A924F8AB44AF924488B944FA2F4E76445
-:80F58000D0A494618D531741811D64A11D44E592418D871D44ADB219F44A3422AD9559D42AD981D44AB927949A49D518F827D2815185F4224A8655B28E25841FC952A29E64341FC934489E2CAD131F4882E1C8F242151FC8B222D185F24A9243D22839848F243184A99146A9F92452CFDF0E8628082004000000000000000000180000000A
-:80F60000000000410000000044800200000040017FE34D2241C6184121411891488318228814BC123484884338882CC11C8C6181B44004008C998116082F81B8820121B863D222E88844820141AC6182259818122D28128C642240A8148C14F8719720A21844390118914961824CC48825CA88D08508F90221C1824D4144414902116D121D
-:80F6800040944220025B428E111B82811C18E82261412AA881221C2C211114D82458811932522C22C6281428EFC20D214B1CA7415C118261115481874467A88D82AA4474C2988486486688182FA1F848114331152143082721309413184122F918841A78C2211926382A182B129243F25C812D1A1628C13A8C781A9168782962A28CC2412B
-:80F700001AF27EA6A01240024014688162820081845C012D25825084444181844C021441402AC41828A41B24142883B28112AA49618200800245084302112130421A1448F865EF00112011081811A1191248080041290214412501182054245084008044D42404244481284248432241922123028119041028020000416B45A0346D124D2C
-:80F78000184581D32121124411041492275410E88154265822406C42908B871611F021564692142826922843826212248641C2231483C24820448841A61449A24142928192182881B71280C6148081623112116042002CD8140481661836422225012A0186494A014954224160422FA402223190A270617224811348A24284004AC12481B3
-:80F80000A08181888002BF8B0A2C11991E15C4188042141B411C2901284123011C1104C1412522C46510EC128184810645C124C02C4618612400844239420483316521A0146200181250869E3B400610541222212410C1885023340041004160462611082024440860248C0429412401C94226944244422420443214822100C0488002F0C5
-:80F8800011450040821204848541011411120084002D4442418184134418446642201108000000401881011C01104188088CC25820887112C81410F8E5351418109411121C0421808102841880113A44002210244284C2288140048001224042081008128628541800814812414184800480F4C8B514412145625319613624A4111CC1282E
-:80F90000142561215028C14696444304436442934284D224922840042412A012414058488417241243B19144126914B01488BC1862844460214004429FB50C180010068111001C088D1211200100C024265818488141839444811881488344022011825224844210880450288424C01490888CB448210384EFB40300490100140040022126
-:80F9800000504840048140914100100448208202282228341004221222005022901220042800002AF44D982081C12212418001872214000050220010A8429068458884722408830426481408211420C22113128104413220C4111024042F84915483862403414F850D00160244400183120300C02210024480048C06482222448024829235
-:80FA0000282480826226C02420042800421C2122214422A116668804E042F461B2D08831584C22018001004556644B222A02400C4068A225523217C520480C8C0481555111118D2895B848E414342111142218412A514445B426D22232242034484440F2221225A211274C800124002A010000008100008002002004400400006022000008
-:80FA800021002004420084811002180000F0CE4710E88124842401000044414428281008005022422921C194C288410014134241184888840400001115541444222800000027249032FD5D702208482C2102800210410528810000410021484C819481008C046214104228E42404501400004024821201002002302248DFF80524682800E6
-:80FB000041120040042A12012400009042800188004800140084286A040022000044C028000000002180F1363500208101220000000011008400424880040041210000000020820220021100000084810000007E2C50A8836444422112830110514441CB22112240480840522225222123698C8220041712151271285A888B4420148202C4
-:80FB80001001455444C3426882008400242552221AF12B1B0085A843290400220014144D268982020080024052424A8181884C04005011008D282A8404000040115144281B22000000484616E6B3078001110000140000000000008004414400002084420210420400840000406214800144008002F0B23C100220020000008400910000C9
-:80FC000020044111800400000022200224000000008100000000422082F4E545B0223122282901221A01100114501840028100200441260484483048A064280024280023420128001181844284008112288014A4248BCA4022C1148081032A02001181841400002A22044B444E414B44485024444800222CD222322240D622024B228100E6
-:80FC8000150111812185811158840048422849F495E5248061231F21322243110811501181105389508884408484040047441B444443042042022228222800009041C0411450891124000020A242F045E2F026222D222E122B131229012C512239F8121317119B88179985F888418F84041D4915C1419558884F84F468444D444B244F463C
-:80FD0000224204284554642E246F2252222CB11281B882092C592239F812131F11B18979D159888B488F84244408488558884F84F661B3F026226D222AA1111200182592823CF1111319E888588889242444511148155889688F44D44CB444A222222280425444286F2252262A23A1818282502229C8131F3191C19E88878189A444424271
-:80FD80008044588848BF850F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000058
-:80FE000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000024
-:80FE8000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000A4
-:80FF00000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000023
-:80FF800000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000A3
+:800180000025522200001AA1111AA111255222255222000000000025522200005F51F115151F1AFAA1A1000000000000000000000000001AA1111AA11100000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000000004AA4444AA44402
+:80020000000000004F44F444445F55F555551F11F111114F44F4444400004AA4444AA4440000004AA4442F24F442422F24F44242000000004F48F884846F69F996962F21F11212000000CAACCC2F2DFDD2D22F21F112124F48F884846F61F11616455444CAACCC6F6DFDD6D66F61F116166F61F116164554446F6DFDD6D66F6DFDD6D66FA9
+:800280006DFDD6D6000000008AA8882F29F992922F21F112120000004F4CFCC4C46F6DFDD6D62F21F112128AA8882F21F11212004F4CFCC4C46F6DFDD6D62F21F112122F21F11212006F6DFDD6D61F1CFCC1C17F7DFDD7D7006F6DFDD6D66F6DFDD6D600000000CAACCC2F2CFCC2C2255222000000CFCCFCCCCCCFCCFCCCCC008F8CFCC8DC
+:80030000C8255222004F4CFCC4C44F4CFCC4C40000004F4CFCC4C44F4CFCC4C44F4CFCC4C400000000CFC4F44C4CCFC4F44C4C000000008F8CFCC8C8AFACFCCACA255222CFCCFCCCCCC55CCCC55CCC4AA444EFE4F44E4EE55EEEC55CCCC55CCCEFE4F44E4EEFE4F44E4EEFE4F44E4E00000000CFC8F88C8CCFC8F88C8C000000008F8CFCE1
+:80038000C8C8AFACFCCACA255222CFC8F88C8CC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCCECEEFECFCCECE00000000CFC8F88C8CCFC8F88C8C000000008F8CFCC8C8AFACFCCACA255222CFC8F88C8CC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCCECEEFECFCCECE003C
+:80040000000000CFC8F88C8CCFCBFBBCBC3AA3330000008F8CFCC8C8AFADFDDADA2F21F11212CFC8F88C8CCFC3F33C3CC55CCCCAACCCEFEDFDDEDEEFE1F11E1ECFC1F11C1CC55CCC4F46F664642F27F7727200EFEDFDDEDEEFEDFDDEDEEFEDFDDEDE000000008AA8889AA9991AA111000000CFCCFCCCCCEFEEFEEEEE2F22F222228AA888C8
+:800480003AA33300CFCCFCCCCCEFECFCCECE2552220000EFECFCCECEEFECFCCECEEFECFCCECE000000004AA4441F14F44141155111000000CFCCFCCCCCFFFFFFFFFF3F33F333334AA44415511100CFCCFCCCCCFFFFFFFFFF3F33F3333315511100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000008F84F448489F95F559591F11F111110056
+:800500000000CFCCFCCCCCFFFEFEEFEF3F32F223238F84F448489F91F119198558884F4CFCC4C4FFFEFEEFEFBFB2F22B2B955999855888FFFEFEEFEFFFFEFEEFEFFFFEFEEFEF00000000CFC4F44C4CFFF4F44F4F3553330000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4CF55FFFC55CCCCAACCCFFFFFFFFFFFFF3F33F3FF55FFFBD
+:80058000C55CCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004554444F42F224242AA2220000008F8CFCC8C8BFBFFFFBFB3F33F333334554444F42F224244554448F8CFCC8C8FFFFFFFFFF7F73F337374554444AA44435533300455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004AA4446AA6662AA222000000CFCCFCCCCCFFFFCD
+:80060000FFFFFF3F33F333334AA4442AA22200CFCCFCCCCCFFFFFFFFFF3F33F333332AA22200FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000CFC4F44C4CCFC6F66C6C2AA2220000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4CCFC2F22C2CC55CCCCAACCCFFFFFFFFFFFFF3F33F3FCFC2F22C2CC55CCCFFFFFFFFFFFFFFFFFFFF24
+:80068000FFFFFFFFFF000000004F48F884846F68F886862552220000008F8CFCC8C8BFBFFFFBFB3F33F333334F48F88484255222008F8CFCC8C8BFBFFFFBFB3F33F333330000BFBFFFFBFBBFBFFFFBFBBFBFFFFBFB000000008AA8882F28F88282255222000000CFCCFCCCCCDFDFFFFDFD1F13F331314F48F88484255222008F8CFCC8C8B7
+:800700009F9FFFF9F91F13F3313100009F9FFFF9F99F9FFFF9F99F9FFFF9F9000000004F48F884846F68F88686255222000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F884846556664554448F8CFCC8C8FFFFFFFFFF7F73F337374F4FFFF4F4BFB2F22B2B00455444455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F44F444F8
+:80078000447F74F44747355333000000CFC8F88C8CDFDBFBBDBD1F13F331314F44F444447F71F117174554448F88F88888DFDAFAADAD5F52F22525455444455444DFDAFAADADDFDAFAADADDFDAFAADAD000000004F44F444445F54F44545155111000000CFCCFCCCCCEFEFFFFEFE2F23F332324F44F444441F11F1111100CFCCFCCCCCCF7B
+:80080000CEFEECEC2AA2220000CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444444F47F774743AA333000000CFCCFCCCCCFFFCFCCFCF3553334F44F444441F17F771714AA444CFC8F88C8CCFCCFCCCCC4AA4444AA4444AA444CFCCFCCCCCCFCCFCCCCCCFCCFCCCCC000000004F44F444444F47F774743AA333000000CFCCFCCC3A
+:80088000CCDFDDFDDDDD1F11F111114F44F444441F17F771714AA444CFC8F88C8CCFCDFDDCDC5AA5555AA5554AA444CFCDFDDCDCCFCDFDDCDCCFCDFDDCDC000000000000000000000000000000000000BFB7F77B7BCFC1F11C1C000080010000000000000000000000000000000000000000000000000000D0510F4800000000000000004C
+:80090000000000000000400100000000000000280000000000004F72060000000000000000000000000000000000000000000000000000000000F04FFE8004001800000000000000000000000040010000000000000028000000000000AFC6060000000000000000000000000000000000000000000000000000000000F04FFE800200408B
+:800980000100800414800280041480020000800280040000214840010080041400108204000021BF26050000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F48180028000000002100000021001400100240010000008002F7
+:800A00000000882800008088020000EFE40F008084010000200100000000000000120000400100004001000040012800000000F092548084410128004840818102214860118002211A01148002211A041400B01281041480028004148828108204808802214800CF550648180028000000002100000021001400100240010000008002005B
+:800A800000882800008088020000EFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000014001002000000000000000000000000280000F0A1A3000080020000001002000010020000200120010000002002000088000000880000004FDE080000000000000000000000004C
+:800B0000008001200100000000000000000000000000F06D7A000000000000000000000000000000000000000000000000000020080000F0CEBE000000000000000000000000000000000000000000000000000000000000FFE40F000028000000000000001002000000000000000000000000000000000000E09D04000000000000100299
+:800B80000000000011002400000000000000000082000000000000F0ED6F000000000000000000000000000000000000000000000000000000220000F0CE41000000000000000000000000000000000000000022000000000000000000F0CEEB00000000000000000000000000000000800200002002000000000000000000EF8F050000DF
+:800C0000008004000000000000000010820210020040420100000000000000000000F01A9D00000000000000000000000000108202100200001400000000000000000000008FE50A00000020040000000000000000000000200240020028000000000000000000F07C980018000000000000001100000020080000000000000000800282DF
+:800C800000000000008200BF5F080000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F1200280000000020091200100300000025818101989082001828288800200200008200000000D02F05120022000000000000002400D3
+:800D000000004042812101000080012800000000008200000000F017E800000000000000922001001100000000008009290800228008002200000000000000F0AB8800000000000000400200000010010000001800800800260126010022000000000000F036E3008001002001400200000010010000000040020000200200000000000002
+:800D800028800200008F66020012000012000000000000000000000000000020021400000000000000000070CF0A0000000000240000210010010014000000301200200800289021002002000028800200004F32070000000000402201400214002100212009000000140080280200000022002200002100002FE50300A01400002200007A
+:800E0000000000002011029200800100143824800100800200140022280020020070A90F18000000001812000012000000001001001001001400008028020000000000008004F0C6A32001000000220024002011020000120014008041010013012021028228000000002200200248006F94070020010000121880010010011002000000F8
+:800E800000000028248008008002001902000040020000DEB100008001000018800112000080010000110020088200000000008022420100000080022822EF9902001200290100188001120000111814000000240018C032002400182800000000000022220000F0A35D001820019012000010820800004002000000002008142280022864
+:800F00008211222800200211000020222202F03EEE002001180010020000880000140000000000800200200882200A00200222000000002002EF7106000000008081818101001240818101240000881820C8112418800228180000000000220000002820F2ECA40018005022502200000000400100000014880000C021282250228082025C
+:800F80002082020000110022280000F0EAA90000000000000018200100000000400100188001002820888102002200000028000000F06CF800001200000000202801001011018001820000801982010000880080028002112002000040016F2401004800400200008022084001001002408108002042810228B022040028000000281100A7
+:8010000000130210025FD10D00A0112424242480012C01188A081840C11100000015210880A82388320088200B2800222A82C221000000281322A2221422BF31012081011218230121A011A0119A08184011011E11000014002120F18182169221282E2229B22282AA891C082A820200281411000080021C82F21D6B001812801102212091
+:801080000112001A011001131111422201130820018A81A1322921022602182A22A2220020220211262122A22222280022F0398700002048022400000082200111000000100100880000901280080022200200148200000000F0A139A0111A0112121E122B1124211A01121AA111881A0114141CF11112002301864181A811A0181F28F36E
+:8011000032321E1140B212A3111AA311008022828222B281B8810A2AA2223021222222F01FF9A0115A051A25180221A0111AA1113AA3198AA21100111AF111112120019814A011A0188EB33E322B112A22F252722B13BAAF932AA222282AA222A022288E811F18A822A0222A322124232212E2D60BA04100401242128201A03118881AA1C2
+:801180001114141F11F111112180011C48011A018AE138F112123A8342B22286A239BAA122A0222AA22200281111A0222220223222A0221E19001AA4115AA1112F21B1125122211AA1111AA1319AA98A1A011415F111111F11018001135111A011002CEB23B2328322B22286A2AC3AA9222A828222A2222A0210A1222022A222282B222C1B
+:80120000A222EF6C0F0018800100002001000000130100000000000022200200180000200200000000288002AFF1030000244002208121018009100140010010010020692290122002218AA2122002222002001400800200002F4C0B481B21B01162241B21272419B24291212F2499212B9413B84229F3429113F24291222D912AC4912E04
+:80128000421CF8214216E12264192F2264192CAC292CBC91C2421B292D821B294AB891F262811B282396212B8419F24281112F1428B24228B2422892822A84E822F4C95180B51186B41162241B212F2491212B1419F2429219A2B41B282B94322F1439212F14392129B922D412E922C5911F22AC812E4286F1225296C1C11E212DC21B299B
+:801300004819D622BD11A2841B292F1638812316B14298212F14AA282714222BA4222B842229B82294822E42D772008248000000000028200100000080010000000000800400000000000000000025014F5302008021110212001A2801000010010000000000A0122218002838284001262182080088000020820200AFAD0120088A02181C
+:8013800028001622828861211100A0812001820000522118190200A621810821198182082082820448A028A60100804281D2660E200C3A88210100A0298A214212010092C0122028018280110211192222E11288A1A416224291218082820220220828000024281422DF730C00002420220112218021010040010000008004182818000063
+:80140000200218801801822248800482190A208202004FBE0B00002A012420221102241224803211002021140111901180012228008810022C011C2128022200000080020000FF2101288021022382032488223216011418003813018200004200202269212A08281828802204802806480011282A8808200600CFB20D2220012821122113
+:80148000901220821112012814901120010014000028183229022816220212002008280010018200A02400704B070080228122022888238241210123011838008848140042130112200A888008002622C41182224A024200802282280200008D2D142818200218000010214131322E12821823212425843422289A02482601110086012C0D
+:8015000043A281124280242408003042222880024E22224A22086F910B180048A0482002781826220822001100882011328292800100281814284280C421100200202A028222480000009042BD96000018A082C012008800000020822202002044210212382018020000A08220020000008848000000F0BF4C141218800238C02280A28112
+:801580001C32121418388811298326248425328242A02114C031A0182388825522821120820400A8221002424228A042224A82089FD20F220012800412A04100881002211200B8008022428184820122002002181A62248280860800A048200A00100280A48410010019221382014A01222C0818220000881C0200100229821412220A80D8
+:801600002888A11A2084016016000013022200228006F07A4F2014419121100200809211181810823D22481868C01138A8208488010024381B2160212C4282212888722202002430422800238214022286F2FBDB0028224002138232113011003083002111800182888042218202111A28A142400188601423820810022302111042220276
+:80168000800220F49473202211216111480048800C48001022B912280221230422A0812028A28124004A488202112041222804200828004220048200281F6904180000180000808242022388489211802424828488B5222414129262424220225421008088261402486026000040820480A484DB444021010000184A8123028006182B126A
+:801700002002C011182442A0812931112001341A24A1818021A1141A2281A282191201A0281128224888200400FF5C01482001281322C141A08424304320280440822A0213080000481288001120820880820400C822482146014E824002280020F2991A001B2890211A489231281113881841011192221B1A8882881A2822082022836465
+:801780001513C212C882142C01C081821092424890222302904223843442483022481424EFBC0532A061180000001C15021B68482248A042250222299422582A88082022446111A048222AC142C022802288081442A024000024118A24B88204BF6E061A21FA1121281D212AF3223118141B84FA92222F1B4472D2A1312B442E121F1481A6
+:80180000B292F21151AA068216A2312E422E111D121BA12B482391628AF891522E2223AA1233A5422325B8A2E4147C42821832432C242292222D622A8286E4148AF8A768A0649A21A21286724322A1245AA5591C21039A446226BE3233A94B2B8B30821F15A1A2622811A85EA242467111E228B421B11123B2132831932AA1318A9B62A897
+:80188000281B2242241C14A14429A644884E41224AC2414AF674981417121D211817113A2111313111281DC2157141324119B8828888DA220A6AAC22882F2885AE4A2F26A41129A4632B5A186AA9856E41A88AC1121CC8E22B8C26E22668243342B12226C6822F1492A246422254222B8C82602A2F710CA012A012826E13601240210940B2
+:801900000124C0228228824A1221044A024A0228184229012242290118408224022E83482E82481C082C0888800242003F61061A22A221185E627E5323E11684A57613A8542B162F34BD82ABDC2B196E513F1BA1F62F2AADB39AF9B2A22B8AAE3229E421F823412E233F391CB192E9197831A1313F1AEB21F283E32B892B39200629B2811D
+:80198000EA2AAA8A141F18EA2CA88862AA88A2CAAAAC8229F2D561B031B371B631B231B7B1E323B362A7334AA4669E921F24B563F742D22F2CADDD2F29E117FDB3336E522BBA2F13FBC1B12EB22B2E2EA22F21F322223F32F632733F39EA39E829ADF81F1DF3B1B31F3FEF29FB93F33F1CA8AC9A6A222BA61F1CA8AA68283BC83B8C4A8293
+:801A000062222B8E2B262F2EBEA2AC862F22F29E5EE013B321F711213AE333F331213B311F16B641F561F11B5D5AF552733F3DBD93E92CBCC2F471733F1FADF72B793BEA1B8A6EF22BAA6EE22F22F432623F33F133233F3BFC82D12BC59AFFA1611F1AF6B3F1BEB21F3AF2B3A12F29FDC282EA22F883E333F662222F24B68218F322222715
+:801A800026EEA22F26B2E2BEA2BEE2AEA26AF6BCEE141F11B631B531F261311F11F261513B771F13B351F561E11F2DFD51733F35F7D3D33F2DED2EFC42C21F37FFF3F35E722B7FEEE11F1EEE26BEE2EE26F672722F27F773733F37F6F3E32F2DDD22BD92FFC1611F3EF6A3F32F2BFAF1333F1FFFF2722F25F6E2E22BEE3F36B6E2FEE2C225
+:801B00002B443B443BCC2F2EBE62E42EBE62B2C2BAE2BCE2EE26EE24F66911A0126012601248221A044800148A4422411281022880220800214A0290824229090029012F1288C412008A242248220848248A4482A42400F02EBB0012A02124122200822A01298194129228822C238811812B0A22C0121A22621100881B28188A622212293F
+:801B800028088A028A4201001422888022082A246438DF8F092AB411A2121B216E121B212B1619B242B191B242B981B24219F14292222F3429FA42B1A22DB11B421CEB22C4811F22E411E222E419E222EC19E222A5292F22B591C2421B292D121B294AB19132621B282396212F1698212B84112F1428B24228B24228B242AA42882E42BFD9
+:801C00001D092A94412AB511E226016E11282F1621D912B191B642A2212D832AC493AAC4B19AF442A133F242B12E124E913F22A8A517221AE222EC1CE23261182F2235D1241B682F32B591E224B191A2821B682726282E8319869A612F34282A24BA4222B242BAA294222E42BF7B0F2088040000000000000000000000000000002200489F
+:801C800000000000000000000010025FFB09601300243880C221B2002001001AA2A122828A84820222123812281A8AA2144A8801168101301224A0242240A348002200008A220426F115C20082148E1100301323018A71210246829121312480D4122102112902106118422158282829A8482DA2248A011722882831002200420026110205
+:801D00000014424FDE05200D8A012302372322AA814121C252C02260222222372848221A12228A21838196921302CA92828A34522129011C022223840226220A4222302100244200378A001942110112001C0188282180114121818984210A11280011860128585A0212B08182214822D122082601102104000021800AA0427FA6030018AC
+:801D800013210226A12180622212100148A8009200200822281100102208000028180011002612012004200882282004EFDE0900001220812484488114224111011B812860111422280020812481A81812290580F2229180A2821A0A158218032410010080048A06F0FB330000A012E0110280982100114081AA818018412102202292119D
+:801E00002001181223018092812812201A418238212124304100828028A24A48F0B3160080311100A0254822F04212204181041122181800A2000048602882884200243820A2281240410211000000200400F01D6F00121B34100114002C013012224001182E11280010029643021126028061182828200121004002822200220020022069
+:801E80000429F22CF78004A061A0126032190460126016122A81880290124228258228892402A03820C4414021022B1410220822241C42012082820260262200214D32143822108105000018004001000000100120012622046200141880882288292202C042482100250224000000EF6D498185A2211E214810613246018012021C212225
+:801F0000A812281002222488142925922123A62928188226611180D822213812206222F08322260300298202296222200428EFB503221214C0111A02001229118191413011001C218281041100100224802484042228182820A88200208404001002808402007FCD072800002111112542812188080014141100142824141800141C0800F6
+:801F80002C2822210A1219010028424001102202000022002FAE051110211181B112820448395222280090922602121002002222008084026021284061182823982220248226AA48294401AA8488248824C842703342011A022001182A848604211280214802002E11221601881002002220030000002840011420080086022828862208E7
+:8020000082485FFE05111110111181048012A1210000002A210300808128A11292222D81601800428002D012048A32228008222148008028024210F29FED0013A212003211210018280018311813C211190811381902101121918186011228122382C2112002100220081C082611022882280000CF2609180000468162212001882005520D
+:8020800026210142200160141222E0128C818162128A611218128012012834114A1A0121880022880048822B4888CFF14B010014280080542122800542240048C0510021981922A4280040A14842C8880018122E82C84A82148194414242C88004486022004AF2984300200100290412380080112243420226818801880021290128A01899
+:802100004002240088000000001100282948220222C021D0650D421848223A24042303001622A82420A4821828C22072420118149820228102143621A48411482048C18121800848D0210A88004021881482B8C7426112281AC3212683A71248E033C5131E32CA8885D122F521B33F22C1112A869D313C215A11882992121F11311133B8E2
+:8021800021A8991AB193A52588149AF121B21F1C3A2228111318A1448EE2822129A2E8806228EAAA8C1CA248D73F80F4311190117051B143E2359362282932821A22045A38121AB252223D3123B121022968322E4112E82A2885A2228EA22E22582811141226C2213F36B842A4A62AB8817842C1C2198828A2222B482EA12468CE432A983B
+:802200006D301140011B35241E4323E224314113A3822921315226214831211D9114262145A1481B311AE11A22EA18E3128A81E41224F4A28213A321A81421CE82A0221CA44C261131436E41A632428AA88680048827248F814F21046012482240021412A049A0412812B0110419041B4128488005D89041800918200218400200001440BD
+:80228000220800000000BFB50C1B151717111B231F21DC33D121B24223F463323F21F1A2322B532CB112C7123F39E932F312511F12F351D24E511E513F15F461E1CE533D133F15FC71D17E411ED119A5F516F1D3F3DEE23F13B321A298923F1C5E132F24B442F4C1C1A81F24B6627843F183222F26B422E82CBCA2B841CE824A8ADA22F407
+:8023000057E2001F1794111E519E323D1315C3322B763F22B212F1B2B22BBA242F21F183833F397B22B213A1BB1F135B131E514AF521A11F32FB53733F17F7B111AAB211EF12A55FEE423F3FFF62C23F17F711111BFB1B5F1F18F263C33F36B642A6EE8AFA41632BE41F3454116E4229E82CBEA2E81686B842A2A86E62AFCB041B771F1336
+:80238000F721211B111F277713F353614AE326F223323F217392B252C7122F25F5A3933F1BE932F352513AB331DB12E115F181511F18E832F871513F13F3119136E11FE91CA1F51E221F39EF2FFE13711B221F19F991913F1EFE82A33F34F663611F1CACAA1F2EFE43E137143F2CFCE2422BCE6E422BC64AA6CA2B426ACC423B4E146E6124
+:802400001F13D711F151111F27F553533F37E526F362723F33F312332F23BB52EE25F552523F3FFFB3B32F13F17371FAFF71F11B135AF181411F1CFC31231D312B671F1DED1BF9F191EAA3FFDEF23F3DFF72F23F13F511111BBE1F2FFCA1A32F3EFC63632B641F1EFAE1A11F36BE42FCC3C33F3CFC62622BEC6EE22BC66AA6CE6AA48AEE07
+:80248000E2CF480F2200C012E0128164221A2422091224134832112813A8241142132814A12439218429A4828029941240012E9148260226A148148214482088022882288200AF6D0214130112141224001A42012180013C211102381228821424001C92119A0212228229A12100348AC2811110E112082440032100004880F4CD17C041D2
+:802500001B21B01162141B21272419F242111B212F14B991B24239112B94322F1439312F1439212D911B431CE922C4812F2264112E5296F121D296D122A4292CBD91E222B591C2821B294E121B2923B481B24298212B8419F24283112B84222B84222F242892822A84E822B43808581B612A3411621B4127242823A4212B841B292F24B36C
+:8025800011A6843AF442A113B342B821D412B9339482581CFA22D21E812E5246B121295C324E212CB981F222531B492F22BD91A2141B29881B682B8419B22298412F14BA8192822A9482AA042A94822B42A82B4A5FF4072088040000000080020000000000002008000000800400000000000000000014F09F4D804121021A8494421238AD
+:802600002892001041B181042002282800241220881282B112A212002002D0122A410282212882482424200800282848CFEC054882208108101102203282160224001349110248221128800218132582082711883280212205264162124012011428006012144214F0B1122031C100584229849112229226224A4241924130811952222231
+:802680006232118A921228882833912129887212015A8222011B48181C1262388032A1002912820840826612F0334180042212880011220000121081081800000000001842181A8201880060221A0240820210824401006012140048A73C00004001349012130950228011C112221420048822000000A0425A822145220840818408212874
+:80270000000000880048208222F23EB100120058122248221021021C31832BB43011241B242712002488901230111A12A181828235A22426E122C1239082112B28882419281AD212189162228A46222814210C5BF30012001924611221B081116122404323253112E022048008002301A0212024EA286124601238311123388182822811F4
+:802780000029582142200882481422284F9A0D00001200482303003012981B2830211431130620328200C01140A11A5860112E42826022800429120229682A400122A82A44220422C8F087D6800280041120C12142128008481C81041430210021A0292022288401183428489041001C81043043862104882224200448484210B286084870
+:8028000011426022904100002420060028001200214A28290411400124141981081A2884840200822800200282800823088225F284AC000012000000881902211800180020020020212502302282001C01C0118008C0210022828004482828288008F0276F804401C02214130420842802215818482A1101122800882880272AC413281EEE
+:80288000822419C1C120C911421B2948001B841B284A82084890C228A22C26248448F242AA200220010012260118112988041100001C02004220051400008082011400006032000082008004802808F0D4C4902100001821421A220148002522112161122042C181108124422107262102111482460180880111308230222111190820087A
+:80290000A0488A829C82CFB60F4818381981428102102232231083082242208124211222024200200488122A912180A4122002800200000020840800009FC90610810228C02100002C0420542132111A4C022083242201241C0220A41210420114421800268202A211400229922228800280C4224F29021200000000B04201988200002133
+:80298000141CC981211200424A0814821414208882028210010028212100114288102294428012F2EA97A024280010012086820488C0412902A012624220280220223241222024E624A98420020080A242A028211C0648482282AA2404A2C882625D2A101111810225024A82B142811123B442812154125A02182242210080485122A082E8
+:802A00002218400211008820010080188102882100880021884F980F80210118120040826229112480018814C011121448420042121219840122008022214201111081089083884002881400002D66008211182062140042806811421C08CA91818811A0821800220010810188A04300200222001400422E82481042428222044041F2E591
+:802A8000630080041800000032C02180048084042121A0144A8808A04120C841A21148A042143212562104208428A42821C24200A21012023C061B63821180311121282682E226A78516022BC4423D912AE413A653681BCB1C112224A222E6A323221B223AA8422AE12488D2112692113A21815221282A08AE2213D221C4816E822B822E1A
+:802B0000C2A81F2CA8CE48AE812AF8FFBA14E019C2311AA12125E1148224C452237121E11CD9214DD3322546B2C1197191C21113A2422A248114F1425215611C1CA2819E622B63119021288AA222126E41241D222C3A422CF8428117242962284A22A862004E412D62BF1C09469111321C22C2321322A43123052F28177342B18121A32195
+:802B80001F1D0946E316019AAA1419A24C424815A1511AAC44CAC3811F18E1122C027A88D811E1148162128223DC112C2438828A2434822304248A4A22F815A7202402226012482248268244A34834482848288228A02480022880024A02802844210400004800A048A0482448A048248A04824282429FAA43B1417641B11181041E132B3A
+:802C000011A031212B5439918225B1527743B18268121E811571317341D111B852048A21C2822313A18A1B191AE93FFA22A11AF1412115F18141A21712111B2215D2317282E2220210F222A22B882A32A21BA28EC2A0882F22EA5B45F151511F14F521114826F213123B13481A65215AF481532EB23B513F2DDF33F193B119B581D9117100
+:802C80001191131BB14A858208242F3551131F19691892BE323BA61B331F14F221211F1FAF8A1F13B131B321F621221F3AFAA2A23F3AB622C2432D632F22F2A2A2AABEA2E816A2AA2B2AEAEA22E27145F151711F13F711112A42F2323323A4371AB342B642B553F1C2E12F18B8D2FD73233F1D681E1F136A121F13F1736113A176A0A2228F
+:802D000026F332433F13F5A1819E911AA15E1F1BBDA1F62161F0B1A1BA7B31F171211F16F221223DA32F2EFA63A33F343A412F24F462E22BAE6EA22BEE6AAEEA2BE2AAEE22FE95BE141F15F721611F12A2272E223F33F363617AA7772F27B752F5D3732F3DFFD1D11F1FFD63733F1FBFF1F5F1B11F12F371711BF61F13AB662AA262222E9C
+:802D8000622F37B763F6B1B18AAC7CFE523F2FBFE3F621611D211F1DAABB1F13F361611F16F621223F3AFAE2E23F3EFEC2E21F34F442C32F2AFAE2E2EEE22BAEEAAAEEEAAEEEEEE26F78091C011440020020010082200113011230110042201401318008002A08260198C01160320040010000000000ABE7200800001C010027241AC281CF
+:802E0000112F2418D11231114A08148214000060114081A429241308110000222814F022824013C182A22422882288802AF841A180B411021B2146B111724291212F2491212F24B981F64293112F14A9422F3429FA4293A22D912AE414F921421CE82264112E4296E12264192CA4292CBC91C2431B29241B29421B2927241B2823B481B218
+:802E80004298212F2418B14228FA4282A22F24289A82AA84E82A74810A2AB411A45213A1161223B211742292412F24B981D622A36927248AC4331B484EB3824EB129F442B11D121CCBC21EA12CE41DC2429E213CE51DE2222CCD531B692CB49162161339428A66148AF242811B684A92612B84AAB442A84A4AA84A2B8423AA84272A7F7EDB
+:802F000002000000000000A02800000000001800000000000048200200000080020000004001AD5E202802121081810611211218205423001200A0142488001860212002181308A228A218241224240024483082224222000000CFD20C1886410114182C2441230128308182402382248182060030412D21124880818184A2841260111314
+:802F80002858213041288800C0422400821182488E2142BFB8086016200113A1411A0615021822C0821431224A0124481A64218882112E11124E121021813481422A081AEE18C182146014204822064A4822242248C18240018F3F091840011440023412808231814240022081220200201402002A01182888122211002C012582020050DB
+:803000002222000080848AF485860028200100400121001002188220028200800400000000481100104102250224822501240000482800F01DC72042410115224221062214322C0117291922A843118E4148208C02224001260122202201284012312286A142110022800828C022480000428FDD032228204182024A0222313212D032C825
+:8030800021183A48A168008822200614C021200220818402503211822814219022310021C0224248280048CFEA0A1041011410011100002112808804114888420000000000220011002052212C04008220082800000000ABBF204521021248003022C021212A081C384222122CC412208414A2480028800216C24100000086218822481289
+:80310000811202002800800810E29F0600420018111814121420210200520000100296810100004814464111B222C41100000042002C28822898424002482229FA786800001400482004120011112008002AA8841100002810820100002028020021250124001124484888100200F04816204501005842181C8432111412119081298886B7
+:8031800021A41A42140014182222211A022C8564141120B811021482264241823422211728244AA88223480223882482F89CD100201281011440220128218214202401102228C44280040000000024302200822480081400002084040000224F7D0210012004407142018081080020818104184800003C8184835421822084050020041CB7
+:8032000022042004C60342200C238408003F950E62001822002321A14112231432122B4333044220219122B8800A1724400218182C911180B22281A11818298202002228002488222C02A2230480F82A110000141400210048212C01000020048004A068216840C1410034000000122800882823189182E0220448100200B0D904800120EC
+:80328000810118144A81A88428388842298F8188C3814A488202A085601123242221A241B2282021A2418682250823124291820021002288242880FAA3330000144886212404100280845822C8241A0C881C24314146014001321442108228010042B221821924F482414E2148421B48824888C84A028240F1AC62001120014800000098CB
+:8033000088A08118C8118824908200194622014200484280284801822028240840022400200224002C083F6E031A84A121001832142A0420332280040080926222190222D0128194520028222218002288809441152202008214002800800868288F2905188001130118100200800418000010011100200800260220C2812820820A204460
+:80338000225221002120022002228A02F0138700C0410048202441A141824230120080025A225822284A11818A424181014E11228084A1421814202122C2C12018810224880000D022023FA40F521321214131111E221CD4111161244AF962222B448E124AA44958D681B482E31D6826E01CB24184B543D122B51223C662682F1482E11BF9
+:803400000D281AE812E824B862F2618119A2C84AFA814119A8C81D82C82BA4AA24E42CA4242B882E812B8A5FC407224001524830435A82B492242949A2C525B2420829A9265A9C219E51142AC4222F24A2E211141C459192118AA8242B188081A41A488A7242127122F1428225724211A22CE024682229120248F0ED8880C511381D111B38
+:80348000524AA1141E1229A415182D62981A99221B912AA185281A7921B22284BA23062E8117111663151B4613A11376A2532B27A0231B13AAE22DA1611B1948AAF4622215A222C651214227222228A82AA8882AC222286F7B0A288042810268142880028A0440210248002028040010011142008811108118410200248A448344A248A058
+:8035000048A0482448A048B0E608782AA3333AA7351F13A3721F33F311111F33B372032F22E829B9D2FBA1A21BBAAE823F19EE2BFBB2922AF631712B222E21CA36123EE21E113AA2511B132B133E711F1CB441A7B91F13F391511F29D722F3C3811F3CF8A2A23573832186784161282724216A22A8262E624AA6662BE47FA9094AA376186B
+:803580001AA5641F1287D133F163611F36F66222CE922B118AACCA3F21B583ED2BDD13E32BBAA2EE1AEE33FB31312E214EF227257E732F15F172311F12E232F122422AF6F1511BF71F1CAE231F18D421F6D3A32BCBAE822F2E5E333D223F1AFA23A2212D222F2A92222AE222B222B2A2BEC2A42228AF5F063AC571181A21F741314AF5514A
+:80360000131F17F711132B553AF742E25E122B9D8E83CEC1EE823F1CEE2FBB72B322F7B1D14AE712A2E22B411D421CB471B631E717B572E327F792D32F34F592D22B33BE11DE712F2AFBC3A11F3EFAE2E23F34FCC1E14E232F1CFE41832F2CFC42822BCE6AAAECEE822BAE29ACAAA86F5B0C6AC5712AE31521F741316A77427343F17123F3
+:803680002724EEB22F2DED2CBDC2FCD2D32F1FEF2FF9C3F1EEE22BEEAEF17EF11F16E716E623F612431F31F512512F17F761616E422F22E423F692D32F37FFA2E23F12E21CE814FFF3B32BFD1F3EFA63233F1EF8C1E23F14F6C3E23F1CFCE3C3EEE22BEE6AEE2CBE62BC62AAC8EA8EEAD20300001C010080041224001A04120028138112C0
+:80370000A12480921128190100002A01002681A4124814482601144001288022880200BFDC0B48110014481001008A048028C8818A04224A28080040812404004230814840012C188128C88240234802002140020040F13A57A0421B21221B2166B111726292212F16B181F262921B282B94112F2429F242B1222F143B212D91AAC491AE78
+:80378000421CE82264113F2264193F2264192CA4292DC21B292CBC9142B291E224B89132421B28272419F2428219F24283112B84222F2428F24282222B842AA4842E427F1803581984256114112D121A744223E934388129BB11F442A2F04293C0923A84B8A2F44211AE121CE922EC11F82242922F22A42C2E13F022D11391C21B682F229A
+:803800001DE124B99162241B286632818096A21B6821AA5422AA042A9482238852225F2D05004882000000008002004001002180010000000000800400000000800200000000F0C4AB00001212142A0140C152140024800824480000400200000021000080611288240048002008243042200220F2E82E2004142848322531121227242851
+:80388000241482882C3311821345B3413851124A788322542190231C14A384298BC4513B84218A9181460224C02286110217241344221422C4820022A6012F7C0D42428082B42121832131427225210282297392011A7443229C41122F217881225C211063143113DC220956611423048812228280D2212804262184682400C86022202898
+:8039000072EE0900141218503200112150128200204801141280042400280080820429089811461241022502004612410224482502208202EFD209488001242830111428348A0210A2418819048A041328048004400100A0D28008215032002082048A2484C482820020088002AFBB080022141C220142169281424210438338322C48621C
+:80398000124A21220242142922914223022842E0289411903125218AE412C842821411103382214880A4C28022888CB8210542A012111522021B4116C281482B841001D83246011C84A482420011C012420028424286B281419221E0182284088A121181082C2C0800A28280A842824F9F0D00002818001128112210521221292818B222FF
+:803A0000284121024246220215220200B2480012350221198214820446324121244A084848800282F0EFB83011800100401281818302221498B0420130112005209D5210A114002446C1114A012188400120248246038800820010820CF055E814102124384114111400113012621A048220082140314248922222488085A11814C02290C0
+:803A800041229052212C022100883C249222480000201432BD002211960100284A02400100244240018800001001000022000012160180028242150200400200800820E45E47911126611119211401341C0619430248582C89282108330913852424946128145200AA81442103318E31D03224823242282E4135022C082888002482208413
+:803B0000E49407820040011428200119820114602448140000002412200452181022C14280012001C082480088194402230400A048002E26000000240014421440820C10020018218068244280819251218602421C2408009280042C04209882C848102208400280F88FBB60132003364261112C211212822115E13E2181E111248284083F
+:803B80002A0121C0322C428222C9111229238812011129B242A121868282082890212128002230A24A28067F74071B282218220058141126A1C312602140C1A113A2842820828881A8212581346121A084C22721181931221112822602625022800880088290C22084A282426F220160111413015A02282C8148420342908246C2122001D3
+:803C0000880018140018401162128228602124A22C212411024A8A18C34200423022A086200822AF95081200800221290218C0210023034082041280212804340010220126E22421C211C01200002220C4628242A602008200001CF861F20000111301002142182442881100C826812682A1824002290C80840D8814800840312180024862
+:803C80000020040082824A12222204F0457F2014212282140313241201002120148202108202242A810A8A11E2110226420188002800001002211081984182230200210046F2C869008A011880A324002E92A8804121B84198D12089A1248800869141A042480048388226711201A0284813212404628248400142268202280080F2A3DA97
+:803D000020084840210480042C04808304240040215512282A218109129041294291418094226840814282024012418142210224308288222308FFF60CE01891212E11121B422361161AE21A34122D125AA4C423E319E416E52126AA35148A661324297C6291126AB44255332F24E81327A2D1132E89A12227181F25931280B842E2286897
+:803D8000242AA2C44621A48221884AA88C10621A4AF67D669051822A91216E321E111C95222229A2141C12F282131F1415928237124A0F2B2B2B12A8828E239AC16329026A86E424A86913E621E9227E2113E122223271722326A2228AB8C114D123B8A128A4AA2F22A2222B222B2A8AAE248E82AFD10E3E2113232151112F242276117288
+:803E000043F35192AEE313C11213E128FA418217294A59122AA4141AA8182A29D62136119E121F23A2111F1931822D922F38D212D613B112021B912F18C8622CC7622CB44214D2327882A1481CD4224622F8824224C8628822FFF204421400481440A241246032402289020000208122082110023908219082422901250100240040013488
+:803E8000000040020070BE4F71D1F1111117111F11F731E23F317B337131F313432F31F9F3F33F37F733132592228EC11F14A8BBFEA12E223F17A6E21F18B812FA6161EE733F33C1922F25F572232F27F713722F2DFCC2633F33F311323F32B212B381ED2CF6637329A3224E622BE62F24F863E22C582323E42452222F22BA22A8662AA82E
+:803F00006EEAB462F64943141F12F2617115F121711F32D233FB63411B4717312F38F9F3D33F37F553312F24B8C2FF81C13F1CBC31F7F1B14E223F35B7A2FE9181B81F16FE61A13F1341D222F132223F3FFFC2632F2FBCC2FCF1931F39F163432F21F381E2CEC33F37314262242F26F442C22F36FE22E32DC32F1CEA2EBA82D822B2C2A41E
+:803F8000E44EC22B64CAE424F6AE74141F15F4115117111F11F1D1612F17F351611F33F353533F3FFBF3F32D321F15F7D2423B4D1F1CFCD181FAEB1FEE22F673712BFA1F18E922FBE1611F36FE33332CF1525227312F26FE42F12F2DFFD2F23F33FF51E32F23F712323F3BF8D2F23F37B742A6624E622BE66EA21F26E62C76C3B28284E274
+:804000002AF822A22BC6EAB6E2BCE2AE8A6ABA974CF1C1611D71F061111F36F662711F34F632323F35F5D3F31F3FBF12F351512F21B8F2FDE1E11F1FBAF3FBD1B15E323F17B7A2FFB1912CFAE1E31F36F67363222F24F543433F1FFFC2622F2FFF92823F3FFDD1533F13F511331F3FEA1DFD73112B442E4246F2E2422F2EFE63E33F1CFE76
+:8040800041811F1EEC26F2A2822DA22BCC4AAEC42BE48AE82CFAC7A10060126022208244032448A0413081B0818482049200000090124A020000501210022C01200882148A44A1482008822008F0776B001100142834123091904118F0428190921129094A2302244AD82244A1528044B1222D5D22131922611213094825822404621002AA
+:8041000021C02220042182883CF4517180B511C2111B214AB111F242131B212F2491212F2499212F3439912B94222F1429F24291A22D913AC491AE421CE82264113F2264193F2264192DC29AF222421B292F22BC91D222B1917262B1917262B281B26298212B8419F24283112F1428B24228F242A22229AA42A82E42CE2E8081C4511982C6
+:8041800081F6421319C212484E93284EB313A8A4F04291822F3421CA112B4229E92805C81E812B42922B42922DC19AF2224113BD22B88194429A326213796212E12618E12498214EA219E22428A284F042A2801A92A28E425F46072088040000000080020000000000008008000000800400000000C0280000004008F0FF18A0121D2218C2
+:8042000040011C0126A618272120041421588A12828302846240A1211CD222820227449082328A241202348E12481A08910042C0822842844848208122F4D48D60148A814881643110F81241841C860146180690115211532824111102214818301120296518221A48B51188E412641200228A64221592111C042002200A86015776A034BC
+:80428000C22100143341986229B912842166244502423E8180F12483428CA125603818681622522113C482422E91A852411C21643368926082482246016822102824C4A21282F0CB6A40B111A21811462101D01441683200841480012B141302001502805221282011248109488A521282348A44011081082532113C08422200002848AF8F
+:80430000FD0400250114003022402181011051128002850518000018822041325800880000108224224102889200002C220292287047032384824962238112122CB1281102218C48161864881D44524A384142C044244B12108C3122494BB2442181D312BA11A2286B58181F43441854186022304221AE184130442C9428428C84C24524A1
+:80438000001901331322218192224082318824151831882E41481DC4421880444284D148682180B2129442A0213119022745902242494201288825028308A04223148888027F8A0742222308400824181618830140441204411881144210043800A0124C1998141282A8122A282861558490185022A0C1801304412C8222C548288E4914AF
+:804400001F4413D2817124582481804518144108001B48C6881244180212A141C6D98124023035A07846052E130081A42C422C048542982C481088E18421E4812871162805482F960F0046029041240027122AA114121C61822244D02281B188C418682984227B3224211418124854181481411E411823D594098C0128284188442A682243
+:8044800044160400C9684229F129C70000804442081218001018014001442250481008008100422002008800002D2224000083080000228002F0DC271412211245C8443C04218C91133881181C11B88154843CC21484C81881902C2E4827573881815921C4D442111341B4113818A5E2C2582A2C02A1282280688826F2144843846823A074
+:804500008128421F280D4F12048583424218A841C024141A048414224A082443912A844E348C04118120448242887224082602004A3111411E4880124AA884450812209118D048F1244844F07E47E0110228512CC2418C524289D214B413123A1212248C01CE1822C122722C682200608124410047288140021E282842424800180049849B
+:804580000148A085C48A81B212482CFCFDA714241481404138120000521128945082104811488942A91280C581463889100882929E2189318150810025D8810649C2C811AC1291A42C022303618044E8830636912C268222923426843236281382124825116411A6A438A21E2418166448288444482F18041684B222314420240800AE14D2
+:80460000212602260222211200A582028481288412BB730016021281406194204448012022025081D0814814011958214E88599218430E122088A2291C22C8111038181412893118548341911816A8164143A482324D4812222F170D8662121C21D21A011216126123602411C011178118468881026820542283250129012E487022EC14AB
+:804680002204272122A3C12C214A028C02AC064784A42AC484844C312842414CB9245518AFC50B43041094448A9448905825A14185018489A442C906441840786208460829280222924160812284288122421644C71A4091128A8401803484872818188248828AF2A95A401854848450840000800140045041102114017912840829248AB6
+:8047000005811C0841148254C01110C8443442C014144885312221482430420048DFEC0C20911250421911D658110100840041825012C0D3D018011C08544115941893925412C0191001114933211A326118230617223041128081024A92588C22026FFD4D5184904437811228A0249014C02418D942246412224CD8480941274489B84494
+:8047800041850828001312E84281C848C044C4105241200415C2148829028446044A180410021F2846C1428E2315D2B8F246131D4863E584E1D4F144244A613410F44C13F06C3186E118F9B49547118F51E5B7F688A9FC7684F81641628CB795F3144897C1AFC2F394188DA4863191DF487229F879763F61F16421111B24218D2D3BC5934F
+:80480000542119B14CB61EBC4CA8524B8E2DA44B846EB12C711C0A36F11B148FC2911213734CF5281E81A3623127B289115B1813F368281A785CF8112895D8A137255F48712136A787114E1E8D662F17F86A8C86C1129AB862BC21E525F8221B2E811414C11D1A2F74F138539B152F23C1131E198715A7132D94CC7312D6CA92321AF11815
+:8048800044C9E482FA9E36D04533246B2157438D2C3E3219F235671B213B521B211F83E69171114CFC145715E8427E2E84B2E8E8841298464AD821045D919748488B324B62419D24921B72A8ACE14153842AFE18448F8256822E6242AE286DC68C6584A66A26AAB754F81842CF86F4A23816BCC8B4C44C2104008A0448148C448104004802
+:8049000080040000200442318188100188D01408881004141004148C04828004922048240882F08551141F1BE683F23C268F42A6631F5AF2337B3E344F66F23F3C3E323A13F81C14CFC135123F19FC28AAFFDAFB2DAD5F7FFF41415FD1F142811F3A78C3D4CCF51CD91F18B52BA39A9B447E58AF94A44F5E511FB1D133D283F76979AF850B
+:80498000F17A6B3FB5F5713112CF327611F35B473F35D41B7424F2C242ED2A2B674E42AFC8B44CA66225FAA167141F13F27272EFE2B232F7B1249F92F333371F53F33527BFA3F33E768B339F52F31C148F8153DFBF99F8A9ABFF5AEB1BFAFDA53F17743DFD99BFBFBADA8ED944F515511F13BB5FBDE4FD7878EAFD4AF18F86EE25FFD3F311
+:804A0000BF32FA1B599FB7774AFA7A683F15F179791AF12A333F29F16F373F34D41B722CE867F594127E787E688FA3578EFE687E3ADF4543F145411D4147625F71F14B6B9774BF35F55E1EEFC4F418581F77F55353B9525D5FF57443FBFFF59F3DF983959F98F8FDDDFFD6F6357D1F1CFDA9C94EC5DFD1F16D2B7FFBF5627D1FDAF94C4F91
+:804A8000EFAFF58A2C5FDCB671F7A1719FE9F31F3D5F76F75B5BBF67F677561F16F22141BFE6F65B8BBFBCFE5B59BF95F574B26F2DFB4A8A4FCFFF648E6BDBABDDCFCBFFA83ACF7D42F1C1614B51CFE1F15F1D9FB4F44CC6FF75F75F5FEFF7F55F4F3F75F55313FF81535D8FF7F44F4FFFDDFED9DB7F18FB9D8D5F5DFC7C695FD5F4C9FFC4
+:804B0000BFFEFE5F4BFFD1F56D6BFFFBF9CEDD5F5EFD787AAFAEDDCFFBC5ED1F39F9A3F3FFF3FB5F1DDFB6F76B4BFFF7F657571F17F71151BFA7F7FBDBFFBCBF4BF57B5B6F2FFDFE9EEFE8F8F6FE6FEFFF9EDCED9CCFCFFFE8B8AF5101411042581410042041618114403311449285243848D048028504421885044241420022800141847D
+:804B8000241E48200184248C44224162814412890244F09CFC80118141941A15181E9114840081128504895281005419442448415848214E25988504812A2C8418D118084E11200485830412271413110A8D248C6424840018B43D9BC0431F4152281F4132481F41324A1D24AF14D1C1F24A9119B24A19B54A3924AF1439242F147934D83C
+:804C000012F9B4481CF9244A1CFA244A87117FA264192ECA9E252E5A9E244DDA1F49C2C21F49F22C821F4932481F49B24EF98124AB141D24AB941D28AB9451AB9443B34A39242B9447822B944F82A4944FA274760626F311448F22741134281D44AF22C1442E134CF428971D448BB459929A4B4AAD1149F442B147812DA16F8BE414D886C2
+:804C8000E114FB268A1AB82564193DCA4CE2924DD4B2EDC8C2D11F41F62AC21749872686B4687981B46A41F422941B48AF449325A9B9A4344A43B842638A2F447186B842F3A418CF810C20880420081200400428000000000018000000400100800400000040042800000000008F530F20822211241228521849836112180011811416F86B
+:804D00002216904183110184808141882892A28E284C2221421181C6121064D1282F11D2186114208861416024810000A34211A418163281214607250A3480115852812DA6184901A0818D14424AD22214B4420129123418811636142B1C4E261A08263484686022288824228227244448212C826162446816014FB40DA03C2CF281126067
+:804D800024818722914D33411C92186581F22286701461A12A71926211832194428F483112182351481A782962688E28AB921E442345C1244232C02613A1827362121348B284622143C122482542828221D1180C418001411D242400802101101891180041D0842434211022042810081A92144624A22810B124881402C3022C618146822D
+:804E0000044800184782444840E2370F1001841828241E484184881220C814A0B449941800160860144004D0220118122A8932245012111468264118A641A02924846C01884904822002481F630E14A0212840A921143092482728D04A918113448821B888B584E118B44862144528324B15384CC96A86228E4845028A65111226E84174BA
+:804E800016AB412B488C066848828622EC877828D43888F22242A01482F0E96410112101128D212A3143442981989290848E14138432441281411C6586111128451941B28481A221424B2823226A3119D18112915A1B212B84498284A285248D82CE148938ACFC4882081820F4B29B0080628200608130884810D28241018B851289A858EA
+:804F00001AC88880344C304281C36482A3048B8118E04401005664724285324818422288002B4320248216228608BFF2072C82018302142414227012081285B11A240442128125CA1448008682110483440884801182E181144A0C233828C012262C024826A4145A486282C13A0C6870F90F93014A2221143A18C11D1884418C0143021390
+:804F8000E28489112102105422888719241AE48A041183D3244489F42844888A941180022522051544AA851E21122342480C001A4214F284DD144241151C110828004126C14180184402302830A484E094828282144804224200004128414A11EC8104001A94119082812420242112828861443F740A3C0485F52811872491AC41688345C5
+:805000004A410955E24124628530198144CC2164A6A8842447844B2846489128450846A2428222A7114D4826E2886422189041701282618127229668442D1881D2A8122CF4FEDBA01A16240200221544018B121A846188811994821A842292AA401401172252188304898225548212411694984418C42C412824B12AF111284AB88144A477
+:8050800041428428439222124E2441AFDC0E491202121A52814880641124141C018921B11CC48210A812A094288888128B14126042832634415644214541942C478410B4123228188123628828430400493154490822EFC8031064214511892451141248002095812190582819144218C4448C05628A2248618824A824850280A28120C1A4
+:8051000028223CA418A88210E214312222E7262426A88220C2827FDD088E414816081112830140E8C4A2418998911126840282E0222883120846084048C8183210CC42481018684166682148C4C04860812048B8420B8301004311F438D8001C01004C0610081281480082458124C5418449440884C08A40613C40C4140019021B41239274
+:8051800041B0429299281728202E0C3110388843042D446882843F3B0D4C62114C9228A5044CA2241A8292412849011810237222A892298884014126210611438101422C0848444C022810410127142810C188C014A01224522CA22483026F45081200112C422804424A01A0841324922A8889210813819241108111814112382421862876
+:805200000200C0228A647148204818D6C1412495488A3442422924081082F8796410322421410011C71191118486042C021824112C4428140117C8684890284A8A84C44860814441002110120C2F94115481002118293284802182C1948824174C6024C2459218460453A2411D22A02118818C280C16423111204449E81408258101129277
+:805280001954424C8141218123C189860111AB580080924146018C1118142404121441BF53436291249C4282B8350821104861C48012988C8906A400169422284C0B88488C66628041C94428C4118D44432501124C4224E418646583C132888849810147182908678181DF894AF353458E2667C18FD192825EA1548F5167224AF3186B6855
+:805300001A28F482181E9C1FA6FFE2125EC2BBD6AE111AE48615F444452E815E618CF1F15289B444EE8232DC8D254F84F144641923F11C124698181764EF54F586122D8523D528B593C24A2F11FA644C43E966E824545843C9C49641F43C9790244B4D8F1213F7651C63B23413F448211CA41485E98CE581F15181AB2A437119B1A843A8A8
+:80538000A13F56E319D259AC281B41268A92A8474CAF31B11CA4C247816C16A2414FE2D242F434457116A92B8F477628F2A9E11F84D23425F14852AB816E7C386FC1F174D22F6217F4283D89F29FCAE022D11341C2128D219D5C1FA434411F8175197821A495C5F181C1872241A5C5482549F34248C55848EE288F82384A188BC7941FB33C
+:8054000069C22F44D1C2E12C15D31141D419F1A1A81BB87E4EAB721D8A15F9D14845A88B8784BB9C13E828D32AF81C48B082A284FA93844FA8B84906200222482170220123022302218A44022811891201118117284A5221801818314800144214C0818C54144800418C440314480020480300F0DE8E246B411E12E7811AF448427F21374A
+:805480001625725A522183513BB5FF1B119FB5FF6DFB87A6AFACF852823FA9B982F83424CFC2D4AAD4EAF8894A25B252C88237C23E3C2FC7E742E277E243E313F364241E372F49E435F416448FB7F6CBEB6FC1F14185CF247A8AFAD255E034F37C766F25FBA6A26F2FDE66B6269A94CB93AFA2F81E2D346F41F6663EED2EFFC3F26C64DF66
+:8055000042F345246F66F25A629F23F75D6CBFB2F2BBFBBD519FBCFE6DFF8FABFEBBBA2FA7F8622A2F2AFC2764CF46F67556EF6CBC28FB28588FA1B492F5E464CFC2F2396D4F42F6B4EFEFE5B176F714544F6373A6F474DC4FC6F47C7EBF37F31A389F94F2E86EAFA3F17A78A7282F2DFDF6F66F25FF3E76EFA7F6CE2E6F2ADA46F3BCB4C9
+:805580003E96FF4941F247263F23F71E2CBB33AF84F57131CFE5F66878AF84F363218FE5F2E8E1AF94F6D91BBF15FD2DBF3FB6F3EBAB3F3FFCA9EB3F1EF867619FD2F2E97BDFD2FA2BE81F13F458481F357C2BFD35354FD7E54BE966F2277D3F12F735659F71F39787BF35F65F27EFF7F6EEBF7F56F52195AFF4FB4B598F95D33BF943D3B7
+:80560000EF25F3DEEAEFA2F65C5EEFE49EA265B434D164F18BB9347F75F72F76ED2EFF43F36E7EFFD6F745674F43F35A39BF97F3592F8F1EFFDAF997ACBFBEFC2FBFBFBFFFF9BABFBFF8EAABBF9EB867F621255F6EF7EDEDBF97F63153AFA3F493D1EEE5DFD6F62C6D4FCFFFF1FE7FF4B167F715159F63F3AF859FE7FF6F6FFFF7F7ECFF88
+:80568000EFCEFF68FEAFBEFF2B199F95F3DB533F2DFD7676EFEDFFBEFECFEDFD4DFE6F43FB96F44BBB4F62FBE422400100454148C14880041A44A148141781648E480083044624B8480290118029140222A0128001886022009200A0496088281E482482008182CF8C0782501820821812911215180A2958812931858902888E489880C3F8
+:805700004A8124811F22044D481A62824AE2A269412A24512C10C4488324794A038F340198842582C4142AF4422247824A21C184F0C124C0421F41D228F1112483F49124AB141D24AF14F11124AB9419B24A3985AB9443F24A9143F34A9147822D914F8AD418F9A44A4E814FA264114FA27498E1A27CD8C5CA9E242D4A1F4DC2421F49728F
+:8057800028F29124CB941FC9B64AF18164AB141D24AF26D981B64A19B54AB924B44A39A42F24792498924F8284FB244A4F490E2D5A1B41AD5211A9F11164AB14F04A111741AF4418F142B45788ADB24B428F143994AF24388429F9A648A9E12AA5944D8A1AF8244A87152EC287454D819E242D4BDE2C45EA49F628424CF224928E48C9F106
+:805800008164EB1619F42296CCB6489B24A9B924B44A39A42F64712488F9264829DBA4F58678400848001004004004280000000000181008000014000000000000008002000000C021F09594104641028D11118122814C922880419CCA35B41842B81102885811CE2410C1241A324845C224E0222924385422818E1483C222228A74240800
+:80588000A41880218464C52AA4846870680484DFA90762AAD182D841812421B1183C141924998186088014A142489C8424220381421884824E28814848B064018843219241419994242B1477A858221882212E8C3014184490113691C4190D3071865852871512608916143434A092C1254AA512842E1183C482621621088A21E38122F81B
+:805900004824C312E1218494D852E2844C986949B228B444E8E512BC1C34121216A224E249B544A3854224CB6136F194487F7F026B4210220111898116986189388181A0844885A14242114212284B4281194404834402488A024C120449A1210025811232812128200845180830244001F0AD530040112102008022820400004128122022
+:8059800012E882141801481248874400484081D2146141411A248404482B82122D11840044000000F032E78085911A8582351A1A129111894181410246422114E2A944B1E8C1116A11A548AB422F8481C148AD36288F41A2434B12D04202A8841B5221112781422113B44202B011C4284A2221E861C244326842FDAF20049311A924898136
+:805A0000410189034224C042144612E4814E81CA11837424A84846D1828511C86A668C82E541445241281116EC449252118C211492C12B253181118162808812A61242F02288806121408211820216011C2201000000293158222AC141A48302482C6541701488820222C0B4C01160244220942280014A2112240116840428487FFE0B2A04
+:805A800004190421144026115482222417222481842C035812A0124A321260A14A0880251122841168412E481449E4120100CD824C2182042684013018C8628222218F86074581916813E2413222487200118425343841C8104212884248081A4288D448088F24032849D1180189064823812184B84811A121C49180321282C668268226BC
+:805B0000220144A11F970B122342041018488802280010283116006C021214848D424200A3022608C0244882C014498212544829222424C612B042412A0400004220F458A9E052B122D18462122951188CC43412412D28A4D08241B812CC1C2C02AD4222849466784862842C3144218D2228284C913448684CE12261122E541744444A237C
+:805B8000F4C8224E188C0142AC2128082788222B214822818F7B0E484001472228C048230214281051428425220143832181438202834498285883C512C0481288106C41A0218D8284141624922127241225A44183A442188A24244884F4189E20824228041002005021418041284269819122801208124AA13C29F146212B422002115057
+:805C00008231288426045B21485684111102132516820146024200FF1E4943011281281AC2121C01273822102801671281444C82018501422364248C024460814C62842C644216C811811211214E224652388200888961E83018C183148228121CE215041042120880622483210528184E12811421202221042A210214C08840184438186D
+:805C8000444A61448011C434A4441844845304C01D2800301244100446F4BE95A02112001248814124493238481160421A2401F474141C8504301840041948A124253418C089441512A884128180038160A1C21532848A263884009012E0790A2308A3A2142C6282114D28104C2A430200321800801471190429083185C44469148414513D
+:805D0000284018245338400920028C86044448C444283E4488422CE444F26374401151343420381212282814241058A224442081741A0184428D11241C08608189810440C4181CD42234444006C416422402C14028422204244C269124F0C3D340A621182230146450863012854108302CF042252100221224680032223021C0232226013F
+:805D8000800200A6821221041814284A688118122410883292F096BC8005402291412811281890481901124815A24190484281811982122911711289014042243424251448C1441D38548551481185711811022184660428904441002F474241082D411018188C94148D416041906A221844502144811221D048B14282488482021E8A54F4
+:805E00008C3E121D482AB1340C22800162244064111F48064329F882224B1C80819122F0FDE2003399222D2A2A432291142E2CCF295188BF13D11281C43A33E481324137C2959A1113B628D42822B678A114465488D7615F8162448F44D641D4567211F55C329F91BB5CE2F862C287481FD1F3184D4F488454989B1CA7C1178C4BB84F63A7
+:805E80007434DC48E664C4942E344D4244DF1A44C21338B48B44219F82D7E1734196183FD4A6114E4887C15638348D534CF1144CCF31C241AD4889C4314B45BC7682D112F2A8916D31266916CD7A67A26B825E42435E4320324C19D28643326513F11B24172527815B548F41E463E48CE828B956911247864B418F42E124F47D89143F435C
+:805F000066229F413111837152342EAF11761622B223C22215D22A11FA342C67322F1281F156144E211E19167821594A1D4A87215F2162432B7CAD542A88F1582A9B122C457926D643B131F41E121F32B42EC432AB24943845E118F82683A784893342AE8243B28224A4A163F2384A4004441C41641420064A084282460142114A0228A0A7
+:805F800024114614A124114211C2200882200C82148A448104E03208002448284828844008844AF2C664141F2456755F72D266D49BF64C4E2B544B35AB735F1BF7F87A2F2AFAABC53D437FD4B615D1ECF46E4DE7449F16F7343C8F83B551F5714C2B669F865588C5A8B98FB1F172D76F45F9D4D6CF5DF5CDD5FEF53FCEF8A3226F4AFE9C2F
+:806000009D45F4ACA56F42F34F5FCFC4FD4CDBBF86F669454F25FDDFF3AF26BCEAFCE4C4EF48FC68614F2AFA2C2CCF4E5F2EBFC841F357677D4D342F21F57329CFC2F2484C6F45F17A3E7F5BF7DF4DCAFEC9A5FD459F94F67474E7E4E7F2EF42F43B327F67F33A788B55AFC6F5624A8FA67C1A588D4FC9F9949E2F65FD5FDD4FEDFD9A5D3B
+:806080005E583E716F5BFCB3272F43F33C3E4BA8CF42F22E39AF94F728F88F62BB22F268694FCDF9D8F28FAEFDECE62F4EFDF8D2FF46F69E98E5FCDCD4EF23B3614BF357673D433F32F21113CFE3F22A2AFFB6F21C78FF13F27DB33F55F94162BD29237444FC557D6D3F7FD2F247174F64F7147CBF93F57959DFA6F76F299F86DE39D41F11
+:80610000F43735DFFFFF7774FE65FE34CF65FD571D7E74AE446F62FA37367FD57515FDECAF6F66F24624FFFFF7DA5FBFA6B74BF7D4D7EFDDBDACFEECCA6FCEFFD6DC4F6EFEAEAC6F42F3C4FC4F66F786CA343F37761F577E1F15F1342EBF96F62D6FEFC3F71F3FFFD7FB1BD589D29D714EFE2A58DFD153F77FE6F62364FFF1F35F7DBF9309
+:80618000F7687BDFB2F2676B9FB6D63B944FFFDAFB5D5F7F41F5FC672FEEF44BEE3F75F5F6F46F5BF13F8F7F73F3DFFDDFD9FA6D2DFFD7F14B6BBFFFF7FB7B3FA6F64B785FFDF8FFCDCF8EFFACBE6FCEFFF47E6F4EFE9694CF83F7D4FE4F62F33CBE20024302472240424842486381241244844C528164800242801202212839012180018E
+:8062000023022F12413822A0121A041E482200122482241E48241289024270BA07672819120C4088113124C01150184022D148221112D148828481048C14E88265454B1242A4282A051C044044822404250142122581F44895224A2118A84887449038F0638AC0421F4152281F4132481F41324A1D24AB141D24AB9419B24A19B54A392490
+:80628000AF1439242F147924F842914F82E414F9244A4E814FA264154FA2641D2E4A96C54A8F49C24A1F4DC2421F4952281F4932481F49364A1F48B64AD141B24AB981B24A5985AB944B42ABB44B422B94478229F924484AF9244A8FB908A41B6189D141324A1E24A316314A19F24A9411AB3451ABB443B24A19F44A9126F8428165B84ADE
+:80630000E9A2A1844D9A52263AD82662584D4B8F49D234F4C12845BA91D628E449921C9E68611F88B64E014E941FC8B242D38594B84B42ADB449F442944392922F8AC4146B181F5C0384000000000044000000000021800188000040014008000000004004000000005012D09A038051822721D06204108892521914088034218542012B1A
+:806380008622224E228324048C024D41491148840219041C820211282A149A852921C48A20088D84481848CE146085B0F20730821228121323D1816513471830B84A2149F21821AC2188A14118524E1883282812081E8887222621A4214622B51208841289BD429212449878200884BC34842381C14586048A44E144B22807244285828360
+:806400006124188D11D034325413E6820460829953281C21F4A2121889B31822A868848CB2187828D516334126642483B1416184941289D412921244A3D1243214201A92C9442328755461444F2C81E49124F734280012290125F2112480F428118260891892241B4124822021A442428E428304008004841222422908222898482268880E
+:806480001B49A048818424828D1400822008418FC80748204218721104C4418C52228A140850814400902826084800814142988028812919044112221A9484118B14E024A9414621018008884B4A81121822BF6D0744123741411D1C83624138A188913C2111B48481A1128C6B8187184D411411B08426843518C143649118CC722602A6DB
+:80650000011B82211F48952A1C94E226E18601A081C314E561964C6AE1A30441412628743E0E44121D14848113214148CCA8913B84812029B1140250184B4200424B48B048419C4C1E44A0183886028A021918F284122A71C4011CE18483A9411B8141513A44A4426E88CE2484412E18288FCC084290224427518742414C1302212C811174
+:80658000145481B038981882941782148082041220D88101E41E2492519024121C6684B0836686602420E4810444A98C8111128401485F910A89021F42048400142118842F12C144228D12812E1A4196C944363A4840B952889242888001C140818232288C34184023467522487482CC11A028444044024606495184F0E8BC40014822882B
+:8066000023E221424448840285641143A21241840024D04102812B14941E84A2A0120014199548218A04306220128145342848298201892804282A01182D12AFBA0612001192118484001C1108A400C0111008004200008C042085C1242400242852804188848803A0418904213098004280F8572FC01110641216088C4101902135886456
+:80668000B124228D14CCE118D14824210446C2882D2248128212128741184C92612D4222A48322714223D31CD282324429CB29482B41CC052124836842E044311C86F2D6A8200A260124196222C4A11694181A12088D1416C82211819028845C528142488511B448022848001222802821842204462119280182008D84481848290300FFAA
+:80670000FE4B81414884024781154409849100842062818C0184412249182A0454901C5CB4214131481428481844194184C244604412441C118124A424412A34444911841114FAF8BB2414421312542E801244212811C81218414001881742832511D841249818814C822C2258481883048880092094814A018E281430222308188C2408D1
+:80678000240020F256352486C223241502281A024183028140240100144041745801142A04141954584444411644444484088C145181234598110030454C8134124228811200448744200148008954181098823413121842029022C901218344047012344848003042008542D821D24854A4151444D414321646C4584CF1411200444144CC
+:806800004921449A144C015F5E022450211428148484808102400120321813921113861141984144904884C0442011C84419480411103442144A41854402E4322A4102C01248008D41EF1D079481204484014001908185149834190811C0828411381D444100828200003028D0828404834AB1886262838A529240880144211A024144304E
+:8068800018223F73024A429564264408414C121211481481222813140428444490228942E142284284322818C122148440031827841008A1800C4081688210388218860844BFBD0E2008482028018381A181298A01908217892082296B8428C0884621141121DC8121248226486818111886E18822C2888E214824484C1409A04227412A4E
+:806900008504491488F1AD5AD08422924290A1260419012D2622442D8128315351423D228E1425041C12024991282E812524518242992118D6227444592848C6A61621100280514118385B42204102251808212417569024AE6E27422712CD864FC3DB51538818357C229321C721254882731D342F1E351D22CDA91F81771841E4D6E452DB
+:80698000924D9C7494C9615D781355C42B225F225641854AE978E117A222A632426AB491524A46F1413127114B244F21B24AB224A4211EC8812D4814448F6B44731131821CD26444185888471135B928AB918F884839183AB9A688E89152828F48B913417181D41594848D1826F4252413F446842653488B38CF4464883C74E5D161914D05
+:806A00009F4878CFFC4B254D7C2FC9796CF411111F21C944CE144CE142F534582F44B144E524F114184C598C83D36B042F22551955B241F222211334341D248526D9897222919315545617112FB281F1A58247136E44C7464FA2776A7889B255E49432C28DD497828F45D8942565B187446B8C4CB18628D1A6C5414DC8973BCD212D594E18
+:806A80004A48A721DD483F13A484649A72225E4E2D4443E141D1A6F6B23B00410050124823024523482249026482641028082044224422440224422094829082842988C48248888C8408888CC4824888C082C0849088A0848F5D061F6E66F2355775E7EA5FF6EEC6F5745FAF83F2111BDF91F1181897DA7D184B981D15CB18DF3858ACFFD6
+:806B0000D3F28E1BCF12F641492FA7F6AFAC6E4DA5FD468EEF39F194F637F137A1CF4FFF6E4DBD45456445A781FFC1FC7868DFC4F64BA8DD8F2D11476F7B198D198F4EFD9D114F2DD366F2DADAE7EA237C4CEC8DFDC4CC8F89791EBE7E43F271762F72567775F7666E4FE2F25C5CCFF5F53A289E18D7F19F81F1292D5D184F28EB41F11D3E
+:806B8000191F5848F63735FFD1F52F615F54F6627A7FF8FC829CBD4DFFE4F89F164F5BFF5C4C1FE1F5E8E4EFC656C55F44FC15455F41F815145F55F4454E75F4777F2F31F7D2263F5DF5C8899BBDDF69F1D7366F6AFDAE9CEFCEF1FC1CCFCCF9CCD6CD14CCD1AEF1A9A8243F63D277D4775267E7887FDFF62D3F6FD3E183F227AFBFDAFA84
+:806C00002AAA3F985AA32B993D966F1AFBB6A7EFBAFA3EBFEF5DF93F659F94F4E9F8DFAAFA62ECC5FE444ECFDFFF8EACDFD3F2544FCFCE7E6EFE87EF4F6EF6B4F6FFB9F19F8F8F8FF68BEDFF8CFABDBD5F4CF17586BFC1F48BDBAF84F71E962F25F596B45E56EFE3F85A2CCF89E985F54E4CCFC1F1ECFEFFA944F2B2266F72D277F227268E
+:806C8000EF86F63F28DFE3F3161DDFF3F2AFAEBFBAFA83ABFFB85AEF6F6BF9A7B6EFFBFBAFAFBFFAF8BFBF7F5FFD25655F76F6A9ABBF98FC55CDDD4FDFFCF4FDF56F5EFE7D7F6FF1F5ECE4EFE6F287A67F6EFEB7B7FFE9F99F9F2F6DFDE3E77F5CF4F5F51F6FFF7BB7BF95754BBBDBF95FD77F77F436744F4FFF6E9CEFC7F71C5CEF4DFDEB
+:806D00008E9CCD1ECFEEBE9D0E1C0126014501181200001440148122411211088F44024C125148118B2419A12400224001144041682284144800141A4401405828200481F037C7101211423422004424128928D122081882A184AD114388A1414641A8A42280748854841034184D428249249182863822484A28392870480100441AB442C2
+:806D8000024A33140040F161D6C0421F4152281F4932481F41324A1D24AB141D24AB941B21AB9451AF143924AF143924AF147924D812F9A4484E915FA2E414F8244A56F1244A96E1A2645D2ECADE24ACF491242CF4912485F2912C83F49164A7141F48B64AD1C1B64AB911B24A9945AB944B42AB9443B2427924D842F93448984FA2F42748
+:806E00006FD0A4F4116485F21124429E2C21CCB26241F848941B214A7A84B84833248F5479A4E85431242D916F8AE414F1241A8F14F8249A5671246A192E4A875D2E8B56C4899F4D82F4916449F49124C19E64C5F1816469F111648F44F811648B825D6889B924F44A9443E34429D24AF936484CF8265AFFE60E84824800000000448082FE
+:806E8000010000002100000000400100000000000000280000000021705F0C28403A18C024A414848341021820A1282CC1181480C8412248A41422622485A125408881158162831D841978246242D0145C844A21081CE14104408842044C04F04EE49013826381921210E581E822A8488CA181848D5144851121781824E11462888D44A0D0
+:806F0000248C94188CD181A38285F224584A92A474AA51421948D82291411A3819328A54821699118A54834D184C82745864265A2269D3F0E27780628C848C0322918368888B14C188328321A1821693181C0117284681A24124871C12265818A7122A914981B04811614685D1251831226311E118413C44302111AB254C0181582225E278
+:806F800044E18201CF83072D11D0260129415424136122822C21119841441508828524A124867848048B249028581A8238486B124AB22459412F22092A4988D941A4821638648A941A1789189A4445C824488D2449A4348244F04D681012312800288100200600000000000000C0480042490124005022004488100229012D8240042921F9
+:80700000088051845024DF5D074A41D4326111A1344001105281A9814408251304301A50414B24288124442816064A12443414444C4214F43648199144423412204108A02864489E4423220488F0DBC380058901D0210200245029830100212504701208142A2402244D4800604441444941C42641B04211250C3410820121418241882021
+:80708000028504418F7D082155D832361125088411004A022624140811004002414301818088C2142984032484804442742428112414826141F0822800282721424F25081E422048F2D473904300128C21042100260880082126682283A11841842058282862488AC218412D1461000010C8442582140648183018847082226221A0188416
+:807100004248B01B010010012260128123011800C9C1184881106889008148008C0200E08824A221281241008160A1163822132284D422D1848422B1440226248202F0E7A800902100122281190211004220842801002228261104A4000084248044422201222200A210082141000018200444D05C4E120100A01622281D28238182014234
+:8071800089311283F6182289C1981E8C8C0213D22824E28214886A8164CC61A82272222D12164428822244EA818834114682414EA42829C21618A6848214044FDE024860121391184052810085012048C44888000080628844002B420040624400000047248425624126823228704822714802182A041283242204140000100810C111113D
+:807200004260241002000000004002002A042A2818644120180481000000000080084E1240140448C7F9242424D0A201421181858228191193418464AC02C0D8488A022A080025C24844165442423224414922C214276110E8847842522881A084848182200820A4412881DFDB4C02242C441228441151211158111012082400896C24822B
+:8072800020020088812E44442880014188411006002484440040088882002C6444003FBC0B85B84AA444890100841628D84458644F16E21236226426088041D22212A2191AE129A8882123041879889C248D1CA5F868444A3654AC0184AC8C44524C444B6A2E282288001E4240D62291225E188F7F09210021001822A10021002008810036
+:8073000000000080028100820000180080110224000082200400820041EFFC0D812598421C040020042F4418C42622890200008228212921A1128888004091111484818C25840400400882414C62226840082004504229F1AFB54028A544001002004084C82A882400184042120218800800284C4401400C480000222100258488028E4201
+:80738000400C400421F01BAD004880010000400489020000002421800188002141611441400C48C0140021004004890200001840120618BF9C0C24800121000021002160841008000010048002000000000040020046020086421808000000006E6D1038482004214002884514B4242232221800002421641A21210982001015115188817A
+:807400008B44CA6444220024004948B224A2226200819024242544E241D1D103188588944100122114C08285C484A022008400002121221A99882A0800405114205188A05400000044C44544A222304A88421014121292E224201182814202000088818C0400820082000080024800800841604100108201242490828184800100480000F8
+:807480004FCA0D0012242001000000002400000000800200266442101402001888D024012180080048800400800800BFAD012011120325A211408808908885082C111208A088284120022200442A52444F48090016249114407212225282292818FA888287244A2438428412224308001F964D622125A2111A91220022312486928A27A867
+:80750000248304C08812000000402882044524044441008A614110022146424202254828C812848D84A04488410077D510820134201152222C04C800422788828100000041A022282821C31202244034141820C8221684410290828800A14A9448201444444454447F7A0F6F22F212222AB11221B112012C512329F812131F31B189E98944
+:80758000F848888F18F4484842151981548985F844488F44F424444B244F4222E24202284556442AF222222F21A2129AA1812B99822C512229F812131F31B188E999F848888B488F8424E4840448855C884E482F3B056F2252222AA113122140512229D832F1111119FC91888F81F88841CA2464141501C48588F44844C5B444A226224433
+:8076000000255444286F62D222E822A1131AB8822828582229D832B11191819E888F81B888A44C428400848588F429D1000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000A3
+:807680000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000002C
+:8077000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000AB
+:80778000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000002B
+:807800000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000AA
+:8078800000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000002A
+:80790000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000A9
+:807980000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000029
+:807A000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000A8
+:807A8000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0028
+:807B00000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FA5
+:807B8000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000000066
+:807C0000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000A6
+:807C80000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000026
+:807D000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000A5
+:807D8000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000025
+:807E00000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000A4
+:807E800000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000024
+:807F0000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000A3
+:807F80000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000023
+:8080000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000A2
+:80808000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000022
+:808100000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000A1
+:8081800000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000021
+:80820000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000A0
+:808280000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0020
+:8083000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE4AE
+:808380000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000000002
+:80840000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000009E
+:808480000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000001E
+:8085000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000444445144444544441404454444400451404000000000000000000000000000000000000F011E10000005044451444544400444445144F
+:808580005444444400000000000000000000000000000000000000E03705000040544441450400004400451454444100000000000000000000000000000000000000371300004054444504444554444140544441444445544441000000000000000000000000000000000000003F550F0000444514044450444140544445440445141404A8
+:80860000000000000000000000000000000000000000F08B1B00004054444141444554444140544441414514544400000000000000000000000000000000000000F0CCDA000000455444414441414140445444444444451404000000000000000000000000000000000000F06ED700000044455444455444450400444504100441000000FF
+:8086800000000000000000000000000000000000A728000000444145544444000044104454444400000000000000000000000000000000000000F0582E004E2114408A44AA422002828D14822CCA222444850292860892B02201809298304C4E844602428480D4A68D0422882220290242EC02E021622942821212BFC80E4E218941689435
+:808700001E418168842C66241C22A328444C548449E2A162439E22622921592A824E821E228A319A218B859281869868A034834108C18F4AF546182E4246F422142889318CA6944249D24A1726A283A3C1828D821F3F0380422814C1482004001282888A042827821E2820440812A083002383186844002302814002274420A1C230140070
+:8087800080CA244038342D12488110F82A65C06152002C05242052221C2238182052841014542282128AC18829882402001250488820A42118424309C31F46E2441222B928618848872480042218002D82FF83024008851108004848004C424422021880C222400200128A11381AC2200C001018384884A02400200244002864003082125E
+:80880000F0437C00111400C0688C0222200210046124A0811888001052222008B0180846C8482004000084002800502440943280288A818871C40A000000000000000000000000000000008200000000000020020000000000F0A813144212009031C49502901860882C05818942012121221100228081840230222800108801B88C4202A0
+:808880009088C21841922246084829B1249C144B12287F3F0F2221125D124845A8414B162A34248256A1416088114C04A3B9C181A1486022488C2424F412821D488F41EAC5D284C448A069A081211C522447116E14438E4201141254CD124481614B2400C2C3F4C17B14462221711481D484924C5D4A48419219B4888514429868348B18D8
+:808900001A84214801608242581AAC421AE8817422A424001008A0128CC342482028084CA181C9924A81242E442A1CB494C264B766200200211381A121222881122091881144403281212A04262284042450838D2443324884A0D2C0921226614865E141B224885218481C0154124470422441242144D866012210120110781128922121E1
+:8089800015384A004904843014008122E022140881248145228408204841148492141D6829082502008B14400425040000BE2B341826E1825128400224D082E59108121416582889A18423D42244882182982280842364424914887812144695219E248B1816E124611240B288C51852482486F4845822AA8174483244222E44708E468285
+:808A0000732142480224403822897492411818011012984216041226288A220212C0248344E424E84118544113CA1549D9410126C4612483182204604588418A139648612243023BAF00A0129100841341923184112B14C0184D4816A884D022440800212C6484228C441254284002002A18085E2216113882588C911248D082E8C1240206
+:808A800048800448248FCC4F0129B212064D18101CD84101BC224184524818881014542641194104284F8196888006812444518522460829C42200204408230200124200262A02189F7C061C021C044031224CC22281404AD41234228224441D92288D228A0284204182088429921283C4821028141202A0188042468434284901408401B5
+:808B000012254214A8122F2D0448000020411108188008400400804808484B2C0090232113014C02421841221D382C4314B812C281008C01211221108401801484F4FBBF601623B213024C41F11A244962B2B011522A304225E841280817214722837A280446E84826C26A813932283D1216F84422863644184922C2382E12222D8823E15E
+:808B8000124804564A3A14102261450089C24481625FC90E000081001598148481128811444012C4844024C811411860410029840281104102A512314244182880140A001840041812212244243FA70F102102704102460346D8846234C14221130542818821842082041813199224814304001888802809004AC1841888298188010018E7
+:808C000088214908F09CB7208411CC18142A0112A028218301828190182823410814888840120840232401448484441308008210023B480080C2941698148118A6221208FFB40ED028421238880028C041288344440183018B41460884529082488B2440981845C8148444464844140850484410480484888A44168411D22892848E144326
+:808C800002412CE4AF0A244418176240244814480422104C641225414161119645C111345C61111414141E8114244012D121185121131211914B1D14111B12111B12111919098081C228128C8441E83C0F133222112215423821629542180524004200008E438C488161122944A11814219CD482110411210088232AA81C132214A225421C
+:808D0000304300820041802D24B456080024102884010040044812008008809212288100C01400484E28830400200228C141182220A214248141412008484410F2FCAD144C4421024B21131216014D1380081612884888222288014082014124004004442120A88200818084821C4A084460882002228C0822F0B7FE804212C84242A02428
+:808D800081423048284608428156311816619284C08215A82812124284894104120044111211D4411514481581984182E04118D88441944490141A820DB7DD400848008484000044903800400512489A54428051188828002381784881485481444821100918C014224C11A1341100812A0142D06202D7FD50212E133783AD1AB7D18913F2
+:808E00007931137188DA81529845444298188D199727941FABF1C81A9B1C5CE9227A44B118721421F11A1189714C5D446F84744C1A555417488E9233588C41471D95F844243356981B82C871418FC159C4C3722CE463F354646B914363246F4601902885E212A2242FB664448C26B463756AE4212CF4DA5983E48434514D792A9D885B8199
+:808E800026789132113F228691112E82150A151218884CBA81D1160826C32595D388F45435F0941529EF35A7149ED75C098B111E188A13E482A16E8DA648CF544FE1461697244904512B234354884515A426854894161F310A3019141CE4110C27988CF84149A19F1815F4952F2B515ED81E24442505811D21A81B988E2C1D84241F11C550
+:808F0000A2133F88171942BF81728482C8265AB888A88885A454A11F87414144614126E14144C344144CC4938CA492482C88848884180441100463084110221822089221122011228108002400402208824008846088F04A34142C7225772CFA2D489F83F31D1FEFC3F33D258D18DFF1F99AB88F88FBA89C8D92EFC9FA8C8DDFD8F828292A
+:808F80005F58F83C3D1F91E1DAFA998D47793F1854DC5FD1E1B7F697859E8B3F59E88BF61494ECDC5BF181941F5D7911D213D949D159B819F129311B331F32FB9B981F18FBB1945F38B113A1198B19CBBACB118BDD1AF92C488B558F29FCEB717024F6547CCFA3B31C554CCFC2F628288B638D18CDC48FC898588F82D3CCFD88B8DF51D5A2
+:80900000DDF139615F5BFA353D5751BF56FF899D5F5BF385459F94F911195FD77F117111F991D59FDAF658948F94FC8D951D11DF9DFD31211D519FD8F9313595F575755F15F5B535DFD3F1F1F11F5FF755559F91F388149E14BE948B11CF4EFFD89CEF8AB43CB588F9132D144F66F411738FC1518BFFC4F4793BAF87F77921CFC475C9FB8F
+:809080006ACC8F87F25868CE12EFC57C4DFD5D5DDFDEFB31319F9BF3D5DD3F9EFF9D991F3AF3A7E51DC11F91F1717BFD15D5F7DB197EF98CE4A955931F59F891C51D933F12FA91815F18F85DD1DF12F231351F76FED3F51F1CFAD1F15F38F8979D4FC9F19C984BBA4F88B9F4FDBCF86F42EEC8EF28F9BCF3141F34F62F45BFF2F26B2BBF92
+:80910000B5F56F6FFFD6F65961DFF4F5DB5BBF96FCF8E88FA5F6CE5EAF86FDDDDDDFD4F5EDFD9F93F3B5BD1F99FDA9F9DF98F9A587BFBAFC5B495FD1F1F57FBFB1F19F8F7F79F53EFD4D4C5FE9F5878F3751DF59FC21333F3EFA9B8DDFDBF349CD5FD7F775737F77FFDBFD9F9DFBD5B37F75F9BB99CF49F99C98CFCBF9B4B84F4FED4FFF93
+:80918000BCD84F8AE92CF8CCDF200221100222840022000012008192832408A024001098144222838401490118B02449884908208204484008844C2288024A028F1806902181288716112314612415284428042B1445681417812840311150214048D121012414184002144013011100141F48123A8110918280014212441A84E838F4E3A7
+:80920000D6D034F41124CF32F11124CF34F11124EF34D141F26E131D24AF36D981F24A9351AF743924AF343B242F34F924482D914F82C4914FA2C4816FA2F418216FA264192FA2E459D2A2E449D2A2F491242D421F49522A1F49724AF29124A7241F48F24A121D24AF249921AF2419F54A9243F24A9243F24A924782A9F9244889F9244A05
+:80928000EF4A0DACB411F6281213B148B111B24A91218B1619B26249BC48CB28AB9443F248B143E254F924485CF326488DB54FA245F524C88F55F224429E252E4A8F59D294E418D2A4F581288CD541F6285217488B141F41322C1B4989F11164AF44F911248BB41B21AF4429F2489443AB144382B922C4944F22F5ADED00000000000044E2
+:8093000000000000001280018800004001400848280000004004890200000000F03724004422514094222200AA441808242032111C7212824D8898485C9441382216681F801182C214A0218D212A014692286483223448002524C1421E882052844323C23CE0810C2D262824284914D82424D18204852286A814484184228B489428421205
+:80938000282788008400424124000088818B214998441A08181226218861884100478882824A4841F2922124262484C22448A042299348E0AC9268A684612441811C612A812F291428E121748924AC122216E81409176130224160871D288C93184C9C281E84A3A214C3058642B498C2428B1870885484472AA2CB2112DF640F244C421237
+:8094000011441C06210010880480227248311128488826281401842022040012008820026304009021200141002882184840F265FEC012112228D0410219048041081A0400101AB1483881000042A4C042282E42004448C011282A01890123A429218224409144230489A14188128B24F0B2742026C2121691141822459A1446EB88A61414
+:80948000604856C11832893B813022906899242C74228844141884C9AA1AD2128943012741E061048C08848280682118A8B04AAB2810B4842418F47628A0422382C2211811502100AB2100884E11812884002B248641088800484420A2432328339458202122C212128C0887288888822119E144088C658848448A6184446F820918112C97
+:809500008111C4342287444391494AB84801490512182E929C48C188A0249C24C44289460A8C544288264A12211241311612431408238403001221222724A832128846840A4F4304432192482D2A8D468824C110D44221C218A698182224120046A21458814538122D48298E6184828184C3732201249E4882161A184824911C165C28A0A4
+:80958000211229428861818A722222381428EF3C0789041A1621A112849A221248440160428A411408281592842648A1843011882228142044011F88046840042E422002158401280028004E14244210F415394002411220381488488814842005818B484444812648182484420881414321422402482800284200222004628638484508D7
+:8096000023080086184828F411ABB01484B214F2231AECA41285961490841311C8189E4816B838582CC12082A6144D7881AC48A8412B421AF264181342C4684CC2411B2C2428A8E4608426A42181182225B818542C2484002E1423C8488446F4FD9F4002818001188C22461892210044A0841244848571840819E5444252188444204808CC
+:80968000AC81029098A014842602E04154181E48888021822A91188A9428824C21F26C6C1021880181161411882132211A12084440381B8144854461224712A024448B824AA214001618010000112150829931424921C8282100842100188416026FE4016822C59224242800262208835C248328E442C894421C2A03828E48A0188142169B
+:80970000011F828881080049A8248968C28C1AD4183284214F8813A1346321786281092E1800006024DFE807202831495081902410111C21419818118082F1411812111021128111A5124061882810811201405121A01266A1411440112141021840082842F03DA890121381060081D0486244484442440040046042260C8B4850422628C3
+:80978000044C18D442161C38242918EC1804982A880C88B04202008081016B12B82748426170170F40048012064181218448412130281423014002A221004272850422008301001E288480827241A81426084881188004201188921840E1374201220020312815088D8428830218202498411A0280744208000048221B148C21214841A895
+:809800002110116211830481001D34440084182288A0483032213F4E074AC2128C1424182191122082D4420949C456824C1438846490844426B44C981C1664489011004044444C025084A4518850240040110B810020012388FCEF97102258222688822213028011C218130427948382022E4180223148621C042061848386079018008032
+:809880000200200243011B21124228002068641A6C4686F81A6E40084848A084A043129440042881440013042E81182521C819221C1A52586141414D212929C228142E41421288885E2288114A420480614440624238222221F052F23426612BCD222E4886DA194129618183DA18D418941446F4441C6B8C4CF851345A387C4F41E8483461
+:80990000246B42CE414E2C45B144E983F46841428CB728F21A194D2645D42DD688A222A656282F2EB898F2A282972880C232121F116221166A8249F128821AB618E232C988EF250229E64811D244A2226B833E12FB122E363D882E162EA81AB48F65211F92F6442B2782D11D1585D214F888DA4E2949FA2D417E488F11D248F1172C4F32DE
+:8099800076747414E84818A12812171A1954811B8A8D64172499A2121D441197928283241A28C184184F4E28F8442482BF5B01521CE281714A014C9628CC16F844254E282B1D854E98488534988D41AE31682F12B239E214F2898487A2124CF3A3444F14A2989F41B188C8147038A18226A181C5FA18914F1152914F82ED95F5546C6F175F
+:809A0000E32F7514D4319152CB54182CB332E289C2126E581AF442429F1F47030041824F140863042D819082908210924129A241A113113811441522D4210115224822CC1282248224821C01244434443C081C082C88845A842C18541841814128AFCD42F356561E32AFC151C44E424F57F22E6E3F3247F856F7EF2EFEAA828FCCF54FCB60
+:809A8000EF65FF7FFEBAFBF6866FEBFB373C4FE9F975CC4FCAF8868EBFAAF82E1A7F21B511F812882FE8FCB7A5CFC3F236A46F73FBA3A11F73F372BEFFD8F884566F5AF9898BCF4BFBA4B68F99FF8477BAA1B38E819FB9F1D8398F86FABCBCCF6AFB2C384CF19C1C4F41A8BF8FC6FA79C1144D242F89F6282C4D448FA4F47CAFCFC2F62195
+:809B000071EFC7F73EB7AF4EBA38F16AF8FFF4FC5EFCCF47BFB2FBBEBF6FFBFB465C4F88F9D6CCCAFCB4F44FCAFC6CFAEFA3F738B82B6B6FE1F5E7B7FFDCFE9E24EFF3FAAFAF7F5BFBB475CFF1D1467828F885878BFB8FAAEF8CFDB476FE346AAE8A8FA8E119F528A8CFCAFABCA6CF83B385FA88A86D844F4EFC5CD8FF4241D165E423F75E
+:809B800016166F82F24C8EDFD3D68BF26129CF61F1FD75BF46AE328F24F3DD1DEF8D75EDF9692BDF46F6EFBDD7F6FFDAF8EFFD5F59F9EDFDDFDCF86DAB9F91F15F695FF5F2154C5FFBF6B6EDCFE17284F4A52F6F4BFB34748B221F39F2BFADAFBAFAFBF1BFBEFA9F4D3F35FD73751F1BF211A13F31F95A18CFCFE381F82E3A2F4A89A151E8
+:809C00006BE74F4BFBC8DA8F664DF33774AB3BCFE2B266724CFE1D6F1F23F36329CF67F7BD379FAEF4A2988FA4F7CD4FCFEEF46ECD9FBEFA39729F9FFB6C7FFFDAFBECFDDFDFFFA9FBEFF8F47F6BCF97F6FA691F35F495E66FC7FB546DCF21729DFE27AD4F41F33537BF3BFB3BB99F83F3AE2FEF4DFFEBBB7FCEFF7BFA3F17F3F1711BB1C4
+:809C80003F31B952F5FC3C1E88AFE2F2A2B48AFBD4D45EC4BAF8E8FAED11200222302200160820C248A041A0482882441200850400819028514AB224112802004541086012844008486081141A0412004A22A924821FD30A22C012C44112144422150C121004844664815C6A824484A84D484A4AE844C218448C150812451831241321020E
+:809D00008322784222A816B022011884A50181104288418848F2A54AC0531F41523C1F41724CF11124E7141D24AB141D24AF149921AF1419B54A3924AF143934AF147B34D81AF924481CF9244A4E854FA264114FA265192E4AD6C54A9E24ACF591242CF4912485F29124C7241F49724EF28124EF24D141F24A9219F24A9251AF24B924F4F9
+:809D80004A924782AF247924989A4F8284F9244A1F58082D481E64A5A221421F81326A28AB141F41D24A88B242DB84B24A3934A938142DA14333426383E982A5944F8228F42458922E48D645E948C2591FC882F5916489E449B248F18124AB148E64AB141E242B864CB2483B15A98AE44429F242B4224CB122C494ACF5874A402888040083
+:809E00000000000000000000210080080000140000000000004004280000000014F0C8740039132A721C429A2826E121341121301214442424C281C4A012C028418D441246C434788592ACF861211B848082118402303400228418488CC948421883088742C0485F19044322A8128E11E041222101608181C094487018C12C484E22130572
+:809E800000822880024100001386820314224D1A8412421C48981200808261928428184009EB6C5024E6E3812278143816A1262115D18451283296C44440314C8C64621F212401328634EC184E244CE14146388952902913AC25281641C42E004E2413482862421880C85817861283CA12265C181678EB012212B011028CA21212241221E8
+:809F0000001100AD12A2C0482002840000280063A228652224020022128112184022110842360810080080B42A0C008280080088000000000000000000000000000000000000000010010011400170E7054A241243945483448312C24849E11632118C289C68630218227C0A1A51844E44823484288B4116B8C31108442A7A4232158D1C2E
+:809F80008A88E234247242D84C04141B1280688169A16220C2A6E08191482F550A1012E5C1914860144C0245B842A61334846D8483818124F222828E35848B8513C845D02462916A914811234898184CA684323118228F44D2184C48341429C141172290865E4C90142E84F08812E081BAC4F4DD1C0020088800800800000000000000000F
+:80A00000000000000000000000000000110010011400775E4042047024224152818116088281128542E824711488094C080040021944440A88E02228118202124592412210080020812901901882428002DFD70C274234181212473219614590821A761282C48A4B185881142D4445B811A6812245D1824404322932321AA6212289614800
+:80A080001C73828431221B382C81C1324C82343116A31C942443E483E86411B418E441C85846B82CF4313F246C42941230241D141227C4908232291982C984278183D1A6811C8C2228429448001E43248D22A0186028822D2282181AA2292422D0420219019A148199141E88124CE188044AC1682674220B400118182312931184162804CE
+:80A100008314981A4242144C014E951210111214829224181A862232381694114C0221741325814328843211218941822472441228E144190846F837D410021123C248C1A4260220D148814528028442230112290490220042284216144848515842488128C08430147018023014619012A0210048212272BD69C024284614E44142C2145D
+:80A18000C02848844C04200241007022584249911843942492288200421D8490282848200122808221840249826481608181842608211216F8346D20210183010020042228888051284860888D441492840040480410012844800132008400A302A0122100224334441260818100AFC40F6903302E686416042F84222491188A118811987D
+:80A200004430828D442528D48441B824048361428A22D441C14822441442303818902CB014921A8981E2228131468429C258CB528C21628184382A74BB0AA0214521911C848582023028684200108A9418C0314309241843024800008748C0242A0180028200224821008021410440280440F854C60022451104240014841482250416880B
+:80A28000622812189022181822002912C41825820241138282042C120828904822288041440481450200414982056E7C2024618321811C722982024B2122901850249048222125C4141446248186A2412E124440A22452421229014561252A84C88445B2440158828A81644842186A6184A01818244CF4E4BD002081C244442C2211081E25
+:80A30000481382122808120020884448C818488044C1644138801216712408498458145820221401218211824220A1244810A4188DCB604221410080043C65240014704481048F48A548AA044C419484490C4914012001280080A128222C22018C0264811C8144224544284418049AD482086C03821222811100A400260816941124201179
+:80A38000220212801182C268182A041C2C644428A0122902341831002E424826024860212C01004220222264146F150B002146018425081289C81218214182322240C214A254100824701212311A1C1102411C24810222122E1A8058412D11844414214058422043088132F0A1A3104281342230462022C4111422008445022800D184C87F
+:80A400004B24002841260428002C44440C188501471CDBA4441844436418234464C8308845C884380010F4C31D902243528281668802842688622412842094188C0223230140220844442521322144444441A0841800C200160180011682812481818A2224818418E8994EC14C21484141488041622440C4413812484882821B282148254E
+:80A4800001CC098880656142821482C028118C0594C021001211C486A1284004A4006286D4C282F83A95246823D92632245F4254242D411287866BD41B21272A1061A1288F822112A2A82E284E1C1A55484B4A2692425B32645E651441381C6E42484B211F29B324F669214F44EA4CA44C112484B0C3E421194CD448B868B21681634468F3
+:80A500004691C27F9B036556418F81C12C87848752AC92283F2171396A841CF31829184F4CF132582B6416E22AFD451647411E414734278242414F26213158182F41F362646226D224B31232218712AD182BC1BAF12C211E281A21B114E538E121E948847D1428E188D488A642BAF1D41CCF826AA49F9D04622E3226354BB04236282F827A
+:80A58000C14128AF3225F14714C391C9436429AF4CAB2123F3829151CCB884DFC8EA84E641F242477F1273A7FA64421A584447443B411F46991841172582B5B113782DF666647F46734BF151885461374DA9DCA635146A68C4682AE849F58414CF3A0B7024014302450134C08184884007248082442408114C0244C024B0881221088214F5
+:80A60000C214864C414C4208404108404108822410084210F89A93344F24343215D464D65372445712388B668F88B8C5FC1AAA2F675C337FBCFA7656AFA6F4B2922BDD6F7FFDC5D3DD1C4B982F42BC8CF868762F24F146F7E57A43F2B2965F44FC84244F68F48DA35F51A831CF91F394D28DA9DFD9BBDD7D45F3C2F235F7474BAD8A27146C
+:80A680007D15FF78FF8A8C4AF5E65CEF4A594445F44C884F4AFC1CC2AFA344E324B642F72F141D67FFF472467722CB312E71A5FAE3D6BFB1FA7BEF25F2C2D84F47F5684AAFAFFDD2F24F3FFDDDDDE5FC94C4EFCBFD84E48FACFD42126F66FDBA8E6F2EFA96963F5379A4E41AF6DCCE3F15FC84DCCF29FB1ED22F29F197B4DBFDDF36F6C7D6
+:80A70000F32D166FF1D1AAF872A175F583F36F68F846546F4CB5C2FD64644F61F58EC84B9B6F25FD89FB3445F637455D2AED2E7F74F26F2FBD23A9B368F738189FEDFFDA6A2B6DDFD9F98D8FEF64F74A48AFABBA92F984B73F5DFF4F5DCFD8F9ACDCCF4EF86CC66F63F5477375FFDAD73F53E91D85C6C27FB1FAD74519F7B9B59F1BFB7DAB
+:80A78000FC8F99F3FDFAB7352F2DFD3737BFD4F4191B3F14F34715FFF4FDDA845AF1E626EFCDFD381C2E44EF84F5A89CCD1E6F2746E346F63575FFE3F34F2BBFF4F26F2FBFB2D239F36B7BBFBAF86B7BBFADF6CF68DFD9F9C8DCEF67F76A4AAFAAFAD2722F7FFFFF7DDFD4F595D78FCABDA4FA7CEA6F46F7E3757FF3F27B773F73FFB27192
+:80A800002AF621E25FF3AA6FDF52F3193FBFB7FBFF7F2F2DFFCFEAFFB3F2B7B15F72F35B5C9FB5B5527354F4FEDAAFADF8D6D46F6EF6F2B88FC7E341F5ACF88FAEFD44DA5FFE0621B0260127222062812284262201001648E289843281850444E044024A92124421B0260122422901001840817424210112002448448E484480220982DFB4
+:80A880003702822885421844480125221108811240880280D41283B44801890820022A2184211404220028181AE62268411448811914A241449018414A034C83E44442F1984CE022F41124C7221F41324C1F41724AD141B64ED141B24AD981B24A19B54A39A4AF1439242F54FBA4482D954F82C4914FA2C4A54FA264114FA2E459E2A2E4C4
+:80A9000059C24A9E24ACF5D1244D421F49522C1F49324C1F49324A1F48B24AD141B24AD981B24A19B54A3924AB9443B24279A4B842F92448984FA2F4189BE0B2A44187221FC152181E2CA11E24818E244CF18168AD311F88D21A31A48F1411D412FBA4482D11678A1CF1245A1CEBA2EC11D8A5A4214D8A1E25BCEC41C2DB5E2C4DC319B61B
+:80A980002CB911B46C389183F41124AB944CE254D1C1F24A3249F24A1143B34A31244A39342B146782984F22F5B4EF000000000000000000200200210000000040012200000000004005280040080000F0E1CF00218322D28492188124281069818418248C541A184D21184381122806004CC2A11D4842184E282C6442408661182A21A696
+:80AA000084184A08E011CC118524011892284C2581E24413F48B5B008E22240015220612382A0112422D481E2141221826110248101888669412286C82084302D6868308434844A82425A2481128809141493248224604CCB44441A1488D7C4022942829922C8C5182A012224549A81248A93423D4125C82711282C2481A14688848266423
+:80AA80001B139664118C04E362254F2522C1811EA42A84EC26612C4A58144EA12E154D181C3524002A2465A55AE242B114F41BA70028210011621022A112128112E081142282312144002200281D4840082989B2240449088800448100001200008B14B2444144414282EFF4062E122840480210012821001608844A0242122884E0820459
+:80AB0000002342810448830C282444004302892909824212200884880048004226F825DD006028284F8291281887211743846812181C88E4285448CF2821C24A8921A4217024288202422263114846341444328D2484566882281D48157854C818831438182384898162458842721688F4739D20820289D2282302139124842081810983FD
+:80AB800028A4182A04224820C6282830221428414288444942942426145848262869889449A8141A44C89821002843014232488CF4F2D960212018124488512813819262009442486782451892582781811A424804228064241281CC1422418241086A018CB241018345180880B4188809484A08421628F29DC5242081026081403544413D
+:80AC0000530229C11C22845830842A4118228202208841C8188024348818486C01891404E2264228082440B814068441890889B14202125B24006084830114200283518481202422164224622428214C04D014231A88C124281018229228481982A2148504A04948196182414F149128800528560C2141123FA20C10544110140424320081
+:80AC80003840130844800160840022004904001218C0420080012A3118214004888100A301421822288122C2BF3206214419C218609180F2324487418C0229E1741168821614A41A6A2122B424042244C018E0C12222C112847229C216288B214E14CB128429F29248C21981185A9442848B41B088C24C8CA14280F84E872028110C4144AD
+:80AD0000504100141E28400848230444104A08223021284934180048838408484001006A0940048C021AD46821014984218342C82448AC0568328082428432248312046A6141A4004822882822A24868608240028042829A842248508421800280810118124400842E1418504823A241425F7C4E4242522412C40050126018822148816063
+:80AD8000894423022120424684C4282A840C8889644468408402448D86128840064240024915240483422848542A45F847DC200840246288214024148205444014022885040081284484805228000000440000828C4288284168825082008400425024229FC2464241568410A43445280422C4800480420444004184A048245084122A4454
+:80AE000008D0684204C084A841448304424614888824044218524724439A1C8C14AA18CF9704286081810040011CA281888440092E9800842E82002184008A42A84828848100200100830942801128140826028308222480840CBFBD0C002C02A0211A02128748842290281A74280428008038628C220862004146142444A886C08481888C
+:80AE8000423014444400008C598489012081042222F09D866044002821888449020060441364480085344800004B8441224C18A448800800414B48008188109892508448122941043012448618840112F08D1B0092188502800100102809200881818A02482420344800224908100848880010084984E481840480C448481E48482E48487F
+:80AF00004824434121F4F714408CA2423088004008224423C2241038261042143224230838444A8844682246C84614460284C042840020018412460C1A820141103481828022F8AEC28024D88881E28AB2C4C1185D228F92714142A822ABD1811528D842D6A472C63888214F4AE282F46A6C2E48628CF4C4442F88E122BC4AE6A494CACD1E
+:80AF80008A488843718C32288612E888342885688430488446C658A7C41AF448348D689B2427481E644F31B182D2E2072322BA32722212EE21B2284244146C58866A425FC4B444F128228F8B1118E842C222C8A8418E84CD646B26818BC44684486486226972842448FC84884F84A8124E842B194E164D945A85A914CD1852184245B8349D
+:80B00000F984441A316C8F14A884ED67245F44F2163245D68C4134281624062EA48B925A3D44248958C44968422A52A42A084682B8464218A8222AB28C62CAC1414E64E6A444260421853494C3E144B414B41854881E48AF21A6C1C7421AD4CAA943469482CDCA212E688D541F150F460444402444641460144062881440022440022008A0
+:80B0800010080010022908218008219082108294821229888488C482004062814284E07D46F241454741CD2A2D4EA5FC2434CFC4A444DFC1F1A4849F8DCD522B5EDF54F494BCCE46EFC9F924266F4466282B884F447488F8264445544447424F46EE82FAC4AE6F42F24C4A6B888F6CFCA2444F48F8541845F68EC44F64D464F84C4C4E427F
+:80B100002F2DF9C8D28A487262B4C2BDCAFB48462F49CD348F48FBD5984F89F94C7CCF48F984883F1541F346624F25F6282EEFE2B646B464F768484742DFC5A5CE9FC1652C2B6E4F44F49C9CCF6CF696B44F62F24E64A6B2A2F86664824F4FFD8C8C4F4AFB2C2CCFC2AEEA4F2EFA262C5D436F88F888A3ED2C4BCC4F85F58C8E6F48F44C7F
+:80B180004E4F69794CFA4242AFE8C956CFCDFDD8DA2F48DB86B58EC9448FCDFD48244FEDFFDFDC8B99CF42F3A4DEEFE9FD7DA7247F36F424728D3E8D2AE5B874F67868DD2D5F41F3E5E59F6DDD2AFEDAF8DF54F49C9E6F6FFFBE96AF22F2466EEFEAB282BA62F4E868CD5CCFC4F428C826E886F6A48C4FEEFEA6A6AFB4F48242AFA8F4A20A
+:80B200004A6F4CFC145464AF68F8CEC8EF88F8C4C62B444BDDAB448F6CBC82F85878AB44AF4CFDC8C22B546E4CCF4DEDACB89AF96E444FCFF9C4D4DF1A4DF362463E72CF81F3482C8D2C8F83F33C3C9F96F61938DFDAFA99D2AF2DFB9AF89F94F49D9F6F2FFFBE9EEFE2F24E4EEFEAB282AACE8F8AFA685CCFCCA8834FC6E48AF68CECCFB3
+:80B28000ACFEE6EEED4F6FECF4EB6A6FE2B2C6BC9CFD888AA7ACEFCCF48684C5F8184AEFCDFDDADC8F65F15A18CF84F5DED8EFE4F5D2CAAF85F5686C4FADFFCECE2F8DF564448F2FF944DE9BE820021884400884410016084820C824844C22C824A02470480483048D24414A1234480088000084411E4841486081C04844846081288220A0
+:80B3000001F0CC8AA0483022302212902122150828211150842D14100A21406482422200422C08A4C0824C9244502C10041810081848202124714214642443012A4484F4DA52D024F51124C5F21124CF24F11124E7241D24AF24D141F24A9219F24A9251AF243924AF34B9A4F4429347822D914F82C4914FA2D418F8264A16F1264A96F199
+:80B38000225A96F5224A9E242DCA1F49F222421F497228F29124A3F69124A3F68124AB141F41B64A9921AF249945AB944B42AB9443B24A7934B84AFB244889F9A44A1FB2096D1B1F41F62C421F41D22CF11164C7221E6485E34156581D64AF24E38152584B42AD114B4A2D114F82F442916F82C4914F82D518B122EC51F2264886F1265AA5
+:80B4000016E1B26451ACFC912C2E4A1D448F22F5112487261F41766A5241AD921F49764AF68124A9B385D628B1A4B44831A4AF247114B8487AA4981AAE5A5F270B00000000004004000000110000000000204801000000000020614200000000002501FA078A032D2823A2122092282418A39C429814848368414792C82741424658484840
+:80B4800042008C44D8A2243122224781242C4264222863A224A222193882844223A4418AA441445832892483F118244E24AF184842A128190821364241014218181548040020020022228440086800400800280083081584284308A11200E09811182212246414F07D26B013E224D228C2221A022D2193022D121EC24287530088497128F9
+:80B5000025361646223424328C2408837428628421399228831158224B242C022D2C488A22BA81135A848D422A81A14812438101621218CD512F41F64B97006018001A0200488112885181840088008481480081200412004120028082885214008224208404488D818C9432844C8284024F2A052400002810010000000000000022000050
+:80B58000008644028400280000008012820200802112020010F455EB8041042220012C0200004898004448220000002122200248280000880038408205400211890400180022001FE90B100228A01290210000008A01002002002200210028430840080088001A02206122800214001228210000449FE108184400004002000042004024E7
+:80B6000004000000800200482302002200004082044002C0480080018002D0E70300000000228002100840280200000000000000000028100400120020010000282001848497EF400428A43022482021648800290841008E4884904440414A013028103218008002000000000080898488210448428800B5060041301400218489024A11EE
+:80B6800048028410080000840010240100602900504280012081022004000000824100F048DC10044C024C11821422C328A2188181008122480043048551281100830100E028012810044C0180810200188880280128824C0181F077E500008421280081488148248221450884894808000000412824C0180000302200008001800412420C
+:80B7000000488024240884EFBE0D0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000C0
+:80B78000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000EB
+:80B800000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000006A
+:80B8800000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0010210200000000000000000000000020020021000000001008240000000000D0DC0E40023011A021008C1101800100894108008440084100142400008601284004001100210080048A
+:80B9000040040000CBEF24106442A440081214002508206198001041880820140813014341880A1E8400241C88C21140244104003012101224018004004F2E054004C011202211C11814001818008911080084104818840145418A02001C0829224204001504240000484440040000BF7B0221302684218418004042080017880010112801
+:80B9800008200410011880084909001C081C01411200002412240012004200F06C1100121011121118410218C0828481800120C3240041811018149814202204001004141A0416240400A9411848180200A042009FA50C235221161268A187212A91188B211611C812841810187811984844841C91482E814280072E142B282AB414688106
+:80BA00009A86041218414226E8A1E2A4028D522812141002844E288D248D148C084B4348EB4F8032111053228721388485021812100284D018C1481AC22C00138204848093166832168802803114411483C12A2E18A014008501814028149C1883082848BFCD08213012848311113811321911082D888311088C01100413914849480872B9
+:80BA80004185A4829084485A8804002024266144234438221229410A8121262812042A9454E0D3032301C312480860419C1104C4328130288608114C02212AB14401A8452A81524838424C61D15129935888008C21C1144698148014E48184A121420083231116A4213F57031002230120020012448880021084018392428041882801000F
+:80BB00001008142014081A241444082541C81881490241000080346A6085BFAF07008002000000180016082C01406811008048084312020028224800004488608280021481104812684116080012881FC74182116262810028128C011088018184831826D1482223044883C828C42E16284508844981924129850118418E1C8449C2491E85
+:80BB80002889D18114688544322984C118381248188CFC9CD40048811A12084044418421814888218201145018801304201102A02148284D1844228008428061812144000089018141402874244824F2CEB3002321628681192201008412400410048011D814B288442888981814830423415882463142800240041840084022414888826A
+:80BC0000041249011210F8CAAA00E0211401004008125048001800108148888304002001422008CC4324882224140484A02828128180253428008441482212EF2D01002A818401848C012280280883123414841C418C02112A984800811138288AE442211B811634881F44212181C144002822100412280080913480F2FD25001008242C15
+:80BC800005804141428201988881007014010026E182D4923842C04C86184211086113C142288160C42C8243C25A44002180E12112A421482001BBE12028041121901100118C0141888A01888001801188019012921A041241874245880412C352424283046302222110165C424200295248284302144FCB014082248222022011088D14B8
+:80BD00008200830100518D42138216822102111528248441111121011C214181026041811289011200800480012C21F286EF00002111114200121120A1210000800342142008C800202864181014C1814811008382819412814C8408428448650840042142FD7F2450228112918410082A11048192848D841200E011123812A34288048BB7
+:80BD800058504845C81180220249420515A8484148CC528442284518911C1618A81449012848002FD10984800422165218288481146C088902101808208411828C41841C021820483186181E48A048281845A8248E1224122497441828002C61822222002144BFC40C2486429A41222F11331380F139281E18A12748181A3118430112410D
+:80BE00009B411AF32929281B42C3D628359383052FCD5C41ED8439F2422F4213FA142C4F41C2184F8C62862B6C897388945A4E382781DD1CE56481B06CB426A1134B524F47E13181F599741082911A5633182446C91887811445E128D88C01AAD8C4C81884113665B61D4142CA88887853C8C11D184945A2892AF1C88C1392241E111B8A57
+:80BE80001F149141448F4175347256EEA262A729C494244E1889F6182A164A94241A022828BF820F30423AF222281D2917868991288011A9111AE8C958888AD148188891194B3887C29E52AF837488C862F048181CF4582C8B128B548E2847134B511F41D5445A382B42C715899524CC21B212817239120C1AA4146A95321A52C8446830CB
+:80BF00002C2F240800842641480100006088000020811231481311282884111891284D92C08200C081841400480049082C48482241044400120044130E25C2122F22F31B511CF24943A5F168688F825211D5C9122F4219D888F18C888B911E180047D44FC777657C12B828F2CC462FA2D382F811482E68CB6ADF44F5A2286712CF67F656FB
+:80BF80004417C4C5BC31325C8BAAC5FCFCCEEF2675BEFA9212B732AB9995B148F61C34CFE4F71E1A211E144F45A5334D342B67BF170825A2552F23F33B311F177719F111116E683AD311F1111586B2A212E881BB84B988E881011AD19153DE4FD4F1FA388F8ADAECF8326AA79116F9287AAFA3FA4AD92F82FA2E8AEFC6F661611BD9DDA8B2
+:80C000001B63D3B5B8FE1C6EEFEBFC6E7ACFABF29A1EBF36F2AABC9F11D18CF23C3CCFE6F77A1E2B32226E722B774D342B77EFF849F212122F21F51A3ABF11D1B9F27B7195F978788B229F1353D924AF81BB98F888988F89F9149C1E181A51118F95F172799F96E482FF28A8CFE6DEAAF142499F91F4144AEFE8F56A79BE32CF81F1557FC1
+:80C080006F44F4B5758FB9F13B39C755CF4FFB545AEFEFFE5642EFE3F87A6E3F3ABA1A53B92F85A1378FA7F77C7E23F13C385AB562A6324B76EFFC46F212122B51AFA1F31B33BFB7771BF31B198F87F738389F92F3181BAF89F998B883F13898CF48F98C848B111AA1339F96F358598FB6F7E8788F8EFE6C6EAFA1F558598795CF87F7F894
+:80C10000FC8F8EEF2AFAAC8E7FD7F771311BBB9FA2FA7B28D745CFCFFF547EEFEEFF4676EFE3FB7A783F3FDB8EF3191B2F87A5768F26F77E1E2B33CFC3F164742B772E324B76DF3A01002901400884220000160812002011381146042810088394148384012084010021481884402862814048E48184825448200428F07D27308210D88119
+:80C18000B22A3111211A1418911892218489084C4888115418431228286482830585018A12B498224244F1912443721108167864028B1212258204842D1400269812478310C41426F1D887C0421F417228F2112C87141FC1724AD141B24AD141B24AB981B24A5985AF443924AF143935AF1479A5D81AF9B5488D915FAAE414F8254A87110E
+:80C200005FA27598E1A2E459D2A2ED4DD2A2FC91242D421F49D238F8912C87141F49324A1F48B64AD141F24A9219F24A925781AB9443B24A39242B94478329F9244889F9244A6D9EC04A1F416622164CE1C1726AF11124AB141D24AF4499212BB415B84A3924AF143134AB8445D81A29938A4F22A5144F821CF826D283C9428E21BCE54D17
+:80C2800042FB912CACF411642CF1912C833611A3D441961A19F64A1619E224F315288B8443B24A29B242793498926F82A4942E5AFF53040048000000000000100400002100000010080000001100000040042800000000004DD7002721A4004048018021181854848C61818C9288C12032388C8612887148242182081A22031A4214D12491
+:80C300001864818346E464110433DC8144684130488034148440B484F2746380220818191408504882112D181A384820120118823089144482114D21128926A42583144CE4143A81198882C1214E834D8166035E21832C021446A84249822288022814815F1C04262254281819040085045721882AC148452853818382190C118C7172A4A0
+:80C380002886781164C47688A61A1D4832288F18B211F84481281642E41419685664465524AE418F125418C924C24828824B21A428419AF24C17001221008481112008169888414088018182608A1C4208112818004250484921240214866412846F16082B141AB248080018484C0242000045F8365C0044211A1208A041008100100214A8
+:80C400001210812201110081002A28C59881002601A02189C128148A14C248A11914924189082083010038F0633620111218821318122911BC82E382981889041644488631388304CB2D207C68342100484338222E442E8C4160114D1841448AA46883925C1212238191124D418C24C848C32AE1438441C8A43B252001A432834302468155
+:80C4800041B8A2A182128100841890182A84614114C04C81004A4224C34828902118E04142382813A4244588D12A61111221414860818922810384418F18022464001008160844818184482149411194121C12088BA4A08422130280E82C318843728844041187416041C8A8863852830442211B419C1C882896943044121AA2822F2C0B38
+:80C5000045C212488024621426451424624240220180210288452A924816822882B26141028162141F413241449D34260C00419416B81822932444442800822644882C22F5BD672081922816C8288100124042C411C1228D22848534144D28C440088CC9A81E421082221202140083820C4C34248100008394241818D0840400108221F1D5
+:80C58000A8C80000221210088400840081204142092A8142240840914810884144B428840400201202260841194C0121890C296184002AA12144D08E09182913081E282894174244412C429811C1842602C7212E188CB2A8C1244598888827821A746A6215872218852412B831944143F291284D282A644284418551489836482281244206
+:80C600009848824982A1842624D47F0E414823E281224428048901800228294198184015445482284881C0218002282146A4424400415024008C021287161904418D94F042140090283218F0A32410024048C81881810040088CC148132201404418088B84848341D818C4288904112246011024384C1E4889024041D8141488041828126D
+:80C68000204124458481F4EEBC80C2242CC424168222824286284144822808100226084A1A1A040000221A0484841C112144982128174812C01230121554B2459842128C0400201132143F67060081000081260822608228000037816081112A018228843018184688CD14118044014A4104902C8110A812121C1108808424044A01F03235
+:80C70000348021011A24428C41044C32888C02204111190A1828200881238C28024449722248014B42210000188B421C9141933221002811C328A8212082820226F828DC208A820281200210085048888420C21116C12918848028A81228A62801128C1404200820A1811038414C944484814D28141212002081242246F97613001642089E
+:80C78000000018008009009C080000218001484248424440C8441820820280023018181800288302C1100412612596441F5A094141432112261194228022514200C02644444C084829127812448484088822001C0249C244244CD48182521890248002290289022A24382C2042048921F2B11A00212129110284200283080040088D322636
+:80C800008801602A1C04844A8128C414814301C388042002908442894164142084C51413C68C4684C4244480C42470950D848005282200818460429024882042018008218982418118022518011421114D2816D48414D4490419A8482812421D1480024212844AA941490821F0E75DC024BAD36A22D36831382E2881C0288F88289288604E
+:80C88000882A92861698AC8D242EC2813A3813418B16629F8E66848FC4B724A1442E247D411E76444D434912CC588F48021B6B228D318D481E681AC1191AF13CC88BC926C894621A84E193E742F1429D1042648121D084427426E822318C18C0281AB8185C9487B35135215188A6E9A8B284F488881B81813088234237888D188C58141C22
+:80C9000044B428E856F6D4241F9288D5D4D16D71517E516432C37415D219E64C01C30418472440E684F646FD60234582F1443A2F8282311828CD28221AD28AD2247184081119F22A131E182E191AA124818FC648C2681E4829A87143F158484F91137448346143AE21C41F81712891148F943A485E492AC431B9E1B254486688F2441C7834
+:80C980004B654F41E642F9746441C16F47080084184821442144218421842182211124100814C0212414241424403288248348220882004048014541180225012882000000F0B6CD50641247C14FE3F35C4E8F2755CCCFE2F21A3EAE2E4F8949F2929A4D16897924F68E8D6D2CCF49F929298F2CBDE8F481817FE4F46E6587183F17D72B14
+:80CA0000FCEBC2CF27F6DFC7BFACFCA6A28FBCF433323F1AFCB4B6A7885F51E29CFE516C87855FCBFA1C76DF42F24E42BFA3F67B51BB11AB318B848B228F47A3DF4F46A6CC4F45A5113E24B7FDF034366F6556E64FE1F5586ACF65F71812A5F21A3E8FE8F2949E2F22F2B2BE4D9689DB65F28BA8ACF38E9C8F81F1C9D3BF1CF489813FA4CF
+:80CA8000F56E67AF12FA7B71BF24F4BBC28B459D498FB2F6AEA2CF4CF4FDB81F36F4F6FC87489F58F844491FC5F67828CFDFFE5C6FCF16F27E799F82F64D6D3D11AF84754CF46C784F47B3F4FD2424AEB22F42F3685C8FC3F3A68D244F61F1346487812FA3F31C14AB138FA1B122F21C38EF8AEAEBBB22F298B8EF48D128F93E1C4FD9D96C
+:80CB0000E6F2969CDFD2F284843F9BF9D1D1CFD6F74446BBE69FA7F7686BFED16F877615FD787F4F47FF7AF85FD3F321413EF62BA21F11F2C1ED1E248F8FF2BDA48F23B729F26A7C9F13F251731F24F41D158BB73E347E34EAAA374BFB29A455CFC677494BF234366F61F63E3E6FE7F33838EFC3F31C342CF23E38EF8AFA989C2E22EF899B
+:80CB8000FB8E948F22F93F3D9F9BDBA8F29E9DCFC3F3FDF5AF8FBFF8FF6C6F6FC4FC49489FA7F7686B8F1FFC7E68DFFBFBBAFE4FC7FF72FC5FF7F3E7C7AF43FF2CACDFDBFA6D6D8F41F2F828DFDFFF79739F56F27B7FBF93F25D5B9FB4F44C54CF46FA6C7CCFC7B3F4FB24244BBA6F46F66474CFC2B3F605002302234228422822284208C7
+:80CC00000080421838118B241328143148B04812B1480281492824024D8100D014C9481CE8810484E08104484048044460446044F08CD1602A1604160C00104888086088508414535112002288458828621420B4240158E08258412A2418C8242E11130811421118117011684432881E48808421034579AA052CF4112485F2112CCB141F64
+:80CC800041324E1D24EB141F41B24AD981B24A7995B84AB925F44A9343F24A9147822D914F82C4914FA2C4814FA264114FA264192E4A8759ACF49824ACF4D1242CF5912485F3912483F49124EB141FC8F64A131D64AF34D981F24A9251AF14B9A4B44ABB24B442792498924F8284F9244A874DD0A2F511642CD4C1324C1B61CB141B21CBA6
+:80CD0000141B2146F411284AFB152889F834488F2411F44AB143D212F936481CF924581CFB24C816F124D816E1827498E512F498241CF5812C8CE149D628E14932481D246B128CF22E124CE266D9C1F248B251893994A931A42B34478A29F3264829F9245A1F87070020020000004480020000000080010000000000800400000040040054
+:80CD80000010080021F04AB5002881C018400884284012485884156828811821D01834142828226082A11028028C282201232848A8249C922C839411001B14453148280028004840FCC589301292222222830138491148021B8182130D93018631481F88821261841788A012214A386C1B148C8424C11546921180B382741224012E1244AA
+:80CE00008F34C311A49648A21446BA1C6C2546B44CC1846E1142BFF80BA016812812108822C12800274289D884459891A1131962289CD614618693AA183290C2411971218824D81861254E112388C5484B528962428B611D141782148757162484C6424B1418801504EB4127CD9012200283628120110C24D018091C181108C0488D2100AF
+:80CE80000022702218E882344848C0184C02008AD222081C4148024E121224178885221168884E224954488AA434F08B27000070220220011246011C019044181220286488000081109891B02421046022100429C1442A4838480082250100441E48000020F2D95780C32416091911445186D048288149C8951488841C7868324143C2414E
+:80CF000066DC18C26883A243144828363A4828806144221E218D216C98381B414886A214BC42489A1882442E582988A4C34926A2524CF48DB180429419242C4214711804C9C91118184C094C488869822914A4841008C04811489E21305400120053D12162614813CF488B48188722100B008F61B248898428828283F2ABF42021026011BC
+:80CF800040020042888541118184118164186215B84C322166C8282A0181703832282A04306429821288E8C2010023449188901A884148003A944420344457FA6041209212C0221824518305648AB1280128214A0228A22364829042888412428901288A44092883416D12C0E482904227410000411214004D12180018DF870F8160848916
+:80D00000524811100110C841151805216618012410AA14488E182A288642624219022564141B42233128684004830128422A08614C01448333448608282138F0DDB234241001428100122038184092548186041210041100004994A248701864A2326024441AC8184818222648190866088AC44826CA411228284160C4484D7714290117C7
+:80D080002232C43C0224113088B4137914C844816B841180624283B42801A9284228E728D248C6218D1247AA4A93612366428969114C84E28128C26B4D188AC222B044C94C4C327230A84C6241F04814F03754502410482844881191141E48441A9428112D122289A24218908260144842A02445228401432244082C217124C128E0492449
+:80D10000421882048C04001618B814041229022848AFC502148002190300802822D21409882006660800588283C4424603811012A884368122564222228B428A6182298856C1149048000000291404C84CF239BF002200848490321221914C01D081422141C1121C011440B3811108860214453AC426244432819045442CA12460411128B3
+:80D180003013101A3416231422022181008FB1061112808101002028291862184813840219489882481592880080226812112C082AE8840810290480641288102102812100108282B3222402EFC5011642024062216698182922124304502222215022D01845C8E8422482A884948B418E420027E15470610231254424088D24A02410123C
+:80D20000344422414B2443120441001F3F0582121B122822280046018A024C48A12800221C12012100838401820084484220A22822830200848140012400C0424822004822C248DF3B0F240046480981421210C8189412001A58124E1892A094219011808164224644E142C1A11441450212442698866048818410011242414084048849A6
+:80D2800004417F190E004800812D1121100A23828122411A988829082341810180948824422C4844421C4822014180014E261811490162908482A028202112941843016D4D2001948C01121C61A285C12216028009296124811008890818003018222783889311281821417512924810187428C144200646082120221412B8428281028F3B
+:80D30000BE0A8422584002220041D048188242382411008AC249908B8C8413C8882280288442D12224480C482225B41122088223124244810A22440044006122DF550F1D11AAD111B118D18121F12862236724AB221B28AB124C7881A22819E215DA3AB84224011D11463B914A964887822E422E428724171CA14AF451613CD83218353547
+:80D380004622B191E56AB412E346742DB442C4212518C8C4244C2A2246A4228F44C194418FAA026021608450A816D188311AD032E829B28DE111E12261152D52848E8AA6F1DB488B849B5A8B8437183011A999812F9B95C45D3282AD8C2F42E64B5342AD38457C28FC22ACCB24D5FC85281CC32117274038444746214F24562445B842A464
+:80D4000061282AF2B554602129B23882F2382329D383C1221D318E868F83C1882711888DC9E7228332219F13D3ABC9138E481AC84885EA8538428E28AD281DA4A5EECFFC2EAEAE12578843E43246F722616D72418CE81AD838487821028F34F4849625A2214F264494322E624F417826B8E4C4443F6903115081100111508130812482209D
+:80D48000084012113821200A231218221132183928812881285112120029082D81D012012C41882188012C01008140F48CB5343F31F1131337121F13F33939BFB2F23B33AFB2F34B5B6F72F217933F33D2DBE811F158EAEFE4F49A8B2FA6B6F2DF28F833E22E68C82D623F24B2C2B422B752BCDAB5A2F3A3383B678F2EF34A136D17676BBA
+:80D500004F33D322F31426CFE4F15F9F6E6A6FF6FF545C4FE5B531F361735E5C4F69F194144F44F5F6B44F67F34464CFF4B2C2FEF4C44B572B263F5B4BF313133FA5F533311F83F73919BF82F27B5BBFB6F5535375F5979535F2ABAD1E918F817B2FFE9B8B3F24F6FBF9AF11F83AA92F8EE612AAF519BA289A522FA7F4D8428F2FF6B57F5A
+:80D58000AF98F79A18EFEFF2FEDF6F44F577663F61F21636E7E5FFFDF1EA6EFFEFF6EF7CDFF6F664441F36E7C757ACCAF644546BFF1E324F44F64C2E6F2CFEC6C44B557E72D736243F31B133F729199B339F93F32B3ABFB7F76A6A9FB4F5A6A63FF1FB83A3BDA91F19F1D9CA6F66F4CACB6E6B2F37F7726A3B41ADC82AEE38FDE3832F24B5
+:80D60000FC3A6AAFA475187A16F7A5AEAFD6EF4EFE5CCE3F94F4E7726F53761A6AA1CFE6F577DD2E2A2F14FD585E45F623243F23B24BF7C6C66F6868212BBE6F66F25674EFC6B2A6FEFACCFAFD6434DF824CF31313AF23F73B398F86F339192FA3F37B59AFB4F76B7B6F72F2BBBB3F22F28FA91F11F979DAFFE6F4CBCB3BECBFBFFFF3EB88
+:80D68000BF99F9E9E81F11E9B4FD6383AFA6F61A4AAFA6F7CAC8EFFCFDA77FAFC9F68434CFEEF7E7FF7F6DFC2767BD1B2FA1F37C4A7FFFFFA8AA3F3DFECDDF5F71F363453F27B44FF75E5E6F6EEC27B4E2FF26262B75EFD6B2C6FEEECC4BDD4F44F7573180012100842C216122402209826081241130114292008100218314169882B024BF
+:80D70000086160123024842A48F8248184268144A3412480A2416C8284024C02FF32012B1A9012281828A30620284208114E122246018F240A890814ACC481488315A2282A61112AD448925213A1C21A5222162C04C044801412110A259444250210142A08488FE3092D421F4152281F4132481F41324A1D24AB141F49F24A921B28AF245B
+:80D780003985AB9443F24A9353F34A9157822F14F9A4484E914FA2D418F8274A16F1274A87193FA2645D2DCA9E24ACFC91242CFC9124A5F3912487141F49B24AF98124AF14D941F24A9319B24A5985AB9443F24A924B422B944783A9F92448984FA2F46BAED0A2F41164241FC132481F41324A1D24E9F11168A7641D24AF2453858B1443F1
+:80D80000F24A974783AF145A842959862D914D1A8D916DC216F126CA87192F22645125EB41C24B1FC9C24A9E64A5F2912483E448B24AE149B24AE141F24A961F41B248DB85B24A31B4AD1243B24879B4B84AB13694922E5AFF8E03004800000000002800000000001880020000000080040018000000280000000014E068041290222218D7
+:80D8800083020081888A7288028246024002C218488184228732622B24524C662222AC0223C2938D24004AC244148119AC842C4AB848880445A22480A2844A9148483F3D4611A328121611D41251491C41D214C161009412814B42608826188C0428131A0889611889D22308A0411B864222182F12A8241C18EA22A4286022204C21F14286
+:80D9000032465828467C4812246A1841EF5A47331142E01142C41840014599E4A22A58188A61844890882578C42A854438A1AE1885D18234C14E1A5B86198282B689A4241B946F81C2E1E01678426436E01418042BC2C6A1142D224C744A22C4222CAC1C8F1824F5B14300282B12C01219521C12241214502800D04202200200228180E272
+:80D98000228122022502AC81128242026210088B82E026A8288184A041812285C448442210F4D8EF800100180020020085618885030018118942384848302510B1481202004100828D111126018592411828229224822C012800328100F0687720C2122E1A269123111E23222063987240044E9A8C827A21E88411E41C9321848314D882B9
+:80DA0000840438AF442A63828188412323028D4486E318117C247A5831482E42162111AC24108C84A416124249F8DF5C00122814230322282082880289582196C828221E288944288296488426C9481C84C4326212102448028B21103D8186394D1032689A1482582C4A02004AC2181848888FEC0332D082912211143C012812915285412A
+:80DA80001468242048611143E2954809426400831272842892288440A41A11114A426221C03C1F8106223C81810128452824A1420044AF9C0C10140441304826142116287412412411A141286024822548280149C861222230124412142458874240042EC86072424B12824649189A482EC84E11121210342218287FB343E181222181224C
+:80DB0000110800009362882588028118180021206144881842A93814C0222AC42919811298C828481480A1188100492284414418642812142180D44F021002610014241212000000888180A212601110A12425041246282201214800103122C04C400160218008121190448C463188007FC845C1224921912241C049241210F8492213490E
+:80DB80008411E181981880B6820189014246B412A4242F8138582128234568344A223288458396698D444D235287418212A12914D8480B4CE141D48247240268AF940D1810448441084C42A1614444854208202482012884144025C2258012A4214981322212184480028220C18128D0C10486A814488B148008608818F023251411215052
+:80DC0000128148149C44D241468844E18124852488148804208A028C0428400814411210821288C822A8848183364A861A28A84824869C86A308961228082F48F4396B409411C128154202290180483422289028230280C28814482184288182214601008324012419942213F14118242C848192514CD1840119810445921822189018F067
+:80DC8000B5D76014288091411289042FD1042D411C8204830248C04810822241C888244A0140E2144988C1226024183048002136018542C644464471820824A04821826282F0CDC610021181121386B348024A981483C4984609004E221C6184ACD1185581C82501815668811460256611A228821534111931E985A44800002A11829841C2
+:80DD00001889B12808888008A8CFEE03922002404871222253422C0118C01290222D222C8121142824140225022721502228251C61274861B01262414821902848194232882B411828419014408206214E97C04418442827842084211469843042508528C3C5184B249024484D12C042A83AA8480017838812006022481592481441C4233B
+:80DD800025618184409882812382C288428C082F83089FB90D404208101408008240361148000026081002A04140882404422621218801200849A82142808A242A0148428321A44218220028ADBB001419822131283890281A5214165184800290182225D2418402004002848CD3284844382148121C044841188C82039800501A30148227
+:80DE0000491152126A81C121247F24078C21825481800114C088C024242C1204444084A112505288EA11A8A422428034281481418608482028B281051021C244421A12084830242A14022148DA41D344749163C21CF248138F56F661334E4B76F46CCA8FC4A844AF34A244DB472AB2CCF15852DB244E4A4F96932147C5C83F247428983AE5
+:80DE80008BE483B449F4C2118651E41395229AD46253924E92CFB8D724E31CF1187B2F81B7B1FA181416DA62E138ECB1E8457444A889CF81F8D1B27E989AE891BA82F8E82950112B2211A5486881849B11A9D112E218912A8E14AF91913229A422F02214AB328E442F149551859228DE427A642B2B41B41F816CA13AD218E26D4C322117C2
+:80DF0000212B621747175CAD244287224E121F18B468FF94882B1439E1A8B128E9A6D24206207428E366D628095A81D11CF231121B412CB118B422D2A17691B4157431F3144811C4A42D442F82E2A124311A87828E232B2C8E8828A425C81A2A7128B26E965A2E182AB1427944019719888F83ECA36C42428D486E2A218B4497818B4CC35B
+:80DF80007292564EEE122B42AF28A2628A012B3A24442444604800002008004508411014180411818200001001008840011C08881004000014000084400884F0BA6AF071667FF2F237183E163F17F74E54AB46BF35F57E56AF36FD1AD99FB7F753555F5414DC24F47A54C7646B74EFA6F42B4DCF81F5187CAFA3FC6AC88FAEF45A1A8FA6B2
+:80E00000FE5A588FB5F5FAFBFFAFBF3242738EF6C2422F21F1383ABF8B72DDF4DD252F9EF462488F87B6A2BAFFBEC2FEDADC1F28B881EC4AF22E3C2F4CFEFEE4EE6B2FAEF8A8A88BA32FAEFEB231342F57F7656DDF21F13F517AFF5F5C3FA7F56343AFA5F56B53EFEDF57B7B3F17D74CF51E122F62F67A5E6F64F46E32AF66F6131F1FC4FC
+:80E08000F4193FAFA675A2F22A9A2FA7F3723A2FA5F5727A3FAFFF567BAFA352AAEFE1FD12423FB4F422232F3BF34E6CDF91FA7E5D2F873478BF17FA1FEC4E6AAFCEFAC2832BF84749EFC7F6ECEEEF6BF2BA822F8EF8AA888BABCF4FFF483C346B554F13F7383D9F23F37F74AF17F73A73BF35F47B638FB3FF78FFBFB6F75A791F55F54861
+:80E1000046AFA4F47E52AF65F74266AFA7F53751EF93E753E722FF62EA2FA6FC5212AFA7F77272AFB4F5F2F3CEE32FA1D2AAF2842E4F6DF533723F23F39312FF6DF1DD17BF9BD5EEF57A7A2EB29F47BF6AB7CAFF99921F28FDA4A6EFCAFBE6F46FCFBFE2BFFABFEAEF8FFFE4F6CD27144B559F73F71B17BB36DF47F77B39BFB7F76B63AFE4
+:80E18000A5F57BFB2F6FFF6B7BAF95F74D51BF75F56A6AEFA7F576722FE7F7627A7D193FC7F7393F8FA6FEA2A2AFA3F47232AFA7F77A3AAFB6F7F3F3AFA9FF526AAFA5F496FE6F69F43B73AFB3F39B9BFFA5FF95B3FFDFF53E5EAFA7F379BB9FC7FF787AEF8DFBDB9BBF2EF59496EF4FFFECF66FCFFBB2B1ABFFEEF8FEF8EE72EDA9200237
+:80E2000018842E118460812416088424124088E28114281108008B241008004200229012A012841884148C6422008420018C84E2818422A924924A02DF2D02184081021A2406229A344A288B1411144842A024A024C0218C840828488B24188F1882A82484C22111F08128432449A3212354816A89B248398120822948A2480088826F6C24
+:80E280000D2D421F41522A1F41724AF21124A3D441B24AF18124AF14B981B24A19B54A79A4F84AB153F24A91478A2F14FBA5488F14F9A54A1CF8244A1E214FA264191FA26459ACE449C24A1F4DC2C21F4952381F49F248811F49B64AF88124AF14D141F64A9219F24A9259F44A9143F24A9243B242792498924F8284F9244A9F270B2D5BFB
+:80E300001B61AD421A724AA321A7141F41724CD141F24A9519F24831112B9416F84891228B9480713218F824181CD9844CF124D896E18244C5598AD2B4F5912847829A14F8112487221749C3A428A9D141F24A9619D22A9B25AF2429F24892222F243924986B422999546BA80082480000000044800200000010021800000000000048007E
+:80E380000000004480020000005012E085064A11044713A122493211811901234441614126882142A5215484853448C42290448C0860448842325014672230281124163428112682082442244C44B24461228002F0B1A86012824301450396281214982A1B128321549242421240AA244F12A52144104894284C352900614024248221C1FD
+:80E400004222CC932846C2282D8846721842446841188183C218C9C1448D1126F2B716A061C2121E278429B218C81181897124E812B52121942D892421022C1271186481AF4114688850484A698250412142898364542129C56819C2242F8122D418B28CA2482E1441216443542836046991241C7112E29801144441501430242841112551
+:80E48000028111292122244165814E241B424C024422442A5448118064484004284B12400289417428022502A50283248101836483814881223F730226128111911412830226423828901200110089028922026014001312281268820020824262888002C4830466420890182044C81210184434244FEC0E1594144450218C9214A1127098
+:80E500009142484344D928531850248119041E680083A242C14C0762B02624268611266322388F51F422482B161B21A9971848894122147834AA244E284E22624008DBC340C5144C0174224D328432B029481812122952822012E812041E4880842232288C022E48856244422224442A818271414862821C153878218C018944384489C4AF
+:80E5800048E084028441FF870F223110216181844042C812C0114170111801850684222840418844B514240222222848382824862AC2362E484B148D226A0146089012C03A221E2262214441227FBC0F202202004169118314240226021C11C8314034122314341C64003028812187314642480481192281044B4134122230484441CC827C
+:80E6000091441800B0420116F23C362400112820B21834214424501C002821124612189221A1A021008E4310014081B134844414984821441181424112142222C84AB14208C0144A123222E085F8BA698042441C0321008001427018818112021122001C641440084A032942240440A2422280220128802444082121C02200A218103848B2
+:80E68000D0B14D223224555812004CD52542A514218470188321C21824156A6213334859744C0184144828A952428721D042C2442D242283229144148F4244331452948314D242CC582C82049A2214327846C88A6D58002082428252281200906100241311B231040000224421422B1285018024C55880043428188081248442840240A62E
+:80E7000049441244320080F4E92D2021024C0115144604261411021120020010518224412110A442460200A12C220485C32281004A8204222902C04880C41A28404A982A60869FB10D1416110189023012213120219222101102002302236114194173215824224A225281121C64228418A0122961148100405261421AB2220122184800F6
+:80E780000070AF0D1820C2218001000000302840284218A8244008842A0100848C0284288024140885E22204242C011881261218084082018041027F1409250800009111189018901290130024124C0262001026C518160823218402404A0820844121324820248201422A1102004C818441F2DB95200820012902210070220821816508C6
+:80E800002150528420144B512114844E2224100860220013924244001212328C23010020248111280118242BA1002250142B125481139222252512511214211002290121848084474CCC4644C0422054924220013618228116088120120822002A848204806284EF6D0AD0214105855428404C840100800126981C22800118410024228084
+:80E8800042816211128468244800848123140848214CA414182902A1A428228484F04756008422221440012810080028834251822821450183A4128442424004A448000013084884A4C028482C011140324820110880248282F23D53401884042C61812884602240044C022083022889C4442180018821848C858443012901299258604498
+:80E9000044182D12304840868142424648624225025042F06ED124121FA9722195117C711A1CF811242741221A92292B21412783C99222242B224B22A3764A087B471712115D19AD4649E182F44A13815817A2224692182AB24825F4484623F2681AAB41897172D212931E18AB272D4227A12B3527814229F16838CC827458061C410116AE
+:80E9800075389811155212222D118579121251231932239CB122C11AA5C1544964A1842D484D64897224C842872426F8423124124A022FA1548136C21C27811B74684678228814A8652B45AC858111E862133234213662846FA747012E14284F2282D234722659AC2CD245522240429118A48722CD2812641D29288B54548562B12F64A485
+:80EA000025AFC69232682E48A7834E21AF2194621F18D22AD182924E2E11853A12181E6289732102850A4B228B24268A74283A4880F128227D84244002400880012C0118800110014004000044604120010000000010040000002001430141100441F063BF50216FE3F337145773F7727F71D1F7F23626676155F5191A3E22371175F71382
+:80EA800019C5BE13F12E26AD2AA7827F91F154148F85F12A299F94D4BDF35533C7E2ED56BFB2711AFA295AAFA7F54A4AAF21F322223F99583B8D2AE7A12725A598228FA7F36262EF84F568481F5111F84818CFE7B752E747F55A5CCFC6F678728FC755C8EFE5F4BB3724315FD7F734367F53F73537FFE3D37FF23E2667617F51F33D3EBFFA
+:80EB0000B3F2332775F7131BE762BFA1F136362D223F32F2177BCFC5B558F51B1B3FB4F4CBEB7FB5F736BEED76BFB6F75A2ABF86B7387329FB32322F26F2FBEBB732AFA2F25A4AB7959F12F42822AF27B36AF65C7E2B77BF73B71A7148F86C6CAFA4F62A3C8FC253EEEF47F77A7C8FC3F36C7E2FB746B322F23474115773A713FFF1F11BC0
+:80EB80003FDF7253225F7151FBAFA2D333F217173553FE3F31516EAFA1712BFF171D6F47F368289F96F34D4D8FB2FA6321CFE7D12674317312D232F54A4AAF84F412382E223F39FC12122F21F33A266F67F21A1829F3683A2724AFC5F5381A2F21F31A12AF84E127F35E5C8B466F27F57A78CFC7F37A184B578FA4F5B1C5142AF23D777578
+:80EC0000F777354F73F33F3FBF71F32F3765F62727BFF3F32B3B7D236F615133E7F2BFB3F13E3EAFA1F32B2F7FD1F77E7C8F26F6495B7FF4F46BEB3FB7F7E66EED6EBFB7F65A2AAF36F77A72BFA7F532326E62BF3BFE3B1BAFA3F37E66FFF7F27B53AF23F37A32A724AFE5B732F35E72AF21714ABA72F34E4EAF22F27E78EFE5F57A388F56
+:80EC800087F37C78CFE6F4B4BF80012A0122842E124001248434404108C022114A0242B048024A12B2480220324821302200008C040012241E486081248CC4224880041242F08814208802124140433C24408102112523522812508425011841404804442128AC04184A4212E1124198121262A01600284200128122892192182A1448F3D5
+:80ED00003936C0421F4152281F4132481FC1324A1F41B24AF11124AB941B21AB9453B14A3924AF1439242F147924F84AB54F82C4914FA2C4816FA27418F5245ADE252E5ADE25ACE549E2A2F491242CF4912487221F4932481F49766AF1812CAB141D2CAB9619B24A3915AB9443B34A39242B94478229F92448984FA2D48A0B6D481F41D672
+:80ED80001EE441724EF1112C83F41124E7241F41F248841F41B24A3A15AF443835AF5439342F547914D85A7936D858FB24521CF922CA8D85AC65581D1886C41B9E24AC7591CC5A1F41D6287991F42C129E248F347181FC4A121D2C8F445941AF243B158B9432AF4428F24A9626D84AF92248AD942E5ABFA90A00480000000000280000007A
+:80EE0000002180018800004001608280040000004004280000000021F0FED680011440420381348114100800842A0181111284450828100AA110C22810862392112023C41185E1421161848041180843022C24C8646840F2D7A680E2184198381222224582C222A4002125A1249048142612880228261891281342A4248452218F410446F2
+:80EE80002448082924D2688412C86834224210D228A2412648888211D814048DAB142AB14141C118122821603250257028023922024A0124A01281A3028A018441A3446825848D474443E6846A812C8427D68164928C3341C324A243842D2826F82214402AEA6132484112AF9B08008128241122C4218C120A008014688214265818004152
+:80EF0000893221893223200221281880011400D02401418C4203000042262804422242F093359014111828610012002C01400800100A4484811302406482965482442588628200E012A121240084188C120200240084008534242848AE2A10816218601139E13811C41232311332112418211A84C444C483C641C04C2448299642E014C23B
+:80EF80001826C654422229F62512814D8A4E28497129B411E6828418E88194198C14B28812082D58838424442CF2AAF21041C111224C112118062C13118141082120445C84830284810041E041E892648189A241842C222691138C322212999231812C4248284118824A48781208453844844AE2BC024C21220825311213216121803122B7
+:80F000001190128005230449D48104471630422D622E48104254624C8206D041C2281E848D42444446883788A041852144420820648442224302DF6A4DA31200426213024018124482511822417086838421122A4168A41048422202873678290123D42A820242141011C122C0431218A9D2429B41421621022B414324F1C19510442432D0
+:80F08000421002160144141484241002488142186100181004004001498205818904C128844C11240444222D481870120428201182C218C7D90011433111D06841884491280010022011381110024001841014E184410200290200241A921A122382845118320000192842E124018C18085F760921516C1301ED238442944C1241311800EB
+:80F10000411287249CC1122A014009504841118B2590481AD44283159222894222541A8433D214642485A16112A9741288A9C168A014218B94C914F87F24B024012021260113414248042D221558224032854248508418304825082410022722282428481002CB121A826141A02110112241322425043822188042F2EC14000051100111DE
+:80F18000848110110821210000191442480440095140A42128288002007042082222501C00804108103242230200AD420050424218440000119014008081010000814442408C24642140220412438114263114211092228021843148222002840020F2A5F7001211401512011120E42112014A2201239318A44068141425411848012424FF
+:80F2000049911212121811182A41088D110019A121844C410A50280021104242F28FD1105214481218122301501C004061212400250100281044C362004460845484690628810011412514582600A143044724440022462404F0A72820110800204211080023013120013824008442400246584821108814982823E48443081A84218274ED
+:80F280004288243112004528A848482A240200F0D44D14004CC4145024480010010000004800100211210042856281288582028C4281C44800214128131244C44A80C4282822818122220087DE4041021188002602158202A02140045124844225054400000048401404414441446551C2100844914C840150220040018480F2A68E20390D
+:80F30000810051008004242E11811880013484411115484151221C44D1611218861404000016F2114A85813274844082582882812D8441261C9228004001DF1501152895410050214115024014C1241B2124002400422184384488211148C12C64165D424D12849044902410280280C424F042242004640021422504BFCE4892118643D1BC
+:80F3800045D4410100278490222225D4248141125214112114AD481C14DC43D212F421431548D282F4164C2D742FE2E494E6429122435228F951214D4826D468322A4574447852F2428824C784E5F2288823522A1CA2424854F012EC143088311E1182453343541155C942155381141F1104D021F2581881195415178284149512187E4882
+:80F40000714474487264324445F216624CF14925444E46255D52516548D221D31852884B11C7C11664424F44D224E282F22A42416214222F7D0716B15551447014D142E1319221851358111AF31811122F22B216A1112B112722457A4202811D4745324425E872D4C54482711888733A14A8431AF1141836B87CF11832AF8523E684726247
+:80F48000F11394388D422B4429EC845E22424284295282242CF2F5792400008001220000000000100820022210010000000000000024126081248400001044110441F0A3BA3425F1521245D554D414F815151F35F525273F3414F121233F31F11B1B65F612226F61B112F124247E62753F4245044E654E6445F62A226F76D67654226D4678
+:80F500007D2EAF81F132766F62A2675F5173195795EFD5F67335BF95A5315AF52E2E3B887E72AF2DFD4654ABDC8B46CEC247628FA4F46E2E6F62F26C6C416762BF3A43E131F1125965F5141547617F71F1535355F74B4B9551753F33F33B3F75F713236D162F21F136262FA756F72F24F465641F16F654776F74F6A5B79F24F462E66D4E6D
+:80F580008FE4F41A5E6FF4F47A7ACFF3F7767E2B661F17F7191D27D16F55F67535FFF7F776745E52FFF7F7EFE88B77CF2FFE4E54AF8CFFE4C44F4CFC44468FA6766ABA62F66E6C412E129F740B112F21F5151555F5151555F743435F72F2434B15F921273F32F31133757411F216162B115F62F37372E57C43F12F2C1F12F245555F46F40E
+:80F6000044C62FA2F266667D4725F21654EFF1F32E2EEFE2F6163E6F47F631718FE1D1FBF15E6D6FC7F3527C4D2EEFE4D4FFF29A9C8F27F6DAE84B44CBCCCD44CFAE7E22F2464EBFA6B262F66E68442E324F1E465333BF11F117155F117194F415163F25F52527BFA454191F72F233335F21D347F131126F61A1115771BFB554CE1F14F4BE
+:80F680004F4C1F14E4B4F566477F77FE4B437F7ED6F7F44C4EEFE1F45A4EAFE7F73F7E6F67F766645F53F7181EAFF1F156657F57F37B6FEFE6F66E6EFFF5F7FAFEAF27F7DAEAED4CEFCEFCECEEEF8EEE26F66E6CAFA6F26664CF8646E422F26B9A800141400214000000400224135128201401201402214461B026119816901200501250E8
+:80F70000248443820448804442C8244828480000ED5C40214121412101100800A11221001002254128548140621484148C048C54482D4A804454381634484C3266101A81C1282D124588819488100200008FA4036D421F41522A1F4132481F41F24A121D24EF24D141B24A9961AB9451AF24B924F44A9143F24A9147822D914F82C4914F04
+:80F78000A2D418F8254A16F1244AD6E1A2645DACE44DC24A1F49C2421F497228F2912483F49124A7241F48B24AF11124AF24D981B24A5985AB9443B24A39242F447924D842F924484CF9244ACF610A4D481F41D628F41124C39421EF22D141D63CD141F628951F41F64AA151AF74B934F4488543F24AB74B42AD9569D452C95A8D955DCAB8
+:80F800001E844FA2E41962A29645EB5962A217C92E4A1F48F428121F4932481F48F24A131F497248F29124AF64F181284AFB8528AB9443B24A6982AF2409ABB4278229EBA2F5D5DF2028080044000000800200000010021880080000002400480000000044000000000014F0666E4041611111441042D182819142804402C01150822426F4
+:80F8800028420129C24A28C12311381220424422041420C12286A221255838D0126181D446988C481820021282286FE341C232922136AA121141212601818118234454812481100BC3446484414014017A487468C614812D11269122C353B2172813916C112681C82846C24123C1142CB418829C14528CA22854F0BA3D3021231CA12128E8
+:80F90000003522C1124944A852250280512AA4A48722461CF11842228221450A8BB44C714502C48501421D2419341226E2E8E432414838242B14AB434D1818812B411A64412824121C28F3ADE790121391121598161161702801810048441548011001224440C4484C1221410226E8414222F12243288D12843C381122601213181A41130D
+:80F980007148B484942882A04189224A048F3A0590212100112100484A21014004211214001E4840228404492181244168411820421408181283044280212804000080844108F05B1A00002381811248731984021421142921044C042538522242420048625B242881248934485CA1142800814306478213C1488494278124484C428804A6
+:80FA000000424443F2FB550026012180124232186240021418460200304228C0424848422086844152488C11A4121008844304CC82119818AC1808424C4208802401444CF2E4EF00AC04181811841145014A311144244902B014444388915A428001E0416651228485A141481781484C0620A12146081C240415240721004200704208F0FB
+:80FA800037F4902150484443024825C91840480821488481608118112013C84214812644480C83043014000041449036CA5228821842888127414220B828C128C11284AF2248820118228444004624042C2401004C51222014280200242242324A430848893122430480010000100890420082240049A124224CF22BDD0014112301A593BE
+:80FB000014800219014002112004214392144444282810480482180000233111284828490520058051281A44186C854983041084D8954592111483B1221144CF168483061283042450818D1490122B14952423124CC221214F84528446088384149814460612124934244331248A167882081A840441836CA14B381A16986C4186F893E198
+:80FB800020024541742802421149815418D02201424082140828414C014A0289021AB224318818C0122820418102602412A04120416288AF246181444840C8348033248F190D181058410000210000002004000040022904488064418400000000004C04801801002004800400F099146022001221A18400482242830484442504004384D3
+:80FC000004624249628490242224462284251204442190241A0442881038421BC18C0C85D448A441384C0422848BC8A02121D02101848110022842810000002034420042442044A44250824242284448002022614442888880A49489084008200422F08A7C50888B444E484344020020544445B464A222264896440050242125A2172B11A4
+:80FC8000236F848002437141531119518885B848C4442304444800504455BE24E212A242704438444A2157242552221E182FB90230120000210000000000841004480000002924240200000000442002004800000058448200F0845210C84846820400004014C4248382028100484002292181A928490A00251141411848682448000042D0
+:80FD00004014C4642228004800502290124F124C42081A0420813122004244812820040040022304492182081008701201400858180000840044802604830420041002FF56028004124004004004288004428005100258484C2C0400400140081A0400000040048C02800400002180F1E63C000024800100000000000020044004481044B6
+:80FD80008404000000100218180000008184104808280010545D50888B4442420000115044414B222A22028100484602241AA56196242808001511115188818304420000004594444B222A22022008405222241AF1E675241885084A141222011001814584E4822214024822002516021A818808808244410112AD48484A05000000D044E7
+:80FE0000042A020020041012F27BCA00214C9112284018020040182824018400004840048C824404000000200128001011810481814818484608001004478C0018000000000000004800004800808204000000001841008001004008004200480000F07DD650222116840180210200102824A414A54888A4424A044A044C34448C02414816
+:80FE80002829941200808111820200150842488C4418A8548C948820021014E4620F128051222972125228210000848448484820240410242482824474421408000024001230141222481130488148008324A441480000AC44021A4122014921011111488110180842811244A044904443E4422496642024020020216161180018000020BD
+:80FF000014A844008C2464448200F0A3B6F026222F21E222B11221B112012C512239E811F111119B98179987848F18F44848421F9454111C548985F844488F44742494244F4222E24202286554442E246F22F212222AB112A1812B99C0922592832F31F111119BD81F99D888B888F44848428C04488558884F84F4FAABF0262265A2123A10
+:80FF8000211102142592823CF1131119E8897818D818A4444214158154818588F44844C5B444A6222200405444286F2252262AA1131A388282142512C2131F1191819E8887818B48CA240400848588F43C9D00000000000000000000000000000040110100000014110000000000000000003F7146110100111100000000000000000000B7
:020000040001F9
-:80000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000022
-:800080000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000A2
-:8001000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000021
-:80018000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000A1
-:800200000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000020
-:8002800000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000A0
-:80030000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE001F
-:800380000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04F9D
-:80040000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000000000005D
-:80048000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000009E
-:800500000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000001D
-:8005800000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000009D
-:80060000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000001C
-:800680000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000009C
-:8007000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000001B
-:80078000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000009B
-:800800000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000001A
-:8008800000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000009A
-:80090000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000019
-:800980000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000099
-:800A000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000018
-:800A8000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000098
-:800B00000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0017
-:800B800000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE4A6
-:800C00000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000F9
-:800C8000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000000096
-:800D00000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000015
-:800D800000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40FC021841044481A04200214C02619C222AC5248155228100844111052416191D304871442218C42098448844924B22414021440448242526858
-:800E00000030188CF4998A341962812D1185D1B241943489624237424521322CC114644441263122228124466A24105321849148304C22944631412199944545E864F2281249146341224C1304A7424169A7123AB4323412482D148F570A1100912721441200142828405C14408412682289028189C44400502244501C449C0231190280DF
-:800E800014B824944427646229812201006152812400304ADF8A4782D221C318005028604221111009408752C21414248124002110410C11008024042140018522011441400150482260424848124618F4C1CD000000844484604241000000D0421202000010021481420048148014C841C44840880200004100639212323800245F2C0842
-:800F0000401801C501282604009024C022220000000021111502404188C448100884118110042210049024449022001042021218AFE809000000000000000000000000001001000000000000000040020000000000F025BC203211842E11130340028D240085714902882149110340217424022240CA498C185448435484400688132294AE
-:800F8000218B281921814528014C341848008001621698247F6C082400848485952241404118024C487424413168843641880A1008C149C2244200602411C23400882081B2881488442144C244C9A8418249644C528400EDB4406211841B219351412824101C18423145615C08161A81032681040044C722848C0CC4414784114A189382C9
-:801000000028838AC3488C9148138144941A8B8448C044438185628128FF1505220084228421449021008186082225B12414181128084722812281E0540244204402410019A284111811984800806444411882A048C04810F4331B004410212201128512210200211220C124C0248454008C54188C048C1468828001801208834284618187
-:8010800025021848214014140800422044F2376260411941991C1455180A25E48A051341491854A6C48618719815E91128149128412332222051222C2492E24712194AE122092D1226A14827128E584B12AC2833194E18122F2162428DB42F81C438814A82C2283F154811240183013480516287140014244562A1848338218398241B18BB
-:80110000009048872268C04A8084B212884281E2810827821922C5388998222CA9242041243224AE1883A41242224883F265C280414559411372181408818A833211818440448411D44141497844413128454241081281A722A02415A482112221164264281123C514812CC1198C84D142111A941281814228F07857101841A64200841087
-:80118000030080D412121224114328014781820047848B1889118421813118488A01136412302812816084606482128504C184846088292211F8F3E4502800586044342242446012551281C32828141A226288242281291C84B1A40418402104840042301480021921814104222084088842304AC0221B7200161408250C10880214890113
-:8012000041814501C18021021441100210121814180211140016086C41488208A48014842442624628244216142CE4F54D41C211442D12814C442242110494155241217382423F2183628870145184234864414B2121C0148522311848130111896141439128908383951842211241428C08A8248B84CB42C48B427FAA08401488120485DD
-:8012800041386240A12180D418414824812181038922281432488C34184D1880210411880019028C9212841840024A18344822644F821488041218F0F19A0028844904220026744202800910088126F813228C410415648211841961822821120060194001005028148F21C88185C28181A0921004490388009FAA4B015259014912C1240A
-:80130000281844AC918800244424404124961114224282C0244241871228231408004142A1178134001D44009041A10029088225089042AB59104748A4258C018D41130128608200A160811A0220C2181800240018100849018A138412881B8442E1488282228152481849014329328A181A28C254222FBD0E408154184042443248114069
-:8013800012086A4102456A8418400111251864811125486141812812400244A5046D4210381481108A010021481810944A2908877B00A0214942022450287022827B889611450A244561217012085484104214026D1A1C22840943280A28B0821189028215220310C14881818018944880C2414DE26081441116C124812841441784110023
-:80140000C1504884002240C81800950492222248222C84823411AC02B8288A428242A9A5E06433184A022B862726812AE186A8128B8282F023F3800248508134502840844114011C2141044D21144144484423021A04615024004440081449041654421850424F940811A4141880714402109418415F210943818242084518E881229418D9
-:801480002213012C8108163421400410240210E2828821214402874442401248A88130182CE8280490426841124849A1428034821A843418BEECD082621189041229022112104894138C52411821504281450121C013D0140834111612C82529B211E28412C362D08402281D4428807211042953214528DA246182E042042362223F5E4E8F
-:80150000B222E152F521198B3417C335B929146A44C7A2B9B12B8311BC289912C558C7DD351FE1B142F218181518D12812711CF411258F2362611F2136224B43A0C37483D21CF2F8C2CF41F814293572245C126E4B83F9721A867B54331B2F87624D8992122FE7F2144C89F66411684F454AF1142411CD24169C2C2682E2B3F31C182F1453
-:8015800044E22138953721354EE6614183B426425C551C55D423D464D822E18819B224F344118D78821AE644B38181026D242F8833232829FAC9845BA85F248AB66F91594F34E128BC28F1A656A688BC28B1B2A848423FAC01118B21125F12C4128D24654EF4224217413E2886D89AC8184F11741C18B22873224AF13C117014E42262923E
-:8016000025C94926F2441935792A4CF24236E7C213A8E3357223CE18228F6CF128159F28E523F21A142F1211294148981C6DA252CBA54B182BAC47841EA867A39F450E104408100441480020480400008119044890418119149841810022421C285414800842843CC848248E483448A041A04824488182448285F4CC72A0311714D7515D35
-:80168000751F31F329278D2A3E224B317F517319B33BF23886B7212F68FA1614CF61B13AE133D1E4F13E4C4AF555518F86F426466FECF446444FC7FD36542D481F16D464F788EAAF92F2A4244F667366BE22F2AA46AF86F6F9FBAB364F4AF42A2266B33CEF22D1427146D766F32476EFC2F3ACAE2AEF22F322BA4D642AB336F6437B141E78
-:80170000345F537715F435359FB1F12D2795FB3C224FE5F6167E5F73F233B38FD1FA1113AF78FA1614C5B63B7321F9253CEF62F75E51CF91F13B386FC2F447DE6FA1F1371C6FE3F7266D4F76F645778F8A7A28FDA82CAE212E686F12F2A466E7EAFFEBBB6BF3B872AF3BF3AF35BF6AF32A223E31F5F71B126F2AF38CBC2BFB2DBAEFEA9B23
-:80178000362B6EAAFB685AFFB442F233355F53F71D3D5F51F3393F3F72F22D2F3E268F25F15616BFF1B193F298A8D7C1CF69F816164D1E2B133E33EFE2F36F3D2B511E118F82F16321EDCC55F53C2C7F57F16A2A6F56F62667CFE9AF665FDAEE26FE23612E24AEA6AFA2FAABBC8FA6F3B7F5EFC7AF268FC6FE71332F25F746166F44F164F6
-:80180000E6EFC7FEFEBE2FAFFF6A2E2FC3FE2AE84F43EF42F732C8141F53F335355F53F33135CFE3F32527DFF2F23E2ECFE5F5175FBFF3F31BA9CF91F8191BAF7BF9161485FE3A32DFB2F22F3BFFD6F31E59CFB5F52939BF96F21F4FFFF5F43B29BF97F36A3F2F76F6666FCFEEFE61641FDEF6E163BF12F22125EE266FEAF3EFFEFFC6F35A
-:80188000BD7FFFFFF7FFFDBF8FFF797B1F35F757573F25F5E672EFCFFFF6F46FEFFFEEFE6BFF8B6E8F8FFF686A2F950614200214400145022601344041081781640011444004442144518394161002002180013440023440023412248420614420044FA904A611911816041028018CC41192852151124301802351488041C8242416B424F1
-:801900002101302483E48225A942302486782C628122126A082B86A0144781814B482B24824EB290A8922826F13F3AC0421F4152281FC132481F41324A1D64AF14D141B64AB981B24A19B54AB924F44A9143F242914F82D412F924481CF9244A1CF8244A16F1244A96E1A264592E4A9E24ACF491242CFC912485F291248B841F49724AF2CA
-:801980008124AF24F98124AF24B981B24A3915AB9443FA4A9243B24279A498924F8A84F9244ABF21092D4A1B61241FC17268F21128C72619F2281115F44A961D288B3419F24A9243F2489343E214392529FB26482D915F8285F927C2125B42922F22E459E2B2645945EA8952349E6485F11164A7241F497244A2286D131B212D964CD21804
-:801A0000B315928A43D22A21C2144392926F82D442F12452DF780B00000000004004280000000021800100000014008480040000004004800100000000FF3F02212C02811004C04A40220840058AC43AA8478285A4122002D0483238412009256848884002701422CD28844C01848381618181A0822188824148C4426FD40D442F1821D168
-:801A80001691481CE181D4141412351814814C38884283014B142CB881114448C882284A01842C121488022A216C13184D88824342C48470E4222842684812CB1416C8249024928F4142014DF324241B161865216411891461A4444781292842D484088C9C386B8284654B14A8218823E8443138812C921491A36248832AF46112508443F0
-:801B000031664C5248124F2238848332388D141881AE1A4C024B282CC8644528F5284710042116184884C1442111101128488184014A31A498324008228902442008001288802188281928188414280182814B410088C0141608F0A9AB0028002211241180C48284292888012441204121022200009086908440228101881E282A084044E6
-:801B800022182828040081A024008A44043FD144021827A1245C48C8148C6144850382834198834912B4183C8CCD2186B8180844412411818748E08264812243E422C824322C13644123F294483E8AA22E182A7132098391418E284B21891BB488926428844AFA51FC24204302331228112A74490200843941149416442813A81860424184
-:801C00004001A460848988C24429D3428122D248B224982241CDA22AA8218992296081422A28628B28A266A4C244823F1F0140C218908411411341042CD8289898888228E08834889741812608002440388443289214008822128E12121230D812708268218A21041481C90143140810A8425F4D4FC21200480030442211482886188803E0
-:801C800045280490128011A41A10281841D8824105844E882981B14C4A6181188C840218124183B825811408892364C2882100272E8052248CF22944222508A04100AC3154499924862A8B811108260624188021981A4850184622C1282428422180081830448CE2C201228212B044084821A9518416F26E5720044440C444442211122135
-:801D0000002304000049210284D0480411814348041A040082301222444110E8888108009014C082004008A084AF6F0F5A1244541C222110B4114481C4182B81499D14866A814812C1214962812447844048DA81092D18C344028A8681D1C21A62C149088B128CB1448801824CC11480588642CC7682C818812CF891455022302A2841CCC1
-:801D800014842622118272484208C0A41220810310840A1601444D488021C418D02288829121203148802831281E2881114A6881A04B000044486F2205C042241C6481A115180A20024418C311E8421902842240446842008428E02118041C4202288110082A8861411078210281008012884888A51481BF92052212281822444A02812DC5
-:801E00001C29B4220121227B128022125342493222512440C22315827322444266411604854272481234882008804824C2812611040084484082F8CD2360244484812011812411381818812534C42184801182018911021C08211A18022002226041400484604230A640881904288C122828C214160822FEC30080314441112D12100222F3
-:801E8000108212A281214421000024409A8144E0486132A66D112606264308B2A21E648F1A018352212A8104288F11881444B41812E4243A242912F4851930C22440018148850421501818A48C820218881800181E22841842480085941812004450422420410441412B8115022041022021410140B1180E284C514823D1288391284004B7
-:801F00008502A318A414839488818321624100A01221A18253088220528222B02281244C240A222043229A9488882881A843C8E41E8889C25849FA57FD301480421201441622212301A021004972228112246212284004981C01158241418881911242108841048450811400190184A01400401414F8D51110126241404124210144218106
-:801F800000602480018911C21840081884C9285184811E224308414B2141876149B28802414124128D22822001444962C8222002C302EB5E7014084841255421441008400489024C88512481100821448C518119C82281822018082184C04140018391488D318904C44149161C282811C418414221F02AB1E044A11827A2CD1787E1497119
-:802000004D42D48831128B518B112D8C2D1AA6D82B4E7218F4129816B83421212141981116F888CC25E268EAC17B9655281E151612E223911C208838A4811615092467414D518883142CFC848812528CC41143F828E1A0224381B1518462912E748F8441D28CC32227A22C3118672147C4CCC8112E227B1244C42E3C457E2256AABD433B19
-:80208000219A5912E3AA82497222B224F334122D28218BF8EF13B8BC53892A722CE862BFBBB84B0A17418F91E34262428F439338CF4A89723C946426F8F461246F21D462F41C24217F12516B279127212741642782118145F44874BAB1BEF326228185922A2E212493922C1E817024D31DF2141815D2A9F3B21C4D2825D441724C447F66A8
-:80210000CE2C46EC41FB14CC2C7316C93AA6A9B88E88174845D882DA8468434E28CFCABD427378DC4AFA9184A0248042811284128402000048148214C02540011C020080088800813041108118A184114260246024862824A8241242822008007F1D0636F47214E023F7B8153E1599A222AB222572227833F9989CA5EC44B433F2B9988F26
-:8021800083F3B7957F61F31B38CF42F33D3D978195FA891B3F31F174F5DF7BF8183C8A5A21EFABFB183BDF36E724F5763B1E1BFFB8FC41441F5FFE59695B36DCF6A1F5ABDC3F12E242DC15F4CD653E36AF8DFD68E8F074744F69B92CF24818ED499FF7074F47F5167EAF82F33527DF53F11F34BD34CF42F22E3C244FE2F3333B8FE95BEAD3
-:802200008FA4F33FB6DFC3F139397F5BFB15329FA1F32F35DFD3D3CFD1EFD213F843415F5777AFF73F3F7F1A7227F4BEB85F63F3757B5F56F536794FD1F11F191B194F49F34C4CDF84F1286BCFCAFFEED6BF3ED642DE15FC4DEC8FE7F79E9C8F82F2CCECCFC3F35CF4EF46F7483C8F8FE33A4CF212642F41F5383AAF81F3183F1F71F17BE8
-:802280005F4D3689F12A32AFC2F333299EB8A5FC5858AF13F1989ADFF3F3A4B46F73F31E3CBF53E343C3318D2B9D8B3F21F171719F3BFA181E8E822E23EFABFB18386F83F331336F23F7392AFFA8F828218BBB8B355B728F91F361232F4BFB63E19F11FB4981DFD8E866F4AA888F82ABAA4FC7F6B4B46B22CB37CFC2FFD44EE045F71E16B4
-:80230000AFE1F13B1EBFA1FB1D1FBFF3F12E1EED1CCFE2E3E2F3333BCFA959EA8FA7F17EF74F29FB3E3E7F5BFB343BCF82F31A349FF37324F52A2F35F943411F97F7BF27EFEBBBB6F2A6ACEF8ADA6CF337334F43B33EF3352CFF88F8CC654F4DF7CDADDF82F71C3FDFFEFAE2E69F3AFA1D919F15F94DDD8FE2F2868C8F86F7E8FCCF8BFBA2
-:802380007CF4CB73CF87F3E839AFA40C4100844140C1484184220000168842C82410084C0281209411891201000000228400002049638100140000304810083F630E0024158451812724120089018143018A542850480084812200565184142C29C18880012901221A826841881240948292184198228143094388118431849F7F022CF42F
-:802400001124A5F21124C7141F41324A1D24AF24D141F24A9219F64A9253F84A925B4AAF1439252F347925D812F925481CF9254A1CF8264A16F1264A96F126CA96D5A4EC49D2A6F491244D431F49523E1F49F24A811F49F24E811F48F24A931D24AF24B981B24A3985AB9443F24AB443BA4279A498924F8284F9A44A278FC05A1F41D62AB4
-:80248000E1417248B111D21A9121AF24D141D268B911F24833518F2423B24839242F244888F8264829C858886F826C116F8264116D4A16F524499E246F22E4C932248E64E19E6423E641326E8E24AF26D141F2689619F2423159F24A1243F148A443B2422392B2678229FB245A150186280800002002008002000000100218000000400188
-:802500004008480000000044000000000014F0C8BF400281102811482201108808004A01238128110C4004618068284032248021C412501212004189018182181220820AB024088140F1EB4E00924081642448488CB4129A12828351214410A881502C14102414020043014D888B8218440088266849884981A1242245820184708804185F
-:80258000852641A24844BE41418F2E0930D2841442482904AB418A121438381512041A84012C681141442B41618241A081824C98294B21901848C225AA181249819144224184882E1C5084288A5224124F22C8C2C1963114AFB80800008112814824122921880800818229518440080024004424812C0841001222158408809218901200CF
-:80260000128880410800A024F03EE510022184400819A4148A224448410884448200200800250A2A040088200280022888284908881260880024412002924008F08317001849C1341CB14491458512F1481528481221A014A0121E488D148428439248650844C08C89E882B818C212C311A4340090260029C318809112181249C5A8608C5A
-:802680002B484485A44A8322D856052110A22111874153C449315E88805421812004288954848182414825144A84140489222A61C100228062482882388B180018182074A208832284088A04F0CD1D00124C112C2104A01417424A1288019018418A8181012222848410229288862868812422446A01002302450280C112860818431104EE
-:802700004A988243119C288382F8FB6E3028302C4D4187420000890140288112187848021841008582491C348C8C01128C924284AC0448A021100824100848244342041084410827844D58B0BD0E8D424C01485228D0422201D08411928689928212228120CA1644402281A4188248281244128480211C229484C348849184901482228A4B
-:802780000120024A98882504C0272400210050484AA1421120A281462841824804448480410422001048080020080089014008424048180845E2816884840000447FEA052D421634284521831238163211302827898D54891148C8268144221844852458C248818A818443821408008228899488844582E144081E4886188651248B81C3AA
-:8028000046B848281818048F1F06221006C3044168421608122482248229C94820D14818844102224449114818E88241842194821224121844494808840040C8840080018149B44811E4470344281612B428142412C448450114824004E082014C81028250844400444002200241009242004400824004000000904842811F8D0E8410127D
-:80288000018C4498421022F14A3424C22A3822A442008CC928834204101812D82821088E1C2781C02AD08242CC1887411860410088A94948044D1884418C012841411FEF47420283219422248042C218A5823412444B14648E44456841A042434424318482802849048889024C22440448800400450800411A420444908460484C051F3B69
-:802900000484C148000000208638488DA280082488AC180800A1101254868216441402218483220292811284440000100840488861414002FF97044190288440480228001008584210240810141804002001100A22482821258402184400100800A081441006213812F0EF79002129044242488C04483B1881656144C014121881124008B2
-:802980000000418218181A82C218841004128504811200248886886181840000160221189F950922C04422C4284C024C14011882213022822B6810120660222428454242028460216424412820080000001880120412004548286482F066AFF08228CB4A2484002508211285414111084244A05289A2184200C018200864436842412062CE
-:802A0000848144414944044412442424181A084508492801484122419F45078C04497444121416342445382C484CA841282988B84A026127484C0461812C41C6A44082184842114446088C04004484006041C02420418841088514183A484F39072C76827C124AE284C24AE5326A46FA413A2CF999CA43B18EE861C1828E74EFC3ECC1E12E
-:802A800081F922944D64446482886C42E64131942F6959842C723492244F2256C467424A325844C0144C41049216E8C19114C508C30885741CB224A461414F5A4F5246CA921CAF947224A2246E28484934122335223DDA46A28C2B6467242482A6D2882204846528129A86E7882C11A42AED1C25544A46742AD288F214144B58C385112C34
-:802B0000111858222B1882121A781C2811C6182584BB6CE141F42D3A20722CC2244D44AD44C544D444D24A525C9D694E11871CCC94664F4AD188A8346F245A4E4B4D85F88C284B1285D6E61124C882AD84857812A6838D382E422128E08848CC18C7418441418682D948187428CC144C41DCC8B114E88471484C5E885F830F800180240250
-:802B800000268144A14920088A048022880281800281880081000000228041088420412208800888C081800842FF5F43E264B472F234266D46476EE5FE6E2EEFE6F466645F64F4BAFAAFA2F34A9AAF81B1147926E22FF136144F2FFF34966F45F5644C87C28F8352866748E7E2AD88E57E8AFE8E848F48F83C16AF81F36A642972444C7C00
-:802C0000247C18FC5C5CCC51CC444F41F118181A0143F91CA84F41F1848847E86D9845F2DADACFCDF9DC98E7C4CA47E264F422484F42F224264FE65EEE6F46F64C4ECF66F655476FCFFB7BBBAFF5FB5A189AFB36942F67FD3614EEF24F61F1C4D66F42742CB43E538EED8CC7E2A5F89A8CA7A1CF28F82929EFA3F33E3D2FC6B662F4244EA4
-:802C800025F884C885FC18181E1C8F81E141A111CFE1E121F9A2B447488F81AA99CF897888DA8EF99D82EFCDFC5A18CF85F54858CF6746E224F434643E2225726CF26A682F26F26262AF267613F29ADD9FA8F1C3F22F49CD842B82DE926F61F574663EB6DAFC6E6C8F82E2E253862B828722E5F48A84A768EF48F8989D4D16AF81F1262E7B
-:802D00002F22F2224687C2CF4BFBD8D4CFC5F5181CCFC1E141514485BC92F18A3886F818984F49F98C98CD866D184F68B8DAFD76744B17CF44F56BF7244F64F43C36AB334F22F2686AAF82F26E688FA4F46C621F37F6FAFDBFB6FF56936FE5F1E4846F43F95EDEEF49ED6FFE383ACAFD6664CFA2F2243CE5782A7C28524EAFC8781ABA8E77
-:802D8000F8A8A9CFA3F33B386F46F66666AF627228B8DCFB585C8F85E5C1F11818855C8885EE21F98EB847C8CFC3B818F11C188D8AED18C7612B45FABFE4AE445F120441100224842484244042486181448244848D2482004410080044002901223024100240081200200192200184200812001FC30E200184806424304811221A94889A5E
-:802E00002404A9A148188418842841004028C188828881184400818A82011800008221418180488819042298B0B1092D421F4152281F41724AF11164A3D441B24AD141F24A911B69AF14B985B44A39A4AF14B924F44291478A2D914F8AC4B14FAAC4814FA264114FA264194FA26C594D4A9E24ACFC91242CF49124C5F29124C3F49124EBAB
-:802E8000141F48B24EF18124AF24F98128AB9451AB9443F24A9443F24A94478329F924484CF9244A7FBF0827A21F41362C1B21E71413111EB16E9121AD151E24AF341AB5483B24AF3433243C49E8545186AD114F82C5A12DC887516F8264116FA27498D11464192D481F4DD2A2F49164CD4213394C1B686B141F88B246F111282F64D1C186
-:802F0000A2B455B8426B82AF6429F2489643928A21AD9436F21DA94028080000000044000000000021000000004001400848000000004480020000004001DF670A240084830183043218460800818200C084001008002001408A0840025042402408184008104408180043026081F03D5DA0248281638194B42480148401818D8448C04894
-:802F800045824102208112022554428262924241D042024088898489A482484D2200182048045400404801AF2A0E46628C8562C11E4849C1482148496184604285C4489048002C4802128B2121822141824A22394141902A6084819684B414A8482248412508264444480454C02424C01970DF0C2200008A02A012800181822008412911D5
-:8030000004000040142201402A084424400200208881028001888001004008F0FE3600000050284400201148880180140818411424004042048028010000842018040060880040088281800120F2199AB0129216189C012C0120711A34286A2891921042928820022841401C02842443188442962422234252240029719238144D88432CAC
-:803080006811008C0145984122164C18414878FE498202400110180280A2241288180046080043120141008120088240442202214002A10048C081008C01C18E4122848414007FC3062C61411816082C014112AD14848A416A8110022318888201445082214052244144281694222800648120B984C1148D84432898180010081098141865
-:8031000040688297F2100CA4608140042181106421801208008D44842C4558282243113C88224436084200C14886140444004301008222008004A40010F88979100800428302E041069034A0142822814922084022028C0924432818088127491290484800426085000041302800124420022400F75700000000A180582140180430C2243E
-:80318000418048440443440200100250420050822001412C018180014400100818414200BFCD0A41401862852250224C840838169812608229D824C284C1814911048244A5524882C42911185642C04460884152B0180416040082440030446023444810789D0B0000401844A81284340049043048004888488942FA48244004289028201D
-:803200008D010061004441122184200184001884400800F08542604420820248444142828061118002105884001210C28810024186061823121444140420080081008011848102288003164404CB28200218103224002611244283284864C8272A0000882E84242289C22482481038240021228048342490841241254862214881000048C8
-:8032800030489068F017670000414130122440024042440A8444244481805148308670880441204108000021C044800412A021890284400800128140D85D0914254414222401230266890840F14281C24A42820861412B246042A0823082289E24304420440E484008484150248944088C84C4841A4E26C14C0080A8B600810040040044B9
-:803300004C024400414830242012480200008182418282C1220010440240480220021624810100814840048F9F0A2C012C012C21110200C01416014280E8240881241A18C28483044002212C1148240200480041406488448C0284401404418441001A025FF80C8C0427121227124061E22C1221382321C126441858868244002D88812070
-:80338000D2841C840829181402100229022D44814302612225C2421821893248253C5825941125048C84F23144202808442C04004840121804002008100400000050820000219048008448484848800448A042A0418005001482BFF7078490468992A42668221064224044C8238D812542042825B2480AA321D842499E8881812868218550
-:80340000014C588221482904848400805248C02245C2184C6881EC021E24C1218467E3904186722264625F64FC122224416B42231CC23BE3119844812F486C4C29084F4428B918142A18DC4856482425522A2F632102454442C28224C5C84C4E24604CA46A32124AC51467848C73DCCC284FC4817344741CDC98A188DF8F042632882C1136
-:8034800014322433B22AA224C18A1AE2485137CA72C24EDA22582845CE2898AE968AF82E8C2E2E22868A38A43A7884C84C41302625084120948456548E4C522A8B14A185D8283254184D121A549C8B31C04583F237BA3054615B212F81A223CC351464141F7272243211156148BFF298848B26C5F8A42421A722C48C52E42C865886497828
-:80350000CACCAC4F4C03E3C82E2F28463444282D446E84E189944C2469C1482E2A1E2863E443D548B8227C58D42A624529044B26842F1D0619921411891111181108812002002422201A285248AA042B48442904488158899242812A24088A028A16E2889212281800000022200248281A94285F994731245733BF91F219332F86F2733D87
-:803580009D2D1F62D2FEF22E2AFF1AEAA3F3291D9D8C9BE4CF82F2484849D284BA22F2E2828FC1E7CFF77E4C2EA84F8EE6A6F64AC88E428F86F6F6B44F47F1A482AFE6F64C444F4EFCC4ACAAF2A4648DEAAFEAFEE6643E62EFEDFC2A22AFA2F24A4AAD1AEFA454AEAF47F61E1EAB754FE1F363586F44A31687C27E6A6FC648F125414FA658
-:80360000742EDC79F6432B2FE7D3CAF2292C6F76F62622BF58E8A1D199D355F84DEBCFA2F2686A6F42D884FA2626AFCEF832D48FC1F91C3A6BCCCF86FF282AA5FA8A4A2B664F4FFA75158FAEFC4247A44F4AF884EC86F286462DE4AEE4CFCCF498CAEFE5B43EF37E7EAFA7D7C2F31412AFA5F7FAF8EFEFFF5A7CCFE1732AF856366D544EFF
-:803680004C2FA5D5540D5F54F61666EB234FA3F36765EF43F32224FFE2F266677F56FE29A52F82F21B39D5F98D88C7C2EF42728EB2A27828F8C6ACEFC1FC9C9C8FAAF96AEAEFA2FA2A2AA57A44DA8CE6A3F71E3F2FACFE2E2E4FC8382649DE645846CF8ED4C8DAEC9C56CFEEFE1A1AAFC3F31A3A2F24F74642EFA1F11A18EFEBFB1A1A6FDA
-:80370000E7B472F5167C6743CFC7E582F7A5B1144F41F71C76FF51F1773F2F47F73E34BFD3F327266F76F62FAFBDA33FA3F31B1B75F1EDCBCFE4F64ECCEFE4BC26D8EEF2CEAC4FC1FD7CFCCD3E6F68F85E6EAFE656AAC7ACAE6A6FEBFF9EBFAFA8FA676E4F6EFE6644CDA66F625A66EF6EF44AECCFE6FECAD8CFE656AA2FE6F672726B5431
-:803780004F24F47E5EAF87F7DEDEAFA5F57E56AF56F4167C6F43F234366E3A9F410B147024014732F0241384262308842486484148A4486460448242828314624440948690824241424110024542081A444268228460814400128110084470420B8A6441608183644181448344440218418324784A0644101204450A225082A042122C048B
-:803800002428888068482182428229011812006081890800200226F8EDBAD024F4112485F2112483F41124A3D441B24AD141B24AB981B24A19F54A9243F24A9143FA429147822D914F8AC4954FAAC4816FA264516FA264192E4A96E5A2E549D2A2F491242CF4912485F2912483F49124A3F48124AB141D24AB9419B24A19B54A3924ABB4FD
-:8038800043B2427B2498B24F8294984FA2F478FD80D5C1965A1D24AB141F41324A1D24AB144CF24A95F04AB551ABB443F2489143F2429143D21AF13248146FA2C5914F226C114FA27498E1A264594D5187112E4A17C92E421FC9F628421F497228F29164C7261F88B2249161AF44D941F66A9259F64892488F6489E464C9484CF9164829C1
-:80390000DA24F5A1624008480000000000280000000000000000001400848004000000400428004008005012F0135F202912088002006488004486080090840040024100100800000010420884100883091280014004802104F0AC47008A01410021860400000041008200004400000044200888008120941400000081000000220014F070
-:803980004D2A20214748042880084149082244861804808848026021200800401421088308428121421644088190843028A021004420C2124814129FFD0800000021440021000000004100100441004008000000008100009018800100000000003719000000100880120200290800000000000000000000280000000081000000000000CB
-:803A0000F03964004008400200000010480424000000211002000024800820180200008001000000000010F8AE22001008000080120200291804100200400224000000102208222C0800000000000000000040F8534C0000005082000000100800000000000000000000000000009018000000000000F0B536001281001400000000002138
-:803A80000000000080410200000000440000200100000018000000D028024440048400000000800100004004004012480800220000000080020000000000120018F0FBEF00000020110800008008004100004120020000100200200200000000001800810000006FB90D4418444048214108000080480210044004410012100200230200CC
-:803B0000100400000000000018000080019F350B0081000000000080010000000020022518080000002002008082010000180084200100F0D45F0000001440080000000044100400000044000028002200002008842003000000000000DB69000000000000000000000000400800000000000000000000000000000000F036B600000000D2
-:803B80002100000000000000000000000000000000000000000000000000F014C700000040020000000000000000810000000000000000000000000000000000EF7B0E0000000000000000000000000000000000000000000000000000000000F04FFE0000840000000000000000210000000000002400000084000000000000280000D01C
-:803C000079030000008100000000000000000000212001000020010000000000000020010000EF2F0E0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000068
-:803C8000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000100800000000000021000040022001000080010081000000000000380000F0B63100008400000000000000000000000000000021000006
-:803D000000000000000000000000EF62030000000000000000000000000000000000000000000000000000000000F04FFE00000000005400000044001002400400218001882810021880088400008042080000280000F0147B004001008004548588022148400428100240042810828401882810828441848842188204441828842148E0F5
-:803D800041012810A21140C43500000014000048400500800444000000440000000028000080080000002884000000006F940900000000400500004004002100440010021880880221800188400840088042080000280000F095BF000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000044
-:803E0000000000000000000000000000000000000000000000F04FFE001002400100800400281082040028000000280048000000484004281082044400108204440010F28F41000000000000000000000000000000000000000000000000000000000000FFE40F00000000000054004004000000004400008002000000800800000028841A
-:803E8000000000002FDD0E0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000004004000000000000002800000000000000000000000000BFF20A00000000000054000000000000400400000000000080080000002884000000006FCBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57
-:1A3F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1
+:8000000000001411001011110100000000000040420224502225D2220600150111100100000000000000001100004011411101001100000000002100212450222421004F3804501100001100000000000000001411000040011501000010110100000024002421002100F0BB35000000000000000000000000000000401101000000141158
+:800080000000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710640411141010000000000000000000011000000100100001400000050222121000000008F4203000000000000000000AA
+:8001000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FB2
+:80018000EA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001A0
+:80020000000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000001E
+:800280000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671039
+:8003000001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010031
+:8003800000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000AE
+:80040000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F71060000B6
+:800480000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F013670000000000000000000000000000004011010000001411000000EC
+:800500000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F013670000000000000000000000000000002C
+:8005800040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F00000000000000000000000000000014110000004011010000000000000000F013670000000035
+:80060000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013671001000000000000000000000000000014110000004001000000000000000024241FEA0F0000000000000000000000000000001411000000401101000000001E
+:8006800000000000F01367140010110100000000000000000000000014111100110010010000004002400240022421218C040015411101110000000000000000141100000011104101100150110000000000401242420200BFC4085011000000000000000000004011010000145011000011100100000040024012021002006FC90D000039
+:800700000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013670011144001110000000000000000001140410100400100001001002E
+:8007800000002121210024212400F0E51800000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F71061100000000000000000000F4
+:80080000000000004011010000001400000000000000004042F2A1FE00000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F714684
+:8008800001001100000000000000000000001100400100110000000000000000002440421212F2FA3300000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F013670000000000000000000000000000004011010000001426
+:80090000110000000000000000003F71061100000000000000000000000000004011010000001400000000000000004042F2A1FE00000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F01367000000000000000000000018
+:800980000000000040110100000014110000000000000000003F71065011140000000000000000000000110000000000000011110000002121210024000070F40100000000000000000000000000000014110000004011010000000000000000F0136710010000000000000000000000000000141100000040010000000000000000242496
+:800A00001FEA0F001501111001000000000000004011010000104111010010110100000000004012424202005FE90F5011000011000000000000000014110000400115010000001100000040024012021002006F310F00000000000000000000000000000014110000004011010000000000000000F01367000000000000000000000000E9
+:800A800000000040110100000014110000000000000000003F710611000011000000000000000000000000141100001110410100000000000000002424CF420250111414141001000000000000000050110000400114000000110000000000105222401202F04B7D0000000000000000000000000000004011010000001411000000000048
+:800B0000000000003F71061100000000000000000000000000004011010000001400000000000000004042F2A1FE005011100111000000000000000010010000141114110010110111000000100210420225421202F0E9480015010000000000000000000014110000400115010000100100000040024012021002006FD50400000000008F
+:800B80000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F710600100110010000000000000000000011111400001100400100000040424202004002006FCC0E1041010011000000000000000040410100001501141400001001B8
+:800C0000000000000010020000DFDB060010110111000000000000000000000010110111000040010000005022212124002400003F4B08001411000000000000000000001100004001141100000000000000000050222100006B3B00141114141100000000000000004011010010014011010000141100000000004012420224006FCB0864
+:800C800010414111111101000000000000004011010000001111101111111151111100000024242424210000007FD50B10011011110100000000000000000000001411100111111111151111010000000000000000C7610040511115511111000000000000000000000010410110010000000000002512124202400200F0BF65001415111B
+:800D000041511100000000000000000014111100001400151101004011010000000040522221254202F0112C00111411141100000000000000000014150100000014000000100100004042022421211002009F4A071100000000000000000000000000004011010000001400000000000000004042F2A1FE0040110114000000000000001C
+:800D80000000000040011114000000000000001002100210022100EF4905401141010000000000000000001411000040114111010014000000000000002502212502005F2E021501000000000000000000000000000011141400000040110100000000241002405222E01C0D00000000000000000000000000000014110000004011010080
+:800E000000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F7106001001111100000000000000000000004001000000400100000040424202000000F068C8001114404111010000000000000000000000001114000010010000001002100224212421005FA10400000000000000A0
+:800E8000000000000000000014110000004011010000000000000000F013670011001110010000000000000000000000140000000014111100000024242400000024F0BDBA001001111001000000000000004011010000100111000040110100000000002421242400F0631C00150100000000000000000000141100004001150100001006
+:800F0000110100000024002421002100F0C78400000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F0136700000000000000000000000000000040110100000014110000000000000000003F71061100000000000000004E
+:800F80000000000000004011010000001400000000000000004042F2A1FE4001501111140000000000000000000011001001100111001440010000002121210024240021F0B4850040511111000000000000000000100111144041410111141100001400000010020040420200F0445E005011141100000000000000000014111400001036
+:80100000411141010010010000000000401252222400B0FB0A5011000000000000000000004011010000145011100100000000000024002421002100F0175600000000000000000000000000000040110100000014110000000000000000003F710600000000000000000000000000000014110000004011010000000000000000F01367FE
+:8010800010010000000000000000000000000000141100001011410100000000000000002424DFD90A104101141001000000000000000000000010011400000011000000100210022425421202F0DED100000000000000000000000000000040110100000014110000000000000000003F71060000000000000000000000000000001411EC
+:801100000000004011010000000000000000F013670000000000000000000000000000000015010000001411000000100200000021005F420A1100000000000000000000000000004011010000001400000000000000004042F2A1FE001001000000000000000000000011004001001001001400000000000024400200B0FC07001110113D
+:801180000100000000000000000050110014141400000040110100000021004002242400F0E364001410410100000000000000000014110000140014110000140000000000002502210000671E000011141001000000000000000040010000000000001501110000002400242502100225024DA814404941D824C1482A141414041048C4D4
+:8012000022C022167818E421D2280200A05229121208893368602442A0251484412062829044001882448C42444824A82D9242F05676706281558219744811741C3268682B421E24224F12411875281476248232421925612116544221181622711A248491488D218D211954812568149B41E9C45C1E444E24A81E242AD84842844A24E216
+:8012800041E281A234001E886B853D2A100240981121404422E242011C1148418802830113042424411E2218801108228024028901469814484B141822484C0245080040043A04824A41F61E466012872110110C6E124848460410084141442618823418214004422824604189078C84724A0119161381140222444C28818881885884220B
+:8013000084162828048988F44833801401484845088902002244C0222290146412001800400210028C0194400100844184468C0400002228413844A01240022FB2012054180048C1302400201204241022622228128001212011082004004840081184220022208242440400228028011AF8D91740020000000000000000000000000000DE
+:801380000000000000000000000000000000F0C97914181210614454248D24890118228384141A1C02290130441284118D4211002821244018412441C414190622190290882D22489084412921854C88084B8145F8F7A9400287112544113221004C52124091121032444444A419011051282226281223A4124E18684004104848C2142CCE
+:801400004464E4C922941888100847848CC21444416608F0EA7A40028D12444C5441261338184C8221822401652A14144498122041583826C2212411104298228414441048846441225C12C82CC6D88231421014D44861874B18C1C0488A41FA58A4802141114103C0240025018583140A44901240914410018C1428022AA421584240049D
+:80148000124116683260247044028082088908230442C08422444147BB404244421CC824C50183040024488150482004285018001028425484000020024184C0248501182004A30481483034818410048CE41D4BA2142C911460118D1220C424C3062211842994442D12222301151408875495346861C3344A428D4426A8122B24602460DA
+:801500008223C26C16B92484014D11282E5812E3A541A48D442D821A8C61412882414604108201118151420000248421448741282305008044081068C445984C841229066870240862194101181C012A44B21424C44246A229C66881444C02F07213244A711452248594182E1681F04824CC0622114283C442240060528485414DC5686520
+:80158000B8241482042222002440922845D848B24C2201444A6281AB14848311584841230118807844F83DD900004E112668221626125A824129011B12128481448544382824C01184268112D2817118D681C1224C21C334D048A7213028388400411C0282523850820042128120F11FFCC01680A12450D28110A424554819382248412458
+:8016000000224934C226A8122C4402182262400100904884215014604640C84822494188820252848032124116D88F08214C120400001941224102C1812100125260810010C84400A04212002422008322011216E9842114E2840182202551844905482055245FC542721422C2142826D83E5284218D114E2814231172186185A12444A055
+:8016800025CC24116812241CD24224D18163241907492182024923C228221C63811395584682E48423218461278CD1489418423A24614141DE27004430110018286502A951818512044181D0484188E288840283448812024F8211E8220118163422D02801894104CC02C487124488960800124604402844FAABCA002D12812D44401442D7
+:801700004424010024C44004101884144858221218412110861402000020024110048001D042028140080022226F640E12007018022051280016629219012781A01244501889311110088412101888621244800200C028284008C028251848484C1484911284494188F4D62A20810418008581014941880118442C418411044100120010A4
+:80178000080081002062848902008B4212182248100544902240040018F082A600244C04154448444244020020020000000019311811100500905826042818431248044442C48120952418A0141A122232123800CDA70028118C210100812800000014001400104888440884488002228180024249525A80021544144802248342121828C1
+:80180000433824C436F1EBB4400E502420018142000024400820C42810584A1C0428C0485048C4C1454104A4102822044C51824428182412C51228110842200221F02FE900000000211484148425184808400830181621014C11C114181100112211220044141301001628014C01121034124D222800A021F03B47400124811084140810C1
+:801880000850181041080080120441844144245D221464241061144110085018440094260180040022002182F047394048944810481848048442C48022040000101212820188C01800189483028C012A14148C021608842144842820018112A0211006EFD7011C4154A81674114214294108130489628127A4851A04601285A2159508857B
+:80190000F82211D5BC1841180A135648715982E1422611B434722838288C228191188F8213461274386881818322E28202CF5223F3B498404612435A88A4D0A271419218B018011D11C5941185B11823044D1C8588D19A4104124115516585C1382A727838282E4381281B24878411D46D148D544D2445711162816D1C8B252D121865E227
+:8019800025A331894164814AF276AB20917244E9C514C361C4C5544C4FA15288A4255928221244504485186112474148718F8184C14CE3E18254C6C516C224800287C2265C416D244B6183518497822D48905981255C44AF42E4C253862416B23483085FF40A150415081150812111291191128011841184118411441154184114501820CC
+:801A0000018311240112608141161802211042080040440884400884444F244F7216F7672FC5F4144637311F11F14E4667617F94F53723AF25941B3E155771FF75C617DFD1711CFC54441F52F214141FD3F31D15CF6454751FD6F615154FE5F41517CFB6D657C1121E1885DC51F141726FC551C4DFD1F7595115F71B1EED1C8FC2F22D2F1D
+:801A8000BF21F12222A7C24F41B15CF524242E3CCFC1F15C5E87A28F81D188F18C88E5F697BB2427317F72565FDF5151A81F91F14F45D7514FC5F4372FFF7495138F517315F34F57CD17DFD131144F44F52424DF71F13E3CCF41F14D5B55F7E4E44F41F15CDE5F71F16C6F7D1D9FB2F1341CCFC3D3DDF161726F41F5341C8F82F26967BFC2
+:801B000073D3CFF22C3EEFC2F32D2FF5F63A22BF51526CEF44F62C362D148FA3F36E6E26FA183A2FC2F38C88CFE1F3912E7011F22767B5F9141C4F61F11111BF947414FC4C5EDF52F34B4597212D33FD1BEF647412DBDFD18CF144449F9353C42F83F31C14DFB4556EAFC6FE1C1C5FD545F8747FF57F1ADDCCF21C3C5FD2F251626F42F655
+:801B8000143C5D25DFB4D6F3F21F1CCD1CC7E1FFD2F2191CA4AD3A6F61F15E5E6FE3F2263A6F63F17E5E27A2AF82F12628CF8BAB1227CD7011F22222E55CCC95FB1818EFE4741EFC554F4FC2F34A4C17A1E731BD1BEF64741A7F1F8DF144448FC353DDBFD3731CF4484AF5F76FE5CFC1F1DD5DC5FC7C7F757F3AFD3C3CCD2C5F52F2716230
+:801C00006F41C1284D24DFD5F5393D5D2EEFC2F3141EFFD252C987A1FF91F11C1EEFC7F53C3E69F13436EFE57522F23A386F43F1BC988B326FFA0D180084210084400884240015088481000000210010022110022601000026618122842601341224122C022880024C028F3C0886111118911444854144514110110824000000160884408B
+:801C8000088C514850589028430200C128C71210821222110A8901255284891214022001149F380F2CF411248D121FC17248F21124A7241D2CAF24D141F24A9219B24A19B54A3924AF1439242F147B25F842915F82D418F9254A1CF8254A87115FA264192E4A875DACE44DC24A1F49C2421F49522C1FC932481FC9324A1F48B64AD141B6F0
+:801D00004AD981B64A9945AB9443F24A944F82B442792498924F82A4944FA2F4215EF026481B4149F5112CC7241D2C4F24D1C1F62C121D648F64D941B6489B24AD914B42AF1439242F14DB85B442FB2748ABB45FA2A5845FA2B8587A25624CACF4C82534CE21ACF4C12C4D4A1B686D421F8822F4816CA11B68A991612F64D98196B8199679
+:801D80009A2AF442944F83D422F93448986F8AB442F1241ACFC2070048000000004400000000002180018800004001000000000000000000000010029F8E042418942110551800400181D02801811011018B414008428044C24840844202902210111854812912883218004018081034228400F086C2008641046022247018018400444047
+:801E0000064484251C4184421441342221001190128147224052C144902221441351344001250244383058812187421C11FC8E9C00135428001C1209830141608244165862844481A515E14104274111864602904811242A41DB481262248154844C5282255418453116142210128C01C53228A5120C83F171D8402251140044250214509F
+:801E80001800000040014088420848284810024100408252144002142818288140028180024A01208211F43683008021512A12C02C811A220400214011040043011181804242C412400A24104244414843A8141126024601218421901884182074248862829FEB06252242188412448101A1842931111224841608848553848B24262824E4
+:801F000046014C17F14C2145290452226641425A244C043481415C3212818F21041E4DCD222A449244472116242401DFFF042128182C51284C419114812A218421C1121042180434A05281484814224912C22C9048809422190614441354824642114491436024304843B24A11384418444A2221F21FB94002844428008902A1A41001104D
+:801F8000C811401858848524129128004A51141F24511C10220121648512584260118426624218842D18A44D11812890126458858442F8765400612C62120044644012C4120080024A0140912245981440044814251842812111C114AB14412501411285014089220A8584091A144422E4482162437F520800424098281821004921046E7D
+:8020000012002185014344188A011881128184D021714815040083140830294056948440F9241843013018818820110212EF690B00C0144351220011A1281400104248C421890258260140110100840084101204184C018001001200C024260400304800CF33071024E25261A18D22186114241A1211A241212D22C058224314E1826511E6
+:80208000445014139148118129914A4911486361105C124C312512241110A821984951844C6AC2839484203144C024EF1A062440024110042542081A0400101845618281D04802400810185218418001604120018470111C4C4851C181001218120023648928B0FD0C000000000080438241011048884112011400411911491888314846D7
+:80210000111442444158182D181C413C4810486164008614588600814C02419FD5444244420221493112212810420400400114200450A246A9211C4254426410110448260424442211C40013042302871483120A904C29644600F0E86E242418188100002118002125025084912721108281114252292216A121141147225028404651480F
+:80218000000011181846F4481610041823A4243850421800CF2D074006411100413826042054854451384311146411414511141844C2284420410822362104D081014800110010A82129840A5042C4228440F8E11DA028000045025012268202211601250210022100244002400869414254216024101A4214C81620241408424648012CA9
+:8022000054489024214048F1E5FB004008801201002428140000218301161108000084181008948122800100160420412111311AA04120A1212001B01202AFC2041425D8414216248121810114124C01128100C0180048008110041811192181A14100281E44182002608222225022A0420042800148F0817A00840024004052840000405F
+:8022800011080064A02110041840D1810121241004114111A111104409614E183015701412082923012128F03F344028D124455884107414081832C4C022001C419121808241418863121D8828290240CC21404108488001811904168804801281248804001A1246F4199FD024728E5A4E65424212217132C2121B222E186552581C5148C7
+:8023000018CC115A4227254C4141D642424652889D1514B5D9A2714868A44A455215105B621F91D1C452829941911889D288C1191981E224F9225C81CD524F66B118E2925148FBB22421602144214C53244D1A18268CD1228294132125711B59391F91E1A1C13417815D7270491AB11B52718CD28501CB216B21B71135F5644423515447DE
+:80238000458711811C014AF418686FC456212F44D44544F17486A954282F442612624268F034EB10A111195388D534142B114419B214122291111612143124214902151122518BF0283926B534333687211E14154584B2341242D2A8C2192E184634185D4516B94141E29745725AF2426A8E58844B244F2361418982411474A6031D24D0AD
+:8024000081021912181118113811811285311430243024814B42B0240449041800008122422200288032428C1282122641220116C8229228842CE281041E48F0E7E8F021271F52F31414CF62F2A127FFF1711EDE6AF1172D7FF3F31E3AAF2252BBE51CF32C2E6F71D166D222F2323E3F73F54C6C5E718FF6D4F2F62E7A2FE2F1272AF7D2BA
+:80248000C5FB1E163FA3F2424E2FB5F563637F37D1B7F236335F72F34A69BFB7F7723BBF12F65554DF76B742F4716385DEEEF44A48CFE4F164A66F23B36AF64C2256F868388F82F24E4DEF294D53621FD5F535377F72F6A626FFF1F11F1FBD176FC2F3272FFFF2F23B332F625266FFE1F322222F33D376D2F6F222363F53F55C6C4D27AFA2
+:80250000D3D1F8F6AEFB2FF2F227AFFF53D3BCF11F17AF71F1525EAF25F56B6B7F73D1F7F616175D47ED2DBFB3F356199D43FFD5F56D6F6B661F36D668721EF74A69CFE4F424266F63F37C74CF24F2442AAF86A2664F64F5356810F61751DFD3534CE5FC3737FF71F1161C6F62F23B33BF73F332381D333F31F1171495FB22223B1157F21C
+:802580002F83F15531BF91F53D1D8FB2F1462B7F86FA31377FF2F32F2DC5FA1D172FB1F1246E2FA1F5541E3F17D131F617177F71F13B1B9FB1F351191F91F57173BF14E547F77363AFA1D367F15F55EF66FF32B26FE1F1725C6F66F73E546F82B354D744F16115247F32B21CF51C1AEFE652DF6F63F31E166FC1F13737AF22F33A363FB337
+:80260000D326D3FFF12B1A3F3252FF757E23FB321A7F15F31D4D9FB7F5281BEFB4F27FAA3F73F2A73FFFD3F31C1ADF71F1363E4FE3F7125A4FE7F33717FD27FF73F35717FFF3F159731FF7F213591F33F75B518F47F77333EF21F11716DF57F57EF62F23FB36366FC7F77676EF43F73638CF83F344454F1D0D2210062200100400244011D5
+:8026800001120030112800118001491198148314040000418041088C642248C0487440A44124481400F0F7A9400114CC523240514118282712400120120A1C2202002618088912C421A40012224214502850288445321124901880012D14368841982280A1414449F452F2D024F4112485F2112483F41124A3D441B24AD141B24A9921AB6F
+:802700009459F44A9543F24A9543F2429557822D954F82C4955FA2C4854FA264514FA264193FA27498C54ADE242E4A1F49D224F49124C5F2912483F49124A3F4812CAB141D24AF349921AF1419F54A924782ABB443F24AB24782A9F9244889F9244ACFC9074F2294412E521741C35641AF24D141B24AD141F24A961D24A9AB61AF5429F1A4
+:802780004AA7F04AB716F84AB48CF442B5ACE544FA22CA1E856F8264192E4A87492E4AD675227A91FC224A1B69AF32B5917268F1916427161FC8B66EC124AF6488B2489A25AD824F88B44802AF240B8BA461ABA44F22F1CD226088820000000040042800000000218001880000400100000000000044000000001048012F154C02502240E8
+:8028000011415822008140110140420428800110488E011124181200214C1141180481248412115012841120040000816074EFB80960488608220012814511028421000083414A11A81281252404816084452246A424146221400113111A81469241224844C0248485024934424226011F614F03437C8218120184295182454308261C018E
+:802880000080410A8981731258C2874C29110887244172E01412E96621145814405982B158D0163421221504661448024125021443F1F795000020120100004003002441812214000000400112214424001100200120124102830400400848428C848274E20300458142022041311100144014810181004508002114A02145022420022000
+:80290000114204114312014C021100004008901820049FEA0C2D15104212C51A578124502211290144142145121874241A8821115148682054260043628427411002851238262508A391182184182C2101A446C821260A2E444008AF3E4B524110C52244123781404241111201512112250884840011642A04703202C024902410C21285E3
+:802980001224126A4225481802001200422668822189078C043FAA04182400151248C412111221124004114410CC267014280184108114542440924823010050284414C01118431298112C0110588214004100E0940200112048440419516210012001401104542150211002004004228423A821C122410041290890114128200510042454
+:802A000084298121F1CEC42424C02814418342020016840243022110068421A154800100A44829429142409241811904411181893112410043921481008324422835424116B69D03134202200884812100160240480824112100844400112411458801401404181224128150141C0200400181278124180084004FC20E11902914302424D2
+:802A80005021001C130200506215022505451945020015984C2830224427681924B11142224151285971124124011045181858682A11E88194184076B20F272210024184C1842941941200418D1284104144088440024041022562412044082A4104444184418628021400124A012981041082C414F04B6E00000020411111541814001446
+:802B00008C411204244481401804402A41D862C112121A02441889C114259815005480812212420236024351220000AFB204264414512283921281D0228102109B128111611012314821A411421421200420422334143283444261129011111813021430111844301448304400445F580310480115140444111818D021425122440040147F
+:802B80008801502A8420011200002502410000000091400441001014220100BFF306008C410490121281112112800112890240088012068042040012439411705409180048855442401484440180942810924441A021F0F5642419018110081121C123921600800284C1C014218181C4218150482445021440140E002041842161A1122C4C
+:802C0000018CD1426113008381711488011249311F508440444602C4458212454204282124412C01814100181800214110544225014088841414024044042899228202410023022210029FD90E10922200182002008082020014450240810544B01A142102114280044880021127114041C1244004140081424210828104EFD20386318410
+:802C80000014408521224182010041000010120200001006414441000000400800818100478210524800241828F05922C018F0164240440460410044A1280060812823810221D028038C1852421840681484464218C4411C8111022B41F012412444146800002858281002BFDC0B4C31881F814144D24251112D363FA3135522182427213B
+:802D00002217A125C212218D16A78440528E4D2C702A5866272267214CE12295166B144AA15442123D16163116FC51468564112483722CC2419763468462C4497412784686011674740B573282E511528812C94111EC41611125B12382014901C791247598248CB12845744A52A11287914C11485284441FC3542247431818D0A151514074
+:802D8000B115F12244CC7341094B110024C5F2421445A233123A14F4EA26241245C6264572275524163C14542F32D28461218549519225742C4C94241264A541781102A12C0443C414657113A44424C514D3C4C429471123A21483B1114593359391221D31314913743AA8113E224E540038F0F76CB01112D281021D288002841412001C85
+:802E0000011C61821C21C2112AD418A142142A54182A7418816411481A021A021B218002282304632631421223042744122324422243A143A042F0EDB51457535753DD1F2F5272AD7F2557B9BFE3D2CFF234252D123F21F11B18AF8161216F33F31313BF31F31F3DAFD37371F761291F12F2666117561FA6F233326FA4F471371F75F11417
+:802E8000148FA5F76634AFD3F175155F51B325E333F327277F74D776F222627F72F64D5F77342F25F56363BFF5F54313EFC4F46664224F66E465F76E7E7E1462286F46F67B3F347F72F17756DFF3F22765F7F27762F5FB2F3AFFE2F2262565F61312BFA2F11A1A2F23F132337F72F31E3EED3CEFF3F37715AF85A1444F777763F1CB8A3F04
+:802F000024F46BEB37155F757114F65B7F6F43F33E1E67E74B315B371E137F74F147676F55F622627F72F64B4F37146D163F12F25B5F3F15712ADC46A2644F62F26456EFE4F644262B266AF44476BFB243D277F31746DFF253EEFDAFF5FF2B2964EFC3F22D2D35F61212AF81B31311FB1D12AF12F31E166F42F13B1C9CF612184AF4211271
+:802F80002D692D8B2FA5F5171F4F63F614165F55F43C1F6D26EFE17316FE341419F71417557735F77351BFA17143F14D1B6B732F63F32221BFB5D346D5AAD146D246F256566F67F54E7E6F4197126AD444F32DF8347F71F21652D7F1EFD6D2FF721BFE2F2F75F72F3BFFD3D263F113139D3B3F21711BF23F36E5FD1F1F6742FFE3F11E6909
+:803000009F91A1331FA6D59AD69AF83A3AEFEED657F414165F74F43A1F6D36EFE153661F13B111F7343777716F76F43311DFE17146F7491B3F12F729373F14F45D1B7F51F51D1B6F44F46E446F62D166F74F5C4F43B52281F344442F17016100104408122641084043080040040000850400100441100421100418901470240100000044BF
+:8030800040044400D0CA0F00C5020089416412158401255181814518088145081608A400D086014004D02404480011405418160813118842214111142A714222018001DFDF082E521F41F228121FC132681FC1326A1D24AF24F1112CAF14D981B24A19F54A9153F24AB157822F347B25F84AB15F82E414FB254A8F14FA254A8F15F2254A76
+:803100008F1DF2235AD6F5225A9E242E5A1F49E232F591248F32F1912C83F6916CE3F49164AB141F41B64A9961AB945B41AB944B43AF24BB34B4427B34B842FB24484AFB244AAF2B038CD541D42875117C4872117C4A52C1AB141E2C4E851D2C2BB455F8429355F8429255B84A59858B94512B945D1A8B945D828B855183FC2118874C2E35
+:803180001B87582F2265C82E5B8AE43275913C221FC914FA9168211FC1969A1B61A9FB15482D844F81D42ABA14B4483B14295A8629DBA4F1B3EE0082480000000044800200000010420280080000140000480000000000280000000014F08761401211180211409122000014508240880100148140124418080028200300004911420A44C6
+:80320000008901218001408801D048F2889B00821005246041184982114108214C32184141811008450210011185028412814100244541081628420825880140180C490824406811C08A00234C58414011C21521414911618210D24A8211684181101871120A827110110820521887422044424548028D228441450826082508184140CA25
+:80328000128416F11824AFCB0210410200002A8102001100814100001004008481244028011200006041890100211218004508820000003FE101244001412002225012400100281128A0248485012800412841201208122302002484215028128502002445081230144220042F23071D2424384114183D120018404818082441848485918D
+:8033000018142250282426026502678212498512044184C0284018A42181C011901A00160C47A12C04302C847F1A0F4D21C0214480D132022800101908604285210222148712400227226042D08202842212220000A1814438A911381390181048081818008C44F8217740022901542001205112840000214018C95884008C0250242441E0
+:8033800041321E444006448190281002810000212441498111DC26240426049FA743020067821614020090281722004004100411A1409214144004282448410048A1004480220110014180123226212A410C444B12129F64074424441400001144418420425418002100211C8121021622228131141460428012B8491204471285041008BB
+:8034000010449128004C0248212901123F9208100200002100000000501800002004410084818481261208001200004184A012842100C400410000818FAD0300216712120021008C4219024154002100811C0150141662421828904822A1002189036052CC921484841A4218421158E22228128D44211014786F076502418445020014442E
+:80348000800200845081444001C0424C0200818C711814423424A0424041140400001400004016C424004381033FD60B145028400850842210080091100400811094441028123844484148221C04288022040041A021002C2191326087444225820418F05A440018D028412412124214082810081B2189122A32210022358A010024111C03
+:8035000044A6410041465422445042F022118312D118A112311414695142428C12043848C1BF840D0080025018402A02100940842182011826C41200002606C430210041101208302144C012105281244400004D1260814480F643822415220244244418241285342310121801400284401886022743004129024548140254224422258415
+:803580000140019012811088032840288405D0AF0E108842645244406C4264000023024421008942B428140422834484264102165884A4400284851218984860810028164A44088448460842CC24F1FF464088410C8053484001242228280040180A0080120422008D2211802201A481006012481822111800281821805282221008289F42
+:8036000066061A42C2138D32120021840050A22870229228160112501823914822154414188304504242208262822822302140480226C11911153824C9862412140428441B19A018230A30214001112134400224004002000028108884110440881114021004C1418502C424244004240000404401FF5603849055800841301222401481B2
+:80368000020010582880124AC216C084222212442342111442084D4381471218142665112284C49028448412450819448C721234484F384E6211835A3863F221A46F2352B545E852D224128312092539236438298202284D64A425D65C1228D26474265A412671226691644D26A12D2C25564844D7345C21711141031F91711498224146AA
+:803700001804C716859C444E1983F4C84D90312F28A211167612011285341B8184242511084C723A581A878199713878287418BA2C262252844CD612721944B346B218924441F0246245B22CF224234D194CD2819212AFC233123D3A25D2685179AFC253468F84722442BE44E4C661534D244F2506241AD1C5D2885384448554224D1A279D
+:80378000C23C3222265A8217221249424A421852942A7143942423E14256AC724A374485F644184E1681330287128C04BB23307C9F9242D2887138312835F1141816B238E742F45A682924A12149E483F447FE10115281108151815081100115084043C811D018018D115018400185010010042211508100230221166822160816081608A4
+:80380000160840018112F0DCF41417313F33F237274F72D235F22627BFF1517EDD27CF52F221231F32521B8553311F23F221122F23F1311135F811124B335F52F2272673D246F265455F72723EFE3632777446F6327EAFB3F6272125D23272227323D2BA52AA8FC1F16F6D15D175F13A323F32D373D133F117132D328F27F346248B22A557
+:80388000B822A6548FC6F76868FFB64FF131233B44D5F725675F727227F71F1FF5FF2F237F72F227271F22F22B253553331F63F22B36173217923F83F33138FFD3F1456DFFE7F527267F5AFB252D9FF6FC7A7A6F2777477743F73A7EAFA3F723291D232F34F62A2BBF22523AA5FA5A5CF5D599F13D17EF63F32A23BFF2F31B139FB1F12ABE
+:8039000022AF26F26E248F86F64A492F26F262686AD3AAF55937F021333F22F6171345F625254F43F31D1DC5FC3D3DCFC252711F22D29952B815F334234B321D2128AF93E382529B1E1CCFD6D744F225A54FC6F62C2EFFD5F23E7B6F32E672F4321C8FA5558235D76254ADF742CFF2F21F1995FE4B4DB5F91D149FE1F13333BFB1F31B11AA
+:80398000BFB1D16EF13E3E2B448784CD4C4FC6F612588F81D1CCF1BE1D343F32F32262F5FF64255F73F33637F55FFEFFF3F126273F72E222D29F523335F33627EFC2A3319D29A5E981712CFC153FCFF4F726262BA15792CFECF67F3BEFF3F726672D63AFE1F35A5A35D164D266D4EFF22F26E5F71F1FDFF4545EBF91F11D16BFE1F12B2B6D
+:803A0000DFB1F31A119FB1F12E16AFE757CECFE6D2EEF4626C2F86F2783ACFC2F655C9200222F0241250248422004002006C0200004E24C024212880128602831404002110423824841412224021410500850642E044024F470E86022CC12C00214418C480120830248504400884D084044181452274214A14A424254A2442342C10C82430
+:803A80008D1116742A125128125084A51284F1244842451832248911F496E6C0421F41522A1FC132481FC1324A1D2CAB141D2CAB941D28AB9455B84A7935F84A915783AF147935D81AF935488D915FA2D418F8254A87115FA264192E4A87594D4A9E24ACF491243CF4912485F3912C87161F49324A1F49F26A121FC1B24AF91128AB945796
+:803B000081AB944783AB9447832B94478329F93448984FA2F47666C0481F41D62AF4112C83F4112C23D4C1B24AD1C1E244D9C1B24A5B852B945783AB845781AB84578189B83794885F2295985BC28B81572283E9A2759855B49E218C65C9BCE44946E3C97268F19124A11F49F266121FC1F248841FC1B2427B15B8427814F84A8247834AAD
+:803B8000783498AA6B4329D9A4F59CA400800400000040042800000000218001890800001400004800000000000000000040016F524B213821100528602240021322514100841002200248002100406424188100000011212218800181444828230118C44088019B37008200008188902900000000001008000085042602000000400100B3
+:803C0000400800100140083110011445F824FD142006548012682A401234213251008100404208008A014140420421851108421001142122004301224480921AC011811512681116E8D90910010000001D280000000021002280042440082280240100000000901800101821040021410010F4493D0000000000000048000000000000002C
+:803C800000000000000000000000840000000010F485990000000050822400100100000000000081404804242002000019112801001116080084000000F082AE0000000010082100190400000000000084404804108202000012811800008941081008000010F4DF8E00000000100200000000000000000000000000000014000010010067
+:803D000000000000E0D708000041000000240000000000280000000000210000100224004008001810080000006FD60F000084180000008400104402690100110012102104808442127122422401142814165422120000008241400C00FF2707100100000000000000000000000000204404000000810000000021100218844200005F3A7C
+:803D800002100140080000008100104402210028110018102104442C041001C012840021161432180080114228180400004D8200001024010000100200003014000000000042002250222861001122110021400200201188544800F09EB90000444001000000000044000000414004000000882200000040082A01001008800100004FDA3A
+:803E0000090000000000000000000000000000000000000000000020020000000000001EBE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000022000000000000EA
+:803E8000E0E10B0000000000000000000000000000000000000000000000000000000000F04FFE000000100800000000000021000040022001001002180000000000000000120000F0D2B9000000000000000000000000000000000000000000000000000000000000FFE40F0010080000000000000000000000000000000000000000005C
+:803F0000000000000000DFDF04000000000000000000000000000000000000000081000000000000000000EF2C07000000000000000000000000000000000000000000000000000020020000EF1C040000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000100200002400180000001808
+:803F80000010080000000000200100001B5700008400840000000000000000000000000010020000000000000000800200006EDB000000000000000000000000000000000000000000000000000000000000FFE40F000000004005000040040021004400100218808802218001884008000028840000800200004FB1070014000048405585
+:8040000088281082044480022100448002214818808802214818448828842148408481421882041E148002211A01445C0300004001008004540000484004000040040000008002000088000000804208000000F0469900000000005400000044001002400400218001882810021880088400840028840000800200005FF90B000000000091
+:80408000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F002100140000480080022148008002000080028004000080044480022148400400214840040021FF18040000000000000000000000000000000000000000000000000000C1
+:80410000000000F04FFE000000000000400500440000000040040000280000000088000000804208000000F0D2ED000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000044000000000000008002000000000000000000000000F02BAF000000000000400500000000000044000000000001
+:3E418000000088000000804208000000F0B6BCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C
:00000001FF
diff --git a/xpp/init_card_1_30 b/xpp/init_card_1_30
new file mode 100755
index 0000000..68a6d02
--- /dev/null
+++ b/xpp/init_card_1_30
@@ -0,0 +1,535 @@
+#! /usr/bin/perl -w
+use strict;
+
+#
+# Written by Oron Peled <oron@actcom.co.il>
+# Copyright (C) 2006, Xorcom
+#
+# All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# See the file LICENSE in the top level of this tarball.
+#
+
+#
+# $Id$
+#
+# Data format:
+# - A comment start with ';' or '#' until the end of line
+# - Blank lines are ignored
+# - Fields are whitespace separated (spaces or tabs)
+#
+# The fields are (in command line order):
+# 1. SLIC select in decimal (range 0-7).
+# * is a special value which means ALL SLICS (only some registers
+# accept settings for ALL SLICS).
+# 2. Command word:
+# - RD Read Direct register.
+# - RI Read Indirect register.
+# - WD Write Direct register.
+# - WI Write Indirect register.
+# 3. Register number in hexadecimal.
+# 4. Low data byte in hexadecimal. (for WD and WI commands).
+# 5. High data byte in hexadecimal. (for WI command only).
+#
+#
+
+package main;
+use File::Basename;
+use Getopt::Std;
+
+my $program = basename("$0");
+my $init_dir = dirname("$0");
+BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir", "$init_dir/zconf"); }
+use Zaptel::Config::Defaults;
+my $unit_id;
+my %opts;
+$ENV{XPP_BASE} = '/proc/xpp';
+
+getopts('o:', \%opts);
+
+my $debug;
+my $skip_calib;
+
+my $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
+my $chipregs = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+
+sub logit {
+ print STDERR "$unit_id: @_\n";
+}
+
+sub debug {
+ logit @_ if $debug;
+}
+
+# Arrange for error logging
+if (-t STDERR) {
+ $unit_id = 'Interactive';
+ logit "Interactive startup";
+} else {
+ $unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
+ open (STDERR, "| logger -t $program -p kern.info") || die;
+ logit "Non Interactive startup";
+}
+
+sub set_output() {
+ my $output;
+
+ if($opts{o}) {
+ $output = $opts{o};
+ } else {
+ # No subunits in FXS (everything is subunit 0)
+ $output = $chipregs;
+ }
+ open(REG, ">$output") || die "Failed to open '$output': $!\n";
+ my $oldfh = select REG;
+ print "# Setting output\n" if $opts{o};
+ return $oldfh;
+}
+
+sub mysleep($) {
+ my $timeout = shift;
+ select(undef,undef,undef,$timeout);
+}
+
+package FXS;
+
+sub gen {
+ my $fmt = shift;
+ $| = 1;
+ printf "$fmt\n", @_;
+}
+
+my @SlicNums = (0 .. 7);
+
+sub write_to_slic_file($) {
+ my $write_str = shift;
+
+ open(SLICS,">$chipregs") or
+ die("Failed writing to chipregs file $chipregs");
+ print SLICS $write_str;
+ close(SLICS) or die "Failed writing '$write_str' to '$chipregs': $!";
+ main::mysleep(0.001);
+
+}
+
+sub read_reg($$$) {
+ my $read_slic = shift;
+ my $read_reg = shift;
+ my $direct = shift;
+
+ write_to_slic_file(
+ sprintf("%s R%s %02X", $read_slic, $direct, $read_reg));
+ main::mysleep(0.005);
+ open(SLICS,$chipregs) or
+ die("Failed reading from chipregs file $chipregs");
+ #awk '/^SLIC_REPLY:/{print $5}' $SLICS | cut -dx -f2
+ my @reply = ();
+ while(<SLICS>){
+ #if (/^ /) {
+ # main::debug "answer line: $_";
+ #}
+ s/#.*//;
+ next unless /\S/;
+ if (/^ \d*\s+[RW][DI]\s+[[:xdigit:]]+\s+([[:xdigit:]]+)\s+([[:xdigit:]]*)/){
+ @reply = (hex($1), hex($2));
+ #main::debug "got [$reply]";
+ last;
+ } else {
+ main::logit("Got from '$chipregs' a non-matching line '$_'");
+ }
+ }
+ close(SLICS);
+ die("Failed reading from '$chipregs' ($read_slic,$read_reg,$direct)")
+ unless @reply;
+ if ($direct eq 'I') {
+ return @reply;
+ } else {
+ return $reply[0];
+ }
+}
+
+# TODO: rearange arguments
+sub write_reg{#($$$$$) {
+ my $read_slic = shift;
+ my $read_reg = shift;
+ my $direct = shift;
+ my $reg_val_low = shift;
+ my $reg_val_hi = shift;
+
+ my $str = sprintf "%s W%s %02X %02X",
+ $read_slic, $direct, $read_reg, $reg_val_low;
+ if ($direct eq 'I') {
+ $str .= sprintf " %02X", $reg_val_hi;
+ }
+ write_to_slic_file($str);
+}
+
+sub log_calib_params() {
+ for my $i (100 .. 107) {
+ my $line="Calib Reg $i: ";
+ for my $slic (@SlicNums) {
+ $line .= " ".read_reg($slic, $i, 'D');
+ }
+ main::debug($line);
+ }
+}
+
+sub init_indirect_registers() {
+ return write_to_slic_file("#
+* WI 1E 00 C2 55
+* WI 1E 01 E6 51
+* WI 1E 02 85 4B
+* WI 1E 03 37 49
+
+* WI 1E 04 33 33
+* WI 1E 05 02 02
+* WI 1E 06 02 02
+* WI 1E 07 98 01
+
+* WI 1E 08 98 01
+* WI 1E 09 11 06
+* WI 1E 0A 02 02
+* WI 1E 0B E5 00
+
+* WI 1E 0C 1C 0A
+* WI 1E 0D 30 7B
+* WI 1E 0E 63 00
+* WI 1E 0F 00 00
+
+* WI 1E 10 70 78
+* WI 1E 11 7D 00
+* WI 1E 12 00 00
+* WI 1E 13 00 00
+
+* WI 1E 14 F0 7E
+* WI 1E 15 C0 01
+* WI 1E 16 00 00
+* WI 1E 17 00 20
+
+* WI 1E 18 00 20
+* WI 1E 19 00 00
+* WI 1E 1A 00 20
+* WI 1E 1B 00 40
+
+* WI 1E 1C 00 10
+* WI 1E 1D 00 36
+* WI 1E 1E 00 10
+* WI 1E 1F 00 02
+
+* WI 1E 20 C0 07
+* WI 1E 21 00 26
+* WI 1E 22 F4 0F
+* WI 1E 23 00 80
+
+#* WI 1E 24 20 03
+#* WI 1E 25 8C 08
+#* WI 1E 26 00 01
+#* WI 1E 27 10 00
+
+* WI 1E 24 00 08
+* WI 1E 25 00 08
+* WI 1E 26 00 08
+* WI 1E 27 00 08
+
+* WI 1E 28 00 0C
+* WI 1E 29 00 0C
+* WI 1E 2B 00 01
+
+* WI 1E 63 DA 00
+* WI 1E 64 60 6B
+* WI 1E 65 74 00
+* WI 1E 66 C0 79
+
+* WI 1E 67 20 11
+* WI 1E 68 E0 3B
+#");
+}
+
+sub init_early_direct_regs() {
+ return write_to_slic_file("#
+* WD 08 00 # Audio Path Loopback Control
+* WD 4A 34 # High Battery Voltage
+* WD 4B 10 # Low Battery Voltage
+* WD 40 00 # Line Feed Control
+#")
+}
+
+my @FilterParams = ();
+
+sub save_indirect_filter_params() {
+ for my $slic (@SlicNums) {
+ for my $reg (35 .. 39) {
+ $FilterParams[$slic][$reg] =
+ [read_reg($slic, $reg, 'I')];
+ write_reg($slic, $reg, 'I', 0, 0x80);
+ }
+ }
+
+}
+
+sub restore_indirect_filter_params() {
+ for my $slic (@SlicNums) {
+ for my $reg (35 .. 39) {
+ write_reg($slic, $reg, 'I',
+ @{$FilterParams[$slic][$reg]});
+ }
+ }
+}
+
+my $ManualCalibrationSleepTime = 0.04; # 40ms
+
+sub manual_calibrate_loop($$) {
+ my $write_reg = shift;
+ my $read_reg = shift;
+
+ # counters to count down to (at most) 0
+ my @slic_counters = ();
+ for my $i (0 .. $#SlicNums) {
+ $slic_counters[$i] = 0x1F;
+ }
+
+ # start calibration:
+ my $calibration_in_progress = 1;
+ write_reg('*', $write_reg, 'D', 0x1F);
+ main::mysleep $ManualCalibrationSleepTime;
+
+ # wait until all slics have finished calibration, or for timeout
+ while ($calibration_in_progress) {
+ $calibration_in_progress = 0; # until proven otherwise
+ my $debug_calib_str = "ManualCalib:: ";
+ for my $slic(@SlicNums) {
+ my $value = read_reg($slic, $read_reg, 'D');
+ $debug_calib_str .= " [$slic_counters[$slic]:$value]";
+ if ($value != 0 && $slic_counters[$slic] > 0) {
+ $calibration_in_progress = 1;
+ $slic_counters[$slic]--;
+ write_reg($slic,$write_reg,'D',$slic_counters[$slic]);
+ }
+ }
+ main::debug($debug_calib_str);
+ # TODO: unnecessary sleep in the last round:
+ main::mysleep $ManualCalibrationSleepTime;
+ }
+}
+
+sub manual_calibrate() {
+ manual_calibrate_loop(98, 88);
+ manual_calibrate_loop(99, 89);
+}
+
+sub auto_calibrate($$) {
+ my $calib_96 = shift;
+ my $calib_97 = shift;
+
+ #log_calib_params();
+ # start calibration:
+ write_to_slic_file(
+ sprintf
+ "* WD 60 %02X\n".
+ "* WD 61 %02X\n".
+ "", $calib_96, $calib_97
+
+ );
+ # wait until all slics have finished calibration, or for timeout
+ my $sleep_cnt = 0;
+ # time periods in seconds:
+ my $sleep_time = 0.1;
+ my $timeout_time = 2;
+ CALIB_LOOP: for my $slic (@SlicNums) {
+ main::debug("checking slic $slic");
+ while(1) {
+ if ((read_reg($slic, 60, 'D')) == 0) {
+ # move to next register
+ main::debug("slic $slic calibrated");
+ last;
+ }
+ if ( $sleep_cnt > $timeout_time/$sleep_time) {
+ main::debug("Auto Calibration: Exiting on timeout: $timeout_time.");
+ last CALIB_LOOP;
+ }
+ main::debug("auto_calibrate not done yet: slic #$slic");
+ main::mysleep(0.1);
+ $sleep_cnt++;
+ }
+ }
+ #log_calib_params();
+}
+
+sub calibrate_slics() {
+ main::logit "Calibrating '$0'";
+ auto_calibrate(0x47, 0x1E);
+ main::debug "after auto_calibrate";
+ manual_calibrate();
+ main::debug "after manul_calibrate";
+ auto_calibrate(0x40, 0x01);
+ main::debug "after auto_calibrate 2";
+ main::logit "Continue '$0'";
+}
+
+sub read_defaults() {
+ # For lab tests
+ my $labfile = "$init_dir/genzaptelconf.env";
+
+ # Source default files
+ $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile";
+ my $var_debug = 'DEBUG_INIT_FXS';
+ my $var_skip_calib = 'INIT_FXS_SKIP_CALIB';
+ my ($default_file, %source_defaults) =
+ Zaptel::Config::Defaults::source_vars($var_debug, $var_skip_calib);
+ $debug = $source_defaults{$var_debug};
+ $skip_calib = $source_defaults{$var_skip_calib};
+ main::logit "From $default_file: $var_debug=$debug $var_skip_calib=$skip_calib";
+}
+
+package main;
+
+main::logit "Starting '$0'";
+
+FXS::read_defaults;
+main::debug "before init_indirect_registers";
+FXS::init_indirect_registers();
+main::debug "after init_indirect_registers";
+FXS::init_early_direct_regs();
+main::debug "after init_early_direct_regs";
+if($skip_calib) {
+ main::logit "==== WARNING: SKIPPED SLIC CALIBRATION =====";
+} else {
+ FXS::calibrate_slics;
+}
+set_output;
+while(<DATA>) {
+ chomp;
+ s/[#;].*$//; # remove comments
+ s/^\s+//; # trim whitespace
+ s/\s+$//; # trim whitespace
+ s/\t+/ /g; # replace tabs with spaces (for logs)
+ next unless /\S/; # Skip empty lines
+ main::debug "writing: '$_'";
+ print "$_\n";
+}
+close REG;
+
+main::logit "Ending '$0'";
+close STDERR;
+exit 0;
+
+# ----------------------------------==== 8-channel FXS unit initialization ===-----------------------------------------
+
+__DATA__
+# Change SLICs states to "Open state"s (Off,all transfers tristated to avoid data collision), Voltage sense
+* WD 40 00
+
+# Flush out energy accumulators
+* WI 1E 58 00 00
+* WI 1E 59 00 00
+* WI 1E 5A 00 00
+* WI 1E 5B 00 00
+* WI 1E 5C 00 00
+* WI 1E 5D 00 00
+* WI 1E 5E 00 00
+* WI 1E 5F 00 00
+* WI 1E 61 00 00
+* WI 1E 58 00 00
+* WI 1E C1 00 00
+* WI 1E C2 00 00
+* WI 1E C3 00 00
+* WI 1E C4 00 00
+* WI 1E C5 00 00
+* WI 1E C6 00 00
+* WI 1E C7 00 00
+* WI 1E C8 00 00
+* WI 1E C9 00 00
+* WI 1E CA 00 00
+* WI 1E CB 00 00
+* WI 1E CC 00 00
+* WI 1E CD 00 00
+* WI 1E CE 00 00
+* WI 1E CF 00 00
+* WI 1E D0 00 00
+* WI 1E D1 00 00
+* WI 1E D2 00 00
+* WI 1E D3 00 00
+
+# Setting of SLICs offsets
+# New card initialization
+0 WD 02 00
+0 WD 04 00
+1 WD 02 08
+1 WD 04 08
+2 WD 02 10
+2 WD 04 10
+3 WD 02 18
+3 WD 04 18
+4 WD 02 20
+4 WD 04 20
+5 WD 02 28
+5 WD 04 28
+6 WD 02 30
+6 WD 04 30
+7 WD 02 38
+7 WD 04 38
+* WD 03 00
+* WD 05 00
+
+# Audio path. (also initialize 0A and 0B here if necessary)
+* WD 08 00
+* WD 09 C0
+
+# Automatic/Manual Control: defaults but:
+# Cancel AOPN - Power Alarm
+# Cancel ABAT - Battery Feed Automatic Select
+* WD 43 16
+
+# Loop Closure Debounce Interval
+* WD 45 0A
+
+# Ring Detect Debounce Interval
+* WD 46 47
+
+# Battery Feed Control: Battery low (DCSW low)
+* WD 42 00
+
+# Loop Current Limit
+* WD 47 00
+
+# Ring VBath:
+* WD 4A 3F
+
+
+* WD 6C 01
+
+* WI 1E 23 00 80
+* WI 1E 24 20 03
+* WI 1E 25 8C 08
+* WI 1E 26 00 01
+* WI 1E 27 10 00
+
+#------ Metering tone
+* WI 1E 17 61 15 # Amplitue Ramp-up
+* WI 1E 18 61 15 # Max Amplitude
+* WI 1E 19 FB 30 # Frequency
+* WD 2C 00 # Timer dL
+* WD 2D 03 # Timer dH
+
+# ------------------------------------- Initialization of direct registers --------------------------------------------
+
+# Mode(8-bit,u-Law,1 PCLK ) setting, Loopbacks and Interrupts clear
+
+* WD 01 29
+#* WD 0E 00
+
+#* WD 15 00
+#* WD 16 03
+
+# Clear pending interrupts
+* WD 12 FF
+* WD 13 FF
+* WD 14 FF
+
+#* WD 4A 34
+#* WD 4B 10
diff --git a/xpp/init_card_2_30 b/xpp/init_card_2_30
new file mode 100755
index 0000000..c682c19
--- /dev/null
+++ b/xpp/init_card_2_30
@@ -0,0 +1,417 @@
+#! /usr/bin/perl -w
+use strict;
+
+#
+# Written by Oron Peled <oron@actcom.co.il>
+# Copyright (C) 2006, Xorcom
+#
+# All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# See the file LICENSE in the top level of this tarball.
+#
+
+#
+# $Id$
+#
+# Data format:
+# - A comment start with ';' or '#' until the end of line
+# - Blank lines are ignored
+# - Fields are whitespace separated (spaces or tabs)
+#
+# The fields are (in command line order):
+# 1. SLIC select in decimal (range 0-7).
+# * is a special value which means ALL SLICS (only some registers
+# accept settings for ALL SLICS).
+# 2. Command word:
+# - RD Read Direct register.
+# - RI Read Indirect register.
+# - WD Write Direct register.
+# - WI Write Indirect register.
+# 3. Register number in hexadecimal.
+# 4. Low data byte in hexadecimal. (for WD and WI commands).
+# 5. High data byte in hexadecimal. (for WI command only).
+#
+#
+
+package main;
+use File::Basename;
+use Getopt::Std;
+
+my $program = basename("$0");
+my $init_dir = dirname("$0");
+BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir", "$init_dir/zconf", "$init_dir/utils/zconf"); }
+use Zaptel::Config::Defaults;
+my $unit_id;
+my %opts;
+$ENV{XPP_BASE} = '/proc/xpp';
+
+getopts('o:', \%opts);
+
+my $debug;
+
+my $xpd_name;
+my $chipregs;
+
+sub logit {
+ print STDERR "$unit_id: @_\n";
+}
+
+sub debug {
+ logit @_ if $debug;
+}
+
+# Arrange for error logging
+if (-t STDERR) {
+ $unit_id = 'Interactive';
+ main::debug "Interactive startup";
+} else {
+ $unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
+ $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
+ $chipregs = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ open (STDERR, "| logger -t $program -p kern.info") || die;
+ main::debug "Non Interactive startup";
+}
+
+sub set_output() {
+ my $output;
+
+ if($opts{o}) {
+ $output = $opts{o};
+ } else {
+ # No subunits in FXS (everything is subunit 0)
+ $output = $chipregs;
+ }
+ open(REG, ">$output") || die "Failed to open '$output': $!\n";
+ my $oldfh = select REG;
+ main::logit "# Setting output" if $opts{o};
+ return $oldfh;
+}
+
+package FXO;
+
+sub gen {
+ my $fmt = shift;
+ $| = 1;
+ printf "$fmt\n", @_;
+}
+
+my $OPERMODE = 'FCC';
+
+sub turn_off_leds() {
+ # Turning off red LEDs
+ # Warning: do not send WD 31 20 A0 !
+ foreach my $i (0..7) {
+ FXO::gen "$i WD 20 A0";
+ }
+}
+
+# This data is manually taken from utils/init_fxo_modes which is generated
+# during build.
+# Running this script with a single 'verify' argument, during build,
+# compare this data to a (possibly updated) utils/init_fxo_modes file.
+my $OPERMODE_DATA = "
+FCC reg16=01 reg26=C0 reg30=00 reg31=20
+TBR21 reg16=00 reg26=C2 reg30=02 reg31=20 ring_osc=7E6C ring_x=023A
+ARGENTINA reg16=00 reg26=C0 reg30=00 reg31=20
+AUSTRALIA reg16=40 reg26=30 reg30=03 reg31=20
+AUSTRIA reg16=00 reg26=C2 reg30=03 reg31=28
+BAHRAIN reg16=00 reg26=C2 reg30=02 reg31=20
+BELGIUM reg16=00 reg26=C2 reg30=02 reg31=28
+BRAZIL reg16=00 reg26=30 reg30=00 reg31=20
+BULGARIA reg16=00 reg26=C2 reg30=03 reg31=20
+CANADA reg16=00 reg26=C0 reg30=00 reg31=20
+CHILE reg16=00 reg26=C0 reg30=00 reg31=20
+CHINA reg16=00 reg26=30 reg30=0F reg31=20
+COLUMBIA reg16=00 reg26=C0 reg30=00 reg31=20
+CROATIA reg16=00 reg26=C2 reg30=02 reg31=20
+CYRPUS reg16=00 reg26=C2 reg30=02 reg31=20
+CZECH reg16=00 reg26=C2 reg30=02 reg31=20
+DENMARK reg16=00 reg26=C2 reg30=02 reg31=28
+ECUADOR reg16=00 reg26=C0 reg30=00 reg31=20
+EGYPT reg16=00 reg26=30 reg30=00 reg31=20
+ELSALVADOR reg16=00 reg26=C0 reg30=00 reg31=20
+FINLAND reg16=00 reg26=C2 reg30=02 reg31=28
+FRANCE reg16=00 reg26=C2 reg30=02 reg31=28
+GERMANY reg16=00 reg26=C2 reg30=03 reg31=28
+GREECE reg16=00 reg26=C2 reg30=02 reg31=28
+GUAM reg16=00 reg26=C0 reg30=00 reg31=20
+HONGKONG reg16=00 reg26=C0 reg30=00 reg31=20
+HUNGARY reg16=00 reg26=C0 reg30=00 reg31=20
+ICELAND reg16=00 reg26=C2 reg30=02 reg31=28
+INDIA reg16=00 reg26=C0 reg30=04 reg31=20
+INDONESIA reg16=00 reg26=C0 reg30=00 reg31=20
+IRELAND reg16=00 reg26=C2 reg30=02 reg31=28
+ISRAEL reg16=00 reg26=C2 reg30=02 reg31=20
+ITALY reg16=00 reg26=C2 reg30=02 reg31=28
+JAPAN reg16=00 reg26=30 reg30=00 reg31=20
+JORDAN reg16=00 reg26=30 reg30=00 reg31=20
+KAZAKHSTAN reg16=00 reg26=C0 reg30=00 reg31=20
+KUWAIT reg16=00 reg26=C0 reg30=00 reg31=20
+LATVIA reg16=00 reg26=C2 reg30=02 reg31=20
+LEBANON reg16=00 reg26=C2 reg30=02 reg31=20
+LUXEMBOURG reg16=00 reg26=C2 reg30=02 reg31=28
+MACAO reg16=00 reg26=C0 reg30=00 reg31=20
+MALAYSIA reg16=00 reg26=30 reg30=00 reg31=20
+MALTA reg16=00 reg26=C2 reg30=02 reg31=20
+MEXICO reg16=00 reg26=C0 reg30=00 reg31=20
+MOROCCO reg16=00 reg26=C2 reg30=02 reg31=20
+NETHERLANDS reg16=00 reg26=C2 reg30=02 reg31=28
+NEWZEALAND reg16=00 reg26=C0 reg30=04 reg31=20
+NIGERIA reg16=00 reg26=C2 reg30=02 reg31=20
+NORWAY reg16=00 reg26=C2 reg30=02 reg31=28
+OMAN reg16=00 reg26=30 reg30=00 reg31=20
+PAKISTAN reg16=00 reg26=30 reg30=00 reg31=20
+PERU reg16=00 reg26=C0 reg30=00 reg31=20
+PHILIPPINES reg16=00 reg26=30 reg30=00 reg31=20
+POLAND reg16=03 reg26=C0 reg30=00 reg31=20
+PORTUGAL reg16=00 reg26=C2 reg30=02 reg31=28
+ROMANIA reg16=00 reg26=C0 reg30=00 reg31=20
+RUSSIA reg16=00 reg26=30 reg30=00 reg31=20
+SAUDIARABIA reg16=00 reg26=C0 reg30=00 reg31=20
+SINGAPORE reg16=00 reg26=C0 reg30=00 reg31=20
+SLOVAKIA reg16=00 reg26=C0 reg30=03 reg31=20
+SLOVENIA reg16=00 reg26=C0 reg30=02 reg31=20
+SOUTHAFRICA reg16=42 reg26=C0 reg30=03 reg31=20
+SOUTHKOREA reg16=00 reg26=C0 reg30=00 reg31=20
+SPAIN reg16=00 reg26=C2 reg30=02 reg31=28
+SWEDEN reg16=00 reg26=C2 reg30=02 reg31=28
+SWITZERLAND reg16=00 reg26=C2 reg30=02 reg31=28
+SYRIA reg16=00 reg26=30 reg30=00 reg31=20
+TAIWAN reg16=00 reg26=30 reg30=00 reg31=20
+THAILAND reg16=00 reg26=30 reg30=00 reg31=20
+UAE reg16=00 reg26=C0 reg30=00 reg31=20
+UK reg16=00 reg26=C2 reg30=05 reg31=28
+USA reg16=00 reg26=C0 reg30=00 reg31=20
+YEMEN reg16=00 reg26=C0 reg30=00 reg31=20
+ ";
+
+my %opermode_table;
+
+sub opermode_setup() {
+ main::logit "Setting OPERMODE=$OPERMODE";
+ # Several countries (South Africa, UAE, anybody else)
+ # require a shorter delay:
+ if($OPERMODE eq 'SOUTHAFRICA' or $OPERMODE eq 'UAE') {
+ FXO::gen "* WD 17 2B";
+ }
+ # defaults, based on fxo_modes from wctdm.c .
+ # Decimal register numbers!
+ my %regs = (
+ 16 => 0,
+ 26 => 0,
+ 30 => 0,
+ 31 => 0x20,
+ );
+ my $mode = $opermode_table{$OPERMODE};
+ if(defined $mode) {
+ foreach my $k (keys %regs) {
+ my $fullkey = "reg$k";
+ $regs{$k} = $mode->{$fullkey};
+ }
+ }
+ foreach my $k (keys %regs) {
+ # Our values are HEXADECIMAL without a 0x prefix!!!
+ my $cmd = sprintf "* WD %02X %02X", $k, hex($regs{$k});
+ main::debug " regs: '$cmd'";
+ FXO::gen "$cmd";
+ }
+ main::debug "Finished Opermode";
+}
+
+sub parse_opermode_line($) {
+ my $line = shift or return();
+
+ chomp $line;
+ $line =~ s/#.*//;
+ my @params = split(/\s+/, $line);
+ my $location = shift @params;
+ my $entry = {};
+ foreach my $p (@params) {
+ my ($key, $val) = split(/=/, $p, 2);
+ $entry->{$key} = $val;
+ }
+ return ($location, $entry);
+}
+
+sub opermode_preprocess() {
+ undef %opermode_table;
+ foreach my $line (split(/\n/, $OPERMODE_DATA)) {
+ my ($location, $entry) = parse_opermode_line($line);
+ next unless defined $location;
+ #print "$location\t", ref($entry), "\n";
+ die "An entry for '$location' already exists\n"
+ if exists $opermode_table{$location};
+ $opermode_table{$location} = $entry;
+ }
+}
+
+sub opermode_to_string($) {
+ my $mode = shift or die;
+ my @params;
+
+ foreach my $k (sort keys %{$mode}) {
+ push(@params, "$k=$mode->{$k}");
+ }
+ return join(" ", @params);
+}
+
+sub opermode_verify($) {
+ my $input = shift or die;
+ my %verification_table;
+
+ open(F, $input) or die "$0: Failed opening '$input': $!\n";
+ while(<F>) {
+ chomp;
+ #print "$_\n";
+ s/#.*//;
+ my @params = split;
+ my $location = shift @params;
+ foreach my $p (@params) {
+ my ($key, $val) = split(/=/, $p, 2);
+ $verification_table{$location}{$key} = $val;
+ }
+ }
+ close F;
+ # First test: check for missing data in our program
+ foreach my $location (sort keys %verification_table) {
+ my $mode = $opermode_table{$location};
+ if(! defined $mode) {
+ printf STDERR "Missing $location\n";
+ next;
+ }
+ my $verify_mode = $verification_table{$location};
+ my $str1 = opermode_to_string($mode);
+ my $str2 = opermode_to_string($verify_mode);
+ if($str1 ne $str2) {
+ print STDERR "DIFF: $location:\n";
+ printf STDERR "\t%-20s: %s\n", "program", $str1;
+ printf STDERR "\t%-20s: %s\n", "verify", $str2;
+ }
+ }
+ # Second test: check for extra data in our program
+ foreach my $location (sort keys %opermode_table) {
+ my $mode = $verification_table{$location};
+ if(! defined $mode) {
+ printf STDERR "Extra $location\n";
+ next;
+ }
+ }
+}
+
+sub read_defaults() {
+ # For lab tests
+ my $labfile = "$init_dir/genzaptelconf.env";
+
+ # Source default files
+ $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile";
+ my $var_debug = 'DEBUG_INIT_FXO';
+ my $var_opermode = 'opermode';
+ my ($default_file, %source_defaults) =
+ Zaptel::Config::Defaults::source_vars($var_debug, $var_opermode);
+ $debug = $source_defaults{$var_debug};
+ my $tmp_opermode = $source_defaults{$var_opermode};
+ if(defined($tmp_opermode) and $tmp_opermode) {
+ # Verify
+ my $mode = $opermode_table{$tmp_opermode};
+ if(! defined $mode) {
+ main::logit "Unknown opermode='$tmp_opermode'";
+ die;
+ }
+ $OPERMODE = $tmp_opermode;
+ }
+ main::logit "From $default_file: $var_debug=$debug $var_opermode=$tmp_opermode";
+}
+
+package main;
+
+FXO::opermode_preprocess; # Must be first
+
+if(@ARGV and $ARGV[0] =~ /^verify(.*)/) {
+ my $verify_file = $1;
+ die "Usage: $0 verify=filename\n" unless $verify_file =~ s/^=//;
+ main::debug "$0: opermode verification (input='$verify_file')";
+ FXO::opermode_verify($verify_file);
+ exit 0;
+}
+
+main::logit "Starting";
+
+FXO::read_defaults;
+die "OPERMODE is undefined" unless $OPERMODE;
+set_output;
+FXO::turn_off_leds;
+while(<DATA>) {
+ chomp;
+ s/[#;].*$//; # remove comments
+ s/^\s+//; # trim whitespace
+ s/\s+$//; # trim whitespace
+ s/\t+/ /g; # replace tabs with spaces (for logs)
+ next unless /\S/; # Skip empty lines
+ main::debug "writing: '$_'";
+ FXO::gen "$_";
+}
+FXO::opermode_setup;
+close REG;
+
+main::logit "Ending '$0'";
+close STDERR;
+exit 0;
+
+__DATA__
+* WD 21 28
+* WD 18 99
+* WD 06 00
+
+# ----------- DAA PCM start offset ----------
+
+0 WD 22 00
+0 WD 23 00
+0 WD 24 00
+0 WD 25 00
+
+1 WD 22 08
+1 WD 23 00
+1 WD 24 08
+1 WD 25 00
+
+2 WD 22 10
+2 WD 23 00
+2 WD 24 10
+2 WD 25 00
+
+3 WD 22 18
+3 WD 23 00
+3 WD 24 18
+3 WD 25 00
+
+4 WD 22 20
+4 WD 23 00
+4 WD 24 20
+4 WD 25 00
+
+5 WD 22 28
+5 WD 23 00
+5 WD 24 28
+5 WD 25 00
+
+6 WD 22 30
+6 WD 23 00
+6 WD 24 30
+6 WD 25 00
+
+7 WD 22 38
+7 WD 23 00
+7 WD 24 38
+7 WD 25 00
+
+# ----------- DAA ONHOOK --------------------
+* WD 05 00
+
+# Set tip to ring voltage to 3.5 volts while off-hook
+# instead of default of 3.1
+* WD 1A C0
diff --git a/xpp/init_card_3_29 b/xpp/init_card_3_29
deleted file mode 100755
index 574b489..0000000
--- a/xpp/init_card_3_29
+++ /dev/null
@@ -1,193 +0,0 @@
-#! /bin/sh
-#
-# Written by Oron Peled <oron@actcom.co.il>
-# Copyright (C) 2006, Xorcom
-#
-# All rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# See the file LICENSE in the top level of this tarball.
-#
-
-#
-# $Id$
-#
-# Data format:
-# - A comment start with ';' or '#' until the end of line
-# - Blank lines are ignored
-# - Fields are whitespace separated (spaces or tabs)
-#
-# The fields are (in command line order):
-# 1. SLIC select in decimal (range 0-7).
-# 31 is a special value which means ALL SLICS (only some registers
-# accept settings for ALL SLICS).
-# 2. Command word:
-# - RD Read Direct register.
-# - RI Read Indirect register.
-# - WD Write Direct register.
-# - WI Write Indirect register.
-# 3. Register number in hexadecimal.
-# 4. Low data byte in hexadecimal. (for WD and WI commands).
-# 5. High data byte in hexadecimal. (for WI command only).
-#
-#
-
-# ----------------------------------==== 8-channel FXS unit initialization ===-----------------------------------------
-
-set -e
-
-me=`basename $0`
-INIT_DIR=`dirname $0`
-XPP_BASE=/proc/xpp
-export XPP_BASE
-LOGGER="logger -s -t $me"
-
-ZAPTEL_BOOT_DEBIAN=${ZAPTEL_BOOT_DEBIAN:-/etc/default/zaptel}
-ZAPTEL_BOOT_FEDORA=${ZAPTEL_BOOT_FEDORA:-/etc/sysconfig/zaptel}
-
-# read default configuration from /etc/default/zaptel
-if [ -r $ZAPTEL_BOOT_DEBIAN ]; then . $ZAPTEL_BOOT_DEBIAN; fi
-if [ -r $ZAPTEL_BOOT_FEDORA ]; then . $ZAPTEL_BOOT_FEDORA; fi
-
-if [ "$DEBUG_CALIBRATION"=1 ]; then
- LOGGER=":"
-fi
-
-# Always redirect stderr somewhere, otherwise the shell script will die
-# when it tries to do I/O related stuff on closed file descriptor.
-# Our default is to throw it down the bit-bucket.
-exec 2> /dev/console
-## If you wish to trace this script:
-#exec 2> /tmp/xpp_init_$XPD_NAME
-## Altenativly, if you have multiple XBUS'es:
-#exec 2> /tmp/xpp_init_$XBUS_NAME_$XPD_NAME
-#set -x
-
-# redirect script output to the "slics" (registers command) file:
-exec 1> "$XPP_BASE/$XPD_BUS/$XPD_NAME/slics"
-
-$LOGGER -p kern.info "$XPD_BUS/$XPD_NAME: Calibrating '$0'"
-
-"$INIT_DIR/calibrate_slics"
-
-$LOGGER -p kern.info "$XPD_BUS/$XPD_NAME: Continue '$0'"
-
-echo "
-# Change SLICs states to "Open state"s (Off,all transfers tristated to avoid data collision), Voltage sense
-31 WD 40 00
-
-# Flush out energy accumulators
-31 WI 58 00 00
-31 WI 59 00 00
-31 WI 5A 00 00
-31 WI 5B 00 00
-31 WI 5C 00 00
-31 WI 5D 00 00
-31 WI 5E 00 00
-31 WI 5F 00 00
-31 WI 61 00 00
-31 WI 58 00 00
-31 WI C1 00 00
-31 WI C2 00 00
-31 WI C3 00 00
-31 WI C4 00 00
-31 WI C5 00 00
-31 WI C6 00 00
-31 WI C7 00 00
-31 WI C8 00 00
-31 WI C9 00 00
-31 WI CA 00 00
-31 WI CB 00 00
-31 WI CC 00 00
-31 WI CD 00 00
-31 WI CE 00 00
-31 WI CF 00 00
-31 WI D0 00 00
-31 WI D1 00 00
-31 WI D2 00 00
-31 WI D3 00 00
-
-# Setting of SLICs offsets
-# New card initialization
-0 WD 02 00
-0 WD 04 00
-1 WD 02 08
-1 WD 04 08
-2 WD 02 10
-2 WD 04 10
-3 WD 02 18
-3 WD 04 18
-4 WD 02 20
-4 WD 04 20
-5 WD 02 28
-5 WD 04 28
-6 WD 02 30
-6 WD 04 30
-7 WD 02 38
-7 WD 04 38
-31 WD 03 00
-31 WD 05 00
-
-# Audio path. (also initialize 0A and 0B here if necessary)
-31 WD 08 00
-31 WD 09 C0
-
-# Automatic/Manual Control: defaults - Cancel Power Alarm
-31 WD 43 1E
-
-# Loop Closure Debounce Interval
-31 WD 45 0A
-
-# Ring Detect Debounce Interval
-31 WD 46 47
-
-# Battery Feed Control: Battery low (DCSW low)
-31 WD 42 00
-
-# Loop Current Limit
-31 WD 47 00
-
-# Ring VBath:
-31 WD 4A 3F
-
-
-31 WD 6C 01
-
-31 WI 23 00 80
-31 WI 24 20 03
-31 WI 25 8C 08
-31 WI 26 00 01
-31 WI 27 10 00
-
-#------ Metering tone
-31 WI 17 61 15 # Amplitue Ramp-up
-31 WI 18 61 15 # Max Amplitude
-31 WI 19 FB 30 # Frequency
-31 WD 2C 00 # Timer dL
-31 WD 2D 03 # Timer dH
-
-# ------------------------------------- Initialization of direct registers --------------------------------------------
-
-# Mode(8-bit,u-Law,1 PCLK ) setting, Loopbacks and Interrupts clear
-
-31 WD 01 29
-#31 WD 0E 00
-
-#31 WD 15 00
-#31 WD 16 03
-
-# Clear pending interrupts
-31 WD 12 FF
-31 WD 13 FF
-31 WD 14 FF
-
-#31 WD 4A 34
-#31 WD 4B 10
-" | sed -e 's/[;#].*$//' -e '/^[ ]*$/d'
-
-$LOGGER -p kern.info "$XPD_BUS/$XPD_NAME: Ending '$0'"
-exit 0
diff --git a/xpp/init_card_6_29 b/xpp/init_card_3_30
index 0da1f61..ce8ad01 100755
--- a/xpp/init_card_6_29
+++ b/xpp/init_card_3_30
@@ -23,16 +23,16 @@ use strict;
# of a new XPD.
#
# Expects the following environment variables to be set:
-# XPD_BUS - bus name
-# XPD_NAME - xpd name
-# XPD_UNIT - xpd unit number
-# XPD_SUBUNIT - xpd subunit number
-# XPD_TYPE - xpd type number (from protocol reply):
-# 3 - FXS
-# 4 - FXO
-# 6 - BRI_TE
-# 7 - BRI_NT
-# XPD_REVISION - xpd revision number
+# XBUS_NAME - bus name
+# UNIT_NUMBER - xpd unit number
+# UNIT_SUBUNITS - number of subunits in this xpd
+# UNIT_TYPE - xpd type number (from protocol reply):
+# 1 - FXS
+# 2 - FXO
+# 3 - BRI
+# 4 - PRI
+# XBUS_REVISION - xbus revision number
+# XBUS_CONNECTOR - xbus connector string
#
# Output data format:
# - An optional comment start with ';' or '#' until the end of line
@@ -43,20 +43,25 @@ use strict;
# 1. CHIP select in decimal (ignored, taken from 3 LSB's of subunit number)
# 2. Command word:
# - RD Read Direct register.
-# - RS Read Sub-register.
+# - RI Read Indirect register.
# - WD Write Direct register.
-# - WS Write Sub-register.
+# - RI Write Indirect register.
# 3. Register number in hexadecimal.
-# 4. Subregister number in hexadecimal. (for RS and WS commands).
-# 5. Data byte in hexadecimal. (for WD and WS commands only).
+# 4. Subregister number in hexadecimal. (for RI and WI commands).
+# 5. Data byte in hexadecimal. (for WD and WI commands only).
#
package main;
use File::Basename;
+use Getopt::Std;
my $program = basename("$0");
my $init_dir = dirname("$0");
my $unit_id;
+my %opts;
+$ENV{XPP_BASE} = '/proc/xpp';
+
+getopts('o:', \%opts);
sub logit {
print STDERR "$unit_id: @_\n";
@@ -65,11 +70,28 @@ sub logit {
# Arrange for error logging
if (-t STDERR) {
$unit_id = 'Interactive';
- logit "Interactive startup\n";
+ logit "Interactive startup";
} else {
- $unit_id = "$ENV{XPD_BUS}/$ENV{XPD_NAME}";
+ $unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
open (STDERR, "| logger -t $program -p kern.info") || die;
- logit "Non Interactive startup\n";
+ logit "Non Interactive startup";
+}
+
+sub select_subunit($) {
+ my $subunit = shift;
+ die unless defined $subunit;
+ my $output;
+
+ if($opts{o}) {
+ $output = $opts{o};
+ } else {
+ my $xpd_name = sprintf("XPD-%1d%1d", $ENV{UNIT_NUMBER}, $subunit);
+ $output = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ }
+ open(REG, ">$output") || die "Failed to open '$output': $!\n";
+ my $oldfh = select REG;
+ print "# Selecting subunit $subunit\n" if $opts{o};
+ return $oldfh;
}
package BRI;
@@ -80,6 +102,17 @@ sub gen {
printf "$fmt\n", @_;
}
+# Turning on/off multi-byte packet reception.
+sub multibyte($) {
+ my $active = (shift) ? 'M' : 'm';
+ for my $subunit (0 .. $ENV{UNIT_SUBUNITS} - 1) {
+ #main::logit "multibyte(): $subunit -> $active";
+ main::select_subunit($subunit);
+
+ BRI::gen "$subunit W$active";
+ }
+}
+
package BRI::Port;
sub new {
@@ -95,7 +128,7 @@ sub init_su {
my $port_mode_up = $port->{PORT_MODE_UP};
my $port_mode_exch = $port->{PORT_MODE_EXCH};
my $bri_nt = $port->{BRI_NT};
- #logit "init_su(portnum=$portnum, port_mode_up=$port_mode_up, bri_nt=$bri_nt)";
+ #main::logit "init_su(portnum=$portnum, port_mode_up=$port_mode_up, bri_nt=$bri_nt)";
# Setting PLL
# R_PLL_CTRL = 0 (V_PLL_M = 0, Reset PLL, Disable PLL_
@@ -106,19 +139,19 @@ sub init_su {
# R_PLL_CTRL = 1 (V_PLL_M)
BRI::gen "#--------------------------- init_su($portnum, $bri_nt, $port_mode_up, $port_mode_exch)";
- BRI::gen "0 WD 02 04";
- BRI::gen "0 WD 50 00"; # disable PLL
- BRI::gen "0 WD 51 02";
- BRI::gen "0 WD 52 06";
- BRI::gen "0 WD 53 04";
- BRI::gen "0 WD 50 01"; # Enable PLL
- BRI::gen "0 WD 02 05"; # Enable PLL
+ BRI::gen "$portnum WD 02 04";
+ BRI::gen "$portnum WD 50 00"; # disable PLL
+ BRI::gen "$portnum WD 51 02";
+ BRI::gen "$portnum WD 52 06";
+ BRI::gen "$portnum WD 53 04";
+ BRI::gen "$portnum WD 50 01"; # Enable PLL
+ BRI::gen "$portnum WD 02 05"; # Enable PLL
su_sel($portnum); # select port
if ("$port_mode_up" == 1) {
$port->{CTRL3} = 0x01; # A_ST_CTRL3: V_ST_SEL = 1
$port->{CTRL0} = 0x10; # A_SU_CTRL0: V_ST_SQ_EN = 1
- BRI::gen "0 WD 34 0F"; # A_MS_TX:
+ BRI::gen "$portnum WD 34 0F"; # A_MS_TX:
# (multiframe/superframe transmit register)
} else {
$port->{CTRL3} = 0x00; # A_ST_CTRL3: V_ST_SEL = 0
@@ -133,11 +166,11 @@ sub init_su {
} else {
$port->{CTRL2} = 0x00;
}
- BRI::gen "0 WD 35 %02X", $port->{CTRL3}; # A_ST_CTRL3
- BRI::gen "0 WD 31 %02X", $port->{CTRL0}; # A_SU_CTRL0
- BRI::gen "0 WD 35 F8"; # A_ST_CTRL3 = set end of pulse control to 0xF8
- BRI::gen "0 WD 32 08"; # A_SU_CTRL1 = Ignore E-channel data
- BRI::gen "0 WD 33 %02X", $port->{CTRL2}; # A_SU_CTRL2
+ BRI::gen "$portnum WD 35 %02X", $port->{CTRL3}; # A_ST_CTRL3
+ BRI::gen "$portnum WD 31 %02X", $port->{CTRL0}; # A_SU_CTRL0
+ BRI::gen "$portnum WD 35 F8"; # A_ST_CTRL3 = set end of pulse control to 0xF8
+ BRI::gen "$portnum WD 32 09"; # A_SU_CTRL1 = Ignore E-channel data, Force automatic transition from G2 to G3
+ BRI::gen "$portnum WD 33 %02X", $port->{CTRL2}; # A_SU_CTRL2
# zap_xhfc_su.c:1030 in init_su()
# A_SU_CLK_DLY
@@ -147,8 +180,8 @@ sub init_su {
} else {
$clk_dly = 0x0E;
}
- #logit "clk_dly=$clk_dly";
- BRI::gen "0 WD 37 %02X", "$clk_dly";
+ #main::logit "clk_dly=$clk_dly";
+ BRI::gen "$portnum WD 37 %02X", "$clk_dly";
}
sub su_sel {
@@ -157,26 +190,32 @@ sub su_sel {
exit 1;
}
my $portnum = shift;
- BRI::gen "0 WD 16 %02X", $portnum; # R_SU_SEL
+ BRI::gen "$portnum WD 16 %02X", $portnum; # R_SU_SEL
}
# zap_xhfc_su.c:281
sub xhfc_selfifo {
+ my $port = shift;
+ my $portnum = $port->{PORT_NUM};
+
if (@_ != 1 ) {
main::logit "ERROR: xhfc_selfifo() called with " . scalar(@_) . " parameters";
exit 1;
}
my $fifonum = shift;
- #logit "xhfc_selfifo($fifonum)";
- BRI::gen "0 WD 0F %02X", $fifonum;
+ #main::logit "xhfc_selfifo($fifonum)";
+ BRI::gen "$portnum WD 0F %02X", $fifonum;
# --> WAIT UNTIL (R_STATUS & M_BUSY) == 0
}
# zap_xhfc_su.c:295
sub xhfc_resetfifo() {
- #logit "xhfc_resetfifo()";
+ my $port = shift;
+ my $portnum = $port->{PORT_NUM};
+
+ #main::logit "xhfc_resetfifo()";
# A_INC_RES_FIFO = M_RES_FIFO | M_RES_FIFO_ERR
- BRI::gen "0 WD 0E 0A";
+ BRI::gen "$portnum WD 0E 0A";
# --> WAIT UNTIL (R_STATUS & M_BUSY) == 0
}
@@ -189,7 +228,6 @@ sub setup_fifo {
my $conhdlc = shift;
my $subcfg = shift;
my $fifoctrl = shift;
-
my $portnum = $port->{PORT_NUM};
my $port_mode_up = $port->{PORT_MODE_UP};
my $port_mode_exch = $port->{PORT_MODE_EXCH};
@@ -208,18 +246,18 @@ sub setup_fifo {
my $short_portnum = $portnum & 0x03;
my $a_sl_cfg = (0x80 | ($short_portnum << 3) | ($chan << 1) | ($direction)); # receive data from STIO2, transmit to STIO1
- #logit "setup_fifo($fifonum)";
- xhfc_selfifo $fifonum;
+ #main::logit "setup_fifo($fifonum)";
+ $port->xhfc_selfifo($fifonum);
# A_CON_HDLC: transparent mode selection
- BRI::gen "0 WD FA %02X", $conhdlc;
+ BRI::gen "$portnum WD FA %02X", $conhdlc;
# A_SUBCH_CFG: subchnl params
- BRI::gen "0 WD FB %02X", $subcfg;
+ BRI::gen "$portnum WD FB %02X", $subcfg;
# A_FIFO_CTRL: FIFO Control Register
- BRI::gen "0 WD FF %02X", $fifoctrl;
- xhfc_resetfifo;
- xhfc_selfifo $fifonum; # wait for busy is builtin in this command
- BRI::gen "0 WD 10 %02X", $r_slot; # R_SLOT
- BRI::gen "0 WD D0 %02X", $a_sl_cfg; # A_SL_CFG
+ BRI::gen "$portnum WD FF %02X", $fifoctrl;
+ $port->xhfc_resetfifo();
+ $port->xhfc_selfifo($fifonum); # wait for busy is builtin in this command
+ BRI::gen "$portnum WD 10 %02X", $r_slot; # R_SLOT
+ BRI::gen "$portnum WD D0 %02X", $a_sl_cfg; # A_SL_CFG
#system("/bin/echo \"----=====TE\" \"short_portnum=\"$short_portnum \"portnum=\" $portnum \"chan=\" $chan\"======----\n\" >>/root/xortel/test_init");
}
@@ -233,34 +271,34 @@ sub setup_su {
my $bri_nt = $port->{BRI_NT};
BRI::gen "#--------------------------- setup_su($portnum, $bchan)";
- #logit "setup_su(portnum=$portnum, bchan=$bchan, port_mode_exch=$port_mode_exch, bri_nt=$bri_nt)";
+ #main::logit "setup_su(portnum=$portnum, bchan=$bchan, port_mode_exch=$port_mode_exch, bri_nt=$bri_nt)";
$port->{CTRL0} |= (1 << $bchan) | $bri_nt;
$port->{CTRL2} |= ($port_mode_exch << 7) | (1 << $bchan);
su_sel($portnum); # Select port
- BRI::gen "0 WD 31 %02X", $port->{CTRL0}; # A_SU_CTRL0: V_B1_TX_EN | V_SU_MD | (NT/TE)
- BRI::gen "0 WD 33 %02X", $port->{CTRL2}; # A_SU_CTRL2: V_B1_RX_EN
+ BRI::gen "$portnum WD 31 %02X", $port->{CTRL0}; # A_SU_CTRL0: V_B1_TX_EN | V_SU_MD | (NT/TE)
+ BRI::gen "$portnum WD 33 %02X", $port->{CTRL2}; # A_SU_CTRL2: V_B1_RX_EN
}
sub xhfc_ph_command {
my $port = shift;
my $cmd = shift;
my $portnum = $port->{PORT_NUM};
- #logit "xhfc_ph_command(portnum=$portnum)";
+ #main::logit "xhfc_ph_command(portnum=$portnum)";
if ("$cmd" eq "HFC_L1_ACTIVATE_TE") {
su_sel($portnum); # Select port
- BRI::gen "0 WD 30 60"; # A_SU_WR_STA = (M_SU_ACT & 0x03)
+ BRI::gen "$portnum WD 30 60"; # A_SU_WR_STA = (M_SU_ACT & 0x03)
# (set activation)
} elsif ("$cmd" eq "HFC_L1_FORCE_DEACTIVATE_TE") {
su_sel($portnum); # Select port
- BRI::gen "0 WD 30 40"; # A_SU_WR_STA = (M_SU_ACT & 0x02)
+ BRI::gen "$portnum WD 30 40"; # A_SU_WR_STA = (M_SU_ACT & 0x02)
# (set deactivation)
} elsif ("$cmd" eq "HFC_L1_ACTIVATE_NT") {
su_sel($portnum); # Select port
- BRI::gen "0 WD 30 E0"; # A_SU_WR_STA = (M_SU_ACT & 0x03) | 0x80
+ BRI::gen "$portnum WD 30 E0"; # A_SU_WR_STA = (M_SU_ACT & 0x03) | 0x80
# (set activation + NT)
} elsif ("$cmd" eq "HFC_L1_DEACTIVATE_NT") {
su_sel($portnum); # Select port
- BRI::gen "0 WD 30 40"; # A_SU_WR_STA = (M_SU_ACT & 0x02)
+ BRI::gen "$portnum WD 30 40"; # A_SU_WR_STA = (M_SU_ACT & 0x02)
# (set deactivation)
}
}
@@ -271,7 +309,7 @@ sub zthfc_startup {
my $portnum = $port->{PORT_NUM};
my $port_mode_exch = $port->{PORT_MODE_EXCH};
my $bri_nt = $port->{BRI_NT};
- #logit "zthfc_startup(portnum=$portnum, port_mode_exch=$port_mode_exch, bri_nt=$bri_nt)";
+ #main::logit "zthfc_startup(portnum=$portnum, port_mode_exch=$port_mode_exch, bri_nt=$bri_nt)";
# PCM <-> ST/Up Configuration
foreach my $chan ( 0, 1 ) {
@@ -289,7 +327,7 @@ sub zthfc_startup {
# enable this port's state machine
su_sel($portnum); # Select port
# A_SU_WR_STA: reset port state machine
- BRI::gen "0 WD 30 00";
+ BRI::gen "$portnum WD 30 00";
if ("$bri_nt" == 0) {
$port->xhfc_ph_command("HFC_L1_ACTIVATE_TE");
} else {
@@ -297,59 +335,39 @@ sub zthfc_startup {
}
}
-
package main;
-use Getopt::Std;
-
-my %opts;
-getopts('o:', \%opts);
-
-$ENV{XPP_BASE} = '/proc/xpp';
-my $cmd = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/command";
-my $output;
-if ($opts{o}) {
- $output = $opts{o};
-} else {
- $ENV{XPD_BUS} || die "Missing XPD_BUS environment variable\n";
- $ENV{XPD_NAME} || die "Missing XPD_NAME environment variable\n";
- $ENV{XPD_TYPE} || die "Missing XPD_TYPE environment variable\n";
- $ENV{XPD_REVISION} || die "Missing XPD_REVISION environment variable\n";
- $output = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/$ENV{XPD_NAME}/slics";
-}
-
-open(REG, ">$output") || die "Failed to open '$output': $!\n";
-select REG;
logit "Starting '$0'";
#------------------------------------------- Instance detection
# zap_xhfc_su.c:895
-sub init_xhfc() {
- #logit "init_xhfc()";
+sub init_xhfc($) {
+ my $portnum = shift;
+ main::logit "init_xhfc($portnum)";
BRI::gen "#--------------------------- init_xhfc";
- BRI::gen "0 WD 0D 00"; # r_FIFO_MD: 16 fifos,
+ BRI::gen "$portnum WD 0D 00"; # r_FIFO_MD: 16 fifos,
# 64 bytes for TX and RX each (FIFO mode config)
# software reset to enable R_FIFO_MD setting
- BRI::gen "0 WD 00 08"; # R_CIRM = M_SRES (soft reset)
+ BRI::gen "$portnum WD 00 08"; # R_CIRM = M_SRES (soft reset)
# --> WAIT 5u
- BRI::gen "0 WD 00 00"; # R_CIRM = 0 (zero it to deactivate reset)
+ BRI::gen "$portnum WD 00 00"; # R_CIRM = 0 (zero it to deactivate reset)
# amplitude
- BRI::gen "0 WD 46 80"; # R_PWM_MD: (PWM output mode register)
+ BRI::gen "$portnum WD 46 80"; # R_PWM_MD: (PWM output mode register)
# PWM push to zero only
- BRI::gen "0 WD 39 18"; # R_PWM1: (modulator register for PWM1)
+ BRI::gen "$portnum WD 39 18"; # R_PWM1: (modulator register for PWM1)
# set duty cycle
- BRI::gen "0 WD 0C 11"; # R_FIFO_THRES: (FIFO fill lvl control register)
+ BRI::gen "$portnum WD 0C 11"; # R_FIFO_THRES: (FIFO fill lvl control register)
# RX/TX threshold = 16 bytes
# --> Wait until (R_STATUS & (M_BUSY | M_PCM_INIT))
# M_BUSY status will be checked after fifo selection
- BRI::gen "0 WD 0F 80";
+ BRI::gen "$portnum WD 0F 80";
# set PCM !master mode
- BRI::gen "0 WD 14 08"; # R_PCM_MD0 = PCM slave mode, F0IO duration is 2 HFC_PCLK's
+ BRI::gen "$portnum WD 14 08"; # R_PCM_MD0 = PCM slave mode, F0IO duration is 2 HFC_PCLK's
# (C4IO, F0IO are inputs)
@@ -358,71 +376,58 @@ sub init_xhfc() {
# the register at address 15
# WD 15 2C # R_PCM_MD1: V_PLL_ADJ (DPLL adjust speed), C4IO is 16.384MHz(128 time slots)
# in the last slot of PCM frame
- BRI::gen "0 WS 14 98 20"; # R_PCM_MD1: V_PLL_ADJ
+ BRI::gen "$portnum WI 14 98 20"; # R_PCM_MD1: V_PLL_ADJ
# (DPLL adjust speed) in the
# last slot of PCM frame
- BRI::gen "0 WD 4C 03"; # GPIOGPIO function (not PWM) on GPIO0 and GPIO1 pins
- BRI::gen "0 WD 4A 03"; # Output enable for GPIO0 and GPIO1 pins
+ BRI::gen "$portnum WD 4C 03"; # GPIOGPIO function (not PWM) on GPIO0 and GPIO1 pins
+ BRI::gen "$portnum WD 4A 03"; # Output enable for GPIO0 and GPIO1 pins
}
-my %port_type = (
- 6 => { 'BRI_NT' => 0 },
- 7 => { 'BRI_NT' => 1 }
+my @port_type = (
+ { 'BRI_NT' => 1 },
+ { 'BRI_NT' => 0 }
);
# zap_xhfc_su.c:175
sub main() {
- #logit "main(): XPD_TYPE=$ENV{XPD_TYPE}";
-
- $ENV{XPD_TYPE} || die "Missing XPD_TYPE environment variable\n";
- my $type = $port_type{$ENV{XPD_TYPE}};
- die "Bad XPD_TYPE=$ENV{XPD_TYPE}\n" unless $type;
- die "Missing XPD_SUBUNIT information\n" unless defined($ENV{XPD_SUBUNIT});
-
- # We must first turn off packet reception.
- #
- # Otherwise we mess with registers while the FPGA firmware tries to
- # send us packets.
- BRI::gen "0 Wm";
-
- # Common initialization
- if(($ENV{XPD_SUBUNIT} % 4) eq '0') {
- # Turn off multi-byte packet reception before initialization started
- my $chipnum = ($ENV{XPD_SUBUNIT} & 0x04) << 3; # Max 2 XHFC chips
- for my $subunit (0 .. 3) { # 4 subunits per XHFC chip
- my $addr = $chipnum | ($subunit << 3);
- my $str = sprintf("0A 00 0F %02X C0 00 00 00 00 00\n", $addr);
- open(CMD, ">$cmd") || die "Failed to open '$cmd': $!\n";
- print CMD $str;
- close CMD;
+ my $subunit;
+ my $subunits_mask = pack("C", $ENV{UNIT_SUBUNITS_DIR});
+ my @direction = split(//, unpack("b*", $subunits_mask));
+
+ #logit "main(): UNIT_TYPE=$ENV{UNIT_TYPE} UNIT_SUBUNITS_DIR=[@direction]";
+ if(!$opts{o}) {
+ foreach my $var (qw(XBUS_NAME UNIT_NUMBER UNIT_TYPE UNIT_SUBUNITS UNIT_SUBUNITS_DIR XBUS_REVISION XBUS_CONNECTOR)) {
+ die "Missing mandatory '$var' environment variable" unless defined $var;
}
- init_xhfc; # zap_xhfc_su.c:1173 in setup_instance()
}
+ # Turn off multi-byte packet reception before initialization started
+ # Otherwise we mess with registers while the FPGA firmware tries to
+ # send us packets.
+ BRI::multibyte(0);
# Port initialization
- my $p = BRI::Port->new(
- 'PORT_NUM' => $ENV{XPD_SUBUNIT},
- 'BRI_NT' => $type->{BRI_NT},
- 'PORT_MODE_UP' => 0,
- 'PORT_MODE_EXCH' => 0
- );
- # zap_XHfc_su.c:1186 in setup_instance()
- $p->init_su;
-
- $p->zthfc_startup;
-
- if(($ENV{XPD_SUBUNIT} % 4) eq 3) {
- # Turn on multi-byte packet reception when ports initialization finished
- my $chipnum = ($ENV{XPD_SUBUNIT} & 0x04) << 3; # Max 2 XHFC chips
- for my $subunit (0 .. 3) { # 4 subunits per XHFC chip
- my $addr = $chipnum | ($subunit << 3);
- my $str = sprintf("0A 00 0F %02X 80 00 00 00 00 00\n", $addr);
- open(CMD, ">$cmd") || die "Failed to open '$cmd': $!\n";
- print CMD $str;
- close CMD;
+ for($subunit = 0; $subunit < $ENV{UNIT_SUBUNITS}; $subunit++) {
+ my $is_nt = $direction[$subunit];
+
+ main::select_subunit($subunit);
+ if(($subunit % 4) == 0) { # A new xhfc chip
+ #logit "main(): Initializing chip";
+ init_xhfc($subunit); # zap_xhfc_su.c:1173 in setup_instance()
}
+ #logit "main(): Initializing subunit $subunit is_nt=$is_nt";
+ my $p = BRI::Port->new(
+ 'PORT_NUM' => $subunit,
+ 'BRI_NT' => $is_nt,
+ 'PORT_MODE_UP' => 0,
+ 'PORT_MODE_EXCH' => 0
+ );
+ # zap_XHfc_su.c:1186 in setup_instance()
+ $p->init_su;
+ $p->zthfc_startup;
}
+ # Turn on multi-byte packet reception when ports initialization finished
+ BRI::multibyte(1);
}
main;
diff --git a/xpp/init_card_4_29 b/xpp/init_card_4_29
deleted file mode 100755
index 5dda0b2..0000000
--- a/xpp/init_card_4_29
+++ /dev/null
@@ -1,165 +0,0 @@
-#! /bin/sh
-#
-# Written by Oron Peled <oron@actcom.co.il>
-# Copyright (C) 2006, Xorcom
-#
-# All rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# See the file LICENSE in the top level of this tarball.
-#
-
-#
-# $Id$
-#
-# Data format:
-# - A comment start with ';' or '#' until the end of line
-# - Blank lines are ignored
-# - Fields are whitespace separated (spaces or tabs)
-#
-# The fields are (in command line order):
-# 1. DAA select in decimal (range 0-7).
-# 31 is a special value which means ALL DAAs (only some registers
-# accept settings for ALL DAAs).
-# 2. Command word:
-# - RD Read Direct register.
-# - WD Write Direct register.
-# 3. Register number in hexadecimal.
-# 4. Data byte in hexadecimal. (for WD command).
-#
-
-# ----------------------------------==== 8-channel FXO unit initialization ===-----------------------------------------
-
-set -e
-
-opermode='FCC'
-
-me=`basename $0`
-INIT_DIR=`dirname $0`
-XPP_BASE=/proc/xpp
-export XPP_BASE
-LOGGER="logger -s -t $me"
-
-ZAPTEL_BOOT_DEBIAN=${ZAPTEL_BOOT_DEBIAN:-/etc/default/zaptel}
-ZAPTEL_BOOT_FEDORA=${ZAPTEL_BOOT_FEDORA:-/etc/sysconfig/zaptel}
-
-# read default configuration from /etc/default/zaptel
-if [ -r $ZAPTEL_BOOT_DEBIAN ]; then . $ZAPTEL_BOOT_DEBIAN; fi
-if [ -r $ZAPTEL_BOOT_FEDORA ]; then . $ZAPTEL_BOOT_FEDORA; fi
-
-if [ "$DEBUG_CALIBRATION"=1 ]; then
- LOGGER=":"
-fi
-
-# Always redirect stderr somewhere, otherwise the shell script will die
-# when it tries to do I/O related stuff on closed file descriptor.
-# Our default is to throw it down the bit-bucket.
-exec 2> /dev/console
-## If you wish to trace this script:
-#exec 2> /tmp/xpp_init_$XPD_NAME
-## Altenativly, if you have multiple XBUS'es:
-#exec 2> /tmp/xpp_init_$XBUS_NAME_$XPD_NAME
-#set -x
-
-# redirect script output to the "slics" (registers command) file:
-exec 1> "$XPP_BASE/$XPD_BUS/$XPD_NAME/slics"
-
-$LOGGER -p kern.info "$XPD_BUS/$XPD_NAME: Initializing '$0'"
-
-# Several countries (South Africa, UAE, anybody else)
-# require a shorter delay:
-case "$opermode" in
-SOUTHAFRICA|UAE) echo 31 WD 17 2B;;
-esac
-
-# Remove empty lines and commets. Not strictly necessary
-# but works around some limitations of the proc interface:
-echo "
-
-
-31 WD 21 28
-31 WD 18 99
-31 WD 06 00
-
-# ----------- DAA PCM start offset ----------
-
-0 WD 22 00
-0 WD 23 00
-0 WD 24 00
-0 WD 25 00
-
-1 WD 22 08
-1 WD 23 00
-1 WD 24 08
-1 WD 25 00
-
-2 WD 22 10
-2 WD 23 00
-2 WD 24 10
-2 WD 25 00
-
-3 WD 22 18
-3 WD 23 00
-3 WD 24 18
-3 WD 25 00
-
-4 WD 22 20
-4 WD 23 00
-4 WD 24 20
-4 WD 25 00
-
-5 WD 22 28
-5 WD 23 00
-5 WD 24 28
-5 WD 25 00
-
-6 WD 22 30
-6 WD 23 00
-6 WD 24 30
-6 WD 25 00
-
-7 WD 22 38
-7 WD 23 00
-7 WD 24 38
-7 WD 25 00
-
-# ----------- DAA ONHOOK --------------------
-31 WD 05 00
-
-# Set tip to ring voltage to 3.5 volts while off-hook
-# instead of default of 3.1
-31 WD 1A C0
-" | sed -e 's/[;#].*$//' -e '/^[ ]*$/d'
-
-# Turning off red LEDs
-# Warning: do not send WD 31 20 A0 !
-for i in `seq 0 7`; do
- echo "$i WD 20 A0"
-done
-
-# based on fxo_modes from wctdm.c .
-reg16=00; reg26=00; reg30=00; reg31=20; ring_osc=; ring_x=;
-mode="$opermode"
-if [ -r $INIT_DIR/init_fxo_modes ]; then
- . $INIT_DIR/init_fxo_modes
-fi
-# Our register numbers are HEXADECIMAL!
-echo "
-31 WD 10 $reg16
-31 WD 1A $reg26
-31 WD 1E $reg30
-31 WD 1F $reg31
-"
-# for the FXS:
-#if [ "$ring_osc" != '' ]; then
-# /bin/echo "31 WI __ $ring_osc"
-#fi
-#if [ "$ring_x" != '' ]; then
-# /bin/echo "31 WI __ $ring_x"
-#fi
-$LOGGER -p kern.info "$XPD_BUS/$XPD_NAME: Ending '$0'"
-exit 0
diff --git a/xpp/init_card_4_30 b/xpp/init_card_4_30
new file mode 100755
index 0000000..872c695
--- /dev/null
+++ b/xpp/init_card_4_30
@@ -0,0 +1,385 @@
+#! /usr/bin/perl -w
+use strict;
+
+#
+# $Id$
+#
+
+#
+# Written by Oron Peled <oron@actcom.co.il>
+# Copyright (C) 2007, Xorcom
+#
+# All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# See the file LICENSE in the top level of this tarball.
+#
+
+# This script is run from the xpp kernel module upon detection
+# of a new XPD.
+#
+# Expects the following environment variables to be set:
+# XBUS_NAME - bus name
+# UNIT_NUMBER - xpd unit number
+# UNIT_SUBUNITS - number of subunits in this xpd
+# UNIT_TYPE - xpd type number (from protocol reply):
+# 1 - FXS
+# 2 - FXO
+# 3 - BRI
+# 4 - PRI
+# XBUS_REVISION - xbus revision number
+# XBUS_CONNECTOR - xbus connector string
+#
+# Output data format:
+# - An optional comment start with ';' or '#' until the end of line
+# - Optional Blank lines are ignored
+# - Fields are whitespace separated (spaces or tabs)
+#
+# The fields are (in command line order):
+# 1. CHIP select in decimal (ignored, taken from 3 LSB's of subunit number)
+# 2. Command word:
+# - RD Read Direct register.
+# - WD Write Direct register.
+# 3. Register number in hexadecimal.
+# 5. Data byte in hexadecimal. (for WD command only).
+#
+
+package main;
+use File::Basename;
+use Getopt::Std;
+
+my $program = basename("$0");
+my $init_dir = dirname("$0");
+my $unit_id;
+my %opts;
+$ENV{XPP_BASE} = '/proc/xpp';
+my @pri_specs;
+
+getopts('o:', \%opts);
+
+sub logit {
+ print STDERR "$unit_id: @_\n";
+}
+
+# Arrange for error logging
+if (-t STDERR) {
+ $unit_id = 'Interactive';
+ logit "Interactive startup";
+} else {
+ $unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
+ open (STDERR, "| logger -t $program -p kern.info") || die;
+ logit "Non Interactive startup";
+}
+
+sub select_subunit($) {
+ my $subunit = shift;
+ die unless defined $subunit;
+ my $output;
+
+ if($opts{o}) {
+ $output = $opts{o};
+ } else {
+ my $xpd_name = sprintf("XPD-%1d%1d", $ENV{UNIT_NUMBER}, $subunit);
+ $output = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ }
+ open(REG, ">$output") || die "Failed to open '$output': $!\n";
+ my $oldfh = select REG;
+ print "# Selecting subunit $subunit\n" if $opts{o};
+ return $oldfh;
+}
+
+package PRI;
+
+sub gen {
+ my $fmt = shift;
+ $| = 1;
+ printf "$fmt\n", @_;
+}
+
+sub init_quad() {
+ main::select_subunit(0);
+ # Tuning of clocking unit to the 16.384 MHz reference frequence
+ # by setting Global Clock Mode registers (GCM[1:8]), same for E1 and T1/J1
+ PRI::gen "0 WD 92 00"; # GCM1
+ PRI::gen "0 WD 93 18"; # GCM2
+ PRI::gen "0 WD 94 FB"; # GCM3
+ PRI::gen "0 WD 95 0B"; # GCM4
+ PRI::gen "0 WD 96 01"; # GCM5
+ PRI::gen "0 WD 97 0B"; # GCM6
+ PRI::gen "0 WD 98 DB"; # GCM7
+ PRI::gen "0 WD 99 DF"; # GCM8
+}
+
+sub finish_quad() {
+ PRI::gen "0 WD BB FF"; # REGFP
+ PRI::gen "0 WD BC AC"; # REGFD
+ PRI::gen "0 WD BB 2B"; # REGFP
+ PRI::gen "0 WD BC 00"; # REGFD
+ PRI::gen "0 WD BB AB"; # REGFP
+ PRI::gen "0 WD BC 2A"; # REGFD
+ PRI::gen "0 WD BB FF"; # REGFP
+ PRI::gen "0 WD BC AA"; # REGFD
+ PRI::gen "0 WD BB 29"; # REGFP
+ PRI::gen "0 WD BC FF"; # REGFD
+ PRI::gen "0 WD BB A9"; # REGFP
+ PRI::gen "0 WD BC 28"; # REGFD
+ PRI::gen "0 WD BB 00"; # REGFP
+ PRI::gen "0 WD BC A8"; # REGFD
+ PRI::gen "0 WD BB 27"; # REGFP
+ PRI::gen "0 WD BC FF"; # REGFD
+ PRI::gen "0 WD BB A7"; # REGFP
+ PRI::gen "0 WD BC 00"; # REGFD
+
+# PRI::gen "0 WD 80 00"; # PC1 (Port configuration 1): RPB_1.SYPR , XPB_1.SYPX
+ PRI::gen "0 WD 81 0B"; # PC2 (Port configuration 2): RPB_1.GPOH (ResetID ), XPB_1.GPOL (MUX_SEL0)
+ PRI::gen "0 WD 82 9B"; # PC3 (Port configuration 3): RPC_1.GPI (nConfig0), XPC_1.GPOL (MUX_SEL1)
+ PRI::gen "0 WD 83 9B"; # PC4 (Port configuration 4): RPD_1.GPI (nConfig1), XPD_1.GPOL (MUX_SEL2)
+}
+
+sub read_pri_specs() {
+ # For lab tests
+ my $labfile = "${0}.setup";
+
+ # Source default files
+ $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile";
+ my $setup_var = 'XPP_PRI_SETUP';
+ my $setup_string;
+ my ($default_file, %source_defaults) =
+ Zaptel::Config::Defaults::source_vars($setup_var);
+ $setup_string = $source_defaults{$setup_var};
+ $setup_string =~ s/^\s+//; # trim
+ $setup_string =~ s/\s+$//; # trim
+ $setup_string =~ s/\s+/\n/g; # cannonical spaces
+ #main::logit "From $default_file: $setup_var=\n$setup_string";
+ @pri_specs = split(/\s+/, $setup_string);
+ push(@pri_specs, 'NUM/*=TE,E1'); # Fall back default (last)
+ main::logit "pri_specs: @pri_specs";
+}
+
+package PRI::Port;
+
+sub new {
+ my $pack = shift;
+ my $port = { @_ };
+ bless $port, $pack;
+ $port->process_pri_spec;
+ return $port;
+}
+
+sub write_pri_info {
+ my $port = shift;
+ my $subunit = $port->{PORT_NUM};
+ my @pri_setup = @{$port->{PRI_SETUP}};
+ my $pri_type = $pri_setup[0] || die "Missing pri_type parameter";
+ my $pri_proto = $pri_setup[1] || die "Missing pri_proto parameter";
+ my $xpd_name = "XPD-$ENV{UNIT_NUMBER}$subunit";
+ my $info = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/pri_info";
+
+ main::logit "$xpd_name: PRI_SETUP $pri_type $pri_proto";
+ open(INFO, ">$info") || die "Failed to open '$info': $!\n";
+ print INFO "$pri_type $pri_proto\n" || die "Failed writing to '$info': $!\n";
+ close INFO || die "Failed during close of '$info': $!\n";
+}
+
+sub process_pri_spec($) {
+ my $port = shift;
+ my $subunit = $port->{PORT_NUM};
+ my $xpd_name = "XPD-$ENV{UNIT_NUMBER}$subunit";
+ my $match;
+ my $setup;
+ my @pri_setup;
+SPEC:
+ for(my $i = 0; $i < @pri_specs; $i++) {
+ my $spec = $pri_specs[$i];
+ ($match, $setup) = split(/=/, $spec);
+ next unless defined $match and defined $setup;
+ # Convert "globs" to regex
+ $match =~ s/\*/.*/g;
+ $match =~ s/\?/./g;
+ #logit "match: $match";
+ my @patlist = (
+ "CONNECTOR/$ENV{XBUS_CONNECTOR}/$xpd_name",
+ "NUM/$ENV{XBUS_NAME}/$xpd_name"
+ );
+ foreach my $pattern (@patlist) {
+ #logit "testmatch: $pattern =~ $match";
+ if($pattern =~ $match) {
+ main::logit "$xpd_name: MATCH '$pattern' ~ '$match' setup=$setup";
+ last SPEC;
+ }
+ }
+ }
+ die "No setup matching $ENV{XBUS_NAME}/$xpd_name\n" unless defined $setup;
+ @pri_setup = split(/,/, $setup);
+ die "Bad setup string '$setup'\n" unless @pri_setup;
+ $port->{'PRI_SETUP'} = \@pri_setup;
+}
+
+sub port_setup($) {
+ my $port = shift;
+ my $portno = $port->{PORT_NUM};
+
+ # only one of the following loopbacks can be activated in the same time
+ my $LIM1_RL = 0 << 1; # RL (Remote Loopback)
+ my $lim1 = 0xB0 | $LIM1_RL;
+
+ main::select_subunit($portno);
+ PRI::gen "$portno WD 26 F6"; # XPM0: Pulse Shape Programming for R1=18Ohms
+ PRI::gen "$portno WD 27 02"; # XPM1: ...3V Pulse Level at the line (Vp-p=6v)
+ PRI::gen "$portno WD 28 00"; # XPM2: ~XLT (transmit line is not in the high impedance state)
+
+ # if (unchannelized)
+ #PRI::gen "$portno WD 1F 22"; # LOOP (Channel Looback):
+ # ECLB (Enable Channel Loop-Back)
+ # CLA (Channel Address)
+ PRI::gen "$portno WD 2B EF"; # IDL (Idle):
+ # If channel loopback is enabled than transmit this code on the outgoing
+ PRI::gen "$portno WD 1F 00"; # LOOP (Channel Looback):
+ #if($portno eq 0){
+ # PRI::gen "0 WD 1F 00"; # LOOP (Channel Looback):
+ # # channels (XL1/XL2)
+ #}else {
+ # PRI::gen "0 WD 1F 20"; # LOOP (Channel Looback):
+ #}
+
+ PRI::gen "$portno WD 37 %02X", $lim1;
+ # LIM1: ~RL (Remote Loop bit 0x02),
+ # ~DRS (Dual Rail Select, latch receive data while trasmit),
+ # RIL1, RIL0 (Receive Input Treshold 0.62 V),
+ # CLOS (Clear data in case of LOS)
+ PRI::gen "$portno WD 3A 20"; # LIM2: SLT1, SLT0 = 01
+ # (Receiver Slicer Threshold, the receive slicer
+ # generates a mark (digital one) if the voltage at
+ # RL1/2 exceeds 50% of the peak amplitude,
+ # default, recommended in E1 mode).
+
+ PRI::gen "$portno WD 38 0A"; # PCD: (Pulse Count Detection, LOS Detection after 176 consecutive 0s)
+ PRI::gen "$portno WD 39 15"; # PCR: (Pulse Count Recovery, LOS Recovery after 22 ones in PCD interval)
+
+ # Configure system interface
+ PRI::gen "$portno WD 3E C2"; # SIC1: SSC1 (System clock ) is 8.192 Mhz,
+ # SSD1 (System Data rate) is 8.192 Mbit/s,
+ # ~BIM (Byte interleaved mode),
+ # XBS (Transmit Buffer Size) is 2 frames
+ PRI::gen "$portno WD 40 04"; # SIC3: Edges for capture, Synchronous Pulse Receive @Rising Edge
+ PRI::gen "$portno WD 41 04"; # CMR4: RCLK is 8.192 MHz
+ PRI::gen "$portno WD 43 04"; # CMR5: TCLK is 8.192 MHz
+ PRI::gen "$portno WD 44 34"; # CMR6: Receive reference clock generated by channel 1,
+ # RCLK is at 8.192 Mhz dejittered, Clock recovered from the line
+ # TCLK is at 8.192 MHz is de-jittered by DCO-R to drive a6.176 MHz
+ # clock on RCLK.*/
+
+ PRI::gen "$portno WD 22 00"; # XC0: (Transmit Counter Offset = 497/T=2)
+ PRI::gen "$portno WD 23 04"; # XC1:
+
+ PRI::gen "$portno WD 24 00"; # RC0: (Receive Counter Offset = 497/T=2)
+ PRI::gen "$portno WD 25 05"; # RC1:
+
+ my $sic2 = sprintf("%x", 0x00 | ($portno << 1));
+
+ PRI::gen "$portno WD 3F $sic2"; # SIC2: No FFS, no center receive elastic buffer, data active at phase ($sic >> 1)
+
+ # enable the following interrupt sources
+ PRI::gen "$portno WD 16 00"; # IMR2 (Interrupt Mask Register2): Enable ALL
+
+ PRI::gen "$portno WD 17 3F"; # IMR3 ~ES, ~SEC (Enable ES and SEC interrupts)
+ PRI::gen "$portno WD 18 00"; # IMR4: Enable ALL
+
+ PRI::gen "$portno WD 08 04"; # IPC: SYNC is 8 Khz
+
+ PRI::gen "$portno WD 02 51"; # CMDR (Command Register): RRES, XRES, SRES (Receiver/Transmitter reset)
+ PRI::gen "$portno WD 02 00"; # CMDR
+
+
+ # Configure interrupts
+ PRI::gen "$portno WD 46 40"; # GCR: Interrupt on Activation/Deactivation of AIX, LOS
+
+ PRI::gen "$portno WD 45 00"; # CMR2: External sources for SYPR, SCLKR, SYPX, SCLKX for TX and RX.
+ #PRI::gen "$portno WD 22 00"; # XC0: Normal operation of Sa-bits
+ #PRI::gen "$portno WD 23 04"; # XC1: X=4 => T=4-X=0 offset
+ #PRI::gen "$portno WD 24 00"; # RC0: 0 offset
+ #PRI::gen "$portno WD 25 00"; # RC1: Remaining part of RC0
+
+ # Configure ports
+ PRI::gen "$portno WD 85 80"; # GPC1 (Global Port Configuration 1):
+ #PRI::gen "$portno WD 85 00"; # GPC1 (Global Port Configuration 1):
+ # SMM (System Interface Multiplex Mode)
+ PRI::gen "$portno WD 80 00"; # PC1: SYPR/SYPX provided to RPA/XPA inputs
+
+ PRI::gen "$portno WD 84 31"; # PC5: XMFS active low, SCLKR is input, RCLK is output (unused)
+ PRI::gen "$portno WD 86 03"; # PC6: CLK1 is Tx Clock output, CLK2 is 8.192 Mhz from DCO-R
+ PRI::gen "$portno WD 3B 00"; # Clear LCR1 - Loop Code Register 1
+
+ # printk("TE110P: Successfully initialized serial bus for card\n");
+
+ # Initialize PCM and SIG regs
+ PRI::gen "$portno WD A0 00"; # TSEO (Time Slot Even/Odd Select)
+ PRI::gen "$portno WD A1 FF"; # TSBS (Time Slot Bit Select)- only selected bits are used for HDLC channel 1
+ # in selected time slots
+ PRI::gen "$portno WD 03 89"; # Mode Register:
+ # MDS (Mode Select) = 100 (No address comparison)
+ # HRAC (Receiver Active - HDLC channel 1)
+ # RFT2 (HDLC Receive FIFO is 64 byte deep)
+ PRI::gen "$portno WD 09 18"; # CCR1 (Common Configuration Register1)
+ # EITS (Enable Internal Time Slot 0 to 31 Signalling)
+ # ITF (Interframe Time Fill)
+ PRI::gen "$portno WD 0A 04"; # CCR2 (Common Configuration Register2)
+ # RCRC (enable CRC - HDLC channel 1enable CRC - HDLC channel 1)
+ PRI::gen "$portno WD 0C 00"; # RTR1 (Receive Time Slot register 1)
+ PRI::gen "$portno WD 0D 00"; # RTR2 (Receive Time Slot register 2)
+ PRI::gen "$portno WD 0E 00"; # RTR3 (Receive Time Slot register 3), TS16 (Enable time slot 16)
+ PRI::gen "$portno WD 0F 00"; # RTR4 (Receive Time Slot register 4)
+
+ PRI::gen "$portno WD 10 00"; # TTR1 (Transmit Time Slot register 1)
+ PRI::gen "$portno WD 11 00"; # TTR2 (Transmit Time Slot register 2)
+ PRI::gen "$portno WD 12 00"; # TTR3 (Transmit Time Slot register 3), TS16 (Enable time slot 16)
+ PRI::gen "$portno WD 13 00"; # TTR4 (Transmit Time Slot register 4)
+
+ # configure the best performance of the Bipolar Violation detection for all four channels
+ PRI::gen "$portno WD BD 00"; # BFR (Bugfix Register): ~BVP (Bipolar Violations),
+ # use Improved Bipolar Violation Detection instead
+}
+
+package main;
+BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); }
+use Zaptel::Config::Defaults;
+
+logit "Starting '$0'";
+
+PRI::read_pri_specs;
+
+sub main() {
+ my @ports;
+ my $subunit;
+
+ logit "main(): Initializing chip";
+ PRI::init_quad;
+ for($subunit = 0; $subunit < $ENV{UNIT_SUBUNITS}; $subunit++) {
+ my $is_nt = 0;
+
+ main::select_subunit($subunit);
+ #logit "main(): Initializing subunit $subunit is_nt=$is_nt";
+ my $p = PRI::Port->new(
+ 'PORT_NUM' => $subunit,
+ 'PRI_NT' => $is_nt
+ );
+ $p->port_setup;
+ push(@ports, $p);
+ }
+ PRI::finish_quad;
+ foreach my $p (@ports) {
+ $p->write_pri_info;
+ }
+}
+
+main;
+
+logit "Ending '$0'";
+
+close REG;
+close STDERR;
+exit 0;
diff --git a/xpp/init_card_7_29 b/xpp/init_card_7_29
deleted file mode 100755
index 255d50e..0000000
--- a/xpp/init_card_7_29
+++ /dev/null
@@ -1,434 +0,0 @@
-#! /usr/bin/perl -w
-use strict;
-
-#
-# $Id$
-#
-
-#
-# Written by Oron Peled <oron@actcom.co.il>
-# Copyright (C) 2006, Xorcom
-#
-# All rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# See the file LICENSE in the top level of this tarball.
-#
-
-# This script is run from the xpp kernel module upon detection
-# of a new XPD.
-#
-# Expects the following environment variables to be set:
-# XPD_BUS - bus name
-# XPD_NAME - xpd name
-# XPD_UNIT - xpd unit number
-# XPD_SUBUNIT - xpd subunit number
-# XPD_TYPE - xpd type number (from protocol reply):
-# 3 - FXS
-# 4 - FXO
-# 6 - BRI_TE
-# 7 - BRI_NT
-# XPD_REVISION - xpd revision number
-#
-# Output data format:
-# - An optional comment start with ';' or '#' until the end of line
-# - Optional Blank lines are ignored
-# - Fields are whitespace separated (spaces or tabs)
-#
-# The fields are (in command line order):
-# 1. CHIP select in decimal (ignored, taken from 3 LSB's of subunit number)
-# 2. Command word:
-# - RD Read Direct register.
-# - RS Read Sub-register.
-# - WD Write Direct register.
-# - WS Write Sub-register.
-# 3. Register number in hexadecimal.
-# 4. Subregister number in hexadecimal. (for RS and WS commands).
-# 5. Data byte in hexadecimal. (for WD and WS commands only).
-#
-
-package main;
-use File::Basename;
-
-my $program = basename("$0");
-my $init_dir = dirname("$0");
-my $unit_id;
-
-sub logit {
- print STDERR "$unit_id: @_\n";
-}
-
-# Arrange for error logging
-if (-t STDERR) {
- $unit_id = 'Interactive';
- logit "Interactive startup\n";
-} else {
- $unit_id = "$ENV{XPD_BUS}/$ENV{XPD_NAME}";
- open (STDERR, "| logger -t $program -p kern.info") || die;
- logit "Non Interactive startup\n";
-}
-
-package BRI;
-
-sub gen {
- my $fmt = shift;
- $| = 1;
- printf "$fmt\n", @_;
-}
-
-package BRI::Port;
-
-sub new {
- my $pack = shift;
- my $port = { @_ };
- bless $port, $pack;
-}
-
-# zap_xhfc_su.c:995
-sub init_su {
- my $port = shift;
- my $portnum = $port->{PORT_NUM};
- my $port_mode_up = $port->{PORT_MODE_UP};
- my $port_mode_exch = $port->{PORT_MODE_EXCH};
- my $bri_nt = $port->{BRI_NT};
- #logit "init_su(portnum=$portnum, port_mode_up=$port_mode_up, bri_nt=$bri_nt)";
-
- # Setting PLL
- # R_PLL_CTRL = 0 (V_PLL_M = 0, Reset PLL, Disable PLL_
- # R_CLK_CFG = 05 (PLL clock as system clock, output it to CLK_OUT pin)
- # R_PLL_P = 1
- # R_PLL_N = 6
- # R_PLL_S = 1
- # R_PLL_CTRL = 1 (V_PLL_M)
-
- BRI::gen "#--------------------------- init_su($portnum, $bri_nt, $port_mode_up, $port_mode_exch)";
- BRI::gen "0 WD 02 04";
- BRI::gen "0 WD 50 00"; # disable PLL
- BRI::gen "0 WD 51 02";
- BRI::gen "0 WD 52 06";
- BRI::gen "0 WD 53 04";
- BRI::gen "0 WD 50 01"; # Enable PLL
- BRI::gen "0 WD 02 05"; # Enable PLL
-
- su_sel($portnum); # select port
- if ("$port_mode_up" == 1) {
- $port->{CTRL3} = 0x01; # A_ST_CTRL3: V_ST_SEL = 1
- $port->{CTRL0} = 0x10; # A_SU_CTRL0: V_ST_SQ_EN = 1
- BRI::gen "0 WD 34 0F"; # A_MS_TX:
- # (multiframe/superframe transmit register)
- } else {
- $port->{CTRL3} = 0x00; # A_ST_CTRL3: V_ST_SEL = 0
- $port->{CTRL0} = 0x00; # A_SU_CTRL0: V_ST_SQ_EN = 0
- }
- if ("$bri_nt" == 1) {
- $port->{CTRL0} |= 0x04; # V_SU_MD
- }
- # ((V_SU_EXCH)?0x80:00) (change polarity)
- if($port_mode_exch) {
- $port->{CTRL2} = 0x80;
- } else {
- $port->{CTRL2} = 0x00;
- }
- BRI::gen "0 WD 35 %02X", $port->{CTRL3}; # A_ST_CTRL3
- BRI::gen "0 WD 31 %02X", $port->{CTRL0}; # A_SU_CTRL0
- BRI::gen "0 WD 35 F8"; # A_ST_CTRL3 = set end of pulse control to 0xF8
- BRI::gen "0 WD 32 08"; # A_SU_CTRL1 = Ignore E-channel data
- BRI::gen "0 WD 33 %02X", $port->{CTRL2}; # A_SU_CTRL2
-
- # zap_xhfc_su.c:1030 in init_su()
- # A_SU_CLK_DLY
- my $clk_dly;
- if ("$bri_nt" == 1) {
- $clk_dly = 0x6C;
- } else {
- $clk_dly = 0x0E;
- }
- #logit "clk_dly=$clk_dly";
- BRI::gen "0 WD 37 %02X", "$clk_dly";
-}
-
-sub su_sel {
- if (@_ != 1 ) {
- main::logit "ERROR: su_sel() called with " . scalar(@_) . " parameters";
- exit 1;
- }
- my $portnum = shift;
- BRI::gen "0 WD 16 %02X", $portnum; # R_SU_SEL
-}
-
-# zap_xhfc_su.c:281
-sub xhfc_selfifo {
- if (@_ != 1 ) {
- main::logit "ERROR: xhfc_selfifo() called with " . scalar(@_) . " parameters";
- exit 1;
- }
- my $fifonum = shift;
- #logit "xhfc_selfifo($fifonum)";
- BRI::gen "0 WD 0F %02X", $fifonum;
- # --> WAIT UNTIL (R_STATUS & M_BUSY) == 0
-}
-
-# zap_xhfc_su.c:295
-sub xhfc_resetfifo() {
- #logit "xhfc_resetfifo()";
- # A_INC_RES_FIFO = M_RES_FIFO | M_RES_FIFO_ERR
- BRI::gen "0 WD 0E 0A";
- # --> WAIT UNTIL (R_STATUS & M_BUSY) == 0
-}
-
-# zap_xhfc_su.c:1040
-# Initialize fifo (called for each portnum, channel, direction)
-sub setup_fifo {
- my $port = shift;
- my $chan = shift;
- my $direction = shift;
- my $conhdlc = shift;
- my $subcfg = shift;
- my $fifoctrl = shift;
-
- my $portnum = $port->{PORT_NUM};
- my $port_mode_up = $port->{PORT_MODE_UP};
- my $port_mode_exch = $port->{PORT_MODE_EXCH};
- my $bri_nt = $port->{BRI_NT};
-
- BRI::gen "#--------------------------- setup_fifo($portnum, $chan, $direction)";
- # my $fifonum = 0x80 | ($portnum << 3) | ($chan << 1) | ($direction); # # MSB first
- my $fifonum = ($portnum << 3) | ($chan << 1) | ($direction); # # MSB first
- my $r_slot = ($portnum << 3) | ($chan << 1) | ($direction);
-
- # channel order workaround, swap odd and even portnums in $r_slot for PCM (chan 0, 1) only
- if ("$chan" == 0 || "$chan" == 1) {
- $r_slot = $r_slot ^ 0x08;
- }
-
- my $short_portnum = $portnum & 0x03;
- my $a_sl_cfg = (0x80 | ($short_portnum << 3) | ($chan << 1) | ($direction)); # receive data from STIO2, transmit to STIO1
-
- #logit "setup_fifo($fifonum)";
- xhfc_selfifo $fifonum;
- # A_CON_HDLC: transparent mode selection
- BRI::gen "0 WD FA %02X", $conhdlc;
- # A_SUBCH_CFG: subchnl params
- BRI::gen "0 WD FB %02X", $subcfg;
- # A_FIFO_CTRL: FIFO Control Register
- BRI::gen "0 WD FF %02X", $fifoctrl;
- xhfc_resetfifo;
- xhfc_selfifo $fifonum; # wait for busy is builtin in this command
- BRI::gen "0 WD 10 %02X", $r_slot; # R_SLOT
- BRI::gen "0 WD D0 %02X", $a_sl_cfg; # A_SL_CFG
-
- #system("/bin/echo \"----=====NT\" \"short_portnum=\"$short_portnum \"portnum=\" $portnum \"chan=\" $chan\"======----\n\" >>/root/xortel/test_init");
-}
-
-# zap_xhfc_su.c:1071
-sub setup_su {
- my $port = shift;
- my $bchan = shift;
- my $portnum = $port->{PORT_NUM};
- my $port_mode_exch = $port->{PORT_MODE_EXCH};
- my $bri_nt = $port->{BRI_NT};
-
- BRI::gen "#--------------------------- setup_su($portnum, $bchan)";
- #logit "setup_su(portnum=$portnum, bchan=$bchan, port_mode_exch=$port_mode_exch, bri_nt=$bri_nt)";
- $port->{CTRL0} |= (1 << $bchan) | $bri_nt;
- $port->{CTRL2} |= ($port_mode_exch << 7) | (1 << $bchan);
- su_sel($portnum); # Select port
- BRI::gen "0 WD 31 %02X", $port->{CTRL0}; # A_SU_CTRL0: V_B1_TX_EN | V_SU_MD | (NT/TE)
- BRI::gen "0 WD 33 %02X", $port->{CTRL2}; # A_SU_CTRL2: V_B1_RX_EN
-}
-
-sub xhfc_ph_command {
- my $port = shift;
- my $cmd = shift;
- my $portnum = $port->{PORT_NUM};
- #logit "xhfc_ph_command(portnum=$portnum)";
- if ("$cmd" eq "HFC_L1_ACTIVATE_TE") {
- su_sel($portnum); # Select port
- BRI::gen "0 WD 30 60"; # A_SU_WR_STA = (M_SU_ACT & 0x03)
- # (set activation)
- } elsif ("$cmd" eq "HFC_L1_FORCE_DEACTIVATE_TE") {
- su_sel($portnum); # Select port
- BRI::gen "0 WD 30 40"; # A_SU_WR_STA = (M_SU_ACT & 0x02)
- # (set deactivation)
- } elsif ("$cmd" eq "HFC_L1_ACTIVATE_NT") {
- su_sel($portnum); # Select port
- BRI::gen "0 WD 30 E0"; # A_SU_WR_STA = (M_SU_ACT & 0x03) | 0x80
- # (set activation + NT)
- } elsif ("$cmd" eq "HFC_L1_DEACTIVATE_NT") {
- su_sel($portnum); # Select port
- BRI::gen "0 WD 30 40"; # A_SU_WR_STA = (M_SU_ACT & 0x02)
- # (set deactivation)
- }
-}
-
-
-sub zthfc_startup {
- my $port = shift;
- my $portnum = $port->{PORT_NUM};
- my $port_mode_exch = $port->{PORT_MODE_EXCH};
- my $bri_nt = $port->{BRI_NT};
- #logit "zthfc_startup(portnum=$portnum, port_mode_exch=$port_mode_exch, bri_nt=$bri_nt)";
-
- # PCM <-> ST/Up Configuration
- foreach my $chan ( 0, 1 ) {
- $port->setup_fifo($chan, 0, 0xFE, 0, 0);# Transparent mode, FIFO EN, ST->PCM
- $port->setup_fifo($chan, 1, 0xFE, 0, 0);# Transparent mode, FIFO EN, ST->PCM
- $port->setup_su($chan); # zap_xhfc_su.c:194
- }
-
- # Zaptel chan 2 used as HDLC D-Channel
- $port->setup_fifo(2, 0, 0x05, 2, 0); # D-TX: zap_xhfc_su.c:205
- $port->setup_fifo(2, 1, 0x05, 2, 0); # D-RX: zap_xhfc_su.c:206
- # E-chan, Echo channel is ignored
-
-
- # enable this port's state machine
- su_sel($portnum); # Select port
- # A_SU_WR_STA: reset port state machine
- BRI::gen "0 WD 30 00";
- if ("$bri_nt" == 0) {
- $port->xhfc_ph_command("HFC_L1_ACTIVATE_TE");
- } else {
- $port->xhfc_ph_command("HFC_L1_ACTIVATE_NT");
- }
-}
-
-
-package main;
-use Getopt::Std;
-
-my %opts;
-getopts('o:', \%opts);
-
-$ENV{XPP_BASE} = '/proc/xpp';
-my $cmd = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/command";
-my $output;
-if ($opts{o}) {
- $output = $opts{o};
-} else {
- $ENV{XPD_BUS} || die "Missing XPD_BUS environment variable\n";
- $ENV{XPD_NAME} || die "Missing XPD_NAME environment variable\n";
- $ENV{XPD_TYPE} || die "Missing XPD_TYPE environment variable\n";
- $ENV{XPD_REVISION} || die "Missing XPD_REVISION environment variable\n";
- $output = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/$ENV{XPD_NAME}/slics";
-}
-
-open(REG, ">$output") || die "Failed to open '$output': $!\n";
-select REG;
-
-logit "Starting '$0'";
-
-#------------------------------------------- Instance detection
-
-# zap_xhfc_su.c:895
-sub init_xhfc() {
- #logit "init_xhfc()";
- BRI::gen "#--------------------------- init_xhfc";
- BRI::gen "0 WD 0D 00"; # r_FIFO_MD: 16 fifos,
- # 64 bytes for TX and RX each (FIFO mode config)
-
- # software reset to enable R_FIFO_MD setting
- BRI::gen "0 WD 00 08"; # R_CIRM = M_SRES (soft reset)
- # --> WAIT 5u
- BRI::gen "0 WD 00 00"; # R_CIRM = 0 (zero it to deactivate reset)
-
- # amplitude
- BRI::gen "0 WD 46 80"; # R_PWM_MD: (PWM output mode register)
- # PWM push to zero only
- BRI::gen "0 WD 39 18"; # R_PWM1: (modulator register for PWM1)
- # set duty cycle
-
- BRI::gen "0 WD 0C 11"; # R_FIFO_THRES: (FIFO fill lvl control register)
- # RX/TX threshold = 16 bytes
-
- # --> Wait until (R_STATUS & (M_BUSY | M_PCM_INIT))
- # M_BUSY status will be checked after fifo selection
- BRI::gen "0 WD 0F 80";
- # set PCM !master mode
- BRI::gen "0 WD 14 08"; # R_PCM_MD0 = PCM slave mode, F0IO duration is 2 HFC_PCLK's
-
- # (C4IO, F0IO are inputs)
-
- # set pll adjust
- # WD 14 90 # R_PCM_MD0: Index value to select
- # the register at address 15
- # WD 15 2C # R_PCM_MD1: V_PLL_ADJ (DPLL adjust speed), C4IO is 16.384MHz(128 time slots)
- # in the last slot of PCM frame
- BRI::gen "0 WS 14 98 20"; # R_PCM_MD1: V_PLL_ADJ
- # (DPLL adjust speed) in the
- # last slot of PCM frame
-
- BRI::gen "0 WD 4C 03"; # GPIOGPIO function (not PWM) on GPIO0 and GPIO1 pins
- BRI::gen "0 WD 4A 03"; # Output enable for GPIO0 and GPIO1 pins
-}
-
-my %port_type = (
- 6 => { 'BRI_NT' => 0 },
- 7 => { 'BRI_NT' => 1 }
- );
-
-# zap_xhfc_su.c:175
-sub main() {
- #logit "main(): XPD_TYPE=$ENV{XPD_TYPE}";
-
- $ENV{XPD_TYPE} || die "Missing XPD_TYPE environment variable\n";
- my $type = $port_type{$ENV{XPD_TYPE}};
- die "Bad XPD_TYPE=$ENV{XPD_TYPE}\n" unless $type;
- die "Missing XPD_SUBUNIT information\n" unless defined($ENV{XPD_SUBUNIT});
-
- # We must first turn off packet reception.
- #
- # Otherwise we mess with registers while the FPGA firmware tries to
- # send us packets.
- BRI::gen "0 Wm";
-
- # Common initialization
- if(($ENV{XPD_SUBUNIT} % 4) eq '0') {
- # Turn off multi-byte packet reception before initialization started
- my $chipnum = ($ENV{XPD_SUBUNIT} & 0x04) << 3; # Max 2 XHFC chips
- for my $subunit (0 .. 3) { # 4 subunits per XHFC chip
- my $addr = $chipnum | ($subunit << 3);
- my $str = sprintf("0A 00 0F %02X C0 00 00 00 00 00\n", $addr);
- open(CMD, ">$cmd") || die "Failed to open '$cmd': $!\n";
- print CMD $str;
- close CMD;
- }
- init_xhfc; # zap_xhfc_su.c:1173 in setup_instance()
- }
-
- # Port initialization
- my $p = BRI::Port->new(
- 'PORT_NUM' => $ENV{XPD_SUBUNIT},
- 'BRI_NT' => $type->{BRI_NT},
- 'PORT_MODE_UP' => 0,
- 'PORT_MODE_EXCH' => 0
- );
- # zap_XHfc_su.c:1186 in setup_instance()
- $p->init_su;
-
- $p->zthfc_startup;
-
- if(($ENV{XPD_SUBUNIT} % 4) eq 3) {
- # Turn on multi-byte packet reception when ports initialization finished
- my $chipnum = ($ENV{XPD_SUBUNIT} & 0x04) << 3; # Max 2 XHFC chips
- for my $subunit (0 .. 3) { # 4 subunits per XHFC chip
- my $addr = $chipnum | ($subunit << 3);
- my $str = sprintf("0A 00 0F %02X 80 00 00 00 00 00\n", $addr);
- open(CMD, ">$cmd") || die "Failed to open '$cmd': $!\n";
- print CMD $str;
- close CMD;
- }
- }
-}
-
-main;
-
-logit "Ending '$0'";
-
-close REG;
-close STDERR;
-exit 0;
diff --git a/xpp/init_card_9_29 b/xpp/init_card_9_29
deleted file mode 100755
index dd3b0a5..0000000
--- a/xpp/init_card_9_29
+++ /dev/null
@@ -1,358 +0,0 @@
-#! /usr/bin/perl -w
-use strict;
-
-#
-# $Id$
-#
-
-#
-# Written by Oron Peled <oron@actcom.co.il>
-# Copyright (C) 2007, Xorcom
-#
-# All rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# See the file LICENSE in the top level of this tarball.
-#
-
-# This script is run from the xpp kernel module upon detection
-# of a new XPD.
-#
-# Expects the following environment variables to be set:
-# XPD_BUS - bus name
-# XBUS_CONNECTOR - bus connector id string
-# XPD_NAME - xpd name
-# XPD_UNIT - xpd unit number
-# XPD_TYPE - xpd type number (from protocol reply):
-# 3 - FXS
-# 4 - FXO
-# 6 - BRI_TE
-# 7 - BRI_NT
-# 8 - PRI_TE
-# 9 - PRI_NT
-# XPD_REVISION - xpd revision number
-#
-# Output data format:
-# - An optional comment start with ';' or '#' until the end of line
-# - Optional Blank lines are ignored
-# - Fields are whitespace separated (spaces or tabs)
-#
-# The fields are (in command line order):
-# 1. CHIP select in decimal (ignored, taken from 3 LSB's of subunit number)
-# 2. Command word:
-# - RD Read Direct register.
-# - WD Write Direct register.
-# 3. Register number in hexadecimal.
-# 4. Subregister number in hexadecimal. (for RS and WS commands).
-# 5. Data byte in hexadecimal. (for WD and WS commands only).
-#
-
-package main;
-use File::Basename;
-
-my $program = basename("$0");
-my $init_dir = dirname("$0");
-my $unit_id;
-
-sub logit {
- print STDERR "$unit_id: @_\n";
-}
-
-# Arrange for error logging
-if (-t STDERR) {
- $unit_id = 'Interactive';
- logit "Interactive startup\n";
-} else {
- $unit_id = "$ENV{XPD_BUS}/$ENV{XPD_NAME}";
- open (STDERR, "| logger -t $program -p kern.info") || die;
- logit "Non Interactive startup\n";
-}
-
-package PRI;
-
-sub gen {
- my $fmt = shift;
- $| = 1;
- printf "$fmt\n", @_;
-}
-
-package PRI::Port;
-
-sub new {
- my $pack = shift;
- my $port = { @_ };
- bless $port, $pack;
-}
-
-package main;
-use Getopt::Std;
-BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); }
-use Zaptel::Config::Defaults;
-
-my %opts;
-getopts('o:', \%opts);
-
-$ENV{XPP_BASE} = '/proc/xpp';
-#my $cmd = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/command";
-my $output;
-if ($opts{o}) {
- $output = $opts{o};
-} else {
- $ENV{XPD_BUS} || die "Missing XPD_BUS environment variable\n";
- $ENV{XPD_NAME} || die "Missing XPD_NAME environment variable\n";
- $ENV{XPD_TYPE} || die "Missing XPD_TYPE environment variable\n";
- $ENV{XPD_REVISION} || die "Missing XPD_REVISION environment variable\n";
- $ENV{XBUS_CONNECTOR} || die "Missing XBUS_CONNECTOR environment variable\n";
- $output = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/$ENV{XPD_NAME}/slics";
-}
-
-sub write_pri_info {
- my $pri_type = shift || die "Missing pri_type parameter";
- my $pri_proto = shift || die "Missing pri_proto parameter";
- my $info = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/$ENV{XPD_NAME}/pri_info";
-
- open(INFO, ">$info") || die "Failed to open '$info': $!\n";
- print INFO "$pri_type $pri_proto\n" || die "Failed writing to '$info': $!\n";
- close INFO || die "Failed during close of '$info': $!\n";
-}
-
-my @PRI_SETUP;
-
-sub set_defaults {
- my @pri_specs;
- my $match;
- my $setup;
- # For lab tests
- my $labfile = "${0}.setup";
-
- # Source default files
- $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile";
- my $setup_var = 'XPP_PRI_SETUP';
- my $setup_string;
- my ($default_file, %source_defaults) =
- Zaptel::Config::Defaults::source_vars($setup_var);
- $setup_string = $source_defaults{$setup_var};
- $setup_string =~ s/^\s+//; # trim
- $setup_string =~ s/\s+$//; # trim
- $setup_string =~ s/\s+/\n/g; # cannonical spaces
- logit "From $default_file: $setup_var=\n$setup_string\n";
- @pri_specs = split(/\s+/, $setup_string);
- push(@pri_specs, 'NUM/*=TE,E1'); # Fall back default (last)
- logit "pri_specs: @pri_specs";
-SPEC:
- for(my $i = 0; $i < @pri_specs; $i++) {
- my $spec = $pri_specs[$i];
- ($match, $setup) = split(/=/, $spec);
- next unless defined $match and defined $setup;
- # Convert "globs" to regex
- $match =~ s/\*/.*/g;
- $match =~ s/\?/./g;
- #logit "match: $match";
- my @patlist = (
- "CONNECTOR/$ENV{XBUS_CONNECTOR}/$ENV{XPD_NAME}",
- "NUM/$ENV{XPD_BUS}/$ENV{XPD_NAME}"
- );
- foreach my $pattern (@patlist) {
- #logit "testmatch: $pattern =~ $match";
- if($pattern =~ $match) {
- logit "MATCH($i): '$match' setup=$setup";
- last SPEC;
- }
- }
- }
- die "No setup matching $ENV{XPD_BUS}/$ENV{XPD_NAME}\n" unless defined $setup;
- @PRI_SETUP = split(/,/, $setup);
- die "Bad setup string '$setup'\n" unless @PRI_SETUP;
-}
-
-set_defaults;
-
-open(REG, ">$output") || die "Failed to open '$output': $!\n";
-select REG;
-
-logit "Starting '$0'";
-
-PRI::gen "#--------------------------- start";
-
-# only one of the following loopbacks can be activated in the same time
-my $LIM1_RL = 0 << 1; # RL (Remote Loopback)
-my $lim1 = 0xB0 | $LIM1_RL;
-
-my $subunits_num = 4;
-my $subunit = $ENV{XPD_SUBUNIT};
-
-if($subunit eq 0) {
- # Tuning of clocking unit to the 16.384 MHz reference frequence
- # by setting Global Clock Mode registers (GCM[1:8]), same for E1 and T1/J1
- PRI::gen "0 WD 92 00"; # GCM1
- PRI::gen "0 WD 93 18"; # GCM2
- PRI::gen "0 WD 94 FB"; # GCM3
- PRI::gen "0 WD 95 0B"; # GCM4
- PRI::gen "0 WD 96 01"; # GCM5
- PRI::gen "0 WD 97 0B"; # GCM6
- PRI::gen "0 WD 98 DB"; # GCM7
- PRI::gen "0 WD 99 DF"; # GCM8
-
- for(my $i = 0; $i < $subunits_num; $i++) {
- PRI::gen "0 WS 26 $i BD"; # XPM0: Pulse Shape Programming for R1=18Ohms (0x54)
- PRI::gen "0 WS 27 $i 03"; # XPM1: ...3V Pulse Level at the line (0x02)
- PRI::gen "0 WS 28 $i 00"; # XPM2: ~XLT (transmit line is not in the high impedance state)
-
- # if (unchannelized)
- #PRI::gen "0 WS 1F $i 22"; # LOOP (Channel Looback):
- # ECLB (Enable Channel Loop-Back)
- # CLA (Channel Address)
- PRI::gen "0 WS 2B $i EF"; # IDL (Idle):
- # If channel loopback is enabled than transmit this code on the outgoing
- PRI::gen "0 WS 1F $i 00"; # LOOP (Channel Looback):
- #if($i eq 0){
- # PRI::gen "0 WS 1F $i 00"; # LOOP (Channel Looback):
- # # channels (XL1/XL2)
- #}else {
- # PRI::gen "0 WS 1F $i 20"; # LOOP (Channel Looback):
- #}
-
- PRI::gen "0 WS 37 $i %02X", $lim1;
- # LIM1: ~RL (Remote Loop bit 0x02),
- # ~DRS (Dual Rail Select, latch receive data while trasmit),
- # RIL1, RIL0 (Receive Input Treshold 0.62 V),
- # CLOS (Clear data in case of LOS)
- PRI::gen "0 WS 3A $i 20"; # LIM2: SLT1, SLT0 = 01
- # (Receiver Slicer Threshold, the receive slicer
- # generates a mark (digital one) if the voltage at
- # RL1/2 exceeds 50% of the peak amplitude,
- # default, recommended in E1 mode).
-
- PRI::gen "0 WS 38 $i 0A"; # PCD: (Pulse Count Detection, LOS Detection after 176 consecutive 0s)
- PRI::gen "0 WS 39 $i 15"; # PCR: (Pulse Count Recovery, LOS Recovery after 22 ones in PCD interval)
-
- # Configure system interface
- PRI::gen "0 WS 3E $i C2"; # SIC1: SSC1 (System clock ) is 8.192 Mhz,
- # SSD1 (System Data rate) is 8.192 Mbit/s,
- # ~BIM (Byte interleaved mode),
- # XBS (Transmit Buffer Size) is 2 frames
- PRI::gen "0 WS 40 $i 04"; # SIC3: Edges for capture, Synchronous Pulse Receive @Rising Edge
- PRI::gen "0 WS 41 $i 04"; # CMR4: RCLK is 8.192 MHz
- PRI::gen "0 WS 43 $i 04"; # CMR5: TCLK is 8.192 MHz
- PRI::gen "0 WS 44 $i 34"; # CMR6: Receive reference clock generated by channel 1,
- # RCLK is at 8.192 Mhz dejittered, Clock recovered from the line
- # TCLK is at 8.192 MHz is de-jittered by DCO-R to drive a6.176 MHz
- # clock on RCLK.*/
-
- PRI::gen "0 WS 20 $i 9F"; # XSW: XSIS (Spare Bit For International Use fixed to 1),
- # XY0, XY1, XY2, XY3, XY4 (Y0, Y1 and Y3-Bits fixed to 1)
-
- # cas = 0x1c;
- # if (!(lineconfig & ZT_CONFIG_CCS))
- # cas |= 0x40;
-
- PRI::gen "0 WS 22 $i 00"; # XC0: (Transmit Counter Offset = 497/T=2)
- PRI::gen "0 WS 23 $i 04"; # XC1:
-
- PRI::gen "0 WS 24 $i 00"; # RC0: (Receive Counter Offset = 497/T=2)
- PRI::gen "0 WS 25 $i 05"; # RC1:
-
- my $sic2 = sprintf("%x", 0x00 | ($i << 1));
-
- PRI::gen "0 WS 3F $i $sic2"; # SIC2: No FFS, no center receive elastic buffer, data active at phase ($sic >> 1)
-
- # enable the following interrupt sources
- PRI::gen "0 WS 16 $i 00"; # IMR2 (Interrupt Mask Register2): Enable ALL
-
- PRI::gen "0 WS 17 $i 3F"; # IMR3 ~ES, ~SEC (Enable ES and SEC interrupts)
- PRI::gen "0 WS 18 $i 00"; # IMR4: Enable ALL
-
- PRI::gen "0 WS 08 $i 04"; # IPC: SYNC is 8 Khz
-
- PRI::gen "0 WS 02 $i 51"; # CMDR (Command Register): RRES, XRES, SRES (Receiver/Transmitter reset)
- PRI::gen "0 WS 02 $i 00"; # CMDR
-
-
- # Configure interrupts
- PRI::gen "0 WS 46 $i 40"; # GCR: Interrupt on Activation/Deactivation of AIX, LOS
-
- PRI::gen "0 WS 45 $i 00"; # CMR2: External sources for SYPR, SCLKR, SYPX, SCLKX for TX and RX.
- #PRI::gen "0 WS 22 $i 00"; # XC0: Normal operation of Sa-bits
- #PRI::gen "0 WS 23 $i 04"; # XC1: X=4 => T=4-X=0 offset
- #PRI::gen "0 WS 24 $i 00"; # RC0: 0 offset
- #PRI::gen "0 WS 25 $i 00"; # RC1: Remaining part of RC0
-
- # Configure ports
- PRI::gen "0 WD 85 80"; # GPC1 (Global Port Configuration 1):
- #PRI::gen "0 WD 85 00"; # GPC1 (Global Port Configuration 1):
- # SMM (System Interface Multiplex Mode)
- PRI::gen "0 WS 80 $i 00"; # PC1: SYPR/SYPX provided to RPA/XPA inputs
-
- PRI::gen "0 WS 84 $i 31"; # PC5: XMFS active low, SCLKR is input, RCLK is output (unused)
- PRI::gen "0 WS 86 $i 03"; # PC6: CLK1 is Tx Clock output, CLK2 is 8.192 Mhz from DCO-R
- PRI::gen "0 WS 3B $i 00"; # Clear LCR1 - Loop Code Register 1
-
- # printk("TE110P: Successfully initialized serial bus for card\n");
-
- # Initialize PCM and SIG regs
- PRI::gen "0 WS A0 $i 00"; # TSEO (Time Slot Even/Odd Select)
- PRI::gen "0 WS A1 $i FF"; # TSBS (Time Slot Bit Select)- only selected bits are used for HDLC channel 1
- # in selected time slots
- PRI::gen "0 WS 03 $i 89"; # Mode Register:
- # MDS (Mode Select) = 100 (No address comparison)
- # HRAC (Receiver Active - HDLC channel 1)
- # RFT2 (HDLC Receive FIFO is 64 byte deep)
- PRI::gen "0 WS 09 $i 18"; # CCR1 (Common Configuration Register1)
- # EITS (Enable Internal Time Slot 0 to 31 Signalling)
- # ITF (Interframe Time Fill)
- PRI::gen "0 WS 0A $i 04"; # CCR2 (Common Configuration Register2)
- # RCRC (enable CRC - HDLC channel 1enable CRC - HDLC channel 1)
- PRI::gen "0 WS 0C $i 00"; # RTR1 (Receive Time Slot register 1)
- PRI::gen "0 WS 0D $i 00"; # RTR2 (Receive Time Slot register 2)
- PRI::gen "0 WS 0E $i 00"; # RTR3 (Receive Time Slot register 3), TS16 (Enable time slot 16)
- PRI::gen "0 WS 0F $i 00"; # RTR4 (Receive Time Slot register 4)
-
- PRI::gen "0 WS 10 $i 00"; # TTR1 (Transmit Time Slot register 1)
- PRI::gen "0 WS 11 $i 00"; # TTR2 (Transmit Time Slot register 2)
- PRI::gen "0 WS 12 $i 00"; # TTR3 (Transmit Time Slot register 3), TS16 (Enable time slot 16)
- PRI::gen "0 WS 13 $i 00"; # TTR4 (Transmit Time Slot register 4)
-
- # configure the best performance of the Bipolar Violation detection for all four channels
- PRI::gen "0 WS BD $i 00"; # BFR (Bugfix Register): ~BVP (Bipolar Violations),
- # use Improved Bipolar Violation Detection instead
- }
- PRI::gen "0 WD BB FF"; # REGFP
- PRI::gen "0 WD BC AC"; # REGFD
- PRI::gen "0 WD BB 2B"; # REGFP
- PRI::gen "0 WD BC 00"; # REGFD
- PRI::gen "0 WD BB AB"; # REGFP
- PRI::gen "0 WD BC 2A"; # REGFD
- PRI::gen "0 WD BB FF"; # REGFP
- PRI::gen "0 WD BC AA"; # REGFD
- PRI::gen "0 WD BB 29"; # REGFP
- PRI::gen "0 WD BC FF"; # REGFD
- PRI::gen "0 WD BB A9"; # REGFP
- PRI::gen "0 WD BC 28"; # REGFD
- PRI::gen "0 WD BB 00"; # REGFP
- PRI::gen "0 WD BC A8"; # REGFD
- PRI::gen "0 WD BB 27"; # REGFP
- PRI::gen "0 WD BC FF"; # REGFD
- PRI::gen "0 WD BB A7"; # REGFP
- PRI::gen "0 WD BC 00"; # REGFD
-
-# PRI::gen "0 WS 80 00 00"; # PC1 (Port configuration 1): RPB_1.SYPR , XPB_1.SYPX
- PRI::gen "0 WS 81 00 0B"; # PC2 (Port configuration 2): RPB_1.GPOH (ResetID ), XPB_1.GPOL (MUX_SEL0)
- PRI::gen "0 WS 82 00 9B"; # PC3 (Port configuration 3): RPC_1.GPI (nConfig0), XPC_1.GPOL (MUX_SEL1)
- PRI::gen "0 WS 83 00 9B"; # PC4 (Port configuration 4): RPD_1.GPI (nConfig1), XPD_1.GPOL (MUX_SEL2)
-}
-
-
-#------------------------------------------- Instance detection
-
-logit "Ending '$0'";
-
-close REG;
-
-write_pri_info @PRI_SETUP;
-
-close STDERR;
-exit 0;
diff --git a/xpp/utils/Makefile b/xpp/utils/Makefile
index d8290eb..2e3624c 100644
--- a/xpp/utils/Makefile
+++ b/xpp/utils/Makefile
@@ -37,7 +37,7 @@ PERL_MODS := $(shell cd zconf; echo $(PERL_MODS_PAT))
XPD_FIRMWARE = $(wildcard ../firmwares/*.hex)
XPD_INIT_DATA = $(XPD_FIRMWARE) init_fxo_modes
-XPD_INIT = $(wildcard ../init_card_?_*) ../calibrate_slics xpp_fxloader
+XPD_INIT = $(wildcard ../init_card_?_*) xpp_fxloader
# Variables that should be defined above, but need sane defaults:
# FIXME: Are those values really sane?
@@ -49,6 +49,8 @@ ifeq (,$(PBX_LIBUSB))
PBX_LIBUSB = $(shell if [ -r /usr/include/usb.h ]; then echo 1; else echo 0; fi)
endif
+WCTDM=$(shell for i in $(ZAP_KERNEL)/wctdm.c $(ZAP_KERNEL)/fxo_modes.h; do [ -f "$$i" ] && echo "$$i"; done)
+
CFLAGS = -g -Wall $(EXTRA_CFLAGS)
%.8: %
@@ -124,8 +126,12 @@ test_parse.o: test_parse.c hexfile.h
test_parse: test_parse.o libhexfile.a
$(CC) -L. -o $@ $@.o $(EXTRA_LIBS) -lhexfile -lusb
-print_modes: print_modes.c $(ZAP_KERNEL)/fxo_modes.h
- $(HOSTCC) -I$(ZAP_KERNEL) -o $@ $(CFLAGS) $<
+print_modes: print_modes.c wctdm_fxomodes.h
+ $(HOSTCC) -o $@ $(CFLAGS) $<
+
+wctdm_fxomodes.h: $(WCTDM)
+ @echo Building FXO modes from: $(WCTDM)
+ perl -n -e 'print if (/^static struct fxo_mode {$$/ .. /};$$/)' $(WCTDM) >$@ || rm -f $@
init_fxo_modes: print_modes
./$< >$@
diff --git a/xpp/utils/fpga_load.8 b/xpp/utils/fpga_load.8
index 412a839..dd21db0 100644
--- a/xpp/utils/fpga_load.8
+++ b/xpp/utils/fpga_load.8
@@ -1,7 +1,7 @@
.TH "FPGA_LOAD" "8" "16 April 2006" "" ""
.SH NAME
-ztcfg \- reads and loads zaptel.conf
+fpga_load \- Xorcom Astribank (xpp) firmware tool
.SH SYNOPSIS
.B fpga_load
diff --git a/xpp/utils/fpga_load.c b/xpp/utils/fpga_load.c
index 3d6bdbe..7102501 100644
--- a/xpp/utils/fpga_load.c
+++ b/xpp/utils/fpga_load.c
@@ -574,6 +574,10 @@ int my_usb_device_init(const char devpath[], struct my_usb_device *mydev, const
}
dev_desc = &mydev->dev->descriptor;
config_desc = mydev->dev->config;
+ if (!config_desc) {
+ ERR("usb interface without a configuration\n");
+ return 0;
+ }
interface = &config_desc->interface[abtype->my_interface_num];
iface_desc = interface->altsetting;
endpoint = iface_desc->endpoint;
diff --git a/xpp/utils/genzaptelconf b/xpp/utils/genzaptelconf
index 1435e9f..163f595 100755
--- a/xpp/utils/genzaptelconf
+++ b/xpp/utils/genzaptelconf
@@ -973,7 +973,10 @@ EOF
# this is an empty slot.
# TODO: I believe that the Sangoma A20x will reject both and thus
# print nothing here.
- echo "# channel $chan_num, WCTDM, no module." >> $zaptel_file
+ case "$mode" in
+ list) echo "# channel $chan_num, WCTDM, no module.";;
+ files) echo "# channel $chan_num, WCTDM, no module." >> $zaptel_file;;
+ esac
continue
fi
diff --git a/xpp/utils/print_modes.c b/xpp/utils/print_modes.c
index e894b11..77e0e33 100644
--- a/xpp/utils/print_modes.c
+++ b/xpp/utils/print_modes.c
@@ -1,11 +1,10 @@
#include <stdio.h>
-#include "fxo_modes.h"
+#include "wctdm_fxomodes.h"
int main() {
size_t i;
- printf("case \"$mode\" in\n");
for (i=0; i<(sizeof(fxo_modes)/sizeof(struct fxo_mode)); i++) {
if (fxo_modes[i].name == NULL) break;
int reg16=0, reg26=0, reg30=0, reg31=0x20;
@@ -23,22 +22,12 @@ int main() {
reg31 |= (fxo_modes[i].ohs2 << 3);
- if (fxo_modes[i].ring_osc !=0 ) {
- snprintf(ring_osc, BUFSIZ, "; ring_osc=\"%02X %02X\"",
- (fxo_modes[i].ring_osc)>>8,
- (fxo_modes[i].ring_osc)&&0xFF
- );
- }
- if (fxo_modes[i].ring_x !=0 ) {
- snprintf(ring_x, BUFSIZ, "; ring_x=\"%02X %02X\"",
- (fxo_modes[i].ring_x)>>8,
- (fxo_modes[i].ring_x)&&0xFF
- );
- }
-
- printf("%s)\treg16=%02X; reg26=%02X; reg30=%02X; reg31=%02X%s%s;;\n",
+ if (fxo_modes[i].ring_osc)
+ snprintf(ring_osc, BUFSIZ, "ring_osc=%04X", fxo_modes[i].ring_osc);
+ if (fxo_modes[i].ring_x)
+ snprintf(ring_x, BUFSIZ, "ring_x=%04X", fxo_modes[i].ring_x);
+ printf("%-15s\treg16=%02X\treg26=%02X\treg30=%02X\treg31=%02X\t%s\t%s\n",
fxo_modes[i].name, reg16, reg26, reg30, reg31, ring_osc, ring_x);
}
- printf("esac\n");
return 0;
}
diff --git a/xpp/utils/xpp_blink b/xpp/utils/xpp_blink
index 8a96502..bf68d80 100755
--- a/xpp/utils/xpp_blink
+++ b/xpp/utils/xpp_blink
@@ -17,16 +17,16 @@ use Zaptel::Xpp;
use Zaptel::Xpp::Xbus;
sub usage {
- die "Usage: $0 {on|off|bzzt} {span <number> | xpd <bus num> [<xpd num>] | label <label>}\n";
+ die "Usage: $0 {on|off|bzzt} {span <number> | chan <number> | xpd <bus num> [<xpd num>] | label <label>}\n";
}
my $state = shift;
my $selector = shift;
usage unless defined($state) and $state =~ /^(on|off|bzzt)$/;
-usage unless defined($selector) and $selector =~ /^(span|xpd|label)$/i;
+usage unless defined($selector) and $selector =~ /^(span|chan|xpd|label)$/i;
my $xpd;
-my @xpds;
+my @blinklist;
my @channels;
if($selector =~ /^span$/i) {
@@ -39,13 +39,24 @@ if($selector =~ /^span$/i) {
my $xpdname = $xpd->fqn;
my $connector = $xpd->xbus->connector;
die "$xpdname is not connected\n" unless defined $connector;
- push(@xpds, $xpd);
+ push(@blinklist, $xpd);
my @chans = $span->chans();
@channels = join(' ', map { $_->num } @chans);
printf "Using %s (connected via $connector): channels @channels\n", $xpd->fqn;
+} elsif($selector =~ /^chan$/i) {
+ my $channo = shift;
+ usage unless defined($channo) and $channo =~ /^\d+/;
+ my @spans = Zaptel::spans();
+ my @chans = map { $_->chans() } @spans;
+ my ($chan) = grep { $_->num eq $channo } @chans;
+ die "Channel $channo was not found\n" unless defined $chan;
+ die "Cannot blink Input ports\n" if $chan->type eq 'IN';
+ die "Cannot blink Output ports\n" if $chan->type eq 'OUT';
+ push(@blinklist, $chan);
} elsif($selector =~ /^xpd$/i) {
my $busnum = shift;
my $xpdnum = shift;
+ my $linenum = shift;
usage unless defined($busnum) and $busnum =~ /^\d+/;
my $xbus = Zaptel::Xpp::Xbus::by_number($busnum);
die "Unkown XBUS number $busnum\n" unless defined $xbus;
@@ -53,28 +64,36 @@ if($selector =~ /^span$/i) {
usage unless $xpdnum =~ /^\d+/;
$xpd = $xbus->get_xpd_by_number($xpdnum);
die "Unkown XPD number $xpdnum on XBUS number $busnum\n" unless defined $xpd;
- push(@xpds, $xpd);
+ if(defined $linenum) {
+ usage unless $linenum =~ /^\d+/;
+ my $lines = $xpd->lines;
+ my $l = @{$lines}[$linenum];
+ die "Bad line number $linenum on XPD $xpd->fqn\n" unless defined $l;
+ push(@blinklist, $l);
+ } else {
+ push(@blinklist, $xpd);
+ }
} else {
- @xpds = $xbus->xpds;
- die "XBUS number $busnum has no XPDS!\n" unless @xpds;
+ @blinklist = $xbus->xpds;
+ die "XBUS number $busnum has no XPDS!\n" unless @blinklist;
}
} elsif($selector =~ /^label$/i) {
my $label = shift;
usage unless defined($label);
my $xbus = Zaptel::Xpp::Xbus::by_label($label);
die "Unkown XBUS label $label\n" unless defined $xbus;
- @xpds = $xbus->xpds;
- die "XBUS label '$label' has no XPDS!\n" unless @xpds;
+ @blinklist = $xbus->xpds;
+ die "XBUS label '$label' has no XPDS!\n" unless @blinklist;
}
if($state eq 'on') {
- $_->blink(1) foreach (@xpds);
+ $_->blink(1) foreach (@blinklist);
} elsif($state eq 'off') {
- $_->blink(0) foreach (@xpds);
+ $_->blink(0) foreach (@blinklist);
} elsif($state eq 'bzzt') {
- $_->blink(1) foreach (@xpds);
+ $_->blink(1) foreach (@blinklist);
sleep 1;
- $_->blink(0) foreach (@xpds);
+ $_->blink(0) foreach (@blinklist);
}
__END__
@@ -85,7 +104,7 @@ xpp_blink - Blink the leds of a specified XPD
=head1 SYNOPSIS
-xpp_blink {on|off|bzzt} {span <number> | xpd <bus num> [<xpd num>]}\n";
+xpp_blink {on|off|bzzt} {span <number> | chan <number> | xpd <bus num> [<xpd num> [<lineno>]]}
=head1 DESCRIPTION
@@ -111,6 +130,8 @@ Blink all the leds of an XPD.
will also print the zaptel channels of the span and the
xbus/xpd this span represents.
+=item chan Select by channel number. This only work for XPD registered to zaptel.
+
=item xpd Select by xbus + xpd numbers. If only xbus number is given, all the
XPDs of the selected xbus (Astribank) are blinked.
@@ -123,7 +144,9 @@ Blink all the leds of an XPD.
$ xpp_blink bzzt span 2
Using XBUS-04/XPD-10 (connected via usb-0000:00:1d.7-1): channels 15 16 17 18 19 20 21 22
- $ xpp_blink on xpd 0 1
+ $ xpp_blink bzzt chan 18
+
+ $ xpp_blink on xpd 0 1 5
$ xpp_blink off xpd 0
diff --git a/xpp/utils/xpp_fxloader b/xpp/utils/xpp_fxloader
index 1cbd6b7..5a26560 100644
--- a/xpp/utils/xpp_fxloader
+++ b/xpp/utils/xpp_fxloader
@@ -56,6 +56,8 @@ me=`basename $0`
DEBIAN_DEFAULTS="/etc/default/zaptel"
REDHAT_DEFAULTS="/etc/sysconfig/zaptel"
+status_fd=3
+
if [ -r "$DEBIAN_DEFAULTS" -a -r "$REDHAT_DEFAULTS" ]; then
echo 1>&2 "$0: Both '$DEBIAN_DEFAULTS' and '$REDHAT_DEFAULTS' exist"
exit 1
@@ -143,9 +145,12 @@ load_fpga() {
$LOGGER "FPGA Firmware into $dev"
sleep_if_race
- $FPGA_LOAD -D "$dev" -I "$FIRMWARE_DIR/$fw" -i | $LOGGER
- status=$PIPESTATUS
- if [ $status != 0 ]; then
+ (
+ $FPGA_LOAD -D "$dev" -I "$FIRMWARE_DIR/$fw" -i
+ echo $? >$status_fd
+ )>| $LOGGER
+ status=`cat <$status_fd`
+ if [ "$status" != 0 ]; then
echo "fpga_load failed with status $status" | $LOGGER
exit 77
fi
diff --git a/xpp/utils/xpp_modprobe b/xpp/utils/xpp_modprobe
index 76c1f7d..e3bacc2 100644
--- a/xpp/utils/xpp_modprobe
+++ b/xpp/utils/xpp_modprobe
@@ -1,10 +1,10 @@
# Some debugging options for the brave of heart:
#options zaptel debug=1
#options wcfxo debug=1
-#options xpp print_dbg=1
-#options xpp_usb print_dbg=1
-#options xpd_fxs print_dbg=1
-#options xpd_fxo print_dbg=1
+#options xpp debug=1
+#options xpp_usb debug=1
+#options xpd_fxs debug=1
+#options xpd_fxo debug=1
# For pre-loading of card modules (e.g: xpp_fxs)
#install xpp_usb /sbin/modprobe xpd_fxs && /sbin/modprobe --ignore-install xpp_usb
diff --git a/xpp/utils/zconf/Zaptel/Chans.pm b/xpp/utils/zconf/Zaptel/Chans.pm
index b02bf24..6f83f77 100644
--- a/xpp/utils/zconf/Zaptel/Chans.pm
+++ b/xpp/utils/zconf/Zaptel/Chans.pm
@@ -184,4 +184,19 @@ sub battery($) {
return $line->battery;
}
+sub blink($$) {
+ my $self = shift or die;
+ my $on = shift;
+ my $span = $self->span or die;
+
+ my $xpd = $span->xpd;
+ my $index = $self->index;
+ return undef if !$xpd;
+
+ my @lines = @{$xpd->lines};
+ my $line = $lines[$index];
+ return $line->blink($on);
+}
+
+
1;
diff --git a/xpp/utils/zconf/Zaptel/Xpp/Line.pm b/xpp/utils/zconf/Zaptel/Xpp/Line.pm
index 0014aed..2472c3b 100644
--- a/xpp/utils/zconf/Zaptel/Xpp/Line.pm
+++ b/xpp/utils/zconf/Zaptel/Xpp/Line.pm
@@ -18,12 +18,44 @@ sub new($$$) {
my $index = shift;
defined $index or die;
my $self = {};
- bless $self, ref($xpd);
+ bless $self, $pack;
$self->{XPD} = $xpd;
$self->{INDEX} = $index;
return $self;
}
+sub blink($$) {
+ my $self = shift;
+ my $on = shift;
+ my $xpd = $self->xpd;
+ my $result;
+
+ my $file = "$proc_base/" . $xpd->fqn . "/blink";
+ die "$file is missing" unless -f $file;
+ # First query
+ open(F, "$file") or die "Failed to open $file for reading: $!";
+ $result = <F>;
+ chomp $result;
+ close F;
+ if(defined($on)) { # Now change
+ my $onbitmask = 1 << $self->index;
+ my $offbitmask = $result & ~$onbitmask;
+
+ $result = $offbitmask;
+ $result |= $onbitmask if $on;
+ open(F, ">$file") or die "Failed to open $file for writing: $!";
+ print F "$result";
+ if(!close(F)) {
+ if($! == 17) { # EEXISTS
+ # good
+ } else {
+ undef $result;
+ }
+ }
+ }
+ return $result;
+}
+
sub create_all($$) {
my $pack = shift or die "Wasn't called as a class method\n";
my $xpd = shift || die;
diff --git a/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm b/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
index a5fcf1e..e840f14 100644
--- a/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
+++ b/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
@@ -41,7 +41,8 @@ sub get_xpd_by_number($$) {
my $xpdid = shift;
die "Missing XPD id parameter" unless defined $xpdid;
my @xpds = $xbus->xpds;
- return $xpds[$xpdid];
+ my ($wanted) = grep { $_->id eq $xpdid } @xpds;
+ return $wanted;
}
sub new($$) {
diff --git a/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm b/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
index 326aafd..1ddb5c8 100644
--- a/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
+++ b/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
@@ -28,7 +28,7 @@ sub blink($$) {
close F;
if(defined($on) and $on ne $result) { # Now change
open(F, ">$file") or die "Failed to open $file for writing: $!";
- print F ($on)?"1":"0";
+ print F ($on)?"0xFFFF":"0";
if(!close(F)) {
if($! == 17) { # EEXISTS
# good
diff --git a/xpp/xbus-core.c b/xpp/xbus-core.c
index 385f542..26c31f5 100644
--- a/xpp/xbus-core.c
+++ b/xpp/xbus-core.c
@@ -38,6 +38,7 @@
#include "xpd.h"
#include "xpp_zap.h"
#include "xbus-core.h"
+#include "card_global.h"
#ifdef XPP_DEBUGFS
#include "xpp_log.h"
#endif
@@ -46,7 +47,7 @@
static const char rcsid[] = "$Id$";
/* Defines */
-#define INITIALIZATION_TIMEOUT (60*HZ) /* in jiffies */
+#define INITIALIZATION_TIMEOUT (90*HZ) /* in jiffies */
#define PROC_XBUSES "xbuses"
#define PROC_XBUS_SUMMARY "summary"
#define PROC_XBUS_WAITFOR_XPDS "waitfor_xpds"
@@ -57,37 +58,15 @@ static int proc_xbus_command_write(struct file *file, const char __user *buffer,
#endif
/* Command line parameters */
-extern int print_dbg;
-DEF_PARM(uint, poll_timeout, 1000, 0644, "Timeout (in jiffies) waiting for units to reply");
-DEF_PARM_BOOL(rx_tasklet, 0, 0644, "Use receive tasklets");
+extern int debug;
+static DEF_PARM(uint, poll_timeout, 1000, 0644, "Timeout (in jiffies) waiting for units to reply");
+static DEF_PARM_BOOL(rx_tasklet, 0, 0644, "Use receive tasklets");
static int xbus_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data);
static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count, int *eof, void *data);
static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_size, void *priv);
static void transport_destroy(xbus_t *xbus);
-/*
- * Encapsulate all poll related data of a single xbus.
- */
-struct xbus_poller {
- /*
- * Bus scanning
- */
- uint xbus_num;
- struct workqueue_struct *wq;
- bool is_polling;
- atomic_t count_poll_answers;
- struct list_head poll_results;
- wait_queue_head_t wait_for_polls;
-
- struct work_struct xpds_init_work;
-
- atomic_t count_xpds_to_initialize;
- atomic_t count_xpds_initialized;
- wait_queue_head_t wait_for_xpd_initialization;
- struct proc_dir_entry *proc_xbus_waitfor_xpds;
-};
-
/* Data structures */
static spinlock_t xbuses_lock = SPIN_LOCK_UNLOCKED;
static int bus_count = 0;
@@ -110,7 +89,7 @@ static void init_xbus(uint num, xbus_t *xbus)
init_waitqueue_head(&desc->can_release_xbus);
}
-int refcount_xbus(uint num)
+static int refcount_xbus(uint num)
{
BUG_ON(num >= ARRAY_SIZE(xbuses_array));
return atomic_read(&xbuses_array[num].xbus_refcount);
@@ -149,7 +128,7 @@ void put_xbus(xbus_t *xbus)
}
}
-bool __must_check wait_for_xbus_release(uint xbus_num)
+static bool __must_check wait_for_xbus_release(uint xbus_num)
{
xbus_t *xbus;
int ret;
@@ -383,13 +362,13 @@ static spinlock_t serialize_dump_xframe = SPIN_LOCK_UNLOCKED;
static void do_hexdump(const char msg[], byte *data, uint16_t len)
{
int i;
- int print_dbg = DBG_ANY; /* mask global print_dbg */
+ int debug = DBG_ANY; /* mask global debug */
for(i = 0; i < len; i++)
DBG(ANY, "%s: %3d> %02X\n", msg, i, data[i]);
}
-void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, int print_dbg)
+void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, int debug)
{
const uint16_t frm_len = XFRAME_LEN(xframe);
xpacket_t *pack;
@@ -441,12 +420,12 @@ void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, i
break;
}
do_print = 0;
- if(print_dbg == DBG_ANY)
+ if(debug == DBG_ANY)
do_print = 1;
else if(XPACKET_OP(pack) != XPROTO_NAME(GLOBAL,PCM_READ) &&
XPACKET_OP(pack) != XPROTO_NAME(GLOBAL,PCM_WRITE))
do_print = 1;
- else if(print_dbg & DBG_PCM) {
+ else if(debug & DBG_PCM) {
static int rate_limit;
if((rate_limit++ % 1003) == 0)
@@ -466,7 +445,7 @@ void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, i
XPACKET_OP(pack),
XPACKET_ADDR_UNIT(pack), XPACKET_ADDR_SUBUNIT(pack),
pos);
- dump_packet(" ", pack, print_dbg);
+ dump_packet(" ", pack, debug);
}
num++;
pos = nextpos;
@@ -476,7 +455,7 @@ void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, i
spin_unlock_irqrestore(&serialize_dump_xframe, flags);
}
-bool xbus_ready(const xbus_t *xbus, const char msg[])
+static bool xbus_ready(const xbus_t *xbus, const char msg[])
{
if(!xbus) {
ERR("null xbus: %s\n", msg);
@@ -536,6 +515,8 @@ static int really_send_cmd_frame(xbus_t *xbus, xframe_t *xframe)
}
ops = transportops_get(xbus);
BUG_ON(!ops);
+ if(debug & DBG_COMMANDS)
+ dump_xframe("TX-CMD", xbus, xframe, DBG_ANY);
ret = ops->xframe_send_cmd(xbus, xframe);
transportops_put(xbus);
if(ret == 0) {
@@ -752,159 +733,169 @@ out:
}
/*
- * This must be called from synchronous (non-interrupt) context
- * it returns only when all XPD's on the bus are detected and
- * initialized.
+ * Called with xbus->worker locked.
*/
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-static void xbus_poll(struct work_struct *work)
-{
- struct xbus_poller *poller = container_of(work, struct xbus_poller, xpds_init_work);
-#else
-static void xbus_poll(void *data)
+static int new_card(xbus_t *xbus,
+ int unit,
+ byte type,
+ byte subtype,
+ byte numchips,
+ byte ports_per_chip,
+ byte ports,
+ byte port_dir)
{
- struct xbus_poller *poller = data;
-#endif
- int id;
+ const xproto_table_t *proto_table;
+ const xops_t *xops;
+ int i;
+ int subunits;
int ret = 0;
- unsigned long flags;
- struct list_head *card;
- struct list_head *next_card;
- struct list_head removal_list;
- struct list_head additions_list;
- int count_removed;
- int count_added;
- xbus_t *xbus;
- BUG_ON(!poller);
- xbus = get_xbus(poller->xbus_num);
- if(!xbus) {
- XBUS_ERR(xbus, "Aborting poll. XBUS #%d disappeared.\n",
- poller->xbus_num);
- return;
- }
- msleep(2); /* roundtrip for older polls */
- spin_lock_irqsave(&xbus->lock, flags);
- XBUS_DBG(DEVICES, xbus, "\n");
- poller->is_polling = 1;
- if(!XBUS_GET(xbus)) {
- XBUS_ERR(xbus, "Aborting poll. Is shutting down.\n");
- goto out; /* FIXME: should not XBUS_PUT() in that case */
- }
- /*
- * Send out the polls
- */
- for(id = 0; id < MAX_XPDS; id++) {
- if(!TRANSPORT_RUNNING(xbus))
- break;
- XBUS_DBG(DEVICES, xbus, "Polling slot %d\n", id);
- spin_unlock_irqrestore(&xbus->lock, flags);
- ret = CALL_PROTO(GLOBAL, DESC_REQ, xbus, NULL, id);
- spin_lock_irqsave(&xbus->lock, flags);
+ proto_table = xproto_get(type);
+ if(!proto_table) {
+ XBUS_NOTICE(xbus,
+ "CARD %d: missing protocol table for type %d. Ignored.\n",
+ unit, type);
+ return -EINVAL;
+ }
+ subunits = (ports + proto_table->ports_per_subunit - 1) /
+ proto_table->ports_per_subunit;
+ XBUS_DBG(DEVICES, xbus, "CARD %d type=%d.%d ports=%d (%dx%d), %d subunits, port-dir=0x%02X\n",
+ unit,
+ type,
+ subtype,
+ ports,
+ numchips,
+ ports_per_chip,
+ subunits,
+ port_dir
+ );
+ xops = &proto_table->xops;
+ BUG_ON(!xops);
+ xbus->worker->num_units += subunits - 1;
+ for(i = 0; i < subunits; i++) {
+ if(!TRANSPORT_RUNNING(xbus)) {
+ ret = -ENODEV;
+ goto out;
+ }
+ XBUS_DBG(DEVICES, xbus, "Creating XPD=%d%d type=%d.%d\n",
+ unit,
+ i,
+ type,
+ subtype);
+ if(!XBUS_GET(xbus)) {
+ XBUS_ERR(xbus, "Aborting creation. Is shutting down.\n");
+ ret = -ENODEV;
+ goto out;
+ }
+ ret = create_xpd(xbus, proto_table, unit, i, type, subtype, subunits, port_dir);
+ XBUS_PUT(xbus);
if(ret < 0) {
- XBUS_ERR(xbus, "Failed sending DESC_REQ to XPD #%d\n", id);
+ XBUS_ERR(xbus, "Creation of XPD=%d%d failed %d\n",
+ unit, i, ret);
goto out;
}
+ xbus->worker->num_units_initialized++;
}
- spin_unlock_irqrestore(&xbus->lock, flags);
- /*
- * Wait for replies
- */
- XBUS_DBG(DEVICES, xbus, "Polled %d XPD's. Waiting for replies max %d jiffies\n", MAX_XPDS, poll_timeout);
- ret = wait_event_interruptible_timeout(poller->wait_for_polls, atomic_read(&poller->count_poll_answers) >= MAX_XPDS, poll_timeout);
- if(ret == 0) {
- XBUS_ERR(xbus, "Poll timeout. Continuing anyway.\n");
- /*
- * Continue processing. Maybe some units did reply.
- */
- } else if(ret < 0) {
- XBUS_ERR(xbus, "Poll interrupted %d\n", ret);
- goto out;
- } else
- XBUS_DBG(DEVICES, xbus, "Poll finished in %d jiffies.\n", poll_timeout - ret);
- /*
- * Build removals/additions lists
- */
- spin_lock_irqsave(&xbus->lock, flags);
- INIT_LIST_HEAD(&removal_list);
- INIT_LIST_HEAD(&additions_list);
- count_removed = 0;
- count_added = 0;
- list_for_each_safe(card, next_card, &poller->poll_results) {
- struct card_desc_struct *card_desc = list_entry(card, struct card_desc_struct, card_list);
- byte type = card_desc->type;
- xpd_t *xpd;
+out:
+ xproto_put(proto_table); /* ref count is inside the xpds now */
+ return ret;
+}
- BUG_ON(card_desc->magic != CARD_DESC_MAGIC);
- /*
- * Return the refcount we got in xbus_poller_notify()
- * We are still protected by the refcount taken in
- * the beginning of xbus_poll().
- */
- put_xbus(xbus);
- xpd = xpd_byaddr(xbus, card_desc->xpd_addr.unit, card_desc->xpd_addr.subunit);
-
- if(xpd && type == XPD_TYPE_NOMODULE) { /* card removal */
- list_move_tail(card, &removal_list);
- count_removed++;
- } else if(!xpd && type != XPD_TYPE_NOMODULE) { /* card detection */
- if(card_desc->rev != XPP_PROTOCOL_VERSION) {
- XBUS_NOTICE(xbus, "XPD at %d%d: type=%d.%d has bad firmware revision %d.%d\n",
- card_desc->xpd_addr.unit, card_desc->xpd_addr.subunit,
- card_desc->type, card_desc->subtype,
- card_desc->rev / 10, card_desc->rev % 10);
- list_del(card);
- kfree(card_desc);
+static int xbus_initialize(xbus_t *xbus)
+{
+ int unit;
+ int subunit;
+ xpd_t *xpd;
+
+ for(unit = 0; unit < MAX_UNIT; unit++) {
+ xpd = xpd_byaddr(xbus, unit, 0);
+ if(!xpd)
+ continue;
+ if(run_initialize_registers(xpd) < 0) {
+ XPD_ERR(xpd, "Register Initialization failed\n");
+ goto err;
+ }
+ for(subunit = 0; subunit < MAX_SUBUNIT; subunit++) {
+ xpd = xpd_byaddr(xbus, unit, subunit);
+ if(!xpd)
continue;
+ if(CALL_XMETHOD(card_init, xpd->xbus, xpd) < 0) {
+ XPD_ERR(xpd, "Card Initialization failed\n");
+ goto err;
}
- XBUS_INFO(xbus, "Detected XPD at %d%d type=%d.%d Revision %d.%d\n",
- card_desc->xpd_addr.unit, card_desc->xpd_addr.subunit,
- card_desc->type, card_desc->subtype,
- card_desc->rev / 10, card_desc->rev % 10);
- list_move_tail(card, &additions_list);
- count_added++;
- } else { /* same same */
- list_del(card);
- kfree(card_desc);
+ //CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 0); /* Turn off all channels */
+ xpd->card_present = 1;
+ CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 1); /* Turn on all channels */
+ XPD_INFO(xpd, "Initialized: %s\n", xpd->type_name);
+ xpd_post_init(xpd);
}
}
- poller->is_polling = 0;
- /*
- * We set this *after* poll is finished, so wait_for_xpd_initialization can
- * tell we already know how many units we have.
- */
- atomic_set(&poller->count_xpds_to_initialize, count_added);
- spin_unlock_irqrestore(&xbus->lock, flags);
- XBUS_INFO(xbus, "Poll results: removals=%d additions=%d\n", count_removed, count_added);
- /*
- * Process removals first
- */
- list_for_each_safe(card, next_card, &removal_list) {
- struct card_desc_struct *card_desc = list_entry(card, struct card_desc_struct, card_list);
- xpd_t *xpd;
+ return 0;
+err:
+ for(unit = 0; unit < MAX_UNIT; unit++) {
+ for(subunit = 0; subunit < MAX_SUBUNIT; subunit++) {
+ xpd = xpd_byaddr(xbus, unit, subunit);
+ if(!xpd)
+ xpd_free(xpd);
+ }
+ }
+ return -EINVAL;
+}
- list_del(card);
- xpd = xpd_byaddr(xbus, card_desc->xpd_addr.unit, card_desc->xpd_addr.subunit);
- if(xpd)
- xpd_disconnect(xpd);
- kfree(card);
+/*
+ * This must be called from synchronous (non-interrupt) context
+ * it returns only when all XPD's on the bus are detected and
+ * initialized.
+ */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+void xbus_populate(struct work_struct *work)
+{
+ struct xbus_workqueue *worker = container_of(work, struct xbus_workqueue, xpds_init_work);
+#else
+void xbus_populate(void *data)
+{
+ struct xbus_workqueue *worker = data;
+#endif
+ xbus_t *xbus;
+ struct list_head *card;
+ struct list_head *next_card;
+ unsigned long flags;
+ int ret = 0;
+
+ xbus = worker->xbus;
+ if(!XBUS_GET(xbus)) {
+ XBUS_NOTICE(xbus, "Shutting down, aboring initialization\n");
+ return;
}
- /*
- * Now process additions
- */
- list_for_each_safe(card, next_card, &additions_list) {
+ spin_lock_irqsave(&worker->worker_lock, flags);
+ list_for_each_safe(card, next_card, &worker->card_list) {
struct card_desc_struct *card_desc = list_entry(card, struct card_desc_struct, card_list);
list_del(card);
- /* FIXME: card_detected() should have a return value for count_xpds_initialized */
- card_detected(card_desc);
- atomic_inc(&poller->count_xpds_initialized);
+ BUG_ON(card_desc->magic != CARD_DESC_MAGIC);
+ /* Release/Reacquire locks around blocking calls */
+ spin_unlock_irqrestore(&xbus->worker->worker_lock, flags);
+ ret = new_card(xbus,
+ card_desc->xpd_addr.unit,
+ card_desc->type,
+ card_desc->subtype,
+ card_desc->numchips,
+ card_desc->ports_per_chip,
+ card_desc->ports,
+ card_desc->port_dir);
+ spin_lock_irqsave(&xbus->worker->worker_lock, flags);
+ KZFREE(card_desc);
+ if(ret)
+ break;
}
- /* Device-Model */
- if((ret = xbus_sysfs_create(xbus)) < 0) {
- XBUS_ERR(xbus, "%s: xbus_sysfs_create() failed: %d\n", __FUNCTION__, ret);
- goto out;
+ spin_unlock_irqrestore(&worker->worker_lock, flags);
+ xbus_initialize(xbus);
+ worker->xpds_init_done = 1;
+ ret = xbus_sysfs_create(xbus);
+ if(ret) {
+ XBUS_ERR(xbus, "SYSFS creation failed: %d\n", ret);
}
+ wake_up(&worker->wait_for_xpd_initialization);
/*
* Now request Astribank to start self_ticking.
* This is the last initialization command. So
@@ -912,164 +903,107 @@ static void xbus_poll(void *data)
*/
xbus_request_sync(xbus, SYNC_MODE_PLL);
elect_syncer("xbus_poll(end)"); /* FIXME: try to do it later */
-out:
- poller->is_polling = 0; /* just for safety */
+ put_xbus(xbus); /* taken in AB_DESCRIPTION */
XBUS_PUT(xbus);
- wake_up(&poller->wait_for_xpd_initialization);
- put_xbus(xbus);
- return;
}
-void xbus_poller_notify(xbus_t *xbus, struct card_desc_struct *card_desc)
+static void worker_destroy(struct xbus_workqueue *worker)
{
- struct xbus_poller *poller;
+ xbus_t *xbus;
+ struct list_head *card;
+ struct list_head *next_card;
unsigned long flags;
- BUG_ON(!xbus);
- poller = xbus->poller;
- BUG_ON(!poller);
- if(!poller->is_polling) {
- XBUS_NOTICE(xbus, "%d%d replied not during poll. Ignore\n",
- card_desc->xpd_addr.unit,
- card_desc->xpd_addr.subunit);
- kfree(card_desc);
+ if(!worker)
return;
- }
- spin_lock_irqsave(&xbus->lock, flags);
- if(card_desc->type == XPD_TYPE_NOMODULE)
- XBUS_COUNTER(xbus, DEV_DESC_EMPTY)++;
- else
- XBUS_COUNTER(xbus, DEV_DESC_FULL)++;
- atomic_inc(&poller->count_poll_answers);
- list_add_tail(&card_desc->card_list, &poller->poll_results);
- spin_unlock_irqrestore(&xbus->lock, flags);
- /*
- * Reference counting for the xbus.
- * Would be returned in xbus_poll()
- */
- xbus = get_xbus(xbus->num);
- BUG_ON(!xbus);
- /*
- * wake_up only after exiting our critical section.
- * We suspect that otherwise a spinlock nesting may occur
- * and cause a panic (if spinlock debugging is compiled in).
- */
- wake_up(&poller->wait_for_polls);
- return;
-}
-
-static void poller_destroy(struct xbus_poller *poller)
-{
- xbus_t *xbus;
+ spin_lock_irqsave(&worker->worker_lock, flags);
+ xbus = worker->xbus;
+ list_for_each_safe(card, next_card, &worker->card_list) {
+ struct card_desc_struct *card_desc = list_entry(card, struct card_desc_struct, card_list);
- if(!poller)
- return;
- xbus = get_xbus(poller->xbus_num);
+ BUG_ON(card_desc->magic != CARD_DESC_MAGIC);
+ list_del(card);
+ kfree(card_desc);
+ }
+ spin_unlock_irqrestore(&worker->worker_lock, flags);
if(xbus) {
#ifdef CONFIG_PROC_FS
- if(xbus->proc_xbus_dir && poller->proc_xbus_waitfor_xpds) {
+ if(xbus->proc_xbus_dir && worker->proc_xbus_waitfor_xpds) {
XBUS_DBG(PROC, xbus, "Removing proc '%s'\n", PROC_XBUS_WAITFOR_XPDS);
remove_proc_entry(PROC_XBUS_WAITFOR_XPDS, xbus->proc_xbus_dir);
- poller->proc_xbus_waitfor_xpds = NULL;
+ worker->proc_xbus_waitfor_xpds = NULL;
}
#endif
- XBUS_DBG(DEVICES, xbus, "detach poller\n");
- xbus->poller = NULL;
+ XBUS_DBG(DEVICES, xbus, "detach worker\n");
+ xbus->worker = NULL;
}
- if (poller->wq) {
- DBG(DEVICES, "XBUS #%d: destroy workqueue\n", poller->xbus_num);
- flush_workqueue(poller->wq);
- destroy_workqueue(poller->wq);
- poller->wq = NULL;
+ if (worker->wq) {
+ DBG(DEVICES, "XBUS #%d: destroy workqueue\n", worker->xbus->num);
+ flush_workqueue(worker->wq);
+ destroy_workqueue(worker->wq);
+ worker->wq = NULL;
}
- put_xbus(xbus);
- KZFREE(poller);
+ put_xbus(xbus); /* Taken in worker_new() */
+ KZFREE(worker);
}
/*
- * Allocate a poller for the xbus including the nessessary workqueue.
+ * Allocate a worker for the xbus including the nessessary workqueue.
* May call blocking operations, but only briefly (as we are called
* from xbus_new() which is called from khubd.
*/
-static struct xbus_poller *poller_new(xbus_t *xbus)
+static struct xbus_workqueue *worker_new(int xbus_num)
{
- struct xbus_poller *poller;
+ struct xbus_workqueue *worker;
+ xbus_t *xbus;
+ xbus = get_xbus(xbus_num); /* release in worker_destroy */
BUG_ON(xbus->busname[0] == '\0'); /* No name? */
- BUG_ON(xbus->poller); /* Hmmm... overrun pollers? */
+ BUG_ON(xbus->worker != NULL); /* Hmmm... nested workers? */
XBUS_DBG(DEVICES, xbus, "\n");
- poller = KZALLOC(sizeof(*poller), GFP_KERNEL);
- if(!poller)
+ worker = KZALLOC(sizeof(*worker), GFP_KERNEL);
+ if(!worker)
goto err;
- poller->xbus_num = xbus->num;
- xbus->poller = poller;
+ worker->xbus = xbus;
/* poll related variables */
- atomic_set(&poller->count_poll_answers, 0);
- atomic_set(&poller->count_xpds_to_initialize, 0);
- atomic_set(&poller->count_xpds_initialized, 0);
- INIT_LIST_HEAD(&poller->poll_results);
- init_waitqueue_head(&poller->wait_for_polls);
- init_waitqueue_head(&poller->wait_for_xpd_initialization);
- poller->wq = create_singlethread_workqueue(xbus->busname);
- if(!poller->wq) {
- XBUS_ERR(xbus, "Failed to create poller workqueue.\n");
+ spin_lock_init(&worker->worker_lock);
+ INIT_LIST_HEAD(&worker->card_list);
+ init_waitqueue_head(&worker->wait_for_xpd_initialization);
+ worker->wq = create_singlethread_workqueue(xbus->busname);
+ if(!worker->wq) {
+ XBUS_ERR(xbus, "Failed to create worker workqueue.\n");
goto err;
}
#ifdef CONFIG_PROC_FS
if(xbus->proc_xbus_dir) {
- poller->proc_xbus_waitfor_xpds = create_proc_read_entry(
+ worker->proc_xbus_waitfor_xpds = create_proc_read_entry(
PROC_XBUS_WAITFOR_XPDS, 0444,
xbus->proc_xbus_dir,
xbus_read_waitfor_xpds,
xbus);
- if (!poller->proc_xbus_waitfor_xpds) {
+ if (!worker->proc_xbus_waitfor_xpds) {
XBUS_ERR(xbus, "Failed to create proc file '%s'\n", PROC_XBUS_WAITFOR_XPDS);
goto err;
}
- poller->proc_xbus_waitfor_xpds->owner = THIS_MODULE;
+ worker->proc_xbus_waitfor_xpds->owner = THIS_MODULE;
}
#endif
- return poller;
+ return worker;
err:
- poller_destroy(poller);
+ worker_destroy(worker);
return NULL;
}
-/*
- * Sends an xbus_poll() work to the poller workqueue of the given xbus.
- */
-static int poller_dispatch(xbus_t *xbus)
-{
- struct xbus_poller *poller = xbus->poller;
-
- if(!poller) {
- XBUS_ERR(xbus, "missing poller\n");
- return 0;
- }
- /* Initialize the work. (adapt to kernel API changes). */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
- INIT_WORK(&poller->xpds_init_work, xbus_poll);
-#else
- INIT_WORK(&poller->xpds_init_work, xbus_poll, poller);
-#endif
- /* Now send it */
- if(!queue_work(poller->wq, &poller->xpds_init_work)) {
- XBUS_ERR(xbus, "Failed to queue xpd initialization work\n");
- return 0;
- }
- return 1;
-}
-
int xbus_activate(xbus_t *xbus)
{
struct xbus_ops *ops;
- struct xbus_poller *poller;
+ struct xbus_workqueue *worker;
BUG_ON(!xbus);
ops = transportops_get(xbus);
BUG_ON(!ops);
- poller = xbus->poller;
- BUG_ON(!poller);
+ worker = xbus->worker;
+ BUG_ON(!worker);
/* Sanity checks */
BUG_ON(!ops->xframe_send_pcm);
BUG_ON(!ops->xframe_send_cmd);
@@ -1086,8 +1020,7 @@ int xbus_activate(xbus_t *xbus)
* Make sure Astribank knows not to send us ticks.
*/
xbus_request_sync(xbus, SYNC_MODE_NONE);
- /* Poll it */
- poller_dispatch(xbus);
+ CALL_PROTO(GLOBAL, AB_REQUEST, xbus, NULL);
return 0;
}
@@ -1099,6 +1032,7 @@ void xbus_disconnect(xbus_t *xbus)
XBUS_INFO(xbus, "[%s] Disconnecting\n", xbus->label);
xbus_set_command_timer(xbus, 1);
xbus_request_sync(xbus, SYNC_MODE_NONE); /* no more ticks */
+ xbus_sysfs_remove(xbus); /* Device-Model */
for(i = 0; i < MAX_XPDS; i++) {
xpd_t *xpd = xpd_of(xbus, i);
if(!xpd)
@@ -1146,13 +1080,15 @@ static xbus_t *xbus_alloc(void)
if(i >= MAX_BUSES) {
ERR("%s: No free slot for new bus. i=%d\n", __FUNCTION__, i);
kfree(xbus);
- return NULL;
+ xbus = NULL;
+ goto out;
}
/* Found empty slot */
xbus->num = i;
init_xbus(i, xbus);
xbus = get_xbus(i);
bus_count++;
+out:
spin_unlock_irqrestore(&xbuses_lock, flags);
return xbus;
}
@@ -1180,7 +1116,6 @@ static void xbus_free(xbus_t *xbus)
debugfs_remove(xbus->debugfs_dir);
}
#endif
- poller_destroy(xbus->poller);
#ifdef CONFIG_PROC_FS
if(xbus->proc_xbus_dir) {
if(xbus->proc_xbus_summary) {
@@ -1222,7 +1157,6 @@ xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, void *priv)
{
int err;
xbus_t *xbus = NULL;
- struct xbus_poller *poller;
BUG_ON(!ops);
XBUS_DBG(GENERAL, xbus, "allocate new xbus\n");
@@ -1285,21 +1219,20 @@ xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, void *priv)
goto nobus;
}
#endif
- xframe_queue_init(&xbus->command_queue, 10, 200, "command_queue", xbus);
+ xframe_queue_init(&xbus->command_queue, 10, 100, "command_queue", xbus);
xframe_queue_init(&xbus->receive_queue, 10, 50, "receive_queue", xbus);
xframe_queue_init(&xbus->send_pool, 10, 200, "send_pool", xbus);
xframe_queue_init(&xbus->receive_pool, 10, 50, "receive_pool", xbus);
xframe_queue_init(&xbus->pcm_tospan, 5, 10, "pcm_tospan", xbus);
tasklet_init(&xbus->receive_tasklet, receive_tasklet_func, (unsigned long)xbus);
/*
- * Create poller after /proc/XBUS-?? so the directory exists
+ * Create worker after /proc/XBUS-?? so the directory exists
* before /proc/XBUS-??/waitfor_xpds tries to get created.
*/
- poller = poller_new(xbus);
- if(!poller) {
- ERR("Failed to allocate poller\n");
- xbus_free(xbus);
- return NULL;
+ xbus->worker = worker_new(xbus->num);
+ if(!xbus->worker) {
+ ERR("Failed to allocate worker\n");
+ goto nobus;
}
return xbus;
nobus:
@@ -1315,7 +1248,6 @@ void xbus_remove(xbus_t *xbus)
down_write(&xbus->in_use);
XBUS_INFO(xbus, "[%s] Removing\n", xbus->label);
- xbus_sysfs_remove(xbus); /* Device-Model */
for(i = 0; i < MAX_XPDS; i++) {
xpd_t *xpd = xpd_of(xbus, i);
@@ -1329,6 +1261,7 @@ void xbus_remove(xbus_t *xbus)
}
xbus->xpds[i] = NULL;
}
+ worker_destroy(xbus->worker);
xbus_free(xbus);
}
@@ -1367,7 +1300,7 @@ static int xbus_fill_proc_queue(char *p, struct xframe_queue *q)
static int xbus_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data)
{
xbus_t *xbus;
- struct xbus_poller *poller;
+ struct xbus_workqueue *worker;
unsigned long flags;
int len = 0;
int i = (int)((unsigned long)data);
@@ -1376,7 +1309,7 @@ static int xbus_read_proc(char *page, char **start, off_t off, int count, int *e
if(!xbus)
goto out;
spin_lock_irqsave(&xbus->lock, flags);
- poller = xbus->poller;
+ worker = xbus->worker;
len += sprintf(page + len, "%s: CONNECTOR=%s LABEL=[%s] STATUS=%s\n",
xbus->busname,
@@ -1384,11 +1317,6 @@ static int xbus_read_proc(char *page, char **start, off_t off, int count, int *e
xbus->label,
(TRANSPORT_RUNNING(xbus)) ? "connected" : "missing"
);
- len += sprintf(page + len, "POLLS: %d/%d\n",
- atomic_read(&poller->count_poll_answers), MAX_XPDS);
- len += sprintf(page + len, "XPDS_READY: %d/%d\n",
- atomic_read(&poller->count_xpds_initialized),
- atomic_read(&poller->count_xpds_to_initialize));
len += sprintf(page + len, "\nxbus_ref_count=%d\n",
atomic_read(&xbus->xbus_ref_count)
);
@@ -1449,7 +1377,7 @@ static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count
int len = 0;
unsigned long flags;
xbus_t *xbus = data;
- struct xbus_poller *poller;
+ struct xbus_workqueue *worker;
int ret;
if(!xbus)
@@ -1458,30 +1386,28 @@ static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count
if(!count || off)
goto out;
/*
- * poller is created before /proc/XBUS-??
+ * worker is created before /proc/XBUS-??
* So by now it exists and initialized.
*/
- poller = xbus->poller;
- BUG_ON(!poller);
+ worker = xbus->worker;
+ BUG_ON(!worker);
XBUS_DBG(DEVICES, xbus,
"Waiting for card initialization of %d XPD's max %d seconds\n",
- atomic_read(&poller->count_xpds_to_initialize), INITIALIZATION_TIMEOUT/HZ);
+ worker->num_units,
+ INITIALIZATION_TIMEOUT/HZ);
/*
* when polling is finished xbus_poll():
- * - Unset poller->is_polling
- * - Sets poller->count_xpds_to_initialize.
+ * - Unset worker->is_polling
+ * - Sets worker->count_xpds_to_initialize.
* So we wait until polling is finished (is_polling == 0) and:
* - No poll answers from Astribank (e.g: defective firmware).
* - Or no units to initialize (e.g: mini-AB with only main card).
* - Or we finished initializing all existing units.
* - Or A timeout passed.
*/
- ret = wait_event_interruptible_timeout(poller->wait_for_xpd_initialization,
- !poller->is_polling && (
- atomic_read(&poller->count_poll_answers) == 0 ||
- atomic_read(&poller->count_xpds_to_initialize) == 0 ||
- atomic_read(&poller->count_xpds_initialized) >=
- atomic_read(&poller->count_xpds_to_initialize)),
+ ret = wait_event_interruptible_timeout(
+ worker->wait_for_xpd_initialization,
+ worker->xpds_init_done,
INITIALIZATION_TIMEOUT);
if(ret == 0) {
XBUS_ERR(xbus, "Card Initialization Timeout\n");
@@ -1492,13 +1418,12 @@ static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count
} else
XBUS_DBG(DEVICES, xbus,
"Finished initialization of %d XPD's in %d seconds.\n",
- atomic_read(&poller->count_xpds_initialized),
+ worker->num_units_initialized,
(INITIALIZATION_TIMEOUT - ret)/HZ);
spin_lock_irqsave(&xbus->lock, flags);
len += sprintf(page + len, "XPDS_READY: %s: %d/%d\n",
xbus->busname,
- atomic_read(&poller->count_xpds_initialized),
- atomic_read(&poller->count_xpds_to_initialize));
+ worker->num_units_initialized, worker->num_units);
spin_unlock_irqrestore(&xbus->lock, flags);
out:
if (len <= off+count)
@@ -1584,7 +1509,7 @@ static int proc_xbus_command_write(struct file *file, const char __user *buffer,
len = max_len;
atomic_set(&xframe->frame_len, len);
memcpy(xframe->packets, pack_start, len); /* FIXME: checksum? */
- dump_xframe("COMMAND", xbus, xframe, print_dbg);
+ dump_xframe("COMMAND", xbus, xframe, debug);
send_cmd_frame(xbus, xframe);
out:
kfree(buf);
@@ -1647,7 +1572,7 @@ static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_s
init_waitqueue_head(&xbus->transport.transport_unused);
}
-void transport_destroy(xbus_t *xbus)
+static void transport_destroy(xbus_t *xbus)
{
int ret;
@@ -1777,7 +1702,6 @@ EXPORT_SYMBOL(send_cmd_frame);
EXPORT_SYMBOL(xframe_init);
EXPORT_SYMBOL(transportops_get);
EXPORT_SYMBOL(transportops_put);
-EXPORT_SYMBOL(xbus_poller_notify);
EXPORT_SYMBOL(xbus_command_queue_tick);
#ifdef XPP_DEBUGFS
EXPORT_SYMBOL(xbus_log);
diff --git a/xpp/xbus-core.h b/xpp/xbus-core.h
index 2ebb3c0..85fac80 100644
--- a/xpp/xbus-core.h
+++ b/xpp/xbus-core.h
@@ -32,7 +32,7 @@
#define XFRAME_DATASIZE 512
/* forward declarations */
-struct xbus_poller;
+struct xbus_workqueue;
#ifdef XPP_DEBUGFS
struct debugfs_data;
#endif
@@ -50,9 +50,7 @@ struct xbus_ops {
* XBUS statistics counters
*/
enum {
- XBUS_N_DESC_REQ,
- XBUS_N_DEV_DESC_FULL,
- XBUS_N_DEV_DESC_EMPTY,
+ XBUS_N_UNITS,
XBUS_N_TX_XFRAME_PCM,
XBUS_N_RX_XFRAME_PCM,
XBUS_N_TX_PACK_PCM,
@@ -72,9 +70,7 @@ enum {
static struct xbus_counters {
char *name;
} xbus_counters[] = {
- C_(DESC_REQ),
- C_(DEV_DESC_FULL),
- C_(DEV_DESC_EMPTY),
+ C_(UNITS),
C_(TX_XFRAME_PCM),
C_(RX_XFRAME_PCM),
C_(TX_PACK_PCM),
@@ -108,6 +104,22 @@ struct xbus_ops *transportops_get(xbus_t *xbus);
void transportops_put(xbus_t *xbus);
/*
+ * Encapsulate all poll related data of a single xbus.
+ */
+struct xbus_workqueue {
+ xbus_t *xbus;
+ struct workqueue_struct *wq;
+ struct work_struct xpds_init_work;
+ bool xpds_init_done;
+ struct list_head card_list;
+ int num_units;
+ int num_units_initialized;
+ wait_queue_head_t wait_for_xpd_initialization;
+ struct proc_dir_entry *proc_xbus_waitfor_xpds;
+ spinlock_t worker_lock;
+};
+
+/*
* Allocate/Free an xframe from pools of empty xframes.
* Calls to {get,put}_xframe are wrapped in
* the macros bellow, so we take/return it
@@ -133,6 +145,7 @@ struct xbus {
/* low-level bus drivers set these 2 fields */
char location[XBUS_DESCLEN];
char label[LABEL_SIZE];
+ byte revision; /* Protocol revision */
struct xbus_transport transport;
int num;
@@ -184,7 +197,7 @@ struct xbus {
int sample_pos;
#endif
- struct xbus_poller *poller;
+ struct xbus_workqueue *worker;
/*
* Sync adjustment
@@ -248,7 +261,7 @@ int xbus_log(xbus_t *xbus, xpd_t *xpd, int direction, const void *buf, unsigned
#endif
/* Frame handling */
-void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, int print_dbg);
+void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, int debug);
int send_cmd_frame(xbus_t *xbus, xframe_t *xframe);
/*
@@ -273,8 +286,12 @@ void xbus_remove(xbus_t *xbus);
int xbus_activate(xbus_t *xbus);
void xbus_disconnect(xbus_t *xbus);
void xbus_receive_xframe(xbus_t *xbus, xframe_t *xframe);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+void xbus_populate(struct work_struct *work);
+#else
+void xbus_populate(void *data);
+#endif
-void xbus_poller_notify(xbus_t *xbus, struct card_desc_struct *card_desc);
int xbus_register_xpd(xbus_t *xbus, xpd_t *xpd);
int xbus_unregister_xpd(xbus_t *xbus, xpd_t *xpd);
diff --git a/xpp/xbus-pcm.c b/xpp/xbus-pcm.c
index b2dad35..6155f35 100644
--- a/xpp/xbus-pcm.c
+++ b/xpp/xbus-pcm.c
@@ -35,21 +35,21 @@
static const char rcsid[] = "$Id$";
-extern int print_dbg;
+extern int debug;
#ifdef XPP_EC_CHUNK
#include "supress/ec_xpp.h"
DEF_PARM_BOOL(xpp_ec, 0, 0444, "Do we use our own (1) or Zaptel's (0) echo canceller");
#endif
#ifdef OPTIMIZE_CHANMUTE
-DEF_PARM_BOOL(optimize_chanmute, 1, 0644, "Optimize by muting inactive channels");
+static DEF_PARM_BOOL(optimize_chanmute, 1, 0644, "Optimize by muting inactive channels");
#endif
-DEF_PARM(int, disable_pcm, 0, 0644, "Disable all PCM transmissions");
+static DEF_PARM(int, disable_pcm, 0, 0644, "Disable all PCM transmissions");
#ifdef DEBUG_PCMTX
DEF_PARM(int, pcmtx, -1, 0644, "Forced PCM value to transmit (negative to disable)");
DEF_PARM(int, pcmtx_chan, 0, 0644, "channel to force PCM value");
#endif
-DEF_PARM_BOOL(disable_pll_sync, 0, 0644, "Disable automatic adjustment of AB clocks");
+static DEF_PARM_BOOL(disable_pll_sync, 0, 0644, "Disable automatic adjustment of AB clocks");
static xbus_t *syncer; /* current syncer */
static atomic_t xpp_tick_counter = ATOMIC_INIT(0);
@@ -263,10 +263,10 @@ static void xpp_drift_step(xbus_t *xbus, const struct timeval *tv)
const char *sync_mode_name(enum sync_mode mode)
{
static const char *sync_mode_names[] = {
- [SYNC_MODE_AB] "AB",
- [SYNC_MODE_NONE] "NONE",
- [SYNC_MODE_PLL] "PLL",
- [SYNC_MODE_QUERY] "QUERY",
+ [SYNC_MODE_AB] = "AB",
+ [SYNC_MODE_NONE] = "NONE",
+ [SYNC_MODE_PLL] = "PLL",
+ [SYNC_MODE_QUERY] = "QUERY",
};
if(mode >= ARRAY_SIZE(sync_mode_names))
return NULL;
@@ -287,7 +287,7 @@ static void xpp_set_syncer(xbus_t *xbus, bool on)
(syncer) ? syncer->busname : "NO-SYNC");
}
-void xbus_command_timer(unsigned long param)
+static void xbus_command_timer(unsigned long param)
{
xbus_t *xbus = (xbus_t *)param;
struct timeval now;
@@ -309,10 +309,8 @@ void xbus_set_command_timer(xbus_t *xbus, bool on)
xbus->command_timer.data = (unsigned long)xbus;
xbus->command_timer.expires = jiffies + 1;
add_timer(&xbus->command_timer);
- xbus->self_ticking = 0;
}
} else if(timer_pending(&xbus->command_timer)) {
- xbus->self_ticking = 1;
XBUS_DBG(SYNC, xbus, "del_timer\n");
del_timer(&xbus->command_timer);
}
@@ -337,18 +335,21 @@ void got_new_syncer(xbus_t *xbus, enum sync_mode mode, int drift)
case SYNC_MODE_AB:
xbus->sync_mode = mode;
xbus_set_command_timer(xbus, 0);
+ xbus->self_ticking = 1;
xpp_set_syncer(xbus, 1);
global_ticker = xbus;
break;
case SYNC_MODE_PLL:
xbus->sync_mode = mode;
xbus_set_command_timer(xbus, 0);
+ xbus->self_ticking = 1;
xpp_set_syncer(xbus, 0);
global_ticker = xbus;
break;
case SYNC_MODE_NONE: /* lost sync source */
xbus->sync_mode = mode;
xbus_set_command_timer(xbus, 1);
+ xbus->self_ticking = 0;
xpp_set_syncer(xbus, 0);
break;
case SYNC_MODE_QUERY: /* ignore */
@@ -377,7 +378,13 @@ static void reset_sync_counters(void)
if(!xbus)
continue;
- if (TRANSPORT_RUNNING(xbus)) {
+ /*
+ * Don't send to non self_ticking Astribanks:
+ * - Maybe they didn't finish initialization
+ * - Or maybe they didn't answer us in the first place
+ (e.g: wrong firmware version, etc).
+ */
+ if (TRANSPORT_RUNNING(xbus) && xbus->self_ticking) {
if(XBUS_GET(xbus)) {
/* Reset sync LEDs once in a while */
CALL_PROTO(GLOBAL, RESET_SYNC_COUNTERS, xbus, NULL);
@@ -581,6 +588,7 @@ void __pcm_recompute(xpd_t *xpd, xpp_line_t pcm_mask)
int i;
int line_count = 0;
+ XPD_DBG(SIGNAL, xpd, "pcm_mask=0x%X\n", pcm_mask);
/* Add/remove all the trivial cases */
pcm_mask |= xpd->offhook;
pcm_mask |= xpd->cid_on;
@@ -799,8 +807,8 @@ static inline void pcm_frame_out(xbus_t *xbus, xframe_t *xframe)
}
spin_unlock_irqrestore(&xbus->lock, flags);
/* OK, really send it */
- if(print_dbg & DBG_PCM )
- dump_xframe("TX_XFRAME_PCM", xbus, xframe, print_dbg);
+ if(debug & DBG_PCM )
+ dump_xframe("TX_XFRAME_PCM", xbus, xframe, debug);
send_pcm_frame(xbus, xframe);
XBUS_COUNTER(xbus, TX_XFRAME_PCM)++;
return;
@@ -891,8 +899,8 @@ static int copy_pcm_tospan(xbus_t *xbus, xframe_t *xframe)
byte *p;
int ret = -EPROTO; /* Assume error */
- if(print_dbg & DBG_PCM)
- dump_xframe("RX_XFRAME_PCM", xbus, xframe, print_dbg);
+ if(debug & DBG_PCM)
+ dump_xframe("RX_XFRAME_PCM", xbus, xframe, debug);
/* handle content */
p = xframe->packets;
@@ -911,7 +919,7 @@ static int copy_pcm_tospan(xbus_t *xbus, xframe_t *xframe)
XBUS_NOTICE(xbus,
"%s: Non-PCM packet within a PCM xframe. (%d)\n",
__FUNCTION__, rate_limit);
- dump_xframe("In PCM xframe", xbus, xframe, print_dbg);
+ dump_xframe("In PCM xframe", xbus, xframe, debug);
}
goto out;
}
@@ -923,7 +931,7 @@ static int copy_pcm_tospan(xbus_t *xbus, xframe_t *xframe)
XBUS_NOTICE(xbus,
"%s: Invalid packet length %d. (%d)\n",
__FUNCTION__, len, rate_limit);
- dump_xframe("BAD LENGTH", xbus, xframe, print_dbg);
+ dump_xframe("BAD LENGTH", xbus, xframe, debug);
}
goto out;
}
@@ -933,7 +941,7 @@ static int copy_pcm_tospan(xbus_t *xbus, xframe_t *xframe)
if((rate_limit++ % 1003) == 0) {
notify_bad_xpd(__FUNCTION__, xbus, XPACKET_ADDR(pack), "RECEIVE PCM");
- dump_xframe("Unknown XPD addr", xbus, xframe, print_dbg);
+ dump_xframe("Unknown XPD addr", xbus, xframe, debug);
}
goto out;
}
@@ -1114,7 +1122,7 @@ void xframe_receive_pcm(xbus_t *xbus, xframe_t *xframe)
}
#ifdef CONFIG_PROC_FS
-int proc_sync_read(char *page, char **start, off_t off, int count, int *eof, void *data)
+static int proc_sync_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
int len = 0;
struct timeval now;
diff --git a/xpp/xbus-sysfs.c b/xpp/xbus-sysfs.c
index 04bc24e..87a58f1 100644
--- a/xpp/xbus-sysfs.c
+++ b/xpp/xbus-sysfs.c
@@ -46,7 +46,7 @@
static const char rcsid[] = "$Id$";
/* Command line parameters */
-extern int print_dbg;
+extern int debug;
/* Kernel versions... */
@@ -355,6 +355,9 @@ void xbus_sysfs_remove(xbus_t *xbus)
XBUS_DBG(GENERAL, xbus, "\n");
astribank = &xbus->astribank;
BUG_ON(!astribank);
+ if(!astribank->driver_data)
+ return;
+ BUG_ON(astribank->driver_data != xbus);
#ifdef SAMPLE_TICKS
device_remove_file(&xbus->astribank, &dev_attr_samples);
#endif
@@ -379,7 +382,7 @@ int xbus_sysfs_create(xbus_t *xbus)
astribank->bus = &xpp_bus_type;
astribank->parent = &xpp_bus;
snprintf(astribank->bus_id, BUS_ID_SIZE, "xbus-%02d", xbus->num);
- astribank->driver_data = NULL; /* FIXME: add some usefull data */
+ astribank->driver_data = NULL; /* override below */
astribank->release = xpp_dev_release;
ret = device_register(astribank);
if(ret) {
@@ -418,6 +421,7 @@ int xbus_sysfs_create(xbus_t *xbus)
goto out;
}
#endif
+ astribank->driver_data = xbus; /* Everything is good */
out:
return ret;
}
diff --git a/xpp/xdefs.h b/xpp/xdefs.h
index f1b2139..f928fd4 100644
--- a/xpp/xdefs.h
+++ b/xpp/xdefs.h
@@ -95,10 +95,7 @@ struct list_head { struct list_head *next; struct list_head *prev; };
#define VALID_XPD_NUM(x) ((x) < MAX_XPDS && (x) >= 0)
-#define CHAN_BITS 5 /* 0-30 for E1, 31 = ALL_CHANS */
-#define ALL_CHANS BITMASK(CHAN_BITS)
-#define MAX_CHAN (ALL_CHANS - 1)
-#define VALID_CHAN_NUM(x) ((x) < MAX_CHAN)
+#define CHAN_BITS 5 /* 0-31 for E1 */
typedef char *charp;
typedef unsigned char byte;
@@ -129,5 +126,8 @@ typedef struct xpacket xpacket_t;
typedef struct xops xops_t;
typedef __u32 xpp_line_t; /* at most 31 lines for E1 */
typedef byte lineno_t;
+typedef byte xportno_t;
+
+#define PORT_BROADCAST 255
#endif /* XDEFS_H */
diff --git a/xpp/xframe_queue.c b/xpp/xframe_queue.c
index a62e850..7d9c098 100644
--- a/xpp/xframe_queue.c
+++ b/xpp/xframe_queue.c
@@ -2,7 +2,7 @@
#include "xbus-core.h"
#include "zap_debug.h"
-extern int print_dbg;
+extern int debug;
static xframe_t *transport_alloc_xframe(xbus_t *xbus, gfp_t gfp_flags);
static void transport_free_xframe(xbus_t *xbus, xframe_t *xframe);
@@ -53,7 +53,7 @@ bool xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
return ret;
}
-xframe_t *__xframe_dequeue(struct xframe_queue *q)
+static xframe_t *__xframe_dequeue(struct xframe_queue *q)
{
xframe_t *frm = NULL;
struct list_head *h;
@@ -174,11 +174,17 @@ static bool xframe_queue_adjust(struct xframe_queue *q)
//XBUS_INFO(xbus, "%s(%d): Allocate one\n", q->name, delta);
xframe = transport_alloc_xframe(xbus, GFP_ATOMIC);
if(!xframe) {
- XBUS_ERR(xbus, "%s: failed frame allocation\n", q->name);
+ static int rate_limit;
+
+ if((rate_limit++ % 3001) == 0)
+ XBUS_ERR(xbus, "%s: failed frame allocation\n", q->name);
goto out;
}
if(!__xframe_enqueue(q, xframe)) {
- XBUS_ERR(xbus, "%s: failed enqueueing frame\n", q->name);
+ static int rate_limit;
+
+ if((rate_limit++ % 3001) == 0)
+ XBUS_ERR(xbus, "%s: failed enqueueing frame\n", q->name);
transport_free_xframe(xbus, xframe);
goto out;
}
@@ -187,7 +193,10 @@ static bool xframe_queue_adjust(struct xframe_queue *q)
//XBUS_INFO(xbus, "%s(%d): Free one\n", q->name, delta);
xframe = __xframe_dequeue(q);
if(!xframe) {
- XBUS_ERR(xbus, "%s: failed dequeueing frame\n", q->name);
+ static int rate_limit;
+
+ if((rate_limit++ % 3001) == 0)
+ XBUS_ERR(xbus, "%s: failed dequeueing frame\n", q->name);
goto out;
}
transport_free_xframe(xbus, xframe);
diff --git a/xpp/xpd.h b/xpp/xpd.h
index 3187227..8c7c514 100644
--- a/xpp/xpd.h
+++ b/xpp/xpd.h
@@ -91,12 +91,14 @@ typedef unsigned gfp_t; /* Added in 2.6.14 */
struct card_desc_struct {
struct list_head card_list;
u32 magic;
- xbus_t *xbus;
- byte rev; /* Revision number */
byte type; /* LSB: 1 - to_phone, 0 - to_line */
byte subtype;
struct xpd_addr xpd_addr;
- xpp_line_t line_status; /* Initial line status (offhook) */
+ byte numchips;
+ byte ports_per_chip;
+ byte ports;
+ byte port_dir;
+ struct xpd_addr ec_addr; /* echo canceler address */
};
typedef enum xpd_direction {
@@ -139,12 +141,12 @@ struct xpd {
char xpdname[XPD_NAMELEN];
struct zt_span span;
struct zt_chan *chans;
- int channels;
+ int channels;
xpd_type_t type;
const char *type_name;
byte subtype;
- byte revision; /* Card revision */
xpd_direction_t direction; /* TO_PHONE, TO_PSTN */
+ int subunits; /* all siblings */
xpp_line_t no_pcm; /* Temporary: disable PCM (for USB-1) */
xpp_line_t offhook; /* Actual chip state: 0 - ONHOOK, 1 - OFHOOK */
xpp_line_t cid_on;
@@ -177,6 +179,7 @@ struct xpd {
struct proc_dir_entry *proc_xpd_summary;
struct proc_dir_entry *proc_xpd_ztregister;
struct proc_dir_entry *proc_xpd_blink;
+ struct proc_dir_entry *proc_xpd_chipregs;
#endif
int counters[XPD_COUNTER_MAX];
@@ -199,7 +202,7 @@ struct xpd {
};
#define for_each_line(xpd,i) for((i) = 0; (i) < (xpd)->channels; (i)++)
-#define IS_BRI(xpd) ((xpd)->type == XPD_TYPE_BRI_NT || (xpd)->type == XPD_TYPE_BRI_TE)
+#define IS_BRI(xpd) ((xpd)->type == XPD_TYPE_BRI)
#define TICK_TOLERANCE 500 /* usec */
#ifdef DEBUG_SYNC_PARPORT
diff --git a/xpp/xpp_usb.c b/xpp/xpp_usb.c
index 796b127..2b633c6 100644
--- a/xpp/xpp_usb.c
+++ b/xpp/xpp_usb.c
@@ -45,10 +45,10 @@
static const char rcsid[] = "$Id$";
-DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
-DEF_PARM(int, usb1, 0, 0644, "Allow using USB 1.1 interfaces");
-DEF_PARM(uint, tx_sluggish, 2000, 0644, "A sluggish transmit (usec)");
-DEF_PARM(uint, drop_pcm_after, 6, 0644, "Number of consecutive tx_sluggish to drop a PCM frame");
+static DEF_PARM(int, debug, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
+static DEF_PARM(int, usb1, 0, 0644, "Allow using USB 1.1 interfaces");
+static DEF_PARM(uint, tx_sluggish, 2000, 0644, "A sluggish transmit (usec)");
+static DEF_PARM(uint, drop_pcm_after, 6, 0644, "Number of consecutive tx_sluggish to drop a PCM frame");
#include "zap_debug.h"
@@ -58,7 +58,7 @@ DEF_PARM(uint, drop_pcm_after, 6, 0644, "Number of consecutive tx_sluggish to dr
THIS_MODULE->name, (xusb)->index, xusb->path, xusb->serial, ## __VA_ARGS__)
#define XUSB_DBG(bits, xusb, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && XUSB_PRINTK(DEBUG, xusb, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+ ((void)((debug & (DBG_ ## bits)) && XUSB_PRINTK(DEBUG, xusb, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
#define XUSB_ERR(xusb, fmt, ...) XUSB_PRINTK(ERR, xusb, fmt, ## __VA_ARGS__)
#define XUSB_NOTICE(xusb, fmt, ...) XUSB_PRINTK(NOTICE, xusb, fmt, ## __VA_ARGS__)
#define XUSB_INFO(xusb, fmt, ...) XUSB_PRINTK(INFO, xusb, fmt, ## __VA_ARGS__)
@@ -323,7 +323,7 @@ static xframe_t *alloc_xframe(xbus_t *xbus, gfp_t gfp_flags)
return &uframe->xframe;
}
-void free_xframe(xbus_t *xbus, xframe_t *xframe)
+static void free_xframe(xbus_t *xbus, xframe_t *xframe)
{
struct uframe *uframe = xframe_to_uframe(xframe);
struct urb *urb = &uframe->urb;
@@ -348,13 +348,14 @@ static int do_send_xframe(xbus_t *xbus, xframe_t *xframe)
xusb_t *xusb;
int ret = 0;
struct uframe *uframe;
- static int rate_limit;
BUG_ON(!xframe);
BUG_ON(xframe->xframe_magic != XFRAME_MAGIC);
xusb = xusb_of(xbus);
BUG_ON(!xusb);
if(!xusb->present) {
+ static int rate_limit;
+
if((rate_limit++ % 1003) == 0)
XUSB_ERR(xusb,
"abort do_send_xframe during device disconnect (%d)\n", rate_limit);
@@ -393,8 +394,8 @@ static int do_send_xframe(xbus_t *xbus, xframe_t *xframe)
ret = -EBADF;
goto failure;
}
-// if (print_dbg)
-// dump_xframe("USB_FRAME_SEND", xbus, xframe, print_dbg);
+// if (debug)
+// dump_xframe("USB_FRAME_SEND", xbus, xframe, debug);
atomic_inc(&xusb->pending_writes);
return 0;
failure:
@@ -480,7 +481,7 @@ static const struct xusb_model_info {
struct xusb_endpoint in;
struct xusb_endpoint out;
} model_table[] = {
- [MODEL_FPGA_XPD] {
+ [MODEL_FPGA_XPD] = {
.iface_num = 0,
.in = { .ep_addr = 0x86 },
.out = { .ep_addr = 0x02 },
@@ -950,8 +951,8 @@ static void xpp_receive_callback(USB_PASS_CB(urb))
atomic_set(&xframe->frame_len, size);
xframe->tv_received = now;
-// if (print_dbg)
-// dump_xframe("USB_FRAME_RECEIVE", xbus, xframe, print_dbg);
+// if (debug)
+// dump_xframe("USB_FRAME_RECEIVE", xbus, xframe, debug);
XUSB_COUNTER(xusb, RX_FRAMES)++;
/* Send UP */
xbus_receive_xframe(xbus, xframe);
@@ -978,7 +979,7 @@ static void xpp_usb_cleanup(void)
}
}
-int __init xpp_usb_init(void)
+static int __init xpp_usb_init(void)
{
int ret;
//xusb_t *xusb;
@@ -1009,7 +1010,7 @@ failure:
}
-void __exit xpp_usb_shutdown(void)
+static void __exit xpp_usb_shutdown(void)
{
DBG(GENERAL, "\n");
/* deregister this driver with the USB subsystem */
diff --git a/xpp/xpp_zap.c b/xpp/xpp_zap.c
index afa34e9..5ee7303 100644
--- a/xpp/xpp_zap.c
+++ b/xpp/xpp_zap.c
@@ -57,9 +57,9 @@ struct proc_dir_entry *xpp_proc_toplevel = NULL;
#define MAX_QUEUE_LEN 10000
#define DELAY_UNTIL_DIALTONE 3000
-DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements");
-DEF_PARM_BOOL(zap_autoreg, 0, 0644, "Register spans automatically (1) or not (0)");
-DEF_PARM_BOOL(prefmaster, 0, 0644, "Do we want to be zaptel preferred sync master");
+DEF_PARM(int, debug, 0, 0644, "Print DBG statements");
+static DEF_PARM_BOOL(zap_autoreg, 0, 0644, "Register spans automatically (1) or not (0)");
+static DEF_PARM_BOOL(prefmaster, 0, 0644, "Do we want to be zaptel preferred sync master");
// DEF_ARRAY(int, pcmtx, 4, 0, "Forced PCM values to transmit");
#include "zap_debug.h"
@@ -114,20 +114,14 @@ static int proc_xpd_ztregister_read(char *page, char **start, off_t off, int cou
static int proc_xpd_ztregister_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
static int proc_xpd_blink_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_blink_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
-static void xpd_free(xpd_t *xpd);
-static void xpd_free(xpd_t *xpd)
-{
- xbus_t *xbus = NULL;
+/*------------------------- XPD Management -------------------------*/
- if(!xpd)
- return;
- xbus = xpd->xbus;
- if(!xbus)
- return;
- XPD_DBG(DEVICES, xpd, "\n");
+static void xpd_proc_remove(xbus_t *xbus, xpd_t *xpd)
+{
#ifdef CONFIG_PROC_FS
if(xpd->proc_xpd_dir) {
+ chip_proc_remove(xbus, xpd);
if(xpd->proc_xpd_summary) {
XPD_DBG(PROC, xpd, "Removing proc '%s'\n", PROC_XPD_SUMMARY);
remove_proc_entry(PROC_XPD_SUMMARY, xpd->proc_xpd_dir);
@@ -143,96 +137,16 @@ static void xpd_free(xpd_t *xpd)
remove_proc_entry(PROC_XPD_BLINK, xpd->proc_xpd_dir);
xpd->proc_xpd_blink = NULL;
}
- XPD_DBG(PROC, xpd, "Removing proc directory\n");
+ XPD_DBG(PROC, xpd, "Removing %s/%s proc directory\n",
+ xbus->busname, xpd->xpdname);
remove_proc_entry(xpd->xpdname, xbus->proc_xbus_dir);
xpd->proc_xpd_dir = NULL;
}
#endif
- xbus_unregister_xpd(xbus, xpd);
- if(xpd->xproto)
- xproto_put(xpd->xproto);
- xpd->xproto = NULL;
- KZFREE(xpd);
}
-
-/*------------------------- XPD Management -------------------------*/
-
-/*
- * Synchronous part of XPD detection.
- * Called from xbus_poll()
- */
-void card_detected(struct card_desc_struct *card_desc)
+static int xpd_proc_create(xbus_t *xbus, xpd_t *xpd)
{
- xbus_t *xbus;
- xpd_t *xpd = NULL;
- byte type;
- byte subtype;
- int unit;
- int subunit;
- byte rev;
- const xops_t *xops;
- const xproto_table_t *proto_table;
-
-
- BUG_ON(!card_desc);
- BUG_ON(card_desc->magic != CARD_DESC_MAGIC);
- xbus = card_desc->xbus; /* refcount held by xbus_poll() */
- type = card_desc->type;
- subtype = card_desc->subtype;
- unit = card_desc->xpd_addr.unit;
- subunit = card_desc->xpd_addr.subunit;
- rev = card_desc->rev;
- BUG_ON(!xbus);
- xpd = xpd_byaddr(xbus, unit, subunit);
- if(xpd) {
- if(type == XPD_TYPE_NOMODULE) {
- XBUS_NOTICE(xbus, "XPD at %d%d removed\n",
- unit, subunit);
- BUG();
- goto out;
- }
- XPD_NOTICE(xpd, "XPD at %d%d already exists\n",
- unit, subunit);
- goto out;
- }
- if(type == XPD_TYPE_NOMODULE) {
- XBUS_NOTICE(xbus, "XPD at %d%d Missing\n",
- unit, subunit);
- goto out;
- }
- proto_table = xproto_get(type);
- if(!proto_table) {
- XBUS_NOTICE(xbus, "XPD at %d%d: missing protocol table for type=%d. Ignored.\n",
- unit, subunit,
- type);
- goto out;
- }
- xops = &proto_table->xops;
- BUG_ON(!xops);
- xpd = xops->card_new(xbus, unit, subunit, proto_table, subtype, rev);
- if(!xpd) {
- XBUS_NOTICE(xbus, "card_new(%d,%d,%d,%d,%d) failed. Ignored.\n",
- unit, subunit, proto_table->type, subtype, rev);
- xproto_put(proto_table);
- goto err;
- }
- xpd->addr = card_desc->xpd_addr;
- xpd->xbus_idx = XPD_IDX(unit,subunit);
- snprintf(xpd->xpdname, XPD_NAMELEN, "XPD-%1d%1d", unit, subunit);
- xpd->subtype = card_desc->subtype;
- xpd->offhook = card_desc->line_status;
-
- /* For USB-1 disable some channels */
- if(MAX_SEND_SIZE(xbus) < RPACKET_SIZE(GLOBAL, PCM_WRITE)) {
- xpp_line_t no_pcm;
-
- no_pcm = 0x7F | xpd->digital_outputs | xpd->digital_inputs;
- xpd->no_pcm = no_pcm;
- XBUS_NOTICE(xbus, "max xframe size = %d, disabling some PCM channels. no_pcm=0x%04X\n",
- MAX_SEND_SIZE(xbus), xpd->no_pcm);
- }
- xbus_register_xpd(xbus, xpd);
#ifdef CONFIG_PROC_FS
XPD_DBG(PROC, xpd, "Creating proc directory\n");
xpd->proc_xpd_dir = proc_mkdir(xpd->xpdname, xbus->proc_xbus_dir);
@@ -265,24 +179,105 @@ void card_detected(struct card_desc_struct *card_desc)
xpd->proc_xpd_blink->data = xpd;
xpd->proc_xpd_blink->read_proc = proc_xpd_blink_read;
xpd->proc_xpd_blink->write_proc = proc_xpd_blink_write;
-#endif
- if(CALL_XMETHOD(card_init, xbus, xpd) < 0)
+ if(chip_proc_create(xbus, xpd) < 0)
goto err;
- //CALL_XMETHOD(XPD_STATE, xbus, xpd, 0); /* Turn off all channels */
- xpd->card_present = 1;
- CALL_XMETHOD(XPD_STATE, xbus, xpd, 1); /* Turn on all channels */
- XPD_INFO(xpd, "Initialized: %s\n", xpd->type_name);
+#endif
+ return 0;
+err:
+ xpd_proc_remove(xbus, xpd);
+ return -EFAULT;
+}
- if(zap_autoreg)
- zaptel_register_xpd(xpd);
+void xpd_free(xpd_t *xpd)
+{
+ xbus_t *xbus = NULL;
+
+ if(!xpd)
+ return;
+ if(xpd->xproto)
+ xproto_put(xpd->xproto); /* was taken in xpd_alloc() */
+ xpd->xproto = NULL;
+ xbus = xpd->xbus;
+ if(!xbus)
+ return;
+ XPD_DBG(DEVICES, xpd, "\n");
+ xpd_proc_remove(xbus, xpd);
+ xbus_unregister_xpd(xbus, xpd);
+ KZFREE(xpd);
+}
+
+
+__must_check int xpd_common_init(xbus_t *xbus, xpd_t *xpd, int unit, int subunit, int subtype, int subunits)
+{
+ int ret;
+
+ MKADDR(&xpd->addr, unit, subunit);
+ xpd->xbus_idx = XPD_IDX(unit,subunit);
+ snprintf(xpd->xpdname, XPD_NAMELEN, "XPD-%1d%1d", unit, subunit);
+ xpd->subtype = subtype;
+ xpd->subunits = subunits;
+ xpd->offhook = 0;
+
+ /* For USB-1 disable some channels */
+ if(MAX_SEND_SIZE(xbus) < RPACKET_SIZE(GLOBAL, PCM_WRITE)) {
+ xpp_line_t no_pcm;
+
+ no_pcm = 0x7F | xpd->digital_outputs | xpd->digital_inputs;
+ xpd->no_pcm = no_pcm;
+ XBUS_NOTICE(xbus, "max xframe size = %d, disabling some PCM channels. no_pcm=0x%04X\n",
+ MAX_SEND_SIZE(xbus), xpd->no_pcm);
+ }
+ if((ret = xpd_proc_create(xbus, xpd)) < 0)
+ return ret;
+ xbus_register_xpd(xbus, xpd);
+ return 0;
+}
+
+/*
+ * Synchronous part of XPD detection.
+ * Called from xbus_poll()
+ */
+int create_xpd(xbus_t *xbus, const xproto_table_t *proto_table,
+ int unit,
+ int subunit,
+ byte type,
+ byte subtype,
+ int subunits,
+ byte port_dir)
+{
+ xpd_t *xpd = NULL;
+ bool to_phone;
+ int ret = -EINVAL;
+
+ BUG_ON(type == XPD_TYPE_NOMODULE);
+ to_phone = BIT(subunit) & port_dir;
+ BUG_ON(!xbus);
+ xpd = xpd_byaddr(xbus, unit, subunit);
+ if(xpd) {
+ XPD_NOTICE(xpd, "XPD at %d%d already exists\n",
+ unit, subunit);
+ goto out;
+ }
+ xpd = proto_table->xops.card_new(xbus, unit, subunit, proto_table, subtype, subunits, to_phone);
+ if(!xpd) {
+ XBUS_NOTICE(xbus, "card_new(%d,%d,%d,%d,%d) failed. Ignored.\n",
+ unit, subunit, proto_table->type, subtype, to_phone);
+ goto err;
+ }
out:
- KZFREE(card_desc);
- return;
+ return 0;
err:
- xpd_free(xpd);
- goto out;
+ if(xpd)
+ xpd_free(xpd);
+ return ret;
}
+void xpd_post_init(xpd_t *xpd)
+{
+ XPD_DBG(DEVICES, xpd, "\n");
+ if(zap_autoreg)
+ zaptel_register_xpd(xpd);
+}
#ifdef CONFIG_PROC_FS
@@ -306,7 +301,7 @@ static int xpd_read_proc(char *page, char **start, off_t off, int count, int *eo
goto out;
xbus = xpd->xbus;
- len += sprintf(page + len, "%s (%s ,card %s, span %d)\n"
+ len += sprintf(page + len, "%s (%s, card %s, span %d)\n"
"timing_priority: %d\n"
"timer_count: %d span->mainttimer=%d\n"
,
@@ -317,6 +312,7 @@ static int xpd_read_proc(char *page, char **start, off_t off, int count, int *eo
xpd->timer_count, xpd->span.mainttimer
);
len += sprintf(page + len, "Address: U=%d S=%d\n", xpd->addr.unit, xpd->addr.subunit);
+ len += sprintf(page + len, "Subunits: %d\n", xpd->subunits);
len += sprintf(page + len, "Type: %d.%d\n\n", xpd->type, xpd->subtype);
len += sprintf(page + len, "pcm_len=%d\n\n", xpd->pcm_len);
len += sprintf(page + len, "wanted_pcm_mask=0x%04X\n\n", xpd->wanted_pcm_mask);
@@ -426,6 +422,7 @@ xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channel
size_t alloc_size = sizeof(xpd_t) + privsize;
int type = proto_table->type;
+ BUG_ON(!proto_table);
DBG(DEVICES, "type=%d channels=%d (alloc_size=%zd)\n",
type, channels, alloc_size);
if(channels > CHANNELS_PERXPD) {
@@ -461,6 +458,7 @@ xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channel
ERR("%s: Unable to allocate channels\n", __FUNCTION__);
goto err;
}
+ xproto_get(type); /* will be returned in xpd_free() */
return xpd;
err:
if(xpd) {
@@ -569,7 +567,7 @@ void update_line_status(xpd_t *xpd, int pos, bool to_offhook)
}
#ifdef CONFIG_PROC_FS
-int proc_xpd_ztregister_read(char *page, char **start, off_t off, int count, int *eof, void *data)
+static int proc_xpd_ztregister_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
int len = 0;
unsigned long flags;
@@ -615,7 +613,7 @@ static int proc_xpd_ztregister_write(struct file *file, const char __user *buffe
return (ret < 0) ? ret : count;
}
-int proc_xpd_blink_read(char *page, char **start, off_t off, int count, int *eof, void *data)
+static int proc_xpd_blink_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
int len = 0;
unsigned long flags;
@@ -641,8 +639,9 @@ static int proc_xpd_blink_write(struct file *file, const char __user *buffer, un
{
xpd_t *xpd = data;
char buf[MAX_PROC_WRITE];
- int blink;
- int ret;
+ char *endp;
+ unsigned blink;
+
BUG_ON(!xpd);
if(count >= MAX_PROC_WRITE)
@@ -650,10 +649,12 @@ static int proc_xpd_blink_write(struct file *file, const char __user *buffer, un
if(copy_from_user(buf, buffer, count))
return -EFAULT;
buf[count] = '\0';
- ret = sscanf(buf, "%d", &blink);
- if(ret != 1)
+ if(count > 0 && buf[count-1] == '\n') /* chomp */
+ buf[count-1] = '\0';
+ blink = simple_strtoul(buf, &endp, 0);
+ if(*endp != '\0' || blink > 0xFFFF)
return -EINVAL;
- XPD_DBG(GENERAL, xpd, "%s\n", (blink) ? "blink" : "unblink");
+ XPD_DBG(GENERAL, xpd, "BLINK channels: 0x%X\n", blink);
xpd->blink_mode = blink;
return count;
}
@@ -1020,7 +1021,7 @@ static void do_cleanup(void)
#endif
}
-int __init xpp_zap_init(void)
+static int __init xpp_zap_init(void)
{
int ret = 0;
@@ -1055,16 +1056,19 @@ err:
return ret;
}
-void __exit xpp_zap_cleanup(void)
+static void __exit xpp_zap_cleanup(void)
{
xbus_pcm_shutdown();
xbus_core_shutdown();
do_cleanup();
}
-EXPORT_SYMBOL(print_dbg);
-EXPORT_SYMBOL(card_detected);
+EXPORT_SYMBOL(debug);
+EXPORT_SYMBOL(xpd_common_init);
+EXPORT_SYMBOL(create_xpd);
+EXPORT_SYMBOL(xpd_post_init);
EXPORT_SYMBOL(xpd_alloc);
+EXPORT_SYMBOL(xpd_free);
EXPORT_SYMBOL(xpd_disconnect);
EXPORT_SYMBOL(update_xpd_status);
EXPORT_SYMBOL(update_line_status);
diff --git a/xpp/xpp_zap.h b/xpp/xpp_zap.h
index fee20c5..dd56657 100644
--- a/xpp/xpp_zap.h
+++ b/xpp/xpp_zap.h
@@ -26,8 +26,12 @@
#include "xproto.h"
void xpd_disconnect(xpd_t *xpd);
-void card_detected(struct card_desc_struct *card_desc);
+int xpd_common_init(xbus_t *xbus, xpd_t *xpd, int unit, int subunit, int subtype, int subunits);
+int create_xpd(xbus_t *xbus, const xproto_table_t *proto_table,
+ int unit, int subunit, byte type, byte subtype, int subunits, byte port_dir);
+void xpd_post_init(xpd_t *xpd);
xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channels);
+void xpd_free(xpd_t *xpd);
void xpd_remove(xpd_t *xpd);
void update_xpd_status(xpd_t *xpd, int alarm_flag);
void update_line_status(xpd_t *xpd, int pos, bool good);
diff --git a/xpp/xproto.c b/xpp/xproto.c
index 010f0de..c3aa34e 100644
--- a/xpp/xproto.c
+++ b/xpp/xproto.c
@@ -30,7 +30,7 @@
static const char rcsid[] = "$Id$";
-extern int print_dbg;
+extern int debug;
static const xproto_table_t *xprotocol_tables[XPD_TYPE_NOMODULE];
@@ -68,7 +68,7 @@ xproto_handler_t xproto_global_handler(byte opcode)
return xproto_card_handler(&PROTO_TABLE(GLOBAL), opcode);
}
-const xproto_table_t *xproto_table(xpd_type_t cardtype)
+static const xproto_table_t *xproto_table(xpd_type_t cardtype)
{
if(cardtype >= XPD_TYPE_NOMODULE)
return NULL;
@@ -125,7 +125,7 @@ void notify_bad_xpd(const char *funcname, xbus_t *xbus, const struct xpd_addr ad
funcname, addr.unit, addr.subunit, msg);
}
-int packet_process(xbus_t *xbus, xpacket_t *pack)
+static int packet_process(xbus_t *xbus, xpacket_t *pack)
{
byte op;
const xproto_entry_t *xe;
@@ -140,7 +140,7 @@ int packet_process(xbus_t *xbus, xpacket_t *pack)
XBUS_NOTICE(xbus, "%s: from %d%d: bad address.\n",
__FUNCTION__,
XPACKET_ADDR_UNIT(pack), XPACKET_ADDR_SUBUNIT(pack));
- dump_packet("packet_process -- bad address", pack, print_dbg);
+ dump_packet("packet_process -- bad address", pack, debug);
}
goto out;
}
@@ -186,7 +186,7 @@ int packet_process(xbus_t *xbus, xpacket_t *pack)
if(printk_ratelimit()) {
ERR("xpp: %s: wrong size %d for opcode=0x%02X\n",
__FUNCTION__, XPACKET_LEN(pack), op);
- dump_packet("packet_process -- wrong size", pack, print_dbg);
+ dump_packet("packet_process -- wrong size", pack, debug);
}
goto out;
}
@@ -207,6 +207,8 @@ static int xframe_receive_cmd(xbus_t *xbus, xframe_t *xframe)
int len;
int ret;
+ if(debug & DBG_COMMANDS)
+ dump_xframe("RX-CMD", xbus, xframe, DBG_ANY);
p = xframe->packets;
xframe_end = p + XFRAME_LEN(xframe);
do {
@@ -218,7 +220,7 @@ static int xframe_receive_cmd(xbus_t *xbus, xframe_t *xframe)
if((rate_limit++ % 1003) == 0) {
XBUS_DBG(GENERAL, xbus, "A PCM packet within a Non-PCM xframe\n");
- dump_xframe("In Non-PCM xframe", xbus, xframe, print_dbg);
+ dump_xframe("In Non-PCM xframe", xbus, xframe, debug);
}
ret = -EPROTO;
goto out;
@@ -229,7 +231,7 @@ static int xframe_receive_cmd(xbus_t *xbus, xframe_t *xframe)
if((rate_limit++ % 1003) == 0) {
XBUS_NOTICE(xbus, "Invalid packet length %d\n", len);
- dump_xframe("BAD LENGTH", xbus, xframe, print_dbg);
+ dump_xframe("BAD LENGTH", xbus, xframe, debug);
}
ret = -EPROTO;
goto out;
@@ -255,7 +257,7 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe)
if((rate_limit++ % 1003) == 0) {
XBUS_NOTICE(xbus, "short xframe\n");
- dump_xframe("short xframe", xbus, xframe, print_dbg);
+ dump_xframe("short xframe", xbus, xframe, debug);
}
FREE_RECV_XFRAME(xbus, xframe);
return -EPROTO;
@@ -287,12 +289,12 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe)
#define VERBOSE_DEBUG 1
#define ERR_REPORT_LIMIT 20
-void dump_packet(const char *msg, const xpacket_t *packet, bool print_dbg)
+void dump_packet(const char *msg, const xpacket_t *packet, bool debug)
{
byte op = XPACKET_OP(packet);
byte *addr = (byte *)&XPACKET_ADDR(packet);
- if(!print_dbg)
+ if(!debug)
return;
printk(KERN_DEBUG "%s: XPD=%1X-%1X%c (0x%X) OP=0x%02X LEN=%d",
msg,
@@ -322,7 +324,7 @@ void dump_packet(const char *msg, const xpacket_t *packet, bool print_dbg)
limiter++;
break;
}
- if (print_dbg)
+ if (debug)
printk("%02X ", p[i]);
}
}
@@ -330,39 +332,69 @@ void dump_packet(const char *msg, const xpacket_t *packet, bool print_dbg)
printk("\n");
}
-void dump_reg_cmd(const char msg[], const reg_cmd_t *regcmd, bool writing)
+void dump_reg_cmd(const char msg[], bool writing, xbus_t *xbus,
+ byte unit, xportno_t port, const reg_cmd_t *regcmd)
{
char action;
- byte chipsel;
-
+ char modifier;
+ char port_buf[MAX_PROC_WRITE];
+ char reg_buf[MAX_PROC_WRITE];
+ char data_buf[MAX_PROC_WRITE];
+
+ if(regcmd->bytes > sizeof(*regcmd) - 1) { /* The size byte is not included */
+ PORT_NOTICE(xbus, unit, port, "%s: %s: Too long: regcmd->bytes = %d\n",
+ __FUNCTION__, msg, regcmd->bytes);
+ return;
+ }
+ if(regcmd->is_multibyte) {
+ char buf[MAX_PROC_WRITE + 1];
+ int i;
+ int n = 0;
+ size_t len = regcmd->bytes;
+ const byte *p = REG_XDATA(regcmd);
+
+ buf[0] = '\0';
+ for(i = 0; i < len && n < MAX_PROC_WRITE; i++)
+ n += snprintf(&buf[n], MAX_PROC_WRITE - n, "%02X ", p[i]);
+ PORT_DBG(REGS, xbus, unit, port,
+ "UNIT-%d PORT-%d: Multibyte(eoframe=%d) %s[0..%zd]: %s%s\n",
+ unit, port, regcmd->eoframe,
+ msg, len-1, buf, (n >= MAX_PROC_WRITE)?"...":"");
+ return;
+ }
if(regcmd->bytes != sizeof(*regcmd) - 1) { /* The size byte is not included */
- NOTICE("%s: Wrong size: regcmd->bytes = %d\n", __FUNCTION__, regcmd->bytes);
+ PORT_NOTICE(xbus, unit, port, "%s: %s: Wrong size: regcmd->bytes = %d\n",
+ __FUNCTION__, msg, regcmd->bytes);
return;
}
- if(writing && (REG_FIELD(regcmd, chipsel) & 0x80))
- ERR("Sending register command with reading bit ON\n");
- action = (writing) ? 'W' : 'R';
- chipsel = REG_FIELD(regcmd, chipsel) & ~0x80;
+ snprintf(port_buf, MAX_PROC_WRITE, "%d%s",
+ regcmd->portnum,
+ (REG_FIELD(regcmd, all_ports_broadcast)) ? "*" : "");
+ action = (REG_FIELD(regcmd, read_request)) ? 'R' : 'W';
+ modifier = 'D';
if(REG_FIELD(regcmd, do_subreg)) {
- DBG(GENERAL, "%s: %d %cS %02X %02X [%02X] # data_high=%X m=%d eof=%d\n", msg, chipsel, action,
+ snprintf(reg_buf, MAX_PROC_WRITE, "%02X %02X",
REG_FIELD(regcmd, regnum),
- REG_FIELD(regcmd, subreg),
- REG_FIELD(regcmd, data_low),
- REG_FIELD(regcmd, data_high),
- regcmd->multibyte, regcmd->eoframe);
- } else if(REG_FIELD(regcmd, regnum) == 0x1E) {
- DBG(GENERAL, "%s: %d %cI %02X [%02X %02X] # m=%d eof=%d\n", msg, chipsel, action,
- REG_FIELD(regcmd, subreg),
- REG_FIELD(regcmd, data_low),
- REG_FIELD(regcmd, data_high),
- regcmd->multibyte, regcmd->eoframe);
+ REG_FIELD(regcmd, subreg));
+ modifier = 'S';
} else {
- DBG(GENERAL, "%s: %d %cD %02X [%02X] # data_high=%X m=%d eof=%d\n", msg, chipsel, action,
- REG_FIELD(regcmd, regnum),
+ snprintf(reg_buf, MAX_PROC_WRITE, "%02X",
+ REG_FIELD(regcmd, regnum));
+ }
+ if(REG_FIELD(regcmd, read_request)) {
+ data_buf[0] = '\0';
+ } else if(REG_FIELD(regcmd, do_datah)) {
+ snprintf(data_buf, MAX_PROC_WRITE, "%02X %02X",
REG_FIELD(regcmd, data_low),
- REG_FIELD(regcmd, data_high),
- regcmd->multibyte, regcmd->eoframe);
+ REG_FIELD(regcmd, data_high));
+ modifier = 'I';
+ } else {
+ snprintf(data_buf, MAX_PROC_WRITE, "%02X",
+ REG_FIELD(regcmd, data_low));
}
+ PORT_DBG(REGS, xbus, unit, port, "%s: %s %c%c %s %s\n",
+ msg, port_buf, action, modifier,
+ reg_buf, data_buf);
}
const char *xproto_name(xpd_type_t xpd_type)
@@ -411,8 +443,6 @@ int xproto_register(const xproto_table_t *proto_table)
// CHECK_XOP(card_ioctl); // optional method -- call after testing
CHECK_XOP(card_register_reply);
CHECK_XOP(XPD_STATE);
- CHECK_XOP(RING);
- CHECK_XOP(RELAY_OUT);
xprotocol_tables[type] = proto_table;
return 0;
diff --git a/xpp/xproto.h b/xpp/xproto.h
index f68fedf..4691094 100644
--- a/xpp/xproto.h
+++ b/xpp/xproto.h
@@ -32,15 +32,21 @@
/*
* This must match the firmware protocol version
*/
-#define XPP_PROTOCOL_VERSION 29
+#define XPP_PROTOCOL_VERSION 30
struct xpd_addr {
- uint8_t unit:UNIT_BITS;
uint8_t subunit:SUBUNIT_BITS;
uint8_t reserved:1;
+ uint8_t unit:UNIT_BITS;
uint8_t sync_master:1;
} PACKED;
+#define MKADDR(p, u, s) do { \
+ (p)->unit = (u); \
+ (p)->subunit = (s); \
+ (p)->sync_master = 0; \
+ } while(0)
+
struct xpacket_header {
uint16_t packet_len:10;
uint16_t reserved:1;
@@ -68,12 +74,11 @@ struct xpacket_header {
* 0 - TO_PSTN
* 1 - TO_PHONE
*/
-#define XPD_TYPE_FXS 3 // TO_PHONE
-#define XPD_TYPE_FXO 4 // TO_PSTN
-#define XPD_TYPE_BRI_TE 6 // TO_PSTN
-#define XPD_TYPE_BRI_NT 7 // TO_PHONE
-#define XPD_TYPE_PRI 9 // TO_PSTN/TO_PHONE (runtime)
-#define XPD_TYPE_NOMODULE 15
+#define XPD_TYPE_FXS 1 // TO_PHONE
+#define XPD_TYPE_FXO 2 // TO_PSTN
+#define XPD_TYPE_BRI 3 // TO_PSTN/TO_PHONE (from hardware)
+#define XPD_TYPE_PRI 4 // TO_PSTN/TO_PHONE (runtime)
+#define XPD_TYPE_NOMODULE 7
typedef byte xpd_type_t;
@@ -140,14 +145,14 @@ bool valid_xpd_addr(const struct xpd_addr *addr);
#define XFRAME_NEW_CMD(frm, p, xbus, card, op, to) \
do { \
- int len = RPACKET_SIZE(card,op); \
+ int pack_len = RPACKET_SIZE(card,op); \
\
if(!TRANSPORT_RUNNING(xbus)) \
return -ENODEV; \
frm = ALLOC_SEND_XFRAME(xbus); \
if(!frm) \
return -ENOMEM; \
- (p) = xframe_next_packet(frm, len); \
+ (p) = xframe_next_packet(frm, pack_len); \
if(!(p)) \
return -ENOMEM; \
XPACKET_INIT(p, card, op, to, 0, 0); \
@@ -156,38 +161,21 @@ bool valid_xpd_addr(const struct xpd_addr *addr);
#endif
/*--------------------------- register handling --------------------------------*/
-/*
- * After the opcode, there are always:
- * * A size (in bytes) of the rest. Only 6 bits are counted:
- * - The MSB signifies a multibyte write (to BRI fifo)
- * - The MSB-1 signifies end of frame to multibyte writes in BRI.
- * A normal register command (not multibyte) than contains:
- * * A channel selector byte:
- * - ALL_CHANS (currently 31) is a broadcast request to set a
- * register for all channels.
- * - Smaller numbers (0-30) represent the addressed channel number.
- * - The MSB signifies:
- * 1 - register [R]ead request
- * 0 - register [W]rite request
- * * Register number
- * * Subregister number -- 0 when there is no subregister
- * * Data low
- * * Data high -- 0 for single byte registers (direct registers)
- * A multibyte register command than contains a sequence of bytes.
- */
#define MULTIBYTE_MAX_LEN 5 /* FPGA firmware limitation */
typedef struct reg_cmd {
- byte bytes:6;
+ byte bytes:3; /* Length (for Multibyte) */
byte eoframe:1; /* For BRI -- end of frame */
- byte multibyte:1; /* For BRI -- fifo data */
+ byte portnum:3; /* For port specific registers */
+ byte is_multibyte:1;
union {
struct {
- byte chipsel:CHAN_BITS; /* chip select */
- byte reserved:1;
+ byte reserved:4;
+ byte do_datah:1;
byte do_subreg:1;
byte read_request:1;
+ byte all_ports_broadcast:1;
byte regnum;
byte subreg;
byte data_low;
@@ -228,7 +216,8 @@ xproto_handler_t xproto_global_handler(byte opcode);
(xpd)->xops->name(xbus, xpd, ## __VA_ARGS__ )
struct xops {
- xpd_t *(*card_new)(xbus_t *xbus, int unit, int subunit, const xproto_table_t *proto_table, byte subtype, byte revision);
+ xpd_t *(*card_new)(xbus_t *xbus, int unit, int subunit,
+ const xproto_table_t *proto_table, byte subtype, int subunits, bool to_phone);
int (*card_init)(xbus_t *xbus, xpd_t *xpd);
int (*card_remove)(xbus_t *xbus, xpd_t *xpd);
int (*card_tick)(xbus_t *xbus, xpd_t *xpd);
@@ -243,8 +232,6 @@ struct xops {
int (*card_register_reply)(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *reg);
int (*XPD_STATE)(xbus_t *xbus, xpd_t *xpd, bool on);
- int (*RING)(xbus_t *xbus, xpd_t *xpd, lineno_t chan, bool on);
- int (*RELAY_OUT)(xbus_t *xbus, xpd_t *xpd, byte which, bool on);
};
struct xproto_entry {
@@ -259,6 +246,7 @@ struct xproto_table {
xproto_entry_t entries[256]; /* Indexed by opcode */
xops_t xops;
xpd_type_t type;
+ byte ports_per_subunit;
const char *name;
bool (*packet_is_valid)(xpacket_t *pack);
void (*packet_dump)(const char *msg, xpacket_t *pack);
@@ -277,8 +265,6 @@ struct xpacket {
struct xpacket_header head;
union {
MEMBER(GLOBAL, NULL_REPLY);
- MEMBER(GLOBAL, DESC_REQ);
- MEMBER(GLOBAL, DEV_DESC);
MEMBER(GLOBAL, PCM_WRITE);
MEMBER(GLOBAL, PCM_READ);
MEMBER(GLOBAL, SYNC_REPLY);
@@ -292,8 +278,8 @@ struct xpacket {
/* Last byte is chksum */
} PACKED;
-void dump_packet(const char *msg, const xpacket_t *packet, bool print_dbg);
-void dump_reg_cmd(const char msg[], const reg_cmd_t *regcmd, bool writing);
+void dump_packet(const char *msg, const xpacket_t *packet, bool debug);
+void dump_reg_cmd(const char msg[], bool writing, xbus_t *xbus, byte unit, xportno_t port, const reg_cmd_t *regcmd);
int xframe_receive(xbus_t *xbus, xframe_t *xframe);
void notify_bad_xpd(const char *funcname, xbus_t *xbus, const struct xpd_addr addr, const char *msg);
int xproto_register(const xproto_table_t *proto_table);
diff --git a/xpp/zap_debug.c b/xpp/zap_debug.c
index bf54e62..e29e9dc 100644
--- a/xpp/zap_debug.c
+++ b/xpp/zap_debug.c
@@ -54,7 +54,7 @@ static struct {
};
#undef P_
-void dump_poll(int print_dbg, const char *msg, int poll)
+void dump_poll(int debug, const char *msg, int poll)
{
int i;
diff --git a/xpp/zap_debug.h b/xpp/zap_debug.h
index fb1ecc3..bc386f9 100644
--- a/xpp/zap_debug.h
+++ b/xpp/zap_debug.h
@@ -41,33 +41,43 @@
printk(KERN_ ## level "%s%s-%s: %s/%s/%d: " fmt, #level, \
category, THIS_MODULE->name, (xpd)->xbus->busname, (xpd)->xpdname, (pos), ## __VA_ARGS__)
+#define PORT_PRINTK(level, category, xbus, unit, port, fmt, ...) \
+ printk(KERN_ ## level "%s%s-%s: %s UNIT=%d PORT=%d: " fmt, #level, \
+ category, THIS_MODULE->name, (xbus)->busname, (unit), (port), ## __VA_ARGS__)
+
#define DBG(bits, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && PRINTK(DEBUG, "-" #bits, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+ ((void)((debug & (DBG_ ## bits)) && PRINTK(DEBUG, "-" #bits, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
#define INFO(fmt, ...) PRINTK(INFO, "", fmt, ## __VA_ARGS__)
#define NOTICE(fmt, ...) PRINTK(NOTICE, "", fmt, ## __VA_ARGS__)
#define WARNING(fmt, ...) PRINTK(WARNING, "", fmt, ## __VA_ARGS__)
#define ERR(fmt, ...) PRINTK(ERR, "", fmt, ## __VA_ARGS__)
#define XBUS_DBG(bits, xbus, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && XBUS_PRINTK(DEBUG, "-" #bits, xbus, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+ ((void)((debug & (DBG_ ## bits)) && XBUS_PRINTK(DEBUG, "-" #bits, xbus, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
#define XBUS_INFO(xbus, fmt, ...) XBUS_PRINTK(INFO, "", xbus, fmt, ## __VA_ARGS__)
#define XBUS_NOTICE(xbus, fmt, ...) XBUS_PRINTK(NOTICE, "", xbus, fmt, ## __VA_ARGS__)
#define XBUS_ERR(xbus, fmt, ...) XBUS_PRINTK(ERR, "", xbus, fmt, ## __VA_ARGS__)
#define XPD_DBG(bits, xpd, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && XPD_PRINTK(DEBUG, "-" #bits, xpd, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+ ((void)((debug & (DBG_ ## bits)) && XPD_PRINTK(DEBUG, "-" #bits, xpd, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
#define XPD_INFO(xpd, fmt, ...) XPD_PRINTK(INFO, "", xpd, fmt, ## __VA_ARGS__)
#define XPD_NOTICE(xpd, fmt, ...) XPD_PRINTK(NOTICE, "", xpd, fmt, ## __VA_ARGS__)
#define XPD_WARNING(xpd, fmt, ...) XPD_PRINTK(WARNING, "", xpd, fmt, ## __VA_ARGS__)
#define XPD_ERR(xpd, fmt, ...) XPD_PRINTK(ERR, "", xpd, fmt, ## __VA_ARGS__)
#define LINE_DBG(bits, xpd, pos, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && LINE_PRINTK(DEBUG, "-" #bits, xpd, pos, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+ ((void)((debug & (DBG_ ## bits)) && LINE_PRINTK(DEBUG, "-" #bits, xpd, pos, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
#define LINE_NOTICE(xpd, pos, fmt, ...) LINE_PRINTK(NOTICE, "", xpd, pos, fmt, ## __VA_ARGS__)
#define LINE_ERR(xpd, pos, fmt, ...) LINE_PRINTK(ERR, "", xpd, pos, fmt, ## __VA_ARGS__)
+#define PORT_DBG(bits, xbus, unit, port, fmt, ...) \
+ ((void)((debug & (DBG_ ## bits)) && PORT_PRINTK(DEBUG, "-" #bits, \
+ xbus, unit, port, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+#define PORT_NOTICE(xbus, unit, port, fmt, ...) PORT_PRINTK(NOTICE, "", xbus, unit, port, fmt, ## __VA_ARGS__)
+#define PORT_ERR(xbus, unit, port, fmt, ...) PORT_PRINTK(ERR, "", xbus, unit, port, fmt, ## __VA_ARGS__)
+
/*
- * Bits for print_dbg
+ * Bits for debug
*/
#define DBG_GENERAL BIT(0)
#define DBG_PCM BIT(1)
@@ -77,9 +87,10 @@
#define DBG_PROC BIT(5)
#define DBG_REGS BIT(6)
#define DBG_DEVICES BIT(7) /* instanciation/destruction etc. */
+#define DBG_COMMANDS BIT(8) /* All commands */
#define DBG_ANY (~0)
-void dump_poll(int print_dbg, const char *msg, int poll);
+void dump_poll(int debug, const char *msg, int poll);
static inline char *rxsig2str(zt_rxsig_t sig)
{