summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/Makefile.lint1
-rw-r--r--usr/src/Targetdirs4
-rw-r--r--usr/src/cmd/Adm/sun/passwd1
-rw-r--r--usr/src/cmd/Adm/sun/shadow1
-rw-r--r--usr/src/cmd/bsmrecord/audit_record_attr.txt30
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers1
-rw-r--r--usr/src/cmd/dladm/Makefile48
-rw-r--r--usr/src/cmd/dladm/dladm.c2090
-rw-r--r--usr/src/cmd/dladm/linkprop.conf30
-rw-r--r--usr/src/cmd/dladm/secobj.conf30
-rw-r--r--usr/src/cmd/svc/milestone/net-physical14
-rw-r--r--usr/src/cmd/truss/codes.c6
-rw-r--r--usr/src/head/auth_list.h1
-rw-r--r--usr/src/lib/Makefile5
-rw-r--r--usr/src/lib/libbsm/audit_class.txt1
-rw-r--r--usr/src/lib/libbsm/audit_event.txt2
-rw-r--r--usr/src/lib/libbsm/common/adt_event.h18
-rw-r--r--usr/src/lib/libbsm/common/adt_xlate.c44
-rw-r--r--usr/src/lib/libbsm/common/adt_xml.txt33
-rw-r--r--usr/src/lib/libdladm/Makefile2
-rw-r--r--usr/src/lib/libdladm/Makefile.com5
-rw-r--r--usr/src/lib/libdladm/common/libdladm.c274
-rw-r--r--usr/src/lib/libdladm/common/libdladm.h72
-rw-r--r--usr/src/lib/libdladm/common/libdladm_impl.h51
-rw-r--r--usr/src/lib/libdladm/common/linkprop.c700
-rw-r--r--usr/src/lib/libdladm/common/mapfile-vers14
-rw-r--r--usr/src/lib/libdladm/common/secobj.c634
-rw-r--r--usr/src/lib/liblaadm/common/liblaadm.c26
-rw-r--r--usr/src/lib/libsecdb/auth_attr.txt1
-rw-r--r--usr/src/lib/libsecdb/exec_attr.txt5
-rw-r--r--usr/src/lib/libsecdb/help/auths/LinkSecurity.html45
-rw-r--r--usr/src/lib/libsecdb/help/auths/Makefile3
-rw-r--r--usr/src/lib/libsecdb/help/profiles/Makefile8
-rw-r--r--usr/src/lib/libsecdb/help/profiles/RtNetLinkSecure.html39
-rw-r--r--usr/src/lib/libsecdb/prof_attr.txt3
-rw-r--r--usr/src/lib/libwladm/Makefile62
-rw-r--r--usr/src/lib/libwladm/Makefile.com51
-rw-r--r--usr/src/lib/libwladm/common/libwladm.c1957
-rw-r--r--usr/src/lib/libwladm/common/libwladm.h209
-rw-r--r--usr/src/lib/libwladm/common/libwladm_impl.h82
-rw-r--r--usr/src/lib/libwladm/common/llib-lwladm31
-rw-r--r--usr/src/lib/libwladm/common/mapfile-vers60
-rw-r--r--usr/src/lib/libwladm/i386/Makefile30
-rw-r--r--usr/src/lib/libwladm/sparc/Makefile30
-rw-r--r--usr/src/pkgdefs/SUNW0on/prototype_com2
-rw-r--r--usr/src/pkgdefs/SUNWatheros/postinstall2
-rw-r--r--usr/src/pkgdefs/SUNWckr/prototype_i3864
-rw-r--r--usr/src/pkgdefs/SUNWcnetr/Makefile9
-rw-r--r--usr/src/pkgdefs/SUNWcnetr/postinstall32
-rw-r--r--usr/src/pkgdefs/SUNWcnetr/prototype_com13
-rw-r--r--usr/src/pkgdefs/SUNWcslr/prototype_com1
-rw-r--r--usr/src/pkgdefs/SUNWcsu/prototype_com2
-rw-r--r--usr/src/pkgdefs/common_files/i.ftpusers9
-rw-r--r--usr/src/pkgdefs/common_files/i.minorperm_i38633
-rw-r--r--usr/src/pkgdefs/common_files/i.minorperm_sparc28
-rw-r--r--usr/src/pkgdefs/common_files/i.passwd20
-rw-r--r--usr/src/pkgdefs/common_files/i.shadow16
-rw-r--r--usr/src/pkgdefs/etc/exception_list_i38653
-rw-r--r--usr/src/pkgdefs/etc/exception_list_sparc37
-rw-r--r--usr/src/tools/scripts/bfu.sh29
-rw-r--r--usr/src/uts/common/Makefile.files9
-rw-r--r--usr/src/uts/common/Makefile.rules7
-rw-r--r--usr/src/uts/common/io/aggr/aggr_port.c2
-rw-r--r--usr/src/uts/common/io/ath/ath_aux.c275
-rw-r--r--usr/src/uts/common/io/ath/ath_aux.h18
-rw-r--r--usr/src/uts/common/io/ath/ath_hal.h358
-rw-r--r--usr/src/uts/common/io/ath/ath_ieee80211.c2899
-rw-r--r--usr/src/uts/common/io/ath/ath_ieee80211.h743
-rw-r--r--usr/src/uts/common/io/ath/ath_impl.h24
-rw-r--r--usr/src/uts/common/io/ath/ath_main.c1445
-rw-r--r--usr/src/uts/common/io/ath/ath_osdep.c48
-rw-r--r--usr/src/uts/common/io/ath/ath_rate.c52
-rw-r--r--usr/src/uts/common/io/ath/ath_rate.h4
-rw-r--r--usr/src/uts/common/io/ath/ath_wificonfig.c818
-rw-r--r--usr/src/uts/common/io/ath/hal_x86_32.o.uu6620
-rw-r--r--usr/src/uts/common/io/ath/hal_x86_64.o.uu8911
-rw-r--r--usr/src/uts/common/io/dld/dld_drv.c244
-rw-r--r--usr/src/uts/common/io/dld/dld_proto.c5
-rw-r--r--usr/src/uts/common/io/dld/dld_str.c76
-rw-r--r--usr/src/uts/common/io/dls/dls_vlan.c4
-rw-r--r--usr/src/uts/common/io/mac/mac.c3
-rw-r--r--usr/src/uts/common/io/mac/plugins/mac_ether.c1
-rw-r--r--usr/src/uts/common/io/mac/plugins/mac_wifi.c416
-rw-r--r--usr/src/uts/common/io/net80211/net80211.c634
-rw-r--r--usr/src/uts/common/io/net80211/net80211_crypto.c510
-rw-r--r--usr/src/uts/common/io/net80211/net80211_crypto_none.c131
-rw-r--r--usr/src/uts/common/io/net80211/net80211_crypto_wep.c420
-rw-r--r--usr/src/uts/common/io/net80211/net80211_impl.h408
-rw-r--r--usr/src/uts/common/io/net80211/net80211_input.c1233
-rw-r--r--usr/src/uts/common/io/net80211/net80211_ioctl.c1359
-rw-r--r--usr/src/uts/common/io/net80211/net80211_node.c1503
-rw-r--r--usr/src/uts/common/io/net80211/net80211_output.c723
-rw-r--r--usr/src/uts/common/io/net80211/net80211_proto.c669
-rw-r--r--usr/src/uts/common/sys/dld.h34
-rw-r--r--usr/src/uts/common/sys/dld_impl.h5
-rw-r--r--usr/src/uts/common/sys/dlpi.h2
-rw-r--r--usr/src/uts/common/sys/mac.h2
-rw-r--r--usr/src/uts/common/sys/mac_impl.h1
-rw-r--r--usr/src/uts/common/sys/mac_wifi.h116
-rw-r--r--usr/src/uts/common/sys/net80211.h528
-rw-r--r--usr/src/uts/common/sys/net80211_crypto.h218
-rw-r--r--usr/src/uts/common/sys/net80211_proto.h541
-rw-r--r--usr/src/uts/intel/Makefile.intel.shared2
-rw-r--r--usr/src/uts/intel/ath/Makefile8
-rw-r--r--usr/src/uts/intel/mac_wifi/Makefile92
-rw-r--r--usr/src/uts/intel/net80211/Makefile95
-rw-r--r--usr/src/uts/intel/os/minor_perm19
-rw-r--r--usr/src/uts/sparc/os/minor_perm17
108 files changed, 26806 insertions, 12490 deletions
diff --git a/usr/src/Makefile.lint b/usr/src/Makefile.lint
index e00af1c837..5944ecd55c 100644
--- a/usr/src/Makefile.lint
+++ b/usr/src/Makefile.lint
@@ -375,6 +375,7 @@ COMMON_SUBDIRS = \
lib/libuutil \
lib/libwanboot \
lib/libwanbootutil \
+ lib/libwladm \
lib/libxnet \
lib/libzfs \
lib/libzfs_jni \
diff --git a/usr/src/Targetdirs b/usr/src/Targetdirs
index 1dabd06793..1b7d92e374 100644
--- a/usr/src/Targetdirs
+++ b/usr/src/Targetdirs
@@ -402,6 +402,7 @@ ROOT.SFW64+= \
OTHERS= \
/dev/term \
/tmp \
+ /etc/dladm \
/etc/mail \
/etc/mail/cf \
/etc/mail/cf/cf \
@@ -538,6 +539,9 @@ $(ROOT)/etc/mail/cf/sh \
$(ROOT)/usr/mail \
$(ROOT)/var/mail := GROUP= mail
+$(ROOT)/etc/dladm := OWNER= dladm
+$(ROOT)/etc/dladm := GROUP= sys
+
$(ROOT)/var/spool/lp:= OWNER= lp
$(ROOT)/var/spool/lp:= GROUP= lp
$(ROOT)/var/spool/lp:= DIRMODE= 775
diff --git a/usr/src/cmd/Adm/sun/passwd b/usr/src/cmd/Adm/sun/passwd
index f2766c3867..a56c20c725 100644
--- a/usr/src/cmd/Adm/sun/passwd
+++ b/usr/src/cmd/Adm/sun/passwd
@@ -6,6 +6,7 @@ adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
+dladm:x:15:3:Datalink Admin:/:
smmsp:x:25:25:SendMail Message Submission Program:/:
listen:x:37:4:Network Admin:/usr/net/nls:
gdm:x:50:50:GDM Reserved UID:/:
diff --git a/usr/src/cmd/Adm/sun/shadow b/usr/src/cmd/Adm/sun/shadow
index 7be836e6f5..c63c4dc66a 100644
--- a/usr/src/cmd/Adm/sun/shadow
+++ b/usr/src/cmd/Adm/sun/shadow
@@ -6,6 +6,7 @@ adm:NP:6445::::::
lp:NP:6445::::::
uucp:NP:6445::::::
nuucp:NP:6445::::::
+dladm:*LK*:::::::
smmsp:NP:6445::::::
listen:*LK*:::::::
gdm:*LK*:::::::
diff --git a/usr/src/cmd/bsmrecord/audit_record_attr.txt b/usr/src/cmd/bsmrecord/audit_record_attr.txt
index 6c3b3e63f2..3e6b794719 100644
--- a/usr/src/cmd/bsmrecord/audit_record_attr.txt
+++ b/usr/src/cmd/bsmrecord/audit_record_attr.txt
@@ -2600,10 +2600,28 @@ label=AUE_remove
format=uauth1:[text2]:text3
comment=authorization used:mount point:device
label=AUE_pool_import
- program=hald
- format=uauth1:text2:text3
- comment=authorization used:pool:device
+ program=hald
+ format=uauth1:text2:text3
+ comment=authorization used:pool:device
label=AUE_pool_export
- program=hald
- format=uauth1:text2:text3
- comment=authorization used:pool:device
+ program=hald
+ format=uauth1:text2:text3
+ comment=authorization used:pool:device
+
+label=AUE_dladm_create_secobj
+ program=/usr/sbin/dladm
+ title:create wifi security object
+ see=dladm(1M)
+ format=uauth1:text2:text3
+ comment=authorization used:
+ comment=object class name:
+ comment=object name
+
+label=AUE_dladm_delete_secobj
+ program=/usr/sbin/dladm
+ title:delete wifi security object
+ see=dladm(1M)
+ format=uauth1:text2:text3
+ comment=authorization used:
+ comment=object class name:
+ comment=object name
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers b/usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers
index cf50a88824..3323d5877c 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers
+++ b/usr/src/cmd/cmd-inet/usr.sbin/in.ftpd/ftpusers
@@ -10,6 +10,7 @@ adm
lp
uucp
nuucp
+dladm
smmsp
listen
gdm
diff --git a/usr/src/cmd/dladm/Makefile b/usr/src/cmd/dladm/Makefile
index 0923fece9c..711792ee34 100644
--- a/usr/src/cmd/dladm/Makefile
+++ b/usr/src/cmd/dladm/Makefile
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -20,33 +19,48 @@
# CDDL HEADER END
#
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
#
PROG= dladm
+CFGFILES= aggregation.conf linkprop.conf secobj.conf
-ROOTFS_PROG= $(PROG)
-CONFIGFILES= aggregation.conf
-
-POFILE= $(PROG).po
+ROOTFS_PROG= $(PROG)
+ROOTCFGDIR= $(ROOTETC)/dladm
+ROOTCFGFILES= $(CFGFILES:%=$(ROOTCFGDIR)/%)
include ../Makefile.cmd
-LDLIBS += -ldladm -lmacadm -ldlpi -llaadm -lkstat
+LDLIBS += -ldladm -lmacadm -ldlpi -llaadm -lkstat -lwladm -lsecdb -lbsm \
+ -linetutil
-ICONFIGFILES= $(CONFIGFILES:%=$(ROOTETC)/%)
+$(ROOTCFGFILES) := OWNER= dladm
+$(ROOTCFGFILES) := GROUP= sys
-$(ICONFIGFILES):= FILEMODE= 644
-$(ICONFIGFILES):= OWNER= root
-$(ICONFIGFILES):= GROUP= sys
+$(ROOTCFGDIR)/aggregation.conf $(ROOTCFGDIR)/linkprop.conf := FILEMODE= 644
+$(ROOTCFGDIR)/secobj.conf := FILEMODE= 600
.KEEP_STATE:
all: $(ROOTFS_PROG)
+install: all $(ROOTSBINPROG) $(ROOTCFGDIR) $(ROOTCFGFILES)
+ $(RM) $(ROOTUSRSBINPROG)
+ -$(SYMLINK) ../../sbin/$(PROG) $(ROOTUSRSBINPROG)
+
+clean:
+
+lint: lint_PROG
+
+$(ROOTCFGDIR):
+ $(INS.dir)
+
+$(ROOTCFGDIR)/%: $(ROOTCFGDIR) %
+ $(INS.file)
+
#
# Message catalog
#
@@ -59,12 +73,4 @@ $(POFILE): $(PROG).c
sed "/^domain/d" messages.po > $@
$(RM) messages.po $(POFILE).i
-install: all $(ROOTSBINPROG) $(ICONFIGFILES)
- $(RM) $(ROOTUSRSBINPROG)
- -$(SYMLINK) ../../sbin/$(PROG) $(ROOTUSRSBINPROG)
-
-clean:
-
-lint: lint_PROG
-
include ../Makefile.targ
diff --git a/usr/src/cmd/dladm/dladm.c b/usr/src/cmd/dladm/dladm.c
index 1167cb1603..d344b3e59b 100644
--- a/usr/src/cmd/dladm/dladm.c
+++ b/usr/src/cmd/dladm/dladm.c
@@ -26,7 +26,9 @@
#pragma ident "%Z%%M% %I% %E% SMI"
#include <stdio.h>
+#include <ctype.h>
#include <locale.h>
+#include <signal.h>
#include <stdarg.h>
#include <stdlib.h>
#include <fcntl.h>
@@ -38,11 +40,19 @@
#include <getopt.h>
#include <unistd.h>
#include <priv.h>
+#include <termios.h>
+#include <pwd.h>
+#include <auth_attr.h>
+#include <auth_list.h>
#include <libintl.h>
#include <libdlpi.h>
#include <libdladm.h>
#include <liblaadm.h>
#include <libmacadm.h>
+#include <libwladm.h>
+#include <libinetutil.h>
+#include <bsm/adt.h>
+#include <bsm/adt_event.h>
#define AGGR_DRV "aggr"
#define MAXPORT 256
@@ -95,16 +105,15 @@ static port_state_t port_states[] = {
#define NPORTSTATES (sizeof (port_states) / sizeof (port_state_t))
-static void do_show_link(int, char **);
-static void do_create_aggr(int, char **);
-static void do_delete_aggr(int, char **);
-static void do_add_aggr(int, char **);
-static void do_remove_aggr(int, char **);
-static void do_modify_aggr(int, char **);
-static void do_show_aggr(int, char **);
-static void do_up_aggr(int, char **);
-static void do_down_aggr(int, char **);
-static void do_show_dev(int, char **);
+typedef void cmdfunc_t(int, char **);
+
+static cmdfunc_t do_show_link, do_show_dev, do_show_wifi;
+static cmdfunc_t do_create_aggr, do_delete_aggr, do_add_aggr, do_remove_aggr;
+static cmdfunc_t do_modify_aggr, do_show_aggr, do_up_aggr, do_down_aggr;
+static cmdfunc_t do_scan_wifi, do_connect_wifi, do_disconnect_wifi;
+static cmdfunc_t do_show_linkprop, do_set_linkprop, do_reset_linkprop;
+static cmdfunc_t do_create_secobj, do_delete_secobj, do_show_secobj;
+static cmdfunc_t do_init_linkprop, do_init_secobj;
static void link_stats(const char *, uint32_t);
static void aggr_stats(uint16_t, uint32_t);
@@ -119,41 +128,81 @@ static void stats_total(pktsum_t *, pktsum_t *, pktsum_t *);
static void stats_diff(pktsum_t *, pktsum_t *, pktsum_t *);
typedef struct cmd {
- char *c_name;
- void (*c_fn)(int, char **);
+ char *c_name;
+ cmdfunc_t *c_fn;
} cmd_t;
static cmd_t cmds[] = {
- { "show-link", do_show_link },
- { "show-dev", do_show_dev },
-
- { "create-aggr", do_create_aggr },
- { "delete-aggr", do_delete_aggr },
- { "add-aggr", do_add_aggr },
- { "remove-aggr", do_remove_aggr },
- { "modify-aggr", do_modify_aggr },
- { "show-aggr", do_show_aggr },
- { "up-aggr", do_up_aggr },
- { "down-aggr", do_down_aggr }
+ { "show-link", do_show_link },
+ { "show-dev", do_show_dev },
+ { "create-aggr", do_create_aggr },
+ { "delete-aggr", do_delete_aggr },
+ { "add-aggr", do_add_aggr },
+ { "remove-aggr", do_remove_aggr },
+ { "modify-aggr", do_modify_aggr },
+ { "show-aggr", do_show_aggr },
+ { "up-aggr", do_up_aggr },
+ { "down-aggr", do_down_aggr },
+ { "scan-wifi", do_scan_wifi },
+ { "connect-wifi", do_connect_wifi },
+ { "disconnect-wifi", do_disconnect_wifi },
+ { "show-wifi", do_show_wifi },
+ { "show-linkprop", do_show_linkprop },
+ { "set-linkprop", do_set_linkprop },
+ { "reset-linkprop", do_reset_linkprop },
+ { "create-secobj", do_create_secobj },
+ { "delete-secobj", do_delete_secobj },
+ { "show-secobj", do_show_secobj },
+ { "init-linkprop", do_init_linkprop },
+ { "init-secobj", do_init_secobj }
};
static const struct option longopts[] = {
- {"vlan-id", required_argument, 0, 'v'},
- {"dev", required_argument, 0, 'd'},
- {"policy", required_argument, 0, 'P'},
- {"lacp-mode", required_argument, 0, 'l'},
- {"lacp-timer", required_argument, 0, 'T'},
- {"unicast", required_argument, 0, 'u'},
- {"statistics", no_argument, 0, 's'},
- {"interval", required_argument, 0, 'i'},
- {"lacp", no_argument, 0, 'L'},
- {"temporary", no_argument, 0, 't'},
- {"root-dir", required_argument, 0, 'r'},
- {"parseable", no_argument, 0, 'p'},
+ {"vlan-id", required_argument, 0, 'v' },
+ {"dev", required_argument, 0, 'd' },
+ {"policy", required_argument, 0, 'P' },
+ {"lacp-mode", required_argument, 0, 'l' },
+ {"lacp-timer", required_argument, 0, 'T' },
+ {"unicast", required_argument, 0, 'u' },
+ {"statistics", no_argument, 0, 's' },
+ {"interval", required_argument, 0, 'i' },
+ {"lacp", no_argument, 0, 'L' },
+ {"temporary", no_argument, 0, 't' },
+ {"root-dir", required_argument, 0, 'r' },
+ {"parseable", no_argument, 0, 'p' },
+ { 0, 0, 0, 0 }
+};
+
+static const struct option prop_longopts[] = {
+ {"temporary", no_argument, 0, 't' },
+ {"root-dir", required_argument, 0, 'R' },
+ {"prop", required_argument, 0, 'p' },
+ {"parseable", no_argument, 0, 'c' },
+ {"persistent", no_argument, 0, 'P' },
+ { 0, 0, 0, 0 }
+};
+
+static const struct option wifi_longopts[] = {
+ {"parseable", no_argument, 0, 'p' },
+ {"output", required_argument, 0, 'o' },
+ {"essid", required_argument, 0, 'e' },
+ {"bsstype", required_argument, 0, 'b' },
+ {"mode", required_argument, 0, 'm' },
+ {"key", required_argument, 0, 'k' },
+ {"sec", required_argument, 0, 's' },
+ {"auth", required_argument, 0, 'a' },
+ {"create-ibss", required_argument, 0, 'c' },
+ {"timeout", required_argument, 0, 'T' },
+ {"all-links", no_argument, 0, 'a' },
+ {"temporary", no_argument, 0, 't' },
+ {"root-dir", required_argument, 0, 'R' },
+ {"persistent", no_argument, 0, 'P' },
+ {"file", required_argument, 0, 'f' },
{ 0, 0, 0, 0 }
};
static char *progname;
+static sig_atomic_t signalled;
#define PRINT_ERR_DIAG(s, diag, func) { \
(void) fprintf(stderr, gettext(s), progname, strerror(errno)); \
@@ -165,18 +214,36 @@ static char *progname;
static void
usage(void)
{
- (void) fprintf(stderr, gettext(
- "usage: dladm create-aggr [-t] [-R <root-dir>] [-P <policy>]\n"
- " [-l <mode>] [-T <time>]\n"
- " [-u <address>] -d <dev> ... <key>\n"
- " delete-aggr [-t] [-R <root-dir>] <key>\n"
- " add-aggr [-t] [-R <root-dir>] -d <dev> ... <key>\n"
- " remove-aggr [-t] [-R <root-dir>] -d <dev> ... <key>\n"
- " modify-aggr [-t] [-R <root-dir>] [-P <policy>]\n"
- " [-l <mode>] [-T <time>] [-u <address>] <key>\n"
- " show-aggr [-L] [-s] [-i <interval>] [-p] [<key>]\n"
- " show-dev [-s] [-i <interval>] [-p] [<dev>]\n"
- " show-link [-s] [-i <interval>] [-p] [<name>]\n"));
+ (void) fprintf(stderr, gettext("usage: dladm <subcommand> <args> ...\n"
+ "\tshow-link [-p] [-s [-i <interval>]] [<name>]\n"
+ "\tshow-dev [-p] [-s [-i <interval>]] [<dev>]\n"
+ "\n"
+ "\tcreate-aggr [-t] [-R <root-dir>] [-P <policy>] [-l <mode>]\n"
+ "\t [-T <time>] [-u <address>] -d <dev> ... <key>\n"
+ "\tmodify-aggr [-t] [-R <root-dir>] [-P <policy>] [-l <mode>]\n"
+ "\t [-T <time>] [-u <address>] <key>\n"
+ "\tdelete-aggr [-t] [-R <root-dir>] <key>\n"
+ "\tadd-aggr [-t] [-R <root-dir>] -d <dev> ... <key>\n"
+ "\tremove-aggr [-t] [-R <root-dir>] -d <dev> ... <key>\n"
+ "\tshow-aggr [-pL][-s [-i <interval>]] [<key>]\n"
+ "\n"
+ "\tscan-wifi [-p] [-o <field>,...] [<name>]\n"
+ "\tconnect-wifi [-e <essid>] [-i <bssid>] [-k <key>,...]"
+ " [-s wep]\n"
+ "\t [-a open|shared] [-b bss|ibss] [-c] [-m a|b|g]\n"
+ "\t [-T <time>] [<name>]\n"
+ "\tdisconnect-wifi [-a] [<name>]\n"
+ "\tshow-wifi [-p] [-o <field>,...] [<name>]\n"
+ "\n"
+ "\tset-linkprop [-t] [-R <root-dir>] -p <prop>=<value>[,...]"
+ " <name>\n"
+ "\treset-linkprop [-t] [-R <root-dir>] [-p <prop>,...] <name>\n"
+ "\tshow-linkprop [-cP][-p <prop>,...] <name>\n"
+ "\n"
+ "\tcreate-secobj [-t] [-R <root-dir>] [-f <file>] -c <class>"
+ " <secobj>\n"
+ "\tdelete-secobj [-t] [-R <root-dir>] <secobj>[,...]\n"
+ "\tshow-secobj [-pP][<secobj>,...]\n"));
exit(1);
}
@@ -1930,3 +1997,1932 @@ mac_link_duplex(const char *dev)
return (duplex_str);
}
+
+#define WIFI_CMD_SCAN 0x00000001
+#define WIFI_CMD_SHOW 0x00000002
+#define WIFI_CMD_ALL (WIFI_CMD_SCAN | WIFI_CMD_SHOW)
+typedef struct wifi_field {
+ const char *wf_name;
+ const char *wf_header;
+ uint_t wf_width;
+ uint_t wf_mask;
+ uint_t wf_cmdtype;
+} wifi_field_t;
+
+static wifi_field_t wifi_fields[] = {
+{ "link", "LINK", 10, 0, WIFI_CMD_ALL},
+{ "essid", "ESSID", 19, WLADM_WLAN_ATTR_ESSID, WIFI_CMD_ALL},
+{ "bssid", "BSSID/IBSSID", 17, WLADM_WLAN_ATTR_BSSID, WIFI_CMD_ALL},
+{ "ibssid", "BSSID/IBSSID", 17, WLADM_WLAN_ATTR_BSSID, WIFI_CMD_ALL},
+{ "mode", "MODE", 6, WLADM_WLAN_ATTR_MODE, WIFI_CMD_ALL},
+{ "speed", "SPEED", 6, WLADM_WLAN_ATTR_SPEED, WIFI_CMD_ALL},
+{ "auth", "AUTH", 8, WLADM_WLAN_ATTR_AUTH, WIFI_CMD_ALL},
+{ "bsstype", "BSSTYPE", 8, WLADM_WLAN_ATTR_BSSTYPE, WIFI_CMD_ALL},
+{ "sec", "SEC", 6, WLADM_WLAN_ATTR_SECMODE, WIFI_CMD_ALL},
+{ "status", "STATUS", 17, WLADM_LINK_ATTR_STATUS, WIFI_CMD_SHOW},
+{ "strength", "STRENGTH", 10, WLADM_WLAN_ATTR_STRENGTH, WIFI_CMD_ALL}}
+;
+
+static char *all_scan_wifi_fields =
+ "link,essid,bssid,sec,strength,mode,speed,auth,bsstype";
+static char *all_show_wifi_fields =
+ "link,status,essid,sec,strength,mode,speed,auth,bssid,bsstype";
+static char *def_scan_wifi_fields =
+ "link,essid,bssid,sec,strength,mode,speed";
+static char *def_show_wifi_fields =
+ "link,status,essid,sec,strength,mode,speed";
+
+#define WIFI_MAX_FIELDS (sizeof (wifi_fields) / sizeof (wifi_field_t))
+#define WIFI_MAX_FIELD_LEN 32
+
+typedef struct {
+ char *s_buf;
+ char **s_fields; /* array of pointer to the fields in s_buf */
+ uint_t s_nfields; /* the number of fields in s_buf */
+} split_t;
+
+/*
+ * Free the split_t structure pointed to by `sp'.
+ */
+static void
+splitfree(split_t *sp)
+{
+ free(sp->s_buf);
+ free(sp->s_fields);
+ free(sp);
+}
+
+/*
+ * Split `str' into at most `maxfields' fields, each field at most `maxlen' in
+ * length. Return a pointer to a split_t containing the split fields, or NULL
+ * on failure.
+ */
+static split_t *
+split(const char *str, uint_t maxfields, uint_t maxlen)
+{
+ char *field, *token, *lasts = NULL;
+ split_t *sp;
+
+ if (*str == '\0' || maxfields == 0 || maxlen == 0)
+ return (NULL);
+
+ sp = calloc(sizeof (split_t), 1);
+ if (sp == NULL)
+ return (NULL);
+
+ sp->s_buf = strdup(str);
+ sp->s_fields = malloc(sizeof (char *) * maxfields);
+ if (sp->s_buf == NULL || sp->s_fields == NULL)
+ goto fail;
+
+ token = sp->s_buf;
+ while ((field = strtok_r(token, ",", &lasts)) != NULL) {
+ if (sp->s_nfields == maxfields || strlen(field) > maxlen)
+ goto fail;
+ token = NULL;
+ sp->s_fields[sp->s_nfields++] = field;
+ }
+ return (sp);
+fail:
+ splitfree(sp);
+ return (NULL);
+}
+
+static int
+parse_wifi_fields(char *str, wifi_field_t ***fields, uint_t *countp,
+ uint_t cmdtype)
+{
+ uint_t i, j;
+ wifi_field_t **wf = NULL;
+ split_t *sp;
+ boolean_t good_match = B_FALSE;
+
+ if (cmdtype == WIFI_CMD_SCAN) {
+ if (str == NULL)
+ str = def_scan_wifi_fields;
+ if (strcasecmp(str, "all") == 0)
+ str = all_scan_wifi_fields;
+ } else if (cmdtype == WIFI_CMD_SHOW) {
+ if (str == NULL)
+ str = def_show_wifi_fields;
+ if (strcasecmp(str, "all") == 0)
+ str = all_show_wifi_fields;
+ } else {
+ return (-1);
+ }
+
+ sp = split(str, WIFI_MAX_FIELDS, WIFI_MAX_FIELD_LEN);
+ if (sp == NULL)
+ return (-1);
+
+ wf = malloc(sp->s_nfields * sizeof (wifi_field_t *));
+ if (wf == NULL)
+ goto fail;
+
+ for (i = 0; i < sp->s_nfields; i++) {
+ for (j = 0; j < WIFI_MAX_FIELDS; j++) {
+ if (strcasecmp(sp->s_fields[i],
+ wifi_fields[j].wf_name) == 0) {
+ good_match = wifi_fields[i].
+ wf_cmdtype & cmdtype;
+ break;
+ }
+ }
+ if (!good_match)
+ goto fail;
+
+ good_match = B_FALSE;
+ wf[i] = &wifi_fields[j];
+ }
+ *countp = i;
+ *fields = wf;
+ splitfree(sp);
+ return (0);
+fail:
+ free(wf);
+ splitfree(sp);
+ return (-1);
+}
+
+typedef struct print_wifi_state {
+ const char *ws_link;
+ boolean_t ws_parseable;
+ boolean_t ws_header;
+ wifi_field_t **ws_fields;
+ uint_t ws_nfields;
+ boolean_t ws_lastfield;
+ uint_t ws_overflow;
+} print_wifi_state_t;
+
+static void
+print_wifi_head(print_wifi_state_t *statep)
+{
+ int i;
+ wifi_field_t *wfp;
+
+ for (i = 0; i < statep->ws_nfields; i++) {
+ wfp = statep->ws_fields[i];
+ if (i + 1 < statep->ws_nfields)
+ (void) printf("%-*s ", wfp->wf_width, wfp->wf_header);
+ else
+ (void) printf("%s", wfp->wf_header);
+ }
+ (void) printf("\n");
+}
+
+static void
+print_wifi_field(print_wifi_state_t *statep, wifi_field_t *wfp,
+ const char *value)
+{
+ uint_t width = wfp->wf_width;
+ uint_t valwidth = strlen(value);
+ uint_t compress;
+
+ if (statep->ws_parseable) {
+ (void) printf("%s=\"%s\"", wfp->wf_header, value);
+ } else {
+ if (value[0] == '\0')
+ value = "--";
+ if (statep->ws_lastfield) {
+ (void) printf("%s", value);
+ return;
+ }
+
+ if (valwidth > width) {
+ statep->ws_overflow += valwidth - width;
+ } else if (valwidth < width && statep->ws_overflow > 0) {
+ compress = min(statep->ws_overflow, width - valwidth);
+ statep->ws_overflow -= compress;
+ width -= compress;
+ }
+ (void) printf("%-*s", width, value);
+ }
+
+ if (!statep->ws_lastfield)
+ (void) putchar(' ');
+}
+
+static void
+print_wlan_attr(print_wifi_state_t *statep, wifi_field_t *wfp,
+ wladm_wlan_attr_t *attrp)
+{
+ char buf[WLADM_STRSIZE];
+ const char *str = "";
+
+ if (wfp->wf_mask == 0) {
+ print_wifi_field(statep, wfp, statep->ws_link);
+ return;
+ }
+
+ if ((wfp->wf_mask & attrp->wa_valid) == 0) {
+ print_wifi_field(statep, wfp, "");
+ return;
+ }
+
+ switch (wfp->wf_mask) {
+ case WLADM_WLAN_ATTR_ESSID:
+ str = wladm_essid2str(&attrp->wa_essid, buf);
+ break;
+ case WLADM_WLAN_ATTR_BSSID:
+ str = wladm_bssid2str(&attrp->wa_bssid, buf);
+ break;
+ case WLADM_WLAN_ATTR_SECMODE:
+ str = wladm_secmode2str(&attrp->wa_secmode, buf);
+ break;
+ case WLADM_WLAN_ATTR_STRENGTH:
+ str = wladm_strength2str(&attrp->wa_strength, buf);
+ break;
+ case WLADM_WLAN_ATTR_MODE:
+ str = wladm_mode2str(&attrp->wa_mode, buf);
+ break;
+ case WLADM_WLAN_ATTR_SPEED:
+ str = wladm_speed2str(&attrp->wa_speed, buf);
+ (void) strlcat(buf, "Mb", sizeof (buf));
+ break;
+ case WLADM_WLAN_ATTR_AUTH:
+ str = wladm_auth2str(&attrp->wa_auth, buf);
+ break;
+ case WLADM_WLAN_ATTR_BSSTYPE:
+ str = wladm_bsstype2str(&attrp->wa_bsstype, buf);
+ break;
+ }
+
+ print_wifi_field(statep, wfp, str);
+}
+
+static boolean_t
+print_scan_results(void *arg, wladm_wlan_attr_t *attrp)
+{
+ print_wifi_state_t *statep = arg;
+ int i;
+
+ if (statep->ws_header) {
+ statep->ws_header = B_FALSE;
+ if (!statep->ws_parseable)
+ print_wifi_head(statep);
+ }
+
+ statep->ws_overflow = 0;
+ for (i = 0; i < statep->ws_nfields; i++) {
+ statep->ws_lastfield = (i + 1 == statep->ws_nfields);
+ print_wlan_attr(statep, statep->ws_fields[i], attrp);
+ }
+ (void) putchar('\n');
+ return (B_TRUE);
+}
+
+static boolean_t
+scan_wifi(void *arg, const char *link)
+{
+ char errmsg[WLADM_STRSIZE];
+ print_wifi_state_t *statep = arg;
+ wladm_status_t status;
+
+ statep->ws_link = link;
+ status = wladm_scan(link, statep, print_scan_results);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot scan link '%s': %s\n"),
+ progname, link, wladm_status2str(status, errmsg));
+ exit(1);
+ }
+ return (B_TRUE);
+}
+
+static void
+print_link_attr(print_wifi_state_t *statep, wifi_field_t *wfp,
+ wladm_link_attr_t *attrp)
+{
+ char buf[WLADM_STRSIZE];
+ const char *str = "";
+
+ if (strcmp(wfp->wf_name, "status") == 0) {
+ if ((wfp->wf_mask & attrp->la_valid) != 0)
+ str = wladm_linkstatus2str(&attrp->la_status, buf);
+ print_wifi_field(statep, wfp, str);
+ return;
+ }
+ print_wlan_attr(statep, wfp, &attrp->la_wlan_attr);
+}
+
+static boolean_t
+show_wifi(void *arg, const char *link)
+{
+ int i;
+ char buf[WLADM_STRSIZE];
+ print_wifi_state_t *statep = arg;
+ wladm_link_attr_t attr;
+ wladm_status_t status;
+
+ status = wladm_get_link_attr(link, &attr);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: cannot get link "
+ "attributes for '%s': %s\n"), progname, link,
+ wladm_status2str(status, buf));
+ exit(1);
+ }
+
+ if (statep->ws_header) {
+ statep->ws_header = B_FALSE;
+ if (!statep->ws_parseable)
+ print_wifi_head(statep);
+ }
+
+ statep->ws_link = link;
+ statep->ws_overflow = 0;
+ for (i = 0; i < statep->ws_nfields; i++) {
+ statep->ws_lastfield = (i + 1 == statep->ws_nfields);
+ print_link_attr(statep, statep->ws_fields[i], &attr);
+ }
+ (void) putchar('\n');
+ return (B_TRUE);
+}
+
+static void
+do_display_wifi(int argc, char **argv, int cmd)
+{
+ int option;
+ char errmsg[WLADM_STRSIZE];
+ char *fields_str = NULL;
+ wifi_field_t **fields;
+ boolean_t (*callback)(void *, const char *);
+ uint_t nfields;
+ print_wifi_state_t state;
+ wladm_status_t status;
+
+ if (cmd == WIFI_CMD_SCAN)
+ callback = scan_wifi;
+ else if (cmd == WIFI_CMD_SHOW)
+ callback = show_wifi;
+ else
+ return;
+
+ state.ws_link = NULL;
+ state.ws_parseable = B_FALSE;
+ state.ws_header = B_TRUE;
+ opterr = 0;
+ while ((option = getopt_long(argc, argv, ":o:p",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'o':
+ fields_str = optarg;
+ break;
+ case 'p':
+ state.ws_parseable = B_TRUE;
+ if (fields_str == NULL)
+ fields_str = "all";
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ state.ws_link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (parse_wifi_fields(fields_str, &fields, &nfields, cmd) < 0) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid field(s) specified\n"),
+ progname);
+ exit(1);
+ }
+ state.ws_fields = fields;
+ state.ws_nfields = nfields;
+
+ if (state.ws_link == NULL) {
+ status = wladm_walk(&state, callback);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: %s\n"),
+ progname, wladm_status2str(status, errmsg));
+ exit(1);
+ }
+ } else {
+ (void) (*callback)(&state, state.ws_link);
+ }
+ free(fields);
+}
+
+static void
+do_scan_wifi(int argc, char **argv)
+{
+ do_display_wifi(argc, argv, WIFI_CMD_SCAN);
+}
+
+static void
+do_show_wifi(int argc, char **argv)
+{
+ do_display_wifi(argc, argv, WIFI_CMD_SHOW);
+}
+
+typedef struct wlan_count_attr {
+ uint_t wc_count;
+ const char *wc_link;
+} wlan_count_attr_t;
+
+static boolean_t
+do_count_wlan(void *arg, const char *link)
+{
+ wlan_count_attr_t *cp = (wlan_count_attr_t *)arg;
+
+ if (cp->wc_count == 0)
+ cp->wc_link = strdup(link);
+ cp->wc_count++;
+ return (B_TRUE);
+}
+
+static int
+parse_wep_keys(char *str, wladm_wep_key_t **keys, uint_t *key_countp)
+{
+ uint_t i;
+ split_t *sp;
+ wladm_wep_key_t *wk;
+
+ sp = split(str, WLADM_MAX_WEPKEYS, WLADM_MAX_WEPKEYNAME_LEN);
+ if (sp == NULL)
+ return (-1);
+
+ wk = malloc(sp->s_nfields * sizeof (wladm_wep_key_t));
+ if (wk == NULL)
+ goto fail;
+
+ for (i = 0; i < sp->s_nfields; i++) {
+ char *s;
+ dladm_secobj_class_t class;
+ dladm_status_t status;
+
+ (void) strlcpy(wk[i].wk_name, sp->s_fields[i],
+ WLADM_MAX_WEPKEYNAME_LEN);
+
+ wk[i].wk_idx = 1;
+ if ((s = strrchr(wk[i].wk_name, ':')) != NULL) {
+ if (s[1] == '\0' || s[2] != '\0' || !isdigit(s[1]))
+ goto fail;
+
+ wk[i].wk_idx = (uint_t)(s[1] - '0');
+ *s = '\0';
+ }
+ wk[i].wk_len = WLADM_MAX_WEPKEY_LEN;
+
+ status = dladm_get_secobj(wk[i].wk_name, &class,
+ wk[i].wk_val, &wk[i].wk_len, 0);
+ if (status != DLADM_STATUS_OK) {
+ if (status == DLADM_STATUS_NOTFOUND) {
+ status = dladm_get_secobj(wk[i].wk_name,
+ &class, wk[i].wk_val, &wk[i].wk_len,
+ DLADM_OPT_PERSIST);
+ }
+ if (status != DLADM_STATUS_OK)
+ goto fail;
+ }
+ }
+ *keys = wk;
+ *key_countp = i;
+ splitfree(sp);
+ return (0);
+fail:
+ free(wk);
+ splitfree(sp);
+ return (-1);
+}
+
+static void
+do_connect_wifi(int argc, char **argv)
+{
+ int option;
+ wladm_wlan_attr_t attr, *attrp;
+ wladm_status_t status = WLADM_STATUS_OK;
+ int timeout = WLADM_CONNECT_TIMEOUT_DEFAULT;
+ char errmsg[WLADM_STRSIZE];
+ const char *link = NULL;
+ char *endp = NULL;
+ wladm_wep_key_t *keys = NULL;
+ uint_t key_count = 0;
+ uint_t flags = 0;
+ wladm_secmode_t keysecmode = WLADM_SECMODE_NONE;
+
+ opterr = 0;
+ (void) memset(&attr, 0, sizeof (attr));
+ while ((option = getopt_long(argc, argv, ":e:i:a:m:b:s:k:T:c",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'e':
+ status = wladm_str2essid(optarg, &attr.wa_essid);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid ESSID '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_ESSID;
+ /*
+ * Try to connect without doing a scan.
+ */
+ flags |= WLADM_OPT_NOSCAN;
+ break;
+ case 'i':
+ status = wladm_str2bssid(optarg, &attr.wa_bssid);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid BSSID %s\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_BSSID;
+ break;
+ case 'a':
+ status = wladm_str2auth(optarg, &attr.wa_auth);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid authentication "
+ "mode '%s'\n"), progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_AUTH;
+ break;
+ case 'm':
+ status = wladm_str2mode(optarg, &attr.wa_mode);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid mode '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_MODE;
+ break;
+ case 'b':
+ status = wladm_str2bsstype(optarg, &attr.wa_bsstype);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid bsstype '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_BSSTYPE;
+ break;
+ case 's':
+ status = wladm_str2secmode(optarg, &attr.wa_secmode);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid security mode '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ attr.wa_valid |= WLADM_WLAN_ATTR_SECMODE;
+ break;
+ case 'k':
+ if (parse_wep_keys(optarg, &keys, &key_count) < 0) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid key(s) '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ keysecmode = WLADM_SECMODE_WEP;
+ break;
+ case 'T':
+ if (strcasecmp(optarg, "forever") == 0) {
+ timeout = -1;
+ break;
+ }
+ errno = 0;
+ timeout = (int)strtol(optarg, &endp, 10);
+ if (timeout < 0 || errno != 0 || *endp != '\0') {
+ (void) fprintf(stderr,
+ gettext("%s: invalid timeout value '%s'\n"),
+ progname, optarg);
+ exit(1);
+ }
+ break;
+ case 'c':
+ flags |= WLADM_OPT_CREATEIBSS;
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (keysecmode == WLADM_SECMODE_NONE) {
+ if ((attr.wa_valid & WLADM_WLAN_ATTR_SECMODE) != 0 &&
+ attr.wa_secmode == WLADM_SECMODE_WEP) {
+ (void) fprintf(stderr,
+ gettext("%s: key required for security mode "
+ "'wep'\n"), progname);
+ exit(1);
+ }
+ } else {
+ if ((attr.wa_valid & WLADM_WLAN_ATTR_SECMODE) != 0 &&
+ attr.wa_secmode != keysecmode) {
+ (void) fprintf(stderr,
+ gettext("%s: incompatible -s and -k options\n"),
+ progname);
+ exit(1);
+ }
+ }
+ attr.wa_secmode = keysecmode;
+ attr.wa_valid |= WLADM_WLAN_ATTR_SECMODE;
+
+ if (optind == (argc - 1))
+ link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (link == NULL) {
+ wlan_count_attr_t wcattr;
+
+ wcattr.wc_link = NULL;
+ wcattr.wc_count = 0;
+ (void) wladm_walk(&wcattr, do_count_wlan);
+ if (wcattr.wc_count == 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: no wifi links are available\n"), progname);
+ exit(1);
+ } else if (wcattr.wc_count > 1) {
+ (void) fprintf(stderr, gettext(
+ "%s: link name is required when more than "
+ "one link is available\n"), progname);
+ exit(1);
+ }
+ link = wcattr.wc_link;
+ }
+ attrp = (attr.wa_valid == 0) ? NULL : &attr;
+
+ status = wladm_connect(link, attrp, timeout, keys, key_count, flags);
+ if (status != WLADM_STATUS_OK) {
+ if ((flags & WLADM_OPT_NOSCAN) != 0) {
+ /*
+ * Redo the connect. This time with scanning
+ * and filtering.
+ */
+ flags &= ~WLADM_OPT_NOSCAN;
+ status = wladm_connect(link, attrp, timeout, keys,
+ key_count, flags);
+ if (status == WLADM_STATUS_OK) {
+ free(keys);
+ return;
+ }
+ }
+ if (status == WLADM_STATUS_NOTFOUND) {
+ if (attr.wa_valid == 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: no wifi networks are available\n"),
+ progname);
+ } else {
+ (void) fprintf(stderr, gettext("%s: no wifi "
+ "networks with the specified criteria "
+ "are available\n"), progname);
+ }
+ } else {
+ (void) fprintf(stderr, gettext("%s: cannot connect: %s"
+ "\n"), progname, wladm_status2str(status, errmsg));
+ }
+ exit(1);
+ }
+ free(keys);
+}
+
+/* ARGSUSED */
+static boolean_t
+do_all_disconnect_wifi(void *arg, const char *link)
+{
+ wladm_status_t status;
+ char errmsg[WLADM_STRSIZE];
+
+ status = wladm_disconnect(link);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: cannot disconnect link '%s': %s\n"),
+ progname, link, wladm_status2str(status, errmsg));
+ }
+ return (B_TRUE);
+}
+
+static void
+do_disconnect_wifi(int argc, char **argv)
+{
+ int option;
+ const char *link = NULL;
+ char errmsg[WLADM_STRSIZE];
+ boolean_t all_links = B_FALSE;
+ wladm_status_t status;
+ wlan_count_attr_t wcattr;
+
+ opterr = 0;
+ while ((option = getopt_long(argc, argv, ":a",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'a':
+ all_links = B_TRUE;
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (link == NULL) {
+ if (!all_links) {
+ wcattr.wc_link = NULL;
+ wcattr.wc_count = 0;
+ (void) wladm_walk(&wcattr, do_count_wlan);
+ if (wcattr.wc_count == 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: no wifi links are available\n"),
+ progname);
+ exit(1);
+ } else if (wcattr.wc_count > 1) {
+ (void) fprintf(stderr, gettext(
+ "%s: link name is required when more than "
+ "one link is available\n"), progname);
+ exit(1);
+ }
+ link = wcattr.wc_link;
+ } else {
+ (void) wladm_walk(&all_links, do_all_disconnect_wifi);
+ return;
+ }
+ }
+ status = wladm_disconnect(link);
+ if (status != WLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: cannot disconnect: %s\n"),
+ progname, wladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
+
+#define MAX_PROPS 32
+#define MAX_PROP_VALS 32
+#define MAX_PROP_LINE 512
+
+typedef struct prop_info {
+ char *pi_name;
+ char *pi_val[MAX_PROP_VALS];
+ uint_t pi_count;
+} prop_info_t;
+
+typedef struct prop_list {
+ prop_info_t pl_info[MAX_PROPS];
+ uint_t pl_count;
+ char *pl_buf;
+} prop_list_t;
+
+typedef struct show_linkprop_state {
+ const char *ls_link;
+ char *ls_line;
+ char **ls_propvals;
+ boolean_t ls_parseable;
+ boolean_t ls_persist;
+ boolean_t ls_header;
+} show_linkprop_state_t;
+
+static void
+free_props(prop_list_t *list)
+{
+ if (list != NULL) {
+ free(list->pl_buf);
+ free(list);
+ }
+}
+
+static int
+parse_props(char *str, prop_list_t **listp, boolean_t novalues)
+{
+ prop_list_t *list;
+ prop_info_t *pip;
+ char *buf, *curr;
+ int len, i;
+
+ list = malloc(sizeof (prop_list_t));
+ if (list == NULL)
+ return (-1);
+
+ list->pl_count = 0;
+ list->pl_buf = buf = strdup(str);
+ if (buf == NULL)
+ goto fail;
+
+ curr = buf;
+ len = strlen(buf);
+ pip = NULL;
+ for (i = 0; i < len; i++) {
+ char c = buf[i];
+ boolean_t match = (c == '=' || c == ',');
+
+ if (!match && i != len - 1)
+ continue;
+
+ if (match) {
+ buf[i] = '\0';
+ if (*curr == '\0')
+ goto fail;
+ }
+
+ if (pip != NULL && c != '=') {
+ if (pip->pi_count > MAX_PROP_VALS)
+ goto fail;
+
+ if (novalues)
+ goto fail;
+
+ pip->pi_val[pip->pi_count] = curr;
+ pip->pi_count++;
+ } else {
+ if (list->pl_count > MAX_PROPS)
+ goto fail;
+
+ pip = &list->pl_info[list->pl_count];
+ pip->pi_name = curr;
+ pip->pi_count = 0;
+ list->pl_count++;
+ if (c == ',')
+ pip = NULL;
+ }
+ curr = buf + i + 1;
+ }
+ *listp = list;
+ return (0);
+
+fail:
+ free_props(list);
+ return (-1);
+}
+
+static void
+print_linkprop_head(void)
+{
+ (void) printf("%-15s %-14s %-14s %-30s \n",
+ "PROPERTY", "VALUE", "DEFAULT", "POSSIBLE");
+}
+
+static void
+print_linkprop(show_linkprop_state_t *statep, const char *propname,
+ dladm_prop_type_t type, const char *typename, const char *format,
+ char **pptr)
+{
+ int i;
+ char *ptr, *lim;
+ char buf[DLADM_STRSIZE];
+ char *unknown = "?", *notsup = "";
+ char **propvals = statep->ls_propvals;
+ uint_t valcnt = MAX_PROP_VALS;
+ dladm_status_t status;
+
+ status = dladm_get_prop(statep->ls_link, type, propname,
+ propvals, &valcnt);
+ if (status != DLADM_STATUS_OK) {
+ if (status == DLADM_STATUS_NOTSUP || statep->ls_persist) {
+ valcnt = 1;
+ if (type == DLADM_PROP_VAL_CURRENT)
+ propvals = &unknown;
+ else
+ propvals = &notsup;
+ } else {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot get link property '%s': %s\n"),
+ progname, propname, dladm_status2str(status, buf));
+ exit(1);
+ }
+ }
+
+ ptr = buf;
+ lim = buf + DLADM_STRSIZE;
+ for (i = 0; i < valcnt; i++) {
+ if (propvals[i][0] == '\0' && !statep->ls_parseable)
+ ptr += snprintf(ptr, lim - ptr, "--,");
+ else
+ ptr += snprintf(ptr, lim - ptr, "%s,", propvals[i]);
+ if (ptr >= lim)
+ break;
+ }
+ if (valcnt > 0)
+ buf[strlen(buf) - 1] = '\0';
+
+ lim = statep->ls_line + MAX_PROP_LINE;
+ if (statep->ls_parseable) {
+ *pptr += snprintf(*pptr, lim - *pptr,
+ "%s=\"%s\" ", typename, buf);
+ } else {
+ *pptr += snprintf(*pptr, lim - *pptr, format, buf);
+ }
+}
+
+static boolean_t
+show_linkprop(void *arg, const char *propname)
+{
+ show_linkprop_state_t *statep = arg;
+ char *ptr = statep->ls_line;
+ char *lim = ptr + MAX_PROP_LINE;
+
+ if (statep->ls_parseable)
+ ptr += snprintf(ptr, lim - ptr, "PROPERTY=\"%s\" ", propname);
+ else
+ ptr += snprintf(ptr, lim - ptr, "%-15s ", propname);
+
+ print_linkprop(statep, propname,
+ statep->ls_persist ? DLADM_PROP_VAL_PERSISTENT :
+ DLADM_PROP_VAL_CURRENT, "VALUE", "%-14s ", &ptr);
+ print_linkprop(statep, propname, DLADM_PROP_VAL_DEFAULT,
+ "DEFAULT", "%-14s ", &ptr);
+ print_linkprop(statep, propname, DLADM_PROP_VAL_MODIFIABLE,
+ "POSSIBLE", "%-30s ", &ptr);
+
+ if (statep->ls_header) {
+ statep->ls_header = B_FALSE;
+ if (!statep->ls_parseable)
+ print_linkprop_head();
+ }
+ (void) printf("%s\n", statep->ls_line);
+ return (B_TRUE);
+}
+
+static void
+do_show_linkprop(int argc, char **argv)
+{
+ int i, option, fd;
+ char errmsg[DLADM_STRSIZE];
+ char linkname[MAXPATHLEN];
+ prop_list_t *proplist = NULL;
+ char *buf;
+ dladm_status_t status;
+ show_linkprop_state_t state;
+
+ opterr = 0;
+ state.ls_link = NULL;
+ state.ls_propvals = NULL;
+ state.ls_line = NULL;
+ state.ls_parseable = B_FALSE;
+ state.ls_persist = B_FALSE;
+ state.ls_header = B_TRUE;
+ while ((option = getopt_long(argc, argv, ":p:cP",
+ prop_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'p':
+ if (parse_props(optarg, &proplist, B_TRUE) < 0) {
+ (void) fprintf(stderr,
+ gettext("%s: invalid field(s) specified\n"),
+ progname);
+ exit(1);
+ }
+ break;
+ case 'c':
+ state.ls_parseable = B_TRUE;
+ break;
+ case 'P':
+ state.ls_persist = B_TRUE;
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ state.ls_link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (state.ls_link == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: link name must be specified\n"), progname);
+ exit(1);
+ }
+
+ /*
+ * When some WiFi links are opened for the first time, their hardware
+ * automatically scans for APs and does other slow operations. Thus,
+ * if there are no open links, the retrieval of link properties
+ * (below) will proceed slowly unless we hold the link open.
+ */
+ (void) snprintf(linkname, MAXPATHLEN, "/dev/%s", state.ls_link);
+ if ((fd = open(linkname, O_RDWR)) < 0) {
+ (void) fprintf(stderr,
+ gettext("%s: cannot open %s\n"), progname, state.ls_link);
+ exit(1);
+ }
+
+ buf = malloc((sizeof (char *) + DLADM_PROP_VAL_MAX) * MAX_PROP_VALS +
+ MAX_PROP_LINE);
+ if (buf == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: insufficient memory\n"), progname);
+ exit(1);
+ }
+ state.ls_propvals = (char **)(void *)buf;
+ for (i = 0; i < MAX_PROP_VALS; i++) {
+ state.ls_propvals[i] = buf + sizeof (char *) * MAX_PROP_VALS +
+ i * DLADM_PROP_VAL_MAX;
+ }
+ state.ls_line = buf +
+ (sizeof (char *) + DLADM_PROP_VAL_MAX) * MAX_PROP_VALS;
+
+ if (proplist != NULL) {
+ for (i = 0; i < proplist->pl_count; i++) {
+ if (!show_linkprop(&state,
+ proplist->pl_info[i].pi_name))
+ break;
+ }
+ } else {
+ status = dladm_walk_prop(state.ls_link, &state, show_linkprop);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: show-linkprop: %s\n"), progname,
+ dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ }
+ (void) close(fd);
+ free(buf);
+ free_props(proplist);
+}
+
+static dladm_status_t
+set_linkprop_persist(const char *link, const char *prop_name, char **prop_val,
+ uint_t val_cnt, boolean_t reset)
+{
+ dladm_status_t status;
+ char errmsg[DLADM_STRSIZE];
+
+ status = dladm_set_prop(link, prop_name, prop_val, val_cnt,
+ DLADM_OPT_PERSIST);
+
+ if (status != DLADM_STATUS_OK) {
+ if (reset) {
+ (void) fprintf(stderr, gettext("%s: warning: cannot "
+ "persistently reset link property '%s' on '%s': "
+ "%s\n"), progname, prop_name, link,
+ dladm_status2str(status, errmsg));
+ } else {
+ (void) fprintf(stderr, gettext("%s: warning: cannot "
+ "persistently set link property '%s' on '%s': "
+ "%s\n"), progname, prop_name, link,
+ dladm_status2str(status, errmsg));
+ }
+ }
+ return (status);
+}
+
+static void
+set_linkprop(int argc, char **argv, boolean_t reset)
+{
+ int i, option;
+ char errmsg[DLADM_STRSIZE];
+ const char *link = NULL;
+ prop_list_t *proplist = NULL;
+ boolean_t temp = B_FALSE;
+ dladm_status_t status = DLADM_STATUS_OK;
+
+ opterr = 0;
+ while ((option = getopt_long(argc, argv, ":p:R:t",
+ prop_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'p':
+ if (parse_props(optarg, &proplist, reset) < 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid link properties specified\n"),
+ progname);
+ exit(1);
+ }
+ break;
+ case 't':
+ temp = B_TRUE;
+ break;
+ case 'R':
+ status = dladm_set_rootdir(optarg);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid directory specified: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ link = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (link == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: link name must be specified\n"),
+ progname);
+ exit(1);
+ }
+
+ if (proplist == NULL) {
+ if (!reset) {
+ (void) fprintf(stderr,
+ gettext("%s: link property must be specified\n"),
+ progname);
+ exit(1);
+ }
+ status = dladm_set_prop(link, NULL, NULL, 0, DLADM_OPT_TEMP);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: warning: cannot reset link "
+ "properties on '%s': %s\n"),
+ progname, link, dladm_status2str(status, errmsg));
+ }
+ if (!temp) {
+ status = set_linkprop_persist(link, NULL, NULL, 0,
+ reset);
+ }
+ goto done;
+ }
+
+ for (i = 0; i < proplist->pl_count; i++) {
+ prop_info_t *pip = &proplist->pl_info[i];
+ char **val;
+ uint_t count;
+ dladm_status_t s;
+
+ if (reset) {
+ val = NULL;
+ count = 0;
+ } else {
+ val = pip->pi_val;
+ count = pip->pi_count;
+ if (count == 0) {
+ (void) fprintf(stderr, gettext(
+ "%s: value(s) for '%s' not specified\n"),
+ progname, pip->pi_name);
+ status = DLADM_STATUS_BADARG;
+ continue;
+ }
+ }
+ s = dladm_set_prop(link, pip->pi_name, val, count,
+ DLADM_OPT_TEMP);
+ if (s == DLADM_STATUS_OK) {
+ if (!temp) {
+ s = set_linkprop_persist(link,
+ pip->pi_name, val, count, reset);
+ if (s != DLADM_STATUS_OK)
+ status = s;
+ }
+ continue;
+ }
+ status = s;
+ switch (s) {
+ case DLADM_STATUS_NOTFOUND:
+ (void) fprintf(stderr,
+ gettext("%s: invalid link property '%s'\n"),
+ progname, pip->pi_name);
+ break;
+ case DLADM_STATUS_BADVAL: {
+ int j;
+ char *ptr, *lim;
+ char **propvals = NULL;
+ uint_t valcnt = MAX_PROP_VALS;
+
+ ptr = malloc((sizeof (char *) +
+ DLADM_PROP_VAL_MAX) * MAX_PROP_VALS +
+ MAX_PROP_LINE);
+
+ propvals = (char **)(void *)ptr;
+ if (propvals == NULL) {
+ (void) fprintf(stderr, gettext(
+ "%s: insufficient memory\n"), progname);
+ exit(1);
+ }
+ for (j = 0; j < MAX_PROP_VALS; j++) {
+ propvals[j] = ptr + sizeof (char *) *
+ MAX_PROP_VALS +
+ j * DLADM_PROP_VAL_MAX;
+ }
+ s = dladm_get_prop(link, DLADM_PROP_VAL_MODIFIABLE,
+ pip->pi_name, propvals, &valcnt);
+
+ ptr = errmsg;
+ lim = ptr + DLADM_STRSIZE;
+ *ptr = '\0';
+ for (j = 0; j < valcnt && s == DLADM_STATUS_OK; j++) {
+ ptr += snprintf(ptr, lim - ptr, "%s,",
+ propvals[j]);
+ if (ptr >= lim)
+ break;
+ }
+ if (ptr > errmsg)
+ *(ptr - 1) = '\0';
+ (void) fprintf(stderr, gettext(
+ "%s: link property '%s' must be one of: %s\n"),
+ progname, pip->pi_name, errmsg);
+ free(propvals);
+ break;
+ }
+ default:
+ if (reset) {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot reset link property '%s' on "
+ "'%s': %s\n"), progname, pip->pi_name, link,
+ dladm_status2str(s, errmsg));
+ } else {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot set link property '%s' on "
+ "'%s': %s\n"), progname, pip->pi_name, link,
+ dladm_status2str(s, errmsg));
+ }
+ break;
+ }
+ }
+done:
+ free_props(proplist);
+ if (status != DLADM_STATUS_OK)
+ exit(1);
+}
+
+static void
+do_set_linkprop(int argc, char **argv)
+{
+ set_linkprop(argc, argv, B_FALSE);
+}
+
+static void
+do_reset_linkprop(int argc, char **argv)
+{
+ set_linkprop(argc, argv, B_TRUE);
+}
+
+static int
+convert_secobj(char *buf, uint_t len, uint8_t *obj_val, uint_t *obj_lenp,
+ dladm_secobj_class_t class)
+{
+ int error = 0;
+
+ if (class != DLADM_SECOBJ_CLASS_WEP)
+ return (ENOENT);
+
+ switch (len) {
+ case 5: /* ASCII key sizes */
+ case 13:
+ (void) memcpy(obj_val, buf, len);
+ *obj_lenp = len;
+ break;
+ case 10: /* Hex key sizes, not preceded by 0x */
+ case 26:
+ error = hexascii_to_octet(buf, len, obj_val, obj_lenp);
+ break;
+ case 12: /* Hex key sizes, preceded by 0x */
+ case 28:
+ if (strncmp(buf, "0x", 2) != 0)
+ return (EINVAL);
+ error = hexascii_to_octet(buf + 2, len - 2, obj_val, obj_lenp);
+ break;
+ default:
+ return (EINVAL);
+ }
+ return (error);
+}
+
+/* ARGSUSED */
+static void
+defersig(int sig)
+{
+ signalled = sig;
+}
+
+static int
+get_secobj_from_tty(uint_t try, const char *objname, char *buf)
+{
+ uint_t len = 0;
+ int c;
+ struct termios stored, current;
+ void (*sigfunc)(int);
+
+ /*
+ * Turn off echo -- but before we do so, defer SIGINT handling
+ * so that a ^C doesn't leave the terminal corrupted.
+ */
+ sigfunc = signal(SIGINT, defersig);
+ (void) fflush(stdin);
+ (void) tcgetattr(0, &stored);
+ current = stored;
+ current.c_lflag &= ~(ICANON|ECHO);
+ current.c_cc[VTIME] = 0;
+ current.c_cc[VMIN] = 1;
+ (void) tcsetattr(0, TCSANOW, &current);
+again:
+ if (try == 1)
+ (void) printf(gettext("provide value for '%s': "), objname);
+ else
+ (void) printf(gettext("confirm value for '%s': "), objname);
+
+ (void) fflush(stdout);
+ while (signalled == 0) {
+ c = getchar();
+ if (c == '\n' || c == '\r') {
+ if (len != 0)
+ break;
+ (void) putchar('\n');
+ goto again;
+ }
+
+ buf[len++] = c;
+ if (len >= DLADM_SECOBJ_VAL_MAX - 1)
+ break;
+ (void) putchar('*');
+ }
+
+ (void) putchar('\n');
+ (void) fflush(stdin);
+
+ /*
+ * Restore terminal setting and handle deferred signals.
+ */
+ (void) tcsetattr(0, TCSANOW, &stored);
+
+ (void) signal(SIGINT, sigfunc);
+ if (signalled != 0)
+ (void) kill(getpid(), signalled);
+
+ return (len);
+}
+
+static int
+get_secobj_val(char *obj_name, uint8_t *obj_val, uint_t *obj_lenp,
+ dladm_secobj_class_t class, FILE *filep)
+{
+ int rval;
+ uint_t len, len2;
+ char buf[DLADM_SECOBJ_VAL_MAX], buf2[DLADM_SECOBJ_VAL_MAX];
+
+ if (filep == NULL) {
+ len = get_secobj_from_tty(1, obj_name, buf);
+ rval = convert_secobj(buf, len, obj_val, obj_lenp, class);
+ if (rval == 0) {
+ len2 = get_secobj_from_tty(2, obj_name, buf2);
+ if (len != len2 || memcmp(buf, buf2, len) != 0)
+ rval = ENOTSUP;
+ }
+ return (rval);
+ } else {
+ for (;;) {
+ if (fgets(buf, sizeof (buf), filep) == NULL)
+ break;
+ if (isspace(buf[0]))
+ continue;
+
+ len = strlen(buf);
+ if (buf[len - 1] == '\n') {
+ buf[len - 1] = '\0';
+ len--;
+ }
+ break;
+ }
+ (void) fclose(filep);
+ }
+ return (convert_secobj(buf, len, obj_val, obj_lenp, class));
+}
+
+static boolean_t
+check_auth(const char *auth)
+{
+ struct passwd *pw;
+
+ if ((pw = getpwuid(getuid())) == NULL)
+ return (B_FALSE);
+
+ return (chkauthattr(auth, pw->pw_name) != 0);
+}
+
+static void
+audit_secobj(char *auth, char *class, char *obj,
+ boolean_t success, boolean_t create)
+{
+ adt_session_data_t *ah;
+ adt_event_data_t *event;
+ au_event_t flag;
+ char *errstr;
+
+ if (create) {
+ flag = ADT_dladm_create_secobj;
+ errstr = "ADT_dladm_create_secobj";
+ } else {
+ flag = ADT_dladm_delete_secobj;
+ errstr = "ADT_dladm_delete_secobj";
+ }
+
+ if (adt_start_session(&ah, NULL, ADT_USE_PROC_DATA) != 0) {
+ (void) fprintf(stderr, "%s: adt_start_session: %s\n",
+ progname, strerror(errno));
+ exit(1);
+ }
+
+ if ((event = adt_alloc_event(ah, flag)) == NULL) {
+ (void) fprintf(stderr, "%s: adt_alloc_event"
+ "(%s): %s\n", progname, errstr,
+ strerror(errno));
+ exit(1);
+ }
+
+ /* fill in audit info */
+ if (create) {
+ event->adt_dladm_create_secobj.auth_used = auth;
+ event->adt_dladm_create_secobj.obj_class = class;
+ event->adt_dladm_create_secobj.obj_name = obj;
+ } else {
+ event->adt_dladm_delete_secobj.auth_used = auth;
+ event->adt_dladm_delete_secobj.obj_class = class;
+ event->adt_dladm_delete_secobj.obj_name = obj;
+ }
+
+ if (success) {
+ if (adt_put_event(event, ADT_SUCCESS, ADT_SUCCESS) != 0) {
+ (void) fprintf(stderr, "%s: adt_put_event"
+ "(%s, success): %s\n",
+ progname, errstr, strerror(errno));
+ exit(1);
+ }
+ } else {
+ if (adt_put_event(event, ADT_FAILURE,
+ ADT_FAIL_VALUE_AUTH) != 0) {
+ (void) fprintf(stderr, "%s: adt_put_event"
+ "(%s, failure): %s\n",
+ progname, errstr, strerror(errno));
+ exit(1);
+ }
+ }
+
+ adt_free_event(event);
+ (void) adt_end_session(ah);
+}
+
+#define MAX_SECOBJS 32
+#define MAX_SECOBJ_NAMELEN 32
+static void
+do_create_secobj(int argc, char **argv)
+{
+ int option, rval;
+ char errmsg[DLADM_STRSIZE];
+ FILE *filep = NULL;
+ char *obj_name = NULL;
+ char *class_name = NULL;
+ uint8_t obj_val[DLADM_SECOBJ_VAL_MAX];
+ uint_t obj_len;
+ boolean_t success, temp = B_FALSE;
+ dladm_status_t status;
+ dladm_secobj_class_t class = -1;
+ uid_t euid;
+
+ opterr = 0;
+ (void) memset(obj_val, 0, DLADM_SECOBJ_VAL_MAX);
+ while ((option = getopt_long(argc, argv, ":f:c:R:t",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'f':
+ euid = geteuid();
+ (void) seteuid(getuid());
+ filep = fopen(optarg, "r");
+ if (filep == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: cannot open %s: %s\n"),
+ progname, optarg, strerror(errno));
+ exit(1);
+ }
+ (void) seteuid(euid);
+ break;
+ case 'c':
+ class_name = optarg;
+ status = dladm_str2secobjclass(optarg, &class);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid secure object class '%s', "
+ "valid values are: wep\n"),
+ progname, optarg);
+ exit(1);
+ }
+ break;
+ case 't':
+ temp = B_TRUE;
+ break;
+ case 'R':
+ status = dladm_set_rootdir(optarg);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid directory specified: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1))
+ obj_name = argv[optind];
+ else if (optind != argc)
+ usage();
+
+ if (class == -1) {
+ (void) fprintf(stderr,
+ gettext("%s: secure object class required\n"),
+ progname);
+ exit(1);
+ }
+
+ if (obj_name == NULL) {
+ (void) fprintf(stderr,
+ gettext("%s: secure object name required\n"),
+ progname);
+ exit(1);
+ }
+
+ success = check_auth(LINK_SEC_AUTH);
+ audit_secobj(LINK_SEC_AUTH, class_name, obj_name, success, B_TRUE);
+ if (!success) {
+ (void) fprintf(stderr,
+ gettext("%s: authorization '%s' is required\n"),
+ progname, LINK_SEC_AUTH);
+ exit(1);
+ }
+
+ if ((rval = get_secobj_val(obj_name, obj_val, &obj_len,
+ class, filep)) != 0) {
+ switch (rval) {
+ case ENOENT:
+ (void) fprintf(stderr,
+ gettext("%s: invalid secure object class\n"),
+ progname);
+ break;
+ case EINVAL:
+ (void) fprintf(stderr,
+ gettext("%s: invalid secure object value\n"),
+ progname);
+ break;
+ case ENOTSUP:
+ (void) fprintf(stderr, gettext(
+ "%s: verification failed\n"), progname);
+ break;
+ default:
+ (void) fprintf(stderr, gettext(
+ "%s: invalid secure object: %s\n"),
+ progname, strerror(rval));
+ break;
+ }
+ exit(1);
+ }
+
+ status = dladm_set_secobj(obj_name, class, obj_val, obj_len,
+ DLADM_OPT_CREATE | DLADM_OPT_TEMP);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: could not create secure object '%s': %s\n"),
+ progname, obj_name, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ if (temp)
+ return;
+
+ status = dladm_set_secobj(obj_name, class, obj_val, obj_len,
+ DLADM_OPT_PERSIST);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: warning: could not persistently create "
+ "secure object '%s': %s\n"), progname, obj_name,
+ dladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
+
+static void
+do_delete_secobj(int argc, char **argv)
+{
+ int i, option;
+ char errmsg[DLADM_STRSIZE];
+ boolean_t temp = B_FALSE;
+ split_t *sp = NULL;
+ boolean_t success;
+ dladm_status_t status, pstatus;
+
+ opterr = 0;
+ status = pstatus = DLADM_STATUS_OK;
+ while ((option = getopt_long(argc, argv, "R:t",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 't':
+ temp = B_TRUE;
+ break;
+ case 'R':
+ status = dladm_set_rootdir(optarg);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid directory specified: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1)) {
+ sp = split(argv[optind], MAX_SECOBJS, MAX_SECOBJ_NAMELEN);
+ if (sp == NULL) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid secure object name(s): '%s'\n"),
+ progname, argv[optind]);
+ exit(1);
+ }
+ } else if (optind != argc)
+ usage();
+
+ if (sp == NULL || sp->s_nfields < 1) {
+ (void) fprintf(stderr,
+ gettext("%s: secure object name required\n"),
+ progname);
+ exit(1);
+ }
+
+ success = check_auth(LINK_SEC_AUTH);
+ audit_secobj(LINK_SEC_AUTH, "wep", argv[optind], success, B_FALSE);
+ if (!success) {
+ (void) fprintf(stderr,
+ gettext("%s: authorization '%s' is required\n"),
+ progname, LINK_SEC_AUTH);
+ exit(1);
+ }
+
+ for (i = 0; i < sp->s_nfields; i++) {
+ status = dladm_unset_secobj(sp->s_fields[i], DLADM_OPT_TEMP);
+ if (!temp) {
+ pstatus = dladm_unset_secobj(sp->s_fields[i],
+ DLADM_OPT_PERSIST);
+ } else {
+ pstatus = DLADM_STATUS_OK;
+ }
+
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: could not delete secure object '%s': %s\n"),
+ progname, sp->s_fields[i],
+ dladm_status2str(status, errmsg));
+ }
+ if (pstatus != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: warning: could not "
+ "persistently delete secure object '%s': %s\n"),
+ progname, sp->s_fields[i],
+ dladm_status2str(pstatus, errmsg));
+ }
+ }
+ if (status != DLADM_STATUS_OK || pstatus != DLADM_STATUS_OK)
+ exit(1);
+}
+
+typedef struct show_secobj_state {
+ boolean_t ss_persist;
+ boolean_t ss_parseable;
+ boolean_t ss_debug;
+ boolean_t ss_header;
+} show_secobj_state_t;
+
+static void
+print_secobj_head(show_secobj_state_t *statep)
+{
+ (void) printf("%-20s %-20s ", "OBJECT", "CLASS");
+ if (statep->ss_debug)
+ (void) printf("%-30s", "VALUE");
+ (void) putchar('\n');
+}
+
+static boolean_t
+show_secobj(void *arg, const char *obj_name)
+{
+ uint_t obj_len = DLADM_SECOBJ_VAL_MAX;
+ uint8_t obj_val[DLADM_SECOBJ_VAL_MAX];
+ char buf[DLADM_STRSIZE];
+ uint_t flags = 0;
+ dladm_secobj_class_t class;
+ show_secobj_state_t *statep = arg;
+ dladm_status_t status;
+
+ if (statep->ss_persist)
+ flags |= DLADM_OPT_PERSIST;
+
+ status = dladm_get_secobj(obj_name, &class, obj_val, &obj_len, flags);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext(
+ "%s: cannot get secure object '%s': %s\n"), progname,
+ obj_name, dladm_status2str(status, buf));
+ exit(1);
+ }
+
+ if (statep->ss_header) {
+ statep->ss_header = B_FALSE;
+ if (!statep->ss_parseable)
+ print_secobj_head(statep);
+ }
+
+ if (statep->ss_parseable) {
+ (void) printf("OBJECT=\"%s\" CLASS=\"%s\" ", obj_name,
+ dladm_secobjclass2str(class, buf));
+ } else {
+ (void) printf("%-20s %-20s ", obj_name,
+ dladm_secobjclass2str(class, buf));
+ }
+
+ if (statep->ss_debug) {
+ char val[DLADM_SECOBJ_VAL_MAX * 2];
+ uint_t len = sizeof (val);
+
+ if (octet_to_hexascii(obj_val, obj_len, val, &len) == 0) {
+ if (statep->ss_parseable)
+ (void) printf("VALUE=\"0x%s\"", val);
+ else
+ (void) printf("0x%-30s", val);
+ }
+ }
+ (void) putchar('\n');
+ return (B_TRUE);
+}
+
+static void
+do_show_secobj(int argc, char **argv)
+{
+ int option;
+ show_secobj_state_t state;
+ dladm_status_t status;
+ uint_t i;
+ char errmsg[DLADM_STRSIZE];
+ split_t *sp;
+ uint_t flags;
+
+ opterr = 0;
+ state.ss_persist = B_FALSE;
+ state.ss_parseable = B_FALSE;
+ state.ss_debug = B_FALSE;
+ state.ss_header = B_TRUE;
+ while ((option = getopt_long(argc, argv, ":pPd",
+ wifi_longopts, NULL)) != -1) {
+ switch (option) {
+ case 'p':
+ state.ss_parseable = B_TRUE;
+ break;
+ case 'P':
+ state.ss_persist = B_TRUE;
+ break;
+ case 'd':
+ if (getuid() != 0) {
+ (void) fprintf(stderr,
+ gettext("%s: insufficient privileges\n"),
+ progname);
+ exit(1);
+ }
+ state.ss_debug = B_TRUE;
+ break;
+ case ':':
+ (void) fprintf(stderr,
+ gettext("%s: option requires a value '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ case '?':
+ default:
+ (void) fprintf(stderr,
+ gettext("%s: unrecognized option '-%c'\n"),
+ progname, optopt);
+ exit(1);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1)) {
+ sp = split(argv[optind], MAX_SECOBJS, MAX_SECOBJ_NAMELEN);
+ if (sp == NULL) {
+ (void) fprintf(stderr, gettext(
+ "%s: invalid secure object name(s): '%s'\n"),
+ progname, argv[optind]);
+ exit(1);
+ }
+ for (i = 0; i < sp->s_nfields; i++) {
+ if (!show_secobj(&state, sp->s_fields[i]))
+ break;
+ }
+ splitfree(sp);
+ return;
+ } else if (optind != argc)
+ usage();
+
+ flags = state.ss_persist ? DLADM_OPT_PERSIST : 0;
+ status = dladm_walk_secobj(&state, show_secobj, flags);
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, gettext("%s: show-secobj: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
+
+/* ARGSUSED */
+static void
+do_init_linkprop(int argc, char **argv)
+{
+ char errmsg[DLADM_STRSIZE];
+ dladm_status_t status;
+
+ status = dladm_init_linkprop();
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: link property initialization failed: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
+
+/* ARGSUSED */
+static void
+do_init_secobj(int argc, char **argv)
+{
+ char errmsg[DLADM_STRSIZE];
+ dladm_status_t status;
+
+ status = dladm_init_secobj();
+ if (status != DLADM_STATUS_OK) {
+ (void) fprintf(stderr,
+ gettext("%s: secure object initialization failed: %s\n"),
+ progname, dladm_status2str(status, errmsg));
+ exit(1);
+ }
+}
diff --git a/usr/src/cmd/dladm/linkprop.conf b/usr/src/cmd/dladm/linkprop.conf
new file mode 100644
index 0000000000..dd196c1273
--- /dev/null
+++ b/usr/src/cmd/dladm/linkprop.conf
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# DO NOT EDIT OR PARSE THIS FILE!
+#
+# Use the dladm(1m) command to change the contents of this file.
+
diff --git a/usr/src/cmd/dladm/secobj.conf b/usr/src/cmd/dladm/secobj.conf
new file mode 100644
index 0000000000..dd196c1273
--- /dev/null
+++ b/usr/src/cmd/dladm/secobj.conf
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# DO NOT EDIT OR PARSE THIS FILE!
+#
+# Use the dladm(1m) command to change the contents of this file.
+
diff --git a/usr/src/cmd/svc/milestone/net-physical b/usr/src/cmd/svc/milestone/net-physical
index 3e5291a854..60c4ee8f98 100644
--- a/usr/src/cmd/svc/milestone/net-physical
+++ b/usr/src/cmd/svc/milestone/net-physical
@@ -58,9 +58,13 @@ SUNW_NO_MPATHD=; export SUNW_NO_MPATHD
smf_netstrategy
#
-# Bring up link aggregations
+# Bring up link aggregations and initialize security objects.
+# Note that link property initialization is deferred until after
+# IP interfaces are plumbed to ensure that the links will not
+# be unloaded (and the property settings lost).
#
/sbin/dladm up-aggr
+/sbin/dladm init-secobj
#
# If the system was net booted by DHCP, hand DHCP management off to the
@@ -194,6 +198,14 @@ if [ -n "$inet6_list" ]; then
fi
#
+# Unfortunately, if a driver unloads and then is subsequently reloaded, no
+# mechanism currently exists to restore the properties of its associated
+# links. Hence, we wait until after interfaces have been plumbed (above)
+# to initialize link properties.
+#
+/sbin/dladm init-linkprop
+
+#
# Process the /etc/hostname.* files of plumbed IPv4 interfaces. If an
# /etc/hostname file is not present or is empty, the ifconfig auto-dhcp
# / auto-revarp command will attempt to set the address, later.
diff --git a/usr/src/cmd/truss/codes.c b/usr/src/cmd/truss/codes.c
index 452d52c9ed..fe5a173211 100644
--- a/usr/src/cmd/truss/codes.c
+++ b/usr/src/cmd/truss/codes.c
@@ -291,12 +291,12 @@ const struct ioc {
{ (uint_t)TIOCGSIZE, "TIOCGSIZE", "ttysize" },
/*
- * DLIOCRAW has the same ioctl number as LDCLOSE. Since the LDIOC
+ * Unfortunately, the DLIOC and LDIOC codes overlap. Since the LDIOC
* ioctls (for xenix compatibility) are far less likely to be used, we
- * give preference to DLIOCRAW, which is the only userland ioctl in the
- * DLIOC family.
+ * give preference to DLIOC.
*/
{ (uint_t)DLIOCRAW, "DLIOCRAW", NULL },
+ { (uint_t)DLIOCNATIVE, "DLIOCNATIVE", NULL },
{ (uint_t)LDOPEN, "LDOPEN", NULL },
{ (uint_t)LDCLOSE, "LDCLOSE", NULL },
diff --git a/usr/src/head/auth_list.h b/usr/src/head/auth_list.h
index d0d625bc72..5fadc1c404 100644
--- a/usr/src/head/auth_list.h
+++ b/usr/src/head/auth_list.h
@@ -48,6 +48,7 @@ extern "C" {
#define SET_DATE_AUTH "solaris.system.date"
#define WIFI_CONFIG_AUTH "solaris.network.wifi.config"
#define WIFI_WEP_AUTH "solaris.network.wifi.wep"
+#define LINK_SEC_AUTH "solaris.network.link.security"
/*
* Authorizations used by Trusted Solaris.
diff --git a/usr/src/lib/Makefile b/usr/src/lib/Makefile
index d507548e2b..6effccf08b 100644
--- a/usr/src/lib/Makefile
+++ b/usr/src/lib/Makefile
@@ -185,6 +185,7 @@ SUBDIRS += \
madv \
mpss \
libdisasm \
+ libwladm \
libwrap \
libxcurses \
libxcurses2 \
@@ -374,6 +375,7 @@ HDRSUBDIRS= \
libvolmgt \
libumem \
libuutil \
+ libwladm \
libwrap \
libxcurses2 \
libzfs \
@@ -461,7 +463,7 @@ libdevinfo: libnvpair libsec
libdhcpagent: libdhcputil libnsl libsocket
libdhcpsvc: libinetutil
libdhcputil: libinetutil
-libdladm: libdlpi libdevinfo
+libdladm: libdlpi libdevinfo libwladm libinetutil
libdtrace: libproc libgen libctf
libdtrace_jni: libuutil libdtrace
libefi: libuuid
@@ -493,6 +495,7 @@ libwrap: libnsl libsocket
libwanboot: libnvpair libresolv libnsl libsocket libdevinfo libinetutil \
libdhcputil openssl
libwanbootutil: libnsl
+libwladm: libdevinfo libsocket
pam_modules: libproject passwdutil $(SMARTCARD)
libscf: libuutil libmd
libinetsvc: libscf
diff --git a/usr/src/lib/libbsm/audit_class.txt b/usr/src/lib/libbsm/audit_class.txt
index d8e2c6ee42..ae51e5fb53 100644
--- a/usr/src/lib/libbsm/audit_class.txt
+++ b/usr/src/lib/libbsm/audit_class.txt
@@ -52,6 +52,7 @@
0x00000400:na:non-attribute
0x00001000:lo:login or logout
0x00004000:ap:application
+0x00008000:cy:cryptographic
0x00010000:ss:change system state
0x00020000:as:system-wide administration
0x00040000:ua:user administration
diff --git a/usr/src/lib/libbsm/audit_event.txt b/usr/src/lib/libbsm/audit_event.txt
index da1ab9aabe..784b79eab5 100644
--- a/usr/src/lib/libbsm/audit_event.txt
+++ b/usr/src/lib/libbsm/audit_event.txt
@@ -428,6 +428,8 @@
6232:AUE_remove:remove/eject device:ot
6233:AUE_pool_import:import device into pool:ot
6234:AUE_pool_export:export device from pool:ot
+6235:AUE_dladm_create_secobj:create network security object:as,cy
+6236:AUE_dladm_delete_secobj:delete network security object:as,cy
#
# Trusted Extensions events:
#
diff --git a/usr/src/lib/libbsm/common/adt_event.h b/usr/src/lib/libbsm/common/adt_event.h
index f55e446097..f9e2c06ab8 100644
--- a/usr/src/lib/libbsm/common/adt_event.h
+++ b/usr/src/lib/libbsm/common/adt_event.h
@@ -95,6 +95,8 @@ enum adt_login_text {
#define ADT_admin_authenticate 3
#define ADT_attach 42
#define ADT_detach 43
+#define ADT_dladm_create_secobj 47
+#define ADT_dladm_delete_secobj 48
#define ADT_filesystem_add 4
#define ADT_filesystem_delete 5
#define ADT_filesystem_modify 6
@@ -161,6 +163,20 @@ struct adt_detach { /* ADT_detach */
};
typedef struct adt_detach adt_detach_t;
+struct adt_dladm_create_secobj { /* ADT_dladm_create_secobj */
+ char *auth_used; /* required */
+ char *obj_class; /* required */
+ char *obj_name; /* required */
+};
+typedef struct adt_dladm_create_secobj adt_dladm_create_secobj_t;
+
+struct adt_dladm_delete_secobj { /* ADT_dladm_delete_secobj */
+ char *auth_used; /* required */
+ char *obj_class; /* required */
+ char *obj_name; /* required */
+};
+typedef struct adt_dladm_delete_secobj adt_dladm_delete_secobj_t;
+
struct adt_filesystem_add { /* ADT_filesystem_add */
char *object_name; /* required */
char *domain; /* optional */
@@ -483,6 +499,8 @@ union adt_event_data {
adt_admin_authenticate_t adt_admin_authenticate;
adt_attach_t adt_attach;
adt_detach_t adt_detach;
+ adt_dladm_create_secobj_t adt_dladm_create_secobj;
+ adt_dladm_delete_secobj_t adt_dladm_delete_secobj;
adt_filesystem_add_t adt_filesystem_add;
adt_filesystem_delete_t adt_filesystem_delete;
adt_filesystem_modify_t adt_filesystem_modify;
diff --git a/usr/src/lib/libbsm/common/adt_xlate.c b/usr/src/lib/libbsm/common/adt_xlate.c
index 1da827d5f7..a24aa10439 100644
--- a/usr/src/lib/libbsm/common/adt_xlate.c
+++ b/usr/src/lib/libbsm/common/adt_xlate.c
@@ -117,6 +117,46 @@ static struct translation X_detach = {
&XX_detach[0],
&XX_detach[0]
};
+static struct entry XX_dladm_create_secobj[5] = {
+ {AUT_SUBJECT, 1, NULL, &(XX_dladm_create_secobj[1]),
+ 0, 0, 0, NULL},
+ {AUT_UAUTH, 1, &adr1[0], &(XX_dladm_create_secobj[2]),
+ 0, 1, 0, NULL},
+ {AUT_TEXT, 1, &adr1[0], &(XX_dladm_create_secobj[3]),
+ 0, 1, 0, NULL},
+ {AUT_TEXT, 1, &adr1[0], &(XX_dladm_create_secobj[4]),
+ 0, 1, 0, NULL},
+ {AUT_RETURN, 1, NULL, NULL,
+ 0, 0, 0, NULL}
+};
+static struct translation X_dladm_create_secobj = {
+ 0,
+ ADT_dladm_create_secobj,
+ AUE_dladm_create_secobj,
+ 5,
+ &XX_dladm_create_secobj[0],
+ &XX_dladm_create_secobj[0]
+};
+static struct entry XX_dladm_delete_secobj[5] = {
+ {AUT_SUBJECT, 1, NULL, &(XX_dladm_delete_secobj[1]),
+ 0, 0, 0, NULL},
+ {AUT_UAUTH, 1, &adr1[0], &(XX_dladm_delete_secobj[2]),
+ 0, 1, 0, NULL},
+ {AUT_TEXT, 1, &adr1[0], &(XX_dladm_delete_secobj[3]),
+ 0, 1, 0, NULL},
+ {AUT_TEXT, 1, &adr1[0], &(XX_dladm_delete_secobj[4]),
+ 0, 1, 0, NULL},
+ {AUT_RETURN, 1, NULL, NULL,
+ 0, 0, 0, NULL}
+};
+static struct translation X_dladm_delete_secobj = {
+ 0,
+ ADT_dladm_delete_secobj,
+ AUE_dladm_delete_secobj,
+ 5,
+ &XX_dladm_delete_secobj[0],
+ &XX_dladm_delete_secobj[0]
+};
static struct entry XX_filesystem_add[7] = {
{AUT_SUBJECT, 1, NULL, &(XX_filesystem_add[1]),
0, 0, 0, NULL},
@@ -979,10 +1019,12 @@ static struct translation X_zone_state = {
&XX_zone_state[0],
&XX_zone_state[0]
};
-struct translation *xlate_table[47] = {
+struct translation *xlate_table[49] = {
&X_admin_authenticate,
&X_attach,
&X_detach,
+ &X_dladm_create_secobj,
+ &X_dladm_delete_secobj,
&X_filesystem_add,
&X_filesystem_delete,
&X_filesystem_modify,
diff --git a/usr/src/lib/libbsm/common/adt_xml.txt b/usr/src/lib/libbsm/common/adt_xml.txt
index 222dfaf59c..16999ce633 100644
--- a/usr/src/lib/libbsm/common/adt_xml.txt
+++ b/usr/src/lib/libbsm/common/adt_xml.txt
@@ -843,8 +843,39 @@ Use is subject to license terms.
</entry>
</event>
+<!-- dladm security objected events -->
+ <event id="AUE_dladm_generic" type="generic" omit="always">
+ <entry id="subject">
+ <internal token="subject"/>
+ <external opt="none"/>
+ </entry>
+ <entry id="auth_used">
+ <internal token="uauth"/>
+ <external opt="required" type="char *"/>
+ </entry>
+ <entry id="obj_class">
+ <internal token="text"/>
+ <external opt="required" type="char *"/>
+ </entry>
+ <entry id="obj_name">
+ <internal token="text"/>
+ <external opt="required" type="char *"/>
+ </entry>
+ <entry id="return">
+ <internal token="return"/>
+ <external opt="none"/>
+ </entry>
+ </event>
+
+ <event id="AUE_dladm_create_secobj" instance_of="AUE_dladm_generic"
+ header="0" idNo="47" omit="JNI">
+ </event>
+ <event id="AUE_dladm_delete_secobj" instance_of="AUE_dladm_generic"
+ header="0" idNo="48" omit="JNI">
+ </event>
+
<!-- add new everts here with the next higher idNo -->
-<!-- Highest idNo is 46, so next is 47, then fix this comment -->
+<!-- Highest idNo is 48, so next is 49, then fix this comment -->
<!-- end of C Only events -->
diff --git a/usr/src/lib/libdladm/Makefile b/usr/src/lib/libdladm/Makefile
index 6fdcdf8a88..8794785ba1 100644
--- a/usr/src/lib/libdladm/Makefile
+++ b/usr/src/lib/libdladm/Makefile
@@ -27,7 +27,7 @@
include $(SRC)/lib/Makefile.lib
-HDRS = libdladm.h
+HDRS = libdladm.h libdladm_impl.h
HDRDIR = common
SUBDIRS = $(MACH)
diff --git a/usr/src/lib/libdladm/Makefile.com b/usr/src/lib/libdladm/Makefile.com
index 23396f1091..83b423a83b 100644
--- a/usr/src/lib/libdladm/Makefile.com
+++ b/usr/src/lib/libdladm/Makefile.com
@@ -27,7 +27,7 @@
LIBRARY = libdladm.a
VERS = .1
-OBJECTS = libdladm.o
+OBJECTS = libdladm.o secobj.o linkprop.o
include ../../Makefile.lib
@@ -35,8 +35,7 @@ include ../../Makefile.lib
include ../../Makefile.rootfs
LIBS = $(DYNLIB) $(LINTLIB)
-
-LDLIBS += -ldevinfo -ldlpi -lc
+LDLIBS += -ldevinfo -ldlpi -lc -lwladm -linetutil
SRCDIR = ../common
$(LINTLIB) := SRCS = $(SRCDIR)/$(LINTSRC)
diff --git a/usr/src/lib/libdladm/common/libdladm.c b/usr/src/lib/libdladm/common/libdladm.c
index 679368a9ae..f7f9c1755a 100644
--- a/usr/src/lib/libdladm/common/libdladm.c
+++ b/usr/src/lib/libdladm/common/libdladm.c
@@ -25,19 +25,18 @@
#pragma ident "%Z%%M% %I% %E% SMI"
-#include <stdio.h>
-#include <sys/types.h>
-#include <string.h>
-#include <fcntl.h>
#include <unistd.h>
#include <stropts.h>
-#include <stdlib.h>
#include <errno.h>
-#include <libdevinfo.h>
-#include <libdlpi.h>
-#include <libdladm.h>
-#include <sys/dld.h>
+#include <fcntl.h>
+#include <strings.h>
+#include <dirent.h>
#include <net/if.h>
+#include <sys/stat.h>
+#include <sys/dld.h>
+#include <libdlpi.h>
+#include <libdevinfo.h>
+#include <libdladm_impl.h>
typedef struct dladm_dev {
char dd_name[IFNAMSIZ];
@@ -48,11 +47,13 @@ typedef struct dladm_walk {
dladm_dev_t *dw_dev_list;
} dladm_walk_t;
+static char dladm_rootdir[MAXPATHLEN] = "/";
+
/*
* Issue an ioctl to the specified file descriptor attached to the
* DLD control driver interface.
*/
-static int
+int
i_dladm_ioctl(int fd, int ic_cmd, void *ic_dp, int ic_len)
{
struct strioctl iocb;
@@ -250,3 +251,256 @@ failed:
(void) close(fd);
return (-1);
}
+
+const char *
+dladm_status2str(dladm_status_t status, char *buf)
+{
+ const char *s;
+
+ switch (status) {
+ case DLADM_STATUS_OK:
+ s = "ok";
+ break;
+ case DLADM_STATUS_BADARG:
+ s = "invalid argument";
+ break;
+ case DLADM_STATUS_FAILED:
+ s = "operation failed";
+ break;
+ case DLADM_STATUS_TOOSMALL:
+ s = "buffer size too small";
+ break;
+ case DLADM_STATUS_NOTSUP:
+ s = "operation not supported";
+ break;
+ case DLADM_STATUS_NOTFOUND:
+ s = "object not found";
+ break;
+ case DLADM_STATUS_BADVAL:
+ s = "invalid value";
+ break;
+ case DLADM_STATUS_NOMEM:
+ s = "insufficient memory";
+ break;
+ case DLADM_STATUS_EXIST:
+ s = "object already exists";
+ break;
+ case DLADM_STATUS_LINKINVAL:
+ s = "invalid link";
+ break;
+ case DLADM_STATUS_PROPRDONLY:
+ s = "read-only property";
+ break;
+ case DLADM_STATUS_BADVALCNT:
+ s = "invalid number of values";
+ break;
+ case DLADM_STATUS_DBNOTFOUND:
+ s = "database not found";
+ break;
+ case DLADM_STATUS_DENIED:
+ s = "permission denied";
+ break;
+ case DLADM_STATUS_IOERR:
+ s = "I/O error";
+ break;
+ default:
+ s = "";
+ }
+ (void) snprintf(buf, DLADM_STRSIZE, "%s", s);
+ return (buf);
+}
+
+/*
+ * Convert a unix errno to a dladm_status_t.
+ * We only convert errnos that are likely to be encountered. All others
+ * are mapped to DLADM_STATUS_FAILED.
+ */
+dladm_status_t
+dladm_errno2status(int err)
+{
+ switch (err) {
+ case EINVAL:
+ return (DLADM_STATUS_BADARG);
+ case EEXIST:
+ return (DLADM_STATUS_EXIST);
+ case ENOENT:
+ return (DLADM_STATUS_NOTFOUND);
+ case ENOSPC:
+ return (DLADM_STATUS_TOOSMALL);
+ case ENOMEM:
+ return (DLADM_STATUS_NOMEM);
+ case ENOTSUP:
+ return (DLADM_STATUS_NOTSUP);
+ case EACCES:
+ return (DLADM_STATUS_DENIED);
+ case EIO:
+ return (DLADM_STATUS_IOERR);
+ default:
+ return (DLADM_STATUS_FAILED);
+ }
+}
+
+/*
+ * These are the uid and gid of the user 'dladm'.
+ * The directory /etc/dladm and all files under it are owned by this user.
+ */
+#define DLADM_DB_OWNER 15
+#define DLADM_DB_GROUP 3
+#define LOCK_DB_PERMS S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
+
+static int
+i_dladm_lock_db(const char *lock_file, short type)
+{
+ int lock_fd;
+ struct flock lock;
+
+ if ((lock_fd = open(lock_file, O_RDWR | O_CREAT | O_TRUNC,
+ LOCK_DB_PERMS)) < 0)
+ return (-1);
+
+ lock.l_type = type;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+
+ if (fcntl(lock_fd, F_SETLKW, &lock) < 0) {
+ int err = errno;
+
+ (void) close(lock_fd);
+ (void) unlink(lock_file);
+ errno = err;
+ return (-1);
+ }
+ return (lock_fd);
+}
+
+static void
+i_dladm_unlock_db(const char *lock_file, int fd)
+{
+ struct flock lock;
+
+ if (fd < 0)
+ return;
+
+ lock.l_type = F_UNLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+
+ (void) fcntl(fd, F_SETLKW, &lock);
+ (void) close(fd);
+ (void) unlink(lock_file);
+}
+
+dladm_status_t
+i_dladm_rw_db(const char *db_file, mode_t db_perms,
+ dladm_status_t (*process_db)(void *, FILE *, FILE *),
+ void *arg, boolean_t writeop)
+{
+ dladm_status_t status = DLADM_STATUS_OK;
+ FILE *fp, *nfp = NULL;
+ char lock[MAXPATHLEN];
+ char file[MAXPATHLEN];
+ char newfile[MAXPATHLEN];
+ char *db_basename;
+ int nfd, lock_fd;
+
+ /*
+ * If we are called from a boot script such as net-physical,
+ * it's quite likely that the root fs is still not writable.
+ * For this case, it's ok for the lock creation to fail since
+ * no one else could be accessing our configuration file.
+ */
+ db_basename = strrchr(db_file, '/');
+ if (db_basename == NULL || db_basename[1] == '\0')
+ return (dladm_errno2status(EINVAL));
+ db_basename++;
+ (void) snprintf(lock, MAXPATHLEN, "/tmp/%s.lock", db_basename);
+ if ((lock_fd = i_dladm_lock_db
+ (lock, (writeop ? F_WRLCK : F_RDLCK))) < 0 && errno != EROFS)
+ return (dladm_errno2status(errno));
+
+ (void) snprintf(file, MAXPATHLEN, "%s/%s", dladm_rootdir, db_file);
+ if ((fp = fopen(file, (writeop ? "r+" : "r"))) == NULL) {
+ int err = errno;
+
+ i_dladm_unlock_db(lock, lock_fd);
+ if (err == ENOENT)
+ return (DLADM_STATUS_DBNOTFOUND);
+
+ return (dladm_errno2status(err));
+ }
+
+ if (writeop) {
+ (void) snprintf(newfile, MAXPATHLEN, "%s/%s.new",
+ dladm_rootdir, db_file);
+ if ((nfd = open(newfile, O_WRONLY | O_CREAT | O_TRUNC,
+ db_perms)) < 0) {
+ (void) fclose(fp);
+ i_dladm_unlock_db(lock, lock_fd);
+ return (dladm_errno2status(errno));
+ }
+
+ if ((nfp = fdopen(nfd, "w")) == NULL) {
+ (void) close(nfd);
+ (void) fclose(fp);
+ (void) unlink(newfile);
+ i_dladm_unlock_db(lock, lock_fd);
+ return (dladm_errno2status(errno));
+ }
+ }
+ status = (*process_db)(arg, fp, nfp);
+ if (!writeop || status != DLADM_STATUS_OK)
+ goto done;
+
+ /*
+ * Configuration files need to be owned by the 'dladm' user.
+ * If we are invoked by root, the file ownership needs to be fixed.
+ */
+ if (getuid() == 0 || geteuid() == 0) {
+ if (fchown(nfd, DLADM_DB_OWNER, DLADM_DB_GROUP) < 0) {
+ status = dladm_errno2status(errno);
+ goto done;
+ }
+ }
+
+ if (fflush(nfp) == EOF) {
+ status = dladm_errno2status(errno);
+ goto done;
+ }
+ (void) fclose(fp);
+ (void) fclose(nfp);
+
+ if (rename(newfile, file) < 0) {
+ (void) unlink(newfile);
+ i_dladm_unlock_db(lock, lock_fd);
+ return (dladm_errno2status(errno));
+ }
+
+ i_dladm_unlock_db(lock, lock_fd);
+ return (DLADM_STATUS_OK);
+
+done:
+ if (nfp != NULL) {
+ (void) fclose(nfp);
+ if (status != DLADM_STATUS_OK)
+ (void) unlink(newfile);
+ }
+ (void) fclose(fp);
+ i_dladm_unlock_db(lock, lock_fd);
+ return (status);
+}
+
+dladm_status_t
+dladm_set_rootdir(const char *rootdir)
+{
+ DIR *dp;
+
+ if (rootdir == NULL || *rootdir != '/' ||
+ (dp = opendir(rootdir)) == NULL)
+ return (DLADM_STATUS_BADARG);
+
+ (void) strncpy(dladm_rootdir, rootdir, MAXPATHLEN);
+ (void) closedir(dp);
+ return (DLADM_STATUS_OK);
+}
diff --git a/usr/src/lib/libdladm/common/libdladm.h b/usr/src/lib/libdladm/common/libdladm.h
index 64315da820..1cf3700fc6 100644
--- a/usr/src/lib/libdladm/common/libdladm.h
+++ b/usr/src/lib/libdladm/common/libdladm.h
@@ -36,19 +36,77 @@
extern "C" {
#endif
-typedef struct dladm_attr dladm_attr_t;
-
-struct dladm_attr {
+typedef struct dladm_attr {
char da_dev[MAXNAMELEN];
uint_t da_max_sdu;
uint16_t da_vid;
-};
+} dladm_attr_t;
+
+#define DLADM_STRSIZE 256
+#define DLADM_SECOBJ_VAL_MAX 256
+#define DLADM_PROP_VAL_MAX 256
+#define DLADM_OPT_TEMP 0x00000001
+#define DLADM_OPT_CREATE 0x00000002
+#define DLADM_OPT_PERSIST 0x00000004
+
+typedef enum {
+ DLADM_STATUS_OK = 0,
+ DLADM_STATUS_BADARG,
+ DLADM_STATUS_FAILED,
+ DLADM_STATUS_TOOSMALL,
+ DLADM_STATUS_NOTSUP,
+ DLADM_STATUS_NOTFOUND,
+ DLADM_STATUS_BADVAL,
+ DLADM_STATUS_NOMEM,
+ DLADM_STATUS_EXIST,
+ DLADM_STATUS_LINKINVAL,
+ DLADM_STATUS_PROPRDONLY,
+ DLADM_STATUS_BADVALCNT,
+ DLADM_STATUS_DBNOTFOUND,
+ DLADM_STATUS_DENIED,
+ DLADM_STATUS_IOERR
+} dladm_status_t;
+
+typedef enum {
+ DLADM_PROP_VAL_CURRENT = 1,
+ DLADM_PROP_VAL_DEFAULT,
+ DLADM_PROP_VAL_MODIFIABLE,
+ DLADM_PROP_VAL_PERSISTENT
+} dladm_prop_type_t;
+
+#define DLADM_SECOBJ_CLASS_WEP 0
+typedef int dladm_secobj_class_t;
-extern int dladm_walk(void (*)(void *, const char *), void *);
-extern int dladm_walk_vlan(void (*)(void *,
- const char *), void *, const char *);
+typedef void (dladm_walkcb_t)(void *, const char *);
+
+extern int dladm_walk(dladm_walkcb_t *, void *);
+extern int dladm_walk_vlan(dladm_walkcb_t *, void *, const char *);
extern int dladm_info(const char *, dladm_attr_t *);
+extern dladm_status_t dladm_set_prop(const char *, const char *,
+ char **, uint_t, uint_t);
+extern dladm_status_t dladm_get_prop(const char *, dladm_prop_type_t,
+ const char *, char **, uint_t *);
+extern dladm_status_t dladm_walk_prop(const char *, void *,
+ boolean_t (*)(void *, const char *));
+
+extern dladm_status_t dladm_set_secobj(const char *, dladm_secobj_class_t,
+ uint8_t *, uint_t, uint_t);
+extern dladm_status_t dladm_get_secobj(const char *, dladm_secobj_class_t *,
+ uint8_t *, uint_t *, uint_t);
+extern dladm_status_t dladm_unset_secobj(const char *, uint_t);
+extern dladm_status_t dladm_walk_secobj(void *,
+ boolean_t (*)(void *, const char *), uint_t);
+
+extern const char *dladm_status2str(dladm_status_t, char *);
+extern const char *dladm_secobjclass2str(dladm_secobj_class_t, char *);
+extern dladm_status_t dladm_str2secobjclass(const char *,
+ dladm_secobj_class_t *);
+
+extern dladm_status_t dladm_init_linkprop(void);
+extern dladm_status_t dladm_init_secobj(void);
+extern dladm_status_t dladm_set_rootdir(const char *rootdir);
+
#ifdef __cplusplus
}
#endif
diff --git a/usr/src/lib/libdladm/common/libdladm_impl.h b/usr/src/lib/libdladm/common/libdladm_impl.h
new file mode 100644
index 0000000000..c949219a5b
--- /dev/null
+++ b/usr/src/lib/libdladm/common/libdladm_impl.h
@@ -0,0 +1,51 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _LIBDLADM_IMPL_H
+#define _LIBDLADM_IMPL_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <libdladm.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAXLINELEN 1024
+#define BUFLEN(lim, ptr) (((lim) > (ptr)) ? ((lim) - (ptr)) : 0)
+
+extern int i_dladm_ioctl(int, int, void *, int);
+extern dladm_status_t dladm_errno2status(int);
+extern dladm_status_t i_dladm_rw_db(const char *, mode_t,
+ dladm_status_t (*)(void *, FILE *, FILE *),
+ void *, boolean_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBDLADM_IMPL_H */
diff --git a/usr/src/lib/libdladm/common/linkprop.c b/usr/src/lib/libdladm/common/linkprop.c
new file mode 100644
index 0000000000..8e1ef849e9
--- /dev/null
+++ b/usr/src/lib/libdladm/common/linkprop.c
@@ -0,0 +1,700 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <stdlib.h>
+#include <strings.h>
+#include <errno.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <libwladm.h>
+#include <libdladm_impl.h>
+
+static dladm_status_t i_dladm_set_prop_db(const char *, const char *,
+ char **, uint_t);
+static dladm_status_t i_dladm_get_prop_db(const char *, const char *,
+ char **, uint_t *);
+
+/*
+ * Convert a wladm_status_t to a dladm_status_t. This is used by wrappers
+ * to libwladm routines (e.g. dladm_set_prop()). Note that the mapping is
+ * not 1-1; whenever possible we try to look for an error code with a
+ * similar meaning. Error codes with no suitable counterpart in libdladm
+ * will be mapped to DLADM_STATUS_FAILED. Clients who require clearer error
+ * reporting should use libwladm directly.
+ */
+static dladm_status_t
+dladm_wladmstatus2status(wladm_status_t wstatus)
+{
+ switch (wstatus) {
+ case WLADM_STATUS_OK:
+ return (DLADM_STATUS_OK);
+ case WLADM_STATUS_FAILED:
+ return (DLADM_STATUS_FAILED);
+ case WLADM_STATUS_NOTSUP:
+ return (DLADM_STATUS_NOTSUP);
+ case WLADM_STATUS_BADARG:
+ return (DLADM_STATUS_BADARG);
+ case WLADM_STATUS_NOTFOUND:
+ return (DLADM_STATUS_NOTFOUND);
+ case WLADM_STATUS_BADVAL:
+ return (DLADM_STATUS_BADVAL);
+ case WLADM_STATUS_LINKINVAL:
+ return (DLADM_STATUS_LINKINVAL);
+ case WLADM_STATUS_NOMEM:
+ return (DLADM_STATUS_NOMEM);
+ case WLADM_STATUS_PROPRDONLY:
+ return (DLADM_STATUS_PROPRDONLY);
+ case WLADM_STATUS_TOOSMALL:
+ return (DLADM_STATUS_TOOSMALL);
+ case WLADM_STATUS_BADVALCNT:
+ return (DLADM_STATUS_BADVALCNT);
+ default:
+ return (DLADM_STATUS_FAILED);
+ }
+}
+
+dladm_status_t
+dladm_set_prop(const char *link, const char *prop_name, char **prop_val,
+ uint_t val_cnt, uint_t flags)
+{
+ dladm_status_t status = DLADM_STATUS_BADARG;
+
+ if (link == NULL || (prop_val == NULL && val_cnt > 0) ||
+ (prop_val != NULL && val_cnt == 0) || flags == 0)
+ return (DLADM_STATUS_BADARG);
+
+ if ((flags & DLADM_OPT_TEMP) != 0) {
+ if (wladm_is_valid(link)) {
+ status = dladm_wladmstatus2status(
+ wladm_set_prop(link, prop_name,
+ prop_val, val_cnt));
+ }
+ if (status != DLADM_STATUS_OK)
+ return (status);
+ }
+ if ((flags & DLADM_OPT_PERSIST) != 0) {
+ status = i_dladm_set_prop_db(link, prop_name,
+ prop_val, val_cnt);
+ }
+ return (status);
+}
+
+dladm_status_t
+dladm_walk_prop(const char *link, void *arg,
+ boolean_t (*func)(void *, const char *))
+{
+ if (link == NULL || func == NULL)
+ return (DLADM_STATUS_BADARG);
+
+ if (wladm_is_valid(link)) {
+ return (dladm_wladmstatus2status(
+ wladm_walk_prop(link, arg, func)));
+ }
+ return (DLADM_STATUS_BADARG);
+}
+
+dladm_status_t
+dladm_get_prop(const char *link, dladm_prop_type_t type,
+ const char *prop_name, char **prop_val, uint_t *val_cntp)
+{
+ if (link == NULL || prop_name == NULL || prop_val == NULL ||
+ val_cntp == NULL || *val_cntp == 0)
+ return (DLADM_STATUS_BADARG);
+
+ if (type == DLADM_PROP_VAL_PERSISTENT) {
+ return (i_dladm_get_prop_db(link, prop_name,
+ prop_val, val_cntp));
+ }
+
+ if (wladm_is_valid(link)) {
+ wladm_prop_type_t wtype;
+
+ switch (type) {
+ case DLADM_PROP_VAL_CURRENT:
+ wtype = WLADM_PROP_VAL_CURRENT;
+ break;
+ case DLADM_PROP_VAL_DEFAULT:
+ wtype = WLADM_PROP_VAL_DEFAULT;
+ break;
+ case DLADM_PROP_VAL_MODIFIABLE:
+ wtype = WLADM_PROP_VAL_MODIFIABLE;
+ break;
+ default:
+ return (DLADM_STATUS_BADARG);
+ }
+
+ return (dladm_wladmstatus2status(
+ wladm_get_prop(link, wtype, prop_name,
+ prop_val, val_cntp)));
+ }
+ return (DLADM_STATUS_BADARG);
+}
+
+/*
+ * Data structures used for implementing persistent link properties
+ */
+typedef struct linkprop_val {
+ const char *lv_name;
+ struct linkprop_val *lv_nextval;
+} linkprop_val_t;
+
+typedef struct linkprop_info {
+ const char *li_name;
+ struct linkprop_info *li_nextprop;
+ struct linkprop_val *li_val;
+} linkprop_info_t;
+
+typedef struct linkprop_db_state linkprop_db_state_t;
+
+typedef boolean_t (*linkprop_db_op_t)(linkprop_db_state_t *,
+ char *, linkprop_info_t *, dladm_status_t *);
+
+struct linkprop_db_state {
+ linkprop_db_op_t ls_op;
+ const char *ls_link;
+ const char *ls_propname;
+ char **ls_propval;
+ uint_t *ls_valcntp;
+};
+
+static void
+free_linkprops(linkprop_info_t *lip)
+{
+ linkprop_info_t *lip_next;
+ linkprop_val_t *lvp, *lvp_next;
+
+ for (; lip != NULL; lip = lip_next) {
+ lip_next = lip->li_nextprop;
+ for (lvp = lip->li_val; lvp != NULL; lvp = lvp_next) {
+ lvp_next = lvp->lv_nextval;
+ free(lvp);
+ }
+ free(lip);
+ }
+}
+
+/*
+ * Generate an entry in the link property database.
+ * Each entry has this format:
+ * <linkname> <prop0>=<val0>,...,<valn>;...;<propn>=<val0>,...,<valn>;
+ */
+static void
+generate_linkprop_line(linkprop_db_state_t *lsp, char *buf,
+ linkprop_info_t *listp, dladm_status_t *statusp)
+{
+ char tmpbuf[MAXLINELEN];
+ char *ptr, *lim = tmpbuf + MAXLINELEN;
+ linkprop_info_t *lip = listp;
+ linkprop_val_t *lvp = NULL;
+
+ /*
+ * Delete line if there are no properties left.
+ */
+ if (lip == NULL ||
+ (lip->li_val == NULL && lip->li_nextprop == NULL)) {
+ buf[0] = '\0';
+ return;
+ }
+ ptr = tmpbuf;
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s\t", lsp->ls_link);
+ for (; lip != NULL; lip = lip->li_nextprop) {
+ /*
+ * Skip properties without values.
+ */
+ if (lip->li_val == NULL)
+ continue;
+
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s=", lip->li_name);
+ for (lvp = lip->li_val; lvp != NULL; lvp = lvp->lv_nextval) {
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s%c",
+ lvp->lv_name,
+ ((lvp->lv_nextval == NULL) ? ';' : ','));
+ }
+ }
+ if (ptr > lim) {
+ *statusp = DLADM_STATUS_TOOSMALL;
+ return;
+ }
+ (void) snprintf(buf, MAXLINELEN, "%s\n", tmpbuf);
+}
+
+/*
+ * This function is used to update or create an entry in the persistent db.
+ * process_linkprop_db() will first scan the db for an entry matching the
+ * specified link. If a match is found, this function is invoked with the
+ * entry's contents (buf) and its linked-list representation (listp). lsp
+ * holds the name and values of the property to be added or updated; this
+ * information will be merged with listp. Subsequently, an updated entry
+ * will be written to buf, which will in turn be written to disk by
+ * process_linkprop_db(). If no entry matches the specified link, listp
+ * will be NULL; a new entry will be generated in this case and it will
+ * contain only the property information in lsp.
+ */
+static boolean_t
+process_linkprop_set(linkprop_db_state_t *lsp, char *buf,
+ linkprop_info_t *listp, dladm_status_t *statusp)
+{
+ dladm_status_t status;
+ linkprop_info_t *lastp = NULL, *lip = listp, *nlip = NULL;
+ linkprop_val_t **lvpp;
+ int i;
+
+ if (lsp->ls_propname == NULL) {
+ buf[0] = '\0';
+ return (B_FALSE);
+ }
+
+ /*
+ * Find the linkprop we want to change.
+ */
+ for (; lip != NULL; lip = lip->li_nextprop) {
+ if (strcmp(lip->li_name, lsp->ls_propname) == 0)
+ break;
+
+ lastp = lip;
+ }
+
+ if (lip == NULL) {
+ /*
+ * If the linkprop is not found, append it to the list.
+ */
+ if ((nlip = malloc(sizeof (linkprop_info_t))) == NULL) {
+ status = DLADM_STATUS_NOMEM;
+ goto fail;
+ }
+ /*
+ * nlip will need to be freed later if there is no list to
+ * append to.
+ */
+ if (lastp != NULL)
+ lastp->li_nextprop = nlip;
+ nlip->li_name = lsp->ls_propname;
+ nlip->li_nextprop = NULL;
+ nlip->li_val = NULL;
+ lvpp = &nlip->li_val;
+ } else {
+ linkprop_val_t *lvp, *lvp_next;
+
+ /*
+ * If the linkprop is found, delete the existing values from it.
+ */
+ for (lvp = lip->li_val; lvp != NULL; lvp = lvp_next) {
+ lvp_next = lvp->lv_nextval;
+ free(lvp);
+ }
+ lip->li_val = NULL;
+ lvpp = &lip->li_val;
+ }
+
+ /*
+ * Fill our linkprop with the specified values.
+ */
+ for (i = 0; i < *lsp->ls_valcntp; i++) {
+ if ((*lvpp = malloc(sizeof (linkprop_val_t))) == NULL) {
+ status = DLADM_STATUS_NOMEM;
+ goto fail;
+ }
+ (*lvpp)->lv_name = lsp->ls_propval[i];
+ (*lvpp)->lv_nextval = NULL;
+ lvpp = &(*lvpp)->lv_nextval;
+ }
+
+ if (listp != NULL) {
+ generate_linkprop_line(lsp, buf, listp, statusp);
+ } else {
+ generate_linkprop_line(lsp, buf, nlip, statusp);
+ free_linkprops(nlip);
+ }
+ return (B_FALSE);
+
+fail:
+ *statusp = status;
+ if (listp == NULL)
+ free_linkprops(nlip);
+
+ return (B_FALSE);
+}
+
+/*
+ * This function is used for retrieving the values for a specific property.
+ * It gets called if an entry matching the specified link exists in the db.
+ * The entry is converted into a linked-list listp. This list is then scanned
+ * for the specified property name; if a matching property exists, its
+ * associated values are copied to the array lsp->ls_propval.
+ */
+/* ARGSUSED */
+static boolean_t
+process_linkprop_get(linkprop_db_state_t *lsp, char *buf,
+ linkprop_info_t *listp, dladm_status_t *statusp)
+{
+ linkprop_info_t *lip = listp;
+ linkprop_val_t *lvp;
+ uint_t valcnt = 0;
+
+ /*
+ * Find the linkprop we want to get.
+ */
+ for (; lip != NULL; lip = lip->li_nextprop) {
+ if (strcmp(lip->li_name, lsp->ls_propname) == 0)
+ break;
+ }
+ if (lip == NULL) {
+ *statusp = DLADM_STATUS_NOTFOUND;
+ return (B_FALSE);
+ }
+
+ for (lvp = lip->li_val; lvp != NULL; lvp = lvp->lv_nextval) {
+ (void) strncpy(lsp->ls_propval[valcnt], lvp->lv_name,
+ DLADM_PROP_VAL_MAX);
+
+ if (++valcnt >= *lsp->ls_valcntp && lvp->lv_nextval != NULL) {
+ *statusp = DLADM_STATUS_TOOSMALL;
+ return (B_FALSE);
+ }
+ }
+ /*
+ * This function is meant to be called at most once for each call
+ * to process_linkprop_db(). For this reason, it's ok to overwrite
+ * the caller's valcnt array size with the actual number of values
+ * returned.
+ */
+ *lsp->ls_valcntp = valcnt;
+ return (B_FALSE);
+}
+
+/*
+ * This is used for initializing link properties.
+ * Unlike the other routines, this gets called for every entry in the
+ * database. lsp->ls_link is not user-specified but instead is set to
+ * the current link being processed.
+ */
+/* ARGSUSED */
+static boolean_t
+process_linkprop_init(linkprop_db_state_t *lsp, char *buf,
+ linkprop_info_t *listp, dladm_status_t *statusp)
+{
+ dladm_status_t status = DLADM_STATUS_OK;
+ linkprop_info_t *lip = listp;
+ linkprop_val_t *lvp;
+ uint_t valcnt, i;
+ char **propval;
+
+ for (; lip != NULL; lip = lip->li_nextprop) {
+ /*
+ * Construct the propval array and fill it with
+ * values from listp.
+ */
+ for (lvp = lip->li_val, valcnt = 0;
+ lvp != NULL; lvp = lvp->lv_nextval, valcnt++);
+
+ propval = malloc(sizeof (char *) * valcnt);
+ if (propval == NULL) {
+ *statusp = DLADM_STATUS_NOMEM;
+ break;
+ }
+ lvp = lip->li_val;
+ for (i = 0; i < valcnt; i++, lvp = lvp->lv_nextval)
+ propval[i] = (char *)lvp->lv_name;
+
+ status = dladm_set_prop(lsp->ls_link, lip->li_name,
+ propval, valcnt, DLADM_OPT_TEMP);
+
+ /*
+ * We continue with initializing other properties even
+ * after encountering an error. This error will be
+ * propagated to the caller via 'statusp'.
+ */
+ if (status != DLADM_STATUS_OK)
+ *statusp = status;
+
+ free(propval);
+ }
+ return (B_TRUE);
+}
+
+static int
+parse_linkprops(char *buf, linkprop_info_t **lipp)
+{
+ int i, len;
+ char *curr;
+ linkprop_info_t *lip = NULL;
+ linkprop_info_t **tailp = lipp;
+ linkprop_val_t *lvp = NULL;
+ linkprop_val_t **vtailp = NULL;
+
+ curr = buf;
+ len = strlen(buf);
+ for (i = 0; i < len; i++) {
+ char c = buf[i];
+ boolean_t match = (c == '=' || c == ',' || c == ';');
+
+ /*
+ * Move to the next character if there is no match and
+ * if we have not reached the last character.
+ */
+ if (!match && i != len - 1)
+ continue;
+
+ if (match) {
+ /*
+ * Nul-terminate the string pointed to by 'curr'.
+ */
+ buf[i] = '\0';
+ if (*curr == '\0')
+ goto fail;
+ }
+
+ if (lip != NULL) {
+ /*
+ * We get here after we have processed the "<prop>="
+ * pattern. The pattern we are now interested in is
+ * "<val0>,<val1>,...,<valn>;". For each value we
+ * find, a linkprop_val_t will be allocated and
+ * added to the current 'lip'.
+ */
+ if (c == '=')
+ goto fail;
+
+ lvp = malloc(sizeof (*lvp));
+ if (lvp == NULL)
+ goto fail;
+
+ lvp->lv_name = curr;
+ lvp->lv_nextval = NULL;
+ *vtailp = lvp;
+ vtailp = &lvp->lv_nextval;
+
+ if (c == ';') {
+ tailp = &lip->li_nextprop;
+ vtailp = NULL;
+ lip = NULL;
+ }
+ } else {
+ /*
+ * lip == NULL indicates that 'curr' must be refering
+ * to a property name. We allocate a new linkprop_info_t
+ * append it to the list given by the caller.
+ */
+ if (c != '=')
+ goto fail;
+
+ lip = malloc(sizeof (*lip));
+ if (lip == NULL)
+ goto fail;
+
+ lip->li_name = curr;
+ lip->li_val = NULL;
+ lip->li_nextprop = NULL;
+ *tailp = lip;
+ vtailp = &lip->li_val;
+ }
+ curr = buf + i + 1;
+ }
+ /*
+ * The list must be non-empty and the last character must be ';'.
+ */
+ if (*lipp == NULL || lip != NULL)
+ goto fail;
+
+ return (0);
+
+fail:
+ free_linkprops(*lipp);
+ *lipp = NULL;
+ return (-1);
+}
+
+static boolean_t
+process_linkprop_line(linkprop_db_state_t *lsp, char *buf,
+ dladm_status_t *statusp)
+{
+ linkprop_info_t *lip = NULL;
+ int i, len, llen;
+ char *str, *lasts;
+ boolean_t cont, nolink = B_FALSE;
+
+ /*
+ * Skip leading spaces, blank lines, and comments.
+ */
+ len = strlen(buf);
+ for (i = 0; i < len; i++) {
+ if (!isspace(buf[i]))
+ break;
+ }
+ if (i == len || buf[i] == '#')
+ return (B_TRUE);
+
+ str = buf + i;
+ if (lsp->ls_link != NULL) {
+ /*
+ * Skip links we're not interested in.
+ * Note that strncmp() and isspace() are used here
+ * instead of strtok() and strcmp() because we don't
+ * want to modify buf in case it does not contain the
+ * specified link.
+ */
+ llen = strlen(lsp->ls_link);
+ if (strncmp(str, lsp->ls_link, llen) != 0 ||
+ !isspace(str[llen]))
+ return (B_TRUE);
+ } else {
+ /*
+ * If a link is not specified, find the link name
+ * and assign it to lsp->ls_link.
+ */
+ if (strtok_r(str, " \n\t", &lasts) == NULL)
+ goto fail;
+
+ llen = strlen(str);
+ lsp->ls_link = str;
+ nolink = B_TRUE;
+ }
+ str += llen + 1;
+ if (str >= buf + len)
+ goto fail;
+
+ /*
+ * Now find the list of link properties.
+ */
+ if ((str = strtok_r(str, " \n\t", &lasts)) == NULL)
+ goto fail;
+
+ if (parse_linkprops(str, &lip) < 0)
+ goto fail;
+
+ cont = (*lsp->ls_op)(lsp, buf, lip, statusp);
+ free_linkprops(lip);
+ if (nolink)
+ lsp->ls_link = NULL;
+ return (cont);
+
+fail:
+ free_linkprops(lip);
+ if (nolink)
+ lsp->ls_link = NULL;
+
+ /*
+ * Delete corrupted line.
+ */
+ buf[0] = '\0';
+ return (B_TRUE);
+}
+
+static dladm_status_t
+process_linkprop_db(void *arg, FILE *fp, FILE *nfp)
+{
+ linkprop_db_state_t *lsp = arg;
+ dladm_status_t status = DLADM_STATUS_OK;
+ char buf[MAXLINELEN];
+ boolean_t cont = B_TRUE;
+
+ /*
+ * This loop processes each line of the configuration file.
+ * buf can potentially be modified by process_linkprop_line().
+ * If this is a write operation and buf is not truncated, buf will
+ * be written to disk. process_linkprop_line() will no longer be
+ * called after it returns B_FALSE; at which point the remainder
+ * of the file will continue to be read and, if necessary, written
+ * to disk as well.
+ */
+ while (fgets(buf, MAXLINELEN, fp) != NULL) {
+ if (cont)
+ cont = process_linkprop_line(lsp, buf, &status);
+
+ if (nfp != NULL && buf[0] != '\0' && fputs(buf, nfp) == EOF) {
+ status = dladm_errno2status(errno);
+ break;
+ }
+ }
+
+ if (status != DLADM_STATUS_OK || !cont)
+ return (status);
+
+ if (lsp->ls_op == process_linkprop_set) {
+ /*
+ * If the specified link is not found above, we add the
+ * link and its properties to the configuration file.
+ */
+ (void) (*lsp->ls_op)(lsp, buf, NULL, &status);
+ if (status == DLADM_STATUS_OK && fputs(buf, nfp) == EOF)
+ status = dladm_errno2status(errno);
+ }
+
+ if (lsp->ls_op == process_linkprop_get)
+ status = DLADM_STATUS_NOTFOUND;
+
+ return (status);
+}
+
+#define LINKPROP_RW_DB(statep, writeop) \
+ (i_dladm_rw_db("/etc/dladm/linkprop.conf", \
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, process_linkprop_db, \
+ (statep), (writeop)))
+
+static dladm_status_t
+i_dladm_set_prop_db(const char *link, const char *prop_name,
+ char **prop_val, uint_t val_cnt)
+{
+ linkprop_db_state_t state;
+
+ state.ls_op = process_linkprop_set;
+ state.ls_link = link;
+ state.ls_propname = prop_name;
+ state.ls_propval = prop_val;
+ state.ls_valcntp = &val_cnt;
+
+ return (LINKPROP_RW_DB(&state, B_TRUE));
+}
+
+static dladm_status_t
+i_dladm_get_prop_db(const char *link, const char *prop_name,
+ char **prop_val, uint_t *val_cntp)
+{
+ linkprop_db_state_t state;
+
+ state.ls_op = process_linkprop_get;
+ state.ls_link = link;
+ state.ls_propname = prop_name;
+ state.ls_propval = prop_val;
+ state.ls_valcntp = val_cntp;
+
+ return (LINKPROP_RW_DB(&state, B_FALSE));
+}
+
+dladm_status_t
+dladm_init_linkprop(void)
+{
+ linkprop_db_state_t state;
+
+ state.ls_op = process_linkprop_init;
+ state.ls_link = NULL;
+ state.ls_propname = NULL;
+ state.ls_propval = NULL;
+ state.ls_valcntp = NULL;
+
+ return (LINKPROP_RW_DB(&state, B_FALSE));
+}
diff --git a/usr/src/lib/libdladm/common/mapfile-vers b/usr/src/lib/libdladm/common/mapfile-vers
index 5e0f599741..2af8201536 100644
--- a/usr/src/lib/libdladm/common/mapfile-vers
+++ b/usr/src/lib/libdladm/common/mapfile-vers
@@ -30,6 +30,20 @@ SUNWprivate_1.1 {
dladm_info;
dladm_walk;
dladm_walk_vlan;
+ dladm_get_prop;
+ dladm_set_prop;
+ dladm_walk_prop;
+ dladm_get_secobj;
+ dladm_set_secobj;
+ dladm_unset_secobj;
+ dladm_walk_secobj;
+ dladm_status2str;
+ dladm_secobjclass2str;
+ dladm_str2secobjclass;
+ dladm_init_linkprop;
+ dladm_init_secobj;
+ dladm_set_rootdir;
+
local:
*;
};
diff --git a/usr/src/lib/libdladm/common/secobj.c b/usr/src/lib/libdladm/common/secobj.c
new file mode 100644
index 0000000000..3f122ca347
--- /dev/null
+++ b/usr/src/lib/libdladm/common/secobj.c
@@ -0,0 +1,634 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <errno.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/dld.h>
+#include <libinetutil.h>
+#include <libdladm_impl.h>
+
+static dladm_status_t i_dladm_set_secobj_db(const char *,
+ dladm_secobj_class_t, uint8_t *, uint_t);
+static dladm_status_t i_dladm_get_secobj_db(const char *,
+ dladm_secobj_class_t *, uint8_t *, uint_t *);
+static dladm_status_t i_dladm_unset_secobj_db(const char *);
+static dladm_status_t i_dladm_walk_secobj_db(void *,
+ boolean_t (*)(void *, const char *));
+
+typedef struct secobj_class_info {
+ const char *sc_name;
+ dld_secobj_class_t sc_dldclass;
+} secobj_class_info_t;
+
+static secobj_class_info_t secobj_class_table[] = {
+ {"wep", DLD_SECOBJ_CLASS_WEP}
+};
+
+#define NSECOBJCLASS \
+ (sizeof (secobj_class_table) / sizeof (secobj_class_info_t))
+
+static boolean_t
+dladm_check_secobjclass(dladm_secobj_class_t class)
+{
+ return (class >= 0 && class < NSECOBJCLASS);
+}
+
+dladm_status_t
+dladm_str2secobjclass(const char *str, dladm_secobj_class_t *class)
+{
+ int i;
+ secobj_class_info_t *sp;
+
+ for (i = 0; i < NSECOBJCLASS; i++) {
+ sp = &secobj_class_table[i];
+ if (strcasecmp(str, sp->sc_name) == 0) {
+ *class = i;
+ return (DLADM_STATUS_OK);
+ }
+ }
+ return (DLADM_STATUS_BADARG);
+}
+
+const char *
+dladm_secobjclass2str(dladm_secobj_class_t class, char *buf)
+{
+ const char *s;
+
+ if (!dladm_check_secobjclass(class))
+ s = "";
+ else
+ s = secobj_class_table[class].sc_name;
+
+ (void) snprintf(buf, DLADM_STRSIZE, "%s", s);
+ return (buf);
+}
+
+static boolean_t
+dladm_convert_secobjclass(dladm_secobj_class_t class,
+ dld_secobj_class_t *dldclass)
+{
+ if (!dladm_check_secobjclass(class))
+ return (B_FALSE);
+
+ *dldclass = secobj_class_table[class].sc_dldclass;
+ return (B_TRUE);
+}
+
+static boolean_t
+dladm_convert_dldsecobjclass(dld_secobj_class_t dldclass,
+ dladm_secobj_class_t *class)
+{
+ int i;
+ secobj_class_info_t *sp;
+
+ for (i = 0; i < NSECOBJCLASS; i++) {
+ sp = &secobj_class_table[i];
+ if (dldclass == sp->sc_dldclass) {
+ *class = i;
+ return (B_TRUE);
+ }
+ }
+ return (B_FALSE);
+}
+
+dladm_status_t
+dladm_set_secobj(const char *obj_name, dladm_secobj_class_t class,
+ uint8_t *obj_val, uint_t obj_len, uint_t flags)
+{
+ int fd;
+ dladm_status_t status = DLADM_STATUS_OK;
+ dld_ioc_secobj_set_t secobj_set;
+ dld_secobj_t *objp;
+
+ if (!dladm_check_secobjclass(class) || flags == 0 ||
+ obj_name == NULL || strlen(obj_name) > DLD_SECOBJ_NAME_MAX ||
+ obj_val == NULL || obj_len == 0 || obj_len > DLD_SECOBJ_VAL_MAX)
+ return (DLADM_STATUS_BADARG);
+
+ if ((flags & DLADM_OPT_TEMP) == 0)
+ goto persist;
+
+ bzero(&secobj_set, sizeof (secobj_set));
+ objp = &secobj_set.ss_obj;
+ if (!dladm_convert_secobjclass(class, &objp->so_class))
+ return (DLADM_STATUS_BADARG);
+
+ (void) strlcpy(objp->so_name, obj_name, DLD_SECOBJ_NAME_MAX);
+ bcopy(obj_val, objp->so_val, obj_len);
+ objp->so_len = obj_len;
+
+ if ((flags & DLADM_OPT_CREATE) != 0)
+ secobj_set.ss_flags = DLD_SECOBJ_OPT_CREATE;
+
+ if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
+ return (dladm_errno2status(errno));
+
+ if (i_dladm_ioctl(fd, DLDIOCSECOBJSET, &secobj_set,
+ sizeof (secobj_set)) < 0)
+ status = dladm_errno2status(errno);
+
+ (void) close(fd);
+ if (status != DLADM_STATUS_OK)
+ return (status);
+
+persist:
+ if ((flags & DLADM_OPT_PERSIST) != 0) {
+ status = i_dladm_set_secobj_db(obj_name, class,
+ obj_val, obj_len);
+ }
+ return (status);
+}
+
+dladm_status_t
+dladm_get_secobj(const char *obj_name, dladm_secobj_class_t *classp,
+ uint8_t *obj_val, uint_t *obj_lenp, uint_t flags)
+{
+ int fd;
+ dladm_status_t status = DLADM_STATUS_OK;
+ dld_ioc_secobj_get_t secobj_get;
+ dld_secobj_t *objp;
+
+ if (obj_name == NULL || strlen(obj_name) > DLD_SECOBJ_NAME_MAX ||
+ obj_val == NULL || obj_lenp == NULL || *obj_lenp == 0 ||
+ *obj_lenp > DLD_SECOBJ_VAL_MAX)
+ return (DLADM_STATUS_BADARG);
+
+ if ((flags & DLADM_OPT_PERSIST) != 0) {
+ return (i_dladm_get_secobj_db(obj_name, classp,
+ obj_val, obj_lenp));
+ }
+
+ bzero(&secobj_get, sizeof (secobj_get));
+ objp = &secobj_get.sg_obj;
+ (void) strlcpy(objp->so_name, obj_name, DLD_SECOBJ_NAME_MAX);
+
+ if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
+ return (dladm_errno2status(errno));
+
+ if (i_dladm_ioctl(fd, DLDIOCSECOBJGET, &secobj_get,
+ sizeof (secobj_get)) < 0)
+ status = dladm_errno2status(errno);
+
+ (void) close(fd);
+ if (objp->so_len > *obj_lenp)
+ return (DLADM_STATUS_TOOSMALL);
+
+ if (!dladm_convert_dldsecobjclass(objp->so_class, classp))
+ return (DLADM_STATUS_FAILED);
+
+ *obj_lenp = objp->so_len;
+ bcopy(objp->so_val, obj_val, *obj_lenp);
+ return (status);
+}
+
+dladm_status_t
+dladm_unset_secobj(const char *obj_name, uint_t flags)
+{
+ int fd;
+ dladm_status_t status = DLADM_STATUS_OK;
+ dld_ioc_secobj_unset_t secobj_unset;
+
+ if (obj_name == NULL || strlen(obj_name) > DLD_SECOBJ_NAME_MAX ||
+ flags == 0)
+ return (DLADM_STATUS_BADARG);
+
+ if ((flags & DLADM_OPT_TEMP) == 0)
+ goto persist;
+
+ bzero(&secobj_unset, sizeof (secobj_unset));
+ (void) strlcpy(secobj_unset.su_name, obj_name, DLD_SECOBJ_NAME_MAX);
+ if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
+ return (dladm_errno2status(errno));
+
+ if (i_dladm_ioctl(fd, DLDIOCSECOBJUNSET, &secobj_unset,
+ sizeof (secobj_unset)) < 0)
+ status = dladm_errno2status(errno);
+
+ (void) close(fd);
+ if (status != DLADM_STATUS_OK)
+ return (status);
+
+persist:
+ if ((flags & DLADM_OPT_PERSIST) != 0)
+ status = i_dladm_unset_secobj_db(obj_name);
+
+ return (status);
+}
+
+#define SECOBJ_BUFSZ 65536
+dladm_status_t
+dladm_walk_secobj(void *arg, boolean_t (*func)(void *, const char *),
+ uint_t flags)
+{
+ int fd = -1;
+ dladm_status_t status = DLADM_STATUS_OK;
+ dld_ioc_secobj_get_t *secobj_getp;
+ dld_secobj_t *objp;
+
+ if ((flags & DLADM_OPT_PERSIST) != 0)
+ return (i_dladm_walk_secobj_db(arg, func));
+
+ secobj_getp = calloc(1, SECOBJ_BUFSZ);
+ if (secobj_getp == NULL)
+ return (DLADM_STATUS_NOMEM);
+
+ if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0) {
+ status = dladm_errno2status(errno);
+ goto done;
+ }
+ if (i_dladm_ioctl(fd, DLDIOCSECOBJGET, secobj_getp,
+ SECOBJ_BUFSZ) < 0) {
+ status = dladm_errno2status(errno);
+ goto done;
+ }
+
+ objp = (dld_secobj_t *)(secobj_getp + 1);
+ while (secobj_getp->sg_count > 0) {
+ if (!func(arg, objp->so_name))
+ goto done;
+ secobj_getp->sg_count--;
+ objp++;
+ }
+done:
+ (void) close(fd);
+ free(secobj_getp);
+ return (status);
+}
+
+/*
+ * Data structures used for implementing persistent secure objects
+ */
+typedef struct secobj_info {
+ const char *si_name;
+ dladm_secobj_class_t *si_classp;
+ uint8_t *si_val;
+ uint_t *si_lenp;
+} secobj_info_t;
+
+typedef struct secobj_name {
+ char *sn_name;
+ struct secobj_name *sn_next;
+} secobj_name_t;
+
+typedef struct secobj_db_state secobj_db_state_t;
+
+typedef boolean_t (*secobj_db_op_t)(struct secobj_db_state *, char *,
+ secobj_info_t *, dladm_status_t *);
+
+struct secobj_db_state {
+ secobj_db_op_t ss_op;
+ secobj_info_t ss_info;
+ secobj_name_t **ss_namelist;
+};
+
+/*
+ * Update or generate a secobj entry using the info in ssp->ss_info.
+ */
+/* ARGSUSED */
+static boolean_t
+process_secobj_set(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ char tmpbuf[MAXLINELEN];
+ char classbuf[DLADM_STRSIZE];
+ char *ptr = tmpbuf, *lim = tmpbuf + MAXLINELEN;
+ int i;
+
+ sip = &ssp->ss_info;
+
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s\t", sip->si_name);
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%s\t",
+ dladm_secobjclass2str(*sip->si_classp, classbuf));
+
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "0x");
+ for (i = 0; i < *sip->si_lenp; i++) {
+ ptr += snprintf(ptr, BUFLEN(lim, ptr), "%02x",
+ sip->si_val[i] & 0xff);
+ }
+ if (ptr > lim) {
+ *statusp = DLADM_STATUS_TOOSMALL;
+ return (B_FALSE);
+ }
+ (void) snprintf(buf, MAXLINELEN, "%s\n", tmpbuf);
+ return (B_FALSE);
+}
+
+/* ARGSUSED */
+static boolean_t
+process_secobj_get(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ if (*sip->si_lenp > *ssp->ss_info.si_lenp) {
+ *statusp = DLADM_STATUS_TOOSMALL;
+ return (B_FALSE);
+ }
+ bcopy(sip->si_val, ssp->ss_info.si_val, *sip->si_lenp);
+ *ssp->ss_info.si_lenp = *sip->si_lenp;
+ *ssp->ss_info.si_classp = *sip->si_classp;
+ return (B_FALSE);
+}
+
+/* ARGSUSED */
+static boolean_t
+process_secobj_unset(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ /*
+ * Delete line.
+ */
+ buf[0] = '\0';
+ return (B_FALSE);
+}
+
+/* ARGSUSED */
+static boolean_t
+process_secobj_walk(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ secobj_name_t *snp;
+
+ if ((snp = malloc(sizeof (*snp))) == NULL)
+ return (B_TRUE);
+
+ if ((snp->sn_name = strdup(sip->si_name)) == NULL) {
+ free(snp);
+ return (B_TRUE);
+ }
+
+ snp->sn_next = NULL;
+ *ssp->ss_namelist = snp;
+ ssp->ss_namelist = &snp->sn_next;
+ return (B_TRUE);
+}
+
+/* ARGSUSED */
+static boolean_t
+process_secobj_init(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
+ dladm_status_t *statusp)
+{
+ *statusp = dladm_set_secobj(sip->si_name, *sip->si_classp, sip->si_val,
+ *sip->si_lenp, DLADM_OPT_TEMP | DLADM_OPT_CREATE);
+ return (B_TRUE);
+}
+
+static int
+parse_secobj_val(char *buf, secobj_info_t *sip)
+{
+ if (strncmp(buf, "0x", 2) != 0)
+ return (EINVAL);
+
+ return (hexascii_to_octet(buf + 2, strlen(buf) - 2,
+ sip->si_val, sip->si_lenp));
+}
+
+static boolean_t
+process_secobj_line(secobj_db_state_t *ssp, char *buf,
+ dladm_status_t *statusp)
+{
+ secobj_info_t sinfo;
+ dladm_secobj_class_t class;
+ uint8_t val[DLADM_SECOBJ_VAL_MAX];
+ uint_t vlen;
+ int i, len, nlen;
+ char *str, *lasts;
+
+ /*
+ * Skip leading spaces, blank lines, and comments.
+ */
+ len = strlen(buf);
+ for (i = 0; i < len; i++) {
+ if (!isspace(buf[i]))
+ break;
+ }
+ if (i == len || buf[i] == '#')
+ return (B_TRUE);
+
+ str = buf + i;
+ if (ssp->ss_info.si_name != NULL) {
+ /*
+ * Skip objects we're not interested in.
+ */
+ nlen = strlen(ssp->ss_info.si_name);
+ if (strncmp(str, ssp->ss_info.si_name, nlen) != 0 ||
+ !isspace(str[nlen]))
+ return (B_TRUE);
+
+ sinfo.si_name = ssp->ss_info.si_name;
+ } else {
+ /*
+ * If an object is not specified, find the object name
+ * and assign it to sinfo.si_name.
+ */
+ if (strtok_r(str, " \n\t", &lasts) == NULL)
+ goto fail;
+
+ nlen = strlen(str);
+ sinfo.si_name = str;
+ }
+ str += nlen + 1;
+ if (str >= buf + len)
+ goto fail;
+
+ /*
+ * Find the class name.
+ */
+ if ((str = strtok_r(str, " \n\t", &lasts)) == NULL)
+ goto fail;
+
+ *statusp = dladm_str2secobjclass(str, &class);
+ if (*statusp != DLADM_STATUS_OK)
+ goto fail;
+
+ /*
+ * Find the object value.
+ */
+ if ((str = strtok_r(NULL, " \n\t", &lasts)) == NULL)
+ goto fail;
+
+ vlen = DLADM_SECOBJ_VAL_MAX;
+ sinfo.si_classp = &class;
+ sinfo.si_val = val;
+ sinfo.si_lenp = &vlen;
+ if (parse_secobj_val(str, &sinfo) != 0)
+ goto fail;
+
+ return ((*ssp->ss_op)(ssp, buf, &sinfo, statusp));
+
+fail:
+ /*
+ * Delete corrupted line.
+ */
+ buf[0] = '\0';
+ return (B_TRUE);
+}
+
+static dladm_status_t
+process_secobj_db(void *arg, FILE *fp, FILE *nfp)
+{
+ secobj_db_state_t *ssp = arg;
+ dladm_status_t status = DLADM_STATUS_OK;
+ char buf[MAXLINELEN];
+ boolean_t cont = B_TRUE;
+
+ /*
+ * This loop processes each line of the configuration file.
+ * buf can potentially be modified by process_secobj_line().
+ * If this is a write operation and buf is not truncated, buf will
+ * be written to disk. process_secobj_line() will no longer be
+ * called after it returns B_FALSE; at which point the remainder
+ * of the file will continue to be read and, if necessary, written
+ * to disk as well.
+ */
+ while (fgets(buf, MAXLINELEN, fp) != NULL) {
+ if (cont)
+ cont = process_secobj_line(ssp, buf, &status);
+
+ if (nfp != NULL && buf[0] != '\0' && fputs(buf, nfp) == EOF) {
+ status = dladm_errno2status(errno);
+ break;
+ }
+ }
+ if (status != DLADM_STATUS_OK || !cont)
+ return (status);
+
+ if (ssp->ss_op == process_secobj_set) {
+ /*
+ * If the specified object is not found above, we add the
+ * object to the configuration file.
+ */
+ (void) (*ssp->ss_op)(ssp, buf, NULL, &status);
+ if (status == DLADM_STATUS_OK && fputs(buf, nfp) == EOF)
+ status = dladm_errno2status(errno);
+ }
+
+ if (ssp->ss_op == process_secobj_unset ||
+ ssp->ss_op == process_secobj_get)
+ status = DLADM_STATUS_NOTFOUND;
+
+ return (status);
+}
+
+#define SECOBJ_RW_DB(statep, writeop) \
+ (i_dladm_rw_db("/etc/dladm/secobj.conf", S_IRUSR | S_IWUSR, \
+ process_secobj_db, (statep), (writeop)))
+
+static dladm_status_t
+i_dladm_set_secobj_db(const char *obj_name, dladm_secobj_class_t class,
+ uint8_t *obj_val, uint_t obj_len)
+{
+ secobj_db_state_t state;
+
+ state.ss_op = process_secobj_set;
+ state.ss_info.si_name = obj_name;
+ state.ss_info.si_classp = &class;
+ state.ss_info.si_val = obj_val;
+ state.ss_info.si_lenp = &obj_len;
+ state.ss_namelist = NULL;
+
+ return (SECOBJ_RW_DB(&state, B_TRUE));
+}
+
+static dladm_status_t
+i_dladm_get_secobj_db(const char *obj_name, dladm_secobj_class_t *classp,
+ uint8_t *obj_val, uint_t *obj_lenp)
+{
+ secobj_db_state_t state;
+
+ state.ss_op = process_secobj_get;
+ state.ss_info.si_name = obj_name;
+ state.ss_info.si_classp = classp;
+ state.ss_info.si_val = obj_val;
+ state.ss_info.si_lenp = obj_lenp;
+ state.ss_namelist = NULL;
+
+ return (SECOBJ_RW_DB(&state, B_FALSE));
+}
+
+static dladm_status_t
+i_dladm_unset_secobj_db(const char *obj_name)
+{
+ secobj_db_state_t state;
+
+ state.ss_op = process_secobj_unset;
+ state.ss_info.si_name = obj_name;
+ state.ss_info.si_classp = NULL;
+ state.ss_info.si_val = NULL;
+ state.ss_info.si_lenp = NULL;
+ state.ss_namelist = NULL;
+
+ return (SECOBJ_RW_DB(&state, B_TRUE));
+}
+
+static dladm_status_t
+i_dladm_walk_secobj_db(void *arg, boolean_t (*func)(void *, const char *))
+{
+ secobj_db_state_t state;
+ secobj_name_t *snp = NULL, *fsnp;
+ dladm_status_t status;
+ boolean_t cont = B_TRUE;
+
+ state.ss_op = process_secobj_walk;
+ state.ss_info.si_name = NULL;
+ state.ss_info.si_classp = NULL;
+ state.ss_info.si_val = NULL;
+ state.ss_info.si_lenp = NULL;
+ state.ss_namelist = &snp;
+
+ status = SECOBJ_RW_DB(&state, B_FALSE);
+ if (status != DLADM_STATUS_OK)
+ return (status);
+
+ while (snp != NULL) {
+ fsnp = snp;
+ snp = snp->sn_next;
+ if (cont)
+ cont = func(arg, fsnp->sn_name);
+ free(fsnp->sn_name);
+ free(fsnp);
+ }
+ return (status);
+}
+
+dladm_status_t
+dladm_init_secobj(void)
+{
+ secobj_db_state_t state;
+
+ state.ss_op = process_secobj_init;
+ state.ss_info.si_name = NULL;
+ state.ss_info.si_classp = NULL;
+ state.ss_info.si_val = NULL;
+ state.ss_info.si_lenp = NULL;
+ state.ss_namelist = NULL;
+
+ return (SECOBJ_RW_DB(&state, B_FALSE));
+}
diff --git a/usr/src/lib/liblaadm/common/liblaadm.c b/usr/src/lib/liblaadm/common/liblaadm.c
index 0beeee27da..3b23a5999d 100644
--- a/usr/src/lib/liblaadm/common/liblaadm.c
+++ b/usr/src/lib/liblaadm/common/liblaadm.c
@@ -52,31 +52,31 @@
* <db-file> ::= <groups>*
* <group> ::= <key> <sep> <policy> <sep> <nports> <sep> <ports> <sep>
* <mac> <sep> <lacp-mode> <sep> <lacp-timer>
- * <sep> ::= ' ' | '\t'
- * <key> ::= <number>
+ * <sep> ::= ' ' | '\t'
+ * <key> ::= <number>
* <nports> ::= <number>
* <ports> ::= <port> <m-port>*
* <m-port> ::= ',' <port>
- * <port> ::= <devname>
+ * <port> ::= <devname>
* <devname> ::= <string>
* <port-num> ::= <number>
* <policy> ::= <pol-level> <m-pol>*
* <m-pol> ::= ',' <pol-level>
* <pol-level> ::= 'L2' | 'L3' | 'L4'
- * <mac> ::= 'auto' | <mac-addr>
+ * <mac> ::= 'auto' | <mac-addr>
* <mac-addr> ::= <hex> ':' <hex> ':' <hex> ':' <hex> ':' <hex> ':' <hex>
* <lacp-mode> ::= 'off' | 'active' | 'passive'
* <lacp-timer> ::= 'short' | 'long'
*/
#define LAADM_DEV "/devices/pseudo/aggr@0:" AGGR_DEVNAME_CTL
-#define LAADM_DB "/etc/aggregation.conf"
-#define LAADM_DB_TMP "/etc/aggregation.conf.new"
+#define LAADM_DB "/etc/dladm/aggregation.conf"
+#define LAADM_DB_TMP "/etc/dladm/aggregation.conf.new"
#define LAADM_DB_LOCK "/tmp/aggregation.conf.lock"
#define LAADM_DB_PERMS S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
-#define LAADM_DB_OWNER 0
-#define LAADM_DB_GROUP 1
+#define LAADM_DB_OWNER 15 /* "dladm" UID */
+#define LAADM_DB_GROUP 3 /* "sys" GID */
/*
* The largest configurable aggregation key. Because by default the key is
@@ -866,11 +866,13 @@ i_laadm_walk_rw_db(int (*fn)(void *, laadm_grp_attr_db_t *),
attr.lt_ports = NULL;
}
- if (fchmod(nfd, LAADM_DB_PERMS) == -1)
- goto failed;
+ if (getuid() == 0 || geteuid() == 0) {
+ if (fchmod(nfd, LAADM_DB_PERMS) == -1)
+ goto failed;
- if (fchown(nfd, LAADM_DB_OWNER, LAADM_DB_GROUP) == -1)
- goto failed;
+ if (fchown(nfd, LAADM_DB_OWNER, LAADM_DB_GROUP) == -1)
+ goto failed;
+ }
if (fflush(nfp) == EOF)
goto failed;
diff --git a/usr/src/lib/libsecdb/auth_attr.txt b/usr/src/lib/libsecdb/auth_attr.txt
index 085d3eb463..fd6d0219ce 100644
--- a/usr/src/lib/libsecdb/auth_attr.txt
+++ b/usr/src/lib/libsecdb/auth_attr.txt
@@ -62,6 +62,7 @@ solaris.mail.:::Mail::help=MailHeader.html
solaris.mail.mailq:::Mail Queue::help=MailQueue.html
#
solaris.network.:::Network::help=NetworkHeader.html
+solaris.network.link.security:::Link Security::help=LinkSecurity.html
solaris.network.wifi.config:::Wifi Config::help=WifiConfig.html
solaris.network.wifi.wep:::Wifi Wep::help=WifiWep.html
#
diff --git a/usr/src/lib/libsecdb/exec_attr.txt b/usr/src/lib/libsecdb/exec_attr.txt
index a1165b85d9..8a037f4bd8 100644
--- a/usr/src/lib/libsecdb/exec_attr.txt
+++ b/usr/src/lib/libsecdb/exec_attr.txt
@@ -178,7 +178,8 @@ Network Management:solaris:cmd:::/sbin/ifconfig:uid=0
Network Management:solaris:cmd:::/sbin/route:privs=sys_net_config
Network Management:solaris:cmd:::/sbin/routeadm:euid=0;\
privs=proc_chroot,proc_owner,sys_net_config
-Network Management:solaris:cmd:::/sbin/dladm:privs=sys_net_config
+Network Management:solaris:cmd:::/sbin/dladm:euid=dladm;egid=sys;\
+ privs=sys_net_config,net_rawaccess
Network Management:suser:cmd:::/usr/bin/netstat:uid=0
Network Management:suser:cmd:::/usr/bin/rup:euid=0
Network Management:suser:cmd:::/usr/bin/ruptime:euid=0
@@ -191,6 +192,8 @@ Network Management:suser:cmd:::/usr/sbin/rndc:privs=file_dac_read
Network Management:suser:cmd:::/usr/sbin/route:uid=0
Network Management:suser:cmd:::/usr/sbin/snoop:uid=0
Network Management:suser:cmd:::/usr/sbin/spray:euid=0
+Network Link Security:solaris:cmd:::/sbin/dladm:euid=dladm;egid=sys;\
+ privs=sys_net_config,net_rawaccess
Network Security:solaris:cmd:::/usr/lib/inet/certdb:privs=sys_net_config
Network Security:solaris:cmd:::/usr/lib/inet/certlocal:privs=sys_net_config
Network Security:solaris:cmd:::/usr/lib/inet/certrldb:privs=sys_net_config
diff --git a/usr/src/lib/libsecdb/help/auths/LinkSecurity.html b/usr/src/lib/libsecdb/help/auths/LinkSecurity.html
new file mode 100644
index 0000000000..161a38d799
--- /dev/null
+++ b/usr/src/lib/libsecdb/help/auths/LinkSecurity.html
@@ -0,0 +1,45 @@
+<HTML>
+
+<!--
+ Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ Use is subject to license terms.
+
+ CDDL HEADER START
+
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License (the "License").
+ You may not use this file except in compliance with the License.
+
+ You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ or http://www.opensolaris.org/os/licensing.
+ See the License for the specific language governing permissions
+ and limitations under the License.
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ If applicable, add the following below this CDDL HEADER, with the
+ fields enclosed by brackets "[]" replaced with your own identifying
+ information: Portions Copyright [yyyy] [name of copyright owner]
+
+ CDDL HEADER END
+-->
+<!-- SCCS keyword
+#pragma ident "%Z%%M% %I% %E% SMI"
+-->
+
+<HEAD>
+<!--
+META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"
+-->
+<!--
+META NAME="GENERATOR" CONTENT="Mozilla/4.02 [en] (X11; U; SunOS 5.6 sun4u) [Netscape]"
+-->
+</HEAD>
+<BODY>
+When Link Security is in the Authorizations Included column, it grants the authorization
+to create or remove secure objects using dladm.
+<p>
+If Link Security is grayed, then you are not entitled to Add or Remove this authorization.
+<BR>&nbsp;
+</BODY>
+</HTML>
diff --git a/usr/src/lib/libsecdb/help/auths/Makefile b/usr/src/lib/libsecdb/help/auths/Makefile
index 70e85c8426..3f063bc0d3 100644
--- a/usr/src/lib/libsecdb/help/auths/Makefile
+++ b/usr/src/lib/libsecdb/help/auths/Makefile
@@ -84,7 +84,8 @@ HTMLENTS = \
SmfValueRouting.html \
NetworkHeader.html \
WifiConfig.html \
- WifiWep.html
+ WifiWep.html \
+ LinkSecurity.html
HELPDIR=$(ROOT)/usr/lib/help
AUTHDIR=$(HELPDIR)/auths
diff --git a/usr/src/lib/libsecdb/help/profiles/Makefile b/usr/src/lib/libsecdb/help/profiles/Makefile
index 2b1313a4af..fb9b645a7b 100644
--- a/usr/src/lib/libsecdb/help/profiles/Makefile
+++ b/usr/src/lib/libsecdb/help/profiles/Makefile
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -19,7 +18,7 @@
#
# CDDL HEADER END
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -56,6 +55,7 @@ HTMLENTS = \
RtNetSecure.html \
RtNetWifiMngmnt.html \
RtNetWifiSecure.html \
+ RtNetLinkSecure.html \
RtObAccessMngmnt.html \
RtPrntAdmin.html \
RtProcManagement.html \
diff --git a/usr/src/lib/libsecdb/help/profiles/RtNetLinkSecure.html b/usr/src/lib/libsecdb/help/profiles/RtNetLinkSecure.html
new file mode 100644
index 0000000000..7fcad1df97
--- /dev/null
+++ b/usr/src/lib/libsecdb/help/profiles/RtNetLinkSecure.html
@@ -0,0 +1,39 @@
+<HTML>
+<!--
+ CDDL HEADER START
+
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License (the "License").
+ You may not use this file except in compliance with the License.
+
+ You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ or http://www.opensolaris.org/os/licensing.
+ See the License for the specific language governing permissions
+ and limitations under the License.
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ If applicable, add the following below this CDDL HEADER, with the
+ fields enclosed by brackets "[]" replaced with your own identifying
+ information: Portions Copyright [yyyy] [name of copyright owner]
+
+ CDDL HEADER END
+
+-- Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+-- Use is subject to license terms.
+-->
+<HEAD>
+ <TITLE> </TITLE>
+
+
+</HEAD>
+<BODY>
+<!-- ident "%Z%%M% %I% %E% SMI" -->
+
+When Network Link Security is in the Rights Included column, it grants the right to
+manage network link security.
+<p>
+If Network Link Security is grayed, then you are not entitled to Add or Remove this right.
+<p>
+</BODY>
+</HTML>
diff --git a/usr/src/lib/libsecdb/prof_attr.txt b/usr/src/lib/libsecdb/prof_attr.txt
index 70016e8cd2..6901a2b673 100644
--- a/usr/src/lib/libsecdb/prof_attr.txt
+++ b/usr/src/lib/libsecdb/prof_attr.txt
@@ -50,9 +50,10 @@ Maintenance and Repair:::Maintain and repair a system:auths=solaris.smf.manage.s
Media Backup:::Backup files and file systems:help=RtMediaBkup.html
Media Restore:::Restore files and file systems from backups:help=RtMediaRestore.html
Network Management:::Manage the host and network configuration:auths=solaris.smf.manage.name-service-cache,solaris.smf.manage.bind,solaris.smf.value.routing,solaris.smf.manage.routing;profiles=Network Wifi Management;help=RtNetMngmnt.html
-Network Security:::Manage network and host security:auths=solaris.smf.manage.ssh;profiles=Network Wifi Security;help=RtNetSecure.html
+Network Security:::Manage network and host security:auths=solaris.smf.manage.ssh;profiles=Network Wifi Security,Network Link Security;help=RtNetSecure.html
Network Wifi Management:::Manage wifi network configuration:auths=solaris.network.wifi.config;help=RtNetWifiMngmnt.html
Network Wifi Security:::Manage wifi network security:auths=solaris.network.wifi.wep;help=RtNetWifiSecure.html
+Network Link Security:::Manage network link security:auths=solaris.network.link.security;help=RtNetLinkSecure.html
Name Service Management:::Non-security name service scripts/commands:help=RtNameServiceAdmin.html
Name Service Security:::Security related name service scripts/commands:help=RtNameServiceSecure.html
Object Access Management:::Change ownership and permission on files:help=RtObAccessMngmnt.html
diff --git a/usr/src/lib/libwladm/Makefile b/usr/src/lib/libwladm/Makefile
new file mode 100644
index 0000000000..f537457d54
--- /dev/null
+++ b/usr/src/lib/libwladm/Makefile
@@ -0,0 +1,62 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+include $(SRC)/lib/Makefile.lib
+
+HDRS = libwladm.h libwladm_impl.h
+HDRDIR = common
+
+SUBDIRS = $(MACH)
+
+POFILE = libwladm.po
+MSGFILES = common/libwladm.c
+
+all := TARGET = all
+clean := TARGET = clean
+clobber := TARGET = clobber
+install := TARGET = install
+lint := TARGET = lint
+
+.KEEP_STATE:
+
+all clean clobber install lint: $(SUBDIRS)
+
+install_h: $(ROOTHDRS)
+
+check: $(CHECKHDRS)
+
+$(POFILE): pofile_MSGFILES
+
+_msg: $(MSGDOMAINPOFILE)
+
+$(SUBDIRS): FRC
+ @cd $@; pwd; $(MAKE) $(TARGET)
+
+FRC:
+
+include $(SRC)/Makefile.msg.targ
+include $(SRC)/lib/Makefile.targ
diff --git a/usr/src/lib/libwladm/Makefile.com b/usr/src/lib/libwladm/Makefile.com
new file mode 100644
index 0000000000..1f8c9760df
--- /dev/null
+++ b/usr/src/lib/libwladm/Makefile.com
@@ -0,0 +1,51 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+LIBRARY = libwladm.a
+VERS = .1
+OBJECTS = libwladm.o
+
+include ../../Makefile.lib
+# install this library in the root filesystem
+include ../../Makefile.rootfs
+
+LIBS = $(DYNLIB) $(LINTLIB)
+LDLIBS += -ldevinfo -lsocket -lc
+
+SRCDIR = ../common
+$(LINTLIB) := SRCS = $(SRCDIR)/$(LINTSRC)
+
+CFLAGS += $(CCVERBOSE)
+CPPFLAGS += -I$(SRCDIR) -D_REENTRANT
+
+.KEEP_STATE:
+
+all: $(LIBS)
+
+lint: lintcheck
+
+include $(SRC)/lib/Makefile.targ
diff --git a/usr/src/lib/libwladm/common/libwladm.c b/usr/src/lib/libwladm/common/libwladm.c
new file mode 100644
index 0000000000..4c3c8e918b
--- /dev/null
+++ b/usr/src/lib/libwladm/common/libwladm.c
@@ -0,0 +1,1957 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stropts.h>
+#include <libdevinfo.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_types.h>
+#include <libwladm.h>
+#include <libwladm_impl.h>
+#include <inet/wifi_ioctl.h>
+
+typedef struct val_desc {
+ char *vd_name;
+ uint_t vd_val;
+} val_desc_t;
+
+struct prop_desc;
+
+typedef wladm_status_t pd_getf_t(int, wldp_t *, char **, uint_t *);
+typedef wladm_status_t pd_setf_t(int, wldp_t *, val_desc_t *, uint_t);
+typedef wladm_status_t pd_checkf_t(int, wldp_t *, struct prop_desc *, char **,
+ uint_t, val_desc_t **);
+typedef struct prop_desc {
+ char *pd_name;
+ val_desc_t pd_defval;
+ val_desc_t *pd_modval;
+ uint_t pd_nmodval;
+ pd_setf_t *pd_set;
+ pd_getf_t *pd_getmod;
+ pd_getf_t *pd_get;
+ pd_checkf_t *pd_check;
+} prop_desc_t;
+
+static int do_get_bsstype(int, wldp_t *);
+static int do_get_essid(int, wldp_t *);
+static int do_get_bssid(int, wldp_t *);
+static int do_get_signal(int, wldp_t *);
+static int do_get_encryption(int, wldp_t *);
+static int do_get_authmode(int, wldp_t *);
+static int do_get_linkstatus(int, wldp_t *);
+static int do_get_esslist(int, wldp_t *);
+static int do_get_rate(int, wldp_t *);
+static int do_get_phyconf(int, wldp_t *);
+static int do_get_powermode(int, wldp_t *);
+static int do_get_radio(int, wldp_t *);
+static int do_get_mode(int, wldp_t *);
+
+static int do_set_bsstype(int, wldp_t *, wladm_bsstype_t *);
+static int do_set_authmode(int, wldp_t *, wladm_auth_t *);
+static int do_set_encryption(int, wldp_t *, wladm_secmode_t *);
+static int do_set_essid(int, wldp_t *, wladm_essid_t *);
+static int do_set_createibss(int, wldp_t *, boolean_t *);
+static int do_set_wepkey(int, wldp_t *, wladm_wep_key_t *, uint_t);
+static int do_set_rate(int, wldp_t *, wladm_rates_t *);
+static int do_set_powermode(int, wldp_t *, wladm_powermode_t *);
+static int do_set_radio(int, wldp_t *, wladm_radio_t *);
+static int do_set_channel(int, wldp_t *, wladm_channel_t *);
+
+static int open_link(const char *);
+static int do_scan(int, wldp_t *);
+static int do_disconnect(int, wldp_t *);
+static boolean_t find_val_by_name(const char *, val_desc_t *, uint_t, uint_t *);
+static boolean_t find_name_by_val(uint_t, val_desc_t *, uint_t, char **);
+static void generate_essid(wladm_essid_t *);
+
+static wladm_status_t wladm_wlresult2status(wldp_t *);
+
+static pd_getf_t do_get_rate_mod, do_get_rate_prop, do_get_channel_prop,
+ do_get_powermode_prop, do_get_radio_prop;
+static pd_setf_t do_set_rate_prop, do_set_powermode_prop,
+ do_set_radio_prop;
+static pd_checkf_t do_check_prop, do_check_rate;
+
+static val_desc_t status_vals[] = {
+ { "ok", WLADM_STATUS_OK },
+ { "invalid argument", WLADM_STATUS_BADARG },
+ { "operation failed", WLADM_STATUS_FAILED },
+ { "operation not supported", WLADM_STATUS_NOTSUP },
+ { "already connected", WLADM_STATUS_ISCONN },
+ { "not connected", WLADM_STATUS_NOTCONN },
+ { "not found", WLADM_STATUS_NOTFOUND },
+ { "value not found", WLADM_STATUS_BADVAL },
+ { "invalid link", WLADM_STATUS_LINKINVAL },
+ { "insufficient memory", WLADM_STATUS_NOMEM },
+ { "operation timed out", WLADM_STATUS_TIMEDOUT },
+ { "read-only property", WLADM_STATUS_PROPRDONLY },
+ { "not enough space", WLADM_STATUS_TOOSMALL },
+ { "invalid number of values", WLADM_STATUS_BADVALCNT }
+};
+
+static val_desc_t linkstatus_vals[] = {
+ { "disconnected", WLADM_LINK_STATUS_DISCONNECTED },
+ { "connected", WLADM_LINK_STATUS_CONNECTED }
+};
+
+static val_desc_t secmode_vals[] = {
+ { "none", WLADM_SECMODE_NONE },
+ { "wep", WLADM_SECMODE_WEP }
+};
+
+static val_desc_t strength_vals[] = {
+ { "very weak", WLADM_STRENGTH_VERY_WEAK },
+ { "weak", WLADM_STRENGTH_WEAK },
+ { "good", WLADM_STRENGTH_GOOD },
+ { "very good", WLADM_STRENGTH_VERY_GOOD },
+ { "excellent", WLADM_STRENGTH_EXCELLENT }
+};
+
+static val_desc_t mode_vals[] = {
+ { "a", WLADM_MODE_80211A },
+ { "b", WLADM_MODE_80211B },
+ { "g", WLADM_MODE_80211G },
+};
+
+static val_desc_t auth_vals[] = {
+ { "open", WLADM_AUTH_OPEN },
+ { "shared", WLADM_AUTH_SHARED }
+};
+
+static val_desc_t bsstype_vals[] = {
+ { "bss", WLADM_BSSTYPE_BSS },
+ { "ibss", WLADM_BSSTYPE_IBSS },
+ { "any", WLADM_BSSTYPE_ANY }
+};
+
+static val_desc_t radio_vals[] = {
+ { "on", WLADM_RADIO_ON },
+ { "off", WLADM_RADIO_OFF }
+};
+
+static val_desc_t powermode_vals[] = {
+ { "off", WLADM_PM_OFF },
+ { "fast", WLADM_PM_FAST },
+ { "max", WLADM_PM_MAX }
+};
+
+#define VALCNT(vals) (sizeof ((vals)) / sizeof (val_desc_t))
+static prop_desc_t prop_table[] = {
+
+ { "channel", { NULL, 0 }, NULL, 0,
+ NULL, NULL, do_get_channel_prop, do_check_prop},
+
+ { "powermode", { "off", WLADM_PM_OFF }, powermode_vals,
+ VALCNT(powermode_vals),
+ do_set_powermode_prop, NULL,
+ do_get_powermode_prop, do_check_prop},
+
+ { "radio", { "on", WLADM_RADIO_ON }, radio_vals,
+ VALCNT(radio_vals),
+ do_set_radio_prop, NULL,
+ do_get_radio_prop, do_check_prop},
+
+ { "speed", { "", 0 }, NULL, 0,
+ do_set_rate_prop, do_get_rate_mod,
+ do_get_rate_prop, do_check_rate}
+};
+/*
+ * Unfortunately, MAX_SCAN_SUPPORT_RATES is too small to allow all
+ * rates to be retrieved. However, we cannot increase it at this
+ * time because it will break binary comatibility with unbundled
+ * WiFi drivers and utilities. So for now we define an additional
+ * constant, MAX_SUPPORT_RATES, to allow all rates to be retrieved.
+ */
+#define MAX_SUPPORT_RATES 64
+#define WLADM_MAX_PROPS (sizeof (prop_table) / sizeof (prop_desc_t))
+#define IS_CONNECTED(gbuf) \
+ ((*(wl_linkstatus_t *)((gbuf)->wldp_buf) == WL_CONNECTED))
+
+static wladm_status_t
+wladm_wlresult2status(wldp_t *gbuf)
+{
+ switch (gbuf->wldp_result) {
+ case WL_SUCCESS:
+ return (WLADM_STATUS_OK);
+
+ case WL_NOTSUPPORTED:
+ case WL_LACK_FEATURE:
+ return (WLADM_STATUS_NOTSUP);
+
+ case WL_READONLY:
+ return (WLADM_STATUS_PROPRDONLY);
+
+ default:
+ break;
+ }
+
+ return (WLADM_STATUS_FAILED);
+}
+
+static int
+open_link(const char *link)
+{
+ char linkname[MAXPATHLEN];
+ wldp_t *gbuf;
+ int fd;
+
+ if (link == NULL)
+ return (-1);
+
+ (void) snprintf(linkname, MAXPATHLEN, "/dev/%s", link);
+ if ((fd = open(linkname, O_RDWR)) < 0)
+ return (-1);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ (void) close(fd);
+ return (-1);
+ }
+
+ /*
+ * Check to see if the link is wireless.
+ */
+ if (do_get_bsstype(fd, gbuf) < 0) {
+ free(gbuf);
+ (void) close(fd);
+ return (-1);
+ }
+
+ free(gbuf);
+ return (fd);
+}
+
+static wladm_mode_t
+do_convert_mode(wl_phy_conf_t *phyp)
+{
+ switch (phyp->wl_phy_fhss_conf.wl_fhss_subtype) {
+ case WL_ERP:
+ return (WLADM_MODE_80211G);
+ case WL_OFDM:
+ return (WLADM_MODE_80211A);
+ case WL_DSSS:
+ case WL_FHSS:
+ return (WLADM_MODE_80211B);
+ default:
+ break;
+ }
+
+ return (WLADM_MODE_NONE);
+}
+
+static boolean_t
+do_convert_chan(wl_phy_conf_t *phyp, uint32_t *channelp)
+{
+ wl_fhss_t *wlfp = &phyp->wl_phy_fhss_conf;
+ wl_ofdm_t *wlop = &phyp->wl_phy_ofdm_conf;
+
+ switch (wlfp->wl_fhss_subtype) {
+ case WL_FHSS:
+ case WL_DSSS:
+ case WL_IRBASE:
+ case WL_HRDS:
+ case WL_ERP:
+ *channelp = wlfp->wl_fhss_channel;
+ break;
+ case WL_OFDM:
+ *channelp = WLADM_OFDM2CHAN(wlop->wl_ofdm_frequency);
+ break;
+ default:
+ return (B_FALSE);
+ }
+ return (B_TRUE);
+}
+
+#define IEEE80211_RATE 0x7f
+static void
+fill_wlan_attr(wl_ess_conf_t *wlp, wladm_wlan_attr_t *attrp)
+{
+ int i;
+
+ (void) memset(attrp, 0, sizeof (*attrp));
+
+ (void) snprintf(attrp->wa_essid.we_bytes, WLADM_MAX_ESSID_LEN, "%s",
+ wlp->wl_ess_conf_essid.wl_essid_essid);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_ESSID;
+
+ (void) memcpy(attrp->wa_bssid.wb_bytes, wlp->wl_ess_conf_bssid,
+ WLADM_BSSID_LEN);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_BSSID;
+
+ attrp->wa_secmode = (wlp->wl_ess_conf_wepenabled ==
+ WL_ENC_WEP ? WLADM_SECMODE_WEP : WLADM_SECMODE_NONE);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_SECMODE;
+
+ attrp->wa_bsstype = (wlp->wl_ess_conf_bsstype == WL_BSS_BSS ?
+ WLADM_BSSTYPE_BSS : WLADM_BSSTYPE_IBSS);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_BSSTYPE;
+
+ attrp->wa_auth = (wlp->wl_ess_conf_authmode == 0 ?
+ WLADM_AUTH_OPEN : WLADM_AUTH_SHARED);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_AUTH;
+
+ attrp->wa_strength = WLADM_SIGNAL2STRENGTH(wlp->wl_ess_conf_sl);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_STRENGTH;
+
+ attrp->wa_mode = do_convert_mode((wl_phy_conf_t *)&wlp->wl_phy_conf);
+ attrp->wa_valid |= WLADM_WLAN_ATTR_MODE;
+
+ for (i = 0; i < MAX_SCAN_SUPPORT_RATES; i++) {
+ wlp->wl_supported_rates[i] &= IEEE80211_RATE;
+ if (wlp->wl_supported_rates[i] > attrp->wa_speed)
+ attrp->wa_speed = wlp->wl_supported_rates[i];
+ }
+ if (attrp->wa_speed > 0)
+ attrp->wa_valid |= WLADM_WLAN_ATTR_SPEED;
+
+ if (do_convert_chan((wl_phy_conf_t *)&wlp->wl_phy_conf,
+ &attrp->wa_channel))
+ attrp->wa_valid |= WLADM_WLAN_ATTR_CHANNEL;
+}
+
+wladm_status_t
+wladm_scan(const char *link, void *arg,
+ boolean_t (*func)(void *, wladm_wlan_attr_t *))
+{
+ int fd, i;
+ uint32_t count;
+ wl_ess_conf_t *wlp;
+ wldp_t *gbuf;
+ wladm_wlan_attr_t wlattr;
+ wladm_status_t status;
+ boolean_t connected;
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+ connected = IS_CONNECTED(gbuf);
+
+ if (do_scan(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (do_get_esslist(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ wlp = ((wl_ess_list_t *)gbuf->wldp_buf)->wl_ess_list_ess;
+ count = ((wl_ess_list_t *)(gbuf->wldp_buf))->wl_ess_list_num;
+
+ for (i = 0; i < count; i++, wlp++) {
+ fill_wlan_attr(wlp, &wlattr);
+ if (!func(arg, &wlattr))
+ break;
+ }
+
+ if (!connected) {
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+ if (IS_CONNECTED(gbuf))
+ (void) do_disconnect(fd, gbuf);
+ }
+
+ status = WLADM_STATUS_OK;
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+/*
+ * Structures used in building the list of eligible WLANs to connect to.
+ * Specifically, `connect_state' has the WLAN attributes that must be matched
+ * (in `cs_attr') and a growing list of WLANs that matched those attributes
+ * chained through `cs_list'. Each element in the list is of type `attr_node'
+ * and has the matching WLAN's attributes and a pointer to the next element.
+ * For convenience, `cs_count' tracks the number of elements in the list.
+ */
+typedef struct attr_node {
+ wladm_wlan_attr_t an_attr;
+ struct attr_node *an_next;
+} attr_node_t;
+
+typedef struct connect_state {
+ wladm_wlan_attr_t *cs_attr;
+ uint_t cs_count;
+ attr_node_t *cs_list;
+} connect_state_t;
+
+/*
+ * Compare two sets of WLAN attributes. For now, we only consider strength
+ * and speed (in that order), which matches the documented default policy for
+ * wladm_connect().
+ */
+static int
+attr_compare(const void *p1, const void *p2)
+{
+ wladm_wlan_attr_t *attrp1, *attrp2;
+
+ attrp1 = (*(wladm_wlan_attr_t **)p1);
+ attrp2 = (*(wladm_wlan_attr_t **)p2);
+
+ if (attrp1->wa_strength < attrp2->wa_strength)
+ return (1);
+
+ if (attrp1->wa_strength > attrp2->wa_strength)
+ return (-1);
+
+ return (attrp2->wa_speed - attrp1->wa_speed);
+}
+
+/*
+ * Callback function used by wladm_connect() to filter out unwanted WLANs when
+ * scanning for available WLANs. Always returns B_TRUE to continue the scan.
+ */
+static boolean_t
+connect_cb(void *arg, wladm_wlan_attr_t *attrp)
+{
+ attr_node_t *nodep;
+ wladm_wlan_attr_t *fattrp;
+ connect_state_t *statep = (connect_state_t *)arg;
+
+ fattrp = statep->cs_attr;
+ if (fattrp == NULL)
+ goto append;
+
+ if ((fattrp->wa_valid & attrp->wa_valid) != fattrp->wa_valid)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_ESSID) != 0 &&
+ strncmp(fattrp->wa_essid.we_bytes, attrp->wa_essid.we_bytes,
+ WLADM_MAX_ESSID_LEN) != 0)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_SECMODE) != 0 &&
+ fattrp->wa_secmode != attrp->wa_secmode)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_MODE) != 0 &&
+ fattrp->wa_mode != attrp->wa_mode)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_STRENGTH) != 0 &&
+ fattrp->wa_strength != attrp->wa_strength)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_SPEED) != 0 &&
+ fattrp->wa_speed != attrp->wa_speed)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_AUTH) != 0) {
+ attrp->wa_auth = fattrp->wa_auth;
+ attrp->wa_valid |= WLADM_WLAN_ATTR_AUTH;
+ }
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_BSSTYPE) != 0 &&
+ fattrp->wa_bsstype != attrp->wa_bsstype)
+ return (B_TRUE);
+
+ if ((fattrp->wa_valid & WLADM_WLAN_ATTR_BSSID) != 0 &&
+ memcmp(fattrp->wa_bssid.wb_bytes, attrp->wa_bssid.wb_bytes,
+ WLADM_BSSID_LEN) != 0)
+ return (B_TRUE);
+append:
+ nodep = malloc(sizeof (attr_node_t));
+ if (nodep == NULL)
+ return (B_TRUE);
+
+ (void) memcpy(&nodep->an_attr, attrp, sizeof (wladm_wlan_attr_t));
+ nodep->an_next = statep->cs_list;
+ statep->cs_list = nodep;
+ statep->cs_count++;
+
+ return (B_TRUE);
+}
+
+static wladm_status_t
+do_connect(int fd, wldp_t *gbuf, wladm_wlan_attr_t *attrp,
+ boolean_t create_ibss, void *keys, uint_t key_count, int timeout)
+{
+ wladm_secmode_t secmode;
+ wladm_auth_t authmode;
+ wladm_bsstype_t bsstype;
+ wladm_essid_t essid;
+ boolean_t essid_valid = B_FALSE;
+ wladm_status_t status = WLADM_STATUS_FAILED;
+ wladm_channel_t channel;
+ hrtime_t start;
+ struct timespec ts;
+
+ if ((attrp->wa_valid & WLADM_WLAN_ATTR_CHANNEL) != 0) {
+ channel = attrp->wa_channel;
+ if (do_set_channel(fd, gbuf, &channel) < 0)
+ goto done;
+ }
+
+ secmode = ((attrp->wa_valid & WLADM_WLAN_ATTR_SECMODE) != 0) ?
+ attrp->wa_secmode : WLADM_SECMODE_NONE;
+
+ if (do_set_encryption(fd, gbuf, &secmode) < 0)
+ goto done;
+
+ authmode = ((attrp->wa_valid & WLADM_WLAN_ATTR_AUTH) != 0) ?
+ attrp->wa_auth : WLADM_AUTH_OPEN;
+
+ if (do_set_authmode(fd, gbuf, &authmode) < 0)
+ goto done;
+
+ bsstype = ((attrp->wa_valid & WLADM_WLAN_ATTR_BSSTYPE) != 0) ?
+ attrp->wa_bsstype : WLADM_BSSTYPE_BSS;
+
+ if (do_set_bsstype(fd, gbuf, &bsstype) < 0)
+ goto done;
+
+ if (secmode == WLADM_SECMODE_WEP &&
+ (keys == NULL || key_count == 0 || key_count > MAX_NWEPKEYS ||
+ do_set_wepkey(fd, gbuf, keys, key_count) < 0))
+ goto done;
+
+ if (create_ibss) {
+ if (do_set_channel(fd, gbuf, &channel) < 0)
+ goto done;
+
+ if (do_set_createibss(fd, gbuf, &create_ibss) < 0)
+ goto done;
+
+ if ((attrp->wa_valid & WLADM_WLAN_ATTR_ESSID) == 0) {
+ generate_essid(&essid);
+ essid_valid = B_TRUE;
+ }
+ }
+
+ if ((attrp->wa_valid & WLADM_WLAN_ATTR_ESSID) != 0) {
+ essid = attrp->wa_essid;
+ essid_valid = B_TRUE;
+ }
+
+ if (!essid_valid || do_set_essid(fd, gbuf, &essid) < 0)
+ goto done;
+
+ ts.tv_sec = 0;
+ ts.tv_nsec = WLADM_CONNECT_POLLRATE;
+ start = gethrtime();
+ for (;;) {
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (IS_CONNECTED(gbuf))
+ break;
+
+ (void) nanosleep(&ts, NULL);
+ if ((timeout >= 0) && (gethrtime() - start) /
+ NANOSEC >= timeout) {
+ status = WLADM_STATUS_TIMEDOUT;
+ goto done;
+ }
+ }
+ status = WLADM_STATUS_OK;
+done:
+ return (status);
+}
+
+wladm_status_t
+wladm_connect(const char *link, wladm_wlan_attr_t *attrp,
+ int timeout, void *keys, uint_t key_count, uint_t flags)
+{
+ int fd, i;
+ wldp_t *gbuf = NULL;
+ connect_state_t state = {0, NULL, NULL};
+ attr_node_t *nodep = NULL;
+ boolean_t create_ibss, set_authmode;
+ wladm_wlan_attr_t **wl_list = NULL;
+ wladm_status_t status = WLADM_STATUS_FAILED;
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (IS_CONNECTED(gbuf)) {
+ status = WLADM_STATUS_ISCONN;
+ goto done;
+ }
+
+ set_authmode = ((attrp != NULL) &&
+ (attrp->wa_valid & WLADM_WLAN_ATTR_MODE) != 0);
+ create_ibss = ((flags & WLADM_OPT_CREATEIBSS) != 0 &&
+ attrp != NULL &&
+ (attrp->wa_valid & WLADM_WLAN_ATTR_BSSTYPE) != 0 &&
+ attrp->wa_bsstype == WLADM_BSSTYPE_IBSS);
+
+ if ((flags & WLADM_OPT_NOSCAN) != 0 ||
+ (create_ibss && attrp != NULL &&
+ (attrp->wa_valid & WLADM_WLAN_ATTR_ESSID) == 0)) {
+ status = do_connect(fd, gbuf, attrp,
+ create_ibss, keys, key_count, timeout);
+ goto done;
+ }
+
+ state.cs_attr = attrp;
+ state.cs_list = NULL;
+ state.cs_count = 0;
+
+ status = wladm_scan(link, &state, connect_cb);
+ if (status != WLADM_STATUS_OK)
+ goto done;
+
+ if (state.cs_count == 0) {
+ if (!create_ibss) {
+ status = WLADM_STATUS_NOTFOUND;
+ goto done;
+ }
+ status = do_connect(fd, gbuf, attrp, create_ibss,
+ keys, key_count, timeout);
+ goto done;
+ }
+
+ wl_list = malloc(state.cs_count * sizeof (wladm_wlan_attr_t *));
+ if (wl_list == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ nodep = state.cs_list;
+ for (i = 0; i < state.cs_count; i++) {
+ wl_list[i] = &nodep->an_attr;
+ nodep = nodep->an_next;
+ }
+ qsort(wl_list, state.cs_count, sizeof (wladm_wlan_attr_t *),
+ attr_compare);
+
+ for (i = 0; i < state.cs_count; i++) {
+ wladm_wlan_attr_t *ap = wl_list[i];
+
+ status = do_connect(fd, gbuf, ap, create_ibss, keys,
+ key_count, timeout);
+ if (status == WLADM_STATUS_OK)
+ break;
+
+ if (!set_authmode) {
+ ap->wa_auth = WLADM_AUTH_SHARED;
+ ap->wa_valid |= WLADM_WLAN_ATTR_AUTH;
+ status = do_connect(fd, gbuf, ap, create_ibss, keys,
+ key_count, timeout);
+ if (status == WLADM_STATUS_OK)
+ break;
+ }
+ }
+done:
+ if ((status != WLADM_STATUS_OK) && (status != WLADM_STATUS_ISCONN))
+ (void) do_disconnect(fd, gbuf);
+
+ while (state.cs_list != NULL) {
+ nodep = state.cs_list;
+ state.cs_list = nodep->an_next;
+ free(nodep);
+ }
+ free(gbuf);
+ free(wl_list);
+ (void) close(fd);
+ return (status);
+}
+
+wladm_status_t
+wladm_disconnect(const char *link)
+{
+ int fd;
+ wldp_t *gbuf;
+ wladm_status_t status;
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_BADARG);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (!IS_CONNECTED(gbuf)) {
+ status = WLADM_STATUS_NOTCONN;
+ goto done;
+ }
+
+ if (do_disconnect(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (do_get_linkstatus(fd, gbuf) < 0) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ if (IS_CONNECTED(gbuf)) {
+ status = WLADM_STATUS_FAILED;
+ goto done;
+ }
+
+ status = WLADM_STATUS_OK;
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+typedef struct wladm_linkname {
+ char wl_name[MAXNAMELEN];
+ struct wladm_linkname *wl_next;
+} wladm_linkname_t;
+
+typedef struct wladm_walk {
+ wladm_linkname_t *ww_list;
+ wladm_status_t ww_status;
+} wladm_walk_t;
+
+/* ARGSUSED */
+static int
+append_linkname(di_node_t node, di_minor_t minor, void *arg)
+{
+ wladm_walk_t *statep = arg;
+ wladm_linkname_t **lastp = &statep->ww_list;
+ wladm_linkname_t *wlp = *lastp;
+ char name[MAXNAMELEN];
+
+ (void) snprintf(name, MAXNAMELEN, "%s%d",
+ di_driver_name(node), di_instance(node));
+
+ while (wlp != NULL) {
+ if (strcmp(wlp->wl_name, name) == 0)
+ return (DI_WALK_CONTINUE);
+
+ lastp = &wlp->wl_next;
+ wlp = wlp->wl_next;
+ }
+ if ((wlp = malloc(sizeof (*wlp))) == NULL) {
+ statep->ww_status = WLADM_STATUS_NOMEM;
+ return (DI_WALK_CONTINUE);
+ }
+
+ (void) strlcpy(wlp->wl_name, name, MAXNAMELEN);
+ wlp->wl_next = NULL;
+ *lastp = wlp;
+
+ return (DI_WALK_CONTINUE);
+}
+
+wladm_status_t
+wladm_walk(void *arg, boolean_t (*func)(void *, const char *))
+{
+ di_node_t root;
+ wladm_walk_t state;
+ wladm_linkname_t *wlp, *wlp_next;
+ boolean_t cont = B_TRUE;
+
+ if ((root = di_init("/", DINFOCACHE)) == DI_NODE_NIL)
+ return (WLADM_STATUS_FAILED);
+
+ state.ww_list = NULL;
+ state.ww_status = WLADM_STATUS_OK;
+ (void) di_walk_minor(root, DDI_NT_NET_WIFI, DI_CHECK_ALIAS,
+ &state, append_linkname);
+ di_fini(root);
+
+ for (wlp = state.ww_list; wlp != NULL; wlp = wlp_next) {
+ /*
+ * NOTE: even if (*func)() returns B_FALSE, the loop continues
+ * since all memory must be freed.
+ */
+ if (cont)
+ cont = (*func)(arg, wlp->wl_name);
+ wlp_next = wlp->wl_next;
+ free(wlp);
+ }
+ return (state.ww_status);
+}
+
+wladm_status_t
+wladm_get_link_attr(const char *link, wladm_link_attr_t *attrp)
+{
+ int fd;
+ wldp_t *gbuf;
+ wl_rssi_t signal;
+ wl_bss_type_t bsstype;
+ wl_authmode_t authmode;
+ wl_encryption_t encryption;
+ wl_rates_t *ratesp;
+ wladm_wlan_attr_t *wl_attrp;
+ wladm_status_t status = WLADM_STATUS_FAILED;
+
+ if (attrp == NULL)
+ return (WLADM_STATUS_BADARG);
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ (void) memset(attrp, 0, sizeof (*attrp));
+ wl_attrp = &attrp->la_wlan_attr;
+
+ if (do_get_linkstatus(fd, gbuf) < 0)
+ goto done;
+
+ attrp->la_valid |= WLADM_LINK_ATTR_STATUS;
+ if (!IS_CONNECTED(gbuf)) {
+ attrp->la_status = WLADM_LINK_STATUS_DISCONNECTED;
+ status = WLADM_STATUS_OK;
+ goto done;
+ }
+ attrp->la_status = WLADM_LINK_STATUS_CONNECTED;
+
+ if (do_get_essid(fd, gbuf) < 0)
+ goto done;
+
+ (void) strlcpy(wl_attrp->wa_essid.we_bytes,
+ ((wl_essid_t *)(gbuf->wldp_buf))->wl_essid_essid,
+ WLADM_MAX_ESSID_LEN);
+
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_ESSID;
+
+ if (do_get_bssid(fd, gbuf) < 0)
+ goto done;
+
+ (void) memcpy(wl_attrp->wa_bssid.wb_bytes, gbuf->wldp_buf,
+ WLADM_BSSID_LEN);
+
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_BSSID;
+
+ if (do_get_encryption(fd, gbuf) < 0)
+ goto done;
+
+ encryption = *(wl_encryption_t *)(gbuf->wldp_buf);
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_SECMODE;
+
+ switch (encryption) {
+ case WL_NOENCRYPTION:
+ wl_attrp->wa_secmode = WLADM_SECMODE_NONE;
+ break;
+ case WL_ENC_WEP:
+ wl_attrp->wa_secmode = WLADM_SECMODE_WEP;
+ break;
+ default:
+ wl_attrp->wa_valid &= ~WLADM_WLAN_ATTR_SECMODE;
+ break;
+ }
+
+ if (do_get_signal(fd, gbuf) < 0)
+ goto done;
+
+ signal = *(wl_rssi_t *)(gbuf->wldp_buf);
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_STRENGTH;
+ wl_attrp->wa_strength = WLADM_SIGNAL2STRENGTH(signal);
+
+ if (do_get_rate(fd, gbuf) < 0)
+ goto done;
+
+ ratesp = (wl_rates_t *)(gbuf->wldp_buf);
+ if (ratesp->wl_rates_num > 0) {
+ uint_t i, r = 0;
+
+ for (i = 0; i < ratesp->wl_rates_num; i++) {
+ if (ratesp->wl_rates_rates[i] > r)
+ r = ratesp->wl_rates_rates[i];
+ }
+ wl_attrp->wa_speed = r;
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_SPEED;
+ }
+
+ if (do_get_authmode(fd, gbuf) < 0)
+ goto done;
+
+ authmode = *(wl_authmode_t *)(gbuf->wldp_buf);
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_AUTH;
+
+ switch (authmode) {
+ case WL_OPENSYSTEM:
+ wl_attrp->wa_auth = WLADM_AUTH_OPEN;
+ break;
+ case WL_SHAREDKEY:
+ wl_attrp->wa_auth = WLADM_AUTH_SHARED;
+ break;
+ default:
+ wl_attrp->wa_valid &= ~WLADM_WLAN_ATTR_AUTH;
+ break;
+ }
+
+ if (do_get_bsstype(fd, gbuf) < 0)
+ goto done;
+
+ bsstype = *(wl_bss_type_t *)(gbuf->wldp_buf);
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_BSSTYPE;
+
+ switch (bsstype) {
+ case WL_BSS_BSS:
+ wl_attrp->wa_bsstype = WLADM_BSSTYPE_BSS;
+ break;
+ case WL_BSS_IBSS:
+ wl_attrp->wa_bsstype = WLADM_BSSTYPE_IBSS;
+ break;
+ case WL_BSS_ANY:
+ wl_attrp->wa_bsstype = WLADM_BSSTYPE_ANY;
+ break;
+ default:
+ wl_attrp->wa_valid &= ~WLADM_WLAN_ATTR_BSSTYPE;
+ break;
+ }
+
+ if (do_get_mode(fd, gbuf) < 0)
+ goto done;
+
+ wl_attrp->wa_mode = do_convert_mode((wl_phy_conf_t *)(gbuf->wldp_buf));
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_MODE;
+ if (wl_attrp->wa_mode != WLADM_MODE_NONE)
+ wl_attrp->wa_valid |= WLADM_WLAN_ATTR_MODE;
+
+ attrp->la_valid |= WLADM_LINK_ATTR_WLAN;
+ status = WLADM_STATUS_OK;
+
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+boolean_t
+wladm_is_valid(const char *link)
+{
+ int fd = open_link(link);
+
+ if (fd < 0)
+ return (B_FALSE);
+
+ (void) close(fd);
+ return (B_TRUE);
+}
+
+/* ARGSUSED */
+static wladm_status_t
+do_check_prop(int fd, wldp_t *guf, prop_desc_t *pdp, char **prop_val,
+ uint_t val_cnt, val_desc_t **vdpp)
+{
+ int i;
+ val_desc_t *vdp;
+
+ if (pdp->pd_nmodval == 0)
+ return (WLADM_STATUS_PROPRDONLY);
+
+ if (val_cnt != 1)
+ return (WLADM_STATUS_BADVALCNT);
+
+ for (i = 0; i < pdp->pd_nmodval; i++)
+ if (strcasecmp(*prop_val, pdp->pd_modval[i].vd_name) == 0)
+ break;
+
+ if (i == pdp->pd_nmodval)
+ return (WLADM_STATUS_BADVAL);
+
+ vdp = malloc(sizeof (val_desc_t));
+ if (vdp == NULL)
+ return (WLADM_STATUS_NOMEM);
+
+ (void) memcpy(vdp, &pdp->pd_modval[i], sizeof (val_desc_t));
+ *vdpp = vdp;
+ return (WLADM_STATUS_OK);
+}
+
+static wladm_status_t
+do_set_prop(int fd, wldp_t *gbuf, prop_desc_t *pdp,
+ char **prop_val, uint_t val_cnt)
+{
+ wladm_status_t status;
+ val_desc_t *vdp = NULL;
+ uint_t cnt;
+
+ if (pdp->pd_set == NULL)
+ return (WLADM_STATUS_PROPRDONLY);
+
+ if (prop_val != NULL) {
+ status = pdp->pd_check(fd, gbuf, pdp, prop_val,
+ val_cnt, &vdp);
+
+ if (status != WLADM_STATUS_OK)
+ return (status);
+
+ cnt = val_cnt;
+ } else {
+ if (pdp->pd_defval.vd_name == NULL)
+ return (WLADM_STATUS_NOTSUP);
+
+ if ((vdp = malloc(sizeof (val_desc_t))) == NULL)
+ return (WLADM_STATUS_NOMEM);
+
+ *vdp = pdp->pd_defval;
+ cnt = 1;
+ }
+ status = pdp->pd_set(fd, gbuf, vdp, cnt);
+ if (status == WLADM_STATUS_OK) {
+ /*
+ * Some ioctls return 0 but store error code in
+ * wldp_result. Need to fix them.
+ */
+ if (gbuf->wldp_result != WL_SUCCESS)
+ status = wladm_wlresult2status(gbuf);
+ }
+ free(vdp);
+ return (status);
+}
+
+wladm_status_t
+wladm_set_prop(const char *link, const char *prop_name,
+ char **prop_val, uint_t val_cnt)
+{
+ int fd, i;
+ wldp_t *gbuf = NULL;
+ boolean_t found = B_FALSE;
+ wladm_status_t status = WLADM_STATUS_OK;
+
+ if ((prop_name == NULL && prop_val != NULL) ||
+ (prop_val != NULL && val_cnt == 0))
+ return (WLADM_STATUS_BADARG);
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ for (i = 0; i < WLADM_MAX_PROPS; i++) {
+ prop_desc_t *pdp = &prop_table[i];
+ wladm_status_t s;
+
+ if (prop_name != NULL &&
+ (strcasecmp(prop_name, pdp->pd_name) != 0))
+ continue;
+
+ found = B_TRUE;
+ s = do_set_prop(fd, gbuf, pdp, prop_val, val_cnt);
+
+ if (prop_name != NULL) {
+ status = s;
+ break;
+ } else {
+ if (s != WLADM_STATUS_OK &&
+ s != WLADM_STATUS_NOTSUP)
+ status = s;
+ }
+ }
+ if (!found)
+ status = WLADM_STATUS_NOTFOUND;
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+/* ARGSUSED */
+wladm_status_t
+wladm_walk_prop(const char *link, void *arg,
+ boolean_t (*func)(void *, const char *))
+{
+ int i;
+
+ for (i = 0; i < WLADM_MAX_PROPS; i++) {
+ if (!func(arg, prop_table[i].pd_name))
+ break;
+ }
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_get_prop(const char *link, wladm_prop_type_t type, const char *prop_name,
+ char **prop_val, uint_t *val_cnt)
+{
+ int fd;
+ int i;
+ wldp_t *gbuf;
+ wladm_status_t status;
+ uint_t cnt;
+ prop_desc_t *pdp;
+
+ if (prop_val == NULL || val_cnt == NULL || *val_cnt == 0)
+ return (WLADM_STATUS_BADARG);
+
+ for (i = 0; i < WLADM_MAX_PROPS; i++)
+ if (strcasecmp(prop_name, prop_table[i].pd_name) == 0)
+ break;
+
+ if (i == WLADM_MAX_PROPS)
+ return (WLADM_STATUS_NOTFOUND);
+
+ if ((fd = open_link(link)) < 0)
+ return (WLADM_STATUS_LINKINVAL);
+
+ if ((gbuf = malloc(MAX_BUF_LEN)) == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+ pdp = &prop_table[i];
+ status = WLADM_STATUS_OK;
+
+ switch (type) {
+ case WLADM_PROP_VAL_CURRENT:
+ status = pdp->pd_get(fd, gbuf, prop_val, val_cnt);
+ break;
+
+ case WLADM_PROP_VAL_DEFAULT:
+ if (pdp->pd_defval.vd_name == NULL) {
+ status = WLADM_STATUS_NOTSUP;
+ break;
+ }
+ (void) strcpy(*prop_val, pdp->pd_defval.vd_name);
+ *val_cnt = 1;
+ break;
+
+ case WLADM_PROP_VAL_MODIFIABLE:
+ if (pdp->pd_getmod != NULL) {
+ status = pdp->pd_getmod(fd, gbuf, prop_val, val_cnt);
+ break;
+ }
+ cnt = pdp->pd_nmodval;
+ if (cnt == 0) {
+ status = WLADM_STATUS_NOTSUP;
+ } else if (cnt > *val_cnt) {
+ status = WLADM_STATUS_TOOSMALL;
+ } else {
+ for (i = 0; i < cnt; i++) {
+ (void) strcpy(prop_val[i],
+ pdp->pd_modval[i].vd_name);
+ }
+ *val_cnt = cnt;
+ }
+ break;
+ default:
+ status = WLADM_STATUS_BADARG;
+ break;
+ }
+done:
+ free(gbuf);
+ (void) close(fd);
+ return (status);
+}
+
+static boolean_t
+find_val_by_name(const char *str, val_desc_t *vdp, uint_t cnt, uint_t *valp)
+{
+ int i;
+
+ for (i = 0; i < cnt; i++) {
+ if (strcasecmp(str, vdp[i].vd_name) == 0) {
+ *valp = vdp[i].vd_val;
+ return (B_TRUE);
+ }
+ }
+ return (B_FALSE);
+}
+
+static boolean_t
+find_name_by_val(uint_t val, val_desc_t *vdp, uint_t cnt, char **strp)
+{
+ int i;
+
+ for (i = 0; i < cnt; i++) {
+ if (val == vdp[i].vd_val) {
+ *strp = vdp[i].vd_name;
+ return (B_TRUE);
+ }
+ }
+ return (B_FALSE);
+}
+
+const char *
+wladm_essid2str(wladm_essid_t *essid, char *buf)
+{
+ (void) snprintf(buf, WLADM_STRSIZE, "%s", essid->we_bytes);
+ return (buf);
+}
+
+const char *
+wladm_bssid2str(wladm_bssid_t *bssid, char *buf)
+{
+ return (_link_ntoa(bssid->wb_bytes, buf, WLADM_BSSID_LEN, IFT_OTHER));
+}
+
+static const char *
+wladm_val2str(uint_t val, val_desc_t *vdp, uint_t cnt, char *buf)
+{
+ char *s;
+
+ if (!find_name_by_val(val, vdp, cnt, &s))
+ s = "";
+
+ (void) snprintf(buf, WLADM_STRSIZE, "%s", s);
+ return (buf);
+}
+
+const char *
+wladm_secmode2str(wladm_secmode_t *secmode, char *buf)
+{
+ return (wladm_val2str((uint_t)*secmode, secmode_vals,
+ VALCNT(secmode_vals), buf));
+}
+
+const char *
+wladm_strength2str(wladm_strength_t *strength, char *buf)
+{
+ return (wladm_val2str((uint_t)*strength, strength_vals,
+ VALCNT(strength_vals), buf));
+}
+
+const char *
+wladm_mode2str(wladm_mode_t *mode, char *buf)
+{
+ return (wladm_val2str((uint_t)*mode, mode_vals,
+ VALCNT(mode_vals), buf));
+}
+
+const char *
+wladm_speed2str(wladm_speed_t *speed, char *buf)
+{
+ (void) snprintf(buf, WLADM_STRSIZE, "%.*f", *speed % 2,
+ (float)(*speed) / 2);
+ return (buf);
+}
+
+const char *
+wladm_auth2str(wladm_auth_t *auth, char *buf)
+{
+ return (wladm_val2str((uint_t)*auth, auth_vals,
+ VALCNT(auth_vals), buf));
+}
+
+const char *
+wladm_bsstype2str(wladm_bsstype_t *bsstype, char *buf)
+{
+ return (wladm_val2str((uint_t)*bsstype, bsstype_vals,
+ VALCNT(bsstype_vals), buf));
+}
+
+const char *
+wladm_linkstatus2str(wladm_linkstatus_t *linkstatus, char *buf)
+{
+ return (wladm_val2str((uint_t)*linkstatus, linkstatus_vals,
+ VALCNT(linkstatus_vals), buf));
+}
+
+const char *
+wladm_status2str(wladm_status_t status, char *buf)
+{
+ return (wladm_val2str((uint_t)status, status_vals,
+ VALCNT(status_vals), buf));
+}
+
+wladm_status_t
+wladm_str2essid(const char *str, wladm_essid_t *essid)
+{
+ if (str[0] == '\0')
+ return (WLADM_STATUS_BADARG);
+
+ (void) strlcpy(essid->we_bytes, str, WLADM_MAX_ESSID_LEN);
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2bssid(const char *str, wladm_bssid_t *bssid)
+{
+ int len;
+ uchar_t *buf;
+
+ buf = _link_aton(str, &len);
+ if (buf == NULL)
+ return (WLADM_STATUS_BADARG);
+
+ if (len != WLADM_BSSID_LEN) {
+ free(buf);
+ return (WLADM_STATUS_BADARG);
+ }
+
+ (void) memcpy(bssid->wb_bytes, buf, len);
+ free(buf);
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2secmode(const char *str, wladm_secmode_t *secmode)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, secmode_vals, VALCNT(secmode_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *secmode = (wladm_secmode_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2strength(const char *str, wladm_strength_t *strength)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, strength_vals, VALCNT(strength_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *strength = (wladm_strength_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2mode(const char *str, wladm_mode_t *mode)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, mode_vals, VALCNT(mode_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *mode = (wladm_mode_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2speed(const char *str, wladm_speed_t *speed)
+{
+ *speed = (wladm_speed_t)(atof(str) * 2);
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2auth(const char *str, wladm_auth_t *auth)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, auth_vals, VALCNT(auth_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *auth = (wladm_auth_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2bsstype(const char *str, wladm_bsstype_t *bsstype)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, bsstype_vals, VALCNT(bsstype_vals), &val))
+ return (WLADM_STATUS_BADARG);
+
+ *bsstype = (wladm_bsstype_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+wladm_status_t
+wladm_str2linkstatus(const char *str, wladm_linkstatus_t *linkstatus)
+{
+ uint_t val;
+
+ if (!find_val_by_name(str, linkstatus_vals, VALCNT(linkstatus_vals),
+ &val))
+ return (WLADM_STATUS_BADARG);
+
+ *linkstatus = (wladm_linkstatus_t)val;
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_ioctl(int fd, wldp_t *gbuf, uint_t id, size_t len, uint_t cmd, size_t cmdlen)
+{
+ int rc;
+ struct strioctl stri;
+
+ gbuf->wldp_type = NET_802_11;
+ gbuf->wldp_id = id;
+ gbuf->wldp_length = len;
+
+ stri.ic_timout = 0;
+ stri.ic_dp = (char *)gbuf;
+ stri.ic_cmd = cmd;
+ stri.ic_len = cmdlen;
+
+ if ((rc = ioctl(fd, I_STR, &stri)) != 0) {
+ if (rc > 0)
+ errno = rc;
+ return (-1);
+ }
+ return (0);
+}
+
+static int
+do_get_ioctl(int fd, wldp_t *gbuf, uint_t id)
+{
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+ return (do_ioctl(fd, gbuf, id, MAX_BUF_LEN, WLAN_GET_PARAM,
+ MAX_BUF_LEN));
+}
+
+static int
+do_set_ioctl(int fd, wldp_t *gbuf, uint_t id, void *buf, uint_t buflen)
+{
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+ (void) memcpy(gbuf->wldp_buf, buf, buflen);
+ buflen += WIFI_BUF_OFFSET;
+ return (do_ioctl(fd, gbuf, id, buflen, WLAN_SET_PARAM, buflen));
+}
+
+static int
+do_cmd_ioctl(int fd, wldp_t *gbuf, uint_t cmd)
+{
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+ return (do_ioctl(fd, gbuf, cmd, sizeof (wldp_t), WLAN_COMMAND,
+ sizeof (wldp_t)));
+}
+
+static int
+do_scan(int fd, wldp_t *gbuf)
+{
+ return (do_cmd_ioctl(fd, gbuf, WL_SCAN));
+}
+
+static int
+do_disconnect(int fd, wldp_t *gbuf)
+{
+ return (do_cmd_ioctl(fd, gbuf, WL_DISASSOCIATE));
+}
+
+static int
+do_get_esslist(int fd, wldp_t *gbuf)
+{
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+ return (do_ioctl(fd, gbuf, WL_ESS_LIST, MAX_BUF_LEN,
+ WLAN_GET_PARAM, sizeof (wldp_t)));
+}
+
+static int
+do_get_bssid(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_BSSID));
+}
+
+static int
+do_get_essid(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_ESSID));
+}
+
+static int
+do_get_bsstype(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_BSS_TYPE));
+}
+
+static int
+do_get_linkstatus(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_LINKSTATUS));
+}
+
+static int
+do_get_rate(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_DESIRED_RATES));
+}
+
+static int
+do_get_phyconf(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_PHY_CONFIG));
+}
+
+static int
+do_get_powermode(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_POWER_MODE));
+}
+
+static int
+do_get_radio(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_RADIO));
+}
+
+static int
+do_get_authmode(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_AUTH_MODE));
+}
+
+static int
+do_get_encryption(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_ENCRYPTION));
+}
+
+static int
+do_get_signal(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_RSSI));
+}
+
+static int
+do_get_mode(int fd, wldp_t *gbuf)
+{
+ return (do_get_ioctl(fd, gbuf, WL_PHY_CONFIG));
+}
+
+static wladm_status_t
+do_get_rate_common(wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ wl_rates_t *wrp = (wl_rates_t *)gbuf->wldp_buf;
+ uint_t cnt = wrp->wl_rates_num;
+ uint_t i;
+
+ if (cnt > *val_cnt)
+ return (WLADM_STATUS_TOOSMALL);
+ if (wrp->wl_rates_rates[0] == 0) {
+ prop_val[0][0] = '\0';
+ *val_cnt = 1;
+ return (WLADM_STATUS_OK);
+ }
+
+ for (i = 0; i < cnt; i++) {
+ (void) snprintf(prop_val[i], WLADM_STRSIZE, "%.*f",
+ wrp->wl_rates_rates[i] % 2,
+ (float)wrp->wl_rates_rates[i] / 2);
+ }
+ *val_cnt = cnt;
+ return (WLADM_STATUS_OK);
+}
+
+static wladm_status_t
+do_get_rate_prop(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ if (do_get_rate(fd, gbuf) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ return (do_get_rate_common(gbuf, prop_val, val_cnt));
+}
+
+static wladm_status_t
+do_get_rate_mod(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ if (do_get_ioctl(fd, gbuf, WL_SUPPORTED_RATES) < 0)
+ return (WLADM_STATUS_FAILED);
+
+ return (do_get_rate_common(gbuf, prop_val, val_cnt));
+}
+
+static wladm_status_t
+do_get_channel_prop(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ uint32_t channel;
+
+ if (do_get_phyconf(fd, gbuf) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ if (!do_convert_chan((wl_phy_conf_t *)gbuf->wldp_buf, &channel))
+ return (WLADM_STATUS_NOTFOUND);
+
+ (void) snprintf(*prop_val, WLADM_STRSIZE, "%u", channel);
+ *val_cnt = 1;
+
+ return (WLADM_STATUS_OK);
+}
+
+static wladm_status_t
+do_get_powermode_prop(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ wl_ps_mode_t *mode;
+ const char *s;
+
+ if (do_get_powermode(fd, gbuf) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ mode = (wl_ps_mode_t *)(gbuf->wldp_buf);
+ switch (mode->wl_ps_mode) {
+ case WL_PM_AM:
+ s = "off";
+ break;
+ case WL_PM_MPS:
+ s = "max";
+ break;
+ case WL_PM_FAST:
+ s = "fast";
+ break;
+ default:
+ return (WLADM_STATUS_NOTFOUND);
+ }
+ (void) snprintf(*prop_val, WLADM_STRSIZE, "%s", s);
+ *val_cnt = 1;
+
+ return (WLADM_STATUS_OK);
+}
+
+static wladm_status_t
+do_get_radio_prop(int fd, wldp_t *gbuf, char **prop_val, uint_t *val_cnt)
+{
+ wl_radio_t radio;
+ const char *s;
+
+ if (do_get_radio(fd, gbuf) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ radio = *(wl_radio_t *)(gbuf->wldp_buf);
+ switch (radio) {
+ case B_TRUE:
+ s = "on";
+ break;
+ case B_FALSE:
+ s = "off";
+ break;
+ default:
+ return (WLADM_STATUS_NOTFOUND);
+ }
+ (void) snprintf(*prop_val, WLADM_STRSIZE, "%s", s);
+ *val_cnt = 1;
+
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_set_bsstype(int fd, wldp_t *gbuf, wladm_bsstype_t *bsstype)
+{
+ wl_bss_type_t ibsstype;
+
+ switch (*bsstype) {
+ case WLADM_BSSTYPE_BSS:
+ ibsstype = WL_BSS_BSS;
+ break;
+ case WLADM_BSSTYPE_IBSS:
+ ibsstype = WL_BSS_IBSS;
+ break;
+ default:
+ ibsstype = WL_BSS_ANY;
+ break;
+ }
+ return (do_set_ioctl(fd, gbuf, WL_BSS_TYPE, &ibsstype,
+ sizeof (ibsstype)));
+}
+
+static int
+do_set_authmode(int fd, wldp_t *gbuf, wladm_auth_t *auth)
+{
+ wl_authmode_t auth_mode;
+
+ switch (*auth) {
+ case WLADM_AUTH_OPEN:
+ auth_mode = WL_OPENSYSTEM;
+ break;
+ case WLADM_AUTH_SHARED:
+ auth_mode = WL_SHAREDKEY;
+ break;
+ default:
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_AUTH_MODE, &auth_mode,
+ sizeof (auth_mode)));
+}
+
+static int
+do_set_encryption(int fd, wldp_t *gbuf, wladm_secmode_t *secmode)
+{
+ wl_encryption_t encryption;
+
+ switch (*secmode) {
+ case WLADM_SECMODE_NONE:
+ encryption = WL_NOENCRYPTION;
+ break;
+ case WLADM_SECMODE_WEP:
+ encryption = WL_ENC_WEP;
+ break;
+ default:
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_ENCRYPTION, &encryption,
+ sizeof (encryption)));
+}
+
+static int
+do_set_wepkey(int fd, wldp_t *gbuf, wladm_wep_key_t *keys, uint_t key_count)
+{
+ int i;
+ wl_wep_key_t *wkp;
+ wl_wep_key_tab_t wepkey_tab;
+ wladm_wep_key_t *kp;
+
+ if (key_count == 0 || key_count > MAX_NWEPKEYS || keys == NULL)
+ return (-1);
+
+ (void) memset(wepkey_tab, 0, sizeof (wepkey_tab));
+ for (i = 0; i < MAX_NWEPKEYS; i++)
+ wepkey_tab[i].wl_wep_operation = WL_NUL;
+
+ for (i = 0; i < key_count; i++) {
+ kp = &keys[i];
+ if (kp->wk_idx == 0 || kp->wk_idx > MAX_NWEPKEYS)
+ return (-1);
+ if (kp->wk_len != WLADM_WEPKEY64_LEN &&
+ kp->wk_len != WLADM_WEPKEY128_LEN)
+ return (-1);
+
+ wkp = &wepkey_tab[kp->wk_idx - 1];
+ wkp->wl_wep_operation = WL_ADD;
+ wkp->wl_wep_length = kp->wk_len;
+ (void) memcpy(wkp->wl_wep_key, kp->wk_val, kp->wk_len);
+ }
+
+ return (do_set_ioctl(fd, gbuf, WL_WEP_KEY_TAB, &wepkey_tab,
+ sizeof (wepkey_tab)));
+}
+
+static int
+do_set_essid(int fd, wldp_t *gbuf, wladm_essid_t *essid)
+{
+ wl_essid_t iessid;
+
+ (void) memset(&iessid, 0, sizeof (essid));
+
+ if (essid != NULL && essid->we_bytes[0] != '\0') {
+ iessid.wl_essid_length = strlen(essid->we_bytes);
+ (void) strlcpy(iessid.wl_essid_essid, essid->we_bytes,
+ sizeof (iessid.wl_essid_essid));
+ } else {
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_ESSID, &iessid, sizeof (iessid)));
+}
+
+/* ARGSUSED */
+static wladm_status_t
+do_check_rate(int fd, wldp_t *gbuf, prop_desc_t *pdp, char **prop_val,
+ uint_t val_cnt, val_desc_t **vdpp)
+{
+ int i;
+ uint_t modval_cnt = MAX_SUPPORT_RATES;
+ char *buf, **modval;
+ wladm_status_t status;
+ val_desc_t *vdp = NULL;
+
+ if (val_cnt != 1)
+ return (WLADM_STATUS_BADVALCNT);
+
+ buf = malloc((sizeof (char *) + WLADM_STRSIZE) *
+ MAX_SUPPORT_RATES);
+ if (buf == NULL)
+ goto done;
+
+ modval = (char **)(void *)buf;
+ for (i = 0; i < MAX_SUPPORT_RATES; i++) {
+ modval[i] = buf + sizeof (char *) * MAX_SUPPORT_RATES +
+ i * WLADM_STRSIZE;
+ }
+
+ status = do_get_rate_mod(fd, gbuf, modval, &modval_cnt);
+ if (status != WLADM_STATUS_OK)
+ goto done;
+
+ vdp = malloc(sizeof (val_desc_t));
+ if (vdp == NULL) {
+ status = WLADM_STATUS_NOMEM;
+ goto done;
+ }
+
+ for (i = 0; i < modval_cnt; i++) {
+ if (strcasecmp(*prop_val, modval[i]) == 0) {
+ vdp->vd_val = (uint_t)(atof(*prop_val) * 2);
+ status = WLADM_STATUS_OK;
+ *vdpp = vdp;
+ vdp = NULL;
+ break;
+ }
+ }
+ if (i == modval_cnt)
+ status = WLADM_STATUS_BADVAL;
+done:
+ free(buf);
+ free(vdp);
+ return (status);
+}
+
+static wladm_status_t
+do_set_rate_prop(int fd, wldp_t *gbuf, val_desc_t *vdp, uint_t val_cnt)
+{
+ wladm_rates_t rates;
+
+ if (val_cnt != 1)
+ return (WLADM_STATUS_BADVALCNT);
+
+ rates.wr_cnt = 1;
+ rates.wr_rates[0] = vdp[0].vd_val;
+
+ if (do_set_rate(fd, gbuf, &rates) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_set_rate(int fd, wldp_t *gbuf, wladm_rates_t *rates)
+{
+ int i;
+ uint_t len;
+ wl_rates_t *wrp = (wl_rates_t *)gbuf->wldp_buf;
+
+ (void) memset(gbuf, 0, MAX_BUF_LEN);
+
+ for (i = 0; i < rates->wr_cnt; i++)
+ wrp->wl_rates_rates[i] = rates->wr_rates[i];
+ wrp->wl_rates_num = rates->wr_cnt;
+
+ len = offsetof(wl_rates_t, wl_rates_rates) +
+ (rates->wr_cnt * sizeof (char)) + WIFI_BUF_OFFSET;
+ return (do_ioctl(fd, gbuf, WL_DESIRED_RATES, len, WLAN_SET_PARAM, len));
+}
+
+/* ARGSUSED */
+static wladm_status_t
+do_set_powermode_prop(int fd, wldp_t *gbuf, val_desc_t *vdp, uint_t val_cnt)
+{
+ wladm_powermode_t powermode = (wladm_powermode_t)vdp->vd_val;
+
+ if (do_set_powermode(fd, gbuf, &powermode) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_set_powermode(int fd, wldp_t *gbuf, wladm_powermode_t *pm)
+{
+ wl_ps_mode_t ps_mode;
+
+ (void) memset(&ps_mode, 0xff, sizeof (ps_mode));
+
+ switch (*pm) {
+ case WLADM_PM_OFF:
+ ps_mode.wl_ps_mode = WL_PM_AM;
+ break;
+ case WLADM_PM_MAX:
+ ps_mode.wl_ps_mode = WL_PM_MPS;
+ break;
+ case WLADM_PM_FAST:
+ ps_mode.wl_ps_mode = WL_PM_FAST;
+ break;
+ default:
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_POWER_MODE, &ps_mode,
+ sizeof (ps_mode)));
+}
+
+/* ARGSUSED */
+static wladm_status_t
+do_set_radio_prop(int fd, wldp_t *gbuf, val_desc_t *vdp, uint_t val_cnt)
+{
+ wladm_radio_t radio = (wladm_radio_t)vdp->vd_val;
+
+ if (do_set_radio(fd, gbuf, &radio) < 0)
+ return (wladm_wlresult2status(gbuf));
+
+ return (WLADM_STATUS_OK);
+}
+
+static int
+do_set_radio(int fd, wldp_t *gbuf, wladm_radio_t *radio)
+{
+ wl_radio_t r;
+
+ switch (*radio) {
+ case WLADM_RADIO_ON:
+ r = B_TRUE;
+ break;
+ case WLADM_RADIO_OFF:
+ r = B_FALSE;
+ break;
+ default:
+ return (-1);
+ }
+ return (do_set_ioctl(fd, gbuf, WL_RADIO, &r, sizeof (r)));
+}
+
+static int
+do_set_channel(int fd, wldp_t *gbuf, wladm_channel_t *channel)
+{
+ wl_phy_conf_t phy_conf;
+
+ if (*channel > MAX_CHANNEL_NUM)
+ return (-1);
+
+ (void) memset(&phy_conf, 0xff, sizeof (phy_conf));
+ phy_conf.wl_phy_dsss_conf.wl_dsss_channel = *channel;
+
+ return (do_set_ioctl(fd, gbuf, WL_PHY_CONFIG, &phy_conf,
+ sizeof (phy_conf)));
+}
+
+static int
+do_set_createibss(int fd, wldp_t *gbuf, boolean_t *create_ibss)
+{
+ wl_create_ibss_t cr = (wl_create_ibss_t)(*create_ibss);
+
+ return (do_set_ioctl(fd, gbuf, WL_CREATE_IBSS, &cr, sizeof (cr)));
+}
+
+static void
+generate_essid(wladm_essid_t *essid)
+{
+ srandom(gethrtime());
+ (void) snprintf(essid->we_bytes, WLADM_MAX_ESSID_LEN, "%d", random());
+}
diff --git a/usr/src/lib/libwladm/common/libwladm.h b/usr/src/lib/libwladm/common/libwladm.h
new file mode 100644
index 0000000000..0a5d24df9e
--- /dev/null
+++ b/usr/src/lib/libwladm/common/libwladm.h
@@ -0,0 +1,209 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _LIBWLADM_H
+#define _LIBWLADM_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <sys/types.h>
+
+/*
+ * General libwladm definitions and functions.
+ *
+ * These interfaces are ON consolidation-private.
+ * For documentation, refer to PSARC/2006/623.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define WLADM_MAX_ESSID_LEN 32 /* per 802.11 spec */
+#define WLADM_BSSID_LEN 6 /* per 802.11 spec */
+#define WLADM_STRSIZE 256
+
+#define WLADM_CONNECT_TIMEOUT_DEFAULT 10
+#define WLADM_OPT_CREATEIBSS 0x00000001
+#define WLADM_OPT_NOSCAN 0x00000002
+
+typedef struct wladm_essid {
+ char we_bytes[WLADM_MAX_ESSID_LEN];
+} wladm_essid_t;
+
+typedef struct wladm_bssid {
+ uint8_t wb_bytes[WLADM_BSSID_LEN];
+} wladm_bssid_t;
+
+typedef enum {
+ WLADM_SECMODE_NONE = 1,
+ WLADM_SECMODE_WEP
+} wladm_secmode_t;
+
+typedef enum {
+ WLADM_STRENGTH_VERY_WEAK = 1,
+ WLADM_STRENGTH_WEAK,
+ WLADM_STRENGTH_GOOD,
+ WLADM_STRENGTH_VERY_GOOD,
+ WLADM_STRENGTH_EXCELLENT
+} wladm_strength_t;
+
+typedef enum {
+ WLADM_MODE_NONE = 0,
+ WLADM_MODE_80211A,
+ WLADM_MODE_80211B,
+ WLADM_MODE_80211G
+} wladm_mode_t;
+
+typedef enum {
+ WLADM_AUTH_OPEN = 1,
+ WLADM_AUTH_SHARED
+} wladm_auth_t;
+
+typedef enum {
+ WLADM_BSSTYPE_BSS = 1,
+ WLADM_BSSTYPE_IBSS,
+ WLADM_BSSTYPE_ANY
+} wladm_bsstype_t;
+
+typedef enum {
+ WLADM_LINK_STATUS_DISCONNECTED = 1,
+ WLADM_LINK_STATUS_CONNECTED
+} wladm_linkstatus_t;
+
+typedef enum {
+ WLADM_STATUS_OK = 0,
+ WLADM_STATUS_BADARG,
+ WLADM_STATUS_FAILED,
+ WLADM_STATUS_NOTSUP,
+ WLADM_STATUS_ISCONN,
+ WLADM_STATUS_NOTCONN,
+ WLADM_STATUS_NOTFOUND,
+ WLADM_STATUS_BADVAL,
+ WLADM_STATUS_LINKINVAL,
+ WLADM_STATUS_NOMEM,
+ WLADM_STATUS_TIMEDOUT,
+ WLADM_STATUS_PROPRDONLY,
+ WLADM_STATUS_TOOSMALL,
+ WLADM_STATUS_BADVALCNT
+} wladm_status_t;
+
+typedef uint32_t wladm_speed_t;
+typedef uint32_t wladm_channel_t;
+
+enum {
+ WLADM_WLAN_ATTR_ESSID = 0x00000001,
+ WLADM_WLAN_ATTR_BSSID = 0x00000002,
+ WLADM_WLAN_ATTR_SECMODE = 0x00000004,
+ WLADM_WLAN_ATTR_STRENGTH = 0x00000008,
+ WLADM_WLAN_ATTR_MODE = 0x00000010,
+ WLADM_WLAN_ATTR_SPEED = 0x00000020,
+ WLADM_WLAN_ATTR_AUTH = 0x00000040,
+ WLADM_WLAN_ATTR_BSSTYPE = 0x00000080,
+ WLADM_WLAN_ATTR_CHANNEL = 0x00000100
+};
+typedef struct wladm_wlan_attr {
+ uint_t wa_valid;
+ wladm_essid_t wa_essid;
+ wladm_bssid_t wa_bssid;
+ wladm_secmode_t wa_secmode;
+ wladm_strength_t wa_strength;
+ wladm_mode_t wa_mode;
+ wladm_speed_t wa_speed;
+ wladm_auth_t wa_auth;
+ wladm_bsstype_t wa_bsstype;
+ wladm_channel_t wa_channel;
+} wladm_wlan_attr_t;
+
+enum {
+ WLADM_LINK_ATTR_STATUS = 0x00000001,
+ WLADM_LINK_ATTR_WLAN = 0x00000002
+};
+typedef struct wladm_link_attr {
+ uint_t la_valid;
+ wladm_linkstatus_t la_status;
+ wladm_wlan_attr_t la_wlan_attr;
+} wladm_link_attr_t;
+
+#define WLADM_WEPKEY64_LEN 5 /* per WEP spec */
+#define WLADM_WEPKEY128_LEN 13 /* per WEP spec */
+#define WLADM_MAX_WEPKEY_LEN 13 /* per WEP spec */
+#define WLADM_MAX_WEPKEYS 4 /* MAX_NWEPKEYS */
+#define WLADM_MAX_WEPKEYNAME_LEN 64
+typedef struct wladm_wep_key {
+ uint_t wk_idx;
+ uint_t wk_len;
+ uint8_t wk_val[WLADM_MAX_WEPKEY_LEN];
+ char wk_name[WLADM_MAX_WEPKEYNAME_LEN];
+} wladm_wep_key_t;
+
+typedef enum {
+ WLADM_PROP_VAL_CURRENT = 1,
+ WLADM_PROP_VAL_DEFAULT,
+ WLADM_PROP_VAL_MODIFIABLE
+} wladm_prop_type_t;
+
+extern wladm_status_t wladm_scan(const char *, void *,
+ boolean_t (*)(void *, wladm_wlan_attr_t *));
+extern wladm_status_t wladm_connect(const char *, wladm_wlan_attr_t *,
+ int, void *, uint_t, uint_t);
+extern wladm_status_t wladm_disconnect(const char *);
+extern wladm_status_t wladm_get_link_attr(const char *, wladm_link_attr_t *);
+extern wladm_status_t wladm_walk(void *, boolean_t (*)(void *, const char *));
+extern boolean_t wladm_is_valid(const char *);
+extern wladm_status_t wladm_set_prop(const char *, const char *, char **,
+ uint_t);
+extern wladm_status_t wladm_walk_prop(const char *, void *,
+ boolean_t (*)(void *, const char *));
+extern wladm_status_t wladm_get_prop(const char *, wladm_prop_type_t,
+ const char *, char **, uint_t *);
+
+extern const char *wladm_essid2str(wladm_essid_t *, char *);
+extern const char *wladm_bssid2str(wladm_bssid_t *, char *);
+extern const char *wladm_secmode2str(wladm_secmode_t *, char *);
+extern const char *wladm_strength2str(wladm_strength_t *, char *);
+extern const char *wladm_mode2str(wladm_mode_t *, char *);
+extern const char *wladm_speed2str(wladm_speed_t *, char *);
+extern const char *wladm_auth2str(wladm_auth_t *, char *);
+extern const char *wladm_bsstype2str(wladm_bsstype_t *, char *);
+extern const char *wladm_linkstatus2str(wladm_linkstatus_t *, char *);
+extern const char *wladm_status2str(wladm_status_t, char *);
+
+extern wladm_status_t wladm_str2essid(const char *, wladm_essid_t *);
+extern wladm_status_t wladm_str2bssid(const char *, wladm_bssid_t *);
+extern wladm_status_t wladm_str2secmode(const char *, wladm_secmode_t *);
+extern wladm_status_t wladm_str2strength(const char *, wladm_strength_t *);
+extern wladm_status_t wladm_str2mode(const char *, wladm_mode_t *);
+extern wladm_status_t wladm_str2speed(const char *, wladm_speed_t *);
+extern wladm_status_t wladm_str2auth(const char *, wladm_auth_t *);
+extern wladm_status_t wladm_str2bsstype(const char *, wladm_bsstype_t *);
+extern wladm_status_t wladm_str2linkstatus(const char *,
+ wladm_linkstatus_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBWLADM_H */
diff --git a/usr/src/lib/libwladm/common/libwladm_impl.h b/usr/src/lib/libwladm/common/libwladm_impl.h
new file mode 100644
index 0000000000..e3dfbd7ea0
--- /dev/null
+++ b/usr/src/lib/libwladm/common/libwladm_impl.h
@@ -0,0 +1,82 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _LIBWLADM_IMPL_H
+#define _LIBWLADM_IMPL_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <sys/types.h>
+#include <inet/wifi_ioctl.h>
+
+/*
+ * Implementation-private data structures, macros, and constants.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Map a signal value from 0-15 into an enumerated strength. Since there are
+ * 5 strengths but 16 values, by convention the "middle" strength gets the
+ * extra value. Thus, the buckets are 0-2, 3-5, 6-9, 10-12, and 13-15.
+ */
+#define WLADM_SIGNAL2STRENGTH(signal) \
+ (((signal) > 12 ? WLADM_STRENGTH_EXCELLENT : \
+ ((signal) > 9 ? WLADM_STRENGTH_VERY_GOOD : \
+ ((signal) > 5 ? WLADM_STRENGTH_GOOD : \
+ ((signal) > 2 ? WLADM_STRENGTH_WEAK : WLADM_STRENGTH_VERY_WEAK)))))
+
+/*
+ * Convert between an OFDM MHz and a channel number.
+ */
+#define WLADM_OFDM2CHAN(mhz) (((mhz) - 5000) / 5)
+
+#define WLADM_CONNECT_POLLRATE 200000000 /* nanoseconds */
+#define WLADM_CONNECT_DEFAULT_CHANNEL 1
+
+#define WLADM_MAX_RATES 4
+typedef struct wladm_rates {
+ uint8_t wr_rates[WLADM_MAX_RATES];
+ int wr_cnt;
+} wladm_rates_t;
+
+typedef enum {
+ WLADM_RADIO_ON = 1,
+ WLADM_RADIO_OFF
+} wladm_radio_t;
+
+typedef enum {
+ WLADM_PM_OFF = 1,
+ WLADM_PM_MAX,
+ WLADM_PM_FAST
+} wladm_powermode_t;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBWLADM_IMPL_H */
diff --git a/usr/src/lib/libwladm/common/llib-lwladm b/usr/src/lib/libwladm/common/llib-lwladm
new file mode 100644
index 0000000000..1f233e14ec
--- /dev/null
+++ b/usr/src/lib/libwladm/common/llib-lwladm
@@ -0,0 +1,31 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*LINTLIBRARY*/
+/*PROTOLIB1*/
+
+#include <libwladm.h>
diff --git a/usr/src/lib/libwladm/common/mapfile-vers b/usr/src/lib/libwladm/common/mapfile-vers
new file mode 100644
index 0000000000..c5f00d22b4
--- /dev/null
+++ b/usr/src/lib/libwladm/common/mapfile-vers
@@ -0,0 +1,60 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+SUNWprivate_1.1 {
+ global:
+ wladm_scan;
+ wladm_connect;
+ wladm_disconnect;
+ wladm_get_link_attr;
+ wladm_walk;
+ wladm_is_valid;
+ wladm_set_prop;
+ wladm_walk_prop;
+ wladm_get_prop;
+ wladm_essid2str;
+ wladm_bssid2str;
+ wladm_secmode2str;
+ wladm_strength2str;
+ wladm_mode2str;
+ wladm_speed2str;
+ wladm_auth2str;
+ wladm_bsstype2str;
+ wladm_linkstatus2str;
+ wladm_status2str;
+ wladm_str2essid;
+ wladm_str2bssid;
+ wladm_str2secmode;
+ wladm_str2strength;
+ wladm_str2mode;
+ wladm_str2speed;
+ wladm_str2auth;
+ wladm_str2bsstype;
+ wladm_str2linkstatus;
+ local:
+ *;
+};
diff --git a/usr/src/lib/libwladm/i386/Makefile b/usr/src/lib/libwladm/i386/Makefile
new file mode 100644
index 0000000000..a333224278
--- /dev/null
+++ b/usr/src/lib/libwladm/i386/Makefile
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+include ../Makefile.com
+
+install: all $(ROOTLIBS) $(ROOTLINKS) $(ROOTLINT)
diff --git a/usr/src/lib/libwladm/sparc/Makefile b/usr/src/lib/libwladm/sparc/Makefile
new file mode 100644
index 0000000000..a333224278
--- /dev/null
+++ b/usr/src/lib/libwladm/sparc/Makefile
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+include ../Makefile.com
+
+install: all $(ROOTLIBS) $(ROOTLINKS) $(ROOTLINT)
diff --git a/usr/src/pkgdefs/SUNW0on/prototype_com b/usr/src/pkgdefs/SUNW0on/prototype_com
index f79a1039c7..de4f038c7a 100644
--- a/usr/src/pkgdefs/SUNW0on/prototype_com
+++ b/usr/src/pkgdefs/SUNW0on/prototype_com
@@ -245,6 +245,7 @@ f none usr/lib/help/auths/locale/SmfValueRouting.html 444 root bin
f none usr/lib/help/auths/locale/NetworkHeader.html 444 root bin
f none usr/lib/help/auths/locale/WifiConfig.html 444 root bin
f none usr/lib/help/auths/locale/WifiWep.html 444 root bin
+f none usr/lib/help/auths/locale/LinkSecurity.html 444 root bin
d none usr/lib/help/profiles 755 root bin
d none usr/lib/help/profiles/locale 755 root bin
f none usr/lib/help/profiles/locale/RtAll.html 444 root bin
@@ -271,6 +272,7 @@ f none usr/lib/help/profiles/locale/RtNetMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/RtNetSecure.html 444 root bin
f none usr/lib/help/profiles/locale/RtNetWifiMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/RtNetWifiSecure.html 444 root bin
+f none usr/lib/help/profiles/locale/RtNetLinkSecure.html 444 root bin
f none usr/lib/help/profiles/locale/RtObAccessMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/RtProcManagement.html 444 root bin
f none usr/lib/help/profiles/locale/RtRightsDelegate.html 444 root bin
diff --git a/usr/src/pkgdefs/SUNWatheros/postinstall b/usr/src/pkgdefs/SUNWatheros/postinstall
index 44926d9ffc..8b8085dead 100644
--- a/usr/src/pkgdefs/SUNWatheros/postinstall
+++ b/usr/src/pkgdefs/SUNWatheros/postinstall
@@ -29,7 +29,7 @@
# Driver info
DRV=ath
-DRVALIAS='"pci168c,13" "pci168c,1014"'
+DRVALIAS='"pci168c,13" "pci168c,1014" "pci168c,1a" "pci168c,1b"'
BASEDIR=${BASEDIR:-/}
diff --git a/usr/src/pkgdefs/SUNWckr/prototype_i386 b/usr/src/pkgdefs/SUNWckr/prototype_i386
index 839daf5e94..19af7c5500 100644
--- a/usr/src/pkgdefs/SUNWckr/prototype_i386
+++ b/usr/src/pkgdefs/SUNWckr/prototype_i386
@@ -149,6 +149,7 @@ f none kernel/ipp/ipgpc 755 root sys
d none boot/acpi 755 root sys
d none boot/acpi/tables 755 root sys
f none kernel/mac/mac_ether 755 root sys
+f none kernel/mac/mac_wifi 755 root sys
f none kernel/misc/acpica 755 root sys
f none kernel/misc/busra 755 root sys
f none kernel/misc/cardbus 755 root sys
@@ -169,6 +170,7 @@ f none kernel/misc/kmdbmod 755 root sys
f none kernel/misc/krtld 755 root sys
f none kernel/misc/mac 755 root sys
l none kernel/misc/md5=../../kernel/crypto/md5
+f none kernel/misc/net80211 755 root sys
f none kernel/misc/neti 755 root sys
f none kernel/misc/pcicfg 755 root sys
f none kernel/misc/pcihp 755 root sys
@@ -324,6 +326,7 @@ d none kernel/ipp/amd64 755 root sys
f none kernel/ipp/amd64/ipgpc 755 root sys
d none kernel/mac/amd64 755 root sys
f none kernel/mac/amd64/mac_ether 755 root sys
+f none kernel/mac/amd64/mac_wifi 755 root sys
d none kernel/misc/amd64 755 root sys
f none kernel/misc/amd64/acpica 755 root sys
f none kernel/misc/amd64/busra 755 root sys
@@ -344,6 +347,7 @@ f none kernel/misc/amd64/kmdbmod 755 root sys
f none kernel/misc/amd64/krtld 755 root sys
f none kernel/misc/amd64/mac 755 root sys
l none kernel/misc/amd64/md5=../../../kernel/crypto/amd64/md5
+f none kernel/misc/amd64/net80211 755 root sys
f none kernel/misc/amd64/neti 755 root sys
f none kernel/misc/amd64/pcicfg 755 root sys
f none kernel/misc/amd64/pcihp 755 root sys
diff --git a/usr/src/pkgdefs/SUNWcnetr/Makefile b/usr/src/pkgdefs/SUNWcnetr/Makefile
index 99b31cc824..baa2cd7e90 100644
--- a/usr/src/pkgdefs/SUNWcnetr/Makefile
+++ b/usr/src/pkgdefs/SUNWcnetr/Makefile
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -32,7 +31,7 @@ DATAFILES += i.ipsecalgsbase i.preserve i.sock2path
.KEEP_STATE:
-all: $(FILES)
+all: $(FILES) postinstall
install: all pkg
diff --git a/usr/src/pkgdefs/SUNWcnetr/postinstall b/usr/src/pkgdefs/SUNWcnetr/postinstall
new file mode 100644
index 0000000000..c3647480b5
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWcnetr/postinstall
@@ -0,0 +1,32 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# Move existing /etc/aggregation.conf entries to /etc/dladm/aggregation.conf
+ORIG=$BASEDIR/etc/aggregation.conf
+if [ -f $ORIG ]; then
+ # use cat instead of cp/mv to keep owner+group of dest
+ cat $ORIG > $BASEDIR/etc/dladm/aggregation.conf
+ rm -f $ORIG
+fi
diff --git a/usr/src/pkgdefs/SUNWcnetr/prototype_com b/usr/src/pkgdefs/SUNWcnetr/prototype_com
index 636fadd79e..dcaa5efc44 100644
--- a/usr/src/pkgdefs/SUNWcnetr/prototype_com
+++ b/usr/src/pkgdefs/SUNWcnetr/prototype_com
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -39,6 +38,7 @@
# packaging files
i pkginfo
i copyright
+i postinstall
i i.ipsecalgsbase
i i.preserve
i i.sock2path
@@ -48,7 +48,10 @@ i i.sock2path
# SUNWcnetr
#
d none etc 755 root sys
-e preserve etc/aggregation.conf 644 root sys
+d none etc/dladm 755 dladm sys
+e preserve etc/dladm/aggregation.conf 644 dladm sys
+e preserve etc/dladm/linkprop.conf 644 dladm sys
+e preserve etc/dladm/secobj.conf 600 dladm sys
d none etc/default 755 root sys
e preserve etc/default/dhcpagent 644 root sys
e preserve etc/default/inetinit 644 root sys
diff --git a/usr/src/pkgdefs/SUNWcslr/prototype_com b/usr/src/pkgdefs/SUNWcslr/prototype_com
index 3e17e0b961..45a9944bc7 100644
--- a/usr/src/pkgdefs/SUNWcslr/prototype_com
+++ b/usr/src/pkgdefs/SUNWcslr/prototype_com
@@ -151,6 +151,7 @@ f none lib/libtsol.so.2 755 root bin
s none lib/libtsol.so=libtsol.so.2
s none lib/libw.so=libw.so.1
f none lib/libw.so.1 755 root bin
+f none lib/libwladm.so.1 755 root bin
s none lib/libumem.so=libumem.so.1
f none lib/libumem.so.1 0755 root bin
s none lib/libuuid.so=libuuid.so.1
diff --git a/usr/src/pkgdefs/SUNWcsu/prototype_com b/usr/src/pkgdefs/SUNWcsu/prototype_com
index 00f5b80e1c..213e4c2e73 100644
--- a/usr/src/pkgdefs/SUNWcsu/prototype_com
+++ b/usr/src/pkgdefs/SUNWcsu/prototype_com
@@ -489,6 +489,7 @@ f none usr/lib/help/auths/locale/C/SysHeader.html 444 root bin
f none usr/lib/help/auths/locale/C/SysShutdown.html 444 root bin
f none usr/lib/help/auths/locale/C/WifiConfig.html 444 root bin
f none usr/lib/help/auths/locale/C/WifiWep.html 444 root bin
+f none usr/lib/help/auths/locale/C/LinkSecurity.html 444 root bin
d none usr/lib/help/profiles 755 root bin
d none usr/lib/help/profiles/locale 755 root bin
d none usr/lib/help/profiles/locale/C 755 root bin
@@ -520,6 +521,7 @@ f none usr/lib/help/profiles/locale/C/RtNetMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtNetSecure.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtNetWifiMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtNetWifiSecure.html 444 root bin
+f none usr/lib/help/profiles/locale/C/RtNetLinkSecure.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtObAccessMngmnt.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtPrntAdmin.html 444 root bin
f none usr/lib/help/profiles/locale/C/RtProcManagement.html 444 root bin
diff --git a/usr/src/pkgdefs/common_files/i.ftpusers b/usr/src/pkgdefs/common_files/i.ftpusers
index 2aa3428459..455ff9c3f1 100644
--- a/usr/src/pkgdefs/common_files/i.ftpusers
+++ b/usr/src/pkgdefs/common_files/i.ftpusers
@@ -3,9 +3,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -23,7 +22,7 @@
#
# ident "%Z%%M% %I% %E% SMI"
#
-# Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# This is similar to i.preserve, except we also check if there is a file with
@@ -63,7 +62,7 @@ while read src dest; do
fi
fi
fi
- for user in smmsp gdm webservd
+ for user in dladm smmsp gdm webservd
do
egrep "^$user$|^#[ ]*$user$" $dest >/dev/null 2>&1 || \
echo $user >> $dest
diff --git a/usr/src/pkgdefs/common_files/i.minorperm_i386 b/usr/src/pkgdefs/common_files/i.minorperm_i386
index 34df10b4ca..e155849d92 100644
--- a/usr/src/pkgdefs/common_files/i.minorperm_i386
+++ b/usr/src/pkgdefs/common_files/i.minorperm_i386
@@ -104,6 +104,23 @@ lockstat:* 0600 root sys 0644 root sys /dev/dtrace/provider/lockstat
profile:profile 0600 root sys 0644 root sys /dev/dtrace/provider/profile
sdt:sdt 0600 root sys 0644 root sys /dev/dtrace/provider/sdt
systrace:systrace 0600 root sys 0644 root sys /dev/dtrace/provider/systrace
+clone:bge 0600 root sys 0666 root sys /dev/bge
+clone:rge 0600 root sys 0666 root sys /dev/rge
+clone:xge 0600 root sys 0666 root sys /dev/xge
+clone:nge 0600 root sys 0666 root sys /dev/nge
+clone:chxge 0600 root sys 0666 root sys /dev/chxge
+clone:pcn 0600 root sys 0666 root sys /dev/pcn
+clone:rtls 0600 root sys 0666 root sys /dev/rtls
+clone:ath 0600 root sys 0666 root sys /dev/ath
+bge:* 0600 root sys 0666 root sys /dev/bge*
+rge:* 0600 root sys 0666 root sys /dev/rge*
+xge:* 0600 root sys 0666 root sys /dev/xge*
+nge:* 0600 root sys 0666 root sys /dev/nge*
+e1000g:* 0666 root root 0666 root sys /dev/e1000g*
+chxge:* 0600 root sys 0666 root sys /dev/chxge*
+pcn:* 0600 root sys 0666 root sys /dev/pcn*
+rtls:* 0600 root sys 0666 root sys /dev/rtls*
+ath:* 0600 root sys 0666 root sys /dev/ath*
EOF
}
@@ -220,7 +237,23 @@ sctp6:*
vni:*
cpuid:self
clone:bge
+clone:rge
+clone:xge
+clone:nge
+clone:e1000g
+clone:chxge
+clone:pcn
+clone:rtls
+clone:ath
bge:*
+rge:*
+xge:*
+nge:*
+e1000g:*
+chxge:*
+pcn:*
+rtls:*
+ath:*
bmc:bmc
dld:*
aggr:*
diff --git a/usr/src/pkgdefs/common_files/i.minorperm_sparc b/usr/src/pkgdefs/common_files/i.minorperm_sparc
index 345689d556..7acc7636aa 100644
--- a/usr/src/pkgdefs/common_files/i.minorperm_sparc
+++ b/usr/src/pkgdefs/common_files/i.minorperm_sparc
@@ -96,7 +96,21 @@ clone:hme 0600 root sys 0666 root sys /dev/hme
clone:le 0600 root sys 0666 root sys /dev/le
clone:qfe 0600 root sys 0666 root sys /dev/qfe
clone:bge 0600 root sys 0666 root sys /dev/bge
+clone:rge 0600 root sys 0666 root sys /dev/rge
+clone:xge 0600 root sys 0666 root sys /dev/xge
+clone:nge 0600 root sys 0666 root sys /dev/nge
+clone:e1000g 0666 root root 0666 root sys /dev/e1000g
+clone:chxge 0600 root sys 0666 root sys /dev/chxge
+clone:vsw 0600 root sys 0666 root sys /dev/vsw
+clone:vnet 0600 root sys 0666 root sys /dev/vnet
bge:* 0600 root sys 0666 root sys /dev/bge*
+rge:* 0600 root sys 0666 root sys /dev/rge*
+xge:* 0600 root sys 0666 root sys /dev/xge*
+nge:* 0600 root sys 0666 root sys /dev/nge*
+e1000g:* 0666 root root 0666 root sys /dev/e1000g*
+chxge:* 0600 root sys 0666 root sys /dev/chxge*
+vsw:* 0600 root sys 0666 root sys /dev/vsw*
+vnet:* 0600 root sys 0666 root sys /dev/vnet*
clone:dmfe 0600 root sys 0666 root sys /dev/dmfe
dmfe:* 0600 root sys 0666 root sys /dev/dmfe*
clone:pcelx 0600 root sys 0666 root sys /dev/pcelx
@@ -251,7 +265,21 @@ mm:allkmem
ssm:*
bscv:*
clone:bge
+clone:rge
+clone:xge
+clone:nge
+clone:e1000g
+clone:chxge
+clone:vsw
+clone:vnet
bge:*
+rge:*
+xge:*
+nge:*
+e1000g:*
+chxge:*
+vsw:*
+vnet:*
clone:dmfe
dmfe:*
clone:pcelx
diff --git a/usr/src/pkgdefs/common_files/i.passwd b/usr/src/pkgdefs/common_files/i.passwd
index 8262a94efe..5653e7bf60 100644
--- a/usr/src/pkgdefs/common_files/i.passwd
+++ b/usr/src/pkgdefs/common_files/i.passwd
@@ -3,9 +3,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -129,6 +128,21 @@ do
printf '/^webservd:x\na\n%s\n.\nw\nq\n' \
"$POSTGRES_LIN" | ed -s $dest > /dev/null
fi
+
+ #
+ # Add the 'dladm' user if it doesn't exist.
+ #
+ DLADM_LIN="dladm:x:15:3:Datalink Admin:/:"
+ cur_name=`awk -F: '$3 == 15 { print $1 }' $dest`
+ if [ ! -z "$cur_name" -a "$cur_name" != "dladm" ]; then
+ echo "ERROR: Reserved UID 15 already assigned" \
+ "to '$cur_name'" >> /tmp/CLEANUP
+ elif grep "$DLADM_LIN" $dest 2>&1 >/dev/null; then
+ :
+ else
+ printf '/^nuucp:x\na\n%s\n.\nw\nq\n' \
+ "$DLADM_LIN" | ed -s $dest > /dev/null
+ fi
fi
done
diff --git a/usr/src/pkgdefs/common_files/i.shadow b/usr/src/pkgdefs/common_files/i.shadow
index e135e9aa2f..966fe9901b 100644
--- a/usr/src/pkgdefs/common_files/i.shadow
+++ b/usr/src/pkgdefs/common_files/i.shadow
@@ -3,9 +3,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -103,6 +102,17 @@ do
printf '/^webservd:\*LK\*\na\n%s\n.\nw\nq\n' \
"$POSTGRES_LINE" | ed -s $dest > /dev/null
fi
+
+ #
+ # Add the 'dladm' reserved user if it doesn't exist.
+ #
+ DLADM_LINE="dladm:*LK*:::::::"
+ if grep "^dladm:" $dest 2>&1 >/dev/null; then
+ :
+ else
+ printf '/^nuucp:NP\na\n%s\n.\nw\nq\n' \
+ "$DLADM_LINE" | ed -s $dest > /dev/null
+ fi
fi
done
diff --git a/usr/src/pkgdefs/etc/exception_list_i386 b/usr/src/pkgdefs/etc/exception_list_i386
index 779dba9f21..6fab12f345 100644
--- a/usr/src/pkgdefs/etc/exception_list_i386
+++ b/usr/src/pkgdefs/etc/exception_list_i386
@@ -80,30 +80,35 @@ usr/lib/libdhcpsvc.so i386
#
# Private MAC driver header files
#
-usr/include/sys/aggr.h i386
-usr/include/sys/aggr_impl.h i386
-usr/include/sys/dld.h i386
-usr/include/sys/dld_impl.h i386
-usr/include/sys/dls.h i386
-usr/include/sys/dls_impl.h i386
-usr/include/sys/mac.h i386
-usr/include/sys/mac_impl.h i386
-usr/include/libdladm.h i386
-usr/include/liblaadm.h i386
-usr/include/libmacadm.h i386
-#
-# These files are installed in the proto area for
-# Solaris MAC drivers and should not be shipped
-#
-lib/libdladm.so i386
-lib/liblaadm.so i386
-lib/libmacadm.so i386
-lib/llib-ldladm.ln i386
-lib/llib-ldladm i386
-lib/llib-llaadm.ln i386
-lib/llib-llaadm i386
-lib/llib-lmacadm.ln i386
-lib/llib-lmacadm i386
+usr/include/sys/aggr.h i386
+usr/include/sys/aggr_impl.h i386
+usr/include/sys/dld.h i386
+usr/include/sys/dld_impl.h i386
+usr/include/sys/dls.h i386
+usr/include/sys/dls_impl.h i386
+usr/include/sys/mac.h i386
+usr/include/sys/mac_impl.h i386
+#
+# Private GLDv3 userland libraries and headers
+#
+usr/include/libdladm.h i386
+usr/include/libdladm_impl.h i386
+usr/include/liblaadm.h i386
+usr/include/libmacadm.h i386
+usr/include/libwladm.h i386
+usr/include/libwladm_impl.h i386
+lib/libdladm.so i386
+lib/liblaadm.so i386
+lib/libmacadm.so i386
+lib/libwladm.so i386
+lib/llib-ldladm.ln i386
+lib/llib-ldladm i386
+lib/llib-llaadm.ln i386
+lib/llib-llaadm i386
+lib/llib-lmacadm.ln i386
+lib/llib-lmacadm i386
+lib/llib-lwladm.ln i386
+lib/llib-lwladm i386
#
# Installed in the proto area for building utilties dependent on
# it, but is not shipped.
diff --git a/usr/src/pkgdefs/etc/exception_list_sparc b/usr/src/pkgdefs/etc/exception_list_sparc
index 4ad8930627..1b7af2c88a 100644
--- a/usr/src/pkgdefs/etc/exception_list_sparc
+++ b/usr/src/pkgdefs/etc/exception_list_sparc
@@ -77,22 +77,27 @@ usr/include/sys/dls.h sparc
usr/include/sys/dls_impl.h sparc
usr/include/sys/mac.h sparc
usr/include/sys/mac_impl.h sparc
-usr/include/libdladm.h sparc
-usr/include/liblaadm.h sparc
-usr/include/libmacadm.h sparc
-#
-# These files are installed in the proto area for
-# Solaris MAC drivers and should not be shipped
-#
-lib/libdladm.so sparc
-lib/liblaadm.so sparc
-lib/libmacadm.so sparc
-lib/llib-ldladm.ln sparc
-lib/llib-ldladm sparc
-lib/llib-llaadm.ln sparc
-lib/llib-llaadm sparc
-lib/llib-lmacadm.ln sparc
-lib/llib-lmacadm sparc
+#
+# Private GLDv3 userland libraries and headers
+#
+usr/include/libdladm.h sparc
+usr/include/libdladm_impl.h sparc
+usr/include/liblaadm.h sparc
+usr/include/libmacadm.h sparc
+usr/include/libwladm.h sparc
+usr/include/libwladm_impl.h sparc
+lib/libdladm.so sparc
+lib/liblaadm.so sparc
+lib/libmacadm.so sparc
+lib/libwladm.so sparc
+lib/llib-ldladm.ln sparc
+lib/llib-ldladm sparc
+lib/llib-llaadm.ln sparc
+lib/llib-llaadm sparc
+lib/llib-lmacadm.ln sparc
+lib/llib-lmacadm sparc
+lib/llib-lwladm.ln sparc
+lib/llib-lwladm sparc
#
# Installed in the proto area for building those things
# that are dependent on it. No delivered as part of a pkg.
diff --git a/usr/src/tools/scripts/bfu.sh b/usr/src/tools/scripts/bfu.sh
index 85a6406488..2dec0c1bc0 100644
--- a/usr/src/tools/scripts/bfu.sh
+++ b/usr/src/tools/scripts/bfu.sh
@@ -1909,6 +1909,7 @@ multiboot_archives=no
dca_to_multi=no
is_pcfs_boot=no
need_datalink=no
+new_dladm=no
test $# -ge 1 || usage
@@ -2130,6 +2131,15 @@ if $ZCAT $cpiodir/generic.root$ZFIX | cpio -it 2>/dev/null | \
need_datalink=yes
fi
+#
+# Check whether the archives have an etc/dladm directory; this is
+# later used to determine if aggregation.conf needs to be moved.
+#
+if $ZCAT $cpiodir/generic.root$ZFIX | cpio -it 2>/dev/null | \
+ grep etc/dladm > /dev/null 2>&1 ; then
+ new_dladm=yes
+fi
+
time_ref=/tmp/bfu.time_ref.$$
rm -f $time_ref
touch $time_ref || fail "$time_ref: Unable to create time reference."
@@ -6295,6 +6305,25 @@ mondo_loop() {
create_datalink_conf
fi
+ # Move existing /etc/aggregation.conf entries to
+ # /etc/dladm/aggregation.conf; or, if bfu'ing
+ # backwards, move aggregation.conf back to /etc
+ aggr_old=$rootprefix/etc/aggregation.conf
+ aggr_new=$rootprefix/etc/dladm/aggregation.conf
+ if [ $new_dladm = yes ]; then
+ if [ -f $aggr_old ]; then
+ # use cat instead of cp/mv to keep owner+group of dest
+ cat $aggr_old > $aggr_new
+ rm -f $aggr_old
+ fi
+ else
+ if [ -f $aggr_new ]; then
+ cp $aggr_new $aggr_old
+ chgrp sys $aggr_old
+ rm -rf $rootprefix/etc/dladm
+ fi
+ fi
+
print "\nRestoring configuration files.\n"
cd $root
diff --git a/usr/src/uts/common/Makefile.files b/usr/src/uts/common/Makefile.files
index e8dc6b6f60..1aceb671ad 100644
--- a/usr/src/uts/common/Makefile.files
+++ b/usr/src/uts/common/Makefile.files
@@ -530,9 +530,15 @@ MAC_OBJS += mac.o mac_mod.o mac_stat.o
MAC_ETHER_OBJS += mac_ether.o
+MAC_WIFI_OBJS += mac_wifi.o
+
AGGR_OBJS += aggr_dev.o aggr_ctl.o aggr_grp.o aggr_port.o \
aggr_send.o aggr_recv.o aggr_lacp.o
+NET80211_OBJS += net80211.o net80211_proto.o net80211_input.o net80211_output.o \
+ net80211_node.o net80211_crypto.o net80211_crypto_none.o \
+ net80211_crypto_wep.o net80211_ioctl.o
+
IB_OBJS += ibnex.o ibnex_ioctl.o
IBCM_OBJS += ibcm_impl.o ibcm_sm.o ibcm_ti.o ibcm_utils.o ibcm_path.o
@@ -1272,8 +1278,7 @@ IXGB_OBJS += ixgb.o ixgb_atomic.o ixgb_chip.o ixgb_gld.o ixgb_kstats.o \
RGE_OBJS += rge_main.o rge_chip.o rge_ndd.o rge_kstats.o rge_log.o rge_rxtx.o
-ATH_OBJS += ath_aux.o ath_ieee80211.o ath_main.o ath_osdep.o \
- ath_rate.o ath_wificonfig.o
+ATH_OBJS += ath_aux.o ath_main.o ath_osdep.o ath_rate.o
#
# Build up defines and paths.
diff --git a/usr/src/uts/common/Makefile.rules b/usr/src/uts/common/Makefile.rules
index 64994fabb1..d7df9cb760 100644
--- a/usr/src/uts/common/Makefile.rules
+++ b/usr/src/uts/common/Makefile.rules
@@ -583,6 +583,10 @@ $(OBJS_DIR)/%.o: $(UTSBASE)/common/io/mac/plugins/%.c
$(COMPILE.c) -o $@ $<
$(CTFCONVERT_O)
+$(OBJS_DIR)/%.o: $(UTSBASE)/common/io/net80211/%.c
+ $(COMPILE.c) -o $@ $<
+ $(CTFCONVERT_O)
+
$(OBJS_DIR)/%.o: $(UTSBASE)/common/io/pci-ide/%.c
$(COMPILE.c) -o $@ $<
$(CTFCONVERT_O)
@@ -1297,6 +1301,9 @@ $(LINTS_DIR)/%.ln: $(UTSBASE)/common/io/mac/%.c
$(LINTS_DIR)/%.ln: $(UTSBASE)/common/io/mac/plugins/%.c
@($(LHEAD) $(LINT.c) $< $(LTAIL))
+$(LINTS_DIR)/%.ln: $(UTSBASE)/common/io/net80211/%.c
+ @($(LHEAD) $(LINT.c) $< $(LTAIL))
+
$(LINTS_DIR)/%.ln: $(UTSBASE)/common/io/pci-ide/%.c
@($(LHEAD) $(LINT.c) $< $(LTAIL))
diff --git a/usr/src/uts/common/io/aggr/aggr_port.c b/usr/src/uts/common/io/aggr/aggr_port.c
index 4c188a0583..3d2fb3c0de 100644
--- a/usr/src/uts/common/io/aggr/aggr_port.c
+++ b/usr/src/uts/common/io/aggr/aggr_port.c
@@ -134,7 +134,7 @@ aggr_port_create(const char *name, aggr_port_t **pp)
return (err);
mip = mac_info(mh);
- if (mip->mi_media != DL_ETHER) {
+ if (mip->mi_media != DL_ETHER || mip->mi_nativemedia != DL_ETHER) {
mac_close(mh);
return (EINVAL);
}
diff --git a/usr/src/uts/common/io/ath/ath_aux.c b/usr/src/uts/common/io/ath/ath_aux.c
index fb119a22af..7ef30ab1b6 100644
--- a/usr/src/uts/common/io/ath/ath_aux.c
+++ b/usr/src/uts/common/io/ath/ath_aux.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -70,7 +70,6 @@
#include <inet/wifi_ioctl.h>
#include "ath_hal.h"
#include "ath_impl.h"
-#include "ath_ieee80211.h"
static const char *acnames[] = {
"WME_AC_BE",
@@ -85,20 +84,20 @@ extern void ath_setup_desc(ath_t *asc, struct ath_buf *bf);
uint32_t
ath_calcrxfilter(ath_t *asc)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
uint32_t rfilt;
rfilt = (ATH_HAL_GETRXFILTER(ah) & HAL_RX_FILTER_PHYERR)
| HAL_RX_FILTER_UCAST | HAL_RX_FILTER_BCAST | HAL_RX_FILTER_MCAST;
- if (isc->isc_opmode != IEEE80211_M_STA)
+ if (ic->ic_opmode != IEEE80211_M_STA)
rfilt |= HAL_RX_FILTER_PROBEREQ;
- if (isc->isc_opmode != IEEE80211_M_HOSTAP &&
+ if (ic->ic_opmode != IEEE80211_M_HOSTAP &&
(asc->asc_promisc & GLD_MAC_PROMISC_PHYS)) /* promiscuous */
rfilt |= HAL_RX_FILTER_PROM;
- if (isc->isc_opmode == IEEE80211_M_STA ||
- isc->isc_opmode == IEEE80211_M_IBSS ||
- isc->isc_state == IEEE80211_S_SCAN)
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ ic->ic_opmode == IEEE80211_M_IBSS ||
+ ic->ic_state == IEEE80211_S_SCAN)
rfilt |= HAL_RX_FILTER_BEACON;
return (rfilt);
}
@@ -131,7 +130,7 @@ ath_set_data_queue(ath_t *asc, int ac, int haltype)
* up in which case the top half of the kernel may backup
* due to a lack of tx descriptors.
*/
- qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE | TXQ_FLAG_TXDESCINT_ENABLE;
+ qi.tqi_qflags = HAL_TXQ_TXEOLINT_ENABLE | HAL_TXQ_TXDESCINT_ENABLE;
qnum = ATH_HAL_SETUPTXQUEUE(ah, HAL_TX_QUEUE_DATA, &qi);
if (qnum == -1) {
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_set_data_queue(): "
@@ -174,6 +173,23 @@ ath_txq_setup(ath_t *asc)
}
void
+ath_txq_cleanup(ath_t *asc)
+{
+ int i;
+
+ mutex_destroy(&asc->asc_txbuflock);
+ for (i = 0; i < HAL_NUM_TX_QUEUES; i++) {
+ if (ATH_TXQ_SETUP(asc, i)) {
+ struct ath_txq *txq = &asc->asc_txq[i];
+
+ ATH_HAL_RELEASETXQUEUE(asc->asc_ah, txq->axq_qnum);
+ mutex_destroy(&txq->axq_lock);
+ asc->asc_txqsetup &= ~(1 << txq->axq_qnum);
+ }
+ }
+}
+
+void
ath_setcurmode(ath_t *asc, enum ieee80211_phymode mode)
{
const HAL_RATE_TABLE *rt;
@@ -196,7 +212,7 @@ ath_setcurmode(ath_t *asc, enum ieee80211_phymode mode)
void
ath_mode_init(ath_t *asc)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
uint32_t rfilt;
@@ -207,7 +223,7 @@ ath_mode_init(ath_t *asc)
ATH_HAL_SETMCASTFILTER(ah, asc->asc_mfilt[0], asc->asc_mfilt[1]);
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_mode_init(): "
"mode =%d RX filter 0x%x, MC filter %08x:%08x\n",
- isc->isc_opmode, rfilt,
+ ic->ic_opmode, rfilt,
asc->asc_mfilt[0], asc->asc_mfilt[1]));
}
@@ -229,14 +245,16 @@ ath_stoprecv(ath_t *asc)
}
uint32_t
-ath_chan2flags(ieee80211com_t *isc, struct ieee80211channel *chan)
+ath_chan2flags(ieee80211com_t *isc, struct ieee80211_channel *chan)
{
static const uint32_t modeflags[] = {
0, /* IEEE80211_MODE_AUTO */
CHANNEL_A, /* IEEE80211_MODE_11A */
CHANNEL_B, /* IEEE80211_MODE_11B */
CHANNEL_PUREG, /* IEEE80211_MODE_11G */
- CHANNEL_T /* IEEE80211_MODE_TURBO */
+ 0, /* IEEE80211_MODE_FH */
+ CHANNEL_108A, /* IEEE80211_MODE_TURBO_A */
+ CHANNEL_108G /* IEEE80211_MODE_TURBO_G */
};
return (modeflags[ieee80211_chan2mode(isc, chan)]);
}
@@ -245,7 +263,7 @@ ath_chan2flags(ieee80211com_t *isc, struct ieee80211channel *chan)
int
ath_getchannels(ath_t *asc, uint32_t cc, HAL_BOOL outdoor, HAL_BOOL xchanmode)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
HAL_CHANNEL *chans;
int i, ix;
@@ -255,7 +273,7 @@ ath_getchannels(ath_t *asc, uint32_t cc, HAL_BOOL outdoor, HAL_BOOL xchanmode)
kmem_zalloc(IEEE80211_CHAN_MAX * sizeof (HAL_CHANNEL), KM_SLEEP);
if (!ath_hal_init_channels(ah, chans, IEEE80211_CHAN_MAX, &nchan,
- cc, HAL_MODE_ALL, outdoor, xchanmode)) {
+ NULL, 0, NULL, cc, HAL_MODE_ALL, outdoor, xchanmode)) {
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_getchannels(): "
"unable to get channel list\n");
kmem_free(chans, IEEE80211_CHAN_MAX * sizeof (HAL_CHANNEL)));
@@ -268,20 +286,41 @@ ath_getchannels(ath_t *asc, uint32_t cc, HAL_BOOL outdoor, HAL_BOOL xchanmode)
*/
for (i = 0; i < nchan; i++) {
HAL_CHANNEL *c = &chans[i];
- ix = ath_hal_mhz2ieee(c->channel, c->channelFlags);
+ uint16_t flags;
+ ix = ath_hal_mhz2ieee(ah, c->channel, c->channelFlags);
if (ix > IEEE80211_CHAN_MAX) {
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_getchannels(): "
- "bad hal channel %u (%u/%x) ignored\n",
+ "bad hal channel %d (%u/%x) ignored\n",
ix, c->channel, c->channelFlags));
continue;
}
/* NB: flags are known to be compatible */
- if (isc->isc_channels[ix].ich_freq == 0) {
- isc->isc_channels[ix].ich_freq = c->channel;
- isc->isc_channels[ix].ich_flags = c->channelFlags;
+ if (ix < 0) {
+ /*
+ * can't handle frequency <2400MHz (negative
+ * channels) right now
+ */
+ ATH_DEBUG((ATH_DBG_AUX, "ath:ath_getchannels(): "
+ "hal channel %d (%u/%x) "
+ "cannot be handled, ignored\n",
+ ix, c->channel, c->channelFlags));
+ continue;
+ }
+ /*
+ * Calculate net80211 flags; most are compatible
+ * but some need massaging. Note the static turbo
+ * conversion can be removed once net80211 is updated
+ * to understand static vs. dynamic turbo.
+ */
+ flags = c->channelFlags & CHANNEL_COMPAT;
+ if (c->channelFlags & CHANNEL_STURBO)
+ flags |= IEEE80211_CHAN_TURBO;
+ if (ic->ic_sup_channels[ix].ich_freq == 0) {
+ ic->ic_sup_channels[ix].ich_freq = c->channel;
+ ic->ic_sup_channels[ix].ich_flags = flags;
} else {
/* channels overlap; e.g. 11g and 11b */
- isc->isc_channels[ix].ich_flags |= c->channelFlags;
+ ic->ic_sup_channels[ix].ich_flags |= flags;
}
if ((c->channelFlags & CHANNEL_G) == CHANNEL_G)
asc->asc_have11g = 1;
@@ -365,20 +404,37 @@ ath_startrecv(ath_t *asc)
}
/*
+ * Update internal state after a channel change.
+ */
+void
+ath_chan_change(ath_t *asc, struct ieee80211_channel *chan)
+{
+ struct ieee80211com *ic = &asc->asc_isc;
+ enum ieee80211_phymode mode;
+
+ /*
+ * Change channels and update the h/w rate map
+ * if we're switching; e.g. 11a to 11b/g.
+ */
+ mode = ieee80211_chan2mode(ic, chan);
+ if (mode != asc->asc_curmode)
+ ath_setcurmode(asc, mode);
+}
+
+/*
* Set/change channels. If the channel is really being changed,
* it's done by resetting the chip. To accomplish this we must
* first cleanup any pending DMA.
*/
int
-ath_chan_set(ath_t *asc, struct ieee80211channel *chan)
+ath_chan_set(ath_t *asc, struct ieee80211_channel *chan)
{
struct ath_hal *ah = asc->asc_ah;
- ieee80211com_t *isc = &asc->asc_isc;
+ ieee80211com_t *ic = &asc->asc_isc;
- if (chan != isc->isc_ibss_chan) {
+ if (chan != ic->ic_ibss_chan) {
HAL_STATUS status;
HAL_CHANNEL hchan;
- enum ieee80211_phymode mode;
/*
* To switch channels clear any pending DMA operations;
@@ -395,14 +451,15 @@ ath_chan_set(ath_t *asc, struct ieee80211channel *chan)
* operating mode.
*/
hchan.channel = chan->ich_freq;
- hchan.channelFlags = ath_chan2flags(isc, chan);
- if (!ATH_HAL_RESET(ah, (HAL_OPMODE)isc->isc_opmode,
+ hchan.channelFlags = ath_chan2flags(ic, chan);
+ if (!ATH_HAL_RESET(ah, (HAL_OPMODE)ic->ic_opmode,
&hchan, AH_TRUE, &status)) {
ATH_DEBUG((ATH_DBG_AUX, "ath: ath_chan_set():"
"unable to reset channel %u (%uMhz)\n",
- ieee80211_chan2ieee(isc, chan), chan->ich_freq));
+ ieee80211_chan2ieee(ic, chan), chan->ich_freq));
return (EIO);
}
+ asc->asc_curchan = hchan;
/*
* Re-enable rx framework.
@@ -417,10 +474,8 @@ ath_chan_set(ath_t *asc, struct ieee80211channel *chan)
* Change channels and update the h/w rate map
* if we're switching; e.g. 11a to 11b/g.
*/
- isc->isc_ibss_chan = chan;
- mode = ieee80211_chan2mode(isc, chan);
- if (mode != asc->asc_curmode)
- ath_setcurmode(asc, mode);
+ ic->ic_ibss_chan = chan;
+ ath_chan_change(asc, chan);
/*
* Re-enable interrupts.
*/
@@ -449,16 +504,15 @@ void
ath_beacon_config(ath_t *asc)
{
struct ath_hal *ah = asc->asc_ah;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
+ struct ieee80211_node *in = ic->ic_bss;
uint32_t nexttbtt;
- nexttbtt = (ATH_LE_READ_4(in->in_tstamp + 4) << 22) |
- (ATH_LE_READ_4(in->in_tstamp) >> 10);
+ nexttbtt = (ATH_LE_READ_4(in->in_tstamp.data + 4) << 22) |
+ (ATH_LE_READ_4(in->in_tstamp.data) >> 10);
nexttbtt += in->in_intval;
- if (isc->isc_opmode != IEEE80211_M_HOSTAP) {
+ if (ic->ic_opmode != IEEE80211_M_HOSTAP) {
HAL_BEACON_STATE bs;
- uint32_t bmisstime;
/* NB: no PCF support right now */
bzero(&bs, sizeof (bs));
@@ -468,14 +522,11 @@ ath_beacon_config(ath_t *asc)
bs.bs_nextdtim = nexttbtt;
/*
- * Calculate the number of consecutive beacons to miss
- * before taking a BMISS interrupt. The configuration
- * is specified in ms, so we need to convert that to
- * TU's and then calculate based on the beacon interval.
+ * Setup the number of consecutive beacons to miss
+ * before taking a BMISS interrupt.
* Note that we clamp the result to at most 10 beacons.
*/
- bmisstime = (isc->isc_bmisstimeout * 1000) / 1024;
- bs.bs_bmissthreshold = howmany(bmisstime, in->in_intval);
+ bs.bs_bmissthreshold = ic->ic_bmissthreshold;
if (bs.bs_bmissthreshold > 10)
bs.bs_bmissthreshold = 10;
else if (bs.bs_bmissthreshold <= 0)
@@ -521,52 +572,93 @@ ath_beacon_config(ath_t *asc)
}
}
+/*
+ * Allocate one or more key cache slots for a unicast key. The
+ * key itself is needed only to identify the cipher. For hardware
+ * TKIP with split cipher+MIC keys we allocate two key cache slot
+ * pairs so that we can setup separate TX and RX MIC keys. Note
+ * that the MIC key for a TKIP key at slot i is assumed by the
+ * hardware to be at slot i+64. This limits TKIP keys to the first
+ * 64 entries.
+ */
+/* ARGSUSED */
+int
+ath_key_alloc(ieee80211com_t *ic, const struct ieee80211_key *k,
+ ieee80211_keyix *keyix, ieee80211_keyix *rxkeyix)
+{
+ *keyix = *rxkeyix = 0;
+ return (1);
+}
+
+int
+ath_key_delete(ieee80211com_t *ic, const struct ieee80211_key *k)
+{
+ struct ath_hal *ah = ((ath_t *)ic)->asc_ah;
+ ATH_HAL_KEYRESET(ah, k->wk_keyix);
+ return (1);
+}
/*
- * Fill the hardware key cache with key entries.
+ * Set the key cache contents for the specified key. Key cache
+ * slot(s) must already have been allocated by ath_key_alloc.
*/
-void
-ath_initkeytable(ath_t *asc)
+int
+ath_key_set(ieee80211com_t *ic, const struct ieee80211_key *k,
+ const uint8_t mac[IEEE80211_ADDR_LEN])
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ static const uint8_t ciphermap[] = {
+ HAL_CIPHER_WEP, /* IEEE80211_CIPHER_WEP */
+ HAL_CIPHER_TKIP, /* IEEE80211_CIPHER_TKIP */
+ HAL_CIPHER_AES_OCB, /* IEEE80211_CIPHER_AES_OCB */
+ HAL_CIPHER_AES_CCM, /* IEEE80211_CIPHER_AES_CCM */
+ (uint8_t)-1, /* 4 is not allocated */
+ HAL_CIPHER_CKIP, /* IEEE80211_CIPHER_CKIP */
+ HAL_CIPHER_CLR, /* IEEE80211_CIPHER_NONE */
+ };
+ ath_t *asc = (ath_t *)ic;
struct ath_hal *ah = asc->asc_ah;
- int32_t i;
-
- for (i = 0; i < IEEE80211_WEP_NKID; i++) {
- struct ieee80211_wepkey *k = &isc->isc_nw_keys[i];
- if (k->iwk_len == 0)
- ATH_HAL_KEYRESET(ah, i);
- else {
- HAL_KEYVAL hk;
-
-#ifdef DEBUG
- char tmp[200], stmp[10];
- int j;
- bzero(tmp, 200);
- bzero(stmp, 10);
- for (j = 0; j < k->iwk_len; j++) {
- (void) sprintf(stmp, "0x%02x ", k->iwk_key[j]);
- (void) strcat(tmp, stmp);
- }
- ATH_DEBUG((ATH_DBG_AUX, "ath: ath_initkeytable(): "
- "key%d val=%s\n", i, tmp));
-#endif /* DEBUG */
- bzero(&hk, sizeof (hk));
- hk.kv_type = HAL_CIPHER_WEP;
- hk.kv_len = k->iwk_len;
- bcopy(k->iwk_key, hk.kv_val, k->iwk_len);
- ATH_HAL_KEYSET(ah, i, &hk);
- }
+ const struct ieee80211_cipher *cip = k->wk_cipher;
+ HAL_KEYVAL hk;
+
+ bzero(&hk, sizeof (hk));
+ /*
+ * Software crypto uses a "clear key" so non-crypto
+ * state kept in the key cache are maintainedd so that
+ * rx frames have an entry to match.
+ */
+ if ((k->wk_flags & IEEE80211_KEY_SWCRYPT) == 0) {
+ ASSERT(cip->ic_cipher < ATH_N(ciphermap));
+ hk.kv_type = ciphermap[cip->ic_cipher];
+ hk.kv_len = k->wk_keylen;
+ bcopy(k->wk_key, hk.kv_val, k->wk_keylen);
+ } else {
+ hk.kv_type = HAL_CIPHER_CLR;
}
+
+ return (ATH_HAL_KEYSET(ah, k->wk_keyix, &hk, mac));
}
+/*
+ * Enable/Disable short slot timing
+ */
void
-ath_reset(ath_t *asc)
+ath_set_shortslot(ieee80211com_t *ic, int onoff)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ struct ath_hal *ah = ((ath_t *)ic)->asc_ah;
+
+ if (onoff)
+ ATH_HAL_SETSLOTTIME(ah, HAL_SLOT_TIME_9);
+ else
+ ATH_HAL_SETSLOTTIME(ah, HAL_SLOT_TIME_20);
+}
+
+int
+ath_reset(ieee80211com_t *ic)
+{
+ ath_t *asc = (ath_t *)ic;
struct ath_hal *ah = asc->asc_ah;
- struct ieee80211channel *ch;
+ struct ieee80211_channel *ch;
HAL_STATUS status;
HAL_CHANNEL hchan;
@@ -574,28 +666,31 @@ ath_reset(ath_t *asc)
* Convert to a HAL channel description with the flags
* constrained to reflect the current operating mode.
*/
- ch = isc->isc_ibss_chan;
- hchan.channel = ch->ich_freq;
- hchan.channelFlags = ath_chan2flags(isc, ch);
+ ch = ic->ic_curchan;
+ asc->asc_curchan.channel = ch->ich_freq;
+ asc->asc_curchan.channelFlags = ath_chan2flags(ic, ch);
ATH_HAL_INTRSET(ah, 0); /* disable interrupts */
ath_draintxq(asc); /* stop xmit side */
- if (asc->asc_invalid == 0)
+ if (ATH_IS_RUNNING(asc)) {
ath_stoprecv(asc); /* stop recv side */
- /* indicate channel change so we do a full reset */
- if (!ATH_HAL_RESET(ah, (HAL_OPMODE)isc->isc_opmode, &hchan,
- AH_TRUE, &status)) {
- ath_problem("ath: ath_reset(): "
- "reseting hardware failed, HAL status %u\n", status);
+ /* indicate channel change so we do a full reset */
+ if (!ATH_HAL_RESET(ah, (HAL_OPMODE)ic->ic_opmode, &hchan,
+ AH_TRUE, &status)) {
+ ath_problem("ath: ath_reset(): "
+ "resetting hardware failed, HAL status %u\n",
+ status);
+ }
+ ath_chan_change(asc, ch);
}
- if (asc->asc_invalid == 0) {
- ath_initkeytable(asc);
+ if (ATH_IS_RUNNING(asc)) {
if (ath_startrecv(asc) != 0) /* restart recv */
ath_problem("ath: ath_reset(): "
"starting receiving logic failed\n");
- if (isc->isc_state == IEEE80211_S_RUN) {
+ if (ic->ic_state == IEEE80211_S_RUN) {
ath_beacon_config(asc); /* restart beacons */
}
ATH_HAL_INTRSET(ah, asc->asc_imask);
}
+ return (0);
}
diff --git a/usr/src/uts/common/io/ath/ath_aux.h b/usr/src/uts/common/io/ath/ath_aux.h
index 6641d72429..d4d09b81ca 100644
--- a/usr/src/uts/common/io/ath/ath_aux.h
+++ b/usr/src/uts/common/io/ath/ath_aux.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -45,25 +45,31 @@ extern "C" {
#endif
#include "ath_hal.h"
-#include "ath_ieee80211.h"
#include "ath_impl.h"
uint32_t ath_calcrxfilter(ath_t *asc);
void ath_beacon_config(ath_t *asc);
-void ath_reset(ath_t *asc);
+int ath_reset(ieee80211com_t *ic);
int32_t ath_startrecv(ath_t *asc);
void ath_stoprecv(ath_t *asc);
uint32_t ath_chan2flags(ieee80211com_t *isc,
- struct ieee80211channel *chan);
+ struct ieee80211_channel *chan);
int32_t ath_getchannels(ath_t *asc, uint32_t cc,
HAL_BOOL outdoor, HAL_BOOL xchanmode);
-int32_t ath_chan_set(ath_t *asc, struct ieee80211channel *chan);
+void ath_chan_change(ath_t *asc, struct ieee80211_channel *chan);
+int32_t ath_chan_set(ath_t *asc, struct ieee80211_channel *chan);
int ath_txq_setup(ath_t *asc);
+void ath_txq_cleanup(ath_t *asc);
void ath_rate_setup(ath_t *asc, uint32_t mode);
void ath_setcurmode(ath_t *asc, enum ieee80211_phymode mode);
void ath_mode_init(ath_t *asc);
void ath_draintxq(ath_t *asc);
-void ath_initkeytable(ath_t *asc);
+int ath_key_alloc(ieee80211com_t *ic, const struct ieee80211_key *k,
+ ieee80211_keyix *keyix, ieee80211_keyix *rxkeyix);
+int ath_key_delete(ieee80211com_t *ic, const struct ieee80211_key *k);
+int ath_key_set(ieee80211com_t *ic, const struct ieee80211_key *k,
+ const uint8_t mac[IEEE80211_ADDR_LEN]);
+void ath_set_shortslot(ieee80211com_t *ic, int onoff);
#ifdef __cplusplus
}
diff --git a/usr/src/uts/common/io/ath/ath_hal.h b/usr/src/uts/common/io/ath/ath_hal.h
index 59ac8aed84..7e1a3cf0df 100644
--- a/usr/src/uts/common/io/ath/ath_hal.h
+++ b/usr/src/uts/common/io/ath/ath_hal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting, Atheros
+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting, Atheros
* Communications, Inc. All rights reserved.
*
* Use is subject to license terms.
@@ -57,12 +57,12 @@ extern "C" {
#endif
/* HAL version of this release */
-#define HAL_ABI_VERSION 0x04112900 /* YYMMDDnn */
+#define HAL_ABI_VERSION 0x06052200 /* YYMMDDnn */
/* HAL data type definition */
-typedef void * HAL_SOFTC;
-typedef int HAL_BUS_TAG;
-typedef void * HAL_BUS_HANDLE;
+typedef void * HAL_SOFTC; /* pointer to driver/OS state */
+typedef void * HAL_BUS_TAG; /* opaque bus i/o id tag */
+typedef void * HAL_BUS_HANDLE; /* opaque bus i/o handle */
typedef uint32_t HAL_BUS_ADDR;
typedef uint16_t HAL_CTRY_CODE; /* country code */
typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */
@@ -84,19 +84,35 @@ typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */
#define CHANNEL_PASSIVE 0x0200 /* Only passive scan allowed in the channel */
#define CHANNEL_DYN 0x0400 /* dynamic CCK-OFDM channel */
#define CHANNEL_XR 0x0800 /* XR channel */
-#define CHANNEL_AR 0x8000 /* Software use: radar detected */
+#define CHANNEL_STURBO 0x2000 /* Static turbo, no 11a-only usage */
+#define CHANNEL_HALF 0x4000 /* Half rate channel */
+#define CHANNEL_QUARTER 0x8000 /* Quarter rate channel */
#define CHANNEL_A (CHANNEL_5GHZ|CHANNEL_OFDM)
#define CHANNEL_B (CHANNEL_2GHZ|CHANNEL_CCK)
#define CHANNEL_PUREG (CHANNEL_2GHZ|CHANNEL_OFDM)
#define CHANNEL_G (CHANNEL_2GHZ|CHANNEL_OFDM)
#define CHANNEL_T (CHANNEL_5GHZ|CHANNEL_OFDM|CHANNEL_TURBO)
+#define CHANNEL_ST (CHANNEL_T|CHANNEL_STURBO)
#define CHANNEL_108G (CHANNEL_2GHZ|CHANNEL_OFDM|CHANNEL_TURBO)
+#define CHANNEL_108A CHANNEL_T
#define CHANNEL_X (CHANNEL_5GHZ|CHANNEL_OFDM|CHANNEL_XR)
#define CHANNEL_ALL \
(CHANNEL_OFDM|CHANNEL_CCK|CHANNEL_5GHZ|CHANNEL_2GHZ|CHANNEL_TURBO)
#define CHANNEL_ALL_NOTURBO (CHANNEL_ALL &~ CHANNEL_TURBO)
+#define CHANNEL_COMPAT (CHANNEL_ALL_NOTURBO | CHANNEL_PASSIVE)
+
+/* privFlags */
+/*
+ * Software use: channel interference used for AR as well as RADAR
+ * interference detection
+ */
+#define CHANNEL_INTERFERENCE 0x01
+#define CHANNEL_DFS 0x02 /* DFS required on channel */
+#define CHANNEL_4MS_LIMIT 0x04 /* 4msec packet limit on this channel */
+#define CHANNEL_DFS_CLEAR 0x08 /* if channel has been checked DFS */
+
#define HAL_RSSI_EP_MULTIPLIER (1<<7) /* pow2 to optimize out * and / */
/* flags passed to tx descriptor setup methods */
@@ -106,6 +122,8 @@ typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */
#define HAL_TXDESC_CTSENA 0x0008 /* enable CTS */
#define HAL_TXDESC_INTREQ 0x0010 /* enable per-descriptor interrupt */
#define HAL_TXDESC_VEOL 0x0020 /* mark virtual EOL */
+/* NB: this only affects frame, not any RTS/CTS */
+#define HAL_TXDESC_DURENA 0x0040 /* enable h/w write of duration field */
/* flags passed to rx descriptor setup methods */
#define HAL_RXDESC_INTREQ 0x0020 /* enable per-descriptor interrupt */
@@ -129,6 +147,16 @@ typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */
/* value used to specify no encryption key for xmit */
#define HAL_TXKEYIX_INVALID ((uint32_t)-1)
+/* compression definitions */
+#define HAL_COMP_BUF_MAX_SIZE 9216 /* 9k */
+#define HAL_COMP_BUF_ALIGN_SIZE 512
+#define HAL_DECOMP_MASK_SIZE 128
+
+#define HAL_ANTENNA_MIN_MODE 0
+#define HAL_ANTENNA_FIXED_A 1
+#define HAL_ANTENNA_FIXED_B 2
+#define HAL_ANTENNA_MAX_MODE 3
+
/*
* Status codes that may be returned by the HAL. Note that
* interfaces that return a status code set it only when an
@@ -175,7 +203,23 @@ typedef enum {
HAL_CAP_BURST = 13, /* hardware supports packet bursting */
HAL_CAP_FASTFRAME = 14, /* hardware supoprts fast frames */
HAL_CAP_TXPOW = 15, /* global tx power limit */
- HAL_CAP_TPC = 16 /* per-packet tx power control */
+ HAL_CAP_TPC = 16, /* per-packet tx power control */
+ HAL_CAP_PHYDIAG = 17, /* hardware phy error diagnostic */
+ HAL_CAP_BSSIDMASK = 18, /* hardware supports bssid mask */
+ HAL_CAP_MCAST_KEYSRCH = 19, /* hardware has multicast key search */
+ HAL_CAP_TSF_ADJUST = 20, /* hardware has beacon tsf adjust */
+ HAL_CAP_XR = 21, /* hardware has XR support */
+ /* hardware can support TKIP MIC when WMM is turned on */
+ HAL_CAP_WME_TKIPMIC = 22,
+ /* hardware can support half rate channels */
+ HAL_CAP_CHAN_HALFRATE = 23,
+ /* hardware can support quarter rate channels */
+ HAL_CAP_CHAN_QUARTERRATE = 24,
+ HAL_CAP_RFSILENT = 25, /* hardware has rfsilent support */
+ HAL_CAP_TPC_ACK = 26, /* ack txpower with per-packet tpc */
+ HAL_CAP_TPC_CTS = 27, /* cts txpower with per-packet tpc */
+ HAL_CAP_11D = 28, /* 11d beacon support for changing cc */
+ HAL_CAP_INTMIT = 29 /* interference mitigation */
} HAL_CAPABILITY_TYPE;
/*
@@ -203,7 +247,7 @@ typedef enum {
HAL_TX_QUEUE_DATA = 1, /* data xmit q's */
HAL_TX_QUEUE_BEACON = 2, /* beacon xmit q */
HAL_TX_QUEUE_CAB = 3, /* "crap after beacon" xmit q */
- HAL_TX_QUEUE_PSPOLL = 4 /* power-save poll xmit q */
+ HAL_TX_QUEUE_UAPSD = 4 /* u-apsd power save xmit q */
} HAL_TX_QUEUE;
@@ -217,7 +261,8 @@ typedef enum {
HAL_WME_AC_BE = 1, /* best effort access category */
HAL_WME_AC_VI = 2, /* video access category */
HAL_WME_AC_VO = 3, /* voice access category */
- HAL_WME_UPSD = 4 /* uplink power save */
+ HAL_WME_UPSD = 4, /* uplink power save */
+ HAL_XR_DATA = 5 /* entended range data */
} HAL_TX_QUEUE_SUBTYPE;
/*
@@ -225,17 +270,86 @@ typedef enum {
* operational parameters.
*/
typedef enum {
- TXQ_FLAG_TXOKINT_ENABLE = 0x0001, /* enable TXOK interrupt */
- TXQ_FLAG_TXERRINT_ENABLE = 0x0001, /* enable TXERR interrupt */
- TXQ_FLAG_TXDESCINT_ENABLE = 0x0002, /* enable TXDESC interrupt */
- TXQ_FLAG_TXEOLINT_ENABLE = 0x0004, /* enable TXEOL interrupt */
- TXQ_FLAG_TXURNINT_ENABLE = 0x0008, /* enable TXURN interrupt */
- TXQ_FLAG_BACKOFF_DISABLE = 0x0010, /* disable Post Backoff */
- TXQ_FLAG_COMPRESSION_ENABLE = 0x0020, /* compression enabled */
- /* enable ready time expiry policy */
- TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE = 0x0040,
- /* enable backoff while sending fragment burst */
- TXQ_FLAG_FRAG_BURST_BACKOFF_ENABLE = 0x0080
+ /*
+ * Per queue interrupt enables. When set the associated
+ * interrupt may be delivered for packets sent through
+ * the queue. Without these enabled no interrupts will
+ * be delivered for transmits through the queue.
+ *
+ * When 0x0001 is set, both TXQ_TXOKINT and TXQ_TXERRINT
+ * will be enabled.
+ */
+ HAL_TXQ_TXOKINT_ENABLE = 0x0001, /* enable TXOK interrupt */
+ HAL_TXQ_TXERRINT_ENABLE = 0x0001, /* enable TXERR interrupt */
+ HAL_TXQ_TXDESCINT_ENABLE = 0x0002, /* enable TXDESC interrupt */
+ HAL_TXQ_TXEOLINT_ENABLE = 0x0004, /* enable TXEOL interrupt */
+ HAL_TXQ_TXURNINT_ENABLE = 0x0008, /* enable TXURN interrupt */
+ /*
+ * Enable hardware compression for packets sent through
+ * the queue. The compression buffer must be setup and
+ * packets must have a key entry marked in the tx descriptor.
+ */
+ HAL_TXQ_COMPRESSION_ENABLE = 0x0010, /* enable h/w compression */
+ /*
+ * Disable queue when veol is hit or ready time expires.
+ * By default the queue is disabled only on reaching the
+ * physical end of queue (i.e. a null link ptr in the
+ * descriptor chain).
+ */
+ HAL_TXQ_RDYTIME_EXP_POLICY_ENABLE = 0x0020,
+ /*
+ * Schedule frames on delivery of a DBA (DMA Beacon Alert)
+ * event. Frames will be transmitted only when this timer
+ * fires, e.g to transmit a beacon in ap or adhoc modes.
+ */
+ HAL_TXQ_DBA_GATED = 0x0040, /* schedule based on DBA */
+ /*
+ * Each transmit queue has a counter that is incremented
+ * each time the queue is enabled and decremented when
+ * the list of frames to transmit is traversed (or when
+ * the ready time for the queue expires). This counter
+ * must be non-zero for frames to be scheduled for
+ * transmission. The following controls disable bumping
+ * this counter under certain conditions. Typically this
+ * is used to gate frames based on the contents of another
+ * queue (e.g. CAB traffic may only follow a beacon frame).
+ * These are meaningful only when frames are scheduled
+ * with a non-ASAP policy (e.g. DBA-gated).
+ */
+ HAL_TXQ_CBR_DIS_QEMPTY = 0x0080, /* disable on this q empty */
+ HAL_TXQ_CBR_DIS_BEMPTY = 0x0100, /* disable on beacon q empty */
+
+ /*
+ * Fragment burst backoff policy. Normally no backoff
+ * is done after a successful transmission, the next fragment
+ * is sent at SIFS. If this flag is set backoff is done
+ * after each fragment, regardless whether it was ack'd or
+ * not, after the backoff count reaches zero a normal channel
+ * access procedure is done before the next transmit (i.e.
+ * wait AIFS instead of SIFS).
+ */
+ HAL_TXQ_FRAG_BURST_BACKOFF_ENABLE = 0x00800000,
+ /*
+ * Disable post-tx backoff following each frame.
+ */
+ HAL_TXQ_BACKOFF_DISABLE = 0x00010000, /* disable post backoff */
+ /*
+ * DCU arbiter lockout control. This controls how
+ * lower priority tx queues are handled with respect
+ * to a specific queue when multiple queues have frames
+ * to send. No lockout means lower priority queues arbitrate
+ * concurrently with this queue. Intra-frame lockout
+ * means lower priority queues are locked out until the
+ * current frame transmits (e.g. including backoffs and bursting).
+ * Global lockout means nothing lower can arbitrary so
+ * long as there is traffic activity on this queue (frames,
+ * backoff, etc).
+ */
+ HAL_TXQ_ARB_LOCKOUT_INTRA = 0x00020000, /* intra-frame lockout */
+ HAL_TXQ_ARB_LOCKOUT_GLOBAL = 0x00040000, /* full lockout s */
+
+ HAL_TXQ_IGNORE_VIRTCOL = 0x00080000, /* ignore virt collisions */
+ HAL_TXQ_SEQNUM_INC_DIS = 0x00100000 /* disable seqnum increment */
} HAL_TX_QUEUE_FLAGS;
typedef struct {
@@ -252,8 +366,11 @@ typedef struct {
uint32_t tqi_cbrOverflowLimit;
uint32_t tqi_burstTime;
uint32_t tqi_readyTime;
+ uint32_t tqi_compBuf; /* compress buffer phys addr */
} HAL_TXQ_INFO;
+#define HAL_TQI_NONVAL 0xffff
+
/* token to use for aifs, cwmin, cwmax */
#define HAL_TXQ_USEDEFAULT ((uint32_t)-1)
@@ -270,7 +387,9 @@ typedef enum {
HAL_PKT_TYPE_ATIM = 1,
HAL_PKT_TYPE_PSPOLL = 2,
HAL_PKT_TYPE_BEACON = 3,
- HAL_PKT_TYPE_PROBE_RESP = 4
+ HAL_PKT_TYPE_PROBE_RESP = 4,
+ HAL_PKT_TYPE_CHIRP = 5,
+ HAL_PKT_TYPE_GRP_POLL = 6
} HAL_PKT_TYPE;
/* Rx Filter Frame Types */
@@ -281,17 +400,17 @@ typedef enum {
HAL_RX_FILTER_CONTROL = 0x00000008, /* Allow control frames */
HAL_RX_FILTER_BEACON = 0x00000010, /* Allow beacon frames */
HAL_RX_FILTER_PROM = 0x00000020, /* Promiscuous mode */
+ HAL_RX_FILTER_XRPOLL = 0x00000040, /* Allow XR poll frmae */
HAL_RX_FILTER_PROBEREQ = 0x00000080, /* Allow probe request frames */
HAL_RX_FILTER_PHYERR = 0x00000100, /* Allow phy errors */
HAL_RX_FILTER_PHYRADAR = 0x00000200 /* Allow phy radar errors */
} HAL_RX_FILTER;
typedef enum {
- HAL_PM_UNDEFINED = 0,
- HAL_PM_AUTO = 1,
- HAL_PM_AWAKE = 2,
- HAL_PM_FULL_SLEEP = 3,
- HAL_PM_NETWORK_SLEEP = 4
+ HAL_PM_AWAKE = 0,
+ HAL_PM_FULL_SLEEP = 1,
+ HAL_PM_NETWORK_SLEEP = 2,
+ HAL_PM_UNDEFINED = 3
} HAL_POWER_MODE;
/*
@@ -318,9 +437,17 @@ typedef enum {
HAL_INT_SWBA = 0x00010000,
HAL_INT_BMISS = 0x00040000,
HAL_INT_BNR = 0x00100000, /* Non-common mapping */
+ HAL_INT_TIM = 0x00200000, /* Non-common mapping */
+ HAL_INT_DTIM = 0x00400000, /* Non-common mapping */
+ HAL_INT_DTIMSYNC = 0x00800000, /* Non-common mapping */
HAL_INT_GPIO = 0x01000000,
+ HAL_INT_CABEND = 0x02000000, /* Non-common mapping */
HAL_INT_FATAL = 0x40000000, /* Non-common mapping */
HAL_INT_GLOBAL = INT_MIN, /* Set/clear IER */
+ HAL_INT_BMISC = HAL_INT_TIM
+ | HAL_INT_DTIM
+ | HAL_INT_DTIMSYNC
+ | HAL_INT_CABEND,
/* Interrupt bits that map directly to ISR/IMR bits */
HAL_INT_COMMON = HAL_INT_RXNOFRM
@@ -374,6 +501,10 @@ typedef enum {
typedef struct {
uint16_t channel; /* setting in Mhz */
uint16_t channelFlags; /* see below */
+ uint8_t privFlags;
+ int8_t maxRegTxPower; /* max regulatory tx power in dBm */
+ int8_t maxTxPower; /* max true tx power in 0.5 dBm */
+ int8_t minTxPower; /* min true tx power in 0.5 dBm */
} HAL_CHANNEL;
@@ -392,12 +523,16 @@ enum {
};
enum {
- HAL_MODE_11A = 0x001,
- HAL_MODE_TURBO = 0x002,
- HAL_MODE_11B = 0x004,
- HAL_MODE_PUREG = 0x008,
- HAL_MODE_11G = 0x008,
- HAL_MODE_108G = 0x020,
+ HAL_MODE_11A = 0x001, /* 11a channels */
+ HAL_MODE_TURBO = 0x002, /* 11a turbo-only channels */
+ HAL_MODE_11B = 0x004, /* 11b channels */
+ HAL_MODE_PUREG = 0x008, /* 11g channels (OFDM only) */
+ HAL_MODE_11G = 0x008, /* XXX historical */
+ HAL_MODE_108G = 0x020, /* 11g+Turbo channels */
+ HAL_MODE_108A = 0x040, /* 11a+Turbo channels */
+ HAL_MODE_XR = 0x100, /* XR channels */
+ HAL_MODE_11A_HALF_RATE = 0x200, /* 11A half rate channels */
+ HAL_MODE_11A_QUARTER_RATE = 0x400, /* 11A quarter rate channels */
HAL_MODE_ALL = 0xfff
};
@@ -425,10 +560,16 @@ typedef struct {
uint8_t rs_rates[32]; /* rates */
} HAL_RATE_SET;
+/*
+ * Antenna switch control. By default antenna selection
+ * enables multiple (2) antenna use. To force use of the
+ * A or B antenna only specify a fixed setting. Fixing
+ * the antenna will also disable any diversity support.
+ */
typedef enum {
HAL_ANT_VARIABLE = 0, /* variable by programming */
- HAL_ANT_FIXED_A = 1, /* fixed to 11a frequencies */
- HAL_ANT_FIXED_B = 2 /* fixed to 11b frequencies */
+ HAL_ANT_FIXED_A = 1, /* fixed antenna A */
+ HAL_ANT_FIXED_B = 2 /* fixed antenna B */
} HAL_ANT_SETTING;
typedef enum {
@@ -458,6 +599,7 @@ typedef enum {
} HAL_CIPHER;
enum {
+ HAL_SLOT_TIME_6 = 6, /* NB: for turbo mode */
HAL_SLOT_TIME_9 = 9,
HAL_SLOT_TIME_20 = 20
};
@@ -483,6 +625,18 @@ typedef struct {
} HAL_BEACON_STATE;
/*
+ * Like HAL_BEACON_STATE but for non-station mode setup.
+ * NB: see above flag definitions
+ */
+typedef struct {
+ uint32_t bt_intval; /* beacon interval+flags */
+ uint32_t bt_nexttbtt; /* next beacon in TU */
+ uint32_t bt_nextatim; /* next ATIM in TU */
+ uint32_t bt_nextdba; /* next DBA in 1/8th TU */
+ uint32_t bt_nextswba; /* next SWBA in 1/8th TU */
+} HAL_BEACON_TIMERS;
+
+/*
* Per-node statistics maintained by the driver for use in
* optimizing signal quality and other operational aspects.
*/
@@ -575,6 +729,7 @@ struct ath_desc {
struct ath_tx_status tx; /* xmit status */
struct ath_rx_status rx; /* recv status */
} ds_us;
+ void *ds_vdata; /* virtual addr of data buffer */
};
#pragma pack()
@@ -604,8 +759,11 @@ struct ath_hal {
uint32_t ah_macVersion; /* MAC version id */
uint16_t ah_macRev; /* MAC revision */
uint16_t ah_phyRev; /* PHY revision */
- uint16_t ah_analog5GhzRev; /* 2GHz radio revision */
- uint16_t ah_analog2GhzRev; /* 5GHz radio revision */
+ /* NB: when only one radio is present the rev is in 5Ghz */
+ uint16_t ah_analog5GhzRev; /* 5GHz radio revision */
+ uint16_t ah_analog2GhzRev; /* 2GHz radio revision */
+ /* decomp mask array */
+ uint8_t ah_decompMask[HAL_DECOMP_MASK_SIZE];
const HAL_RATE_TABLE *(*ah_getRateTable)(struct ath_hal *,
uint32_t mode);
@@ -615,11 +773,21 @@ struct ath_hal {
HAL_BOOL (*ah_reset) (struct ath_hal *, HAL_OPMODE,
HAL_CHANNEL *, HAL_BOOL bChannelChange,
HAL_STATUS *status);
- HAL_BOOL (*ah_phyDisable) (struct ath_hal *);
- void (*ah_setPCUConfig) (struct ath_hal *);
- HAL_BOOL (*ah_perCalibration) (struct ath_hal *, HAL_CHANNEL *);
+ HAL_BOOL (*ah_phyDisable) (struct ath_hal *);
+ HAL_BOOL (*ah_disable) (struct ath_hal *);
+ void (*ah_setPCUConfig) (struct ath_hal *);
+ HAL_BOOL (*ah_perCalibration) (struct ath_hal *, HAL_CHANNEL *,
+ HAL_BOOL *);
HAL_BOOL (*ah_setTxPowerLimit)(struct ath_hal *, uint32_t);
+ void (*ah_arEnable)(struct ath_hal *);
+ void (*ah_arDisable)(struct ath_hal *);
+ void (*ah_arReset)(struct ath_hal *);
+ HAL_BOOL (*ah_radarHaveEvent)(struct ath_hal *);
+ HAL_BOOL (*ah_processDfs)(struct ath_hal *, HAL_CHANNEL *);
+ uint32_t (*ah_dfsNolCheck)(struct ath_hal *, HAL_CHANNEL *, uint32_t);
+ HAL_BOOL (*ah_radarWait)(struct ath_hal *, HAL_CHANNEL *);
+
/* Transmit functions */
HAL_BOOL (*ah_updateTxTrigLevel) (struct ath_hal *,
HAL_BOOL incTrigLevel);
@@ -636,17 +804,15 @@ struct ath_hal {
uint32_t (*ah_numTxPending)(struct ath_hal *, uint32_t q);
HAL_BOOL (*ah_startTxDma) (struct ath_hal *, uint32_t);
HAL_BOOL (*ah_stopTxDma) (struct ath_hal *, uint32_t);
- HAL_BOOL (*ah_updateCTSForBursting)(struct ath_hal *,
- struct ath_desc *, struct ath_desc *,
- struct ath_desc *, struct ath_desc *,
- uint32_t, uint32_t);
HAL_BOOL (*ah_setupTxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t pktLen, uint32_t hdrLen,
HAL_PKT_TYPE type, uint32_t txPower,
uint32_t txRate0, uint32_t txTries0,
uint32_t keyIx, uint32_t antMode,
uint32_t flags, uint32_t rtsctsRate,
- uint32_t rtsctsDuration);
+ uint32_t rtsctsDuration,
+ uint32_t compicvLen, uint32_t compivLen,
+ uint32_t comp);
HAL_BOOL (*ah_setupXTxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t txRate1, uint32_t txTries1,
uint32_t txRate2, uint32_t txTries2,
@@ -656,6 +822,7 @@ struct ath_hal {
HAL_BOOL lastSeg, const struct ath_desc *);
HAL_STATUS (*ah_procTxDesc) (struct ath_hal *, struct ath_desc *);
void (*ah_getTxIntrQueue)(struct ath_hal *, uint32_t *);
+ void (*ah_reqTxIntrDesc)(struct ath_hal *, struct ath_desc *);
/* Receive Functions */
uint32_t (*ah_getRxDP) (struct ath_hal *);
@@ -675,9 +842,10 @@ struct ath_hal {
HAL_BOOL (*ah_setupRxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t size, uint32_t flags);
HAL_STATUS (*ah_procRxDesc) (struct ath_hal *, struct ath_desc *,
- uint32_t phyAddr, struct ath_desc *next);
+ uint32_t phyAddr, struct ath_desc *next,
+ uint64_t tsf);
void (*ah_rxMonitor) (struct ath_hal *,
- const HAL_NODE_STATS *);
+ const HAL_NODE_STATS *, HAL_CHANNEL *);
void (*ah_procMibEvent) (struct ath_hal *,
const HAL_NODE_STATS *);
@@ -693,6 +861,8 @@ struct ath_hal {
void **result, uint32_t *resultsize);
void (*ah_getMacAddress) (struct ath_hal *, uint8_t *);
HAL_BOOL (*ah_setMacAddress) (struct ath_hal *, const uint8_t *);
+ void (*ah_getBssIdMask)(struct ath_hal *, uint8_t *);
+ HAL_BOOL (*ah_setBssIdMask)(struct ath_hal *, const uint8_t *);
HAL_BOOL (*ah_setRegulatoryDomain) (struct ath_hal *,
uint16_t, HAL_STATUS *);
void (*ah_setLedState) (struct ath_hal *, HAL_LED_STATE);
@@ -712,13 +882,18 @@ struct ath_hal {
HAL_RFGAIN (*ah_getRfGain) (struct ath_hal *);
uint32_t (*ah_getDefAntenna) (struct ath_hal *);
void (*ah_setDefAntenna) (struct ath_hal *, uint32_t);
+ HAL_ANT_SETTING (*ah_getAntennaSwitch) (struct ath_hal *);
+ HAL_BOOL (*ah_setAntennaSwitch) (struct ath_hal *, HAL_ANT_SETTING);
HAL_BOOL (*ah_setSlotTime) (struct ath_hal *, uint32_t);
uint32_t (*ah_getSlotTime) (struct ath_hal *);
HAL_BOOL (*ah_setAckTimeout) (struct ath_hal *, uint32_t);
uint32_t (*ah_getAckTimeout) (struct ath_hal *);
+ HAL_BOOL (*ah_setAckCTSRate) (struct ath_hal *, uint32_t);
+ uint32_t (*ah_getAckCTSRate) (struct ath_hal *);
HAL_BOOL (*ah_setCTSTimeout) (struct ath_hal *, uint32_t);
uint32_t (*ah_getCTSTimeout) (struct ath_hal *);
-
+ HAL_BOOL (*ah_setDecompMask)(struct ath_hal *, uint16_t, int);
+ void (*ah_setCoverageClass)(struct ath_hal *, uint8_t, int);
/* Key Cache Functions */
uint32_t (*ah_getKeyCacheSize) (struct ath_hal *);
HAL_BOOL (*ah_resetKeyCacheEntry) (struct ath_hal *, uint16_t);
@@ -731,22 +906,19 @@ struct ath_hal {
/* Power Management Functions */
HAL_BOOL (*ah_setPowerMode) (struct ath_hal *,
- HAL_POWER_MODE mode, int setChip,
- uint16_t sleepDuration);
+ HAL_POWER_MODE mode, int setChip);
HAL_POWER_MODE (*ah_getPowerMode) (struct ath_hal *);
- HAL_BOOL (*ah_initPSPoll) (struct ath_hal *);
- HAL_BOOL (*ah_enablePSPoll) (struct ath_hal *,
- uint8_t *, uint16_t);
- HAL_BOOL (*ah_disablePSPoll) (struct ath_hal *);
+ int16_t (*ah_getChanNoise)(struct ath_hal *, HAL_CHANNEL *);
/* Beacon Management Functions */
+ void (*ah_setBeaconTimers) (struct ath_hal *,
+ const HAL_BEACON_TIMERS *);
+ /* NB: deprecated, use ah_setBeaconTimers instead */
void (*ah_beaconInit) (struct ath_hal *,
uint32_t nexttbtt, uint32_t intval);
void (*ah_setStationBeaconTimers) (struct ath_hal *,
const HAL_BEACON_STATE *);
void (*ah_resetStationBeaconTimers) (struct ath_hal *);
- HAL_BOOL (*ah_waitForBeaconDone) (struct ath_hal *,
- HAL_BUS_ADDR);
/* Interrupt functions */
HAL_BOOL (*ah_isInterruptPending) (struct ath_hal *);
@@ -779,6 +951,13 @@ extern struct ath_hal *ath_hal_attach(uint16_t devid, HAL_SOFTC,
HAL_BUS_TAG, HAL_BUS_HANDLE, HAL_STATUS *status);
/*
+ * Set the Vendor ID for Vendor SKU's which can modify the
+ * channel properties returned by ath_hal_init_channels.
+ * Return AH_TRUE if set succeeds
+ */
+extern HAL_BOOL ath_hal_setvendor(struct ath_hal *, uint32_t);
+
+/*
* Return a list of channels available for use with the hardware.
* The list is based on what the hardware is capable of, the specified
* country code, the modeSelect mask, and whether or not outdoor
@@ -791,10 +970,17 @@ extern struct ath_hal *ath_hal_attach(uint16_t devid, HAL_SOFTC,
*/
extern HAL_BOOL ath_hal_init_channels(struct ath_hal *,
HAL_CHANNEL *chans, uint32_t maxchans, uint32_t *nchans,
+ uint8_t *regclassids, uint32_t maxregids, uint32_t *nregids,
HAL_CTRY_CODE cc, uint16_t modeSelect,
HAL_BOOL enableOutdoor, HAL_BOOL enableExtendedChannels);
/*
+ * Calibrate noise floor data following a channel scan or similar.
+ * This must be called prior retrieving noise floor data.
+ */
+extern void ath_hal_process_noisefloor(struct ath_hal *ah);
+
+/*
* Return bit mask of wireless modes supported by the hardware.
*/
extern uint32_t ath_hal_getwirelessmodes(struct ath_hal *, HAL_CTRY_CODE);
@@ -813,11 +999,15 @@ extern uint16_t ath_hal_computetxtime(struct ath_hal *,
uint16_t rateix, HAL_BOOL shortPreamble);
/*
+ * Return if device is public safety.
+ */
+extern HAL_BOOL ath_hal_ispublicsafetysku(struct ath_hal *);
+
+/*
* Convert between IEEE channel number and channel frequency
* using the specified channel flags; e.g. CHANNEL_2GHZ.
*/
-extern uint32_t ath_hal_mhz2ieee(uint32_t mhz, uint32_t flags);
-extern uint32_t ath_hal_ieee2mhz(uint32_t ieee, uint32_t flags);
+extern int ath_hal_mhz2ieee(struct ath_hal *, uint32_t mhz, uint32_t flags);
/*
* Return a version string for the HAL release.
@@ -834,8 +1024,12 @@ extern const char *ath_hal_buildopts[];
*/
#define ATH_HAL_RESET(_ah, _opmode, _chan, _outdoor, _pstatus) \
((*(_ah)->ah_reset)((_ah), (_opmode), (_chan), (_outdoor), (_pstatus)))
+#define ATH_HAL_PHYDISABLE(_ah) \
+ ((*(_ah)->ah_phyDisable)((_ah)))
#define ATH_HAL_GETCAPABILITY(_ah, _cap, _param, _result) \
((*(_ah)->ah_getCapability)((_ah), (_cap), (_param), (_result)))
+#define ATH_HAL_SETCAPABILITY(_ah, _type, _cap, _param, _status) \
+ ((*ah_setCapability)((_ah), (_type), (_cap), (_param), (_status)))
#define ATH_HAL_GETREGDOMAIN(_ah, _prd) \
ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_REG_DMN, 0, (_prd))
#define ATH_HAL_GETCOUNTRYCODE(_ah, _pcc) \
@@ -856,12 +1050,12 @@ extern const char *ath_hal_buildopts[];
((*(_ah)->ah_getPendingInterrupts)((_ah), (_pmask)))
#define ATH_HAL_UPDATETXTRIGLEVEL(_ah, _inc) \
((*(_ah)->ah_updateTxTrigLevel)((_ah), (_inc)))
-#define ATH_HAL_SETPOWER(_ah, _mode, _sleepduration) \
- ((*(_ah)->ah_setPowerMode)((_ah), (_mode), AH_TRUE, (_sleepduration)))
+#define ATH_HAL_SETPOWER(_ah, _mode) \
+ ((*(_ah)->ah_setPowerMode)((_ah), (_mode), AH_TRUE))
#define ATH_HAL_KEYRESET(_ah, _ix) \
((*(_ah)->ah_resetKeyCacheEntry)((_ah), (_ix)))
-#define ATH_HAL_KEYSET(_ah, _ix, _pk) \
- ((*(_ah)->ah_setKeyCacheEntry)((_ah), (_ix), (_pk), NULL, AH_FALSE))
+#define ATH_HAL_KEYSET(_ah, _ix, _pk, _mac) \
+ ((*(_ah)->ah_setKeyCacheEntry)((_ah), (_ix), (_pk), (_mac), AH_FALSE))
#define ATH_HAL_KEYISVALID(_ah, _ix) \
(((*(_ah)->ah_isKeyCacheEntryValid)((_ah), (_ix))))
#define ATH_HAL_KEYSETMAC(_ah, _ix, _mac) \
@@ -896,8 +1090,8 @@ extern const char *ath_hal_buildopts[];
((*(_ah)->ah_startTxDma)((_ah), (_q)))
#define ATH_HAL_SETCHANNEL(_ah, _chan) \
((*(_ah)->ah_setChannel)((_ah), (_chan)))
-#define ATH_HAL_CALIBRATE(_ah, _chan) \
- ((*(_ah)->ah_perCalibration)((_ah), (_chan)))
+#define ATH_HAL_CALIBRATE(_ah, _chan, _iqcal) \
+ ((*(_ah)->ah_perCalibration)((_ah), (_chan), (_iqcal)))
#define ATH_HAL_SETLEDSTATE(_ah, _state) \
((*(_ah)->ah_setLedState)((_ah), (_state)))
#define ATH_HAL_BEACONINIT(_ah, _nextb, _bperiod) \
@@ -936,8 +1130,10 @@ extern const char *ath_hal_buildopts[];
((*(_ah)->ah_hasVEOL)((_ah)))
#define ATH_HAL_GETRFGAIN(_ah) \
((*(_ah)->ah_getRfGain)((_ah)))
-#define ATH_HAL_RXMONITOR(_ah, _arg) \
- ((*(_ah)->ah_rxMonitor)((_ah), (_arg)))
+#define ATH_HAL_RXMONITOR(_ah, _arg, _chan) \
+ ((*(_ah)->ah_rxMonitor)((_ah), (_arg), (_chan)))
+#define ATH_HAL_SETSLOTTIME(_ah, _us) \
+ ((*(_ah)->ah_setSlotTime)((_ah), (_us)))
#define ATH_HAL_SETUPBEACONDESC(_ah, _ds, _opmode, _flen, _hlen, \
_rate, _antmode) \
((*(_ah)->ah_setupBeaconDesc)((_ah), (_ds), (_opmode), \
@@ -945,13 +1141,13 @@ extern const char *ath_hal_buildopts[];
#define ATH_HAL_SETUPRXDESC(_ah, _ds, _size, _intreq) \
((*(_ah)->ah_setupRxDesc)((_ah), (_ds), (_size), (_intreq)))
#define ATH_HAL_RXPROCDESC(_ah, _ds, _dspa, _dsnext) \
- ((*(_ah)->ah_procRxDesc)((_ah), (_ds), (_dspa), (_dsnext)))
+ ((*(_ah)->ah_procRxDesc)((_ah), (_ds), (_dspa), (_dsnext), 0))
#define ATH_HAL_SETUPTXDESC(_ah, _ds, _plen, _hlen, _atype, _txpow, \
_txr0, _txtr0, _keyix, _ant, _flags, \
_rtsrate, _rtsdura) \
((*(_ah)->ah_setupTxDesc)((_ah), (_ds), (_plen), (_hlen), (_atype), \
(_txpow), (_txr0), (_txtr0), (_keyix), (_ant), \
- (_flags), (_rtsrate), (_rtsdura)))
+ (_flags), (_rtsrate), (_rtsdura), 0, 0, 0))
#define ATH_HAL_SETUPXTXDESC(_ah, _ds, \
_txr1, _txtr1, _txr2, _txtr2, _txr3, _txtr3) \
((*(_ah)->ah_setupXTxDesc)((_ah), (_ds), \
@@ -965,6 +1161,34 @@ extern const char *ath_hal_buildopts[];
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_CIPHER, _cipher, NULL) == HAL_OK)
#define ATH_HAL_TKIPSPLIT(_ah) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_TKIP_SPLIT, 0, NULL) == HAL_OK)
+#define ATH_HAL_HASRFSILENT(ah) \
+ (ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 0, NULL) == HAL_OK)
+#define ATH_HAL_GETRFKILL(_ah) \
+ (ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 1, NULL) == HAL_OK)
+#define ATH_HAL_SETRFKILL(_ah, _onoff) \
+ (ATH_HAL_SETCAPABILITY(_ah, HAL_CAP_RFSILENT, 1, _onoff, NULL))
+#define ATH_HAL_GETRFSILENT(_ah, _prfsilent) \
+ (ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 2, _prfsilent) == HAL_OK)
+#define ATH_HAL_SETRFSILENT(_ah, _rfsilent) \
+ (ATH_HAL_SETCAPABILITY(_ah, HAL_CAP_RFSILENT, 2, _rfsilent, NULL))
+
+#if HAL_ABI_VERSION < 0x05120700
+#define ATH_HAL_PROCESS_NOISEFLOOR(_ah)
+#define ATH_HAL_GETCHANNOISE(_ah, _c) (-96)
+#define HAL_CAP_TPC_ACK 100
+#define HAL_CAP_TPC_CTS 101
+#else
+#define ATH_HAL_GETCHANNOISE(_ah, _c) \
+ ((*(_ah)->ah_getChanNoise)((_ah), (_c)))
+#endif
+
+#if HAL_ABI_VERSION < 0x05122200
+#define HAL_TXQ_TXOKINT_ENABLE TXQ_FLAG_TXOKINT_ENABLE
+#define HAL_TXQ_TXERRINT_ENABLE TXQ_FLAG_TXERRINT_ENABLE
+#define HAL_TXQ_TXDESCINT_ENABLE TXQ_FLAG_TXDESCINT_ENABLE
+#define HAL_TXQ_TXEOLINT_ENABLE TXQ_FLAG_TXEOLINT_ENABLE
+#define HAL_TXQ_TXURNINT_ENABLE TXQ_FLAG_TXURNINT_ENABLE
+#endif
#ifdef __cplusplus
}
diff --git a/usr/src/uts/common/io/ath/ath_ieee80211.c b/usr/src/uts/common/io/ath/ath_ieee80211.c
deleted file mode 100644
index 29c0c25fd2..0000000000
--- a/usr/src/uts/common/io/ath/ath_ieee80211.c
+++ /dev/null
@@ -1,2899 +0,0 @@
-/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- * of any contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGES.
- *
- */
-
-/*
- * IEEE 802.11 generic handler
- *
- * This code is derived from NetBSD code; their copyright notice follows.
- */
-
-/*
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Atsushi Onoe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/signal.h>
-#include <sys/stream.h>
-#include <sys/termio.h>
-#include <sys/errno.h>
-#include <sys/file.h>
-#include <sys/cmn_err.h>
-#include <sys/stropts.h>
-#include <sys/strsubr.h>
-#include <sys/strtty.h>
-#include <sys/kbio.h>
-#include <sys/cred.h>
-#include <sys/stat.h>
-#include <sys/consdev.h>
-#include <sys/kmem.h>
-#include <sys/modctl.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-#include <sys/pci.h>
-#include <sys/errno.h>
-#include <sys/gld.h>
-#include <sys/dlpi.h>
-#include <sys/ethernet.h>
-#include <sys/byteorder.h>
-#include <sys/proc.h>
-#include <sys/note.h>
-#include <sys/strsun.h>
-#include <sys/list.h>
-#include <sys/byteorder.h>
-#include <inet/common.h>
-#include <inet/nd.h>
-#include <inet/mi.h>
-#include <inet/wifi_ioctl.h>
-#include "ath_ieee80211.h"
-#include "ath_impl.h"
-
-#define list_empty(a) ((a)->list_head.list_next == &(a)->list_head)
-
-static const char *ieee80211_mgt_subtype_name[] = {
- "assoc_req", "assoc_resp", "reassoc_req", "reassoc_resp",
- "probe_req", "probe_resp", "reserved#6", "reserved#7",
- "beacon", "atim", "disassoc", "auth",
- "deauth", "reserved#13", "reserved#14", "reserved#15"
-};
-
-extern pri_t minclsyspri;
-
-static void
-ieee80211_unref_node(struct ieee80211_node **in)
-{
- *in = NULL;
-}
-
-static uint8_t
-ieee80211_get_rssi(struct ieee80211_node *in)
-{
- /* no recent samples, use last known value */
- return (in->in_recv_hist[in->in_hist_cur].irh_rssi);
-}
-
-static void
-ieee80211_reset_recvhist(struct ieee80211_node *in)
-{
- int i;
-
- for (i = 0; i < IEEE80211_RECV_HIST_LEN; ++i) {
- in->in_recv_hist[i].irh_jiffies = IEEE80211_JIFFIES_NONE;
- in->in_recv_hist[i].irh_rssi = 0;
- in->in_recv_hist[i].irh_rstamp = 0;
- in->in_recv_hist[i].irh_rantenna = 0;
- }
- in->in_hist_cur = IEEE80211_RECV_HIST_LEN - 1;
-}
-
-
-static void
-ieee80211_add_recvhist(struct ieee80211_node *in, uint8_t rssi,
- uint32_t rstamp, uint8_t rantenna)
-{
- if (++in->in_hist_cur >= IEEE80211_RECV_HIST_LEN)
- in->in_hist_cur = 0;
- in->in_recv_hist[in->in_hist_cur].irh_rssi = rssi;
- in->in_recv_hist[in->in_hist_cur].irh_rstamp = rstamp;
- in->in_recv_hist[in->in_hist_cur].irh_rantenna = rantenna;
-}
-
-/*
- * Convert MHz frequency to IEEE channel number.
- */
-uint32_t
-ieee80211_mhz2ieee(uint32_t freq, uint32_t flags)
-{
- if (flags & IEEE80211_CHAN_2GHZ) { /* 2GHz band */
- if (freq == 2484)
- return (14);
- if (freq < 2484)
- return ((freq - 2407) / 5);
- else
- return (15 + ((freq - 2512) / 20));
- } else if (flags & IEEE80211_CHAN_5GHZ) { /* 5Ghz band */
- return ((freq - 5000) / 5);
- } else { /* either, guess */
- if (freq == 2484)
- return (14);
- if (freq < 2484)
- return ((freq - 2407) / 5);
- if (freq < 5000)
- return (15 + ((freq - 2512) / 20));
- return ((freq - 5000) / 5);
- }
-}
-
-/*
- * Convert channel to IEEE channel number.
- */
-uint32_t
-ieee80211_chan2ieee(ieee80211com_t *isc, struct ieee80211channel *ch)
-{
- if (isc->isc_channels <= ch &&
- ch <= &isc->isc_channels[IEEE80211_CHAN_MAX])
- return (ch - isc->isc_channels);
- else if (ch == IEEE80211_CHAN_ANYC)
- return (IEEE80211_CHAN_ANY);
- else {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_chan2ieee(): "
- "invalid channel freq %u flags %x\n",
- ch->ich_freq, ch->ich_flags));
- return (0);
- }
-}
-
-/*
- * Convert IEEE channel number to MHz frequency.
- */
-uint32_t
-ieee80211_ieee2mhz(uint32_t chan, uint32_t flags)
-{
- if (flags & IEEE80211_CHAN_2GHZ) { /* 2GHz band */
- if (chan == 14)
- return (2484);
- if (chan < 14)
- return (2407 + chan * 5);
- else
- return (2512 + ((chan-15) * 20));
- } else if (flags & IEEE80211_CHAN_5GHZ) { /* 5Ghz band */
- return (5000 + (chan * 5));
- } else { /* either, guess */
- if (chan == 14)
- return (2484);
- if (chan < 14) /* 0-13 */
- return (2407 + chan * 5);
- if (chan < 27) /* 15-26 */
- return (2512 + ((chan-15) * 20));
- return (5000 + (chan * 5));
- }
-}
-
-static void
-ieee80211_free_node(ieee80211com_t *isc, struct ieee80211_node *in)
-{
- int32_t i, done;
- struct ieee80211_node *in1;
-
- /* remove in from list of isc->isc_in_list */
- list_remove(&isc->isc_in_list, in);
-
- /* remove in from list of isc->isc_inhash_list */
- done = 0;
- for (i = 0; i < IEEE80211_NODE_HASHSIZE; i++) {
- in1 = list_head(&isc->isc_inhash_list[i]);
- while (in1 != NULL) {
- if (in1 == in) {
- list_remove(&isc->isc_inhash_list[i], in);
- done = 1;
- break;
- }
- in1 = list_next(&isc->isc_inhash_list[i], in1);
- }
- if (done)
- break;
- }
-
- if (list_empty(&isc->isc_in_list))
- isc->isc_inact_timeout = 0;
- if (isc->isc_node_free != NULL)
- (*isc->isc_node_free)(isc, in);
-}
-
-/*
- * This function is only running in software interrupt thread,
- * and it will probably call back to LLD by isc_mgmt_send() or isc_new_state(),
- * to avoid recursive mutex entry, we must make sure that
- * the callers have release all LLD mutexs before calling ieee80211_input().
- */
-void
-ieee80211_input(ieee80211com_t *isc, mblk_t *mp,
- int32_t rssi, uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_node *in;
- gld_mac_info_t *gld_p = isc->isc_dev;
- struct ieee80211_frame *wh;
- void (*rh)(ieee80211com_t *, mblk_t *, int32_t, uint32_t, uint32_t);
- uint8_t dir, subtype;
- uint8_t *bssid;
- uint16_t rxseq;
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- if ((wh->ifrm_fc[0] & IEEE80211_FC0_VERSION_MASK) !=
- IEEE80211_FC0_VERSION_0) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_input(): "
- "discard pkt with wrong version"));
- goto out;
- }
-
- dir = wh->ifrm_fc[1] & IEEE80211_FC1_DIR_MASK;
-
- mutex_enter(&isc->isc_genlock);
- if (isc->isc_state != IEEE80211_S_SCAN) {
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- in = isc->isc_bss;
- if (!IEEE80211_ADDR_EQ(wh->ifrm_addr2, in->in_bssid))
- goto out_with_mutex;
- break;
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- case IEEE80211_M_HOSTAP:
- if (dir == IEEE80211_FC1_DIR_NODS)
- bssid = wh->ifrm_addr3;
- else
- bssid = wh->ifrm_addr1;
- if (!IEEE80211_ADDR_EQ(bssid, isc->isc_bss->in_bssid) &&
- !IEEE80211_ADDR_EQ(bssid,
- gld_p->gldm_broadcast_addr)) {
- /* not interested in */
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_input(): other bss %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr3)));
- goto out_with_mutex;
- }
- in = ieee80211_find_node(isc, wh->ifrm_addr2);
- if (in == NULL) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_input(): unknown src %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- /*
- * NB: Node allocation is handled in the
- * management handling routines. Just fake
- * up a reference to the hosts's node to do
- * the stuff below.
- */
- in = isc->isc_bss;
- }
- break;
- default:
- /* catch bad values */
- break;
- }
- ieee80211_add_recvhist(in, rssi, rstamp, rantenna);
- rxseq = in->in_rxseq;
- in->in_rxseq = LE_16(*(uint16_t *)wh->ifrm_seq)
- >> IEEE80211_SEQ_SEQ_SHIFT;
- /* fragment */
- if ((wh->ifrm_fc[1] & IEEE80211_FC1_RETRY) &&
- rxseq == in->in_rxseq) {
- /* duplicate, silently discarded */
- goto out_with_mutex;
- }
- in->in_inact = 0;
- }
-
- switch (wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) {
- case IEEE80211_FC0_TYPE_DATA:
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- if (dir != IEEE80211_FC1_DIR_FROMDS) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ",
- "ieee80211_input(): discard frame "
- "with invalid direction %x\n", dir));
- goto out_with_mutex;
- }
- if (IEEE80211_IS_MULTICAST(wh->ifrm_addr1) &&
- IEEE80211_ADDR_EQ(wh->ifrm_addr3,
- gld_p->gldm_vendor_addr)) {
- /*
- * In IEEE802.11 network, multicast packet
- * sent from me is broadcasted from AP.
- * It should be silently discarded for
- * SIMPLEX interface.
- */
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_input(): "
- "discard multicast echo\n"));
- goto out_with_mutex;
- }
- break;
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- if (dir != IEEE80211_FC1_DIR_NODS)
- goto out_with_mutex;
- break;
- case IEEE80211_M_HOSTAP:
- /* need more work to support HOSTAP */
- break;
- }
-
- mutex_exit(&isc->isc_genlock);
- /* copy to listener after decrypt */
- mp = ieee80211_decap(mp);
- if (mp == NULL) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ",
- "ieee80211_input(): decapsulation failed\n"));
- goto out;
- }
- gld_recv(gld_p, mp);
- return;
-
- case IEEE80211_FC0_TYPE_MGT:
- if (dir != IEEE80211_FC1_DIR_NODS)
- goto out_with_mutex;
- if (isc->isc_opmode == IEEE80211_M_AHDEMO)
- goto out_with_mutex;
- subtype = wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
-
- /* drop uninteresting frames */
- if (isc->isc_state == IEEE80211_S_SCAN) {
- if (subtype != IEEE80211_FC0_SUBTYPE_BEACON &&
- subtype != IEEE80211_FC0_SUBTYPE_PROBE_RESP)
- goto out_with_mutex;
- } else {
- if (isc->isc_opmode != IEEE80211_M_IBSS &&
- subtype == IEEE80211_FC0_SUBTYPE_BEACON)
- goto out_with_mutex;
- }
-
- rh = isc->isc_recv_mgmt[subtype >> IEEE80211_FC0_SUBTYPE_SHIFT];
- if (rh != NULL)
- (*rh)(isc, mp, rssi, rstamp, rantenna);
- goto out_with_mutex;
-
- case IEEE80211_FC0_TYPE_CTL:
- default:
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_input(): "
- "bad type %x\n", wh->ifrm_fc[0]));
- break;
- }
-out_with_mutex:
- mutex_exit(&isc->isc_genlock);
-out:
- if (mp != NULL)
- freemsg(mp); /* free the buffer alloced in ath_rx_handler */
-}
-
-static void
-ieee80211_free_allnodes(ieee80211com_t *isc)
-{
- struct ieee80211_node *in;
-
- in = list_head(&isc->isc_in_list);
- while (in != NULL) {
- ieee80211_free_node(isc, in);
- in = list_head(&isc->isc_in_list);
- }
-}
-
-/*
- * Begin an active scan.
- */
-static void
-ieee80211_begin_scan(ieee80211com_t *isc, struct ieee80211_node *in)
-{
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_begin_scan(): begin %s scan\n",
- isc->isc_opmode != IEEE80211_M_HOSTAP ? "active" : "passive"));
-
- /*
- * Initialize the active channel set based on the set
- * of available channels and the current PHY mode.
- */
- bcopy(isc->isc_chan_active, isc->isc_chan_scan,
- sizeof (isc->isc_chan_active));
-
- /*
- * Flush any previously seen AP's. Note that this
- * assumes we don't act as both an AP and a station,
- * otherwise we'll potentially flush state of stations
- * associated with us.
- */
- ieee80211_free_allnodes(isc);
-
- clrbit(isc->isc_chan_scan, ieee80211_chan2ieee(isc, in->in_chan));
- if (isc->isc_opmode != IEEE80211_M_HOSTAP) {
- isc->isc_flags |= IEEE80211_F_ASCAN;
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_PROBE_REQ, 0);
- }
-}
-
-static void
-ieee80211_create_ibss(ieee80211com_t *isc, struct ieee80211channel *chan)
-{
- struct ieee80211_node *in;
-
- in = isc->isc_bss;
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_create_ibss(): creating ibss\n"));
- isc->isc_flags |= IEEE80211_F_SIBSS;
- in->in_chan = chan;
- in->in_rates = isc->isc_sup_rates[
- ieee80211_chan2mode(isc, in->in_chan)];
- IEEE80211_ADDR_COPY(in->in_macaddr, isc->isc_macaddr);
- IEEE80211_ADDR_COPY(in->in_bssid, isc->isc_macaddr);
-
- if (isc->isc_opmode == IEEE80211_M_IBSS)
- in->in_bssid[0] |= 0x02; /* local bit for IBSS */
- in->in_esslen = isc->isc_des_esslen;
- bcopy(isc->isc_des_essid, in->in_essid, in->in_esslen);
- ieee80211_reset_recvhist(in);
- bzero(in->in_tstamp, sizeof (in->in_tstamp));
- in->in_intval = isc->isc_lintval;
- in->in_capinfo = IEEE80211_CAPINFO_IBSS;
- if (isc->isc_flags & IEEE80211_F_WEPON)
- in->in_capinfo |= IEEE80211_CAPINFO_PRIVACY;
- if (isc->isc_phytype == IEEE80211_T_FH) {
- in->in_fhdwell = 200;
- in->in_fhindex = 1;
- }
- (void) _ieee80211_new_state(isc, IEEE80211_S_RUN, -1);
-}
-
-
-/*
- * The difference between _ieee80211_new_state() and ieee80211_new_state()
- * is the former asserts isc_genlock is already held.
- * _ieee80211_new_state() is called from Multi-func thread and GLD thread,
- * because ic_genlock is already owned at its entry in those 2 types of thread.
- * ieee80211_new_state() is just for software interrupt thread in LLD.
- *
- * Because of the reason to avoid recursive mutex entry, the caller can't hold
- * any other LLD mutexs before calling ieee80211_new_state().
- */
-int
-_ieee80211_new_state(ieee80211com_t *isc, enum ieee80211_state nstate,
- int32_t mgt)
-{
- gld_mac_info_t *gld_p = isc->isc_dev;
- struct ieee80211_node *in;
- int error, ostate;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- ostate = isc->isc_state;
- if (isc->isc_new_state) {
- error = (*isc->isc_new_state)(isc, nstate);
- if (error == EINPROGRESS)
- return (0);
- if (error != 0)
- return (error);
- }
-
- isc->isc_state = nstate;
- in = isc->isc_bss;
-
- /* state transition */
- switch (nstate) {
- case IEEE80211_S_INIT:
- switch (ostate) {
- case IEEE80211_S_INIT:
- break;
- case IEEE80211_S_RUN:
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_DISASSOC,
- IEEE80211_REASON_ASSOC_LEAVE);
- break;
- default:
- break;
- }
- case IEEE80211_S_ASSOC:
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_DEAUTH,
- IEEE80211_REASON_AUTH_LEAVE);
- break;
- default:
- break;
- }
- case IEEE80211_S_AUTH:
- case IEEE80211_S_SCAN:
- break;
- }
- isc->isc_mgt_timeout = 0;
- isc->isc_inact_timeout = 0;
- break;
- case IEEE80211_S_SCAN:
- isc->isc_flags &= ~IEEE80211_F_SIBSS;
- /* initialize bss for probe request */
- IEEE80211_ADDR_COPY(in->in_macaddr, gld_p->gldm_broadcast_addr);
- IEEE80211_ADDR_COPY(in->in_bssid, gld_p->gldm_broadcast_addr);
- in->in_rates = isc->isc_sup_rates[
- ieee80211_chan2mode(isc, in->in_chan)];
- in->in_associd = 0;
- ieee80211_reset_recvhist(in);
- switch (ostate) {
- case IEEE80211_S_INIT:
- if ((isc->isc_opmode == IEEE80211_M_HOSTAP ||
- isc->isc_opmode == IEEE80211_M_IBSS) &&
- isc->isc_des_chan != IEEE80211_CHAN_ANYC) {
- /*
- * AP operation and we already have a channel;
- * bypass the scan and startup immediately.
- * Same applies to ad-hoc mode.
- */
- ieee80211_create_ibss(isc, isc->isc_des_chan);
- } else {
- ieee80211_begin_scan(isc, in);
- }
- break;
- case IEEE80211_S_SCAN:
- /* scan next */
- if (isc->isc_flags & IEEE80211_F_ASCAN) {
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_PROBE_REQ, 0);
- }
- break;
- case IEEE80211_S_RUN:
- /* beacon miss */
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): no recent beacons"
- " from %s; rescanning\n",
- ieee80211_ether_sprintf(isc->isc_bss->in_bssid)));
- ieee80211_free_allnodes(isc);
- break;
- case IEEE80211_S_AUTH:
- case IEEE80211_S_ASSOC:
- /* timeout, restart scan */
- in = ieee80211_find_node(isc, isc->isc_bss->in_macaddr);
- if (in != NULL) {
- in->in_fails++;
- }
- ieee80211_begin_scan(isc, isc->isc_bss);
- break;
- default:
- break;
- }
- break;
- case IEEE80211_S_AUTH:
- switch (ostate) {
- case IEEE80211_S_INIT:
- ATH_DEBUG((ATH_DBG_80211, "ath(): "
- "_ieee80211_new_state(): invalid transition\n"));
- break;
- case IEEE80211_S_SCAN:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_AUTH, 1);
- break;
- case IEEE80211_S_AUTH:
- case IEEE80211_S_ASSOC:
- switch (mgt) {
- case IEEE80211_FC0_SUBTYPE_AUTH:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_AUTH, 2);
- break;
- case IEEE80211_FC0_SUBTYPE_DEAUTH:
- /* ignore and retry scan on timeout */
- break;
- }
- break;
- case IEEE80211_S_RUN:
- switch (mgt) {
- case IEEE80211_FC0_SUBTYPE_AUTH:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_AUTH, 2);
- isc->isc_state = ostate; /* stay RUN */
- break;
- case IEEE80211_FC0_SUBTYPE_DEAUTH:
- /* try to reauth */
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_AUTH, 1);
- break;
- }
- break;
- }
- break;
- case IEEE80211_S_ASSOC:
- switch (ostate) {
- case IEEE80211_S_INIT:
- case IEEE80211_S_SCAN:
- case IEEE80211_S_ASSOC:
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): invalid transition\n"));
- break;
- case IEEE80211_S_AUTH:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 0);
- break;
- case IEEE80211_S_RUN:
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 1);
- break;
- }
- break;
- case IEEE80211_S_RUN:
- switch (ostate) {
- case IEEE80211_S_INIT:
- case IEEE80211_S_AUTH:
- case IEEE80211_S_RUN:
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): invalid transition\n"));
- break;
- case IEEE80211_S_SCAN: /* adhoc/hostap mode */
- case IEEE80211_S_ASSOC: /* infra mode */
- if (isc->isc_opmode == IEEE80211_M_STA)
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): "
- "associated with %s\n",
- ieee80211_ether_sprintf(in->in_bssid)));
- else
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): "
- "asynchronized with %s\n",
- ieee80211_ether_sprintf(in->in_bssid)));
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "_ieee80211_new_state(): "
- "essid %s, channel %d, start %uMb\n",
- ieee80211_essid_sprintf(in->in_essid,
- in->in_esslen),
- ieee80211_chan2ieee(isc, in->in_chan),
- IEEE80211_RATE2MBS(in->in_rates.ir_rates[
- in->in_txrate])));
- isc->isc_mgt_timeout = 0;
- break;
- }
- break;
- }
- return (0);
-}
-
-int
-ieee80211_new_state(ieee80211com_t *isc, enum ieee80211_state nstate,
- int32_t mgt)
-{
- int result;
-
- mutex_enter(&isc->isc_genlock);
- result = _ieee80211_new_state(isc, nstate, mgt);
- mutex_exit(&isc->isc_genlock);
-
- return (result);
-}
-
-static void
-ieee80211_timeout_nodes(ieee80211com_t *isc)
-{
- struct ieee80211_node *in, *nextbs;
-
- for (in = list_head(&isc->isc_in_list); in != NULL; ) {
- if (++in->in_inact <= IEEE80211_INACT_MAX) {
- in = list_next(&isc->isc_in_list, in);
- continue;
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "station %s timed out due to inactivity"
- " (%u secs)\n", ieee80211_ether_sprintf(in->in_macaddr),
- in->in_inact));
- nextbs = list_next(&isc->isc_in_list, in);
- IEEE80211_SEND_MGMT(isc, in,
- IEEE80211_FC0_SUBTYPE_DEAUTH,
- IEEE80211_REASON_AUTH_EXPIRE);
- ieee80211_free_node(isc, in);
- in = nextbs;
- }
- if (!list_empty(&isc->isc_in_list))
- isc->isc_inact_timeout = IEEE80211_INACT_WAIT;
-}
-
-int
-ieee80211_mgmt_output(ieee80211com_t *isc, struct ieee80211_node *in,
- mblk_t *mp, int type)
-{
- struct ieee80211_frame *wh;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- ASSERT(in != NULL);
-
- in->in_inact = 0;
- mp->b_rptr -= sizeof (struct ieee80211_frame);
- wh = (struct ieee80211_frame *)mp->b_rptr;
- wh->ifrm_fc[0] = IEEE80211_FC0_VERSION_0 |
- IEEE80211_FC0_TYPE_MGT | type;
- wh->ifrm_fc[1] = IEEE80211_FC1_DIR_NODS;
- *(uint16_t *)wh->ifrm_dur = 0;
- *(uint16_t *)wh->ifrm_seq =
- LE_16(in->in_txseq << IEEE80211_SEQ_SEQ_SHIFT);
- in->in_txseq++;
- IEEE80211_ADDR_COPY(wh->ifrm_addr1, in->in_macaddr);
- IEEE80211_ADDR_COPY(wh->ifrm_addr2, isc->isc_macaddr);
- IEEE80211_ADDR_COPY(wh->ifrm_addr3, in->in_bssid);
-
- (void) (*isc->isc_mgmt_send)(isc, mp);
- return (0);
-}
-
-mblk_t *
-ieee80211_fill_header(ieee80211com_t *isc, mblk_t *mp_gld,
- int32_t wep_txkey, struct ieee80211_node *in)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_llc *llc;
- struct ether_header *eh;
- mblk_t *mp_header;
- uint32_t iv;
- uint8_t *ivp;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- /*
- * Alloc a new mblk struct for the whole IEEE80211 header.
- */
- if ((mp_header = allocb(HEADERSPACE, BPRI_MED)) == NULL) {
- ath_problem("ath: ieee80211_encap(): can't alloc mblk!\n");
- return (NULL);
- }
- mp_header->b_wptr = mp_header->b_rptr +
- sizeof (struct ieee80211_frame);
-
- eh = (struct ether_header *)mp_gld->b_rptr;
-
- /*
- * Fill 802.11 field.
- */
- wh = (struct ieee80211_frame *)mp_header->b_rptr;
- wh->ifrm_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_DATA;
- *(uint16_t *)wh->ifrm_dur = 0;
- *(uint16_t *)wh->ifrm_seq =
- LE_16(in->in_txseq << IEEE80211_SEQ_SEQ_SHIFT);
- in->in_txseq++;
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- wh->ifrm_fc[1] = IEEE80211_FC1_DIR_TODS;
- IEEE80211_ADDR_COPY(wh->ifrm_addr1, in->in_bssid);
- IEEE80211_ADDR_COPY(wh->ifrm_addr2,
- eh->ether_shost.ether_addr_octet);
- IEEE80211_ADDR_COPY(wh->ifrm_addr3,
- eh->ether_dhost.ether_addr_octet);
- break;
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- wh->ifrm_fc[1] = IEEE80211_FC1_DIR_NODS;
- IEEE80211_ADDR_COPY(wh->ifrm_addr1,
- eh->ether_dhost.ether_addr_octet);
- IEEE80211_ADDR_COPY(wh->ifrm_addr2,
- eh->ether_shost.ether_addr_octet);
- IEEE80211_ADDR_COPY(wh->ifrm_addr3, in->in_bssid);
- break;
- case IEEE80211_M_HOSTAP:
- wh->ifrm_fc[1] = IEEE80211_FC1_DIR_FROMDS;
- IEEE80211_ADDR_COPY(wh->ifrm_addr1,
- eh->ether_dhost.ether_addr_octet);
- IEEE80211_ADDR_COPY(wh->ifrm_addr2, in->in_bssid);
- IEEE80211_ADDR_COPY(wh->ifrm_addr3,
- eh->ether_shost.ether_addr_octet);
- break;
- }
-
- if (isc->isc_flags & IEEE80211_F_WEPON) {
- wh->ifrm_fc[1] |= IEEE80211_FC1_WEP;
- ivp = mp_header->b_rptr + sizeof (struct ieee80211_frame);
- /*
- * IV must not duplicate during the lifetime of the key.
- * But no mechanism to renew keys is defined in IEEE 802.11
- * WEP. And IV may be duplicated between other stations
- * because of the session key itself is shared.
- * So we use pseudo random IV for now, though it is not the
- * right way.
- */
- iv = isc->isc_iv;
- /*
- * Skip 'bad' IVs from Fluhrer/Mantin/Shamir:
- * (B, 255, N) with 3 <= B < 8
- */
- if ((iv & 0xff00) == 0xff00) {
- int B = (iv & 0xff0000) >> 16;
- if (3 <= B && B < 16)
- iv = (B+1) << 16;
- }
- isc->isc_iv = iv + 1;
-
-#ifdef ATH_HOST_BIG_ENDIAN
- ivp[0] = iv >> 0;
- ivp[1] = iv >> 8;
- ivp[2] = iv >> 16;
-#else
- ivp[2] = iv >> 0;
- ivp[1] = iv >> 8;
- ivp[0] = iv >> 16;
-#endif /* ATH_HOST_BIG_ENDIAN */
-
- /* Key ID and pad */
- ivp[IEEE80211_WEP_IVLEN] = wep_txkey << 6;
- /*
- * The ICV length must be included into hdrlen and pktlen.
- */
- mp_header->b_wptr +=
- IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN;
- }
-
- /*
- * CRC are added by H/W, not encaped by driver,
- * but we must count it in pkt length.
- */
-
- /*
- * fill LLC and SNAP fields.
- */
- llc = (struct ieee80211_llc *)mp_header->b_wptr;
- llc->illc_dsap = LLC_DSAP;
- llc->illc_ssap = LLC_SSAP;
- llc->illc_control = LLC_CONTROL;
- llc->illc_oc[0] = SNAP_OC0;
- llc->illc_oc[1] = SNAP_OC1;
- llc->illc_oc[2] = SNAP_OC2;
- llc->illc_ether_type = eh->ether_type;
- mp_header->b_wptr += sizeof (struct ieee80211_llc);
-
- return (mp_header);
-}
-
-mblk_t *
-ieee80211_decap(mblk_t *mp)
-{
- struct ether_header *eh;
- struct ieee80211_frame wh;
- struct ieee80211_llc *llc;
-
- if ((mp->b_wptr - mp->b_rptr) < (sizeof (wh) + sizeof (*llc))) {
- freemsg(mp);
- return (NULL);
- }
-
- bcopy(mp->b_rptr, &wh, sizeof (struct ieee80211_frame));
- mp->b_rptr += sizeof (struct ieee80211_frame);
- llc = (struct ieee80211_llc *)mp->b_rptr;
-
- if (llc->illc_dsap == LLC_DSAP && llc->illc_ssap == LLC_SSAP &&
- llc->illc_control == LLC_CONTROL && llc->illc_oc[0] == SNAP_OC0 &&
- llc->illc_oc[1] == SNAP_OC1 && llc->illc_oc[2] == SNAP_OC2) {
- mp->b_rptr += sizeof (struct ieee80211_llc);
- llc = NULL;
- }
- /*
- * we are sure that the size of ieee80211_frame plus llc is
- * larger than the size of ether_header,
- * so there has enough space to encap ether_header in this mblk.
- */
- mp->b_rptr -= sizeof (struct ether_header);
- eh = (struct ether_header *)mp->b_rptr;
- switch (wh.ifrm_fc[1] & IEEE80211_FC1_DIR_MASK) {
- case IEEE80211_FC1_DIR_NODS:
- IEEE80211_ADDR_COPY(eh->ether_dhost.ether_addr_octet,
- wh.ifrm_addr1);
- IEEE80211_ADDR_COPY(eh->ether_shost.ether_addr_octet,
- wh.ifrm_addr2);
- break;
- case IEEE80211_FC1_DIR_TODS:
- IEEE80211_ADDR_COPY(eh->ether_dhost.ether_addr_octet,
- wh.ifrm_addr3);
- IEEE80211_ADDR_COPY(eh->ether_shost.ether_addr_octet,
- wh.ifrm_addr2);
- break;
- case IEEE80211_FC1_DIR_FROMDS:
- IEEE80211_ADDR_COPY(eh->ether_dhost.ether_addr_octet,
- wh.ifrm_addr1);
- IEEE80211_ADDR_COPY(eh->ether_shost.ether_addr_octet,
- wh.ifrm_addr3);
- break;
- case IEEE80211_FC1_DIR_DSTODS:
- /* not yet supported */
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_decap(): DS to DS\n"));
- freemsg(mp);
- return (NULL);
- }
-
- if (llc != NULL)
- eh->ether_type = htons(mp->b_wptr - mp->b_rptr - sizeof (*eh));
-
- return (mp);
-}
-
-/*
- * This function doesn't need mutex protection.
- */
-void
-ieee80211_dump_pkt(uint8_t *buf, int32_t len, int32_t rate, int32_t rssi)
-{
- struct ieee80211_frame *wh;
- int32_t i;
- int8_t buf1[100], buf2[25];
-
- bzero(buf1, sizeof (buf1));
- bzero(buf2, sizeof (buf2));
- wh = (struct ieee80211_frame *)buf;
- switch (wh->ifrm_fc[1] & IEEE80211_FC1_DIR_MASK) {
- case IEEE80211_FC1_DIR_NODS:
- (void) sprintf(buf2, "NODS %s",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s",
- ieee80211_ether_sprintf(wh->ifrm_addr1));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "(%s)",
- ieee80211_ether_sprintf(wh->ifrm_addr3));
- (void) strcat(buf1, buf2);
- break;
- case IEEE80211_FC1_DIR_TODS:
- (void) sprintf(buf2, "TODS %s",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s",
- ieee80211_ether_sprintf(wh->ifrm_addr3));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "(%s)",
- ieee80211_ether_sprintf(wh->ifrm_addr1));
- (void) strcat(buf1, buf2);
- break;
- case IEEE80211_FC1_DIR_FROMDS:
- (void) sprintf(buf2, "FRDS %s",
- ieee80211_ether_sprintf(wh->ifrm_addr3));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s",
- ieee80211_ether_sprintf(wh->ifrm_addr1));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "(%s)",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- (void) strcat(buf1, buf2);
- break;
- case IEEE80211_FC1_DIR_DSTODS:
- (void) sprintf(buf2, "DSDS %s",
- ieee80211_ether_sprintf((uint8_t *)&wh[1]));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s ",
- ieee80211_ether_sprintf(wh->ifrm_addr3));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "%s",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- (void) strcat(buf1, buf2);
- (void) sprintf(buf2, "->%s",
- ieee80211_ether_sprintf(wh->ifrm_addr1));
- (void) strcat(buf1, buf2);
- break;
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_dump_pkt(): %s", buf1));
- bzero(buf1, sizeof (buf1));
-
- switch (wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) {
- case IEEE80211_FC0_TYPE_DATA:
- (void) sprintf(buf2, "data");
- break;
- case IEEE80211_FC0_TYPE_MGT:
- (void) sprintf(buf2, "%s",
- ieee80211_mgt_subtype_name[
- (wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK)
- >> IEEE80211_FC0_SUBTYPE_SHIFT]);
- break;
- default:
- (void) sprintf(buf2, "type#%d",
- wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK);
- break;
- }
- (void) strcat(buf1, buf2);
- if (wh->ifrm_fc[1] & IEEE80211_FC1_WEP) {
- (void) sprintf(buf2, " WEP");
- (void) strcat(buf1, buf2);
- }
- if (rate >= 0) {
- (void) sprintf(buf2, " %dM", rate / 2);
- (void) strcat(buf1, buf2);
- }
- if (rssi >= 0) {
- (void) sprintf(buf2, " +%d", rssi);
- (void) strcat(buf1, buf2);
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_dump_pkt(): %s", buf1));
- bzero(buf1, sizeof (buf1));
-
- if (len > 0) {
- for (i = 0; i < (len > 40 ? 40 : len); i++) {
- if ((i & 0x03) == 0)
- (void) strcat(buf1, " ");
- (void) sprintf(buf2, "%02x", buf[i]);
- (void) strcat(buf1, buf2);
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_dump_pkt(): %s",
- buf1));
- }
-}
-
-/*
- * Mark the basic rates for the 11g rate table based on the
- * operating mode. For real 11g we mark all the 11b rates
- * and 6, 12, and 24 OFDM. For 11b compatibility we mark only
- * 11b rates. There's also a pseudo 11a-mode used to mark only
- * the basic OFDM rates.
- */
-static void
-ieee80211_set11gbasicrates(struct ieee80211_rateset *rs,
- enum ieee80211_phymode mode)
-{
- static const struct ieee80211_rateset basic[] = {
- { 3, { 12, 24, 48 } }, /* IEEE80211_MODE_11A */
- { 4, { 2, 4, 11, 22 } }, /* IEEE80211_MODE_11B */
- { 7, { 2, 4, 11, 22, 12, 24, 48 } }, /* IEEE80211_MODE_11G */
- { 0 }, /* IEEE80211_MODE_TURBO */
- };
- int32_t i, j;
-
- for (i = 0; i < rs->ir_nrates; i++) {
- rs->ir_rates[i] &= IEEE80211_RATE_VAL;
- for (j = 0; j < basic[mode].ir_nrates; j++)
- if (basic[mode].ir_rates[j] == rs->ir_rates[i]) {
- rs->ir_rates[i] |= IEEE80211_RATE_BASIC;
- break;
- }
- }
-}
-
-/*
- * Set the current phy mode and recalculate the active channel
- * set based on the available channels for this mode. Also
- * select a new default/current channel if the current one is
- * inappropriate for this mode.
- */
-static int
-ieee80211_setmode(ieee80211com_t *isc, enum ieee80211_phymode mode)
-{
- static const uint32_t chanflags[] = {
- 0, /* IEEE80211_MODE_AUTO */
- IEEE80211_CHAN_A, /* IEEE80211_MODE_11A */
- IEEE80211_CHAN_B, /* IEEE80211_MODE_11B */
- IEEE80211_CHAN_PUREG, /* IEEE80211_MODE_11G */
- IEEE80211_CHAN_T, /* IEEE80211_MODE_TURBO */
- };
- struct ieee80211channel *ch;
- uint32_t modeflags;
- int32_t i;
-
- /* validate new mode */
- if ((isc->isc_modecaps & (1 << mode)) == 0) {
- ath_problem("ath: ieee80211_setmode(): mode %u not supported"
- " (caps 0x%x)\n", mode, isc->isc_modecaps);
- return (EINVAL);
- }
-
- /*
- * Verify at least one channel is present in the available
- * channel list before committing to the new mode.
- */
- ASSERT(mode < ATH_N(chanflags));
-
- modeflags = chanflags[mode];
- /* isc_channels size is IEEE80211_CHAN_MAX + 1, so no problem */
- for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
- ch = &isc->isc_channels[i];
- if (mode == IEEE80211_MODE_AUTO) {
- /* ignore turbo channels for autoselect */
- if ((ch->ich_flags & ~IEEE80211_CHAN_TURBO) != 0)
- break;
- } else {
- if ((ch->ich_flags & modeflags) == modeflags)
- break;
- }
- }
- if (i > IEEE80211_CHAN_MAX) {
- ath_problem("ath: ieee80211_setmode(): "
- "no channel found for mode %u\n", mode);
- return (EINVAL);
- }
-
- /*
- * Calculate the active channel set.
- */
- bzero(isc->isc_chan_active, sizeof (isc->isc_chan_active));
- for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
- ch = &isc->isc_channels[i];
- if (mode == IEEE80211_MODE_AUTO) {
- /* take anything but pure turbo channels */
- if ((ch->ich_flags & ~IEEE80211_CHAN_TURBO) != 0)
- setbit(isc->isc_chan_active, i);
- } else {
- if ((ch->ich_flags & modeflags) == modeflags)
- setbit(isc->isc_chan_active, i);
- }
- }
- /*
- * If no current/default channel is setup or the current
- * channel is wrong for the mode then pick the first
- * available channel from the active list. This is likely
- * not the right one.
- */
- if (isc->isc_ibss_chan == NULL ||
- isclr(isc->isc_chan_active,
- ieee80211_chan2ieee(isc, isc->isc_ibss_chan))) {
- for (i = 0; i <= IEEE80211_CHAN_MAX; i++)
- if (isset(isc->isc_chan_active, i)) {
- isc->isc_ibss_chan = &isc->isc_channels[i];
- break;
- }
- }
-
- /*
- * Set/reset state flags that influence beacon contents, etc.
- */
-
- if (isc->isc_caps & IEEE80211_C_SHPREAMBLE)
- isc->isc_flags |= IEEE80211_F_SHPREAMBLE;
- if (mode == IEEE80211_MODE_11G) {
- if (isc->isc_caps & IEEE80211_C_SHSLOT)
- isc->isc_flags |= IEEE80211_F_SHSLOT;
- ieee80211_set11gbasicrates(&isc->isc_sup_rates[mode],
- IEEE80211_MODE_11G);
- } else {
- isc->isc_flags &= ~(IEEE80211_F_SHSLOT);
- }
-
- /*
- * Setup an initial rate set according to the
- * current/default channel. This will be changed
- * when scanning but must exist now so drivers have
- * consistent state of ic_ibss_chan.
- */
- if (isc->isc_bss)
- isc->isc_bss->in_rates = isc->isc_sup_rates[mode];
- isc->isc_curmode = mode;
-
- return (0);
-}
-
-/*
- * If (its return value & IEEE80211_RATE_BASIC != 0),
- * the rate negotiation or fix rate is failed.
- */
-static int
-ieee80211_fix_rate(ieee80211com_t *isc,
- struct ieee80211_node *in, int32_t flags)
-{
- int32_t i, j, ignore, error;
- int32_t okrate, badrate;
- struct ieee80211_rateset *srs, *nrs;
- uint8_t r;
-
- error = 0;
- okrate = badrate = 0;
- srs = &isc->isc_sup_rates[ieee80211_chan2mode(isc, in->in_chan)];
- nrs = &in->in_rates;
- for (i = 0; i < in->in_rates.ir_nrates; ) {
- ignore = 0;
- if (flags & IEEE80211_F_DOSORT) {
- /*
- * Sort rates.
- */
- for (j = i + 1; j < nrs->ir_nrates; j++) {
- if (IEEE80211_RV(nrs->ir_rates[i]) >
- IEEE80211_RV(nrs->ir_rates[j])) {
- r = nrs->ir_rates[i];
- nrs->ir_rates[i] = nrs->ir_rates[j];
- nrs->ir_rates[j] = r;
- }
- }
- }
- r = nrs->ir_rates[i] & IEEE80211_RATE_VAL;
- badrate = r;
- if (flags & IEEE80211_F_DOFRATE) {
- /*
- * Apply fixed rate constraint. Note that we do
- * not apply the constraint to basic rates as
- * otherwise we may not be able to associate if
- * the rate set we submit to the AP is invalid
- * (e.g. fix rate at 36Mb/s which is not a basic
- * rate for 11a operation).
- */
- if ((nrs->ir_rates[i] & IEEE80211_RATE_BASIC) == 0 &&
- isc->isc_fixed_rate >= 0 &&
- r != IEEE80211_RV(srs->ir_rates
- [isc->isc_fixed_rate]))
- ignore++;
- }
- if (flags & IEEE80211_F_DONEGO) {
- /*
- * Check against supported rates.
- */
- for (j = 0; j < srs->ir_nrates; j++) {
- if (r == IEEE80211_RV(srs->ir_rates[j]))
- break;
- }
- if (j == srs->ir_nrates) {
- if (nrs->ir_rates[i] & IEEE80211_RATE_BASIC)
- error++;
- ignore++;
- }
- }
- if (flags & IEEE80211_F_DODEL) {
- /*
- * Delete unacceptable rates.
- */
- if (ignore) {
- nrs->ir_nrates--;
- for (j = i; j < nrs->ir_nrates; j++)
- nrs->ir_rates[j] = nrs->ir_rates[j + 1];
- nrs->ir_rates[j] = 0;
- continue;
- }
- }
- if (!ignore)
- okrate = nrs->ir_rates[i];
- i++;
- }
- if (okrate == 0 || error != 0)
- return (badrate | IEEE80211_RATE_BASIC);
- else
- return (IEEE80211_RV(okrate));
-}
-
-/*
- * Complete a scan of potential channels.
- */
-static void
-ieee80211_end_scan(ieee80211com_t *isc)
-{
- struct ieee80211_node *in, *selbs;
- uint8_t rate;
- int32_t fail;
-
- ASSERT(isc->isc_state == IEEE80211_S_SCAN);
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- isc->isc_flags &= ~IEEE80211_F_ASCAN;
- cv_broadcast(&isc->isc_scan_cv);
- in = list_head(&isc->isc_in_list);
-
- if (in == NULL) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_end_scan(): "
- "no scan candidate\n"));
-notfound:
- if (isc->isc_opmode == IEEE80211_M_IBSS &&
- (isc->isc_flags & IEEE80211_F_IBSSON) &&
- isc->isc_des_esslen != 0) {
- ieee80211_create_ibss(isc, isc->isc_ibss_chan);
- return;
- }
- mutex_exit(&isc->isc_genlock);
- delay(drv_usectohz(200000));
- mutex_enter(&isc->isc_genlock);
- ieee80211_begin_scan(isc, isc->isc_bss);
- return;
- }
-
- selbs = NULL;
- for (; in != NULL; in = list_next(&isc->isc_in_list, in)) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_end_scan(): isc_bss->in_bssid=%s",
- ieee80211_ether_sprintf(in->in_bssid)));
- if (in->in_fails) {
- /*
- * The configuration of the access points may change
- * during my scan. So delete the entry for the AP
- * and retry to associate if there is another beacon.
- */
- if (in->in_fails++ > 2)
- ieee80211_free_node(isc, in);
- continue;
- }
- fail = 0;
- if (in->in_chan == NULL || in->in_chan->ich_flags == 0)
- fail |= 0x01;
- if (isc->isc_des_chan !=
- (struct ieee80211channel *)IEEE80211_CHAN_ANY &&
- in->in_chan != isc->isc_des_chan)
- fail |= 0x01;
- if (isc->isc_opmode == IEEE80211_M_IBSS) {
- if ((in->in_capinfo & IEEE80211_CAPINFO_IBSS) == 0)
- fail |= 0x02;
- } else {
- if ((in->in_capinfo & IEEE80211_CAPINFO_ESS) == 0)
- fail |= 0x02;
- }
-
- if (isc->isc_flags & IEEE80211_F_WEPON) {
- if ((in->in_capinfo & IEEE80211_CAPINFO_PRIVACY) == 0)
- fail |= 0x04;
- } else {
- if (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY)
- fail |= 0x04;
- }
-
- rate = ieee80211_fix_rate(isc, in, IEEE80211_F_DONEGO);
- if (rate & IEEE80211_RATE_BASIC)
- fail |= 0x08;
- if (isc->isc_des_esslen != 0 &&
- (in->in_esslen != isc->isc_des_esslen ||
- bcmp(in->in_essid, isc->isc_des_essid,
- isc->isc_des_esslen) != 0))
- fail |= 0x10;
- if ((isc->isc_flags & IEEE80211_F_DESBSSID) &&
- !IEEE80211_ADDR_EQ(isc->isc_des_bssid, in->in_bssid))
- fail |= 0x20;
- if (!fail) {
- if (selbs == NULL)
- selbs = in;
- else if (ieee80211_get_rssi(in) >
- ieee80211_get_rssi(selbs))
- selbs = in;
- }
- }
- if (selbs == NULL)
- goto notfound;
- bcopy(selbs, isc->isc_bss, sizeof (struct ieee80211_node));
- if (isc->isc_opmode == IEEE80211_M_IBSS) {
- (void) ieee80211_fix_rate(isc, isc->isc_bss,
- IEEE80211_F_DOFRATE | IEEE80211_F_DONEGO |
- IEEE80211_F_DODEL);
- if (isc->isc_bss->in_rates.ir_nrates == 0) {
- selbs->in_fails++;
- goto notfound;
- }
- (void) _ieee80211_new_state(isc, IEEE80211_S_RUN, -1);
- } else
- (void) _ieee80211_new_state(isc, IEEE80211_S_AUTH, -1);
-}
-
-
-/*
- * Switch to the next channel marked for scanning.
- * This one is only called by multi-func thread.
- */
-static void
-ieee80211_next_scan(ieee80211com_t *isc)
-{
- struct ieee80211channel *chan;
-
- ASSERT(isc->isc_state == IEEE80211_S_SCAN);
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- chan = isc->isc_bss->in_chan;
- for (;;) {
- if (++chan > &isc->isc_channels[IEEE80211_CHAN_MAX])
- chan = &isc->isc_channels[0];
- if (isset(isc->isc_chan_scan, ieee80211_chan2ieee(isc, chan))) {
- /*
- * Honor channels marked passive-only
- * during an active scan.
- */
- if ((isc->isc_flags & IEEE80211_F_ASCAN) == 0 ||
- (chan->ich_flags & IEEE80211_CHAN_PASSIVE) == 0)
- break;
- }
- if (chan == isc->isc_bss->in_chan) {
- ieee80211_end_scan(isc);
- return;
- }
- }
- clrbit(isc->isc_chan_scan, ieee80211_chan2ieee(isc, chan));
-
- isc->isc_bss->in_chan = chan;
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
-}
-
-
-static void
-ieee80211_setup_node(ieee80211com_t *isc,
- struct ieee80211_node *in, uint8_t *macaddr)
-{
- int32_t hash;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- IEEE80211_ADDR_COPY(in->in_macaddr, macaddr);
- hash = IEEE80211_NODE_HASH(macaddr);
- list_insert_tail(&isc->isc_in_list, in);
- list_insert_tail(&isc->isc_inhash_list[hash], in);
- /*
- * Note we don't enable the inactive timer when acting
- * as a station. Nodes created in this mode represent
- * AP's identified while scanning. If we time them out
- * then several things happen: we can't return the data
- * to users to show the list of AP's we encountered, and
- * more importantly, we'll incorrectly deauthenticate
- * ourself because the inactivity timer will kick us off.
- */
- if (isc->isc_opmode != IEEE80211_M_STA)
- isc->isc_inact_timeout = IEEE80211_INACT_WAIT;
-}
-
-static struct ieee80211_node *
-ieee80211_alloc_node(ieee80211com_t *isc, uint8_t *macaddr)
-{
- struct ieee80211_node *in = (*isc->isc_node_alloc)(isc);
- bzero(in, sizeof (struct ieee80211_node));
- ieee80211_setup_node(isc, in, macaddr);
- return (in);
-}
-
-static struct ieee80211_node *
-ieee80211_dup_bss(ieee80211com_t *isc, uint8_t *macaddr)
-{
- struct ieee80211_node *in;
-
- in = kmem_zalloc(sizeof (struct ieee80211_node), KM_SLEEP);
- ieee80211_setup_node(isc, in, macaddr);
- return (in);
-}
-
-/*
- * Find a node state block given the mac address. Note that
- * this returns the first node found with the mac address.
- */
-struct ieee80211_node *
-ieee80211_find_node(ieee80211com_t *isc, uint8_t *macaddr)
-{
- struct ieee80211_node *in;
- int32_t hash;
-
- hash = IEEE80211_NODE_HASH(macaddr);
- in = list_head(&isc->isc_inhash_list[hash]);
- while (in != NULL) {
- if (IEEE80211_ADDR_EQ(in->in_macaddr, macaddr))
- break;
- in = list_next(&isc->isc_inhash_list[hash], in);
- }
- return (in);
-}
-
-/*
- * Like find but search based on the channel too.
- */
-struct ieee80211_node *
-ieee80211_lookup_node(ieee80211com_t *isc, uint8_t *macaddr,
- struct ieee80211channel *chan)
-{
- struct ieee80211_node *in;
- int32_t hash;
-
- hash = IEEE80211_NODE_HASH(macaddr);
- in = list_head(&isc->isc_inhash_list[hash]);
- while (in != NULL) {
- if (IEEE80211_ADDR_EQ(in->in_macaddr, macaddr) &&
- (in->in_chan == chan))
- break;
- in = list_next(&isc->isc_inhash_list[hash], in);
- }
- return (in);
-}
-
-
-
-/*
- * Install received rate set information in the node's state block.
- * If (its return value & IEEE80211_RATE_BASIC != 0),
- * the rate negotiation or fix rate is failed.
- */
-static int32_t
-ieee80211_setup_rates(ieee80211com_t *isc, struct ieee80211_node *in,
- uint8_t *rates, uint8_t *xrates, int32_t flags)
-{
- struct ieee80211_rateset *rs = &in->in_rates;
-
- bzero(rs, sizeof (*rs));
- rs->ir_nrates = rates[1];
- bcopy(rates + 2, rs->ir_rates, rs->ir_nrates);
- if (xrates != NULL) {
- uint8_t nxrates;
- /*
- * Tack on 11g extended supported rate element.
- */
- nxrates = xrates[1];
- if (rs->ir_nrates + nxrates > IEEE80211_RATE_MAXSIZE) {
- nxrates = IEEE80211_RATE_MAXSIZE - rs->ir_nrates;
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_setup_rates(): extended rate set"
- " too large; only using %u of %u rates\n",
- nxrates, xrates[1]));
- }
- bcopy(xrates + 2, rs->ir_rates + rs->ir_nrates, nxrates);
- rs->ir_nrates += nxrates;
- }
- return (ieee80211_fix_rate(isc, in, flags));
-}
-
-
-/*
- * Misc management frame encapsulation functions.
- */
-static uint8_t *
-ieee80211_add_rates(uint8_t *frm, const struct ieee80211_rateset *rs)
-{
- int32_t nrates;
-
- *frm++ = IEEE80211_ELEMID_RATES;
- nrates = rs->ir_nrates;
- if (nrates > IEEE80211_RATE_SIZE)
- nrates = IEEE80211_RATE_SIZE;
- *frm++ = nrates;
- bcopy(rs->ir_rates, frm, nrates);
- return (frm + nrates);
-}
-
-static uint8_t *
-ieee80211_add_xrates(uint8_t *frm, const struct ieee80211_rateset *rs)
-{
- /*
- * Add an extended supported rates element if operating in 11g mode.
- */
- if (rs->ir_nrates > IEEE80211_RATE_SIZE) {
- int32_t nrates = rs->ir_nrates - IEEE80211_RATE_SIZE;
- *frm++ = IEEE80211_ELEMID_XRATES;
- *frm++ = nrates;
- bcopy(rs->ir_rates + IEEE80211_RATE_SIZE, frm, nrates);
- frm += nrates;
- }
- return (frm);
-}
-
-static uint8_t *
-ieee80211_add_ssid(uint8_t *frm, const uint8_t *ssid, uint32_t len)
-{
- *frm++ = IEEE80211_ELEMID_SSID;
- *frm++ = len;
- bcopy(ssid, frm, len);
- return (frm + len);
-}
-
-/*
- * Following functions are responsible for management frame encapsulation.
- */
-static int32_t
-ieee80211_send_prreq(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t dummy)
-{
- int32_t ret, pktlen;
- mblk_t *mp;
- uint8_t *frm;
- enum ieee80211_phymode mode;
-
- _NOTE(ARGUNUSED(dummy));
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- /*
- * prreq frame format
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- pktlen = sizeof (struct ieee80211_frame) +
- 2 + isc->isc_des_esslen +
- 2 + IEEE80211_RATE_SIZE +
- 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_prreq(): no space\n");
- return (ENOMEM);
- }
- mp->b_rptr += sizeof (struct ieee80211_frame);
-
- frm = mp->b_rptr;
- frm = ieee80211_add_ssid(frm, isc->isc_des_essid, isc->isc_des_esslen);
- mode = ieee80211_chan2mode(isc, in->in_chan);
- frm = ieee80211_add_rates(frm, &isc->isc_sup_rates[mode]);
- frm = ieee80211_add_xrates(frm, &isc->isc_sup_rates[mode]);
- mp->b_wptr = frm;
-
- ret = ieee80211_mgmt_output(isc, in, mp, type);
- isc->isc_mgt_timeout = IEEE80211_TRANS_WAIT;
-
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_send_prreq() "
- "channel=%u\n", ieee80211_chan2ieee(isc, in->in_chan)));
-
- return (ret);
-}
-
-static int32_t
-ieee80211_send_prresp(ieee80211com_t *isc, struct ieee80211_node *bs0,
- int32_t type, int32_t dummy)
-{
- mblk_t *mp;
- uint8_t *frm;
- struct ieee80211_node *in = isc->isc_bss;
- uint16_t capinfo;
- int32_t pktlen;
-
- _NOTE(ARGUNUSED(dummy));
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- /*
- * probe response frame format
- * [8] time stamp
- * [2] beacon interval
- * [2] cabability information
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] parameter set (IBSS)
- * [tlv] extended supported rates
- */
- pktlen = sizeof (struct ieee80211_frame) +
- 8 + 2 + 2 + 2 +
- 2 + in->in_esslen +
- 2 + IEEE80211_RATE_SIZE +
- 6 +
- 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_prresp(): alloc failed.\n");
- return (ENOMEM);
- }
- mp->b_rptr += sizeof (struct ieee80211_frame);
- frm = mp->b_rptr;
-
- bzero(frm, 8); /* timestamp */
- frm += 8;
-
- *(uint16_t *)frm = LE_16(in->in_intval);
- frm += 2;
-
- if (isc->isc_opmode == IEEE80211_M_IBSS)
- capinfo = IEEE80211_CAPINFO_IBSS;
- else
- capinfo = IEEE80211_CAPINFO_ESS;
- if (isc->isc_flags & IEEE80211_F_WEPON)
- capinfo |= IEEE80211_CAPINFO_PRIVACY;
- *(uint16_t *)frm = LE_16(capinfo);
- frm += 2;
-
- frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
- frm = ieee80211_add_rates(frm, &in->in_rates);
-
- if (isc->isc_opmode == IEEE80211_M_IBSS) {
- *frm++ = IEEE80211_ELEMID_IBSSPARMS;
- *frm++ = 2;
- *frm++ = 0; *frm++ = 0; /* ATIM window */
- } else { /* IEEE80211_M_HOSTAP */
- /* TIM */
- *frm++ = IEEE80211_ELEMID_TIM;
- *frm++ = 4; /* length */
- *frm++ = 0; /* DTIM count */
- *frm++ = 1; /* DTIM period */
- *frm++ = 0; /* bitmap control */
- *frm++ = 0; /* Partial Virtual Bitmap (variable length) */
- }
- frm = ieee80211_add_xrates(frm, &in->in_rates);
- mp->b_wptr = frm;
-
- return (ieee80211_mgmt_output(isc, bs0, mp, type));
-}
-
-static int32_t
-ieee80211_send_auth(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t seq)
-{
- mblk_t *mp;
- uint16_t *frm;
- int32_t ret, pktlen;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- pktlen = sizeof (struct ieee80211_frame) + 3 * sizeof (uint16_t);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_auth(): allocb failed\n");
- return (ENOMEM);
- }
- mp->b_wptr = mp->b_rptr + pktlen;
- mp->b_rptr += sizeof (struct ieee80211_frame);
-
- frm = (uint16_t *)mp->b_rptr;
- /* shared key auth */
- frm[0] = LE_16(IEEE80211_AUTH_ALG_OPEN);
- frm[1] = LE_16(seq);
- frm[2] = 0; /* status */
- ret = ieee80211_mgmt_output(isc, in, mp, type);
- if (isc->isc_opmode == IEEE80211_M_STA)
- isc->isc_mgt_timeout = IEEE80211_TRANS_WAIT;
- return (ret);
-}
-
-static int32_t
-ieee80211_send_deauth(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t reason)
-{
- mblk_t *mp;
- uint16_t *frm;
- int32_t pktlen;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_send_deauth(): station %s deauthenticate",
- " (reason %d)\n", ieee80211_ether_sprintf(in->in_macaddr), reason));
- pktlen = sizeof (struct ieee80211_frame) + sizeof (uint16_t);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_deauth(): allocb failed\n");
- return (ENOMEM);
- }
- mp->b_wptr = mp->b_rptr + pktlen;
- mp->b_rptr += sizeof (struct ieee80211_frame);
-
- frm = (uint16_t *)mp->b_rptr;
- frm[0] = LE_16(reason);
-
- return (ieee80211_mgmt_output(isc, in, mp, type));
-}
-
-static int32_t
-ieee80211_send_asreq(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t dummy)
-{
- mblk_t *mp;
- uint8_t *frm;
- uint16_t capinfo = 0;
- int32_t ret, pktlen;
-
- _NOTE(ARGUNUSED(dummy));
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- /*
- * asreq frame format
- * [2] capability information
- * [2] listen interval
- * [6*] current AP address (reassoc only)
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- pktlen = sizeof (struct ieee80211_frame) +
- sizeof (capinfo) + sizeof (uint16_t) + IEEE80211_ADDR_LEN +
- 2 + in->in_esslen + 2 + IEEE80211_RATE_SIZE +
- 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_asreq: allocb failed\n");
- return (ENOMEM);
- }
- mp->b_rptr += sizeof (struct ieee80211_frame);
-
- frm = (uint8_t *)mp->b_rptr;
-
- capinfo = 0;
- if (isc->isc_opmode == IEEE80211_M_IBSS)
- capinfo |= IEEE80211_CAPINFO_IBSS;
- else /* IEEE80211_M_STA */
- capinfo |= IEEE80211_CAPINFO_ESS;
- if (isc->isc_flags & IEEE80211_F_WEPON)
- capinfo |= IEEE80211_CAPINFO_PRIVACY;
- if (isc->isc_flags & IEEE80211_F_SHPREAMBLE)
- capinfo |= IEEE80211_CAPINFO_SHORT_PREAMBLE;
- if (isc->isc_flags & IEEE80211_F_SHSLOT)
- capinfo |= IEEE80211_CAPINFO_SHORT_SLOTTIME;
- capinfo |= 0x0020;
- *(uint16_t *)frm = LE_16(capinfo);
- frm += 2;
-
- *(uint16_t *)frm = LE_16(isc->isc_lintval);
- frm += 2;
-
- if (type == IEEE80211_FC0_SUBTYPE_REASSOC_REQ) {
- IEEE80211_ADDR_COPY(frm, isc->isc_bss->in_bssid);
- frm += IEEE80211_ADDR_LEN;
- }
-
- frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
- frm = ieee80211_add_rates(frm, &in->in_rates);
- frm = ieee80211_add_xrates(frm, &in->in_rates);
- mp->b_wptr = frm;
- ret = ieee80211_mgmt_output(isc, in, mp, type);
- isc->isc_mgt_timeout = IEEE80211_TRANS_WAIT;
- return (ret);
-}
-
-static int32_t
-ieee80211_send_asresp(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t status)
-{
- mblk_t *mp;
- uint8_t *frm;
- uint16_t capinfo;
- int32_t pktlen;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
- /*
- * asreq frame format
- * [2] capability information
- * [2] status
- * [2] association ID
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- pktlen = sizeof (struct ieee80211_frame) +
- sizeof (capinfo) +
- sizeof (uint16_t) +
- sizeof (uint16_t) +
- 2 + IEEE80211_RATE_SIZE +
- 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_asresp: allocb failed\n");
- return (ENOMEM);
- }
- mp->b_rptr += sizeof (struct ieee80211_frame);
- frm = (uint8_t *)mp->b_rptr;
-
- capinfo = IEEE80211_CAPINFO_ESS;
- if (isc->isc_flags & IEEE80211_F_WEPON)
- capinfo |= IEEE80211_CAPINFO_PRIVACY;
- *(uint16_t *)frm = LE_16(capinfo);
- frm += 2;
-
- *(uint16_t *)frm = LE_16(status);
- frm += 2;
-
- if (status == IEEE80211_STATUS_SUCCESS && in != NULL)
- *(uint16_t *)frm = LE_16(in->in_associd);
- else
- *(uint16_t *)frm = LE_16(0);
- frm += 2;
-
- if (in != NULL) {
- frm = ieee80211_add_rates(frm, &in->in_rates);
- frm = ieee80211_add_xrates(frm, &in->in_rates);
- } else {
- frm = ieee80211_add_rates(frm, &isc->isc_bss->in_rates);
- frm = ieee80211_add_xrates(frm, &isc->isc_bss->in_rates);
- }
- mp->b_wptr = frm;
-
- return (ieee80211_mgmt_output(isc, in, mp, type));
-}
-
-static int32_t
-ieee80211_send_disassoc(ieee80211com_t *isc, struct ieee80211_node *in,
- int32_t type, int32_t reason)
-{
- mblk_t *mp;
- uint16_t *frm;
- int32_t pktlen;
-
- _NOTE(ARGUNUSED(type))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_send_disassoc(): station %s disassociate",
- " (reason %d)\n", ieee80211_ether_sprintf(in->in_macaddr), reason));
- pktlen = sizeof (struct ieee80211_frame) + sizeof (uint16_t);
- mp = allocb(pktlen, BPRI_MED);
- if (mp == NULL) {
- ath_problem("ath: ieee80211_send_asresp: allocb failed\n");
- return (ENOMEM);
- }
- mp->b_wptr = mp->b_rptr + pktlen;
- mp->b_rptr += sizeof (struct ieee80211_frame);
- frm = (uint16_t *)mp->b_rptr;
- frm[0] = LE_16(reason);
- return (ieee80211_mgmt_output(isc, in, mp,
- IEEE80211_FC0_SUBTYPE_DISASSOC));
-}
-
-/*
- * This handles both beacon and probe response frames.
- */
-static void
-ieee80211_recv_beacon(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_node *in;
- uint8_t *frm, *efrm, *tstamp, *bintval, *capinfo, *ssid;
- uint8_t *rates, *xrates;
- uint8_t chan, bchan, fhindex, erp;
- uint16_t fhdwell;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- if (isc->isc_opmode != IEEE80211_M_IBSS &&
- isc->isc_state != IEEE80211_S_SCAN) {
- return;
- }
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * beacon frame format
- * [8] time stamp
- * [2] beacon interval
- * [2] cabability information
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] country information
- * [tlv] parameter set (FH/DS)
- * [tlv] erp information
- * [tlv] extended supported rates
- */
- tstamp = frm;
- frm += 8;
- bintval = frm;
- frm += 2;
- capinfo = frm;
- frm += 2;
- ssid = rates = xrates = NULL;
- bchan = ieee80211_chan2ieee(isc, isc->isc_bss->in_chan);
- chan = bchan;
- fhdwell = 0;
- fhindex = 0;
- erp = 0;
- while (frm < efrm) {
- switch (*frm) {
- case IEEE80211_ELEMID_SSID:
- ssid = frm;
- break;
- case IEEE80211_ELEMID_RATES:
- rates = frm;
- break;
- case IEEE80211_ELEMID_COUNTRY:
- /*
- * don't care 'country', otherwise,
- * just do:
- * country = frm;
- */
- break;
- case IEEE80211_ELEMID_FHPARMS:
- if (isc->isc_phytype == IEEE80211_T_FH) {
- fhdwell = (frm[3] << 8) | frm[2];
- chan = IEEE80211_FH_CHAN(frm[4], frm[5]);
- fhindex = frm[6];
- }
- break;
- case IEEE80211_ELEMID_DSPARMS:
- /*
- * hack this since depending on phytype
- * is problematic for multi-mode devices.
- */
- if (isc->isc_phytype != IEEE80211_T_FH)
- chan = frm[2];
- break;
- case IEEE80211_ELEMID_TIM:
- break;
- case IEEE80211_ELEMID_XRATES:
- xrates = frm;
- break;
- case IEEE80211_ELEMID_ERP:
- if (frm[1] != 1) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_beacon(): "
- "%s: invalid ERP element; "
- "length %u, expecting 1\n",
- "ieee80211_recv_beacon", frm[1]));
- break;
- }
- erp = frm[2];
- break;
- default:
- break;
- }
- frm += frm[1] + 2;
- }
- IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_SIZE, wh);
- IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN, wh);
-
- if (isclr(isc->isc_chan_active, chan)) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_beacon(): "
- "ignore %s with invalid channel %u\n",
- IEEE80211_ISPROBE(wh) ? "probe response" : "beacon", chan));
- return;
- }
- if (chan != bchan && isc->isc_phytype != IEEE80211_T_FH) {
- /*
- * Frame was received on a channel different from the
- * one indicated in the DS/FH params element id; silently
- * discard it.
- *
- * NB: this can happen due to signal leakage.
- */
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_beacon(): "
- "ignore %s phytype %u on channel %u marked for %u\n",
- IEEE80211_ISPROBE(wh) ? "probe response" : "beacon",
- isc->isc_phytype,
- bchan, chan));
- return;
- }
-
- /*
- * Use mac and channel for lookup so we collect all
- * potential AP's when scanning. Otherwise we may
- * see the same AP on multiple channels and will only
- * record the last one. We could filter APs here based
- * on rssi, etc. but leave that to the end of the scan
- * so we can keep the selection criteria in one spot.
- * This may result in a bloat of the scanned AP list but
- * it shouldn't be too much.
- */
- in = ieee80211_lookup_node(isc, wh->ifrm_addr2,
- &isc->isc_channels[chan]);
- if (in == NULL || isc->isc_state == IEEE80211_S_SCAN) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_beacon(): essid = %s\n",
- ieee80211_essid_sprintf(ssid + 2, ssid[1])));
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_beacon(): "
- "from %s\n", ieee80211_ether_sprintf(wh->ifrm_addr2)));
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_beacon(): to %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr1)));
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_beacon(): "
- "caps 0x%x bintval %u erp 0x%x\n",
- LE_16(*(uint16_t *)capinfo),
- LE_16(*(uint16_t *)bintval), erp));
- }
-
- if (in == NULL) {
- in = ieee80211_alloc_node(isc, wh->ifrm_addr2);
- if (in == NULL)
- return;
- in->in_esslen = ssid[1];
- bzero(in->in_essid, sizeof (in->in_essid));
- bcopy(ssid + 2, in->in_essid, ssid[1]);
- } else if (ssid[1] != 0 && IEEE80211_ISPROBE(wh)) {
- /*
- * Update ESSID at probe response to adopt hidden AP by
- * Lucent/Cisco, which announces null ESSID in beacon.
- */
- in->in_esslen = ssid[1];
- bzero(in->in_essid, sizeof (in->in_essid));
- bcopy(ssid + 2, in->in_essid, ssid[1]);
- }
-
- IEEE80211_ADDR_COPY(in->in_bssid, wh->ifrm_addr3);
- ieee80211_add_recvhist(in, rssi, rstamp, rantenna);
- bcopy(tstamp, in->in_tstamp, sizeof (in->in_tstamp));
- in->in_intval = LE_16(*(uint16_t *)bintval);
- in->in_capinfo = LE_16(*(uint16_t *)capinfo);
- in->in_chan = &isc->isc_channels[chan];
- in->in_fhdwell = fhdwell;
- in->in_fhindex = fhindex;
- in->in_erp = erp;
- /* in_chan must have been setup */
- (void) ieee80211_setup_rates(isc, in, rates, xrates,
- IEEE80211_F_DOSORT);
-}
-
-static void
-ieee80211_recv_prreq(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_node *in;
- uint8_t *frm, *efrm, *ssid, *rates, *xrates;
- uint8_t rate;
- int32_t allocbs;
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- if (isc->isc_opmode == IEEE80211_M_STA)
- return;
- if (isc->isc_state != IEEE80211_S_RUN)
- return;
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * prreq frame format
- * [tlv] ssid
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- ssid = rates = xrates = NULL;
- while (frm < efrm) {
- switch (*frm) {
- case IEEE80211_ELEMID_SSID:
- ssid = frm;
- break;
- case IEEE80211_ELEMID_RATES:
- rates = frm;
- break;
- case IEEE80211_ELEMID_XRATES:
- xrates = frm;
- break;
- }
- frm += frm[1] + 2;
- }
- IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_SIZE, wh);
- IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN, wh);
- if (ssid[1] != 0 &&
- (ssid[1] != isc->isc_bss->in_esslen ||
- bcmp(ssid + 2, isc->isc_bss->in_essid,
- isc->isc_bss->in_esslen) != 0)) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_prreq(): "
- "ssid unmatch %s from %s",
- ieee80211_essid_sprintf(ssid + 2, ssid[1]),
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- return;
- }
-
- in = ieee80211_find_node(isc, wh->ifrm_addr2);
- if (in == NULL) {
- in = ieee80211_dup_bss(isc, wh->ifrm_addr2);
- if (in == NULL) {
- ath_problem("ath: ieee80211_recv_prreq(): "
- "dup bss failed\n");
- return;
- }
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_prreq: new req from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- allocbs = 1;
- } else
- allocbs = 0;
- ieee80211_add_recvhist(in, rssi, rstamp, rantenna);
- rate = ieee80211_setup_rates(isc, in, rates, xrates,
- IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE
- | IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
- if (rate & IEEE80211_RATE_BASIC) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_prreq(): "
- "rate negotiation fail: %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- } else {
- IEEE80211_SEND_MGMT(isc, in, IEEE80211_FC0_SUBTYPE_PROBE_RESP,
- 0);
- }
-
- if (allocbs && isc->isc_opmode == IEEE80211_M_HOSTAP)
- ieee80211_free_node(isc, in);
- else
- ieee80211_unref_node(&in);
-}
-
-static void
-ieee80211_recv_auth(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_node *in;
- uint8_t *frm, *efrm;
- uint16_t algo, seq, status;
-
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * auth frame format
- * [2] algorithm
- * [2] sequence
- * [2] status
- * [tlv*] challenge
- */
- if (frm + 6 > efrm) {
- ATH_DEBUG((ATH_DBG_80211, "ath: "
- "ieee80211_recv_auth: too short from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2)));
- return;
- }
-
- algo = LE_16(*(uint16_t *)frm);
- seq = LE_16(*(uint16_t *)(frm + 2));
- status = LE_16(*(uint16_t *)(frm + 4));
- if (algo != IEEE80211_AUTH_ALG_OPEN) {
- /* shared key auth */
- ath_problem("ath: ieee80211_recv_auth(): "
- "unsupported auth %d from %s\n",
- algo, ieee80211_ether_sprintf(wh->ifrm_addr2));
- return;
- }
- switch (isc->isc_opmode) {
- case IEEE80211_M_IBSS:
- if (isc->isc_state != IEEE80211_S_RUN || seq != 1)
- return;
- (void) _ieee80211_new_state(isc, IEEE80211_S_AUTH,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
- break;
-
- case IEEE80211_M_AHDEMO:
- break;
-
- case IEEE80211_M_HOSTAP:
- break;
-
- case IEEE80211_M_STA:
- if (isc->isc_state != IEEE80211_S_AUTH || seq != 2)
- return;
- if (status != 0) {
- ath_log("ath: ieee80211_recv_auth(): "
- "authentication failed (reason %d) for %s\n",
- status, ieee80211_ether_sprintf(wh->ifrm_addr3));
- in = ieee80211_find_node(isc, wh->ifrm_addr2);
- if (in != NULL)
- in->in_fails++;
- return;
- }
- (void) _ieee80211_new_state(isc, IEEE80211_S_ASSOC,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
- break;
- }
-}
-
-static void
-ieee80211_recv_asreq(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- _NOTE(ARGUNUSED(isc))
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- /* doesn't support HOST-AP mode yet */
-}
-
-static void
-ieee80211_recv_asresp(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- struct ieee80211_node *in;
- uint8_t *frm, *efrm, *rates, *xrates;
- int32_t status;
-
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- if (isc->isc_opmode != IEEE80211_M_STA ||
- isc->isc_state != IEEE80211_S_ASSOC)
- return;
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * asresp frame format
- * [2] capability information
- * [2] status
- * [2] association ID
- * [tlv] supported rates
- * [tlv] extended supported rates
- */
- if (frm + 6 > efrm) {
- ath_log("ath: ieee80211_recv_asresp(): too short from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- return;
- }
-
- in = isc->isc_bss;
- in->in_capinfo = LE_16(*(uint16_t *)frm);
- frm += 2;
-
- status = LE_16(*(uint16_t *)frm);
- frm += 2;
-
- if (status != 0) {
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_asresp(): "
- "association failed (reason %d)\n", status));
- in = ieee80211_find_node(isc, wh->ifrm_addr2);
- if (in != NULL) {
- in->in_fails++;
- }
- return;
- }
-
- in->in_associd = LE_16(*(uint16_t *)frm);
- frm += 2;
-
- rates = xrates = NULL;
- while (frm < efrm) {
- switch (*frm) {
- case IEEE80211_ELEMID_RATES:
- rates = frm;
- break;
- case IEEE80211_ELEMID_XRATES:
- xrates = frm;
- break;
- }
- frm += frm[1] + 2;
- }
-
- IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_SIZE, wh);
- (void) ieee80211_setup_rates(isc, in, rates, xrates,
- IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE |
- IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
- if (in->in_rates.ir_nrates != 0)
- (void) _ieee80211_new_state(isc, IEEE80211_S_RUN,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
-}
-
-static void
-ieee80211_recv_disassoc(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- uint8_t *frm, *efrm;
- uint16_t reason;
-
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * disassoc frame format
- * [2] reason
- */
- if (frm + 2 > efrm) {
- ath_log("ath: ieee80211_recv_disassoc(): too short from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- return;
- }
- reason = LE_16(*(uint16_t *)frm);
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_disassoc(): "
- "disassociation packet, reason:0x%x\n", reason));
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- (void) _ieee80211_new_state(isc, IEEE80211_S_ASSOC,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
- break;
- case IEEE80211_M_HOSTAP:
- /* don't support HOSTAP */
- break;
- default:
- break;
- }
-}
-
-static void
-ieee80211_recv_deauth(ieee80211com_t *isc, mblk_t *mp, int32_t rssi,
- uint32_t rstamp, uint32_t rantenna)
-{
- struct ieee80211_frame *wh;
- uint8_t *frm, *efrm;
- uint16_t reason;
-
- _NOTE(ARGUNUSED(rssi))
- _NOTE(ARGUNUSED(rstamp))
- _NOTE(ARGUNUSED(rantenna))
- _NOTE(ARGUNUSED(mp))
-
- ASSERT(mutex_owned(&isc->isc_genlock));
-
- wh = (struct ieee80211_frame *)mp->b_rptr;
- frm = (uint8_t *)&wh[1];
- efrm = mp->b_wptr;
- /*
- * dauth frame format
- * [2] reason
- */
- if (frm + 2 > efrm) {
- ath_log("ath: ieee80211_recv_deauth(): too short from %s\n",
- ieee80211_ether_sprintf(wh->ifrm_addr2));
- return;
- }
- reason = LE_16(*(uint16_t *)frm);
- ATH_DEBUG((ATH_DBG_80211, "ath: ieee80211_recv_deauth(): "
- "deauthentication packet, reason: 0x%x\n", reason));
- switch (isc->isc_opmode) {
- case IEEE80211_M_STA:
- (void) _ieee80211_new_state(isc, IEEE80211_S_AUTH,
- wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
- break;
- case IEEE80211_M_HOSTAP:
- break;
- default:
- break;
- }
-}
-
-/*
- * Return the phy mode for with the specified channel so the
- * caller can select a rate set. This is problematic and the
- * work here assumes how things work elsewhere in this code.
- */
-enum ieee80211_phymode
-ieee80211_chan2mode(ieee80211com_t *isc, struct ieee80211channel *chan)
-{
- /*
- * NB: this assumes the channel would not be supplied to us
- * unless it was already compatible with the current mode.
- */
- if (isc->isc_curmode != IEEE80211_MODE_AUTO)
- return (isc->isc_curmode);
- /*
- * In autoselect mode; deduce a mode based on the channel
- * characteristics. We assume that turbo-only channels
- * are not considered when the channel set is constructed.
- */
- if (IEEE80211_IS_CHAN_5GHZ(chan))
- return (IEEE80211_MODE_11A);
- else if (chan->ich_flags & (IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN))
- return (IEEE80211_MODE_11G);
- else
- return (IEEE80211_MODE_11B);
-}
-
-
-/*
- * Format an Ethernet MAC for printing,
- * and this function adds NULL byte at the end of string.
- */
-const char *
-ieee80211_ether_sprintf(const uint8_t *mac)
-{
- static char etherbuf[18];
- (void) snprintf(etherbuf, sizeof (etherbuf),
- "%02x:%02x:%02x:%02x:%02x:%02x",
- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
- return (etherbuf);
-}
-
-/*
- * Format an essid for printing,
- * and this function adds NULL byte at the end of string.
- */
-const int8_t *
-ieee80211_essid_sprintf(uint8_t *essid, uint32_t len)
-{
- static int8_t essidbuf[IEEE80211_NWID_LEN * 2 + 1];
- uint32_t i;
- uint8_t *p;
- int8_t tmp[3];
-
- bzero(essidbuf, sizeof (essidbuf));
- if (len > IEEE80211_NWID_LEN)
- len = IEEE80211_NWID_LEN;
- /* determine printable or not */
- for (i = 0, p = essid; i < len; i++, p++) {
- if (*p < ' ' || *p > 0x7e)
- break;
- }
- if (i == len) {
- for (i = 0; i < len; i++)
- essidbuf[i] = essid[i];
- essidbuf[i] = '\0';
- } else {
- for (i = 0; i < len; i++) {
- (void) sprintf(tmp, "%02x", essid[i]);
- (void) strcat(essidbuf, tmp);
- }
- }
- return (essidbuf);
-}
-
-/*
- * Following fucntions are registerd to GLD and intercepting
- * the function calls from GLD to LLD to add appropriate ic_genlock protection.
- *
- * We have to protect ieee80211_gld_send() by isc_genlock,
- * because there have many references to isc struct on this transimit path,
- * and this may affect performace.
- */
-static int32_t
-ieee80211_gld_send(gld_mac_info_t *gld_p, mblk_t *mp)
-{
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
- int32_t result;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_send)(gld_p, mp);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int32_t
-ieee80211_gld_reset(gld_mac_info_t *gld_p)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_reset)(gld_p);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-
-/*
- * Following function is for Multi_func thread.
- * The smallest timing unit is 100ms.
- * It is created in ieee80211_gld_start(),
- * and destroy in ieee80211_gld_stop().
- */
-void
-ieee80211_mf_thread(ieee80211com_t *isc)
-{
- struct ieee80211_node *in;
- uint32_t scan_ticks = 0;
- uint32_t ratectl_ticks = 0;
- uint32_t cali_ticks = 0;
- uint32_t mgt_ticks = 0;
- enum ieee80211_state ostate = IEEE80211_S_INIT;
-
- mutex_enter(&isc->isc_genlock);
- while (isc->isc_mfthread_switch) {
- if (isc->isc_state == IEEE80211_S_SCAN &&
- ostate != IEEE80211_S_SCAN)
- scan_ticks = 0;
-
- if (isc->isc_state == IEEE80211_S_SCAN) {
- if (scan_ticks >= (isc->isc_scan_interval/100 - 1)) {
- ieee80211_next_scan(isc);
- scan_ticks = 0;
- } else
- scan_ticks++;
- }
-
- if (ratectl_ticks >= (isc->isc_ratectl_interval/100 - 1)) {
- if (isc->isc_opmode == IEEE80211_M_STA)
- (*isc->isc_rate_ctl)(isc, isc->isc_bss);
- else {
- in = list_head(&isc->isc_in_list);
- while (in != NULL) {
- (*isc->isc_rate_ctl)(isc, in);
- in = list_next(&isc->isc_in_list, in);
- }
- }
- ratectl_ticks = 0;
- } else
- ratectl_ticks++;
-
- if (cali_ticks >= (isc->isc_cali_interval/100 - 1)) {
- (*isc->isc_calibrate)(isc);
- cali_ticks = 0;
- } else
- cali_ticks++;
-
- if (mgt_ticks >= 10) { /* one second */
- if (isc->isc_mgt_timeout &&
- --isc->isc_mgt_timeout == 0) {
- (void) _ieee80211_new_state(isc,
- IEEE80211_S_SCAN, -1);
- }
- if (isc->isc_inact_timeout &&
- --isc->isc_inact_timeout == 0)
- ieee80211_timeout_nodes(isc);
- mgt_ticks = 0;
- } else
- mgt_ticks++;
-
- ostate = isc->isc_state;
- mutex_exit(&isc->isc_genlock);
- delay(drv_usectohz(100000)); /* delay 100ms */
- mutex_enter(&isc->isc_genlock);
- }
- isc->isc_mf_thread = NULL;
- cv_broadcast(&isc->isc_mfthread_cv);
- mutex_exit(&isc->isc_genlock);
- thread_exit();
-}
-
-/*
- * This function is responsible for creating multi-func thread.
- */
-static int32_t
-ieee80211_gld_start(gld_mac_info_t *gld_p)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- isc->isc_mfthread_switch = 1;
- if (isc->isc_mf_thread == NULL)
- isc->isc_mf_thread = thread_create((caddr_t)NULL, 0,
- ieee80211_mf_thread, isc, 0, &p0, TS_RUN, minclsyspri);
- result = (*isc->isc_gld_start)(gld_p);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-/*
- * This function is responsible for destory multi-func thread.
- */
-static int32_t
-ieee80211_gld_stop(gld_mac_info_t *gld_p)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- isc->isc_mfthread_switch = 0;
- while (isc->isc_mf_thread != NULL) {
- if (cv_wait_sig(&isc->isc_mfthread_cv, &isc->isc_genlock) == 0)
- break;
- }
- result = (*isc->isc_gld_stop)(gld_p);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int32_t
-ieee80211_gld_saddr(gld_mac_info_t *gld_p, uint8_t *macaddr)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_saddr)(gld_p, macaddr);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int
-ieee80211_gld_set_promiscuous(gld_mac_info_t *gld_p, int mode)
-{
- int result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_set_promiscuous)(gld_p, mode);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int32_t
-ieee80211_gld_gstat(gld_mac_info_t *gld_p, struct gld_stats *glds_p)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_gstat)(gld_p, glds_p);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int32_t
-ieee80211_gld_ioctl(gld_mac_info_t *gld_p, queue_t *wq, mblk_t *mp)
-{
- int32_t result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_ioctl)(gld_p, wq, mp);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static int
-ieee80211_gld_set_multicast(gld_mac_info_t *gld_p, uint8_t *eth_p, int flag)
-{
- int result;
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- mutex_enter(&isc->isc_genlock);
- result = (*isc->isc_gld_set_multicast)(gld_p, eth_p, flag);
- mutex_exit(&isc->isc_genlock);
- return (result);
-}
-
-static uint32_t
-ieee80211_gld_intr(gld_mac_info_t *gld_p)
-{
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
- return ((*isc->isc_gld_intr)(gld_p));
-}
-
-
-
-int32_t
-ieee80211_ifattach(gld_mac_info_t *gld_p)
-{
- ieee80211com_t *isc =
- (ieee80211com_t *)gld_p->gldm_private;
- struct ieee80211channel *ch;
- int32_t i;
-
- mutex_init(&isc->isc_genlock, NULL, MUTEX_DRIVER, NULL);
-
- /*
- * Fill in 802.11 available channel set, mark
- * all available channels as active, and pick
- * a default channel if not already specified.
- */
- bzero(isc->isc_chan_avail, sizeof (isc->isc_chan_avail));
- isc->isc_modecaps |= 1 << IEEE80211_MODE_AUTO;
- for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
- ch = &isc->isc_channels[i];
- if (ch->ich_flags) {
- setbit(isc->isc_chan_avail, i);
- /*
- * Identify mode capabilities.
- */
- if (IEEE80211_IS_CHAN_A(ch))
- isc->isc_modecaps |= 1 << IEEE80211_MODE_11A;
- if (IEEE80211_IS_CHAN_B(ch))
- isc->isc_modecaps |= 1 << IEEE80211_MODE_11B;
- if (IEEE80211_IS_CHAN_PUREG(ch))
- isc->isc_modecaps |= 1 << IEEE80211_MODE_11G;
- if (IEEE80211_IS_CHAN_T(ch))
- isc->isc_modecaps |= 1 << IEEE80211_MODE_TURBO;
- }
- }
-
- /* Start from auto mode */
- (void) ieee80211_setmode(isc, IEEE80211_MODE_AUTO);
-
- /* Initialize WEP related variable */
- isc->isc_wep_txkey = 0;
- isc->isc_iv = (int32_t)(gethrtime() & 0x00000000ffffffff);
-
- /* Initialize some config variables */
- isc->isc_rtsthreshold = IEEE80211_RTS_MAX;
- isc->isc_fragthreshold = 2346;
- isc->isc_des_chan = IEEE80211_CHAN_ANYC; /* any channel is ok */
- isc->isc_fixed_rate = -1; /* no fixed rate */
- if (isc->isc_lintval == 0)
- isc->isc_lintval = 100; /* default sleep */
- isc->isc_txpower = IEEE80211_TXPOWER_MAX; /* default tx power */
- isc->isc_bmisstimeout = 7 * isc->isc_lintval; /* default 7 beacons */
-
- list_create(&isc->isc_in_list,
- sizeof (struct ieee80211_node),
- offsetof(struct ieee80211_node, in_node));
- for (i = 0; i < IEEE80211_NODE_HASHSIZE; i++)
- list_create(&isc->isc_inhash_list[i],
- sizeof (struct ieee80211_node),
- offsetof(struct ieee80211_node, in_hash_node));
-
- /* Initialize management frame handlers */
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_PROBE_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_beacon;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_BEACON
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_beacon;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_PROBE_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_prreq;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_AUTH
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_auth;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_ASSOC_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_asreq;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_REASSOC_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_asreq;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_ASSOC_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_asresp;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_REASSOC_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_asresp;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_DEAUTH
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_deauth;
- isc->isc_recv_mgmt[IEEE80211_FC0_SUBTYPE_DISASSOC
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_recv_disassoc;
-
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_PROBE_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_prreq;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_PROBE_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_prresp;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_AUTH
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_auth;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_DEAUTH
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_deauth;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_ASSOC_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_asreq;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_REASSOC_REQ
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_asreq;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_ASSOC_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_asresp;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_REASSOC_RESP
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_asresp;
- isc->isc_send_mgmt[IEEE80211_FC0_SUBTYPE_DISASSOC
- >> IEEE80211_FC0_SUBTYPE_SHIFT] = ieee80211_send_disassoc;
-
- cv_init(&isc->isc_scan_cv, NULL, CV_DRIVER, NULL);
- cv_init(&isc->isc_mfthread_cv, NULL, CV_DRIVER, NULL);
- isc->isc_mf_thread = NULL;
- isc->isc_mfthread_switch = 0;
-
- ASSERT(isc->isc_node_alloc != NULL);
- isc->isc_bss = (*isc->isc_node_alloc)(isc);
- isc->isc_bss->in_chan = IEEE80211_CHAN_ANYC;
- isc->isc_bss->in_txpower = IEEE80211_TXPOWER_MAX;
- isc->isc_scan_interval = 200;
- isc->isc_cali_interval = 30000;
- isc->isc_ratectl_interval = 500;
-
- gld_p->gldm_reset = ieee80211_gld_reset;
- gld_p->gldm_start = ieee80211_gld_start;
- gld_p->gldm_stop = ieee80211_gld_stop;
- gld_p->gldm_set_mac_addr = ieee80211_gld_saddr;
- gld_p->gldm_send = ieee80211_gld_send;
- gld_p->gldm_set_promiscuous = ieee80211_gld_set_promiscuous;
- gld_p->gldm_get_stats = ieee80211_gld_gstat;
- gld_p->gldm_ioctl = ieee80211_gld_ioctl;
- gld_p->gldm_set_multicast = ieee80211_gld_set_multicast;
- gld_p->gldm_intr = ieee80211_gld_intr;
-
- return (0);
-}
-
-void
-ieee80211_ifdetach(gld_mac_info_t *gld_p)
-{
- ieee80211com_t *isc = (ieee80211com_t *)gld_p->gldm_private;
-
- (*isc->isc_node_free)(isc, isc->isc_bss);
- ieee80211_free_allnodes(isc);
- cv_destroy(&isc->isc_mfthread_cv);
- cv_destroy(&isc->isc_scan_cv);
- mutex_destroy(&isc->isc_genlock);
-}
diff --git a/usr/src/uts/common/io/ath/ath_ieee80211.h b/usr/src/uts/common/io/ath/ath_ieee80211.h
deleted file mode 100644
index 02abf251ba..0000000000
--- a/usr/src/uts/common/io/ath/ath_ieee80211.h
+++ /dev/null
@@ -1,743 +0,0 @@
-/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- * of any contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGES.
- *
- */
-
-/*
- * IEEE 802.11 generic handler definitions.
- *
- * This code is derived from NetBSD code; their copyright notice follows.
- */
-
-/*
- * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-/*
- * The atheros IEEE80211a/b/g chipsets just implement a IEEE80211
- * phisical layer protocol, all IEEE80211 MAC layer functions are
- * done by the driver. These functions include scan, association/
- * disassociation, authentication/deauthentication, probe request,
- * beacon processing, WEP processing, etc. All the data structs,
- * constant denifition and function declaration related to IEEE802.11
- * are defined here. Actually, ath_ieee80211.h and ath_ieee80211.c
- * are general for most 802.11a/b/g chipsets. GLDv3 should consider
- * a WiFi extension and then all IEEE802.11 supporting would be
- * integrated into GLDv3.
- */
-
-#ifndef _ATH_IEEE80211_H
-#define _ATH_IEEE80211_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/sysmacros.h>
-#include <sys/gld.h>
-#include <sys/stream.h>
-#include <sys/int_types.h>
-#include <sys/note.h>
-#include <sys/list.h>
-
-/* Bit map related macros. */
-#define setbit(a, i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define clrbit(a, i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define isset(a, i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define isclr(a, i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-
-
-/*
- * We always fill constant in LLC
- * and SANP fields of the payload.
- */
-#define LLC_DSAP 0xAA
-#define LLC_SSAP 0xAA
-#define LLC_CONTROL 0x03
-#define SNAP_OC0 0x0
-#define SNAP_OC1 0x0
-#define SNAP_OC2 0x0
-
-#define IEEE80211_ADDR_LEN 6 /* size of 802.11 address */
-#define IEEE80211_TXPOWER_MAX 100 /* .5 dbM */
-#define IEEE80211_TXPOWER_MIN 0 /* kill radio */
-/*
- * Size of an ACK control frame in bytes.
- */
-#define IEEE80211_ACK_SIZE (2 + 2 + IEEE80211_ADDR_LEN + 4)
-
-
-/* Constant for "Frame Control" field of IEEE80211 frame header */
-#define IEEE80211_FC0_VERSION_MASK 0x03
-#define IEEE80211_FC0_VERSION_SHIFT 0
-#define IEEE80211_FC0_VERSION_0 0x00
-#define IEEE80211_FC0_TYPE_MASK 0x0c
-#define IEEE80211_FC0_TYPE_SHIFT 2
-#define IEEE80211_FC0_TYPE_MGT 0x00 /* management frame */
-#define IEEE80211_FC0_TYPE_CTL 0x04 /* control frame */
-#define IEEE80211_FC0_TYPE_DATA 0x08 /* data frame */
-#define IEEE80211_FC0_SUBTYPE_MASK 0xf0
-#define IEEE80211_FC0_SUBTYPE_SHIFT 4
-
-/* sub types of management frame(bit combination) */
-#define IEEE80211_FC0_SUBTYPE_ASSOC_REQ 0x00
-#define IEEE80211_FC0_SUBTYPE_ASSOC_RESP 0x10
-#define IEEE80211_FC0_SUBTYPE_REASSOC_REQ 0x20
-#define IEEE80211_FC0_SUBTYPE_REASSOC_RESP 0x30
-#define IEEE80211_FC0_SUBTYPE_PROBE_REQ 0x40
-#define IEEE80211_FC0_SUBTYPE_PROBE_RESP 0x50
-#define IEEE80211_FC0_SUBTYPE_BEACON 0x80
-#define IEEE80211_FC0_SUBTYPE_ATIM 0x90
-#define IEEE80211_FC0_SUBTYPE_DISASSOC 0xa0
-#define IEEE80211_FC0_SUBTYPE_AUTH 0xb0
-#define IEEE80211_FC0_SUBTYPE_DEAUTH 0xc0
-
-/* sub types of control frame(bit combination) */
-#define IEEE80211_FC0_SUBTYPE_PS_POLL 0xa0
-#define IEEE80211_FC0_SUBTYPE_RTS 0xb0
-#define IEEE80211_FC0_SUBTYPE_CTS 0xc0
-#define IEEE80211_FC0_SUBTYPE_ACK 0xd0
-#define IEEE80211_FC0_SUBTYPE_CF_END 0xe0
-#define IEEE80211_FC0_SUBTYPE_CF_END_ACK 0xf0
-
-/* sub types of data frame(bit combination) */
-#define IEEE80211_FC0_SUBTYPE_DATA 0x00
-#define IEEE80211_FC0_SUBTYPE_CF_ACK 0x10
-#define IEEE80211_FC0_SUBTYPE_CF_POLL 0x20
-#define IEEE80211_FC0_SUBTYPE_CF_ACPL 0x30
-#define IEEE80211_FC0_SUBTYPE_NODATA 0x40
-#define IEEE80211_FC0_SUBTYPE_CFACK 0x50
-#define IEEE80211_FC0_SUBTYPE_CFPOLL 0x60
-#define IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK 0x70
-
-#define IEEE80211_FC1_DIR_MASK 0x03
-#define IEEE80211_FC1_DIR_NODS 0x00 /* STA->STA */
-#define IEEE80211_FC1_DIR_TODS 0x01 /* STA->AP */
-#define IEEE80211_FC1_DIR_FROMDS 0x02 /* AP ->STA */
-#define IEEE80211_FC1_DIR_DSTODS 0x03 /* AP ->AP */
-
-#define IEEE80211_FC1_MORE_FRAG 0x04
-#define IEEE80211_FC1_RETRY 0x08
-#define IEEE80211_FC1_PWR_MGT 0x10
-#define IEEE80211_FC1_MORE_DATA 0x20
-#define IEEE80211_FC1_WEP 0x40
-#define IEEE80211_FC1_ORDER 0x80
-
-#define IEEE80211_SEQ_FRAG_MASK 0x000f
-#define IEEE80211_SEQ_FRAG_SHIFT 0
-#define IEEE80211_SEQ_SEQ_MASK 0xfff0
-#define IEEE80211_SEQ_SEQ_SHIFT 4
-
-#define IEEE80211_NWID_LEN 32
-
-#define IEEE80211_RATE2MBS(r) (((r) & IEEE80211_RATE_VAL) / 2)
-#define IEEE80211_IS_SUBTYPE(_fc, _type) \
- (((_fc) & IEEE80211_FC0_SUBTYPE_MASK) == IEEE80211_FC0_SUBTYPE_##_type)
-
-#define IEEE80211_BEACON_INTERVAL(beacon) \
- ((beacon)[8] | ((beacon)[9] << 8))
-#define IEEE80211_BEACON_CAPABILITY(beacon) \
- ((beacon)[10] | ((beacon)[11] << 8))
-
-#define IEEE80211_CAPINFO_ESS 0x0001
-#define IEEE80211_CAPINFO_IBSS 0x0002
-#define IEEE80211_CAPINFO_CF_POLLABLE 0x0004
-#define IEEE80211_CAPINFO_CF_POLLREQ 0x0008
-#define IEEE80211_CAPINFO_PRIVACY 0x0010
-#define IEEE80211_CAPINFO_SHORT_PREAMBLE 0x0020
-#define IEEE80211_CAPINFO_PBCC 0x0040
-#define IEEE80211_CAPINFO_CHNL_AGILITY 0x0080
-/* bits 8-9 are reserved */
-#define IEEE80211_CAPINFO_SHORT_SLOTTIME 0x0400
-/* bits 11-12 are reserved */
-#define IEEE80211_CAPINFO_DSSSOFDM 0x2000
-/* bits 14-15 are reserved */
-
-/*
- * Management information elements
- */
-#define IEEE80211_ELEMID_SSID 0
-#define IEEE80211_ELEMID_RATES 1
-#define IEEE80211_ELEMID_FHPARMS 2
-#define IEEE80211_ELEMID_DSPARMS 3
-#define IEEE80211_ELEMID_CFPARMS 4
-#define IEEE80211_ELEMID_TIM 5
-#define IEEE80211_ELEMID_IBSSPARMS 6
-#define IEEE80211_ELEMID_COUNTRY 7
-#define IEEE80211_ELEMID_CHALLENGE 16
-#define IEEE80211_ELEMID_ERP 42
-#define IEEE80211_ELEMID_XRATES 50
-
-
-/* Classes for WME streams */
-#define WME_AC_BE 0
-#define WME_AC_BK 1
-#define WME_AC_VI 2
-#define WME_AC_VO 3
-
-#define IEEE80211_RATE_BASIC 0x80
-#define IEEE80211_RATE_VAL 0x7f
-
-/* EPR information element flags */
-#define IEEE80211_ERP_NON_ERP_PRESENT 0x01
-#define IEEE80211_ERP_USE_PROTECTION 0x02
-#define IEEE80211_ERP_BARKER_MODE 0x04
-
-/*
- * AUTH management packets
- *
- * octet algo[2]
- * octet seq[2]
- * octet status[2]
- * octet chal.id
- * octet chal.length
- * octet chal.text[253]
- */
-
-#define IEEE80211_AUTH_ALGORITHM(auth) \
- ((auth)[0] | ((auth)[1] << 8))
-#define IEEE80211_AUTH_TRANSACTION(auth) \
- ((auth)[2] | ((auth)[3] << 8))
-#define IEEE80211_AUTH_STATUS(auth) \
- ((auth)[4] | ((auth)[5] << 8))
-
-#define IEEE80211_AUTH_ALG_OPEN 0x0000
-#define IEEE80211_AUTH_ALG_SHARED 0x0001
-
-#define IEEE80211_AUTH_OPEN_REQUEST 1
-#define IEEE80211_AUTH_OPEN_RESPONSE 2
-
-#define IEEE80211_AUTH_SHARED_REQUEST 1
-#define IEEE80211_AUTH_SHARED_CHALLENGE 2
-#define IEEE80211_AUTH_SHARED_RESPONSE 3
-#define IEEE80211_AUTH_SHARED_PASS 4
-
-/*
- * Reason codes
- * Unlisted codes are reserved
- */
-
-#define IEEE80211_REASON_UNSPECIFIED 1
-#define IEEE80211_REASON_AUTH_EXPIRE 2
-#define IEEE80211_REASON_AUTH_LEAVE 3
-#define IEEE80211_REASON_ASSOC_EXPIRE 4
-#define IEEE80211_REASON_ASSOC_TOOMANY 5
-#define IEEE80211_REASON_NOT_AUTHED 6
-#define IEEE80211_REASON_NOT_ASSOCED 7
-#define IEEE80211_REASON_ASSOC_LEAVE 8
-#define IEEE80211_REASON_ASSOC_NOT_AUTHED 9
-
-#define IEEE80211_STATUS_SUCCESS 0
-#define IEEE80211_STATUS_UNSPECIFIED 1
-#define IEEE80211_STATUS_CAPINFO 10
-#define IEEE80211_STATUS_NOT_ASSOCED 11
-#define IEEE80211_STATUS_OTHER 12
-#define IEEE80211_STATUS_ALG 13
-#define IEEE80211_STATUS_SEQUENCE 14
-#define IEEE80211_STATUS_CHALLENGE 15
-#define IEEE80211_STATUS_TIMEOUT 16
-#define IEEE80211_STATUS_TOOMANY 17
-#define IEEE80211_STATUS_BASIC_RATE 18
-#define IEEE80211_STATUS_SP_REQUIRED 19
-#define IEEE80211_STATUS_PBCC_REQUIRED 20
-#define IEEE80211_STATUS_CA_REQUIRED 21
-#define IEEE80211_STATUS_TOO_MANY_STATIONS 22
-#define IEEE80211_STATUS_RATES 23
-#define IEEE80211_STATUS_SHORTSLOT_REQUIRED 25
-#define IEEE80211_STATUS_DSSSOFDM_REQUIRED 26
-
-#define IEEE80211_WEP_KEYLEN 5 /* 40bit */
-#define IEEE80211_WEP_IVLEN 3 /* 24bit */
-#define IEEE80211_WEP_KIDLEN 1 /* 1 octet */
-#define IEEE80211_WEP_CRCLEN 4 /* CRC-32 */
-#define IEEE80211_WEP_NKID 4 /* number of key ids */
-
-#define IEEE80211_CRC_LEN 4
-
-#define IEEE80211_MTU 1500
-#define IEEE80211_MAX_LEN (2300 + IEEE80211_CRC_LEN + \
- (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
-
-/*
- * RTS frame length parameters. The default is specified in
- * the 802.11 spec. The max may be wrong for jumbo frames.
- */
-#define IEEE80211_RTS_DEFAULT 512
-#define IEEE80211_RTS_MIN 1
-#define IEEE80211_RTS_MAX IEEE80211_MAX_LEN
-
-#define IEEE80211_CHAN_ANY 0xffff /* token for ``any channel'' */
-
-#define IEEE80211_AUTH_NONE 0
-#define IEEE80211_AUTH_OPEN 1
-#define IEEE80211_AUTH_SHARED 2
-
-#define IEEE80211_PSCAN_WAIT 5 /* passive scan wait */
-#define IEEE80211_TRANS_WAIT 5 /* transition wait */
-#define IEEE80211_INACT_WAIT 5 /* inactivity timer interval */
-#define IEEE80211_INACT_MAX (300/IEEE80211_INACT_WAIT)
-
-/*
- * Structure for IEEE 802.11 drivers.
- */
-
-#define IEEE80211_CHAN_MAX 255
-#define IEEE80211_CHAN_ANYC \
- ((struct ieee80211channel *)IEEE80211_CHAN_ANY)
-
-#define IEEE80211_RATE_SIZE 8 /* 802.11 standard */
-#define IEEE80211_RATE_MAXSIZE 15 /* max rates we'll handle */
-#define IEEE80211_KEYBUF_SIZE 16
-#define IEEE80211_NODE_HASHSIZE 32
-/* simple hash is enough for variation of macaddr */
-#define IEEE80211_NODE_HASH(addr) \
- (((uint8_t *)(addr))[IEEE80211_ADDR_LEN - 1] % IEEE80211_NODE_HASHSIZE)
-#define IEEE80211_RV(v) ((v) & IEEE80211_RATE_VAL)
-#define IEEE80211_ISPROBE(_wh) IEEE80211_IS_SUBTYPE((_wh)->ifrm_fc[0], \
- PROBE_RESP)
-#define IEEE80211_RATE(_ix) (in->in_rates.ir_rates[(_ix)] & \
- IEEE80211_RATE_VAL)
-/* Verify the existence and length of __elem or get out. */
-#define IEEE80211_VERIFY_ELEMENT(__elem, __maxlen, __wh) do { \
- if ((__elem) == NULL) { \
- ath_problem("ath: no #__elem \n"); \
- return; \
- } \
- if ((__elem)[1] > (__maxlen)) { \
- ath_problem("ath: bad "#__elem " len %d from %s\n", \
- (__elem)[1], \
- ieee80211_ether_sprintf((__wh)->ifrm_addr2)); \
- return; \
- } \
- _NOTE(CONSTANTCONDITION) \
-} while (0)
-
-
-enum ieee80211_phytype {
- IEEE80211_T_DS, /* direct sequence spread spectrum */
- IEEE80211_T_FH, /* frequency hopping */
- IEEE80211_T_OFDM, /* frequency division multiplexing */
- IEEE80211_T_TURBO /* high rate OFDM, aka turbo mode */
-};
-#define IEEE80211_T_CCK IEEE80211_T_DS /* more common nomenclature */
-
-/* not really a mode; there are really multiple PHY's */
-enum ieee80211_phymode {
- IEEE80211_MODE_AUTO = 0, /* autoselect */
- IEEE80211_MODE_11A = 1, /* 5GHz, OFDM */
- IEEE80211_MODE_11B = 2, /* 2GHz, CCK */
- IEEE80211_MODE_11G = 3, /* 2GHz, OFDM */
- IEEE80211_MODE_TURBO = 4 /* 5GHz, OFDM, 2x clock */
-};
-#define IEEE80211_MODE_MAX (IEEE80211_MODE_TURBO+1)
-
-enum ieee80211_opmode {
- IEEE80211_M_STA = 1, /* infrastructure station */
- IEEE80211_M_IBSS = 0, /* IBSS (adhoc) station */
- IEEE80211_M_AHDEMO = 3, /* Old lucent compatible adhoc demo */
- IEEE80211_M_HOSTAP = 6 /* Software Access Point */
-};
-
-enum ieee80211_state {
- IEEE80211_S_INIT, /* default state */
- IEEE80211_S_SCAN, /* scanning */
- IEEE80211_S_AUTH, /* try to authenticate */
- IEEE80211_S_ASSOC, /* try to assoc */
- IEEE80211_S_RUN /* associated */
-};
-
-/*
- * Channels are specified by frequency and attributes.
- */
-struct ieee80211channel {
- uint16_t ich_freq; /* setting in Mhz */
- uint16_t ich_flags; /* see below */
-};
-
-/* bits 0-3 are for private use by drivers */
-/* channel attributes */
-#define IEEE80211_CHAN_TURBO 0x0010 /* Turbo channel */
-#define IEEE80211_CHAN_CCK 0x0020 /* CCK channel */
-#define IEEE80211_CHAN_OFDM 0x0040 /* OFDM channel */
-#define IEEE80211_CHAN_2GHZ 0x0080 /* 2 GHz spectrum channel. */
-#define IEEE80211_CHAN_5GHZ 0x0100 /* 5 GHz spectrum channel */
-#define IEEE80211_CHAN_PASSIVE 0x0200 /* Only passive scan allowed */
-#define IEEE80211_CHAN_DYN 0x0400 /* Dynamic CCK-OFDM channel */
-
-/*
- * Useful combinations of channel characteristics.
- */
-#define IEEE80211_CHAN_A \
- (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
-#define IEEE80211_CHAN_B \
- (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
-#define IEEE80211_CHAN_PUREG \
- (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
-#define IEEE80211_CHAN_G \
- (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
-#define IEEE80211_CHAN_T \
- (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
-
-#define IEEE80211_IS_CHAN_A(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
-#define IEEE80211_IS_CHAN_B(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
-#define IEEE80211_IS_CHAN_PUREG(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
-#define IEEE80211_IS_CHAN_G(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
-#define IEEE80211_IS_CHAN_T(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_T) == IEEE80211_CHAN_T)
-
-#define IEEE80211_IS_CHAN_2GHZ(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_2GHZ) != 0)
-#define IEEE80211_IS_CHAN_5GHZ(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_5GHZ) != 0)
-#define IEEE80211_IS_CHAN_OFDM(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_OFDM) != 0)
-#define IEEE80211_IS_CHAN_CCK(_ch) \
- (((_ch)->ich_flags & IEEE80211_CHAN_CCK) != 0)
-
-#pragma pack(1)
-/* Header of IEEE 802.11 frame */
-struct ieee80211_frame {
- uint8_t ifrm_fc[2];
- uint8_t ifrm_dur[2];
- uint8_t ifrm_addr1[IEEE80211_ADDR_LEN];
- uint8_t ifrm_addr2[IEEE80211_ADDR_LEN];
- uint8_t ifrm_addr3[IEEE80211_ADDR_LEN];
- uint8_t ifrm_seq[2];
- /*
- * i_addr4 is present only when it's a data
- * frame from one AP to another AP. The driver
- * doesn't work in AP mode, so we never transmit
- * or receive a frame containing i_addr4 field.
- */
-};
-
-/* Start part(LLC and SNAP) of payload of IEEE80211 frame */
-struct ieee80211_llc {
- /* LLC */
- uint8_t illc_dsap;
- uint8_t illc_ssap;
- uint8_t illc_control;
- /* SNAP */
- uint8_t illc_oc[3]; /* protocol ID or organization code */
- uint16_t illc_ether_type; /* ethernet type */
-};
-#pragma pack()
-
-struct ieee80211_rateset {
- uint8_t ir_nrates;
- uint8_t ir_rates[IEEE80211_RATE_MAXSIZE];
-};
-
-/* Number of history entries to keep (per node) */
-#define IEEE80211_RECV_HIST_LEN 16
-#define IEEE80211_JIFFIES_NONE ((uint32_t)(~0))
-
-struct ieee80211_recv_hist {
- uint32_t irh_jiffies; /* kernel timestamp */
- uint8_t irh_rssi; /* recv ssi */
- uint32_t irh_rstamp; /* recv timestamp */
- uint8_t irh_rantenna; /* recv antenna */
-};
-
-
-/*
- * Node specific information.
- */
-struct ieee80211_node {
- /* hardware */
- struct ieee80211_recv_hist in_recv_hist[IEEE80211_RECV_HIST_LEN];
- int32_t in_hist_cur;
- uint16_t in_txpower; /* current transmit power */
-
- /* header */
- uint8_t in_macaddr[IEEE80211_ADDR_LEN];
- uint8_t in_bssid[IEEE80211_ADDR_LEN];
-
- /* beacon, probe response */
- uint8_t in_tstamp[8]; /* from last rcv'd beacon */
- uint16_t in_intval; /* beacon interval */
- uint16_t in_capinfo; /* capabilities */
- uint8_t in_esslen;
- uint8_t in_essid[IEEE80211_NWID_LEN];
- struct ieee80211_rateset in_rates; /* negotiated rate set */
- uint8_t *in_country; /* country information */
- struct ieee80211channel *in_chan;
- uint16_t in_fhdwell; /* FH only */
- uint8_t in_fhindex; /* FH only */
- uint8_t in_erp; /* 11g only */
-
- /* DTIM and contention free period (CFP) */
- uint8_t in_dtimperiod;
- uint8_t in_cfpperiod; /* # of DTIMs between CFPs */
- uint16_t in_cfpduremain; /* remaining cfp duration */
- uint16_t in_cfpmaxduration; /* max CFP duration in TU */
- uint16_t in_nextdtim; /* time to next DTIM */
- uint16_t in_timoffset;
-
- /* others */
- uint16_t in_associd; /* assoc response */
- uint16_t in_txseq; /* seq to be transmitted */
- uint16_t in_rxseq; /* seq previous received */
- int32_t in_fails; /* failure count to associate */
- int32_t in_inact; /* inactivity mark count */
- int32_t in_txrate; /* index to in_rates[] */
-
- /* we're in the list of isc->isc_in_list */
- list_node_t in_node;
-
- /* we're in the list of isc->isc_inhash_list */
- list_node_t in_hash_node;
-};
-
-/* in_chan encoding for FH phy */
-#define IEEE80211_FH_CHANMOD 80
-#define IEEE80211_FH_CHAN(set, pat) \
- (((set)-1) * IEEE80211_FH_CHANMOD + (pat))
-#define IEEE80211_FH_CHANSET(chan) ((chan)/IEEE80211_FH_CHANMOD+1)
-#define IEEE80211_FH_CHANPAT(chan) ((chan)%IEEE80211_FH_CHANMOD)
-
-#define HEADERSPACE roundup(sizeof (struct ieee80211_frame) + \
- IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + \
- sizeof (struct ieee80211_llc) + 1, 4)
-
-struct ieee80211_wepkey {
- int32_t iwk_len;
- uint8_t iwk_key[IEEE80211_KEYBUF_SIZE];
-};
-
-typedef struct ieee80211com {
- /* The following items are not changed during their lifetime */
- gld_mac_info_t *isc_dev;
- struct ieee80211_rateset isc_sup_rates[IEEE80211_MODE_MAX];
- struct ieee80211channel isc_channels[IEEE80211_CHAN_MAX + 1];
- uint8_t isc_chan_avail[
- roundup(IEEE80211_CHAN_MAX, NBBY)];
- uint32_t isc_caps; /* capabilities */
- uint16_t isc_modecaps; /* set of mode capabilities */
- enum ieee80211_phytype isc_phytype; /* wrong for multi-mode */
- uint16_t isc_bmisstimeout; /* beacon miss threshold ms */
- uint16_t isc_scan_interval; /* scan interval(ms) */
- uint16_t isc_cali_interval; /* calibrate interval(ms) */
- uint16_t isc_ratectl_interval; /* rate ctl interval(ms) */
- int32_t (*isc_mgmt_send)(struct ieee80211com *, mblk_t *);
- void (*isc_recv_mgmt[16])(struct ieee80211com *, mblk_t *,
- int32_t, uint32_t, uint32_t);
- int32_t (*isc_send_mgmt[16])(struct ieee80211com *,
- struct ieee80211_node *, int32_t, int32_t);
- int32_t (*isc_new_state)(struct ieee80211com *,
- enum ieee80211_state);
- struct ieee80211_node *(*isc_node_alloc)(struct ieee80211com *);
- void (*isc_node_free)(struct ieee80211com *,
- struct ieee80211_node *);
- void (*isc_node_copy)(struct ieee80211_node *,
- const struct ieee80211_node *);
- void (*isc_calibrate)(struct ieee80211com *);
- void (*isc_rate_ctl)(struct ieee80211com *,
- struct ieee80211_node *);
- int (*isc_gld_send)(gld_mac_info_t *, mblk_t *);
- int (*isc_gld_reset)(gld_mac_info_t *);
- int (*isc_gld_start)(gld_mac_info_t *);
- int (*isc_gld_stop)(gld_mac_info_t *);
- int32_t (*isc_gld_saddr)(gld_mac_info_t *, uint8_t *macaddr);
- int (*isc_gld_set_promiscuous)(gld_mac_info_t *,
- int mode);
- int (*isc_gld_gstat)(gld_mac_info_t *,
- struct gld_stats *);
- int (*isc_gld_ioctl)(gld_mac_info_t *, queue_t *, mblk_t *);
- int (*isc_gld_set_multicast)(gld_mac_info_t *,
- uint8_t *, int);
- uint32_t (*isc_gld_intr)(gld_mac_info_t *);
-
- /*
- * The following items could only be
- * changed by ioctl after initialization.
- */
- uint8_t isc_macaddr[IEEE80211_ADDR_LEN];
- int32_t isc_fixed_rate; /* index to ic_sup_rates[] */
- uint16_t isc_rtsthreshold;
- uint16_t isc_fragthreshold;
- uint16_t isc_lintval; /* listen interval */
- uint16_t isc_txpower; /* tx power setting (dbM) */
- int32_t isc_des_esslen;
- uint8_t isc_des_essid[IEEE80211_NWID_LEN];
- struct ieee80211channel *isc_des_chan; /* desired channel */
- uint8_t isc_des_bssid[IEEE80211_ADDR_LEN];
- struct ieee80211_wepkey isc_nw_keys[IEEE80211_WEP_NKID];
- int32_t isc_wep_txkey; /* default tx key index */
- uint8_t isc_nickname[IEEE80211_NWID_LEN];
- int32_t isc_nicknamelen;
-
- /* The following items are changed dynamically */
- kthread_t *isc_mf_thread;
- uint32_t isc_mfthread_switch; /* 0/1 indicate off/on */
- kcondvar_t isc_mfthread_cv;
- kcondvar_t isc_scan_cv;
- int32_t isc_mgt_timeout; /* mgmt timeout */
- int32_t isc_inact_timeout; /* inactivity timer wait */
- uint8_t isc_chan_active[
- roundup(IEEE80211_CHAN_MAX, NBBY)];
- uint8_t isc_chan_scan[
- roundup(IEEE80211_CHAN_MAX, NBBY)];
- uint32_t isc_flags; /* state flags */
- uint16_t isc_curmode; /* current mode */
- enum ieee80211_opmode isc_opmode; /* operation mode */
- enum ieee80211_state isc_state; /* 802.11 state */
- struct ieee80211_node *isc_bss; /* info for this node */
- struct ieee80211channel *isc_ibss_chan; /* current channel */
- list_t isc_in_list; /* information of all nodes */
- list_t isc_inhash_list[IEEE80211_NODE_HASHSIZE];
- uint32_t isc_iv; /* initial vector for wep */
- kmutex_t isc_genlock; /* mutex for the whole struct */
-}ieee80211com_t;
-
-#define IEEE80211_SEND_MGMT(isc, in, type, arg) do { \
-if ((isc)->isc_send_mgmt[(type)>>IEEE80211_FC0_SUBTYPE_SHIFT] != NULL) \
- (*(isc)->isc_send_mgmt[(type)>>IEEE80211_FC0_SUBTYPE_SHIFT]) \
- (isc, in, type, arg); \
-_NOTE(CONSTANTCONDITION) \
-} while (0)
-
-#define IEEE80211_ADDR_EQ(a1, a2) (bcmp(a1, a2, IEEE80211_ADDR_LEN) == 0)
-#define IEEE80211_ADDR_COPY(dst, src) bcopy(src, dst, IEEE80211_ADDR_LEN)
-
-/* multicast, broadcast */
-#define ETHER_IS_MULTICAST(addr) (*(addr) & 0x01)
-#define IEEE80211_IS_MULTICAST(a) ETHER_IS_MULTICAST(a)
-
-/* ic_flags */
-#define IEEE80211_F_ASCAN 0x00000001 /* STATUS: active scan */
-#define IEEE80211_F_SIBSS 0x00000002 /* STATUS: start IBSS */
-#define IEEE80211_F_WEPON 0x00000100 /* CONF: WEP enabled */
-#define IEEE80211_F_IBSSON 0x00000200 /* CONF: IBSS creation enable */
-#define IEEE80211_F_PMGTON 0x00000400 /* CONF: Power mgmt enable */
-#define IEEE80211_F_DESBSSID 0x00000800 /* CONF: des_bssid is set */
-#define IEEE80211_F_SCANAP 0x00001000 /* CONF: Scanning AP */
-#define IEEE80211_F_ROAMING 0x00002000 /* CONF: roaming enabled */
-#define IEEE80211_F_SWRETRY 0x00004000 /* CONF: sw tx retry enabled */
-#define IEEE80211_F_TXPMGT 0x00018000 /* STATUS: tx power */
-#define IEEE80211_F_TXPOW_OFF 0x00000000 /* TX Power: radio disabled */
-#define IEEE80211_F_TXPOW_FIXED 0x00008000 /* TX Power: fixed rate */
-#define IEEE80211_F_TXPOW_AUTO 0x00010000 /* TX Power: undefined */
-#define IEEE80211_F_SHSLOT 0x00020000 /* CONF: short slot time */
-#define IEEE80211_F_SHPREAMBLE 0x00040000 /* CONF: short preamble */
-
-/* ic_capabilities */
-#define IEEE80211_C_WEP 0x00000001 /* CAPABILITY: WEP available */
-#define IEEE80211_C_IBSS 0x00000002 /* CAPABILITY: IBSS available */
-#define IEEE80211_C_PMGT 0x00000004 /* CAPABILITY: Power mgmt */
-#define IEEE80211_C_HOSTAP 0x00000008 /* CAPABILITY: HOSTAP avail */
-#define IEEE80211_C_AHDEMO 0x00000010 /* CAPABILITY: Old Adhoc Demo */
-#define IEEE80211_C_SWRETRY 0x00000020 /* CAPABILITY: sw tx retry */
-#define IEEE80211_C_TXPMGT 0x00000040 /* CAPABILITY: tx power mgmt */
-#define IEEE80211_C_SHSLOT 0x00000080 /* CAPABILITY: short slottime */
-#define IEEE80211_C_SHPREAMBLE 0x00000100 /* CAPABILITY: short preamble */
-
-/* flags for ieee80211_fix_rate() */
-#define IEEE80211_F_DOSORT 0x00000001 /* sort rate list */
-#define IEEE80211_F_DOFRATE 0x00000002 /* use fixed rate */
-#define IEEE80211_F_DONEGO 0x00000004 /* calc negotiated rate */
-#define IEEE80211_F_DODEL 0x00000008 /* delete ignore rate */
-
-int32_t ieee80211_ifattach(gld_mac_info_t *);
-void ieee80211_ifdetach(gld_mac_info_t *);
-void ieee80211_input(ieee80211com_t *, mblk_t *,
- int32_t, uint32_t, uint32_t);
-int32_t ieee80211_mgmt_output(ieee80211com_t *, struct ieee80211_node *,
- mblk_t *, int32_t);
-mblk_t *ieee80211_fill_header(ieee80211com_t *isc, mblk_t *mp_gld,
- int32_t wep_txkey, struct ieee80211_node *in);
-mblk_t *ieee80211_decap(mblk_t *);
-extern const int8_t *ieee80211_essid_sprintf(uint8_t *, uint32_t);
-void ieee80211_dump_pkt(uint8_t *, int32_t, int32_t, int32_t);
-struct ieee80211_node *ieee80211_find_node(ieee80211com_t *, uint8_t *);
-struct ieee80211_node *ieee80211_lookup_node(ieee80211com_t *,
- uint8_t *macaddr, struct ieee80211channel *);
-
-/*
- * The following functions are almost the same, except that we should
- * already hold isc_genlock before calling _ieee80211_new_state.
- */
-int ieee80211_new_state(ieee80211com_t *, enum ieee80211_state, int32_t);
-int _ieee80211_new_state(ieee80211com_t *, enum ieee80211_state, int32_t);
-
-uint32_t ieee80211_mhz2ieee(uint32_t, uint32_t);
-uint32_t ieee80211_chan2ieee(ieee80211com_t *, struct ieee80211channel *);
-uint32_t ieee80211_ieee2mhz(uint32_t, uint32_t);
-enum ieee80211_phymode ieee80211_chan2mode(ieee80211com_t *,
- struct ieee80211channel *);
-const int8_t *ieee80211_ether_sprintf(const uint8_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ATH_IEEE80211_H */
diff --git a/usr/src/uts/common/io/ath/ath_impl.h b/usr/src/uts/common/io/ath/ath_impl.h
index 13c574accb..b99cfbd238 100644
--- a/usr/src/uts/common/io/ath/ath_impl.h
+++ b/usr/src/uts/common/io/ath/ath_impl.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -56,8 +56,9 @@ extern "C" {
* Defintions for the Atheros Wireless LAN controller driver.
*/
+#include <sys/note.h>
#include <sys/list.h>
-#include "ath_ieee80211.h"
+#include <sys/net80211.h>
#include "ath_hal.h"
/*
@@ -211,6 +212,7 @@ struct dma_area {
typedef struct dma_area dma_area_t;
struct ath_buf {
+ int bf_flags; /* tx descriptor flags */
struct ath_desc *bf_desc; /* virtual addr of desc */
uint32_t bf_daddr; /* physical addr of desc */
dma_area_t bf_dma; /* dma area for buf */
@@ -251,7 +253,8 @@ typedef struct ath {
uint32_t asc_invalid : 1, /* being detached */
asc_mrretry : 1, /* multi-rate retry support */
asc_have11g : 1, /* have 11g support */
- asc_splitmic : 1; /* Split TKIP mic keys */
+ asc_splitmic : 1, /* Split TKIP mic keys */
+ asc_hasclrkey: 1; /* CLR key supported */
const HAL_RATE_TABLE *asc_rates[IEEE80211_MODE_MAX]; /* h/w rate */
ddi_acc_handle_t asc_cfg_handle; /* DDI I/O handle */
@@ -283,6 +286,7 @@ typedef struct ath {
const HAL_RATE_TABLE *asc_currates; /* current rate table */
enum ieee80211_phymode asc_curmode; /* current phy mode */
+ HAL_CHANNEL asc_curchan; /* current h/w channel */
uint8_t asc_rixmap[256]; /* IEEE to h/w rate table ix */
HAL_INT asc_imask; /* interrupt mask copy */
struct ath_stats asc_stats; /* interface statistics */
@@ -291,12 +295,22 @@ typedef struct ath {
uint32_t asc_mfilt[2];
kmutex_t asc_genlock;
- uint32_t asc_need_gld_sched;
- kmutex_t asc_gld_sched_lock;
+ boolean_t asc_resched_needed;
+ kmutex_t asc_resched_lock;
+
+ timeout_id_t asc_scan_timer;
+ int (*asc_newstate)(ieee80211com_t *,
+ enum ieee80211_state, int);
} ath_t;
#define ATH_STATE(macinfo) ((ath_t *)((macinfo)->gldm_private))
+#define ATH_LOCK(_asc) mutex_enter(&(_asc)->asc_genlock)
+#define ATH_UNLOCK(_asc) mutex_exit(&(_asc)->asc_genlock)
+#define ATH_LOCK_ASSERT(_asc) ASSERT(mutex_owned(&(_asc)->asc_genlock))
+
+#define ATH_IS_RUNNING(_asc) ((_asc)->asc_invalid == 0)
+
/* Debug and log functions */
void ath_dbg(uint32_t dbg_flags, const char *fmt, ...); /* debug function */
void ath_log(const char *fmt, ...); /* event log function */
diff --git a/usr/src/uts/common/io/ath/ath_main.c b/usr/src/uts/common/io/ath/ath_main.c
index 4add9a873b..936c6cdaf6 100644
--- a/usr/src/uts/common/io/ath/ath_main.c
+++ b/usr/src/uts/common/io/ath/ath_main.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -41,66 +41,57 @@
/*
* Driver for the Atheros Wireless LAN controller.
*
- * The Atheros driver can be devided into 2 parts: H/W related(we called LLD:
- * Low Level Driver) and IEEE80211 protocol related(we called IEEE80211),
- * and each part has several sub modules.
+ * The Atheros driver calls into net80211 module for IEEE80211 protocol
+ * management functionalities. The driver includes a LLD(Low Level Driver)
+ * part to implement H/W related operations.
* The following is the high level structure of ath driver.
* (The arrows between modules indicate function call direction.)
*
*
- * ^ |
- * | | GLD thread
- * | V
- * ================== =========================================
- * |[1] | |[2] |
- * | | | GLD Callback functions registered |
- * | IEEE80211 | ========================= by |
- * | | | | IEEE80211 |
- * | Internal | V | |
- * ========= | |======================== | |
- * |[3] | | Functions | | |
- * | | | | | |
- * |Multi- | ========================================== =================
- * | | ^ | | |
- * |Func | | V V V
- * | | ====================== ------------------------------------
- * |Thread | |[4] | |[5] |
- * | |-->| Functions exported | | IEEE80211 Callback functions |
- * | | | by IEEE80211 | | registered by LLD |
- * ========= ====================== ------------------------------------
- * ^ |
- * | V
- * -------------------------------------------------------------
- * |[6] |
- * | LLD Internal functions |
- * | |
- * -------------------------------------------------------------
- * ^
- * | Software interrupt thread
- * |
+ * |
+ * | GLD thread
+ * V
+ * ================== =========================================
+ * | | |[1] |
+ * | | | GLDv3 Callback functions registered |
+ * | Net80211 | ========================= by |
+ * | module | | | driver |
+ * | | V | |
+ * | |======================== | |
+ * | Functions exported by net80211 | | |
+ * | | | |
+ * ========================================== =================
+ * | |
+ * V |
+ * +----------------------------------+ |
+ * |[2] | |
+ * | Net80211 Callback functions | |
+ * | registered by LLD | |
+ * +----------------------------------+ |
+ * | |
+ * V v
+ * +-----------------------------------------------------------+
+ * |[3] |
+ * | LLD Internal functions |
+ * | |
+ * +-----------------------------------------------------------+
+ * ^
+ * | Software interrupt thread
+ * |
*
- * Modules 1/2/3/4 constitute part IEEE80211, and modules 5/6 constitute LLD.
* The short description of each module is as below:
- * Module 1: IEEE80211 Internal functions, including ieee80211 state
- * machine, convert functions between 802.3 frame and
- * 802.11 frame, and node maintain function, etc.
- * Module 2: GLD callback functions, which are intercepting the calls from
- * GLD to LLD, and adding IEEE80211's mutex protection.
- * Module 3: Multi-func thread, which is responsible for scan timing,
- * rate control timing and calibrate timing.
- * Module 4: Functions exported by IEEE80211, which can be called from
- * other modules.
- * Module 5: IEEE80211 callback functions registered by LLD, which include
- * GLD related callbacks and some other functions needed by
- * IEEE80211.
- * Module 6: LLD Internal functions, which are responsible for allocing
+ * Module 1: GLD callback functions, which are intercepting the calls from
+ * GLD to LLD.
+ * Module 2: Net80211 callback functions registered by LLD, which
+ * calls into LLD for H/W related functions needed by net80211.
+ * Module 3: LLD Internal functions, which are responsible for allocing
* descriptor/buffer, handling interrupt and other H/W
* operations.
*
* All functions are running in 3 types of thread:
* 1. GLD callbacks threads, such as ioctl, intr, etc.
- * 2. Multi-Func thread in IEEE80211 which is responsible for scan,
- * rate control and calibrate.
+ * 2. Clock interruptt thread which is responsible for scan, rate control and
+ * calibration.
* 3. Software Interrupt thread originated in LLD.
*
* The lock strategy is as below:
@@ -117,40 +108,9 @@
* operational data in ath_softc struct and HAL accesses.
* It is acquired by the interupt handler and most "mode-ctrl" routines.
*
- * In ieee80211com struct, isc_genlock is a general lock to protect
- * necessary data and functions in ieee80211_com struct. Some data in
- * ieee802.11_com don't need protection. For example, isc_dev is writen
- * only in ath_attach(), but read in many other functions, so protection
- * is not necessary.
- *
* Any of the locks can be acquired singly, but where multiple
* locks are acquired, they *must* be in the order:
- *
- * isc_genlock >> asc_genlock >> asc_txqlock[i] >>
- * asc_txbuflock >> asc_rxbuflock
- *
- * Note:
- * 1. All the IEEE80211 callback functions(except isc_gld_intr)
- * registered by LLD in module [5] are protected by isc_genlock before
- * calling from IEEE80211.
- * 2. Module [4] have 3 important functions ieee80211_input(),
- * ieee80211_new_state() and _ieee80211_new_state().
- * The functions in module [6] should avoid holding mutex or other locks
- * during the call to ieee80211_input().
- * In particular, the soft interrupt thread that calls ieee80211_input()
- * may in some cases carry out processing that includes sending an outgoing
- * packet, resulting in a call to the driver's ath_mgmt_send() routine.
- * If the ath_mgmt_send() routine were to try to acquire a mutex being held
- * by soft interrupt thread at the time it calls ieee80211_input(),
- * this could result in a panic due to recursive mutex entry.
- * ieee80211_new_state() and _ieee80211_new_state() are almost the same
- * except that the latter function asserts isc_genlock is owned in its entry.
- * so ieee80211_new_state() is only called by ath_bmiss_handler()
- * from soft interrupt handler thread.
- * As the same reason to ieee80211_input, we can't hold any other mutex.
- * 3. *None* of these locks may be held across calls out to the
- * GLD routines gld_recv() in ieee80211_input().
- *
+ * asc_genlock >> asc_txqlock[i] >> asc_txbuflock >> asc_rxbuflock
*/
#include <sys/param.h>
@@ -174,7 +134,7 @@
#include <sys/sunddi.h>
#include <sys/pci.h>
#include <sys/errno.h>
-#include <sys/gld.h>
+#include <sys/mac.h>
#include <sys/dlpi.h>
#include <sys/ethernet.h>
#include <sys/list.h>
@@ -185,11 +145,14 @@
#include <inet/nd.h>
#include <inet/mi.h>
#include <inet/wifi_ioctl.h>
+#include <sys/mac_wifi.h>
#include "ath_hal.h"
#include "ath_impl.h"
#include "ath_aux.h"
#include "ath_rate.h"
+#define ATH_MAX_RSSI 63 /* max rssi */
+
extern void ath_halfix_init(void);
extern void ath_halfix_finit(void);
extern int32_t ath_getset(ath_t *asc, mblk_t *mp, uint32_t cmd);
@@ -230,12 +193,31 @@ static ddi_dma_attr_t dma_attr = {
0 /* dma_attr_flags */
};
-static uint8_t ath_broadcast_addr[] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-};
-
static kmutex_t ath_loglock;
static void *ath_soft_state_p = NULL;
+static int ath_dwelltime = 150; /* scan interval, ms */
+
+static int ath_m_stat(void *, uint_t, uint64_t *);
+static int ath_m_start(void *);
+static void ath_m_stop(void *);
+static int ath_m_promisc(void *, boolean_t);
+static int ath_m_multicst(void *, boolean_t, const uint8_t *);
+static int ath_m_unicst(void *, const uint8_t *);
+static mblk_t *ath_m_tx(void *, mblk_t *);
+static void ath_m_ioctl(void *, queue_t *, mblk_t *);
+static mac_callbacks_t ath_m_callbacks = {
+ MC_IOCTL,
+ ath_m_stat,
+ ath_m_start,
+ ath_m_stop,
+ ath_m_promisc,
+ ath_m_multicst,
+ ath_m_unicst,
+ ath_m_tx,
+ NULL, /* mc_resources; */
+ ath_m_ioctl,
+ NULL /* mc_getcapab */
+};
/*
* Available debug flags:
@@ -300,6 +282,7 @@ ath_setup_desc(ath_t *asc, struct ath_buf *bf)
ds = bf->bf_desc;
ds->ds_link = bf->bf_daddr;
ds->ds_data = bf->bf_dma.cookie.dmac_address;
+ ds->ds_vdata = bf->bf_dma.mem_va;
ATH_HAL_SETUPRXDESC(asc->asc_ah, ds,
bf->bf_dma.alength, /* buffer size */
0);
@@ -434,7 +417,8 @@ ath_desc_alloc(dev_info_t *devinfo, ath_t *asc)
list_insert_tail(&asc->asc_txbuf_list, bf);
/* alloc DMA memory */
- err = ath_alloc_dma_mem(devinfo, size, &ath_desc_accattr,
+ err = ath_alloc_dma_mem(devinfo, asc->asc_dmabuf_size,
+ &ath_desc_accattr,
DDI_DMA_STREAMING, DDI_DMA_STREAMING, &bf->bf_dma);
if (err != DDI_SUCCESS)
return (err);
@@ -490,16 +474,17 @@ ath_printrxbuf(struct ath_buf *bf, int32_t done)
static void
ath_rx_handler(ath_t *asc)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_buf *bf;
struct ath_hal *ah = asc->asc_ah;
struct ath_desc *ds;
mblk_t *rx_mp;
- struct ieee80211_frame *wh, whbuf;
+ struct ieee80211_frame *wh;
int32_t len, loop = 1;
uint8_t phyerr;
HAL_STATUS status;
HAL_NODE_STATS hal_node_stats;
+ struct ieee80211_node *in;
do {
mutex_enter(&asc->asc_rxbuflock);
@@ -564,7 +549,7 @@ ath_rx_handler(ath_t *asc)
rx_mp->b_wptr += len;
wh = (struct ieee80211_frame *)rx_mp->b_rptr;
- if ((wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
+ if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
IEEE80211_FC0_TYPE_CTL) {
/*
* Ignore control frame received in promisc mode.
@@ -574,32 +559,25 @@ ath_rx_handler(ath_t *asc)
}
/* Remove the CRC at the end of IEEE80211 frame */
rx_mp->b_wptr -= IEEE80211_CRC_LEN;
- if (wh->ifrm_fc[1] & IEEE80211_FC1_WEP) {
- /*
- * WEP is decrypted by hardware. Clear WEP bit
- * and trim WEP header for ieee80211_input().
- */
- wh->ifrm_fc[1] &= ~IEEE80211_FC1_WEP;
- bcopy(wh, &whbuf, sizeof (whbuf));
- /*
- * Remove WEP related fields between
- * header and payload.
- */
- rx_mp->b_rptr += IEEE80211_WEP_IVLEN +
- IEEE80211_WEP_KIDLEN;
- bcopy(&whbuf, rx_mp->b_rptr, sizeof (whbuf));
- /*
- * Remove WEP CRC from the tail.
- */
- rx_mp->b_wptr -= IEEE80211_WEP_CRCLEN;
- }
#ifdef DEBUG
ath_printrxbuf(bf, status == HAL_OK);
#endif /* DEBUG */
- ieee80211_input(isc, rx_mp,
+ /*
+ * Locate the node for sender, track state, and then
+ * pass the (referenced) node up to the 802.11 layer
+ * for its use.
+ */
+ in = ieee80211_find_rxnode(ic, wh);
+
+ /*
+ * Send frame up for processing.
+ */
+ (void) ieee80211_input(ic, rx_mp, in,
ds->ds_rxstat.rs_rssi,
- ds->ds_rxstat.rs_tstamp,
- ds->ds_rxstat.rs_antenna);
+ ds->ds_rxstat.rs_tstamp);
+
+ ieee80211_free_node(in);
+
rx_next:
mutex_enter(&asc->asc_rxbuflock);
list_insert_tail(&asc->asc_rxbuf_list, bf);
@@ -608,8 +586,7 @@ rx_next:
} while (loop);
/* rx signal state monitoring */
- ATH_HAL_RXMONITOR(ah, &hal_node_stats);
- ATH_HAL_RXENA(ah); /* in case of RXEOL */
+ ATH_HAL_RXMONITOR(ah, &hal_node_stats, &asc->asc_curchan);
}
static void
@@ -628,27 +605,28 @@ ath_printtxbuf(struct ath_buf *bf, int done)
/*
* The input parameter mp has following assumption:
- * the first mblk is for ieee80211 header, and there has enough space left
- * for WEP option at the end of this mblk.
- * The continue mblks are for payload.
+ * For data packets, GLDv3 mac_wifi plugin allocates and fills the
+ * ieee80211 header. For management packets, net80211 allocates and
+ * fills the ieee80211 header. In both cases, enough spaces in the
+ * header are left for encryption option.
*/
static int32_t
-ath_xmit(ath_t *asc, struct ieee80211_node *in,
- struct ath_buf *bf, mblk_t *mp, mblk_t *mp_header)
+ath_tx_start(ath_t *asc, struct ieee80211_node *in, struct ath_buf *bf,
+ mblk_t *mp)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ieee80211_frame *wh;
struct ath_hal *ah = asc->asc_ah;
- uint32_t subtype, flags, ctsduration, antenna;
+ uint32_t subtype, flags, ctsduration;
int32_t keyix, iswep, hdrlen, pktlen, mblen, mbslen, try0;
- uint8_t rix, cix, txrate, ctsrate, *tmp_ptr;
+ uint8_t rix, cix, txrate, ctsrate;
struct ath_desc *ds;
struct ath_txq *txq;
HAL_PKT_TYPE atype;
const HAL_RATE_TABLE *rt;
HAL_BOOL shortPreamble;
- mblk_t *mp0;
struct ath_node *an;
+ caddr_t dest;
/*
* CRC are added by H/W, not encaped by driver,
@@ -656,62 +634,71 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
*/
pktlen = IEEE80211_CRC_LEN;
- wh = (struct ieee80211_frame *)mp_header->b_rptr;
- iswep = wh->ifrm_fc[1] & IEEE80211_FC1_WEP;
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ iswep = wh->i_fc[1] & IEEE80211_FC1_WEP;
keyix = HAL_TXKEYIX_INVALID;
hdrlen = sizeof (struct ieee80211_frame);
- if (iswep) {
- hdrlen += IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN;
- pktlen += IEEE80211_WEP_CRCLEN;
- keyix = isc->isc_wep_txkey;
- }
- tmp_ptr = (uint8_t *)bf->bf_dma.mem_va;
+ if (iswep != 0) {
+ const struct ieee80211_cipher *cip;
+ struct ieee80211_key *k;
- /* Copy 80211 header from mblk to DMA txbuf */
- mblen = mp_header->b_wptr - mp_header->b_rptr;
- bcopy(mp_header->b_rptr, tmp_ptr, mblen);
- tmp_ptr += mblen;
- pktlen += mblen;
- mbslen = mblen;
-
- /*
- * If mp==NULL, then it's a management frame,
- * else it's a data frame.
- */
- if (mp != NULL) {
/*
- * Copy the first mblk to DMA txbuf
- * (this mblk includes ether header).
+ * Construct the 802.11 header+trailer for an encrypted
+ * frame. The only reason this can fail is because of an
+ * unknown or unsupported cipher/key type.
*/
- mblen = mp->b_wptr - mp->b_rptr - sizeof (struct ether_header);
- bcopy(mp->b_rptr + sizeof (struct ether_header),
- tmp_ptr, mblen);
- tmp_ptr += mblen;
- pktlen += mblen;
- mbslen += mblen;
-
- /* Copy subsequent mblks to DMA txbuf */
- for (mp0 = mp->b_cont; mp0 != NULL; mp0 = mp0->b_cont) {
- mblen = mp0->b_wptr - mp0->b_rptr;
- bcopy(mp0->b_rptr, tmp_ptr, mblen);
- tmp_ptr += mblen;
- pktlen += mblen;
- mbslen += mblen;
+ k = ieee80211_crypto_encap(ic, mp);
+ if (k == NULL) {
+ ATH_DEBUG((ATH_DBG_AUX, "crypto_encap failed\n"));
+ /*
+ * This can happen when the key is yanked after the
+ * frame was queued. Just discard the frame; the
+ * 802.11 layer counts failures and provides
+ * debugging/diagnostics.
+ */
+ return (EIO);
}
+ cip = k->wk_cipher;
+ /*
+ * Adjust the packet + header lengths for the crypto
+ * additions and calculate the h/w key index. When
+ * a s/w mic is done the frame will have had any mic
+ * added to it prior to entry so m0->m_pkthdr.len above will
+ * account for it. Otherwise we need to add it to the
+ * packet length.
+ */
+ hdrlen += cip->ic_header;
+ pktlen += cip->ic_header + cip->ic_trailer;
+ if ((k->wk_flags & IEEE80211_KEY_SWMIC) == 0)
+ pktlen += cip->ic_miclen;
+ keyix = k->wk_keyix;
+
+ /* packet header may have moved, reset our local pointer */
+ wh = (struct ieee80211_frame *)mp->b_rptr;
}
+ dest = bf->bf_dma.mem_va;
+ for (; mp != NULL; mp = mp->b_cont) {
+ mblen = MBLKL(mp);
+ bcopy(mp->b_rptr, dest, mblen);
+ dest += mblen;
+ }
+ mbslen = dest - bf->bf_dma.mem_va;
+ pktlen += mbslen;
+
bf->bf_in = in;
/* setup descriptors */
ds = bf->bf_desc;
rt = asc->asc_currates;
+ ASSERT(rt != NULL);
/*
* The 802.11 layer marks whether or not we should
* use short preamble based on the current mode and
* negotiated parameters.
*/
- if ((isc->isc_flags & IEEE80211_F_SHPREAMBLE) &&
+ if ((ic->ic_flags & IEEE80211_F_SHPREAMBLE) &&
(in->in_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE)) {
shortPreamble = AH_TRUE;
asc->asc_stats.ast_tx_shortpre++;
@@ -725,9 +712,9 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
* Calculate Atheros packet type from IEEE80211 packet header
* and setup for rate calculations.
*/
- switch (wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) {
+ switch (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) {
case IEEE80211_FC0_TYPE_MGT:
- subtype = wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
+ subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
if (subtype == IEEE80211_FC0_SUBTYPE_BEACON)
atype = HAL_PKT_TYPE_BEACON;
else if (subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP)
@@ -747,7 +734,7 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
break;
case IEEE80211_FC0_TYPE_CTL:
atype = HAL_PKT_TYPE_PSPOLL;
- subtype = wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
+ subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
rix = 0; /* lowest rate */
try0 = ATH_TXMAXTRY;
if (shortPreamble)
@@ -777,10 +764,10 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
* Calculate miscellaneous flags.
*/
flags = HAL_TXDESC_CLRDMASK;
- if (IEEE80211_IS_MULTICAST(wh->ifrm_addr1)) {
+ if (IEEE80211_IS_MULTICAST(wh->i_addr1)) {
flags |= HAL_TXDESC_NOACK; /* no ack on broad/multicast */
asc->asc_stats.ast_tx_noack++;
- } else if (pktlen > isc->isc_rtsthreshold) {
+ } else if (pktlen > ic->ic_rtsthreshold) {
flags |= HAL_TXDESC_RTSENA; /* RTS based on frame length */
asc->asc_stats.ast_tx_rts++;
}
@@ -790,12 +777,12 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
* layer but it lacks sufficient information to calculate it.
*/
if ((flags & HAL_TXDESC_NOACK) == 0 &&
- (wh->ifrm_fc[0] & IEEE80211_FC0_TYPE_MASK) !=
+ (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) !=
IEEE80211_FC0_TYPE_CTL) {
uint16_t dur;
dur = ath_hal_computetxtime(ah, rt, IEEE80211_ACK_SIZE,
rix, shortPreamble);
- *(uint16_t *)wh->ifrm_dur = LE_16(dur);
+ *(uint16_t *)wh->i_dur = LE_16(dur);
}
/*
@@ -832,17 +819,6 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
} else
ctsrate = 0;
- /*
- * For now use the antenna on which the last good
- * frame was received on. We assume this field is
- * initialized to 0 which gives us ``auto'' or the
- * ``default'' antenna.
- */
- if (an->an_tx_antenna)
- antenna = an->an_tx_antenna;
- else
- antenna = in->in_recv_hist[in->in_hist_cur].irh_rantenna;
-
if (++txq->axq_intrcnt >= ATH_TXINTR_PERIOD) {
flags |= HAL_TXDESC_INTREQ;
txq->axq_intrcnt = 0;
@@ -857,18 +833,19 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
atype, /* Atheros packet type */
MIN(in->in_txpower, 60), /* txpower */
txrate, try0, /* series 0 rate/tries */
- keyix,
- antenna, /* antenna mode */
+ keyix, /* key cache index */
+ an->an_tx_antenna, /* antenna mode */
flags, /* flags */
ctsrate, /* rts/cts rate */
ctsduration); /* rts/cts duration */
+ bf->bf_flags = flags;
ATH_DEBUG((ATH_DBG_SEND, "ath: ath_xmit(): to %s totlen=%d "
"an->an_tx_rate1sp=%d tx_rate2sp=%d tx_rate3sp=%d "
"qnum=%d rix=%d sht=%d dur = %d\n",
- ieee80211_ether_sprintf(wh->ifrm_addr1), mbslen, an->an_tx_rate1sp,
+ ieee80211_macaddr_sprintf(wh->i_addr1), mbslen, an->an_tx_rate1sp,
an->an_tx_rate2sp, an->an_tx_rate3sp,
- txq->axq_qnum, rix, shortPreamble, *(uint16_t *)wh->ifrm_dur));
+ txq->axq_qnum, rix, shortPreamble, *(uint16_t *)wh->i_dur));
/*
* Setup the multi-rate retry state only when we're
@@ -905,94 +882,153 @@ ath_xmit(ath_t *asc, struct ieee80211_node *in,
ATH_HAL_TXSTART(ah, txq->axq_qnum);
+ ic->ic_stats.is_tx_frags++;
+ ic->ic_stats.is_tx_bytes += pktlen;
+
return (0);
}
-
+/*
+ * Transmit a management frame. On failure we reclaim the skbuff.
+ * Note that management frames come directly from the 802.11 layer
+ * and do not honor the send queue flow control. Need to investigate
+ * using priority queueing so management frames can bypass data.
+ */
static int
-ath_gld_send(gld_mac_info_t *gld_p, mblk_t *mp)
+ath_xmit(ieee80211com_t *ic, mblk_t *mp, uint8_t type)
{
- int err;
- ath_t *asc = ATH_STATE(gld_p);
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in;
- mblk_t *mp_header;
+ ath_t *asc = (ath_t *)ic;
+ struct ath_hal *ah = asc->asc_ah;
+ struct ieee80211_node *in = NULL;
struct ath_buf *bf = NULL;
+ struct ieee80211_frame *wh;
+ int error = 0;
- /*
- * No data frames go out unless we're associated; this
- * should not happen as the 802.11 layer does not enable
- * the xmit queue until we enter the RUN state.
- */
- if (isc->isc_state != IEEE80211_S_RUN) {
- ATH_DEBUG((ATH_DBG_SEND, "ath: ath_gld_send(): "
- "discard, state %u\n", isc->isc_state));
- asc->asc_stats.ast_tx_discard++;
- return (GLD_NOLINK);
- }
-
- /*
- * Only supports STA mode
- */
- if (isc->isc_opmode != IEEE80211_M_STA)
- return (GLD_NOLINK);
+ ASSERT(mp->b_next == NULL);
- /*
- * Locate AP information, so we can fill MAC address.
- */
- in = isc->isc_bss;
- in->in_inact = 0;
-
- /*
- * Grab a TX buffer.
- */
+ /* Grab a TX buffer */
mutex_enter(&asc->asc_txbuflock);
bf = list_head(&asc->asc_txbuf_list);
-
if (bf != NULL)
list_remove(&asc->asc_txbuf_list, bf);
+ if (list_empty(&asc->asc_txbuf_list)) {
+ ATH_DEBUG((ATH_DBG_SEND, "ath: ath_mgmt_send(): "
+ "stop queue\n"));
+ asc->asc_stats.ast_tx_qstop++;
+ }
mutex_exit(&asc->asc_txbuflock);
-
if (bf == NULL) {
- ATH_DEBUG((ATH_DBG_SEND, "ath: ath_gld_send(): "
- "no TX DMA buffer available: 100 times\n"));
- asc->asc_stats.ast_tx_nobuf++;
-
- mutex_enter(&asc->asc_gld_sched_lock);
- asc->asc_need_gld_sched = 1;
- mutex_exit(&asc->asc_gld_sched_lock);
- return (GLD_NORESOURCES);
+ ATH_DEBUG((ATH_DBG_SEND, "ath: ath_mgmt_send(): discard, "
+ "no xmit buf\n"));
+ ic->ic_stats.is_tx_nobuf++;
+ if ((type & IEEE80211_FC0_TYPE_MASK) ==
+ IEEE80211_FC0_TYPE_DATA) {
+ asc->asc_stats.ast_tx_nobuf++;
+ mutex_enter(&asc->asc_resched_lock);
+ asc->asc_resched_needed = B_TRUE;
+ mutex_exit(&asc->asc_resched_lock);
+ } else {
+ asc->asc_stats.ast_tx_nobufmgt++;
+ freemsg(mp);
+ }
+ return (ENOMEM);
}
- mp_header = ieee80211_fill_header(isc, mp, isc->isc_wep_txkey, in);
- if (mp_header == NULL) {
- /* Push back the TX buf */
- mutex_enter(&asc->asc_txbuflock);
- list_insert_tail(&asc->asc_txbuf_list, bf);
- mutex_exit(&asc->asc_txbuflock);
- return (GLD_FAILURE);
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+
+ /* Locate node */
+ in = ieee80211_find_txnode(ic, wh->i_addr1);
+ if (in == NULL) {
+ error = EIO;
+ goto bad;
}
- err = ath_xmit(asc, in, bf, mp, mp_header);
- freemsg(mp_header);
+ in->in_inact = 0;
+ switch (type & IEEE80211_FC0_TYPE_MASK) {
+ case IEEE80211_FC0_TYPE_DATA:
+ (void) ieee80211_encap(ic, mp, in);
+ break;
+ default:
+ if ((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
+ IEEE80211_FC0_SUBTYPE_PROBE_RESP) {
+ /* fill time stamp */
+ uint64_t tsf;
+ uint32_t *tstamp;
+
+ tsf = ATH_HAL_GETTSF64(ah);
+ /* adjust 100us delay to xmit */
+ tsf += 100;
+ tstamp = (uint32_t *)&wh[1];
+ tstamp[0] = LE_32(tsf & 0xffffffff);
+ tstamp[1] = LE_32(tsf >> 32);
+ }
+ asc->asc_stats.ast_tx_mgmt++;
+ break;
+ }
- if (!err) {
+ error = ath_tx_start(asc, in, bf, mp);
+ if (error != 0) {
+bad:
+ ic->ic_stats.is_tx_failed++;
+ if (bf != NULL) {
+ mutex_enter(&asc->asc_txbuflock);
+ list_insert_tail(&asc->asc_txbuf_list, bf);
+ mutex_exit(&asc->asc_txbuflock);
+ }
+ }
+ if (in != NULL)
+ ieee80211_free_node(in);
+ if ((type & IEEE80211_FC0_TYPE_MASK) != IEEE80211_FC0_TYPE_DATA ||
+ error == 0) {
freemsg(mp);
- return (GLD_SUCCESS);
- } else {
- return (GLD_FAILURE);
}
+
+ return (error);
}
-static void
+static mblk_t *
+ath_m_tx(void *arg, mblk_t *mp)
+{
+ ath_t *asc = arg;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
+ mblk_t *next;
+
+ /*
+ * No data frames go out unless we're associated; this
+ * should not happen as the 802.11 layer does not enable
+ * the xmit queue until we enter the RUN state.
+ */
+ if (ic->ic_state != IEEE80211_S_RUN) {
+ ATH_DEBUG((ATH_DBG_SEND, "ath: ath_m_tx(): "
+ "discard, state %u\n", ic->ic_state));
+ asc->asc_stats.ast_tx_discard ++;
+ return (mp);
+ }
+
+ while (mp != NULL) {
+ next = mp->b_next;
+ mp->b_next = NULL;
+
+ if (ath_xmit(ic, mp, IEEE80211_FC0_TYPE_DATA) != 0) {
+ mp->b_next = next;
+ break;
+ }
+ mp = next;
+ }
+
+ return (mp);
+
+}
+
+static int
ath_tx_processq(ath_t *asc, struct ath_txq *txq)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
struct ath_buf *bf;
struct ath_desc *ds;
struct ieee80211_node *in;
- int32_t sr, lr;
+ int32_t sr, lr, nacked = 0;
HAL_STATUS status;
struct ath_node *an;
@@ -1050,22 +1086,39 @@ ath_tx_processq(ath_t *asc, struct ath_txq *txq)
lr = ds->ds_txstat.ts_longretry;
asc->asc_stats.ast_tx_shortretry += sr;
asc->asc_stats.ast_tx_longretry += lr;
- an->an_tx_retr += sr + lr;
+ /*
+ * Hand the descriptor to the rate control algorithm.
+ */
+ if ((ds->ds_txstat.ts_status & HAL_TXERR_FILT) == 0 &&
+ (bf->bf_flags & HAL_TXDESC_NOACK) == 0) {
+ /*
+ * If frame was ack'd update the last rx time
+ * used to workaround phantom bmiss interrupts.
+ */
+ if (ds->ds_txstat.ts_status == 0) {
+ nacked++;
+ an->an_tx_ok++;
+ } else {
+ an->an_tx_err++;
+ }
+ an->an_tx_retr += sr + lr;
+ }
}
bf->bf_in = NULL;
mutex_enter(&asc->asc_txbuflock);
list_insert_tail(&asc->asc_txbuf_list, bf);
mutex_exit(&asc->asc_txbuflock);
- mutex_enter(&asc->asc_gld_sched_lock);
/*
* Reschedule stalled outbound packets
*/
- if (asc->asc_need_gld_sched) {
- asc->asc_need_gld_sched = 0;
- gld_sched(isc->isc_dev);
+ mutex_enter(&asc->asc_resched_lock);
+ if (asc->asc_resched_needed) {
+ asc->asc_resched_needed = B_FALSE;
+ mac_tx_update(ic->ic_mach);
}
- mutex_exit(&asc->asc_gld_sched_lock);
+ mutex_exit(&asc->asc_resched_lock);
}
+ return (nacked);
}
@@ -1079,16 +1132,16 @@ ath_tx_handler(ath_t *asc)
*/
for (i = 0; i < HAL_NUM_TX_QUEUES; i++) {
if (ATH_TXQ_SETUP(asc, i)) {
- ath_tx_processq(asc, &asc->asc_txq[i]);
+ (void) ath_tx_processq(asc, &asc->asc_txq[i]);
}
}
}
static struct ieee80211_node *
-ath_node_alloc(ieee80211com_t *isc)
+ath_node_alloc(ieee80211com_t *ic)
{
struct ath_node *an;
- ath_t *asc = (ath_t *)isc;
+ ath_t *asc = (ath_t *)ic;
an = kmem_zalloc(sizeof (struct ath_node), KM_SLEEP);
ath_rate_update(asc, &an->an_node, 0);
@@ -1096,9 +1149,10 @@ ath_node_alloc(ieee80211com_t *isc)
}
static void
-ath_node_free(ieee80211com_t *isc, struct ieee80211_node *in)
+ath_node_free(struct ieee80211_node *in)
{
- ath_t *asc = (ath_t *)isc;
+ ieee80211com_t *ic = in->in_ic;
+ ath_t *asc = (ath_t *)ic;
struct ath_buf *bf;
struct ath_txq *txq;
int32_t i;
@@ -1117,93 +1171,40 @@ ath_node_free(ieee80211com_t *isc, struct ieee80211_node *in)
mutex_exit(&txq->axq_lock);
}
}
+ ic->ic_node_cleanup(in);
kmem_free(in, sizeof (struct ath_node));
}
static void
-ath_node_copy(struct ieee80211_node *dst, const struct ieee80211_node *src)
+ath_next_scan(void *arg)
{
- bcopy(src, dst, sizeof (struct ieee80211_node));
+ ieee80211com_t *ic = arg;
+ ath_t *asc = (ath_t *)ic;
+
+ asc->asc_scan_timer = 0;
+ if (ic->ic_state == IEEE80211_S_SCAN) {
+ asc->asc_scan_timer = timeout(ath_next_scan, (void *)asc,
+ drv_usectohz(ath_dwelltime * 1000));
+ ieee80211_next_scan(ic);
+ }
}
-/*
- * Transmit a management frame. On failure we reclaim the skbuff.
- * Note that management frames come directly from the 802.11 layer
- * and do not honor the send queue flow control. Need to investigate
- * using priority queueing so management frames can bypass data.
- */
-static int32_t
-ath_mgmt_send(ieee80211com_t *isc, mblk_t *mp)
+static void
+ath_stop_scantimer(ath_t *asc)
{
- ath_t *asc = (ath_t *)isc;
- struct ath_hal *ah = asc->asc_ah;
- struct ieee80211_node *in;
- struct ath_buf *bf = NULL;
- struct ieee80211_frame *wh;
- int32_t error = 0;
-
- /* Grab a TX buffer */
- mutex_enter(&asc->asc_txbuflock);
- bf = list_head(&asc->asc_txbuf_list);
- if (bf != NULL)
- list_remove(&asc->asc_txbuf_list, bf);
- if (list_empty(&asc->asc_txbuf_list)) {
- ATH_DEBUG((ATH_DBG_SEND, "ath: ath_mgmt_send(): "
- "stop queue\n"));
- asc->asc_stats.ast_tx_qstop++;
- }
- mutex_exit(&asc->asc_txbuflock);
- if (bf == NULL) {
- ATH_DEBUG((ATH_DBG_SEND, "ath: ath_mgmt_send(): discard, "
- "no xmit buf\n"));
- asc->asc_stats.ast_tx_nobufmgt++;
- goto bad;
- }
- wh = (struct ieee80211_frame *)mp->b_rptr;
- if ((wh->ifrm_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
- IEEE80211_FC0_SUBTYPE_PROBE_RESP) {
- /* fill time stamp */
- uint64_t tsf;
- uint32_t *tstamp;
-
- tsf = ATH_HAL_GETTSF64(ah);
- /* adjust 100us delay to xmit */
- tsf += 100;
- tstamp = (uint32_t *)&wh[1];
- tstamp[0] = LE_32(tsf & 0xffffffff);
- tstamp[1] = LE_32(tsf >> 32);
- }
- /*
- * Locate node state. When operating
- * in station mode we always use ic_bss.
- */
- if (isc->isc_opmode != IEEE80211_M_STA) {
- in = ieee80211_find_node(isc, wh->ifrm_addr1);
- if (in == NULL)
- in = isc->isc_bss;
- } else
- in = isc->isc_bss;
+ timeout_id_t tmp_id = 0;
- error = ath_xmit(asc, in, bf, NULL, mp);
- if (error == 0) {
- asc->asc_stats.ast_tx_mgmt++;
- freemsg(mp);
- return (0);
+ while ((asc->asc_scan_timer != 0) && (tmp_id != asc->asc_scan_timer)) {
+ tmp_id = asc->asc_scan_timer;
+ (void) untimeout(tmp_id);
}
-bad:
- if (bf != NULL) {
- mutex_enter(&asc->asc_txbuflock);
- list_insert_tail(&asc->asc_txbuf_list, bf);
- mutex_exit(&asc->asc_txbuflock);
- }
- freemsg(mp);
- return (error);
+ asc->asc_scan_timer = 0;
}
static int32_t
-ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
+ath_newstate(ieee80211com_t *ic, enum ieee80211_state nstate, int arg)
{
- ath_t *asc = (ath_t *)isc;
+ ath_t *asc = (ath_t *)ic;
struct ath_hal *ah = asc->asc_ah;
struct ieee80211_node *in;
int32_t i, error;
@@ -1218,36 +1219,44 @@ ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
HAL_LED_ASSOC, /* IEEE80211_S_ASSOC */
HAL_LED_RUN, /* IEEE80211_S_RUN */
};
- if (asc->asc_invalid == 1)
+ if (!ATH_IS_RUNNING(asc))
return (0);
- ostate = isc->isc_state;
+ ostate = ic->ic_state;
+ if (nstate != IEEE80211_S_SCAN)
+ ath_stop_scantimer(asc);
+ ATH_LOCK(asc);
ATH_HAL_SETLEDSTATE(ah, leds[nstate]); /* set LED */
if (nstate == IEEE80211_S_INIT) {
asc->asc_imask &= ~(HAL_INT_SWBA | HAL_INT_BMISS);
- ATH_HAL_INTRSET(ah, asc->asc_imask);
- error = 0; /* cheat + use error return */
- goto bad;
+ ATH_HAL_INTRSET(ah, asc->asc_imask &~ HAL_INT_GLOBAL);
+ ATH_UNLOCK(asc);
+ goto done;
+ }
+ in = ic->ic_bss;
+ error = ath_chan_set(asc, ic->ic_curchan);
+ if (error != 0) {
+ if (nstate != IEEE80211_S_SCAN) {
+ ATH_UNLOCK(asc);
+ ieee80211_reset_chan(ic);
+ goto bad;
+ }
}
- in = isc->isc_bss;
- error = ath_chan_set(asc, in->in_chan);
- if (error != 0)
- goto bad;
rfilt = ath_calcrxfilter(asc);
if (nstate == IEEE80211_S_SCAN)
- bssid = isc->isc_macaddr;
+ bssid = ic->ic_macaddr;
else
bssid = in->in_bssid;
ATH_HAL_SETRXFILTER(ah, rfilt);
- if (nstate == IEEE80211_S_RUN && isc->isc_opmode != IEEE80211_M_IBSS)
+ if (nstate == IEEE80211_S_RUN && ic->ic_opmode != IEEE80211_M_IBSS)
ATH_HAL_SETASSOCID(ah, bssid, in->in_associd);
else
ATH_HAL_SETASSOCID(ah, bssid, 0);
- if (isc->isc_flags & IEEE80211_F_WEPON) {
+ if (ic->ic_flags & IEEE80211_F_PRIVACY) {
for (i = 0; i < IEEE80211_WEP_NKID; i++) {
if (ATH_HAL_KEYISVALID(ah, i))
ATH_HAL_KEYSETMAC(ah, i, bssid);
@@ -1267,7 +1276,7 @@ ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
*/
ath_rate_ctl_reset(asc, nstate);
- if (nstate == IEEE80211_S_RUN) {
+ if (nstate == IEEE80211_S_RUN && (ostate != IEEE80211_S_RUN)) {
nvlist_t *attr_list = NULL;
sysevent_id_t eid;
int32_t err = 0;
@@ -1277,11 +1286,11 @@ ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
ATH_DEBUG((ATH_DBG_80211, "ath: ath new state(RUN): "
"ic_flags=0x%08x iv=%d"
" bssid=%s capinfo=0x%04x chan=%d\n",
- isc->isc_flags,
+ ic->ic_flags,
in->in_intval,
- ieee80211_ether_sprintf(in->in_bssid),
+ ieee80211_macaddr_sprintf(in->in_bssid),
in->in_capinfo,
- ieee80211_chan2ieee(isc, in->in_chan)));
+ ieee80211_chan2ieee(ic, in->in_chan)));
(void) sprintf(str_value, "%s%s%d", "-i ",
ddi_driver_name(asc->asc_dev),
@@ -1304,7 +1313,23 @@ ath_new_state(ieee80211com_t *isc, enum ieee80211_state nstate)
}
}
- return (0);
+ ATH_UNLOCK(asc);
+done:
+ /*
+ * Invoke the parent method to complete the work.
+ */
+ error = asc->asc_newstate(ic, nstate, arg);
+ /*
+ * Finally, start any timers.
+ */
+ if (nstate == IEEE80211_S_RUN) {
+ ieee80211_start_watchdog(ic, 1);
+ } else if ((nstate == IEEE80211_S_SCAN) && (ostate != nstate)) {
+ /* start ap/neighbor scan timer */
+ ASSERT(asc->asc_scan_timer == 0);
+ asc->asc_scan_timer = timeout(ath_next_scan, (void *)asc,
+ drv_usectohz(ath_dwelltime * 1000));
+ }
bad:
return (error);
}
@@ -1314,23 +1339,13 @@ bad:
* for temperature/environment changes.
*/
static void
-ath_calibrate(ieee80211com_t *isc)
+ath_calibrate(ath_t *asc)
{
- ath_t *asc = (ath_t *)isc;
struct ath_hal *ah = asc->asc_ah;
- struct ieee80211channel *ch;
- HAL_CHANNEL hchan;
+ HAL_BOOL iqcaldone;
asc->asc_stats.ast_per_cal++;
- /*
- * Convert to a HAL channel description with the flags
- * constrained to reflect the current operating mode.
- */
- ch = isc->isc_ibss_chan;
- hchan.channel = ch->ich_freq;
- hchan.channelFlags = ath_chan2flags(isc, ch);
-
if (ATH_HAL_GETRFGAIN(ah) == HAL_RFGAIN_NEED_CHANGE) {
/*
* Rfgain is out of bounds, reset the chip
@@ -1339,29 +1354,77 @@ ath_calibrate(ieee80211com_t *isc)
ATH_DEBUG((ATH_DBG_HAL, "ath: ath_calibrate(): "
"Need change RFgain\n"));
asc->asc_stats.ast_per_rfgain++;
- ath_reset(asc);
+ (void) ath_reset(&asc->asc_isc);
}
- if (!ATH_HAL_CALIBRATE(ah, &hchan)) {
+ if (!ATH_HAL_CALIBRATE(ah, &asc->asc_curchan, &iqcaldone)) {
ATH_DEBUG((ATH_DBG_HAL, "ath: ath_calibrate(): "
"calibration of channel %u failed\n",
- ch->ich_freq));
+ asc->asc_curchan.channel));
asc->asc_stats.ast_per_calfail++;
}
}
+static void
+ath_watchdog(void *arg)
+{
+ ath_t *asc = arg;
+ ieee80211com_t *ic = &asc->asc_isc;
+ int ntimer = 0;
+
+ ATH_LOCK(asc);
+ ic->ic_watchdog_timer = 0;
+ if (!ATH_IS_RUNNING(asc)) {
+ ATH_UNLOCK(asc);
+ return;
+ }
+
+ if (ic->ic_state == IEEE80211_S_RUN) {
+ /* periodic recalibration */
+ ath_calibrate(asc);
+
+ /*
+ * Start the background rate control thread if we
+ * are not configured to use a fixed xmit rate.
+ */
+ if (ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) {
+ asc->asc_stats.ast_rate_calls ++;
+ if (ic->ic_opmode == IEEE80211_M_STA)
+ ath_rate_ctl(ic, ic->ic_bss);
+ else
+ ieee80211_iterate_nodes(&ic->ic_sta,
+ ath_rate_cb, asc);
+ }
+
+ ntimer = 1;
+ }
+ ATH_UNLOCK(asc);
+
+ ieee80211_watchdog(ic);
+ if (ntimer != 0)
+ ieee80211_start_watchdog(ic, ntimer);
+}
+
static uint_t
-ath_gld_intr(gld_mac_info_t *gld_p)
+ath_intr(caddr_t arg)
{
- ath_t *asc = ATH_STATE(gld_p);
+ ath_t *asc = (ath_t *)arg;
struct ath_hal *ah = asc->asc_ah;
HAL_INT status;
- enum ieee80211_state isc_state;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
- mutex_enter(&asc->asc_genlock);
+ ATH_LOCK(asc);
+
+ if (!ATH_IS_RUNNING(asc)) {
+ /*
+ * The hardware is not ready/present, don't touch anything.
+ * Note this can happen early on if the IRQ is shared.
+ */
+ ATH_UNLOCK(asc);
+ return (DDI_INTR_UNCLAIMED);
+ }
if (!ATH_HAL_INTRPEND(ah)) { /* shared irq, not for us */
- mutex_exit(&asc->asc_genlock);
+ ATH_UNLOCK(asc);
return (DDI_INTR_UNCLAIMED);
}
@@ -1369,11 +1432,9 @@ ath_gld_intr(gld_mac_info_t *gld_p)
status &= asc->asc_imask;
if (status & HAL_INT_FATAL) {
asc->asc_stats.ast_hardware++;
- mutex_exit(&asc->asc_genlock);
goto reset;
} else if (status & HAL_INT_RXORN) {
asc->asc_stats.ast_rxorn++;
- mutex_exit(&asc->asc_genlock);
goto reset;
} else {
if (status & HAL_INT_RXEOL) {
@@ -1384,6 +1445,7 @@ ath_gld_intr(gld_mac_info_t *gld_p)
asc->asc_stats.ast_txurn++;
ATH_HAL_UPDATETXTRIGLEVEL(ah, AH_TRUE);
}
+
if (status & HAL_INT_RX) {
asc->asc_rx_pend = 1;
ddi_trigger_softintr(asc->asc_softint_id);
@@ -1391,19 +1453,15 @@ ath_gld_intr(gld_mac_info_t *gld_p)
if (status & HAL_INT_TX) {
ath_tx_handler(asc);
}
-
- mutex_exit(&asc->asc_genlock);
+ ATH_UNLOCK(asc);
if (status & HAL_INT_SWBA) {
/* This will occur only in Host-AP or Ad-Hoc mode */
return (DDI_INTR_CLAIMED);
}
if (status & HAL_INT_BMISS) {
- mutex_enter(&isc->isc_genlock);
- isc_state = isc->isc_state;
- mutex_exit(&isc->isc_genlock);
- if (isc_state == IEEE80211_S_RUN) {
- (void) ieee80211_new_state(isc,
+ if (ic->ic_state == IEEE80211_S_RUN) {
+ (void) ieee80211_new_state(ic,
IEEE80211_S_ASSOC, -1);
}
}
@@ -1411,9 +1469,8 @@ ath_gld_intr(gld_mac_info_t *gld_p)
return (DDI_INTR_CLAIMED);
reset:
- mutex_enter(&isc->isc_genlock);
- ath_reset(asc);
- mutex_exit(&isc->isc_genlock);
+ (void) ath_reset(ic);
+ ATH_UNLOCK(asc);
return (DDI_INTR_CLAIMED);
}
@@ -1426,14 +1483,14 @@ ath_softint_handler(caddr_t data)
* Check if the soft interrupt is triggered by another
* driver at the same level.
*/
- mutex_enter(&asc->asc_genlock);
+ ATH_LOCK(asc);
if (asc->asc_rx_pend) { /* Soft interrupt for this driver */
asc->asc_rx_pend = 0;
- mutex_exit(&asc->asc_genlock);
- ath_rx_handler((ath_t *)data);
+ ATH_UNLOCK(asc);
+ ath_rx_handler(asc);
return (DDI_INTR_CLAIMED);
}
- mutex_exit(&asc->asc_genlock);
+ ATH_UNLOCK(asc);
return (DDI_INTR_UNCLAIMED);
}
@@ -1448,56 +1505,69 @@ ath_softint_handler(caddr_t data)
* and to reset the hardware when rf gain settings must be reset.
*/
-static int
-ath_gld_reset(gld_mac_info_t *gld_p)
-{
- ath_t *asc = ATH_STATE(gld_p);
-
- ath_reset(asc);
- return (GLD_SUCCESS);
-}
-
-
-static int
-ath_gld_stop(gld_mac_info_t *gld_p)
+static void
+ath_stop_locked(ath_t *asc)
{
- ath_t *asc = ATH_STATE(gld_p);
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
- (void) _ieee80211_new_state(isc, IEEE80211_S_INIT, -1);
+ ATH_LOCK_ASSERT(asc);
+ /*
+ * Shutdown the hardware and driver:
+ * reset 802.11 state machine
+ * turn off timers
+ * disable interrupts
+ * turn off the radio
+ * clear transmit machinery
+ * clear receive machinery
+ * drain and release tx queues
+ * reclaim beacon resources
+ * power down hardware
+ *
+ * Note that some of this work is not possible if the
+ * hardware is gone (invalid).
+ */
+ ATH_UNLOCK(asc);
+ ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
+ ieee80211_stop_watchdog(ic);
+ ATH_LOCK(asc);
ATH_HAL_INTRSET(ah, 0);
ath_draintxq(asc);
- if (! asc->asc_invalid)
+ if (ATH_IS_RUNNING(asc)) {
ath_stoprecv(asc);
- else
+ ATH_HAL_PHYDISABLE(ah);
+ } else {
asc->asc_rxlink = NULL;
- ATH_HAL_SETPOWER(ah, HAL_PM_FULL_SLEEP, 0);
+ }
+}
- asc->asc_invalid = 1;
+static void
+ath_m_stop(void *arg)
+{
+ ath_t *asc = arg;
+ struct ath_hal *ah = asc->asc_ah;
- return (GLD_SUCCESS);
+ ATH_LOCK(asc);
+ ath_stop_locked(asc);
+ ATH_HAL_SETPOWER(ah, HAL_PM_AWAKE);
+ asc->asc_invalid = 1;
+ ATH_UNLOCK(asc);
}
int
-ath_gld_start(gld_mac_info_t *gld_p)
+ath_m_start(void *arg)
{
- int ret;
- ath_t *asc = ATH_STATE(gld_p);
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in;
- enum ieee80211_phymode mode;
+ ath_t *asc = arg;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ath_hal *ah = asc->asc_ah;
HAL_STATUS status;
- HAL_CHANNEL hchan;
+ ATH_LOCK(asc);
/*
* Stop anything previously setup. This is safe
* whether this is the first time through or not.
*/
- ret = ath_gld_stop(gld_p);
- if (ret != GLD_SUCCESS)
- return (ret);
+ ath_stop_locked(asc);
/*
* The basic interface to setting the hardware in a good
@@ -1506,25 +1576,17 @@ ath_gld_start(gld_mac_info_t *gld_p)
* be followed by initialization of the appropriate bits
* and then setup of the interrupt mask.
*/
- hchan.channel = isc->isc_ibss_chan->ich_freq;
- hchan.channelFlags = ath_chan2flags(isc, isc->isc_ibss_chan);
- if (!ATH_HAL_RESET(ah, (HAL_OPMODE)isc->isc_opmode,
- &hchan, AH_FALSE, &status)) {
- ATH_DEBUG((ATH_DBG_HAL, "ath: ath_gld_start(): "
- "unable to reset hardware, hal status %u\n", status));
- return (GLD_FAILURE);
+ asc->asc_curchan.channel = ic->ic_curchan->ich_freq;
+ asc->asc_curchan.channelFlags = ath_chan2flags(ic, ic->ic_curchan);
+ if (!ATH_HAL_RESET(ah, (HAL_OPMODE)ic->ic_opmode,
+ &asc->asc_curchan, AH_FALSE, &status)) {
+ ATH_DEBUG((ATH_DBG_HAL, "ath: ath_m_start(): "
+ "reset hardware failed, hal status %u\n", status));
+ ATH_UNLOCK(asc);
+ return (ENOTACTIVE);
}
- /*
- * Setup the hardware after reset: the key cache
- * is filled as needed and the receive engine is
- * set going. Frame transmit is handled entirely
- * in the frame output path; there's nothing to do
- * here except setup the interrupt mask.
- */
- ath_initkeytable(asc);
- if (ath_startrecv(asc))
- return (GLD_FAILURE);
+ (void) ath_startrecv(asc);
/*
* Enable interrupts.
@@ -1534,27 +1596,24 @@ ath_gld_start(gld_mac_info_t *gld_p)
| HAL_INT_FATAL | HAL_INT_GLOBAL;
ATH_HAL_INTRSET(ah, asc->asc_imask);
- isc->isc_state = IEEE80211_S_INIT;
+ ic->ic_state = IEEE80211_S_INIT;
/*
* The hardware should be ready to go now so it's safe
* to kick the 802.11 state machine as it's likely to
* immediately call back to us to send mgmt frames.
*/
- in = isc->isc_bss;
- in->in_chan = isc->isc_ibss_chan;
- mode = ieee80211_chan2mode(isc, in->in_chan);
- if (mode != asc->asc_curmode)
- ath_setcurmode(asc, mode);
+ ath_chan_change(asc, ic->ic_curchan);
asc->asc_invalid = 0;
- return (GLD_SUCCESS);
+ ATH_UNLOCK(asc);
+ return (0);
}
-static int32_t
-ath_gld_saddr(gld_mac_info_t *gld_p, unsigned char *macaddr)
+static int
+ath_m_unicst(void *arg, const uint8_t *macaddr)
{
- ath_t *asc = ATH_STATE(gld_p);
+ ath_t *asc = arg;
struct ath_hal *ah = asc->asc_ah;
ATH_DEBUG((ATH_DBG_GLD, "ath: ath_gld_saddr(): "
@@ -1562,54 +1621,50 @@ ath_gld_saddr(gld_mac_info_t *gld_p, unsigned char *macaddr)
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]));
- IEEE80211_ADDR_COPY(asc->asc_isc.isc_macaddr, macaddr);
- ATH_HAL_SETMAC(ah, asc->asc_isc.isc_macaddr);
+ ATH_LOCK(asc);
+ IEEE80211_ADDR_COPY(asc->asc_isc.ic_macaddr, macaddr);
+ ATH_HAL_SETMAC(ah, asc->asc_isc.ic_macaddr);
- ath_reset(asc);
- return (GLD_SUCCESS);
+ (void) ath_reset(&asc->asc_isc);
+ ATH_UNLOCK(asc);
+ return (0);
}
static int
-ath_gld_set_promiscuous(gld_mac_info_t *macinfo, int mode)
+ath_m_promisc(void *arg, boolean_t on)
{
- ath_t *asc = ATH_STATE(macinfo);
+ ath_t *asc = arg;
struct ath_hal *ah = asc->asc_ah;
uint32_t rfilt;
+ ATH_LOCK(asc);
rfilt = ATH_HAL_GETRXFILTER(ah);
- switch (mode) {
- case GLD_MAC_PROMISC_PHYS:
- ATH_HAL_SETRXFILTER(ah, rfilt | HAL_RX_FILTER_PROM);
- break;
- case GLD_MAC_PROMISC_MULTI:
- rfilt |= HAL_RX_FILTER_MCAST;
+ if (on)
+ rfilt |= HAL_RX_FILTER_PROM;
+ else
rfilt &= ~HAL_RX_FILTER_PROM;
- ATH_HAL_SETRXFILTER(ah, rfilt);
- break;
- case GLD_MAC_PROMISC_NONE:
- ATH_HAL_SETRXFILTER(ah, rfilt & (~HAL_RX_FILTER_PROM));
- break;
- default:
- break;
- }
+ ATH_HAL_SETRXFILTER(ah, rfilt);
+ ATH_UNLOCK(asc);
- return (GLD_SUCCESS);
+ return (0);
}
static int
-ath_gld_set_multicast(gld_mac_info_t *macinfo, uchar_t *mca, int flag)
+ath_m_multicst(void *arg, boolean_t add, const uint8_t *mca)
{
+ ath_t *asc = arg;
+ struct ath_hal *ah = asc->asc_ah;
uint32_t mfilt[2], val, rfilt;
uint8_t pos;
- ath_t *asc = ATH_STATE(macinfo);
- struct ath_hal *ah = asc->asc_ah;
+ ATH_LOCK(asc);
rfilt = ATH_HAL_GETRXFILTER(ah);
/* disable multicast */
- if (flag == GLD_MULTI_DISABLE) {
+ if (!add) {
ATH_HAL_SETRXFILTER(ah, rfilt & (~HAL_RX_FILTER_MCAST));
- return (GLD_SUCCESS);
+ ATH_UNLOCK(asc);
+ return (0);
}
/* enable multicast */
@@ -1626,117 +1681,104 @@ ath_gld_set_multicast(gld_mac_info_t *macinfo, uchar_t *mca, int flag)
mfilt[pos / 32] |= (1 << (pos % 32));
ATH_HAL_SETMCASTFILTER(ah, mfilt[0], mfilt[1]);
- return (GLD_SUCCESS);
+ ATH_UNLOCK(asc);
+ return (0);
}
static void
-ath_wlan_ioctl(ath_t *asc, queue_t *wq, mblk_t *mp, uint32_t cmd)
+ath_m_ioctl(void *arg, queue_t *wq, mblk_t *mp)
{
-
- struct iocblk *iocp = (struct iocblk *)mp->b_rptr;
- uint32_t len, ret;
- mblk_t *mp1;
-
- /* sanity check */
- if (iocp->ioc_count == 0 || !(mp1 = mp->b_cont)) {
- miocnak(wq, mp, 0, EINVAL);
- return;
- }
-
- /* assuming single data block */
- if (mp1->b_cont) {
- freemsg(mp1->b_cont);
- mp1->b_cont = NULL;
+ ath_t *asc = arg;
+ int32_t err;
+
+ err = ieee80211_ioctl(&asc->asc_isc, wq, mp);
+ ATH_LOCK(asc);
+ if (err == ENETRESET) {
+ if (ATH_IS_RUNNING(asc)) {
+ ATH_UNLOCK(asc);
+ (void) ath_m_start(asc);
+ (void) ieee80211_new_state(&asc->asc_isc,
+ IEEE80211_S_SCAN, -1);
+ ATH_LOCK(asc);
+ }
}
-
- /* we will overwrite everything */
- mp1->b_wptr = mp1->b_rptr;
-
- ret = ath_getset(asc, mp1, cmd);
-
- len = msgdsize(mp1);
-
- miocack(wq, mp, len, ret);
+ ATH_UNLOCK(asc);
}
static int
-ath_gld_ioctl(gld_mac_info_t *gld_p, queue_t *wq, mblk_t *mp)
+ath_m_stat(void *arg, uint_t stat, uint64_t *val)
{
- struct iocblk *iocp;
- int32_t cmd, err;
- ath_t *asc = ATH_STATE(gld_p);
- boolean_t need_privilege;
+ ath_t *asc = arg;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
+ struct ieee80211_node *in = ic->ic_bss;
+ struct ieee80211_rateset *rs = &in->in_rates;
- /*
- * Validate the command before bothering with the mutexen ...
- */
- iocp = (struct iocblk *)mp->b_rptr;
- cmd = iocp->ioc_cmd;
- need_privilege = B_TRUE;
- switch (cmd) {
- case WLAN_SET_PARAM:
- case WLAN_COMMAND:
+ ATH_LOCK(asc);
+ switch (stat) {
+ case MAC_STAT_IFSPEED:
+ *val = (rs->ir_rates[in->in_txrate] & IEEE80211_RATE_VAL) / 2 *
+ 1000000ull;
+ break;
+ case MAC_STAT_NOXMTBUF:
+ *val = asc->asc_stats.ast_tx_nobuf +
+ asc->asc_stats.ast_tx_nobufmgt;
break;
- case WLAN_GET_PARAM:
- need_privilege = B_FALSE;
+ case MAC_STAT_IERRORS:
+ *val = asc->asc_stats.ast_rx_tooshort;
break;
+ case MAC_STAT_OERRORS:
+ *val = asc->asc_stats.ast_tx_fifoerr +
+ asc->asc_stats.ast_tx_xretries;
+ break;
+ case MAC_STAT_RBYTES:
+ *val = ic->ic_stats.is_rx_bytes;
+ break;
+ case MAC_STAT_IPACKETS:
+ *val = ic->ic_stats.is_rx_frags;
+ break;
+ case MAC_STAT_OBYTES:
+ *val = ic->ic_stats.is_tx_bytes;
+ break;
+ case MAC_STAT_OPACKETS:
+ *val = ic->ic_stats.is_tx_frags;
+ break;
+ case WIFI_STAT_TX_FAILED:
+ *val = asc->asc_stats.ast_tx_fifoerr +
+ asc->asc_stats.ast_tx_xretries;
+ break;
+ case WIFI_STAT_TX_RETRANS:
+ *val = asc->asc_stats.ast_tx_xretries;
+ break;
+ case WIFI_STAT_FCS_ERRORS:
+ *val = asc->asc_stats.ast_rx_crcerr;
+ break;
+ case WIFI_STAT_WEP_ERRORS:
+ *val = asc->asc_stats.ast_rx_badcrypt;
+ break;
+ case WIFI_STAT_TX_FRAGS:
+ case WIFI_STAT_MCAST_TX:
+ case WIFI_STAT_RTS_SUCCESS:
+ case WIFI_STAT_RTS_FAILURE:
+ case WIFI_STAT_ACK_FAILURE:
+ case WIFI_STAT_RX_FRAGS:
+ case WIFI_STAT_MCAST_RX:
+ case WIFI_STAT_RX_DUPS:
+ ATH_UNLOCK(asc);
+ return (ieee80211_stat(ic, stat, val));
default:
- ATH_DEBUG((ATH_DBG_GLD, "ath: ath_gld_ioctl(): "
- "unknown cmd 0x%x", cmd));
- miocnak(wq, mp, 0, EINVAL);
- return (GLD_SUCCESS);
- }
-
- if (need_privilege) {
- /*
- * Check for specific net_config privilege on Solaris 10+.
- * Otherwise just check for root access ...
- */
- if (secpolicy_net_config != NULL)
- err = secpolicy_net_config(iocp->ioc_cr, B_FALSE);
- else
- err = drv_priv(iocp->ioc_cr);
- if (err != 0) {
- miocnak(wq, mp, 0, err);
- return (GLD_SUCCESS);
- }
+ ATH_UNLOCK(asc);
+ return (ENOTSUP);
}
+ ATH_UNLOCK(asc);
- ath_wlan_ioctl(asc, wq, mp, cmd);
- return (GLD_SUCCESS);
-}
-
-static int
-ath_gld_gstat(gld_mac_info_t *gld_p, struct gld_stats *glds_p)
-{
- ath_t *asc = ATH_STATE(gld_p);
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
- struct ath_node *an = ATH_NODE(in);
- struct ieee80211_rateset *rs = &in->in_rates;
-
- glds_p->glds_crc = asc->asc_stats.ast_rx_crcerr;
- glds_p->glds_multircv = 0;
- glds_p->glds_multixmt = 0;
- glds_p->glds_excoll = 0;
- glds_p->glds_xmtretry = an->an_tx_retr;
- glds_p->glds_defer = 0;
- glds_p->glds_noxmtbuf = asc->asc_stats.ast_tx_nobuf;
- glds_p->glds_norcvbuf = asc->asc_stats.ast_rx_fifoerr;
- glds_p->glds_short = asc->asc_stats.ast_rx_tooshort;
- glds_p->glds_missed = asc->asc_stats.ast_rx_badcrypt;
- glds_p->glds_speed = 1000000*(rs->ir_rates[in->in_txrate] &
- IEEE80211_RATE_VAL) / 2;
- glds_p->glds_duplex = GLD_DUPLEX_FULL;
-
- return (GLD_SUCCESS);
+ return (0);
}
static int
ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
{
ath_t *asc;
- ieee80211com_t *isc;
+ ieee80211com_t *ic;
struct ath_hal *ah;
uint8_t csz;
HAL_STATUS status;
@@ -1747,33 +1789,28 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
int32_t ath_countrycode = CTRY_DEFAULT; /* country code */
int32_t err, ath_regdomain = 0; /* regulatory domain */
char strbuf[32];
+ int instance;
+ wifi_data_t wd = { 0 };
+ mac_register_t *macp;
- switch (cmd) {
- case DDI_RESUME:
+ if (cmd != DDI_ATTACH)
return (DDI_FAILURE);
- case DDI_ATTACH:
- break;
- default:
- return (DDI_FAILURE);
- }
- if (ddi_soft_state_zalloc(ath_soft_state_p,
- ddi_get_instance(devinfo)) != DDI_SUCCESS) {
+ instance = ddi_get_instance(devinfo);
+ if (ddi_soft_state_zalloc(ath_soft_state_p, instance) != DDI_SUCCESS) {
ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
"Unable to alloc softstate\n"));
return (DDI_FAILURE);
}
asc = ddi_get_soft_state(ath_soft_state_p, ddi_get_instance(devinfo));
- isc = (ieee80211com_t *)asc;
+ ic = (ieee80211com_t *)asc;
asc->asc_dev = devinfo;
- ath_halfix_init();
-
mutex_init(&asc->asc_genlock, NULL, MUTEX_DRIVER, NULL);
mutex_init(&asc->asc_txbuflock, NULL, MUTEX_DRIVER, NULL);
mutex_init(&asc->asc_rxbuflock, NULL, MUTEX_DRIVER, NULL);
- mutex_init(&asc->asc_gld_sched_lock, NULL, MUTEX_DRIVER, NULL);
+ mutex_init(&asc->asc_resched_lock, NULL, MUTEX_DRIVER, NULL);
err = pci_config_setup(devinfo, &asc->asc_cfg_handle);
if (err != DDI_SUCCESS) {
@@ -1883,7 +1920,7 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
ath_rate_setup(asc, IEEE80211_MODE_11A);
ath_rate_setup(asc, IEEE80211_MODE_11B);
ath_rate_setup(asc, IEEE80211_MODE_11G);
- ath_rate_setup(asc, IEEE80211_MODE_TURBO);
+ ath_rate_setup(asc, IEEE80211_MODE_TURBO_A);
/* Setup here so ath_rate_update is happy */
ath_setcurmode(asc, IEEE80211_MODE_11A);
@@ -1899,55 +1936,56 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
if (ath_txq_setup(asc))
goto attach_fail4;
- ATH_HAL_GETMAC(ah, asc->asc_isc.isc_macaddr);
+ ATH_HAL_GETMAC(ah, ic->ic_macaddr);
- /* setup gld */
- if ((isc->isc_dev = gld_mac_alloc(devinfo)) == NULL) {
- ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
- "gld_mac_alloc = %p\n", (void *)isc->isc_dev));
- goto attach_fail4;
- }
-
- /* pre initialize some variables for isc */
- isc->isc_dev->gldm_private = (caddr_t)asc;
-
- isc->isc_gld_reset = ath_gld_reset;
- isc->isc_gld_start = ath_gld_start;
- isc->isc_gld_stop = ath_gld_stop;
- isc->isc_gld_saddr = ath_gld_saddr;
- isc->isc_gld_send = ath_gld_send;
- isc->isc_gld_set_promiscuous = ath_gld_set_promiscuous;
- isc->isc_gld_gstat = ath_gld_gstat;
- isc->isc_gld_ioctl = ath_gld_ioctl;
- isc->isc_gld_set_multicast = ath_gld_set_multicast;
- isc->isc_gld_intr = ath_gld_intr;
-
- isc->isc_mgmt_send = ath_mgmt_send;
- isc->isc_new_state = ath_new_state;
- isc->isc_phytype = IEEE80211_T_OFDM;
- isc->isc_opmode = IEEE80211_M_STA;
- isc->isc_caps = IEEE80211_C_WEP | IEEE80211_C_IBSS |
- IEEE80211_C_HOSTAP;
+ /*
+ * Initialize pointers to device specific functions which
+ * will be used by the generic layer.
+ */
/* 11g support is identified when we fetch the channel set */
if (asc->asc_have11g)
- isc->isc_caps |= IEEE80211_C_SHPREAMBLE;
- isc->isc_node_alloc = ath_node_alloc;
- isc->isc_node_free = ath_node_free;
- isc->isc_node_copy = ath_node_copy;
- isc->isc_rate_ctl = ath_rate_ctl;
- isc->isc_calibrate = ath_calibrate;
- (void) ieee80211_ifattach(isc->isc_dev);
-
- isc->isc_dev->gldm_devinfo = devinfo;
- isc->isc_dev->gldm_vendor_addr = asc->asc_isc.isc_macaddr;
- isc->isc_dev->gldm_broadcast_addr = ath_broadcast_addr;
- isc->isc_dev->gldm_ident = "Atheros driver";
- isc->isc_dev->gldm_type = DL_ETHER;
- isc->isc_dev->gldm_minpkt = 0;
- isc->isc_dev->gldm_maxpkt = 1500;
- isc->isc_dev->gldm_addrlen = ETHERADDRL;
- isc->isc_dev->gldm_saplen = -2;
- isc->isc_dev->gldm_ppa = ddi_get_instance(devinfo);
+ ic->ic_caps |= IEEE80211_C_SHPREAMBLE;
+ /*
+ * Query the hal to figure out h/w crypto support.
+ */
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_WEP))
+ ic->ic_caps |= IEEE80211_C_WEP;
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_AES_OCB))
+ ic->ic_caps |= IEEE80211_C_AES;
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_AES_CCM))
+ ic->ic_caps |= IEEE80211_C_AES_CCM;
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_CKIP)) {
+ ic->ic_caps |= IEEE80211_C_CKIP;
+ /*
+ * Check if h/w does the MIC and/or whether the
+ * separate key cache entries are required to
+ * handle both tx+rx MIC keys.
+ */
+ if (ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_MIC))
+ ic->ic_caps |= IEEE80211_C_TKIPMIC;
+ if (ATH_HAL_TKIPSPLIT(ah))
+ asc->asc_splitmic = 1;
+ }
+ asc->asc_hasclrkey = ATH_HAL_CIPHERSUPPORTED(ah, HAL_CIPHER_CLR);
+ ic->ic_phytype = IEEE80211_T_OFDM;
+ ic->ic_opmode = IEEE80211_M_STA;
+ ic->ic_state = IEEE80211_S_INIT;
+ ic->ic_maxrssi = ATH_MAX_RSSI;
+ ic->ic_set_shortslot = ath_set_shortslot;
+ ic->ic_xmit = ath_xmit;
+ ieee80211_attach(ic);
+
+ /* Override 80211 default routines */
+ ic->ic_reset = ath_reset;
+ asc->asc_newstate = ic->ic_newstate;
+ ic->ic_newstate = ath_newstate;
+ ic->ic_watchdog = ath_watchdog;
+ ic->ic_node_alloc = ath_node_alloc;
+ ic->ic_node_free = ath_node_free;
+ ic->ic_crypto.cs_key_alloc = ath_key_alloc;
+ ic->ic_crypto.cs_key_delete = ath_key_delete;
+ ic->ic_crypto.cs_key_set = ath_key_set;
+ ieee80211_media_init(ic);
asc->asc_rx_pend = 0;
ATH_HAL_INTRSET(ah, 0);
@@ -1955,7 +1993,7 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
&asc->asc_softint_id, NULL, 0, ath_softint_handler, (caddr_t)asc);
if (err != DDI_SUCCESS) {
ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
- "ddi_add_softintr() failed"));
+ "ddi_add_softintr() failed\n"));
goto attach_fail5;
}
@@ -1966,29 +2004,55 @@ ath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
goto attach_fail6;
}
- if (ddi_add_intr(devinfo, 0, NULL, NULL, gld_intr,
- (caddr_t)asc->asc_isc.isc_dev) != DDI_SUCCESS) {
+ if (ddi_add_intr(devinfo, 0, NULL, NULL, ath_intr,
+ (caddr_t)asc) != DDI_SUCCESS) {
ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
"Can not set intr for ATH driver\n"));
goto attach_fail6;
}
- isc->isc_dev->gldm_cookie = asc->asc_iblock;
- if (err = gld_register(devinfo, "ath", isc->isc_dev)) {
+ /*
+ * Provide initial settings for the WiFi plugin; whenever this
+ * information changes, we need to call mac_plugindata_update()
+ */
+ wd.wd_opmode = ic->ic_opmode;
+ wd.wd_secalloc = WIFI_SEC_NONE;
+ IEEE80211_ADDR_COPY(wd.wd_bssid, ic->ic_bss->in_bssid);
+
+ if ((macp = mac_alloc(MAC_VERSION)) == NULL) {
ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
- "gld_register err %x\n", err));
+ "MAC version mismatch\n"));
+ goto attach_fail7;
+ }
+
+ macp->m_type_ident = MAC_PLUGIN_IDENT_WIFI;
+ macp->m_driver = asc;
+ macp->m_dip = devinfo;
+ macp->m_src_addr = ic->ic_macaddr;
+ macp->m_callbacks = &ath_m_callbacks;
+ macp->m_min_sdu = 0;
+ macp->m_max_sdu = IEEE80211_MTU;
+ macp->m_pdata = &wd;
+ macp->m_pdata_size = sizeof (wd);
+
+ err = mac_register(macp, &ic->ic_mach);
+ mac_free(macp);
+ if (err != 0) {
+ ATH_DEBUG((ATH_DBG_ATTACH, "ath: ath_attach(): "
+ "mac_register err %x\n", err));
goto attach_fail7;
}
/* Create minor node of type DDI_NT_NET_WIFI */
(void) snprintf(strbuf, sizeof (strbuf), "%s%d",
- ATH_NODENAME, isc->isc_dev->gldm_ppa);
+ ATH_NODENAME, instance);
err = ddi_create_minor_node(devinfo, strbuf, S_IFCHR,
- isc->isc_dev->gldm_ppa + 1, DDI_NT_NET_WIFI, 0);
+ instance + 1, DDI_NT_NET_WIFI, 0);
if (err != DDI_SUCCESS)
ATH_DEBUG((ATH_DBG_ATTACH, "WARN: ath: ath_attach(): "
"Create minor node failed - %d\n", err));
+ mac_link_update(ic->ic_mach, LINK_STATE_DOWN);
asc->asc_invalid = 1;
return (DDI_SUCCESS);
attach_fail7:
@@ -1996,7 +2060,7 @@ attach_fail7:
attach_fail6:
ddi_remove_softintr(asc->asc_softint_id);
attach_fail5:
- gld_mac_free(isc->isc_dev);
+ (void) ieee80211_detach(ic);
attach_fail4:
ath_desc_free(asc);
attach_fail3:
@@ -2016,8 +2080,8 @@ attach_fail0:
}
mutex_destroy(&asc->asc_rxbuflock);
mutex_destroy(&asc->asc_genlock);
- mutex_destroy(&asc->asc_gld_sched_lock);
- ddi_soft_state_free(ath_soft_state_p, ddi_get_instance(devinfo));
+ mutex_destroy(&asc->asc_resched_lock);
+ ddi_soft_state_free(ath_soft_state_p, instance);
return (DDI_FAILURE);
}
@@ -2026,57 +2090,52 @@ static int32_t
ath_detach(dev_info_t *devinfo, ddi_detach_cmd_t cmd)
{
ath_t *asc;
- int32_t i;
asc = ddi_get_soft_state(ath_soft_state_p, ddi_get_instance(devinfo));
ASSERT(asc != NULL);
- switch (cmd) {
- default:
+ if (cmd != DDI_DETACH)
return (DDI_FAILURE);
- case DDI_SUSPEND:
- return (DDI_FAILURE);
-
- case DDI_DETACH:
- break;
- }
-
- ASSERT(asc->asc_isc.isc_mf_thread == NULL);
+ ath_stop_scantimer(asc);
/* disable interrupts */
ATH_HAL_INTRSET(asc->asc_ah, 0);
+ /*
+ * Unregister from the MAC layer subsystem
+ */
+ if (mac_unregister(asc->asc_isc.ic_mach) != 0)
+ return (DDI_FAILURE);
+
/* free intterrupt resources */
ddi_remove_intr(devinfo, 0, asc->asc_iblock);
ddi_remove_softintr(asc->asc_softint_id);
- /* detach 802.11 and Atheros HAL */
- ieee80211_ifdetach(asc->asc_isc.isc_dev);
+ /*
+ * NB: the order of these is important:
+ * o call the 802.11 layer before detaching the hal to
+ * insure callbacks into the driver to delete global
+ * key cache entries can be handled
+ * o reclaim the tx queue data structures after calling
+ * the 802.11 layer as we'll get called back to reclaim
+ * node state and potentially want to use them
+ * o to cleanup the tx queues the hal is called, so detach
+ * it last
+ */
+ ieee80211_detach(&asc->asc_isc);
ath_desc_free(asc);
+ ath_txq_cleanup(asc);
asc->asc_ah->ah_detach(asc->asc_ah);
- ath_halfix_finit();
-
- /* detach gld */
- if (gld_unregister(asc->asc_isc.isc_dev) != 0)
- return (DDI_FAILURE);
- gld_mac_free(asc->asc_isc.isc_dev);
/* free io handle */
ddi_regs_map_free(&asc->asc_io_handle);
pci_config_teardown(&asc->asc_cfg_handle);
/* destroy locks */
- mutex_destroy(&asc->asc_txbuflock);
- for (i = 0; i < HAL_NUM_TX_QUEUES; i++) {
- if (ATH_TXQ_SETUP(asc, i)) {
- struct ath_txq *txq = &asc->asc_txq[i];
- mutex_destroy(&txq->axq_lock);
- }
- }
mutex_destroy(&asc->asc_rxbuflock);
mutex_destroy(&asc->asc_genlock);
- mutex_destroy(&asc->asc_gld_sched_lock);
+ mutex_destroy(&asc->asc_resched_lock);
ddi_remove_minor_node(devinfo, NULL);
ddi_soft_state_free(ath_soft_state_p, ddi_get_instance(devinfo));
@@ -2084,80 +2143,12 @@ ath_detach(dev_info_t *devinfo, ddi_detach_cmd_t cmd)
return (DDI_SUCCESS);
}
-static struct module_info ath_module_info = {
- 0, /* ATH_IDNUM, */
- "ath", /* ATH_DRIVER_NAME, */
- 0,
- INFPSZ,
- 4096, /* ATH_HIWAT, */
- 128, /* ATH_LOWAT */
-};
-
-static struct qinit ath_r_qinit = { /* read queues */
- NULL,
- gld_rsrv,
- gld_open,
- gld_close,
- NULL,
- &ath_module_info,
- NULL
-};
-
-static struct qinit ath_w_qinit = { /* write queues */
- gld_wput,
- gld_wsrv,
- NULL,
- NULL,
- NULL,
- &ath_module_info,
- NULL
-};
-
-static struct streamtab ath_streamtab = {
- &ath_r_qinit,
- &ath_w_qinit,
- NULL,
- NULL
-};
-
-static struct cb_ops ath_cb_ops = {
- nulldev, /* cb_open */
- nulldev, /* cb_close */
- nodev, /* cb_strategy */
- nodev, /* cb_print */
- nodev, /* cb_dump */
- nodev, /* cb_read */
- nodev, /* cb_write */
- nodev, /* cb_ioctl */
- nodev, /* cb_devmap */
- nodev, /* cb_mmap */
- nodev, /* cb_segmap */
- nochpoll, /* cb_chpoll */
- ddi_prop_op, /* cb_prop_op */
- &ath_streamtab, /* cb_stream */
- D_MP, /* cb_flag */
- 0, /* cb_rev */
- nodev, /* cb_aread */
- nodev /* cb_awrite */
-};
-
-static struct dev_ops ath_dev_ops = {
- DEVO_REV, /* devo_rev */
- 0, /* devo_refcnt */
- gld_getinfo, /* devo_getinfo */
- nulldev, /* devo_identify */
- nulldev, /* devo_probe */
- ath_attach, /* devo_attach */
- ath_detach, /* devo_detach */
- nodev, /* devo_reset */
- &ath_cb_ops, /* devo_cb_ops */
- (struct bus_ops *)NULL, /* devo_bus_ops */
- NULL /* devo_power */
-};
+DDI_DEFINE_STREAM_OPS(ath_dev_ops, nulldev, nulldev, ath_attach, ath_detach,
+ nodev, NULL, D_MP, NULL);
static struct modldrv ath_modldrv = {
&mod_driverops, /* Type of module. This one is a driver */
- "ath driver 1.1", /* short description */
+ "ath driver 1.2/HAL 0.9.17.2", /* short description */
&ath_dev_ops /* driver specific ops */
};
@@ -2182,10 +2173,14 @@ _init(void)
return (status);
mutex_init(&ath_loglock, NULL, MUTEX_DRIVER, NULL);
+ ath_halfix_init();
+ mac_init_ops(&ath_dev_ops, "ath");
status = mod_install(&modlinkage);
if (status != 0) {
- ddi_soft_state_fini(&ath_soft_state_p);
+ mac_fini_ops(&ath_dev_ops);
+ ath_halfix_finit();
mutex_destroy(&ath_loglock);
+ ddi_soft_state_fini(&ath_soft_state_p);
}
return (status);
@@ -2198,8 +2193,10 @@ _fini(void)
status = mod_remove(&modlinkage);
if (status == 0) {
- ddi_soft_state_fini(&ath_soft_state_p);
+ mac_fini_ops(&ath_dev_ops);
+ ath_halfix_finit();
mutex_destroy(&ath_loglock);
+ ddi_soft_state_fini(&ath_soft_state_p);
}
return (status);
}
diff --git a/usr/src/uts/common/io/ath/ath_osdep.c b/usr/src/uts/common/io/ath/ath_osdep.c
index 6b6def64a2..8551b9e3d3 100644
--- a/usr/src/uts/common/io/ath/ath_osdep.c
+++ b/usr/src/uts/common/io/ath/ath_osdep.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -43,17 +43,15 @@
#include <sys/sunddi.h>
#include <sys/varargs.h>
#include "ath_hal.h"
-#include "ath_ieee80211.h"
#include "ath_impl.h"
struct ath_halfix {
void *p;
size_t size;
- int malloced;
- int freed;
};
-static struct ath_halfix ath_halfix[32];
+#define ATH_MAX_HALMEM 1024
+static struct ath_halfix ath_halfix[ATH_MAX_HALMEM];
/* HAL layer needs these definitions */
int ath_hal_dma_beacon_response_time = 2; /* in TU's */
@@ -96,20 +94,17 @@ ath_hal_malloc(size_t size)
void *p;
int i;
- /* support 16 devices(max leakage of one device is 8) */
- for (i = 0; i < 32; i++) {
- if (ath_halfix[i].malloced == 0)
+ for (i = 0; i < ATH_MAX_HALMEM; i++) {
+ if (ath_halfix[i].p == NULL)
break;
}
- if (i >= 32) {
+ if (i >= ATH_MAX_HALMEM) {
ath_problem("ath: ath_hal_malloc(): too many malloc\n");
return (NULL);
}
p = kmem_zalloc(size, KM_SLEEP);
ath_halfix[i].p = p;
ath_halfix[i].size = size;
- ath_halfix[i].malloced = 1;
- ath_halfix[i].freed = 0;
ATH_DEBUG((ATH_DBG_OSDEP, "ath: ath_hal_malloc(): "
"%d: p=%p, size=%d\n", i, p, size));
return (p);
@@ -119,17 +114,16 @@ void
ath_hal_free(void* p)
{
int i;
- for (i = 0; i < 32; i++) {
+ for (i = 0; i < ATH_MAX_HALMEM; i++) {
if (ath_halfix[i].p == p)
break;
}
- if (i >= 32) {
+ if (i >= ATH_MAX_HALMEM) {
ath_problem("ath: ath_hal_free(): no record for %p\n", p);
return;
}
kmem_free(p, ath_halfix[i].size);
- ath_halfix[i].malloced = 0;
- ath_halfix[i].freed = 1;
+ ath_halfix[i].p = NULL;
ATH_DEBUG((ATH_DBG_OSDEP, "ath: ath_hal_free(): %d: p=%p, size=%d\n",
i, p, ath_halfix[i].size));
}
@@ -147,24 +141,13 @@ ath_hal_memzero(void *dst, size_t n)
bzero(dst, n);
}
-/*
- * So far as I know and test, hal.o has a bug that when attaching,
- * it calls ath_hal_malloc() four times while detaching it calls
- * ath_hal_free() only 3 times, so everytime when a pair of driver
- * load/unload is done, a memory leak occurs. The function
- * free_hal_leaked_mem() just help free the memory that alloced by
- * hal.o but not freed by it. In fact, when attaching, hal.o only
- * call ath_hal_alloc() four times, here assuming a maximum times of
- * 8 just considers some special cases, we have no source after all!
- */
void
ath_halfix_init(void)
{
int i;
- for (i = 0; i < 32; i++) {
- ath_halfix[i].malloced = 0;
- }
+ for (i = 0; i < ATH_MAX_HALMEM; i++)
+ ath_halfix[i].p = NULL;
}
void
@@ -172,10 +155,11 @@ ath_halfix_finit(void)
{
int i;
- for (i = 0; i < 32; i++) {
- if ((ath_halfix[i].malloced == 1) &&
- (ath_halfix[i].freed == 0)) {
+ for (i = 0; i < ATH_MAX_HALMEM; i++)
+ if (ath_halfix[i].p != NULL) {
kmem_free(ath_halfix[i].p, ath_halfix[i].size);
+ ATH_DEBUG((ATH_DBG_OSDEP, "ath_halfix: "
+ "Free %d: p=%x size=%d\n",
+ i, ath_halfix[i].p, ath_halfix[i].size));
}
- }
}
diff --git a/usr/src/uts/common/io/ath/ath_rate.c b/usr/src/uts/common/io/ath/ath_rate.c
index 8ebf4f9091..d8cc78b845 100644
--- a/usr/src/uts/common/io/ath/ath_rate.c
+++ b/usr/src/uts/common/io/ath/ath_rate.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -58,7 +58,6 @@
#include <sys/sunddi.h>
#include <sys/pci.h>
#include <sys/errno.h>
-#include <sys/gld.h>
#include <sys/dlpi.h>
#include <sys/ethernet.h>
#include <sys/list.h>
@@ -70,7 +69,7 @@
#include <inet/wifi_ioctl.h>
#include "ath_hal.h"
#include "ath_impl.h"
-#include "ath_ieee80211.h"
+#include "ath_rate.h"
void
ath_rate_update(ath_t *asc, struct ieee80211_node *in, int32_t rate)
@@ -151,10 +150,10 @@ done:
void
ath_rate_ctl_start(ath_t *asc, struct ieee80211_node *in)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
int32_t srate;
- if (isc->isc_fixed_rate == -1) {
+ if (ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) {
/*
* No fixed rate is requested. For 11b start with
* the highest negotiated rate; otherwise, for 11g
@@ -172,25 +171,25 @@ ath_rate_ctl_start(ath_t *asc, struct ieee80211_node *in)
}
} else {
/*
- * A fixed rate is to be used; ic_fixed_rate is an
- * index into the supported rate set. Convert this
- * to the index into the negotiated rate set for
- * the node. We know the rate is there because the
- * rate set is checked when the station associates.
+ * A fixed rate is to be used; We know the rate is
+ * there because the rate set is checked when the
+ * station associates.
*/
- const struct ieee80211_rateset *rs =
- &isc->isc_sup_rates[isc->isc_curmode];
- int32_t r = rs->ir_rates[isc->isc_fixed_rate] &
- IEEE80211_RATE_VAL;
/* NB: the rate set is assumed sorted */
srate = in->in_rates.ir_nrates - 1;
- for (; srate >= 0 && IEEE80211_RATE(srate) != r; srate--);
+ for (; srate >= 0 && IEEE80211_RATE(srate) != ic->ic_fixed_rate;
+ srate--);
}
ATH_DEBUG((ATH_DBG_RATE, "ath: ath_rate_ctl_start(): "
"srate=%d rate=%d\n", srate, IEEE80211_RATE(srate)));
ath_rate_update(asc, in, srate);
}
+void
+ath_rate_cb(void *arg, struct ieee80211_node *in)
+{
+ ath_rate_update((ath_t *)arg, in, 0);
+}
/*
* Reset the rate control state for each 802.11 state transition.
@@ -198,15 +197,15 @@ ath_rate_ctl_start(ath_t *asc, struct ieee80211_node *in)
void
ath_rate_ctl_reset(ath_t *asc, enum ieee80211_state state)
{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
struct ieee80211_node *in;
- if (isc->isc_opmode == IEEE80211_M_STA) {
+ if (ic->ic_opmode == IEEE80211_M_STA) {
/*
* Reset local xmit state; this is really only
* meaningful when operating in station mode.
*/
- in = (struct ieee80211_node *)isc->isc_bss;
+ in = (struct ieee80211_node *)ic->ic_bss;
if (state == IEEE80211_S_RUN) {
ath_rate_ctl_start(asc, in);
} else {
@@ -219,12 +218,8 @@ ath_rate_ctl_reset(ath_t *asc, enum ieee80211_state state)
* For any other operating mode we want to reset the
* tx rate state of each node.
*/
- in = list_head(&isc->isc_in_list);
- while (in != NULL) {
- ath_rate_update(asc, in, 0);
- in = list_next(&isc->isc_in_list, in);
- }
- ath_rate_update(asc, isc->isc_bss, 0);
+ ieee80211_iterate_nodes(&ic->ic_sta, ath_rate_cb, asc);
+ ath_rate_update(asc, ic->ic_bss, 0);
}
}
@@ -305,7 +300,7 @@ ath_rate_setup(ath_t *asc, uint32_t mode)
int32_t i, maxrates;
struct ieee80211_rateset *rs;
struct ath_hal *ah = asc->asc_ah;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
+ ieee80211com_t *ic = (ieee80211com_t *)asc;
const HAL_RATE_TABLE *rt;
switch (mode) {
@@ -318,9 +313,12 @@ ath_rate_setup(ath_t *asc, uint32_t mode)
case IEEE80211_MODE_11G:
asc->asc_rates[mode] = ATH_HAL_GETRATETABLE(ah, HAL_MODE_11G);
break;
- case IEEE80211_MODE_TURBO:
+ case IEEE80211_MODE_TURBO_A:
asc->asc_rates[mode] = ATH_HAL_GETRATETABLE(ah, HAL_MODE_TURBO);
break;
+ case IEEE80211_MODE_TURBO_G:
+ asc->asc_rates[mode] = ATH_HAL_GETRATETABLE(ah, HAL_MODE_108G);
+ break;
default:
ATH_DEBUG((ATH_DBG_RATE, "ath: ath_rate_setup(): "
"invalid mode %u\n", mode));
@@ -337,7 +335,7 @@ ath_rate_setup(ath_t *asc, uint32_t mode)
maxrates = IEEE80211_RATE_MAXSIZE;
} else
maxrates = rt->rateCount;
- rs = &isc->isc_sup_rates[mode];
+ rs = &ic->ic_sup_rates[mode];
for (i = 0; i < maxrates; i++)
rs->ir_rates[i] = rt->info[i].dot11Rate;
rs->ir_nrates = maxrates;
diff --git a/usr/src/uts/common/io/ath/ath_rate.h b/usr/src/uts/common/io/ath/ath_rate.h
index 98ed99da93..347580e686 100644
--- a/usr/src/uts/common/io/ath/ath_rate.h
+++ b/usr/src/uts/common/io/ath/ath_rate.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -44,7 +44,6 @@
extern "C" {
#endif
-#include "ath_ieee80211.h"
#include "ath_impl.h"
void ath_rate_ctl_start(ath_t *asc, struct ieee80211_node *in);
@@ -52,6 +51,7 @@ void ath_rate_ctl_reset(ath_t *asc, enum ieee80211_state state);
void ath_rate_ctl(ieee80211com_t *isc, struct ieee80211_node *in);
void ath_rate_update(ath_t *asc, struct ieee80211_node *in, int32_t rate);
void ath_rate_setup(ath_t *asc, uint32_t mode);
+void ath_rate_cb(void *arg, struct ieee80211_node *in);
#ifdef __cplusplus
}
diff --git a/usr/src/uts/common/io/ath/ath_wificonfig.c b/usr/src/uts/common/io/ath/ath_wificonfig.c
deleted file mode 100644
index cc6c7d1a67..0000000000
--- a/usr/src/uts/common/io/ath/ath_wificonfig.c
+++ /dev/null
@@ -1,818 +0,0 @@
-/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- * 3. Neither the names of the above-listed copyright holders nor the names
- * of any contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGES.
- *
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/signal.h>
-#include <sys/stream.h>
-#include <sys/termio.h>
-#include <sys/errno.h>
-#include <sys/file.h>
-#include <sys/cmn_err.h>
-#include <sys/stropts.h>
-#include <sys/strsubr.h>
-#include <sys/strtty.h>
-#include <sys/kbio.h>
-#include <sys/cred.h>
-#include <sys/stat.h>
-#include <sys/consdev.h>
-#include <sys/kmem.h>
-#include <sys/modctl.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-#include <sys/pci.h>
-#include <sys/errno.h>
-#include <sys/gld.h>
-#include <sys/dlpi.h>
-#include <sys/ethernet.h>
-#include <sys/note.h>
-#include <sys/strsun.h>
-#include <sys/list.h>
-#include <inet/common.h>
-#include <inet/nd.h>
-#include <inet/mi.h>
-#include <inet/wifi_ioctl.h>
-#include "ath_impl.h"
-#include "ath_hal.h"
-#include "ath_ieee80211.h"
-
-extern int
-ath_gld_start(gld_mac_info_t *gld_p);
-
-static int
-ath_wificfg_essid(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *value, *buf;
- int len;
- wldp_t *infp, *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
-
- outfp = (wldp_t *)buf;
- infp = (wldp_t *)mp->b_rptr;
-
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- if (cmd == WLAN_GET_PARAM) {
- if (mi_strlen((const char *)isc->isc_des_essid) == 0) {
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- offsetof(wl_essid_t, wl_essid_essid) +
- mi_strlen((const char *)
- isc->isc_bss->in_essid);
- ((wl_essid_t *)(outfp->wldp_buf))->wl_essid_length =
- mi_strlen((const char *)
- isc->isc_bss->in_essid);
- bcopy(isc->isc_bss->in_essid,
- buf + offsetof(wldp_t, wldp_buf) +
- offsetof(wl_essid_t, wl_essid_essid),
- mi_strlen((const char *)
- isc->isc_bss->in_essid));
- } else {
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- offsetof(wl_essid_t, wl_essid_essid) +
- mi_strlen((const char *)isc->isc_des_essid);
- ((wl_essid_t *)(outfp->wldp_buf))->wl_essid_length =
- mi_strlen((const char *)isc->isc_des_essid);
- bcopy(isc->isc_des_essid,
- buf + offsetof(wldp_t, wldp_buf) +
- offsetof(wl_essid_t, wl_essid_essid),
- mi_strlen((const char *)
- isc->isc_des_essid));
- }
- } else if (cmd == WLAN_SET_PARAM) {
- value = ((wl_essid_t *)(infp->wldp_buf))->wl_essid_essid;
- bzero(isc->isc_des_essid, IEEE80211_NWID_LEN);
- if (mi_strlen(value) == 0)
- isc->isc_des_esslen = 0;
- else {
- len = mi_strlen((const char *)value);
- if (len > IEEE80211_NWID_LEN)
- len = IEEE80211_NWID_LEN;
- bcopy(value, isc->isc_des_essid, len);
- isc->isc_des_esslen = len;
- ATH_DEBUG((ATH_DBG_WIFICFG,
- "ath: ath_wificfg_essid(): "
- "set essid=%s len=%d\n", value, len));
- }
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- }
- }
-
- outfp->wldp_result = WL_SUCCESS;
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- kmem_free(buf, MAX_BUF_LEN);
- return (WL_SUCCESS);
-}
-
-static int
-ath_wificfg_bssid(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- wldp_t *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_bssid_t);
- if (cmd == WLAN_GET_PARAM) {
- if (isc->isc_flags & IEEE80211_F_DESBSSID)
- bcopy(isc->isc_des_bssid,
- buf + WIFI_BUF_OFFSET, sizeof (wl_bssid_t));
- else
- bcopy(isc->isc_bss->in_bssid,
- buf + WIFI_BUF_OFFSET, sizeof (wl_bssid_t));
- outfp->wldp_result = WL_SUCCESS;
-
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_bssid(): "
- "get bssid=%x %x %x %x %x %x\n",
- buf[WIFI_BUF_OFFSET+0], buf[WIFI_BUF_OFFSET+1],
- buf[WIFI_BUF_OFFSET+2], buf[WIFI_BUF_OFFSET+3],
- buf[WIFI_BUF_OFFSET+4], buf[WIFI_BUF_OFFSET+5]));
- } else if (cmd == WLAN_SET_PARAM) {
- outfp->wldp_result = WL_READONLY;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- kmem_free(buf, MAX_BUF_LEN);
- return (WL_SUCCESS);
-}
-
-static int
-ath_wificfg_nodename(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- char *value, *buf;
- int iret, nickname_len;
- uint32_t i;
- wldp_t *infp, *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_nodename(): "
- "nodename entry\n"));
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
-
- nickname_len = MIN(isc->isc_nicknamelen, IEEE80211_NWID_LEN);
-
- if (cmd == WLAN_GET_PARAM) {
- outfp->wldp_length = WIFI_BUF_OFFSET +
- offsetof(wl_nodename_t, wl_nodename_name) + nickname_len;
- ((wl_nodename_t *)(buf + WIFI_BUF_OFFSET))->wl_nodename_length =
- nickname_len;
- bcopy(isc->isc_nickname, buf + WIFI_BUF_OFFSET +
- offsetof(wl_nodename_t, wl_nodename_name), nickname_len);
- outfp->wldp_result = WL_SUCCESS;
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_nodename(): "
- "get nodename=%s\n", isc->isc_nickname));
- } else if (cmd == WLAN_SET_PARAM) {
- value = ((wl_nodename_t *)(infp->wldp_buf))->wl_nodename_name;
- (void) strncpy((char *)isc->isc_nickname, value,
- MIN(32, strlen(value)));
- isc->isc_nickname[strlen(value)] = '\0';
- isc->isc_nicknamelen =
- ((wl_nodename_t *)(infp->wldp_buf))->wl_nodename_length;
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_SUCCESS;
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_nodename(): "
- "set nodename=%s\n", value));
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_wificfg_nodename(): "
- "set nodename_len=%d\n", isc->isc_nicknamelen));
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_encryption(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- int iret;
- wldp_t *infp, *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- sizeof (wl_encryption_t);
- if (cmd == WLAN_GET_PARAM) {
- *(wl_encryption_t *)(outfp->wldp_buf) =
- (isc->isc_flags & IEEE80211_F_WEPON) ? 1 : 0;
- outfp->wldp_result = WL_SUCCESS;
- } else if (cmd == WLAN_SET_PARAM) {
- if (*(wl_encryption_t *)(infp->wldp_buf) ==
- WL_NOENCRYPTION) {
- isc->isc_flags &= ~IEEE80211_F_WEPON;
- } else if (*(wl_encryption_t *)(infp->wldp_buf) ==
- WL_ENC_WEP) {
- isc->isc_flags |= IEEE80211_F_WEPON;
- }
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: "
- "ath_wificfg_encryption(): set encryption=%d\n",
- (isc->isc_flags & IEEE80211_F_WEPON) ? 1 : 0));
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- }
- outfp->wldp_result = WL_SUCCESS;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_wepkey(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- wldp_t *infp, *outfp;
- char *buf;
- int iret;
- wl_wep_key_t *p_wepkey_tab;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
-
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- sizeof (wl_wep_key_tab_t);
-
- if (cmd == WLAN_GET_PARAM) {
- outfp->wldp_result = WL_WRITEONLY;
- } else if (cmd == WLAN_SET_PARAM) {
- p_wepkey_tab = (wl_wep_key_t *)(infp->wldp_buf);
- for (i = 0; i < MAX_NWEPKEYS; i++) {
- if (p_wepkey_tab[i].wl_wep_operation == WL_ADD) {
- isc->isc_nw_keys[i].iwk_len =
- p_wepkey_tab[i].wl_wep_length;
- bcopy(p_wepkey_tab[i].wl_wep_key,
- isc->isc_nw_keys[i].iwk_key,
- p_wepkey_tab[i].wl_wep_length);
- }
- }
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- }
- outfp->wldp_result = WL_SUCCESS;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-
-}
-
-static int
-ath_wificfg_keyid(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- int iret;
- wldp_t *infp, *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- wl_wep_key_id_t keyid;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
-
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- sizeof (wl_wep_key_id_t);
-
- if (cmd == WLAN_GET_PARAM) {
- *(wl_wep_key_id_t *)(outfp->wldp_buf) =
- isc->isc_wep_txkey;
- outfp->wldp_result = WL_SUCCESS;
- } else if (cmd == WLAN_SET_PARAM) {
- keyid = *(wl_wep_key_id_t *)(infp->wldp_buf);
- if (keyid >= MAX_NWEPKEYS) {
- outfp->wldp_result = WL_NOTSUPPORTED;
- } else {
- isc->isc_wep_txkey = keyid;
- ATH_DEBUG((ATH_DBG_WIFICFG,
- "ath: ath_wificfg_keyid(): set wepkeyid=%d\n",
- isc->isc_wep_txkey));
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc,
- IEEE80211_S_SCAN, -1);
- }
- outfp->wldp_result = WL_SUCCESS;
- }
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-/*
- * Units are in db above the noise floor. That means the
- * rssi values reported in the tx/rx descriptors in the
- * driver are the SNR expressed in db.
- */
-static void
-ath_getrssi(struct ieee80211_node *in, wl_rssi_t *rssi)
-{
- wl_rssi_t val, max_val;
-
- max_val = 63; /* Max rssi */
- val = (wl_rssi_t)in->in_recv_hist[in->in_hist_cur].irh_rssi;
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: ath_getrssi(): "
- "rssi: %d\n", val));
- if (val > max_val)
- val = max_val; /* Max rssi */
- if (max_val > MAX_RSSI)
- *rssi = (wl_rssi_t)((val + (double)max_val / MAX_RSSI - 1) /
- max_val * MAX_RSSI);
- else
- *rssi = (wl_rssi_t)((double)val / max_val * MAX_RSSI);
-}
-
-static void
-ath_wait_scan(ath_t *asc)
-{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- while (isc->isc_flags & IEEE80211_F_ASCAN) {
- if (cv_timedwait(&isc->isc_scan_cv, &isc->isc_genlock,
- ddi_get_lbolt() + drv_usectohz(6000000)) != 0)
- break;
- }
-}
-
-static int
-ath_wificfg_esslist(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- _NOTE(ARGUNUSED(cmd))
-
- char *buf;
- int iret;
- uint32_t i, essid_num;
- struct ieee80211_node *in;
- wldp_t *outfp;
- wl_ess_conf_t *p_ess_conf;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- /* Wait scan finish */
- ath_wait_scan(asc);
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- essid_num = 0;
- in = list_head(&isc->isc_in_list);
- while (in != NULL) {
- p_ess_conf = (wl_ess_conf_t *)
- (buf + offsetof(wldp_t, wldp_buf) +
- offsetof(wl_ess_list_t, wl_ess_list_ess) +
- essid_num * sizeof (wl_ess_conf_t));
-
- if (p_ess_conf > (wl_ess_conf_t *)
- (buf + MAX_BUF_LEN - sizeof (wl_ess_conf_t)))
- break;
-
- bcopy(in->in_essid,
- p_ess_conf->wl_ess_conf_essid.wl_essid_essid,
- in->in_esslen);
- bcopy(in->in_bssid, p_ess_conf->wl_ess_conf_bssid, 6);
- (p_ess_conf->wl_phy_conf).wl_phy_dsss_conf.wl_dsss_subtype =
- WL_DSSS;
- p_ess_conf->wl_ess_conf_wepenabled =
- (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY ?
- WL_ENC_WEP : WL_NOENCRYPTION);
- p_ess_conf->wl_ess_conf_bsstype =
- (in->in_capinfo & IEEE80211_CAPINFO_ESS ?
- WL_BSS_BSS : WL_BSS_IBSS);
- ath_getrssi(in, &(p_ess_conf->wl_ess_conf_sl));
-
- essid_num++;
- in = list_next(&isc->isc_in_list, in);
- }
-
- ((wl_ess_list_t *)(outfp->wldp_buf))->wl_ess_list_num = essid_num;
- outfp->wldp_length = offsetof(wldp_t, wldp_buf) +
- offsetof(wl_ess_list_t, wl_ess_list_ess) +
- essid_num * sizeof (wl_ess_conf_t);
- outfp->wldp_result = WL_SUCCESS;
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_supportrates(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- _NOTE(ARGUNUSED(asc))
-
- uint16_t i;
- wldp_t *outfp;
- char *buf;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
- const struct ieee80211_rateset *rs;
- wl_rates_t *rates;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- rs = &isc->isc_sup_rates[ieee80211_chan2mode(isc, in->in_chan)];
- rates = (wl_rates_t *)(outfp->wldp_buf);
- if (cmd == WLAN_GET_PARAM) {
- rates->wl_rates_num = rs->ir_nrates;
- for (i = 0; i < rs->ir_nrates; i++) {
- rates->wl_rates_rates[i] = rs->ir_rates[i] &
- IEEE80211_RATE_VAL;
- }
- outfp->wldp_length = WIFI_BUF_OFFSET +
- offsetof(wl_rates_t, wl_rates_rates) +
- rs->ir_nrates * sizeof (char);
- outfp->wldp_result = WL_SUCCESS;
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- }
-
- kmem_free(buf, MAX_BUF_LEN);
- return (WL_SUCCESS);
-}
-
-static int
-ath_wificfg_desiredrates(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- int rate, iret;
- char *buf;
- wldp_t *outfp;
-
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
- struct ieee80211_rateset *rs = &in->in_rates;
-
- /*
- * Here rate is a full duplex speed, wificonfig will divide it
- * by 2 when display to user. From the wificonfig point of view,
- * 'rate' is just a transmiting rate.
- */
- rate = (rs->ir_rates[in->in_txrate] & IEEE80211_RATE_VAL);
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- if (cmd == WLAN_GET_PARAM) {
- ((wl_rates_t *)(outfp->wldp_buf))->wl_rates_num = 1;
- (((wl_rates_t *)(outfp->wldp_buf))->wl_rates_rates)[0] = rate;
- outfp->wldp_length = WIFI_BUF_OFFSET +
- offsetof(wl_rates_t, wl_rates_rates) + sizeof (char);
- ATH_DEBUG((ATH_DBG_WIFICFG, "ath: "
- "ath_wificfg_desiredrates(): current rate=%dM\n", rate));
- outfp->wldp_result = WL_SUCCESS;
- } else if (cmd == WLAN_SET_PARAM) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_SUCCESS;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_authmode(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- _NOTE(ARGUNUSED(asc))
-
- uint32_t i, authmode;
- char *buf;
- int iret;
- wldp_t *infp, *outfp;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
-
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_authmode_t);
- outfp->wldp_result = WL_SUCCESS;
- if (cmd == WLAN_GET_PARAM) {
- *(wl_authmode_t *)(outfp->wldp_buf) = WL_OPENSYSTEM;
- } else if (cmd == WLAN_SET_PARAM) {
- authmode = *(wl_authmode_t *)(infp->wldp_buf);
- if (authmode != WL_OPENSYSTEM) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_LACK_FEATURE;
- }
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_bsstype(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- _NOTE(ARGUNUSED(asc))
-
- uint32_t i, bss_type;
- char *buf;
- int iret;
- wldp_t *infp, *outfp;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- infp = (wldp_t *)mp->b_rptr;
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_bss_type_t);
- outfp->wldp_result = WL_SUCCESS;
- if (cmd == WLAN_GET_PARAM) {
- *(wl_bss_type_t *)(outfp->wldp_buf) = WL_BSS_BSS;
- } else if (cmd == WLAN_SET_PARAM) {
- bss_type = (uint16_t)(*(wl_bss_type_t *)(infp->wldp_buf));
- if (bss_type != WL_BSS_BSS) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_LACK_FEATURE;
- }
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_linkstatus(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- int iret;
- wldp_t *outfp;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_linkstatus_t);
- outfp->wldp_result = WL_SUCCESS;
-
- if (cmd == WLAN_GET_PARAM) {
- *(wl_linkstatus_t *)(outfp->wldp_buf) =
- (IEEE80211_S_RUN == isc->isc_state) ?
- WL_CONNECTED : WL_NOTCONNECTED;
- } else if (cmd == WLAN_SET_PARAM) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_NOTSUPPORTED;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_rssi(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i;
- char *buf;
- int iret;
- wldp_t *outfp;
-
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
-
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
-
- outfp->wldp_length = WIFI_BUF_OFFSET + sizeof (wl_rssi_t);
- outfp->wldp_result = WL_SUCCESS;
-
- if (cmd == WLAN_GET_PARAM) {
- ath_getrssi(in, (wl_rssi_t *)(outfp->wldp_buf));
- } else if (cmd == WLAN_SET_PARAM) {
- outfp->wldp_length = WIFI_BUF_OFFSET;
- outfp->wldp_result = WL_NOTSUPPORTED;
- }
-
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- iret = (int)(outfp->wldp_result);
- kmem_free(buf, MAX_BUF_LEN);
- return (iret);
-}
-
-static int
-ath_wificfg_scan(ath_t *asc)
-{
- int iret = WL_SUCCESS;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- if (asc->asc_invalid == 0 && isc->isc_state == IEEE80211_S_INIT) {
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- ath_wait_scan(asc);
- (void) _ieee80211_new_state(isc, IEEE80211_S_INIT, -1);
- }
- return (iret);
-}
-
-static void
-ath_loaddefdata(ath_t *asc)
-{
- int i;
- ieee80211com_t *isc = (ieee80211com_t *)asc;
- struct ieee80211_node *in = isc->isc_bss;
- struct ieee80211_rateset *rs = &in->in_rates;
-
- if (isc->isc_flags & IEEE80211_F_DESBSSID)
- bzero(isc->isc_des_bssid, IEEE80211_ADDR_LEN);
- else
- bzero(isc->isc_bss->in_bssid, IEEE80211_ADDR_LEN);
- isc->isc_des_esslen = 0;
- isc->isc_des_essid[0] = 0;
- isc->isc_bss->in_essid[0] = 0;
- rs->ir_rates[in->in_txrate] = 0; /* rate */
- isc->isc_flags &= ~IEEE80211_F_WEPON; /* encryption */
- isc->isc_wep_txkey = 0; /* wepkey id */
- for (i = 0; i < MAX_NWEPKEYS; i++) /* wepkey */
- isc->isc_nw_keys[i].iwk_len = 0;
- for (i = 0; i < IEEE80211_RECV_HIST_LEN; ++i)
- in->in_recv_hist[i].irh_rssi = 0;
- in->in_hist_cur = IEEE80211_RECV_HIST_LEN - 1;
-}
-
-static int
-ath_wificfg_loaddefaults(ath_t *asc)
-{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- ath_loaddefdata(asc);
-
- if (asc->asc_invalid == 0) {
- (void) ath_gld_start(isc->isc_dev);
- (void) _ieee80211_new_state(isc, IEEE80211_S_SCAN, -1);
- }
-
- return (WL_SUCCESS);
-}
-
-static int
-ath_wificfg_disassoc(ath_t *asc)
-{
- ieee80211com_t *isc = (ieee80211com_t *)asc;
-
- if (! asc->asc_invalid) {
- (void) _ieee80211_new_state(isc, IEEE80211_S_INIT, -1);
- ath_loaddefdata(asc);
- }
- return (WL_SUCCESS);
-}
-
-int32_t
-ath_getset(ath_t *asc, mblk_t *mp, uint32_t cmd)
-{
- uint32_t i, id;
- char *buf;
- int ret;
- wldp_t *infp, *outfp;
-
- ret = WL_SUCCESS;
- infp = (wldp_t *)mp->b_rptr;
- id = infp->wldp_id;
-
- switch (id) {
- case WL_ESSID:
- ret = ath_wificfg_essid(asc, mp, cmd);
- break;
- case WL_BSSID:
- ret = ath_wificfg_bssid(asc, mp, cmd);
- break;
- case WL_NODE_NAME:
- ret = ath_wificfg_nodename(asc, mp, cmd);
- break;
- case WL_ENCRYPTION:
- ret = ath_wificfg_encryption(asc, mp, cmd);
- break;
- case WL_WEP_KEY_TAB:
- ret = ath_wificfg_wepkey(asc, mp, cmd);
- break;
- case WL_WEP_KEY_ID:
- ret = ath_wificfg_keyid(asc, mp, cmd);
- break;
- case WL_ESS_LIST:
- ret = ath_wificfg_esslist(asc, mp, cmd);
- break;
- case WL_SUPPORTED_RATES:
- ret = ath_wificfg_supportrates(asc, mp, cmd);
- break;
- case WL_DESIRED_RATES:
- ret = ath_wificfg_desiredrates(asc, mp, cmd);
- break;
- case WL_AUTH_MODE:
- ret = ath_wificfg_authmode(asc, mp, cmd);
- break;
- case WL_BSS_TYPE:
- ret = ath_wificfg_bsstype(asc, mp, cmd);
- break;
- case WL_LINKSTATUS:
- ret = ath_wificfg_linkstatus(asc, mp, cmd);
- break;
- case WL_RSSI:
- ret = ath_wificfg_rssi(asc, mp, cmd);
- break;
- case WL_SCAN:
- ret = ath_wificfg_scan(asc);
- break;
- case WL_LOAD_DEFAULTS:
- ret = ath_wificfg_loaddefaults(asc);
- break;
- case WL_DISASSOCIATE:
- ret = ath_wificfg_disassoc(asc);
- break;
- default:
- buf = kmem_zalloc(MAX_BUF_LEN, KM_SLEEP);
- outfp = (wldp_t *)buf;
- bcopy(mp->b_rptr, buf, sizeof (wldp_t));
- outfp->wldp_length = offsetof(wldp_t, wldp_buf);
- outfp->wldp_result = WL_LACK_FEATURE;
- for (i = 0; i < (outfp->wldp_length); i++)
- (void) mi_mpprintf_putc((char *)mp, buf[i]);
- kmem_free(buf, MAX_BUF_LEN);
- break;
- }
- return (ret);
-}
diff --git a/usr/src/uts/common/io/ath/hal_x86_32.o.uu b/usr/src/uts/common/io/ath/hal_x86_32.o.uu
index fb7d44642e..300c95a2fe 100644
--- a/usr/src/uts/common/io/ath/hal_x86_32.o.uu
+++ b/usr/src/uts/common/io/ath/hal_x86_32.o.uu
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting, Atheros
+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting, Atheros
* Communications, Inc. All rights reserved.
*
* Use is subject to license terms.
@@ -36,1961 +36,2226 @@
* SUCH DAMAGES.
*
*/
-#define ATH_HAL_VERSION "0.9.14.9"
#pragma ident "%Z%%M% %I% %E% SMI"
+#define ATH_HAL_VERSION "0.9.17.2"
begin-base64 644 hal.o
-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
+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
-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
-/P///4PEFGoAaAEBAABqAotUJFQPt0ICUFPo/P///4PEIItEJDT2QAJAD4S3AAAAg+wM
-agNoqAAAAGoBi1QkHItCHA+/QAJQU+j8////g8QUagNoqQAAAGoBi1QkHItCHA+/QARQ
-U+j8////g8QUagNoqgAAAGoBi1QkHItCHA+/QAZQU+j8////g8QUagNorgAAAGoBi1Qk
-HItCHA+/QAhQU+j8////g8QUagNorwAAAGoBi1QkHItCHA+/QApQU+j8////g8QUagNo
-sAAAAGoBi1QkHItCHA+/QAxQU+j8////g8Qgi0QkNPZAAoB0OIPsDGoAaB8BAABqAw+3
-RCQiUI1eDFPo/P///4PEFGoAaCIBAABqAw+3RCQgUFPo/P///4PEIOs2g+wMagBoFwEA
-AGoDD7dEJCZQjV4MU+j8////g8QUagBoGgEAAGoDD7dEJCRQU+j8////g8QgD7eFrAEA
-ACXwAAAAg/gvfmFmg72sAQAANXQKZoO9rAEAAEV1TYPsDGoCalpqAmoCjV4MU+j8////
-g8QUagJqXGoCagJT6Pz///+DxBRqAmpeagJqAlPo/P///4PEFGoCaP4AAABqAWoCU+j8
-////g8QgZoO9qgEAAEF2ZIPsDGoBaBkBAABqAWoBjV4MU+j8////g8QUagNqAWoCagFT
-6Pz///+DxBRqA2oDagJqAVPo/P///4PEFGoDaIsAAABqAWoBU+j8////g8QUagNojAAA
-AGoBagFT6Pz///+DxCC6AAAAAA+3TCQau4BpAACJ9o0EUo0EQYsEg4mElqwAAABCg/oM
-duqLVCQ09kICQHQjg+wMagBqJWoCi1QkHItCHA+/AFCNhqwAAABQ6Pz///+DxCCD7Axq
-AGoOagYPt0QkKFCNhqwAAABQ6Pz///+7AAAAAIPEIItNFIsU3YBlAACLBJ6JBBFH98c/
-AAAAdQ2D7AxqAej8////g8QQQ3TXuwAAAACNBFuLTRSLFMWIZQAAi0SeBIkEEUf3xz8A
-AAB1DYPsDGoB6Pz///+DxBBDdNO7AAAAAI0EW4tNFIsUxaBlAACLRJ4IiQQRR/fHPwAA
-AHUNg+wMagHo/P///4PEEEN007sAAAAAjQRbi00UixTFwGUAAItEngyJBBFH98c/AAAA
-dQ+D7AxqAej8////g8QQifZDg/snds67AAAAAJCNBFuLTRSLFMWAaQAAi4SerAAAAIkE
-EUf3xz8AAAB1EIPsDGoB6Pz///+DxBCNdgBDg/sMdsqLRCQUx4BgGQAAAAAAALgBAAAA
-g8QcW15fXcONdgBVV1ZTgez8AwAAi4QkEAQAAIlEJBgPt4CsAQAAJfAAAACD+C9+IotU
-JBhmg7qsAQAANXQKZoO6rAEAAEV1CsdEJBQCAAAA6wjHRCQUAQAAAIuMJBwEAAAPt0EC
-JfABAAA90AAAAHRpPdAAAAB/ED2gAAAAdEE9wAAAAHRU62w9UAEAAHQXPVABAAB/CT1A
-AQAAdAnrVT0ACAAAdU6LRCQYBVARAACJRCQMi0wkGA+3kWYIAADrPotEJBgFXBEAAIlE
-JAyLTCQYD7eRaAgAAOski0QkGAVoEQAAiUQkDItMJBgPt5FqCAAA6wq5AAAAAOn2BQAA
-i0wkDA+3QQa5AAAAAIXCD4ThBQAAi5QkGAQAAA+/AtHgZolEJASLjCQUBAAAD78B0eBm
-iUQkBmbHRCQord5mx0QkKq3ex0QkCAAAAAC+AAAAAItEJAwPt1AGjVwkKIn2idCJ8dP4
-qAF0GIN8JAgBD4fRBAAAi0QkCGaJNENAiUQkCEaD/gN22IPsDI1EJDBQjUQkMFCLVCQg
-D7dCBFD/MouMJDgEAAAPtwFQ6JwFAADHRCQoAAAAAItsJECDxCA7bCQkD4f1AQAAjXYA
-jUStAI1EhQCLTCQMi1EIjQSCiUQkEGaBfCQqrd4PhZcAAAAPt3QkKI0cto0cmIPsBA+3
-ewaNND9WjUMIUI2EJNwCAABQ6Pz///+DxAxWg8MQU42UJLwCAABS6Pz///+DxASNTCQ8
-UYtUJCAPv0ICUI2MJMQCAABRjYQk6AIAAFBX6IoFAACDxCCFwA+E8wMAAIPsBGiAAAAA
-jVQkOFKLRCQUweAHjYQEvAEAAFDo/P///4PEEOkpAQAAD7d0JCiNHLaLTCQQjRyZg+wE
-D7d7Bo00P1aNQwhQjYQk3AIAAFDo/P///4PEDFaDwxBTjZQkvAIAAFLo/P///4PEBI1M
-JDxRi1QkIA+/QgJQjYwkxAIAAFGNhCToAgAAUFfo7wQAAIPEIIXAD4RiAwAAg+wEaIAA
-AACNVCQ4UotEJBTB4AeNhAS8AQAAUOj8////D7d0JDqNHLaLTCQgjRyZg8QMD7d7Bo00
-P1aNQwhQjYQk3AIAAFDo/P///4PEDFaDwxBTjZQkvAIAAFLo/P///4PEBI1MJDxRi1Qk
-IA+/QgJQjYwkxAIAAFGNhCToAgAAUFfoXAQAAIPEIIXAD4TZAgAAg+wEaIAAAACNVCQ4
-UotEJBTB4AeNhAS8AAAAUOj8////g8QQ/0QkCEU7bCQkD4YO/v//i0wkIItEJAyLEGaL
-HEqLRCQkZos8QinIiUQkCGaBfCQqrd4PhbgAAAC+AAAAAIPsDItEJBTB4AYB8A+/hES8
-AQAAUA+/hHTAAQAAUA+3x1APt8NQi5QkOAQAAA+3AlDo4gIAAGaJhHSQAwAAg8QgRoP+
-P3a5g+wIi0wkIP+xBC8AAI2EJHwDAABQ6GcEAACJwmbB6A+NBAJm0fiLlCQkBAAAZokC
-ZouEJP4DAACJwmbB6g8B0GbR+GaJRCQ+i4wkKAQAAGaJAYtEJDiLlCQwBAAAZokCZolC
-AoPEEOk4AgAAvgAAAAAPt+8Pt/uJ9oPsDItcJBTB4wYB8w+/hFy8AQAAUA+/hHTAAQAA
-UFVXi4wkOAQAAA+3AVDoKAIAAGaJhHSQAwAAg8QUD7+EXLwAAABQD7+EdMAAAABQVVeL
-lCQ4BAAAD7cCUOj5AQAAZomEdBADAACDxCBGg/4/dpCDfCQUAg+FiwAAAI1EJB5Qi0wk
-HP+xBC8AAI2EJPgCAABQjYQkfAMAAFDoNQQAAInCZsHoD40EAmbR+IuUJCQEAABmiQJm
-i0QkLonCZsHqDwHQZtH4ZolEJD5mi4Qk/gMAAInCZsHqDwHQZtH4i4wkKAQAAGaJAYtE
-JDiLlCQwBAAAZokCZotEJDpmiUICg8QQ6SUBAABmi0wkBmY5jCRuAwAAD4ypAAAAi0Qk
-BGY5hCRuAwAAD4yXAAAAg+wIi1QkIP+yBC8AAI2EJPwCAABQ6MMCAACJwmaLRCQ6i4wk
-MAQAAGaJAWaJQQKJ0GbB6A+NBAJm0fiLlCQkBAAAZokCZouEJH4DAACJwmbB6g8B0GbR
-+GaJRCQ+i4wkKAQAAGaJAYPEEOmRAAAAuQAAAADppgAAALkAAAAA6ZwAAAC5AAAAAOmS
-AAAAuQAAAADpiAAAAIPsCItEJCD/sAQvAACNhCR8AwAAUOgsAgAAicKLRCQ4i4wkMAQA
-AGaJAWaJQQKJ0GbB6A+NBAJm0fiLlCQkBAAAZokCZouEJP4DAACJwmbB6g8B0GbR+GaJ
-RCQ+i4wkKAQAAGaJAYPEELg/AAAAi5QkGAQAAGYrAotMJBhmiYGAGQAAuQEAAACJyIHE
-/AMAAFteX13DkFdWU4tcJBCLdCQUi0wkGIt8JByLVCQgifhmOfF0JA+32w+39onYKfAP
-v9IPr8IPt8mJyinaD7/fD6/TAdAp8Zn3+ZhbXl/DkFVXVlOLdCQYi2wkIIt8JCSLVCQc
-D7dcJBQPt8qNDE4PtwY52HYSxwcAAAAAx0UAAAAAAOtTjXYAD7dB/jnYdygPt8JIiQeJ
-RQDrPYnQKfDR+IkHiUUA6zCJ0Cnw0fiJRQBAiQfrIon2ifI5znMaifYPtwI52HTUD7dC
-AjnYd9mDwgI5ynLqifZbXl9dw412AFVXVlOD7AyLbCQwi1QkIItEJCxmiUQkCmbHRCQI
-AABmx0QkBgEAuAAAAABmg/oBD4abAAAAvwAAAAAPt8JIiQQkjXYAD7dEJAaLVCQkZjk8
-QnMROwQkfQxm/0QkCGb/RCQGifYPt1QkBotcJCgPvzRTD7dEJAgPvwxDi1wkJA+3FFMP
-twRDD7ffVlFSUFPolf7//4PEFGaJRF0AZotUJApmOdB8G2aD/z93FZAPt8dmi1wkCmaJ
-XEUAR2aD/z927Edmg/8/D4Z5////uAEAAACDxAxbXl9dw1VXVlOD7ASLfCQYi2wkHA+/
-R34Pvxcp0IP4fn4OZotHfoPofmaJRCQC6whmiwdmiUQkAmaLd365PwAAAA+/V36J0Eg5
-wn4WicKNdgBJD7/BD78ERznQfgVmhcl574nKifO+PwAAAIn2jUL/icFmg/g+dx0Pv8Jm
-ORxHfBSJyo1K/2aD+T53CQ+/wmY5HEd97GaF0nUbZoX2eCWJ9g+/1maLRFUCZolEVQBm
-Tnnv6xCQD7/GZolURQCD6wJmTnmpD79EJAKDxARbXl9dw1VXVlOD7BCLdCQkZsdEJAJA
-AA+/Rn6LTCQoD78RKdCD+H5+DmaLbn6D7X5miWwkDusMi0QkKGaLAGaJRCQOZotWfmaJ
-VCQMuT8AAAAPv1Z+D79EJAxIOcJ+E4nCSQ+/wQ+/BEY50H4FZoXJee+LbCQoZotFfotU
-JDBmiQK/PwAAAItcJAyNdgCLbCQwZjldAH0OZoXJdRlmg3wkAkB1EZBmx0QkAgAAi3Qk
-KLk/AAAAZoXJfhoPv8FmORxGfBGJ9klmhcl+CQ+/wWY5HEZ98WaFyXUkZoN8JAIAdRxm
-hf94NA+/14tMJCxmi0RRAmaJBFFmT3ns6x6QD7/vZotEJAIJyItUJCxmiQRqg+sCZk8P
-iXP///8Pv0QkDoPEEFteX13DifZTg+wIi1wkEIO7BC8AAAB0G4PsDP+zBC8AAOj8////
-x4MELwAAAAAAAIPEEIO7eBkAAAB0G4PsDP+zeBkAAOj8////x4N4GQAAAAAAAIPEEIPE
-CFvDjXYAVlOD7BCLdCQgi1wkHGjgAAAA6Pz///+Jg3gZAACDxBCFwHUIxwYCAAAA63jH
-gwgvAACAAAAAg+wMaIAAAADo/P///4mDBC8AAIPEEIXAdQjHBgIAAADrTMeDCC8AAEAA
-AADHg8gWAAAcXAEAx4PMFgAApEcBAMeD0BYAALhKAQDHg9QWAAB0SAEAx4PYFgAA8EoB
-AMeD3BYAAIRRAQC4AQAAAJCDxARbXsOQkFVXVlOD7AyLfCQgi2wkKIt0JCy7AAAAAI0E
-W4tPFIsUxeBqAACJVCQIi1QkJI0EQosEheBqAACLVCQIiQQRRvfGPwAAAHUNg+wMagHo
-/P///4PEEEOD+w92vrsAAAAAkItPFIsU3WBsAACLBN1kbAAAiQQRRvfGPwAAAHUPg+wM
-agHo/P///4PEEIn2Q4H7iAAAAHbLuwAAAACJ9o0EW4tPFIsUhcBwAAAB6IsEhcBwAACJ
+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
-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
+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
-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
-AQAAEQEAAAEAAAAAAAAAAQAAAHAAAwAZAQAAHAEAAAEAAAAAAAAAAQAAADgAMAAkAQAA
-JwEAAAEAAAAAAAAAAQAAAFQAVQAvAQAAMgEAAAEAAAABAAAAAQAAAEQAVQA5AQAAPAEA
-AAEAAAABAAAAAQAAAEwACABDAQAARgEAAAAAAAAAAAAAAAAAAGAAUgBNAQAAUAEAAAEA
-AAABAAAAAQAAAGQANABiAQAAZQEAAAEAAAAAAAAAAQAAAHwAIABuAQAAcQEAAAEAAAAB
-AAAAAQAAAJgAWAB4AQAAewEAAAAAAAABAAAAAAAAAJwAUgCBAQAAhAEAAAEAAAABAAAA
-AQAAAKoAEACKAQAAjQEAAAEAAAAAAAAAAQAAALwAAwCWAQAAmQEAAAEAAAAAAAAAAQAA
-AL8ANgCkAQAApwEAAAEAAAAAAAAAAQAAAMQANwCvAQAAsgEAAAEAAAABAAAAAQAAAMsA
-NgC5AQAAvAEAAAAAAAAAAAAAAAAAANAANwDLAQAAzgEAAAEAAAAAAAAAAQAAANYAEADW
-AQAA2QEAAAEAAAABAAAAAQAAANoAAwDsAQAA7wEAAAAAAAAAAAAAAAAAADIDAwD3AQAA
-+gEAAAEAAAAAAAAAAQAAAN4AAwAAAgAAAwIAAAEAAAAAAAAAAQAAAOkANwAPAgAAEgIA
-AAEAAAAAAAAAAQAAAPYANwAaAgAAHQIAAAEAAAAAAAAAAQAAAPoANgAlAgAAKAIAAAEA
-AAAAAAAAAQAAAP8ANgAvAgAAMgIAAAEAAAAAAAAAAQAAAAwBMAA9AgAAQAIAAAEAAAAB
-AAAAAQAAABQBNwBIAgAASwIAAAEAAAAAAAAAAQAAACwBAwBTAgAAVgIAAAEAAAAAAAAA
-AQAAAEABEABdAgAAYAIAAAEAAAABAAAAAQAAAFQBAwBqAgAAbQIAAAEAAAAAAAAAAQAA
-AFgBIQB2AgAAeQIAAAEAAAABAAAAAQAAAFwBNQCDAgAAhgIAAAEAAAAAAAAAAQAAAGAB
-NwCOAgAAkQIAAAEAAAAAAAAAAQAAAGQBAwCZAgAAnAIAAAEAAAAAAAAAAQAAAGgBAwCi
-AgAApQIAAAEAAAAAAAAAAQAAAGwBUgCvAgAAsgIAAAEAAAABAAAAAQAAAHQBNwC3AgAA
-ugIAAAEAAAAAAAAAAQAAAHgBAwDCAgAAxQIAAAEAAAAAAAAAAQAAAHwBNwDMAgAAzwIA
-AAEAAAAAAAAAAQAAAIgBQADVAgAA2AIAAAEAAAAAAAAAAAAAAIkBQQDeAgAA4QIAAAEA
-AAAAAAAAAAAAAIoBSADoAgAA6wIAAAEAAAAAAAAAAAAAAIsBQwDyAgAA9QIAAAEAAAAA
-AAAAAAAAAIwBSgD8AgAA/wIAAAEAAAAAAAAAAAAAAI0BSwAGAwAACQMAAAEAAAAAAAAA
-AAAAAJABAwAQAwAAEwMAAAEAAAAAAAAAAQAAAI4BAwAaAwAAHQMAAAEAAAAAAAAAAQAA
-AJgBRQAoAwAAKwMAAAEAAAABAAAAAQAAAJoBRQA3AwAAOgMAAAEAAAAAAAAAAAAAAJsB
-SQBJAwAATAMAAAEAAAAAAAAAAAAAAJ4BAwBcAwAAXwMAAAEAAAAAAAAAAQAAAKwBAwBm
-AwAAaQMAAAEAAAAAAAAAAQAAAKYBAwBwAwAAcwMAAAEAAAAAAAAAAQAAALYBNQB7AwAA
-fgMAAAEAAAAAAAAAAQAAALgBNwCMAwAAjwMAAAEAAAAAAAAAAQAAALoBNwCZAwAAnAMA
-AAEAAAAAAAAAAQAAAL4BIQCnAwAAqgMAAAEAAAABAAAAAQAAACcDAwCwAwAAswMAAAEA
-AAAAAAAAAQAAAMoBAwC9AwAAwAMAAAAAAAAAAAAAAAAAAOQBEADJAwAAzAMAAAEAAAAB
-AAAAAQAAAOwBMADTAwAA1gMAAAEAAAABAAAAAQAAAPgBAwDdAwAA4AMAAAEAAAAAAAAA
-AQAAABACNwDoAwAA6wMAAAEAAAAAAAAAAQAAACoCIgD3AwAA+gMAAAEAAAAAAAAAAQAA
-AEICNwAGBAAACQQAAAEAAAAAAAAAAQAAAAACAwAQBAAAEwQAAAEAAAAAAAAAAQAAAEoC
-AwAYBAAAGwQAAAEAAAAAAAAAAQAAAE8CEAAkBAAAJwQAAAEAAAABAAAAAQAAAFwCAwAu
-BAAAMQQAAAEAAAAAAAAAAQAAAGACEQA2BAAAOQQAAAEAAAABAAAAAQAAAGgCNwBFBAAA
-SAQAAAEAAAAAAAAAAQAAAGwCNwBPBAAAUgQAAAEAAAAAAAAAAQAAAHYCEABbBAAAXgQA
-AAEAAAABAAAAAQAAAHoCAwBqBAAAbQQAAAEAAAAAAAAAAQAAAIICAwBzBAAAdgQAAAEA
-AAAAAAAAAQAAAIMCAwB+BAAAgQQAAAEAAAAAAAAAAQAAAKoCAwCIBAAAiwQAAAEAAAAA
-AAAAAQAAAL4CQgCYBAAAmwQAAAEAAAABAAAAAQAAAL8CNgClBAAAqAQAAAEAAAAAAAAA
-AQAAAMECNwC4BAAAuwQAAAEAAAAAAAAAAQAAAMYCNwDEBAAAxwQAAAEAAAABAAAAAQAA
-ANQCNwDUBAAA1wQAAAEAAAAAAAAAAQAAAPACNwDdBAAA4AQAAAEAAAAAAAAAAQAAAPQC
-NQDnBAAA6gQAAAEAAAAAAAAAAQAAAPgCAwD2BAAA+QQAAAEAAAAAAAAAAQAAAJ4ARwD/
-BAAAAgUAAAEAAAABAAAAAQAAAPwCRQAJBQAADAUAAAEAAAABAAAAAQAAAAwDMAAVBQAA
-GAUAAAEAAAAAAAAAAQAAABQDNgAqBQAALQUAAAEAAAAAAAAAAQAAABgDNgA1BQAAOAUA
-AAEAAAAAAAAAAQAAACQDAwA/BQAAQgUAAAEAAAAAAAAAAQAAABADAwBKBQAATQUAAAEA
-AAAAAAAAAQAAADoDNwBiBQAAZQUAAAEAAAAAAAAAAQAAAEgDEAB0BQAAdwUAAAEAAAAB
-AAAAAQAAAFoDRQCFBQAAiAUAAAEAAAAAAAAAAQAAAFwDOgCQBQAAkwUAAAEAAAABAAAA
-AQAAAF4DVgCeBQAAoQUAAAEAAAAAAAAAAQAAAMACAwCrBQAArgUAAAEAAAAAAAAAAQAA
-AHcDAwC3BQAAugUAAAEAAAAAAAAAAQAAAMwCAwDABQAAwwUAAAEAAAAAAAAAAQAAAAAA
-AAAAAAAAAAD/Af8BAwCYAZkBBwCYATALCACYATAMIAAgARAKIQAgAZkBIgAgATAMOgBg
-ARAKNwAwAZkBNQAwApkBNgAwA5kBMAAwBJkBOQAwBZkBNAAwBpkBMgAwA5kBMQAwA5kB
-EQAQAZkBEAAQARAKUgBQAZkBRQBQApkBRwBQA5kBQgBQBJkBWABQBZkBVQBQATAMVgBQ
-AjAMSQBQAlANQABAAUAKQQBAAUAKQwBAAkAKSABAARAKSgBAAUAKSwBAAUAKYABgAGAA
-YQBhAGEAYgBiAGIAYwBjAGMAZABkAGQAZQBlAGUAZgBmAGYAZwBnAGcAaABoAGgAaQBp
-AGkAagBqAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wECABAAABREFgUG
-cRbBFgUGAAAAAAAAAAAAAAAAUAEBABAAcRbBFh4AAAAAAAAAAAAAAAAAAAAAAAAAUAIB
-ABAAcRatFhcAAAAAAAAAAAAAAAAAAAAAAAAAUAMCABAAoBTIFBEGcRatFh4GAAAAAAAA
-AAAAAAAAUAQCABAAPBR4FBQAcRbBFhQAAAAAAAAAAAAAAAAAUAUCABAAcRbBFhEAAAAA
-AAAAAAAAAAAAAAAAAAAAMAECADAAPBTIFBQAfBVEFhsAAAAAAAAAAAAAAAAAMAIBADAA
-PBR4FBIAAAAAAAAAAAAAAAAAAAAAAAAAMAMBADAAPBTIFBQAAAAAAAAAAAAAAAAAAAAA
-AAAAMAQBADAAPBTIFBIAAAAAAAAAAAAAAAAAAAAAAAAAMAUBADAAPBR4FA8AAAAAAAAA
-AAAAAAAAAAAAAAAAMAYCADAAPBSgFBcAfBVEFh4AAAAAAAAAAAAAAAAAEAEDABAAjBTI
-FBcGPBR4FBEGcRbBFh4GAAAAAAAAIAECABAAPBTIFBcGcRbBFh4GAAAAAAAAAAAAAAAA
-YAEEABAAPBR4FBEGjBTIFBQGfBVEFhQGcRbBFh4GQAEBAEAAMhRuFBcAAAAAAAAAAAAA
-AAAAAAAAAAAAQAIDAEAAMhRuFBcAsBPYExcAOBN0ExcAAAAAAAAAAAD/AQIAEwAKFCYW
-BQYeFBIWBQYAAAAAAAAAAAAAAAAQAQMAEwCCFKoUFwZaFFoUEQaAFqgWHgYAAAAAAABg
-AQMAEwCCFKoUFwZaFFoUEQaAFqgWHgYAAAAAAABgAQQAEwB4FKAUFwZQFFAUEQaFFq0W
-HgakFRwWHgYQCgEAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wED
-AP8ACAlECQUGhQmFCQUG0AmsCgUGAAAAAAAAEAoBABQAhQmFCRQGAAAAAAAAAAAAAAAA
-AAAAAAAAMAoBADQAhQmFCRQGAAAAAAAAAAAAAAAAAAAAAAAAMAsBADQAhQmFCRQGAAAA
-AAAAAAAAAAAAAAAAAAAAMAwBADQAhQmFCRQGAAAAAAAAAAAAAAAAAAAAAAAAQAoBAEQA
-hQmFCRQGAAAAAAAAAAAAAAAAAAAAAAAAmQEBADQAhQmFCRQGAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAD/AQQA/wAICUQJBQZsCagJBQa0CbQJBQbQCawKBQZQDQIA
-/wBsCagJFAAICUQJFAAAAAAAAAAAAAAAAAAwCgEA/wCZCagJFAAAAAAAAAAAAAAAAAAA
-AAAAAAAwCwEAMQCACYoJFAAAAAAAAAAAAAAAAAAAAAAAAAAwDAEAMQBsCagJHgAAAAAA
-AAAAAAAAAAAAAAAAAAAQCgEAEQBsCZ4JGwYAAAAAAAAAAAAAAAAAAAAAAABACgIAQQBs
-CagJFAC0CbQJFAAAAAAAAAAAAAAAAACZAQEAMQBsCagJFAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABg
-AAAAAQAAAAAAAAAKAAAAOAEAAEABAABIAQAAaAEAAHABAAB4AQAAgAEAAIgBAACoAQAA
-sAEAAGYAAAABAAAAAAAAAAkAAAA4AQAAQAEAAFABAABoAQAAcAEAAHgBAACAAQAAkAEA
-ALABAAAAAAAAZwAAAAEAAAAAAAAACQAAADgBAABAAQAASAEAAGgBAABwAQAAeAEAAIAB
-AACIAQAAsAEAAAAAAABoAAAAAQAAAAAAAAAJAAAAOAEAAEABAABIAQAAaAEAAHABAAB4
-AQAAgAEAAIgBAACwAQAAAAAAAGEAAAAAAAAAAAAAAAgAAAA4AQAAQAEAAEgBAABoAQAA
-gAEAAIgBAACoAQAAsAEAAAAAAAAAAAAAYgAAAAIAAAAsAQAACgAAADgBAABAAQAASAEA
-AGgBAABwAQAAeAEAAIABAACIAQAAqAEAALABAABjAAAAAQAAAAAAAAAIAAAAOAEAAEAB
-AABIAQAAaAEAAHABAAB4AQAAiAEAALABAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAcAAAA4
-AQAAWAEAAGgBAABwAQAAeAEAAJgBAACwAQAAAAAAAAAAAAAAAAAAZQAAAAAAAAAAAAAA
-BQAAADgBAABIAQAAaAEAAIgBAACwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABpAAAAAAAA
-AAAAAAAIAAAAOAEAAFgBAABoAQAAcAEAAHgBAACAAQAAmAEAALABAAAAAAAAAAAAAGoA
-AAAAAAAAAAAAAAYAAAA4AQAASAEAAGgBAACAAQAAiAEAALABAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAEAAAAAAAAACQAAADgBAABAAQAA
-UAEAAGgBAABwAQAAeAEAAIABAACQAQAAsAEAAAAAAABmAAAAAQAAAAAAAAAJAAAAOAEA
-AEABAABQAQAAaAEAAHABAAB4AQAAgAEAAJABAACwAQAAAAAAAGcAAAABAAAAAAAAAAkA
-AAA4AQAAQAEAAEgBAABoAQAAcAEAAHgBAACAAQAAkAEAALABAAAAAAAAaAAAAAEAAAAA
-AAAACQAAADgBAABAAQAASAEAAGgBAABwAQAAeAEAAIABAACQAQAAsAEAAAAAAABhAAAA
-AAAAAAAAAAAHAAAAOAEAAEABAABQAQAAaAEAAIABAACQAQAAsAEAAAAAAAAAAAAAAAAA
-AGIAAAACAAAALAEAAAkAAAA4AQAAQAEAAFABAABoAQAAcAEAAHgBAACAAQAAkAEAALAB
-AAAAAAAAYwAAAAEAAAAAAAAACAAAADgBAABAAQAAUAEAAGgBAABwAQAAeAEAAJABAACw
-AQAAAAAAAAAAAABkAAAAAAAAAAAAAAAHAAAAOAEAAGABAABoAQAAcAEAAHgBAACgAQAA
-sAEAAAAAAAAAAAAAAAAAAGUAAAAAAAAAAAAAAAUAAAA4AQAAYAEAAGgBAACgAQAAsAEA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAAAAAAAAAAAACAAAADgBAABgAQAAaAEAAHAB
-AAB4AQAAgAEAAKABAACwAQAAAAAAAAAAAABqAAAAAAAAAAAAAAAGAAAAOAEAAGABAABo
-AQAAgAEAAKABAACwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAEABiAFAAQAAuAEAABABSANQAQAAwgEAADABEAJAAQAAzgEAAAIAUAEBAEABBACg
-AAgAwAAgANAAuDwAAJg8AACqPAAAuDwAAJ48AAC4PAAAuDwAALg8AACkPAAAuDwAALg8
-AAC4PAAAuDwAALg8AAC4PAAAuDwAALg8AAC4PAAAuDwAALg8AAC4PAAAuDwAALg8AAC4
-PAAAuDwAALg8AAC4PAAAuDwAALg8AAC4PAAAuDwAALg8AACwPAAAij0AAJE9AAC8PQAA
-mD0AALw9AAC8PQAAvD0AALw9AACfPQAAvD0AAKY9AACtPQAAjBSgFLQUyBQAAHwVkBWk
-FbgVzBXgFfQVCBYcFjAWRBYAAAAAQAECAMwWAADWFgAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAYAE6AEABAADwFgAAMAEAAEABAAAAAAAAMAIAAEABAAAA
-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
+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
@@ -1998,10 +2263,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAA4FUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAACoWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2030,36 +2296,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAABH
-AAAACJgAAAAAAAAMmAAApo6ECRCYAAAA4DI9FJgAAGsHAAAcmAAAAAAAACCYAAAAAgIC
-JJgAAA4OAAAomAAAAQICCiyYAAD8bwMAMJgAAAAAAAA0mAAADg4AADiYAAAHAAAAPJgA
-AAABAgBAmAAAAABjiUSYAACcFnITSJgAADO2GABMmAAAPGGEElCYAADguOgNVJgAAFlI
-BwBYmAAAur6AflyYAABeZjoxYJgAAAgdAABkmAAAAM4BAGiYAACQQZpAcJgAAA8AAAB0
-mAAAgAAAAHiYAAAEAAAAAJkAAAAAAAAEmQAAAAAAAAiZAAAAAAAADJkAAAAAgAAQmQAA
-AwAAAACbAAAAAAAABJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAA
-ABibAAAoAAAAHJsAAAQAAAAgmwAAJAAAACSbAAAUAAAAKJsAADQAAAAsmwAADAAAADCb
-AAAsAAAANJsAAAIAAAA4mwAAIgAAADybAAASAAAAQJsAADIAAABEmwAACgAAAEibAAAq
-AAAATJsAAAEAAABQmwAAIQAAAFSbAAARAAAAWJsAADEAAABcmwAACQAAAGCbAAApAAAA
-ZJsAAAUAAABomwAAJQAAAGybAAAVAAAAcJsAADUAAAB0mwAADQAAAHibAAAtAAAAfJsA
-AAMAAACAmwAAIwAAAISbAAATAAAAiJsAADMAAACMmwAACwAAAJCbAAArAAAAlJsAAAcA
-AACYmwAAJwAAAJybAAAXAAAAoJsAADcAAACkmwAADwAAAKibAAAvAAAArJsAAC8AAACw
-mwAALwAAALSbAAAvAAAAuJsAAC8AAAC8mwAALwAAAMCbAAAvAAAAxJsAAC8AAADImwAA
-LwAAAMybAAAvAAAA0JsAAC8AAADUmwAALwAAANibAAAvAAAA3JsAAC8AAADgmwAALwAA
-AOSbAAAvAAAA6JsAAC8AAADsmwAALwAAAPCbAAAvAAAA9JsAAC8AAAD4mwAALwAAAPyb
-AAAvAAAAAJoAAB0AAAAEmgAAXQAAAAiaAACdAAAADJoAAN0AAAAQmgAAHQEAABSaAAAh
-AAAAGJoAAGEAAAAcmgAAoQAAACCaAADhAAAAJJoAADEAAAAomgAAcQAAACyaAACxAAAA
-MJoAABwAAAA0mgAAXAAAADiaAAApAAAAPJoAAGkAAABAmgAAqQAAAESaAAAgAAAASJoA
-ABkAAABMmgAAWQAAAFCaAACZAAAAVJoAADAAAABYmgAABQAAAFyaAAAlAAAAYJoAAGUA
-AABkmgAApQAAAGiaAAAoAAAAbJoAAGgAAABwmgAAHwAAAHSaAAAeAAAAeJoAABgAAAB8
-mgAAWAAAAICaAACYAAAAhJoAAAMAAACImgAABAAAAIyaAABEAAAAkJoAAIQAAACUmgAA
-EwAAAJiaAAASAAAAnJoAAFIAAACgmgAAkgAAAKSaAADSAAAAqJoAACsAAACsmgAAKgAA
-ALCaAABqAAAAtJoAAKoAAAC4mgAAGwAAALyaAAAaAAAAwJoAAFoAAADEmgAAmgAAAMia
-AADaAAAAzJoAAAYAAADQmgAABgAAANSaAAAGAAAA2JoAAAYAAADcmgAABgAAAOCaAAAG
-AAAA5JoAAAYAAADomgAABgAAAOyaAAAGAAAA8JoAAAYAAAD0mgAABgAAAPiaAAAGAAAA
-/JoAAAYAAADUmAAAIAAAAMyYAAAEAAAAyJgAAAYBBgCcmAAAbQAAAMCYAAAAAAAA0JgA
-ABQAAAAJCQAAAAAAAgIGBgYGBgYCAgAAAAMABgAJADwAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAADwAAAAzAAAAAAAAAAAAAAAAAAAAAriAAAAIAAACgIAAAEY
-AAABAAAAQBgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRXGQApEQQAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2067,7 +2303,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAANyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2099,88 +2334,43 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCY8J
-tAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAEAAAABAAAAAAAAG
-AAAABgAAAAYAMAAAABUAAAAVAAAAHQAAABUAAABAEAAAD/wvAA/8LwAf/C8AD/wvAEQQ
-AAAP/C8AD/wvAB/8LwAP/C8ASBAAAA/8LwAP/C8AH/wvAA/8LwBMEAAAD/wvAA/8LwAf
-/C8AD/wvAFAQAAAP/C8AD/wvAB/8LwAP/C8AVBAAAA/8LwAP/C8AH/wvAA/8LwBYEAAA
-D/wvAA/8LwAf/C8AD/wvAFwQAAAP/C8AD/wvAB/8LwAP/C8AYBAAAA/8LwAP/C8AH/wv
-AA/8LwBkEAAAD/wvAA/8LwAf/C8AD/wvAHAQAABoAQAA4AEAALgBAABoAQAAMBAAADAC
-AADgAQAAsAAAADACAACwEAAAmA0AAIARAABIHwAAmA0AAPAQAADgoAAAaEABAIBYAADg
-oAAAFIAAAAAEAAQACAAIADAAIAAEAAQcgAAAp4+NDs+PjQ6Vj2ABp4+NDgSYAAAAAAAA
-AwAAAAAAAAAAAAAAIJgAAAACAgIAAgICAAIBAgACAgIkmAAADg4AAA4OAAAHBwAADg4A
-ACiYAAABAAIKAQACCgAAAQUBAAIKNJgAAA4OAAAODgAADg4AAA4OAAA4mAAABwAAAAcA
-AAALAAAACwAAAESYAACcFnITpRZyE6gWchOcFnITSJgAAGe6GABnuhgAaboYAGm6GABQ
-mAAA4LQoDOC0KAzgtCgM4LQoDFiYAAAuDYB+Lg2Afi4NwH4uDYB+XJgAAF5dNzFeXTcx
-Xl06MV5dNzFgmAAAEL0AABC9AAA4vQAAEL0AAGSYAAAAzgEAAM4BAADOAQAAzgEAFJkA
-ABAnAAAQJwAAfBUAABAnAAAYmQAAkAEAAJABAACEAAAAkAEAAESZAAAgEOBvIBDgbyAJ
-4G8gEOBvgKEAAP8U/wX/FP8F/xT/Bf8Z/wXUmAAAEAAAABQAAAAQAAAAEAAAAAAAAAAM
-AAAAAAAAACgAAACcnISELAAAAHx8fHw0AAAABQAAAEAAAAAAAAAARAAAAAgAAABIAAAA
-CAAAAEwAAAAQAAAAUAAAAAAAAABUAAAAHwAAAAAIAAAAAAAABAgAAAAAAAAICAAAAAAA
-AAwIAAAAAAAAEAgAAAAAAAAUCAAAAAAAABgIAAAAAAAAHAgAAAAAAAAgCAAAAAAAACQI
-AAAAAAAAMBIAAAAAAAAEgAAAAAAAAAiAAAAAAAAADIAAAAAAAAAYgAAAAAAAACSAAAAA
-AAAAKIAAADAAAAAsgAAA//8HADCAAAD///8BNIAAADEAAAA4gAAAAAAAADyAAAAAAAAA
-QIAAAAAAAABEgAAAAgAAAEiAAAAAAAAAVIAAAAAAAABYgAAAAAAAAAiYAAAAAAAADJgA
-AJOQhC0QmAAAAOAyfRSYAABrDwAAHJgAAAAAAAAsmAAA/m8CADCYAAAAAAAAPJgAAAAB
-AgBAmAAAegFqIEyYAAA8YYQSVJgAAFkIAABomAAAkEGaQGyYAACBsAwFcJgAAA8AAAB0
-mAAAgAAAAHiYAAAMAAAAAJkAAAAAAAAEmQAAAAAAAAiZAAAAAAAADJkAAAAAgAAQmQAA
-AQAAAByZAAAqCQAAIJkAAAAAAAAkmQAABYoFACiZAAABAAAALJkAAAAAAAAwmQAAAAAA
-ADSZAAAAAAAAOJkAAAAAAAA8mQAAPwAAAECZAAAEAAAASJkAAAAAAABMmQAAAAAAAFCZ
-AAAAAAAAVJkAAEzxUF1YmQAAGAAAAFyZAACOaksAhKEAAP8F/waIoQAA/wf/B4yhAAD/
-CP8IkKEAAP8J/wmUoQAA/wr/CpihAAD/C/8LnKEAAP8M/wygoQAA/w3/DaShAAD/Dv8P
-qKEAAP8S/xKsoQAA/xP/FLChAAD/Ff8WtKEAAP8X/xm4oQAA/xr/G7yhAAD/Hf8ewKEA
-AP8g/yPEoQAA/yX/J8ihAAD/Kf8szKEAAP8v/zHQoQAA/zT/N9ShAAD/Ov862KEAAP86
-/zrcoQAA/zr/OuChAAD/Ov865KEAAP86/zrooQAA/zr/OuyhAAD/Ov868KEAAP86/zr0
-oQAA/zr/OvihAAD/Ov86/KEAAP86/zoAmwAAAAAAAASbAAAgAAAACJsAABAAAAAMmwAA
-MAAAABCbAAAIAAAAFJsAACgAAAAYmwAABAAAABybAAAkAAAAIJsAABQAAAAkmwAANAAA
-ACibAAAMAAAALJsAACwAAAAwmwAAAgAAADSbAAAiAAAAOJsAABIAAAA8mwAAMgAAAECb
-AAAKAAAARJsAACoAAABImwAABgAAAEybAAAmAAAAUJsAABYAAABUmwAANgAAAFibAAAO
-AAAAXJsAAC4AAABgmwAAAQAAAGSbAAAhAAAAaJsAABEAAABsmwAAMQAAAHCbAAAJAAAA
-dJsAACkAAAB4mwAABQAAAHybAAAlAAAAgJsAABUAAACEmwAANQAAAIibAAANAAAAjJsA
-AC0AAACQmwAAAwAAAJSbAAAjAAAAmJsAABMAAACcmwAAMwAAAKCbAAALAAAApJsAACsA
-AAComwAAKwAAAKybAAArAAAAsJsAACsAAAC0mwAAKwAAALibAAArAAAAvJsAACsAAADA
-mwAAKwAAAMSbAAArAAAAyJsAACsAAADMmwAAKwAAANCbAAArAAAA1JsAACsAAADYmwAA
-KwAAANybAAArAAAA4JsAACsAAADkmwAAKwAAAOibAAArAAAA7JsAACsAAADwmwAAKwAA
-APSbAAArAAAA+JsAAAIAAAD8mwAAFgAAANSYAAAgAAAA2JgAAGgQYAAAAAAAAAAAAACa
-AACpAQAAAAAAAASaAADpAQAAQAAAAAiaAAApAAAAgAAAAAyaAABpAAAAUAEAABCaAACZ
-AQAAkAEAABSaAADZAQAA0AEAABiaAAAZAAAAEAAAAByaAABZAAAARAAAACCaAACZAAAA
-hAAAACSaAAClAQAASAEAACiaAADlAQAAiAEAACyaAAAlAAAAyAEAADCaAADIAQAAFAAA
-ADSaAAAIAAAAQgAAADiaAABIAAAAggAAADyaAACIAAAAeAEAAECaAACYAQAAuAEAAESa
-AADYAQAA+AEAAEiaAAAYAAAAEgAAAEyaAABYAAAAUgAAAFCaAACYAAAAkgAAAFSaAACk
-AQAAfAEAAFiaAADkAQAAvAEAAFyaAAAkAAAA/AEAAGCaAABkAAAACgAAAGSaAACkAAAA
-SgAAAGiaAADkAAAAigAAAGyaAAAKAQAAWgEAAHCaAABKAQAAmgEAAHSaAACKAQAA2gEA
-AHiaAADKAQAADgAAAHyaAAAKAAAATgAAAICaAABKAAAAjgAAAISaAACKAAAAXgEAAIia
-AAC6AQAAngEAAIyaAAD6AQAA3gEAAJCaAAA6AAAACQAAAJSaAAB6AAAASQAAAJiaAACG
-AQAAiQAAAJyaAADGAQAAeQEAAKCaAAAGAAAAuQEAAKSaAABGAAAA+QEAAKiaAACGAAAA
-OQAAAKyaAADGAAAAeQAAALCaAADGAAAAuQAAALSaAADGAAAAvQEAALiaAADGAAAA/QEA
-ALyaAADGAAAAPQAAAMCaAADGAAAAfQAAAMSaAADGAAAAvQAAAMiaAADGAAAA/QAAAMya
-AADGAAAA/QAAANCaAADGAAAA/QAAANSaAADGAAAA/QAAANiaAADGAAAA/QAAANyaAADG
-AAAA/QAAAOCaAADGAAAA/QAAAOSaAADGAAAA/QAAAOiaAADGAAAA/QAAAOyaAADGAAAA
-/QAAAPCaAADGAAAA/QAAAPSaAADGAAAA/QAAAPiaAADGAAAA/QAAAPyaAADGAAAA/QAA
-AAEAAABGAAAAYAAAAAEAAABGAAAAYQAAAAEAAABGAAAAYgAAAAEAAABGAAAAYwAAAAEA
-AABGAAAAZAAAAAEAAABGAAAAZQAAAAEAAABGAAAAZgAAAAEAAABGAAAAZwAAAAEAAABG
-AAAAaAAAAAEAAABGAAAAaQAAAAEAAABGAAAAagAAAAEAAABGAAAAawAAAAEAAABGAAAA
-bAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAA
-AAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEA
-AABGAAAAdQAAAAEAAABGAAAAdgAAAAEAAABGAAAAdwAAAAEAAABGAAAAeAAAAAEAAABG
-AAAAeQAAAAEAAABGAAAAegAAAAEAAABGAAAAewAAAAEAAABGAAAAfAAAAAEAAABGAAAA
-fQAAAAEAAABGAAAAfgAAAAEAAABGAAAAfwAAAAEAAABGAAAAgAAAAAEAAABEAAAAfAAA
-AAEAAABGAAAAiAAAAAEAAABGAAAAjAAAAAEAAABGAAAAkAAAAAEAAABGAAAAlAAAAAEA
-AABGAAAAmAAAAAEAAABGAAAAnAAAAAEAAABGAAAAoAAAAAEAAABGAAAApAAAAAEAAABG
-AAAAqAAAAAEAAABGAAAArAAAAAEAAABGAAAAsAAAAAEAAABGAAAAtAAAAAACBwAAAAMA
-BgAJADwAAABjuwAAY7sAAI27AACNuwAAt7sAALe7AADhuwAA4bsAAAAAAAAAAAAACQAA
-AAQAAAAEAAEAAQABAAYAAABGRzgAAAAAAAAAAAAAAAAABAAAAAEAAQAEAAAARkc3AAAA
-AAAAAAAAAAAAAAMAAQABAAEAAwAAAEZHNgAAAAAAAAAAAAAAAAAEAAAAAAABAAEAAABG
-RzUAAAAAAAAAAAAAAAAABAABAAEAAAAAAAAARkc0AAAAAAAAAAAAAAAAAAQAAAABAAAA
-/v///0ZHMwAAAAAAAAAAAAAAAAADAAEAAQAAAP3///9GRzIAAAAAAAAAAAAAAAAABAAA
-AAAAAAD8////RkcxAAAAAAAAAAAAAAAAAAIAAQABAAAA+v///0ZHMAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBBUGQApEQQAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8A
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAABHAAAACJgAAAAAAAAMmAAApo6ECRCY
+AAAA4DI9FJgAAGsHAAAcmAAAAAAAACCYAAAAAgICJJgAAA4OAAAomAAAAQICCiyYAAD8
+bwMAMJgAAAAAAAA0mAAADg4AADiYAAAHAAAAPJgAAAABAgBAmAAAAABjiUSYAACcFnIT
+SJgAADO2GABMmAAAPGGEElCYAADguOgNVJgAAFlIBwBYmAAAur6AflyYAABeZjoxYJgA
+AAgdAABkmAAAAM4BAGiYAACQQZpAcJgAAA8AAAB0mAAAgAAAAHiYAAAEAAAAAJkAAAAA
+AAAEmQAAAAAAAAiZAAAAAAAADJkAAAAAgAAQmQAAAwAAAACbAAAAAAAABJsAACAAAAAI
+mwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAAABibAAAoAAAAHJsAAAQAAAAgmwAA
+JAAAACSbAAAUAAAAKJsAADQAAAAsmwAADAAAADCbAAAsAAAANJsAAAIAAAA4mwAAIgAA
+ADybAAASAAAAQJsAADIAAABEmwAACgAAAEibAAAqAAAATJsAAAEAAABQmwAAIQAAAFSb
+AAARAAAAWJsAADEAAABcmwAACQAAAGCbAAApAAAAZJsAAAUAAABomwAAJQAAAGybAAAV
+AAAAcJsAADUAAAB0mwAADQAAAHibAAAtAAAAfJsAAAMAAACAmwAAIwAAAISbAAATAAAA
+iJsAADMAAACMmwAACwAAAJCbAAArAAAAlJsAAAcAAACYmwAAJwAAAJybAAAXAAAAoJsA
+ADcAAACkmwAADwAAAKibAAAvAAAArJsAAC8AAACwmwAALwAAALSbAAAvAAAAuJsAAC8A
+AAC8mwAALwAAAMCbAAAvAAAAxJsAAC8AAADImwAALwAAAMybAAAvAAAA0JsAAC8AAADU
+mwAALwAAANibAAAvAAAA3JsAAC8AAADgmwAALwAAAOSbAAAvAAAA6JsAAC8AAADsmwAA
+LwAAAPCbAAAvAAAA9JsAAC8AAAD4mwAALwAAAPybAAAvAAAAAJoAAB0AAAAEmgAAXQAA
+AAiaAACdAAAADJoAAN0AAAAQmgAAHQEAABSaAAAhAAAAGJoAAGEAAAAcmgAAoQAAACCa
+AADhAAAAJJoAADEAAAAomgAAcQAAACyaAACxAAAAMJoAABwAAAA0mgAAXAAAADiaAAAp
+AAAAPJoAAGkAAABAmgAAqQAAAESaAAAgAAAASJoAABkAAABMmgAAWQAAAFCaAACZAAAA
+VJoAADAAAABYmgAABQAAAFyaAAAlAAAAYJoAAGUAAABkmgAApQAAAGiaAAAoAAAAbJoA
+AGgAAABwmgAAHwAAAHSaAAAeAAAAeJoAABgAAAB8mgAAWAAAAICaAACYAAAAhJoAAAMA
+AACImgAABAAAAIyaAABEAAAAkJoAAIQAAACUmgAAEwAAAJiaAAASAAAAnJoAAFIAAACg
+mgAAkgAAAKSaAADSAAAAqJoAACsAAACsmgAAKgAAALCaAABqAAAAtJoAAKoAAAC4mgAA
+GwAAALyaAAAaAAAAwJoAAFoAAADEmgAAmgAAAMiaAADaAAAAzJoAAAYAAADQmgAABgAA
+ANSaAAAGAAAA2JoAAAYAAADcmgAABgAAAOCaAAAGAAAA5JoAAAYAAADomgAABgAAAOya
+AAAGAAAA8JoAAAYAAAD0mgAABgAAAPiaAAAGAAAA/JoAAAYAAADUmAAAIAAAAMyYAAAE
+AAAAyJgAAAYBBgCcmAAAbQAAAMCYAAAAAAAA0JgAABQAAAAJCQAAAAAAAgIGBgYGBgYC
+AgAAAAMABgAJADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAA
+zAAAAAAAAAAAAAAAAAAAAAriAAAAIAAACgIAAAEYAAABAAAAQBgEAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAABQRXGQAiBQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2191,6 +2381,8 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAABYjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AACojAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2214,99 +2406,99 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCY8JtAkICWwJtAnJ
-////yf///8n////J////wv////L////y////8v////L////0////wP///8D////A////
-wP///7r///+y////sv///7L///+y////sP///y3iAADm4QAA8+EAAGziAAAM4gAAX+IA
-AAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAEAAAABAAAAAAAAGAAAABgAAAAYAfO8AANDu
-AAAO7wAAHe8AACTvAAAz7wAAfO8AAHzvAAB87wAAfO8AAHzvAAB87wAAfO8AAHzvAAB8
-7wAAfO8AAFrvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBAAAA/8LwAP/C8A
-H/wvAA/8LwAP/C8ARBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8ASBAAAA/8LwAP/C8AH/wv
-AA/8LwAP/C8ATBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8AUBAAAA/8LwAP/C8AH/wvAA/8
-LwAP/C8AVBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8AWBAAAA/8LwAP/C8AH/wvAA/8LwAP
-/C8AXBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8AYBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8A
-ZBAAAA/8LwAP/C8AH/wvAA/8LwAP/C8AMBAAADACAADgAQAAsAAAAGABAADgAQAAcBAA
-AGgBAADgAQAAuAEAAIwBAADgAQAAsBAAAGAOAACAEQAAHB8AADg+AACAEQAA8BAAAOCg
-AABoQAEAgFgAAOCwAABoQAEAFIAAAOgD6APgBuAGIAQgBEAIQAjgBuAGBJgAAAAAAAAD
-AAAAAAAAAAAAAAADAAAAIJgAAAACAgIAAgICAAIBAgACAgIAAgICJJgAAA4OAAAODgAA
-BwcAAA4OAAAODgAARJgAABwWchMlHHITKBdyE6IWchMlHHITYJgAABCdAAAQnQAAGJ0A
-ABidAAAQnQAAZJgAAADOAQAAzgEAAM4BAADOAQAAzgEAaJgAAJBBmkCQQZpAkEGaQJBB
-mkCQQZpAGJkAALgBAAC4AQAAhAAAAAgBAAC4AQAAJJkAAAWKBRAFigUQBYoFEAWKBRAF
-igUQMKIAAAAAAAAAAAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAMAAAAAAAAADQAAAAFAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCY8JtAkAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ACAAAAAgAAAAQAAAAEAAAAAAAAYAAAAGAAAABgAwAAAAFQAAABUAAAAdAAAAFQAAAEAQ
+AAAP/C8AD/wvAB/8LwAP/C8ARBAAAA/8LwAP/C8AH/wvAA/8LwBIEAAAD/wvAA/8LwAf
+/C8AD/wvAEwQAAAP/C8AD/wvAB/8LwAP/C8AUBAAAA/8LwAP/C8AH/wvAA/8LwBUEAAA
+D/wvAA/8LwAf/C8AD/wvAFgQAAAP/C8AD/wvAB/8LwAP/C8AXBAAAA/8LwAP/C8AH/wv
+AA/8LwBgEAAAD/wvAA/8LwAf/C8AD/wvAGQQAAAP/C8AD/wvAB/8LwAP/C8AcBAAAGgB
+AADgAQAAuAEAAGgBAAAwEAAAMAIAAOABAACwAAAAMAIAALAQAACYDQAAgBEAAEgfAACY
+DQAA8BAAAOCgAABoQAEAgFgAAOCgAAAUgAAAAAQABAAIAAgAMAAgAAQABByAAACnj40O
+z4+NDpWPYAGnj40OBJgAAAAAAAADAAAAAAAAAAAAAAAgmAAAAAICAgACAgIAAgECAAIC
+AiSYAAAODgAADg4AAAcHAAAODgAAKJgAAAEAAgoBAAIKAAABBQEAAgo0mAAADg4AAA4O
+AAAODgAADg4AADiYAAAHAAAABwAAAAsAAAALAAAARJgAAJwWchOlFnITqBZyE5wWchNI
+mAAAZ7oYAGe6GABpuhgAaboYAFCYAADgtCgM4LQoDOC0KAzgtCgMWJgAAC4NgH4uDYB+
+Lg3Afi4NgH5cmAAAXl03MV5dNzFeXToxXl03MWCYAAAQvQAAEL0AADi9AAAQvQAAZJgA
+AADOAQAAzgEAAM4BAADOAQAUmQAAECcAABAnAAB8FQAAECcAABiZAACQAQAAkAEAAIQA
+AACQAQAARJkAACAQ4G8gEOBvIAngbyAQ4G+AoQAA/xT/Bf8U/wX/FP8F/xn/BdSYAAAQ
+AAAAFAAAABAAAAAQAAAAAAAAAAwAAAAAAAAAKAAAAJychIQsAAAAfHx8fDQAAAAFAAAA
QAAAAAAAAABEAAAACAAAAEgAAAAIAAAATAAAABAAAABQAAAAAAAAAFQAAAAfAAAAAAgA
AAAAAAAECAAAAAAAAAgIAAAAAAAADAgAAAAAAAAQCAAAAAAAABQIAAAAAAAAGAgAAAAA
-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
-+JkAABgAAAAEogAAAAAAAAiiAACIZz7QKKIAALUBAAA8ogAAr4nIEwSbAAAgAAAACJsA
-ABAAAAAMmwAAMAAAABCbAAAIAAAAFJsAACgAAAAYmwAABAAAABybAAAkAAAAIJsAABQA
-AAAkmwAANAAAACybAAAsAAAAMJsAAAIAAAA0mwAAIgAAADybAAAyAAAAQJsAAAoAAABE
-mwAAKgAAAEibAAAGAAAATJsAACYAAABQmwAAFgAAAFSbAAA2AAAAWJsAAA4AAABcmwAA
-LgAAAGCbAAABAAAAaJsAABEAAABsmwAAMQAAAHCbAAAJAAAAdJsAACkAAAB4mwAABQAA
-AHybAAAlAAAAgJsAABUAAACEmwAANQAAAIibAAANAAAAkJsAAAMAAACUmwAAIwAAAJib
-AAATAAAAoJsAAAsAAACkmwAAKwAAAKibAAArAAAArJsAACsAAACwmwAAKwAAALSbAAAr
+AAAcCAAAAAAAACAIAAAAAAAAJAgAAAAAAAAwEgAAAAAAAASAAAAAAAAACIAAAAAAAAAM
+gAAAAAAAABiAAAAAAAAAJIAAAAAAAAAogAAAMAAAACyAAAD//wcAMIAAAP///wE0gAAA
+MQAAADiAAAAAAAAAPIAAAAAAAABAgAAAAAAAAESAAAACAAAASIAAAAAAAABUgAAAAAAA
+AFiAAAAAAAAACJgAAAAAAAAMmAAAk5CELRCYAAAA4DJ9FJgAAGsPAAAcmAAAAAAAACyY
+AAD+bwIAMJgAAAAAAAA8mAAAAAECAECYAAB6AWogTJgAADxhhBJUmAAAWQgAAGiYAACQ
+QZpAbJgAAIGwDAVwmAAADwAAAHSYAACAAAAAeJgAAAwAAAAAmQAAAAAAAASZAAAAAAAA
+CJkAAAAAAAAMmQAAAACAABCZAAABAAAAHJkAACoJAAAgmQAAAAAAACSZAAAFigUAKJkA
+AAEAAAAsmQAAAAAAADCZAAAAAAAANJkAAAAAAAA4mQAAAAAAADyZAAA/AAAAQJkAAAQA
+AABImQAAAAAAAEyZAAAAAAAAUJkAAAAAAABUmQAATPFQXViZAAAYAAAAXJkAAI5qSwCE
+oQAA/wX/BoihAAD/B/8HjKEAAP8I/wiQoQAA/wn/CZShAAD/Cv8KmKEAAP8L/wucoQAA
+/wz/DKChAAD/Df8NpKEAAP8O/w+ooQAA/xL/EqyhAAD/E/8UsKEAAP8V/xa0oQAA/xf/
+GbihAAD/Gv8bvKEAAP8d/x7AoQAA/yD/I8ShAAD/Jf8nyKEAAP8p/yzMoQAA/y//MdCh
+AAD/NP831KEAAP86/zrYoQAA/zr/OtyhAAD/Ov864KEAAP86/zrkoQAA/zr/OuihAAD/
+Ov867KEAAP86/zrwoQAA/zr/OvShAAD/Ov86+KEAAP86/zr8oQAA/zr/OgCbAAAAAAAA
+BJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAAABibAAAEAAAAHJsA
+ACQAAAAgmwAAFAAAACSbAAA0AAAAKJsAAAwAAAAsmwAALAAAADCbAAACAAAANJsAACIA
+AAA4mwAAEgAAADybAAAyAAAAQJsAAAoAAABEmwAAKgAAAEibAAAGAAAATJsAACYAAABQ
+mwAAFgAAAFSbAAA2AAAAWJsAAA4AAABcmwAALgAAAGCbAAABAAAAZJsAACEAAABomwAA
+EQAAAGybAAAxAAAAcJsAAAkAAAB0mwAAKQAAAHibAAAFAAAAfJsAACUAAACAmwAAFQAA
+AISbAAA1AAAAiJsAAA0AAACMmwAALQAAAJCbAAADAAAAlJsAACMAAACYmwAAEwAAAJyb
+AAAzAAAAoJsAAAsAAACkmwAAKwAAAKibAAArAAAArJsAACsAAACwmwAAKwAAALSbAAAr
AAAAuJsAACsAAAC8mwAAKwAAAMCbAAArAAAAxJsAACsAAADImwAAKwAAAMybAAArAAAA
0JsAACsAAADUmwAAKwAAANibAAArAAAA3JsAACsAAADgmwAAKwAAAOSbAAArAAAA6JsA
-ACsAAADsmwAAKwAAAPCbAAArAAAA9JsAACsAAAD4mwAAAgAAAPybAAAWAAAAAAAAAAAA
-AAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyY
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAADgAAAA4AAAAOAAAADgAAAA4AJyYAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAA
-AMAAAACAAAAAgAAAAJyYAAD5AAQA+QAEAP8ABAD9AAQA/QAEANSYAAAAAAAAAAAAAAQA
-AAAEAAAABAAAAAAAAAAAAAAAAJoAAKkBAAAAAAAABJoAAOkBAABAAAAACJoAACkAAACA
+ACsAAADsmwAAKwAAAPCbAAArAAAA9JsAACsAAAD4mwAAAgAAAPybAAAWAAAA1JgAACAA
+AADYmAAAaBBgAAAAAAAAAAAAAJoAAKkBAAAAAAAABJoAAOkBAABAAAAACJoAACkAAACA
AAAADJoAAGkAAABQAQAAEJoAAJkBAACQAQAAFJoAANkBAADQAQAAGJoAABkAAAAQAAAA
HJoAAFkAAABEAAAAIJoAAJkAAACEAAAAJJoAAKUBAABIAQAAKJoAAOUBAACIAQAALJoA
ACUAAADIAQAAMJoAAMgBAAAUAAAANJoAAAgAAABCAAAAOJoAAEgAAACCAAAAPJoAAIgA
@@ -2321,792 +2513,1446 @@ AMYAAAC9AQAAuJoAAMYAAAD9AQAAvJoAAMYAAAA9AAAAwJoAAMYAAAB9AAAAxJoAAMYA
AAC9AAAAyJoAAMYAAAD9AAAAzJoAAMYAAAD9AAAA0JoAAMYAAAD9AAAA1JoAAMYAAAD9
AAAA2JoAAMYAAAD9AAAA3JoAAMYAAAD9AAAA4JoAAMYAAAD9AAAA5JoAAMYAAAD9AAAA
6JoAAMYAAAD9AAAA7JoAAMYAAAD9AAAA8JoAAMYAAAD9AAAA9JoAAMYAAAD9AAAA+JoA
-AMYAAAD9AAAA/JoAAMYAAAD9AAAA1JgAACAAAADUmAAAEAAAABQAAAAQAAAAEAAAABQA
-AADYmAAAaBBgAGgQYABoEGAAaBBgAGgQYAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AJyYAAAAAAAQAAAAEAAAABAAAAAQAAAAEJyYAAAAAAAEAAAABAAAAAQAAAAEAAAABJyY
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAoAAAAAAAAAAJyYAADAADgA
-gAA4AMAAOALAADgAwAA4AJyYAAAGAAIABgACAAYAAAAGAAIABgACAJyYAACJAAAAiQAA
-AIkAAACJAAAAiQAAAJyYAACgAAAAoAAAAKAAAACgAAAAoAAAAJyYAAAHAAQABwAEAAcA
-BAAHAAQABwAEANSYAAAaAAAAGgAAABoAAAAaAAAAGgAAAAAAAAAAAAAAnJgAAEAAAABI
-AAAAQAAAAEAAAABAAAAAnJgAABAAAAAQAAAAEAAAABAAAAAQAAAAnJgAAAgAAAAIAAAA
-CAAAAAgAAAAIAAAAnJgAAE8AAABPAAAATwAAAE8AAABPAAAAnJgAAPEAAADxAAAAYQAA
-APEAAADxAAAAnJgAAE+QAABPkAAATJAAAE+QAABPkAAAnJgAAFoSAABaEgAAmhIAAFoS
-AABaEgAAzJgAAA4AAAAOAAAADwAAAA4AAAAOAAAAAQAAAEYAAABgAAAAAQAAAEYAAABh
-AAAAAQAAAEYAAABiAAAAAQAAAEYAAABjAAAAAQAAAEYAAABkAAAAAQAAAEYAAABlAAAA
-AQAAAEYAAABmAAAAAQAAAEYAAABnAAAAAQAAAEYAAABoAAAAAQAAAEYAAABpAAAAAQAA
-AEYAAABqAAAAAQAAAEYAAABrAAAAAQAAAEYAAABsAAAAAQAAAEYAAAB0AAAAAQAAAEYA
-AAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0
-AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB1AAAAAQAAAEYAAAB2AAAA
-AQAAAEYAAAB3AAAAAQAAAEYAAAB4AAAAAQAAAEYAAAB5AAAAAQAAAEYAAAB6AAAAAQAA
-AEYAAAB7AAAAAQAAAEYAAAB8AAAAAQAAAEYAAAB9AAAAAQAAAEYAAAB+AAAAAQAAAEYA
-AAB/AAAAAQAAAEYAAACAAAAAAQAAAEQAAAB8AAAAAQAAAEYAAACIAAAAAQAAAEYAAACM
-AAAAAQAAAEYAAACQAAAAAQAAAEYAAACUAAAAAQAAAEYAAACYAAAAAQAAAEYAAACcAAAA
-AQAAAEYAAACgAAAAAQAAAEYAAACkAAAAAQAAAEYAAACoAAAAAQAAAEYAAACsAAAAAQAA
-AEYAAACwAAAAAQAAAEYAAAC0AAAAlToBAHg6AQB8OgEAgDoBAJA6AQCQOgEAhDoBAIg6
-AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAFYAAABWAAAAVgAAAFYAAABWAAAAc
-gAAAp5ONEs8TiAmVE+AEqxPgEs8TiAkomAAAAQACCgEAAgoAAQIFAQACCgEAAgo0mAAA
-Dg4AAA4OAAAODgAADg4AAA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAbdoY
-AG3aGAB1yhgAdcoYAHXKGABQmAAA4LToDeC06A3gtOgN4LToDeC06A1YmAAALg2Afi4N
-gH4uDeh+Lg3ofi4NgH5cmAAAXmY3MV5mNzFeZjcxXmY3MV5mNzFsmAAAgbAMBYGwDAWB
-sAwFgbAMBYGwDAUUmQAA0AcAANAHAABMBAAAmAgAANAHAABEmQAAIBC49yAQuPcQDbj3
-EBC49xAQuPcEogAAAAAAAAAAAAAIAAAACAAAAAgAAAAIogAAiGe+1ohnvtaIZz7QiGc+
-0IhnPtAMogAAQAEsZEABLGRgwUJkYMFCZGDBQmQcogAACoCDGAqAgxgKgHMYCoCDGAqA
-gxgwEgAAAAAAACyYAAD+LwIAPJgAAAABAgBMmAAAPGGEEjCZAACCSAAAQJkAAAQAAAB0
-mQAAAAAAACiiAAC1AQAAPKIAAK+JyBMEmwAAAQAAAAibAAACAAAADJsAAAMAAAAQmwAA
-BAAAABSbAAAFAAAAGJsAAAgAAAAcmwAACQAAACCbAAAKAAAAJJsAAAsAAAAsmwAADQAA
-ADCbAAAQAAAANJsAABEAAAA8mwAAEwAAAECbAAAUAAAARJsAABUAAABImwAAGAAAAEyb
-AAAZAAAAUJsAABoAAABUmwAAGwAAAFibAAAcAAAAXJsAAB0AAABgmwAAIAAAAGibAAAi
-AAAAbJsAACMAAABwmwAAJAAAAHSbAAAlAAAAeJsAACgAAAB8mwAAKQAAAICbAAAqAAAA
-hJsAACsAAACImwAALAAAAJCbAAAwAAAAlJsAADEAAACYmwAAMgAAAKCbAAA0AAAApJsA
-ADUAAAComwAANQAAAKybAAA1AAAAsJsAADUAAAC0mwAANQAAALibAAA1AAAAvJsAADUA
-AADAmwAANQAAAMSbAAA1AAAAyJsAADUAAADMmwAANQAAANCbAAA1AAAA1JsAADUAAADY
-mwAANQAAANybAAA1AAAA4JsAADUAAADkmwAANQAAAOibAAA1AAAA7JsAADUAAADwmwAA
-NQAAAPSbAAA1AAAA+JsAABAAAAD8mwAAGgAAAAAAAAAAAAAAAJoAAAcAAAAHAAAABJoA
-AEcAAABHAAAACJoAAIcAAACHAAAADJoAAKABAACgAQAAEJoAAOABAADgAQAAFJoAACAA
-AAAgAAAAGJoAAGAAAABgAAAAHJoAAKEBAAChAQAAIJoAAOEBAADhAQAAJJoAACEAAAAh
-AAAAKJoAAGEAAABhAAAALJoAAGIBAABiAQAAMJoAAKIBAACiAQAANJoAAOIBAADiAQAA
-OJoAACIAAAAiAAAAPJoAAGIAAABiAAAAQJoAAGMBAABjAQAARJoAAKMBAACjAQAASJoA
-AOMBAADjAQAATJoAACMAAAAjAAAAUJoAAGMAAABjAAAAVJoAAIQBAACEAQAAWJoAAMQB
-AADEAQAAXJoAAAQAAAAEAAAAYJoAAOoBAAALAAAAZJoAACoAAABLAAAAaJoAAGoAAACL
-AAAAbJoAAKoAAACsAQAAcJoAAKsBAADsAQAAdJoAAOsBAAAsAAAAeJoAACsAAAASAAAA
-fJoAAGsAAABSAAAAgJoAAKsAAACSAAAAhJoAAKwBAACTAQAAiJoAAOwBAADTAQAAjJoA
-ACwAAAATAAAAkJoAADoAAABTAAAAlJoAAHoAAACTAAAAmJoAALoAAACUAQAAnJoAALsB
-AADUAQAAoJoAAPsBAAAUAAAApJoAADsAAAA6AAAAqJoAAHsAAAB6AAAArJoAALsAAAC6
-AAAAsJoAALwBAAC7AQAAtJoAAPwBAAD7AQAAuJoAADwAAAA7AAAAvJoAAHwAAAB7AAAA
-wJoAALwAAAC7AAAAxJoAAPwAAAC8AQAAyJoAAPwAAAD8AQAAzJoAAPwAAAA8AAAA0JoA
-APwAAAB8AAAA1JoAAPwAAAC8AAAA2JoAAPwAAAD8AAAA3JoAAPwAAAD8AAAA4JoAAPwA
-AAD8AAAA5JoAAPwAAAD8AAAA6JoAAPwAAAD8AAAA7JoAAPwAAAD8AAAA8JoAAPwAAAD8
-AAAA9JoAAPwAAAD8AAAA+JoAAPwAAAD8AAAA/JoAAPwAAAD8AAAA1JgAACAAAADQmAAA
-CAQGAwgEBwMIBAYDCAQGAwgEBwPcmAAAwMCgAMDAoADAwOAAwMDgAMDA4AAAAAAAAAAA
-AJyYAAAAAAAPAAAADwAAAA8AAAAPAAAAD5yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyY
-AAAAAIAAAACAAAAAgAAAAIAAAACAAJyYAAAAACoAAAAqAAAAKgAAACoAAAAqAJyYAAAA
-AAEAAAABAAAAAQAAAAEAAAABAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAABgA
-AAAYAAAAGAAAABgAAAAYAJyYAAAAAGAAAABgAAAAbgAAAG4AAABuAJyYAAAAAMcAAADH
-AAAAxwAAAMcAAADHAJyYAAAAAEsAAABLAAAASwAAAEsAAABLAJyYAAAAAEgEAABIBAAA
-SAQAAEgEAABIBJyYAAAAAEwAAABMAAAATAAAAEwAAABMAJyYAAAAAOQAAADkAAAA5AAA
-AOQAAADkAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAPwAAAD8AAAA/AAAAPwA
-AAD8AJyYAAAAAP8AAAD/AAAA/wAAAP8AAAD/AJyYAAAAAD8EAAA/BAAAPwQAAD8EAAA/
-BJyYAAAAAAwAAAAMAAAADAAAAAwAAAAMAJyYAAAAABkCAAAZAgAAGQIAABkCAAAZApyY
-AAAAACQAAAAkAAAAJAAAACQAAAAkAJyYAAAAALQAAAC0AAAAtAAAALQAAAC0AJyYAAAA
-AJkAAACZAAAAmQAAAJkAAACZAJyYAAAAAFAAAABQAAAAUAAAAFAAAABQAJyYAAAAACoA
-AAAqAAAAKgAAACoAAAAqAJyYAAAAABIAAAASAAAAEgAAABIAAAASAJyYAAAAADLAAAAy
-wAAAMsAAADLAAAAywJyYAAAAAHQBAAB0AQAAdAEAAHQBAAB0AZyYAAAAABEAAAARAAAA
-EQAAABEAAAARAJyYAAAAACiGAAAohgAAKIYAACiGAAAohpyYAAAAAIQxAACEMQAAhDEA
-AIQxAACEMZyYAACAAPIAgADyAIAA8gCAAPIAgADyAJyYAAAZACcAGQAnABkAJwAZACcA
-GQAnAJyYAAADAAAAAwAAAAMAAAADAAAAAwAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AJyYAACyAAAAsgAAALIAAACyAAAAsgAAAJyYAACEILAAhCCwAIQgsACEILAAhCCwAJyY
-AACkJUEApCVBAKQlQQCkJUEApCVBAJyYAAAgkhEAIJIRACCSEQAgkhEAIJIRAJyYAAAA
-SBoAAEgaAABIGgAASBoAAEgaANiYAAAwAgsAMAILADACCwAwAgsAMAILAJyYAACUAAAA
-lAAAAJQAAACUAAAAlAAAAJyYAACRAAAAkQAAAJEAAACRAAAAkQAAAJyYAAASAAAAEgAA
-ABIAAAASAAAAEgAAAJyYAACAAAAAgAAAAIAAAACAAAAAgAAAAJyYAADZAAAA2QAAANkA
-AADZAAAA2QAAAJyYAABgAAAAYAAAAGAAAABgAAAAYAAAAJyYAADwAAAA8AAAAPAAAADw
-AAAA8AAAAJyYAACiAAAAogAAAKIAAACiAAAAogAAAJyYAABSAAAAUgAAAFIAAABSAAAA
-UgAAAJyYAADUAAAA1AAAANQAAADUAAAA1AAAAJyYAADMFAAAzBQAAMwUAADMFAAAzBQA
-AJyYAACMBAAAjAQAAIwEAACMBAAAjAQAAMSYAAADAAAAAwAAAAMAAAADAAAAAwAAAOhK
-AQDtSgEA1EoBANhKAQDoSgEA6EoBANxKAQDgSgEAAAAAAAAAAAAwAAAAFQAAABUAAAAV
-AAAAFQAAABUAAAAcgAAAp5ONEs8TiAmVE+AEqxPgEs8TiAkomAAAAQACCgEAAgoAAAIF
-AQACCgEAAgo0mAAAAA4AAAAOAAAADgAAAA4AAAAOAAA4mAAAAgAAAAIAAAAKAAAACgAA
-AAoAAABImAAAbdoYAG3aGABkahoAZGoaAGRqGgBQmAAA4LToDeC06A3asOgN2rCYDNqw
-6A1YmAAALg2Afi4NgH4uDeh+Lg3Ifi4NgH5cmAAAXmY3MV5mNzFeZjcxXmA5MV5mNzFs
-mAAAgbAMBYGwDAWBsAwFgbAMBYGwDAUUmQAA0AcAANAHAABMBAAAmAgAANAHAABEmQAA
-ABC49wAQuPcADbj3ABC49wAQuPcEogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIogAAiGe+
-1ohnvtaIZz7QiGc+0IhnPtAMogAAQAEsAEABLABAwUIAQMFCAEDBQgAcogAACoCDGAqA
-gxgKgGMYCoCDGAqAgxgwEgAA4AMAAGCAAAAPAAAAGIEAAAAAAAAcgQAAAAAAACCBAAAA
-AAAAJIEAAAAAAAAogQAAAAAAACyBAAAAAAAAMIEAAAAAAAA0gQAAAAAAADiBAAAAAAAA
-PIEAAAAAAABAgQAAqAAAgESBAAAAAAAALJgAAACgAAA8mAAAAAQgAEyYAAA8I4QScJgA
-AB8AAAB0mAAAgAAAAHiYAAAOAAAAgJkAAAAAAACEmQAAAACAAqCZAAAAAAAA4JkAAAAA
-AADkmQAAqqqqquiZAAB4ZEY87JkAAKoAAADwmQAADAAAAPSZAAD/AAAA+JkAABQAAAAo
-ogAAtQkAADyiAACviciTTKIAAAEAAABQogAAAKAAAFSiAAAAAAAAWKIAAIBTxwxcogAA
-AQ8PD2CiAAABD2lfZKIAABGKQQBoogAAAAAAAGyiAABqwTAMcKIAACAIggB0ogAAqnwb
-AHiiAADOOeccfKIAAM4BFwUAowAAAAABGASjAAACJgMwCKMAAAY+B0gMowAACkwLVhCj
-AAAPYBpkFKMAABtuT3gYowAAWnyPhhyjAABbhs+OIKMAAA+XT50kowAAj6HPpSijAAAf
-r1+1LKMAAJ+5370wowAAP8d/zTSjAAC/0f/VOKMAAAAAAAA8owAAAAAAAECjAAAAAAAA
-RKMAAAAAAABIowAA////P0yjAAD///8/UKMAAP///z9UowAA//8DAFijAAAfqqh5XKMA
-AA9CbAZgowAAByIoD2SjAACFFmAXaKMAAAQRgB9sowAAAwygN3CjAACDCMQ/dKMAAAMI
-wFd4owAAggbYX3yjAACCBOB/gKMAALp7PH+EowAA8H8w8wSbAAABAAAACJsAAAIAAAAM
-mwAAAwAAABCbAAAEAAAAFJsAAAUAAAAYmwAACAAAABybAAAJAAAAIJsAAAoAAAAkmwAA
-CwAAACybAAANAAAAMJsAABAAAAA0mwAAEQAAADybAAATAAAAQJsAABQAAABEmwAAFQAA
-AEibAAAYAAAATJsAABkAAABQmwAAGgAAAFSbAAAbAAAAWJsAABwAAABcmwAAHQAAAGCb
-AAAgAAAAaJsAACIAAABsmwAAIwAAAHCbAAAkAAAAdJsAACUAAAB4mwAAKAAAAHybAAAp
-AAAAgJsAACoAAACEmwAAKwAAAIibAAAsAAAAkJsAADAAAACUmwAAMQAAAJibAAAyAAAA
-oJsAADQAAACkmwAANQAAAKibAAA1AAAArJsAADUAAACwmwAANQAAALSbAAA1AAAAuJsA
-ADUAAAC8mwAANQAAAMCbAAA1AAAAxJsAADUAAADImwAANQAAAMybAAA1AAAA0JsAADUA
-AADUmwAANQAAANibAAA1AAAA3JsAADUAAADgmwAANQAAAOSbAAA1AAAA6JsAADUAAADs
-mwAANQAAAPCbAAA1AAAA9JsAADUAAAD4mwAAEAAAAPybAAAaAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAJoAAAAAAAAAAAAABJoAAAAAAABAAAAACJoAAAAAAACAAAAADJoA
-AAAAAACBAQAAEJoAAAAAAADBAQAAFJoAAAAAAAABAAAAGJoAAAAAAABBAAAAHJoAAAAA
-AACBAAAAIJoAAAAAAABoAQAAJJoAAAAAAACoAQAAKJoAAAAAAADoAQAALJoAAAAAAAAo
-AAAAMJoAAAAAAABoAAAANJoAAAAAAACJAQAAOJoAAAAAAADJAQAAPJoAAAAAAAAJAAAA
-QJoAAAAAAABJAAAARJoAAAAAAACJAAAASJoAAAAAAACQAQAATJoAAAAAAADQAQAAUJoA
-AAAAAAAQAAAAVJoAAAAAAABQAAAAWJoAAAAAAACQAAAAXJoAAAAAAACRAQAAYJoAAAAA
-AADRAQAAZJoAAAAAAAARAAAAaJoAAAAAAABRAAAAbJoAAAAAAACRAAAAcJoAAAAAAAB4
-AQAAdJoAAAAAAAC4AQAAeJoAAAAAAAD4AQAAfJoAAAAAAAA4AAAAgJoAAAAAAAB4AAAA
-hJoAAAAAAACZAQAAiJoAAAAAAADZAQAAjJoAAAAAAAAZAAAAkJoAAAAAAABZAAAAlJoA
-AAAAAACZAAAAmJoAAAAAAADZAAAAnJoAAAAAAAD5AAAAoJoAAAAAAAD5AAAApJoAAAAA
-AAD5AAAAqJoAAAAAAAD5AAAArJoAAAAAAAD5AAAAsJoAAAAAAAD5AAAAtJoAAAAAAAD5
-AAAAuJoAAAAAAAD5AAAAvJoAAAAAAAD5AAAAwJoAAAAAAAD5AAAAxJoAAAAAAAD5AAAA
-yJoAAAAAAAD5AAAAzJoAAAAAAAD5AAAA0JoAAAAAAAD5AAAA1JoAAAAAAAD5AAAA2JoA
-AAAAAAD5AAAA3JoAAAAAAAD5AAAA4JoAAAAAAAD5AAAA5JoAAAAAAAD5AAAA6JoAAAAA
-AAD5AAAA7JoAAAAAAAD5AAAA8JoAAAAAAAD5AAAA9JoAAAAAAAD5AAAA+JoAAAAAAAD5
-AAAA/JoAAAAAAAD5AAAA1JgAACAAAADQmAAACBQAAggUAQIIFAACCBQAAggUAQLcmAAA
-wCCgAMAgoADAIOAAwCDgAMAg4AAAAAAAAAAAAJyYAAAAAADwAAAA8AAAAPAAAADwAAAA
-8JyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAADAAAAAwAAAAMAAAADAAAAA5yY
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAJyYAAAAAEBAAABAQAAAQEAAAEBAAABAQJyYAAAAAAVlAAAF
-ZQAABWUAAAVlAAAFZZyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAJyYAAAAAEIAAABCAAAAQgAAAEIAAABCAJyYAAAAALUAAAC1AAAAtQAA
-ALUAAAC1AJyYAAAAAAMAAAADAAAAAwAAAAMAAAADAJyYAAAAAPcAAAD3AAAA9wAAAPcA
-AAD3AJyYAAAAAJ0AAACdAAAAnQAAAJ0AAACdAJyYAAAAACIAAAAiAAAAIgAAACIAAAAi
-AJyYAAAAACIEAAAiBAAAIgQAACIEAAAiBJyYAAAYACMAGAAjABgAIwAYACMAGAAjAJyY
-AAAAACgAAAAoAGAAKABgACgAYAAoAJyYAADAAFAAwABQAMMAUADDAFAAwwBQAJyYAAB/
-AAQAfwAEAH8ABAB/AAQAfwAEAJyYAABYBAAAWAQAAFgEAABYBAAAWAQAAJyYAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAJyYAAAAwAAAAMAAAADAAAAAwAAAAMAAANiYAAAwAkAAMAJA
-ADACQAAwAkAAMAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAZAAAAGQAAABk
+AMYAAAD9AAAA/JoAAMYAAAD9AAAAAQAAAEYAAABgAAAAAQAAAEYAAABhAAAAAQAAAEYA
+AABiAAAAAQAAAEYAAABjAAAAAQAAAEYAAABkAAAAAQAAAEYAAABlAAAAAQAAAEYAAABm
+AAAAAQAAAEYAAABnAAAAAQAAAEYAAABoAAAAAQAAAEYAAABpAAAAAQAAAEYAAABqAAAA
+AQAAAEYAAABrAAAAAQAAAEYAAABsAAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAA
+AEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYA
+AAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB1AAAAAQAAAEYAAAB2AAAAAQAAAEYAAAB3
+AAAAAQAAAEYAAAB4AAAAAQAAAEYAAAB5AAAAAQAAAEYAAAB6AAAAAQAAAEYAAAB7AAAA
+AQAAAEYAAAB8AAAAAQAAAEYAAAB9AAAAAQAAAEYAAAB+AAAAAQAAAEYAAAB/AAAAAQAA
+AEYAAACAAAAAAQAAAEQAAAB8AAAAAQAAAEYAAACIAAAAAQAAAEYAAACMAAAAAQAAAEYA
+AACQAAAAAQAAAEYAAACUAAAAAQAAAEYAAACYAAAAAQAAAEYAAACcAAAAAQAAAEYAAACg
+AAAAAQAAAEYAAACkAAAAAQAAAEYAAACoAAAAAQAAAEYAAACsAAAAAQAAAEYAAACwAAAA
+AQAAAEYAAAC0AAAAAAIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAnhYLAGIWCgA6FgkAHBYI
+AOoVBwCaFQUAShUEAAMVAgBZFAAAAAABAAAAAwAGAAkAPwAAAEO/AABDvwAAbb8AAG2/
+AACXvwAAl78AAMG/AADBvwAAAAAAAAAAAAAAAAAACQAAAAQAAAAEAAEAAQABAAYAAABG
+RzgAAAAAAAAAAAAAAAAABAAAAAEAAQAEAAAARkc3AAAAAAAAAAAAAAAAAAMAAQABAAEA
+AwAAAEZHNgAAAAAAAAAAAAAAAAAEAAAAAAABAAEAAABGRzUAAAAAAAAAAAAAAAAABAAB
+AAEAAAAAAAAARkc0AAAAAAAAAAAAAAAAAAQAAAABAAAA/v///0ZHMwAAAAAAAAAAAAAA
+AAADAAEAAQAAAP3///9GRzIAAAAAAAAAAAAAAAAABAAAAAAAAAD8////RkcxAAAAAAAA
+AAAAAAAAAAIAAQABAAAA+v///0ZHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAFBBUGQAiBQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCY8JtAkICWwJtAnJ////yf///8n/
+///J////wv////L////y////8v////L////0////wP///8D////A////wP///7r///+y
+////sv///7L///+y////sP///////////wAAQusAAO7qAAD76gAAgOsAABTrAAB06wAA
+AAAAAAAAAAAgAAAAIAAAAEAAAABAAAAAAAAGAAAABgAAAAYAnhYLAGIWCgA6FgkAHBYI
+AOoVBwCaFQUAShUEAAMVAgBZFAAAuAsBAAAAAAB0/AAA7fkAADL6AABW+gAAkPoAAKL6
+AAB0/AAAdPwAAHT8AAB0/AAAdPwAANT6AAB0/AAAdPwAAHT8AAB0/AAA5voAABP7AAB0
+/AAAYvsAAI37AAB0/AAAYPoAAHT8AAB0/AAAdPwAAMz7AADh+wAAdPwAAPv7AABr/AAA
+a/wAAEX8AABN/AAAVfwAAF38AABl/AAAAAAAAAYAAAABAAAAAgAAAAMAAAAEAAAABQAA
+APD9AADw/QAAr/wAAPD9AADw/QAA0/wAAPD9AADw/QAA8P0AAPD9AADw/QAA+/wAAPD9
+AADw/QAA8P0AAPD9AAAU/QAA8P0AAPD9AAAs/QAAz/0AAPD9AADw/QAA8P0AAPD9AADw
+/QAAUP0AAFD9AADw/QAAr/0AAAAAAAAAAAAAAAAAAEAQAAAP/C8AD/wvAB/8LwAP/C8A
+D/wvAEQQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAEgQAAAP/C8AD/wvAB/8LwAP/C8AD/wv
+AEwQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFQQ
+AAAP/C8AD/wvAB/8LwAP/C8AD/wvAFgQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFwQAAAP
+/C8AD/wvAB/8LwAP/C8AD/wvAGAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAGQQAAAP/C8A
+D/wvAB/8LwAP/C8AD/wvADAQAAAwAgAA4AEAALAAAABgAQAA4AEAAHAQAABoAQAA4AEA
+ALgBAACMAQAA4AEAALAQAABgDgAAgBEAABwfAAA4PgAAgBEAAPAQAADgoAAAaEABAIBY
+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
+qw/gEs8PiAkomAAAAQACCgEAAgoAAQEFAQACCgEAAgo0mAAADg4AAA4OAAAODgAADg4A
+AA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAWtoYAFraGABpyhgAacoYAGnK
+GABQmAAA4LToDeC06A3gtOgN4LToDeC06A1YmAAALg2Afi4NgH4uTeh+Lk3ofi4NgH5c
+mAAAXmY3MV5mNzFeZjcxXmY3MV5hNzFsmAAAgbAMBYGwDAWBsAwFgLAMBYCwDAUUmQAA
+ECcAABAnAAB8FQAA+CoAABAnAABEmQAAIBC49yAQuPcgDbj3IBC49yAQuPcMogAAakEs
+ZGpBLGRqQUBkakFAZGpBQGQcogAACoCDGAqAgxgKgHMYCoCDGAqAgxgAAAAAAAAAAAAA
+AAAAAAAAMBIAAAAAAAAImAAAAAAAACyYAAD+LwIAPJgAAAABAgBMmAAAPGGEEjCZAACD
+SAAAQJkAAAQAAABYmQAA/wAAAHSZAAAAAAAA+JkAABgAAAAEogAAAAAAAAiiAACIZz7Q
+KKIAALUBAAA8ogAAr4nIEwSbAAAgAAAACJsAABAAAAAMmwAAMAAAABCbAAAIAAAAFJsA
+ACgAAAAYmwAABAAAABybAAAkAAAAIJsAABQAAAAkmwAANAAAACybAAAsAAAAMJsAAAIA
+AAA0mwAAIgAAADybAAAyAAAAQJsAAAoAAABEmwAAKgAAAEibAAAGAAAATJsAACYAAABQ
+mwAAFgAAAFSbAAA2AAAAWJsAAA4AAABcmwAALgAAAGCbAAABAAAAaJsAABEAAABsmwAA
+MQAAAHCbAAAJAAAAdJsAACkAAAB4mwAABQAAAHybAAAlAAAAgJsAABUAAACEmwAANQAA
+AIibAAANAAAAkJsAAAMAAACUmwAAIwAAAJibAAATAAAAoJsAAAsAAACkmwAAKwAAAKib
+AAArAAAArJsAACsAAACwmwAAKwAAALSbAAArAAAAuJsAACsAAAC8mwAAKwAAAMCbAAAr
+AAAAxJsAACsAAADImwAAKwAAAMybAAArAAAA0JsAACsAAADUmwAAKwAAANibAAArAAAA
+3JsAACsAAADgmwAAKwAAAOSbAAArAAAA6JsAACsAAADsmwAAKwAAAPCbAAArAAAA9JsA
+ACsAAAD4mwAAAgAAAPybAAAWAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAA
+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
+AAABAAAARgAAAGEAAAABAAAARgAAAGIAAAABAAAARgAAAGMAAAABAAAARgAAAGQAAAAB
+AAAARgAAAGUAAAABAAAARgAAAGYAAAABAAAARgAAAGcAAAABAAAARgAAAGgAAAABAAAA
+RgAAAGkAAAABAAAARgAAAGoAAAABAAAARgAAAGsAAAABAAAARgAAAGwAAAABAAAARgAA
+AHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQA
+AAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHUAAAAB
+AAAARgAAAHYAAAABAAAARgAAAHcAAAABAAAARgAAAHgAAAABAAAARgAAAHkAAAABAAAA
+RgAAAHoAAAABAAAARgAAAHsAAAABAAAARgAAAHwAAAABAAAARgAAAH0AAAABAAAARgAA
+AH4AAAABAAAARgAAAH8AAAABAAAARgAAAIAAAAABAAAARAAAAHwAAAABAAAARgAAAIgA
+AAABAAAARgAAAIwAAAABAAAARgAAAJAAAAABAAAARgAAAJQAAAABAAAARgAAAJgAAAAB
+AAAARgAAAJwAAAABAAAARgAAAKAAAAABAAAARgAAAKQAAAABAAAARgAAAKgAAAABAAAA
+RgAAAKwAAAABAAAARgAAALAAAAABAAAARgAAALQAAACJaAEAbGgBAHBoAQB0aAEAhGgB
+AIRoAQB4aAEAfGgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4WBgBiFgQAOhYDABwW
+AgDqFQEAmhUAAEoVAAADFQEAWRQDALgLBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw
+AAAAFYAAABWAAAAVgAAAFYAAABWAAAAcgAAAp5ONEs8TiAmVE+AEqxPgEs8TiAkomAAA
+AQACCgEAAgoAAQIFAQACCgEAAgo0mAAADg4AAA4OAAAODgAADg4AAA4OAAA4mAAABwAA
+AAcAAAALAAAACwAAAAsAAABImAAAbdoYAG3aGAB1yhgAdcoYAHXKGABQmAAA4LToDeC0
+6A3gtOgN4LToDeC06A1YmAAALg2Afi4NgH4uDeh+Lg3ofi4NgH5cmAAAXmY3MV5mNzFe
+ZjcxXmY3MV5mNzFsmAAAgbAMBYGwDAWBsAwFgbAMBYGwDAUUmQAA0AcAANAHAABMBAAA
+mAgAANAHAABEmQAAIBC49yAQuPcQDbj3EBC49xAQuPcEogAAAAAAAAAAAAAIAAAACAAA
+AAgAAAAIogAAiGe+1ohnvtaIZz7QiGc+0IhnPtAMogAAQAEsZEABLGRgwUJkYMFCZGDB
+QmQcogAACoCDGAqAgxgKgHMYCoCDGAqAgxgwEgAAAAAAAAiYAAAAAAAALJgAAP4vAgA8
+mAAAAAECAEyYAAA8YYQSMJkAAIJIAABAmQAABAAAAFiZAAD/AAAAdJkAAAAAAAAoogAA
+tQEAADyiAACvicgTBJsAAAEAAAAImwAAAgAAAAybAAADAAAAEJsAAAQAAAAUmwAABQAA
+ABibAAAIAAAAHJsAAAkAAAAgmwAACgAAACSbAAALAAAALJsAAA0AAAAwmwAAEAAAADSb
+AAARAAAAPJsAABMAAABAmwAAFAAAAESbAAAVAAAASJsAABgAAABMmwAAGQAAAFCbAAAa
+AAAAVJsAABsAAABYmwAAHAAAAFybAAAdAAAAYJsAACAAAABomwAAIgAAAGybAAAjAAAA
+cJsAACQAAAB0mwAAJQAAAHibAAAoAAAAfJsAACkAAACAmwAAKgAAAISbAAArAAAAiJsA
+ACwAAACQmwAAMAAAAJSbAAAxAAAAmJsAADIAAACgmwAANAAAAKSbAAA1AAAAqJsAADUA
+AACsmwAANQAAALCbAAA1AAAAtJsAADUAAAC4mwAANQAAALybAAA1AAAAwJsAADUAAADE
+mwAANQAAAMibAAA1AAAAzJsAADUAAADQmwAANQAAANSbAAA1AAAA2JsAADUAAADcmwAA
+NQAAAOCbAAA1AAAA5JsAADUAAADomwAANQAAAOybAAA1AAAA8JsAADUAAAD0mwAANQAA
+APibAAAQAAAA/JsAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmgAABwAAAAcA
+AAAEmgAARwAAAEcAAAAImgAAhwAAAIcAAAAMmgAAoAEAAKABAAAQmgAA4AEAAOABAAAU
+mgAAIAAAACAAAAAYmgAAYAAAAGAAAAAcmgAAoQEAAKEBAAAgmgAA4QEAAOEBAAAkmgAA
+IQAAACEAAAAomgAAYQAAAGEAAAAsmgAAYgEAAGIBAAAwmgAAogEAAKIBAAA0mgAA4gEA
+AOIBAAA4mgAAIgAAACIAAAA8mgAAYgAAAGIAAABAmgAAYwEAAGMBAABEmgAAowEAAKMB
+AABImgAA4wEAAOMBAABMmgAAIwAAACMAAABQmgAAYwAAAGMAAABUmgAAhAEAAIQBAABY
+mgAAxAEAAMQBAABcmgAABAAAAAQAAABgmgAA6gEAAAsAAABkmgAAKgAAAEsAAABomgAA
+agAAAIsAAABsmgAAqgAAAKwBAABwmgAAqwEAAOwBAAB0mgAA6wEAACwAAAB4mgAAKwAA
+ABIAAAB8mgAAawAAAFIAAACAmgAAqwAAAJIAAACEmgAArAEAAJMBAACImgAA7AEAANMB
+AACMmgAALAAAABMAAACQmgAAOgAAAFMAAACUmgAAegAAAJMAAACYmgAAugAAAJQBAACc
+mgAAuwEAANQBAACgmgAA+wEAABQAAACkmgAAOwAAADoAAAComgAAewAAAHoAAACsmgAA
+uwAAALoAAACwmgAAvAEAALsBAAC0mgAA/AEAAPsBAAC4mgAAPAAAADsAAAC8mgAAfAAA
+AHsAAADAmgAAvAAAALsAAADEmgAA/AAAALwBAADImgAA/AAAAPwBAADMmgAA/AAAADwA
+AADQmgAA/AAAAHwAAADUmgAA/AAAALwAAADYmgAA/AAAAPwAAADcmgAA/AAAAPwAAADg
+mgAA/AAAAPwAAADkmgAA/AAAAPwAAADomgAA/AAAAPwAAADsmgAA/AAAAPwAAADwmgAA
+/AAAAPwAAAD0mgAA/AAAAPwAAAD4mgAA/AAAAPwAAAD8mgAA/AAAAPwAAADUmAAAIAAA
+ANCYAAAIBAYDCAQHAwgEBgMIBAYDCAQHA9yYAADAIKAAwCCgAMAg4ADAIOAAwCDgAAAA
+AAAAAAAAnJgAAAAAAA8AAAAPAAAADwAAAA8AAAAPnJgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAnJgAAAAAgAAAAIAAAACAAAAAgAAAAIAAnJgAAAAAKgAAACoAAAAqAAAAKgAAACoA
+nJgAAAAAAQAAAAEAAAABAAAAAQAAAAEAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgA
+AAAAGAAAABgAAAAYAAAAGAAAABgAnJgAAAAAYAAAAGAAAABuAAAAbgAAAG4AnJgAAAAA
+xwAAAMcAAADHAAAAxwAAAMcAnJgAAAAASwAAAEsAAABLAAAASwAAAEsAnJgAAAAASAQA
+AEgEAABIBAAASAQAAEgEnJgAAAAATAAAAEwAAABMAAAATAAAAEwAnJgAAAAA5AAAAOQA
+AADkAAAA5AAAAOQAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAA/AAAAPwAAAD8
+AAAA/AAAAPwAnJgAAAAA/wAAAP8AAAD/AAAA/wAAAP8AnJgAAAAAPwQAAD8EAAA/BAAA
+PwQAAD8EnJgAAAAADAAAAAwAAAAMAAAADAAAAAwAnJgAAAAAGQIAABkCAAAZAgAAGQIA
+ABkCnJgAAAAAJAAAACQAAAAkAAAAJAAAACQAnJgAAAAAtAAAALQAAAC0AAAAtAAAALQA
+nJgAAAAAmQAAAJkAAACZAAAAmQAAAJkAnJgAAAAAUAAAAFAAAABQAAAAUAAAAFAAnJgA
+AAAAKgAAACoAAAAqAAAAKgAAACoAnJgAAAAAEgAAABIAAAASAAAAEgAAABIAnJgAAAAA
+MsAAADLAAAAywAAAMsAAADLAnJgAAAAAdAEAAHQBAAB0AQAAdAEAAHQBnJgAAAAAEQAA
+ABEAAAARAAAAEQAAABEAnJgAAAAAKIYAACiGAAAohgAAKIYAACiGnJgAAAAAhDEAAIQx
+AACEMQAAhDEAAIQxnJgAAIAA8gCAAPIAgADyAIAA8gCAAPIAnJgAABkAJwAZACcAGQAn
+ABkAJwAZACcAnJgAAAMAAAADAAAAAwAAAAMAAAADAAAAnJgAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAnJgAALIAAACyAAAAsgAAALIAAACyAAAAnJgAAIQgsACEILAAhCCwAIQgsACE
+ILAAnJgAAKQlQQCkJUEApCVBAKQlQQCkJUEAnJgAACCSEQAgkhEAIJIRACCSEQAgkhEA
+nJgAAABIGgAASBoAAEgaAABIGgAASBoA2JgAADACCwAwAgsAMAILADACCwAwAgsAnJgA
+AJQAAACUAAAAlAAAAJQAAACUAAAAnJgAAJEAAACRAAAAkQAAAJEAAACRAAAAnJgAABIA
+AAASAAAAEgAAABIAAAASAAAAnJgAAIAAAACAAAAAgAAAAIAAAACAAAAAnJgAANkAAADZ
+AAAA2QAAANkAAADZAAAAnJgAAGAAAABgAAAAYAAAAGAAAABgAAAAnJgAAPAAAADwAAAA
+8AAAAPAAAADwAAAAnJgAAKIAAACiAAAAogAAAKIAAACiAAAAnJgAAFIAAABSAAAAUgAA
+AFIAAABSAAAAnJgAANQAAADUAAAA1AAAANQAAADUAAAAnJgAAMwUAADMFAAAzBQAAMwU
+AADMFAAAnJgAAIwEAACMBAAAjAQAAIwEAACMBAAAxJgAAAMAAAADAAAAAwAAAAMAAAAD
+AAAAKHoBAC16AQAUegEAGHoBACh6AQAoegEAHHoBACB6AQAAAAAAAAAAADAAAAAVAAAA
+FQAAABUAAAAVAAAAFQAAAByAAACnk40SzxOICZUT4ASrE+ASzxOICSiYAAABAAIKAQAC
+CgAAAgUBAAIKAQACCjSYAAAADgAAAA4AAAAOAAAADgAAAA4AADiYAAACAAAAAgAAAAoA
+AAAKAAAACgAAAEiYAABt2hgAbdoYAGRqGgBkahoAZGoaAFCYAADgtOgN4LToDdqw6A3a
+sJgM2rDoDViYAAAuDYB+Lg2Afi4N6H4uDch+Lg2AflyYAABeZjcxXmY3MV5mNzFeYDkx
+XmY3MWyYAACBsAwFgbAMBYGwDAWBsAwFgbAMBRSZAADQBwAA0AcAAEwEAACYCAAA0AcA
+AESZAAAAELj3ABC49wANuPcAELj3ABC49wSiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAii
+AACIZ77WiGe+1ohnPtCIZz7QiGc+0AyiAABAASwAQAEsAEDBQgBAwUIAQMFCAByiAAAK
+gIMYCoCDGAqAYxgKgIMYCoCDGDASAADgAwAAYIAAAA8AAAAYgQAAAAAAAByBAAAAAAAA
+IIEAAAAAAAAkgQAAAAAAACiBAAAAAAAALIEAAAAAAAAwgQAAAAAAADSBAAAAAAAAOIEA
+AAAAAAA8gQAAAAAAAECBAACoAACARIEAAAAAAAAImAAAAAAAACyYAAAAoAAAPJgAAAAE
+IABMmAAAPCOEEnCYAAAfAAAAdJgAAIAAAAB4mAAADgAAAFiZAAD/AAAAgJkAAAAAAACE
+mQAAAACAAqCZAAAAAAAA4JkAAAAAAADkmQAAqqqqquiZAAB4ZEY87JkAAKoAAADwmQAA
+DAAAAPSZAAD/AAAA+JkAABQAAAAoogAAtQkAADyiAACviciTTKIAAAEAAABQogAAAKAA
+AFSiAAAAAAAAWKIAAIBTxwxcogAAAQ8PD2CiAAABD2lfZKIAABGKQQBoogAAAAAAAGyi
+AABqwTAMcKIAACAIggB0ogAAqnwbAHiiAADOOeccfKIAAM4BFwUAowAAAAABGASjAAAC
+JgMwCKMAAAY+B0gMowAACkwLVhCjAAAPYBpkFKMAABtuT3gYowAAWnyPhhyjAABbhs+O
+IKMAAA+XT50kowAAj6HPpSijAAAfr1+1LKMAAJ+5370wowAAP8d/zTSjAAC/0f/VOKMA
+AAAAAAA8owAAAAAAAECjAAAAAAAARKMAAAAAAABIowAA////P0yjAAD///8/UKMAAP//
+/z9UowAA//8DAFijAAAfqqh5XKMAAA9CbAZgowAAByIoD2SjAACFFmAXaKMAAAQRgB9s
+owAAAwygN3CjAACDCMQ/dKMAAAMIwFd4owAAggbYX3yjAACCBOB/gKMAALp7PH+EowAA
+8H8w8wSbAAABAAAACJsAAAIAAAAMmwAAAwAAABCbAAAEAAAAFJsAAAUAAAAYmwAACAAA
+ABybAAAJAAAAIJsAAAoAAAAkmwAACwAAACybAAANAAAAMJsAABAAAAA0mwAAEQAAADyb
+AAATAAAAQJsAABQAAABEmwAAFQAAAEibAAAYAAAATJsAABkAAABQmwAAGgAAAFSbAAAb
+AAAAWJsAABwAAABcmwAAHQAAAGCbAAAgAAAAaJsAACIAAABsmwAAIwAAAHCbAAAkAAAA
+dJsAACUAAAB4mwAAKAAAAHybAAApAAAAgJsAACoAAACEmwAAKwAAAIibAAAsAAAAkJsA
+ADAAAACUmwAAMQAAAJibAAAyAAAAoJsAADQAAACkmwAANQAAAKibAAA1AAAArJsAADUA
+AACwmwAANQAAALSbAAA1AAAAuJsAADUAAAC8mwAANQAAAMCbAAA1AAAAxJsAADUAAADI
+mwAANQAAAMybAAA1AAAA0JsAADUAAADUmwAANQAAANibAAA1AAAA3JsAADUAAADgmwAA
+NQAAAOSbAAA1AAAA6JsAADUAAADsmwAANQAAAPCbAAA1AAAA9JsAADUAAAD4mwAAEAAA
+APybAAAaAAAAAAAAAAAAAAAAmgAAAAAAAAAAAAAEmgAAAAAAAEAAAAAImgAAAAAAAIAA
+AAAMmgAAAAAAAIEBAAAQmgAAAAAAAMEBAAAUmgAAAAAAAAEAAAAYmgAAAAAAAEEAAAAc
+mgAAAAAAAIEAAAAgmgAAAAAAAGgBAAAkmgAAAAAAAKgBAAAomgAAAAAAAOgBAAAsmgAA
+AAAAACgAAAAwmgAAAAAAAGgAAAA0mgAAAAAAAIkBAAA4mgAAAAAAAMkBAAA8mgAAAAAA
+AAkAAABAmgAAAAAAAEkAAABEmgAAAAAAAIkAAABImgAAAAAAAJABAABMmgAAAAAAANAB
+AABQmgAAAAAAABAAAABUmgAAAAAAAFAAAABYmgAAAAAAAJAAAABcmgAAAAAAAJEBAABg
+mgAAAAAAANEBAABkmgAAAAAAABEAAABomgAAAAAAAFEAAABsmgAAAAAAAJEAAABwmgAA
+AAAAAHgBAAB0mgAAAAAAALgBAAB4mgAAAAAAAPgBAAB8mgAAAAAAADgAAACAmgAAAAAA
+AHgAAACEmgAAAAAAAJkBAACImgAAAAAAANkBAACMmgAAAAAAABkAAACQmgAAAAAAAFkA
+AACUmgAAAAAAAJkAAACYmgAAAAAAANkAAACcmgAAAAAAAPkAAACgmgAAAAAAAPkAAACk
+mgAAAAAAAPkAAAComgAAAAAAAPkAAACsmgAAAAAAAPkAAACwmgAAAAAAAPkAAAC0mgAA
+AAAAAPkAAAC4mgAAAAAAAPkAAAC8mgAAAAAAAPkAAADAmgAAAAAAAPkAAADEmgAAAAAA
+APkAAADImgAAAAAAAPkAAADMmgAAAAAAAPkAAADQmgAAAAAAAPkAAADUmgAAAAAAAPkA
+AADYmgAAAAAAAPkAAADcmgAAAAAAAPkAAADgmgAAAAAAAPkAAADkmgAAAAAAAPkAAADo
+mgAAAAAAAPkAAADsmgAAAAAAAPkAAADwmgAAAAAAAPkAAAD0mgAAAAAAAPkAAAD4mgAA
+AAAAAPkAAAD8mgAAAAAAAPkAAADUmAAAIAAAANCYAAAIFAACCBQBAggUAAIIFAACCBQB
+AtyYAADAIKAAwCCgAMAg4ADAIOAAwCDgAAAAAAAAAAAAnJgAAAAAAPAAAADwAAAA8AAA
+APAAAADwnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAMAAAADAAAAAwAAAAMA
+AAADnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+nJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAQEAAAEBAAABAQAAAQEAAAEBAnJgAAAAA
+BWUAAAVlAAAFZQAABWUAAAVlnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAnJgAAAAAQgAAAEIAAABCAAAAQgAAAEIAnJgAAAAAtQAAALUA
+AAC1AAAAtQAAALUAnJgAAAAAAwAAAAMAAAADAAAAAwAAAAMAnJgAAAAA9wAAAPcAAAD3
+AAAA9wAAAPcAnJgAAAAAnQAAAJ0AAACdAAAAnQAAAJ0AnJgAAAAAIgAAACIAAAAiAAAA
+IgAAACIAnJgAAAAAIgQAACIEAAAiBAAAIgQAACIEnJgAABgAIwAYACMAGAAjABgAIwAY
+ACMAnJgAAAAAKAAAACgAYAAoAGAAKABgACgAnJgAAMAAUADAAFAAwwBQAMMAUADDAFAA
+nJgAAH8ABAB/AAQAfwAEAH8ABAB/AAQAnJgAAFgEAABYBAAAWAQAAFgEAABYBAAAnJgA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAADAAAAAwAAAAMAAAADAAAAAwAAA2JgAADAC
+QAAwAkAAMAJAADACQAAwAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAABkAAAA
+ZAAAAGQAAABkAAAAZAAAnJgAAAAIAAAACAAAAAgAAAAIAAAACAAAzJgAAA4AAAAOAAAA
+DgAAAA4AAAAOAAAAWJYBAF2WAQBIlgEATJYBAFiWAQBYlgEAUJYBAFSWAQAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAwAAAAFQAAABUAAAAVAAAAFQAAABUAAAAcgAAAp5ONEs8T
+iAmVE+AEqxPgEs8TiAkomAAAAQACCgEAAgoAAQIFAQACCgEAAgo0mAAADg4AAA4OAAAO
+DgAADg4AAA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAYfoYAGH6GABjGhoA
+YxoaAGMaGgBQmAAA4LSYDOC0mAzasJgM2rCYDNqwmAxYmAAALg3Ifi4NyH4uDch+Lg3I
+fi4NyH5cmAAAXmA5MV5gOTFeYDkxXmA5MV5gOTFsmAAAgbAMBYGwDAWBsAwFgbAMBYGw
+DAUUmQAA0AcAANAHAABMBAAAmAgAANAHAABEmQAAABC49wAQuPcADbj3ABC49wAQuPcE
+ogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIogAAiGe+1ohnvtaIZz7QiGc+0IhnPtAMogAA
+4MEuAODBLgAgwSoAIMEqACDBKgAcogAACoCDGAqAgxgKgGMYCoCDGAqAgxgAowAAAAAB
+GAAAARgAAAEYAAABGAAAARgEowAAAiYDMAImAzACJgMwAiYDMAImAzAIowAABj4HSAY+
+B0gGPgdIBj4HSAY+B0gMowAACkwLVgpMC1YKTAtWCkwLVgpMC1YQowAAD2AaZA9gGmQP
+YBpkD2AaZA9gGmQUowAAG25PeBtuT3gbbk94G25PeBtuT3gYowAAWnyPhlp8j4ZafI+G
+WnyPhlp8j4YcowAAW4bPkFuGz5Bbhs+OW4bPjluGz44gowAAD5dPnQ+XT50Pl0+bD5dP
+mw+XT5skowAAj6PPp4+jz6ePn8+jj5/Po4+fz6MoowAAH69ftR+vX7Ufr1+zH69fsx+v
+X7MsowAAn7nfvZ+5372fud+7n7nfu5+537swowAAP8V/yz/Ff8s/x3/LP8d/yz/Hf8s0
+owAAv9H/1b/R/9W/0f/Tv9H/07/R/9MAAAAAAAAAAAAAAAAAAAAAMBIAAOADAABoQAAA
+EAAAAGCAAAAPAAAAnIAAAAAAAACggAAAAAAAABiBAAAAAAAAHIEAAAAAAAAggQAAAAAA
+ACSBAAAAAAAAKIEAAAAAAAAsgQAAAAAAADCBAAAAAAAANIEAAAAAAAA4gQAAAAAAADyB
+AAAAAAAAQIEAAPkDAIBEgQAAAAAAAAiYAAAAAAAALJgAAACgAAA8mAAAAAQgAEyYAAA8
+I4QScJgAAB8AAAB0mAAAgAAAAHiYAAAOAAAAWJkAAP8fCACAmQAAAAAAAISZAAAAAIAC
+oJkAAAAAAADgmQAAAAAAAOSZAACqqqqq6JkAAHhkRjzsmQAAqgAAAPCZAAAMAAAA9JkA
+AP8AAAD4mQAAFAAAACiiAAC1CQAAPKIAAK+JyJNMogAAAQAAAFCiAAAAoAAAVKIAAAAA
+AABYogAAgFPHDFyiAAABDw8PYKIAAAEPaV9kogAAEYpBAGiiAAAAAAAAbKIAAGrBMAxw
+ogAAIAiCAHSiAACqfBsIeKIAAM455xx8ogAAzgEXBTijAAAAAAAAPKMAAAAAAABAowAA
+AAAAAESjAAAAAAAASKMAAP///z9MowAA////P1CjAAD///8/VKMAAP//AwBYowAAH6qo
+eVyjAAAPQmwGYKMAAAciKA9kowAAhRZgF2ijAAAEEYAfbKMAAAMMoDdwowAAgwjEP3Sj
+AAADCMBXeKMAAIIG2F98owAAggTgf4CjAAC6ezx/hKMAAPB/MPMEmwAAAQAAAAibAAAC
+AAAADJsAAAMAAAAQmwAABAAAABSbAAAFAAAAGJsAAAgAAAAcmwAACQAAACCbAAAKAAAA
+JJsAAAsAAAAsmwAADQAAADCbAAAQAAAANJsAABEAAAA8mwAAEwAAAECbAAAUAAAARJsA
+ABUAAABImwAAGAAAAEybAAAZAAAAUJsAABoAAABUmwAAGwAAAFibAAAcAAAAXJsAAB0A
+AABgmwAAIAAAAGibAAAiAAAAbJsAACMAAABwmwAAJAAAAHSbAAAlAAAAeJsAACgAAAB8
+mwAAKQAAAICbAAAqAAAAhJsAACsAAACImwAALAAAAJCbAAAwAAAAlJsAADEAAACYmwAA
+MgAAAKCbAAA0AAAApJsAADUAAAComwAANQAAAKybAAA1AAAAsJsAADUAAAC0mwAANQAA
+ALibAAA1AAAAvJsAADUAAADAmwAANQAAAMSbAAA1AAAAyJsAADUAAADMmwAANQAAANCb
+AAA1AAAA1JsAADUAAADYmwAANQAAANybAAA1AAAA4JsAADUAAADkmwAANQAAAOibAAA1
+AAAA7JsAADUAAADwmwAANQAAAPSbAAA1AAAA+JsAABAAAAD8mwAAGgAAAACaAAAAAAAA
+AAAAAASaAABAAAAAQAAAAAiaAACAAAAAgAAAAAyaAAChAQAAYQEAABCaAADhAQAAoQEA
+ABSaAAAhAAAA4QEAABiaAABhAAAAIQAAAByaAACIAQAAYQAAACCaAADIAQAAiAEAACSa
+AAAIAAAAyAEAACiaAABIAAAACAAAACyaAACIAAAASAAAADCaAACpAQAAiAAAADSaAADp
+AQAAaQEAADiaAAApAAAAqQEAADyaAABpAAAA6QEAAECaAADQAQAAKQAAAESaAAAQAAAA
+aQAAAEiaAABQAAAAkAEAAEyaAACQAAAA0AEAAFCaAACxAQAAEAAAAFSaAADxAQAAUAAA
+AFiaAAAxAAAAkAAAAFyaAABxAAAAcQEAAGCaAAC4AQAAsQEAAGSaAAD4AQAA8QEAAGia
+AAA4AAAAMQAAAGyaAAB4AAAAcQAAAHCaAACZAQAAmAEAAHSaAADZAQAA2AEAAHiaAAAZ
+AAAAGAAAAHyaAABZAAAAWAAAAICaAACZAAAAmAAAAISaAADZAAAAeQEAAIiaAAD5AAAA
+uQEAAIyaAAD5AAAA+QEAAJCaAAD5AAAAOQAAAJSaAAD5AAAAeQAAAJiaAAD5AAAAuQAA
+AJyaAAD5AAAA+QAAAKCaAAD5AAAA+QAAAKSaAAD5AAAA+QAAAKiaAAD5AAAA+QAAAKya
+AAD5AAAA+QAAALCaAAD5AAAA+QAAALSaAAD5AAAA+QAAALiaAAD5AAAA+QAAALyaAAD5
+AAAA+QAAAMCaAAD5AAAA+QAAAMSaAAD5AAAA+QAAAMiaAAD5AAAA+QAAAMyaAAD5AAAA
++QAAANCaAAD5AAAA+QAAANSaAAD5AAAA+QAAANiaAAD5AAAA+QAAANyaAAD5AAAA+QAA
+AOCaAAD5AAAA+QAAAOSaAAD5AAAA+QAAAOiaAAD5AAAA+QAAAOyaAAD5AAAA+QAAAPCa
+AAD5AAAA+QAAAPSaAAD5AAAA+QAAAPiaAAD5AAAA+QAAAPyaAAD5AAAA+QAAANSYAAAg
+AAAA0JgAAAgAAAAIAAAACAAAAAgAAAAIAAAA3JgAAMAAoADAAKAAwADgAMAA4ADAAOAA
+AAAAAAAAAACcmAAAAAAAMwAAADMAAAAzAAAAMwAAADOcmAAAAAAAAQAAAAEAAAABAAAA
+AQAAAAGcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAHwAAAB8AAAAfAAAAHwAAAB+c
+mAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAC4AAAAuAAAALgAAAC4AAAAuACcmAAA
+AAC3AAAAtwAAALcAAAC3AAAAtwCcmAAAAACEAAAAhAAAAIQAAACEAAAAhACcmAAAAACY
+AAAAmAAAAJgAAACYAAAAmACcmAAAAADAAAAAwAAAAMAAAADAAAAAwACcmAAAAAD/AAAA
+/wAAAP8AAAD/AAAA/wCcmAAAAAD/AAAA/wAAAP8AAAD/AAAA/wCcmAAAAAD/AAAA/wAA
+AP8AAAD/AAAA/wCcmAAAAAD/AAAA/wAAAP8AAAD/AAAA/wCcmAAAAADXAAAA1wAAANcA
+AADXAAAA1wCcmAAAAABhAAAAYQAAAGEAAABhAAAAYQCcmAAAAAD+AAAA/gAAAP4AAAD+
+AAAA/gCcmAAAAADeAAAA3gAAAN4AAADeAAAA3gCcmAAAAAB/AAAAfwAAAH8AAAB/AAAA
+fwCcmAAAAAA9BAAAPQQAAD0EAAA9BAAAPQScmAAAAAB3AAAAdwAAAHcAAAB3AAAAdwCc
+mAAAAABEAAAARAAAAEQAAABEAAAARACcmAAAAACYAAAAmAAAAJgAAACYAAAAmACcmAAA
+gAAQAIAAEACAABAAgAAQAIAAEACcmAAANMAFADTABQA0wAUANMAFADTABQCcmAAA8AAx
+APAAMQDwADEA8AAxAPAAMQCcmAAAHwEMAB8BDAAfAQwAHwEMAB8BDACcmAAAQABRAEAA
+UQBAAFEAQABRAEAAUQCcmAAA2gBQANoAUADaAFAA2gBQANoAUACcmAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAACcmAAAREAAAERAAABEQAAAREAAAERAAACcmAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAACcmAAAwGAAAMBgAADAYAAAwGAAAMBgAACcmAAAACwAAAAsAAAANgAAADYA
+AAAsAADImAAAAwQAAAMEAAADBAAAAwQAAAMEAAAAAAAAAAAAAJyYAAAAZAAAAGQAAABk
AAAAZAAAAGQAAJyYAAAACAAAAAgAAAAIAAAACAAAAAgAAMyYAAAOAAAADgAAAA4AAAAO
-AAAADgAAAPRiAQD5YgEA5GIBAOhiAQD0YgEA9GIBAOxiAQDwYgEAQVI1MjEwAEFSNTIx
-MQBBUjUyMTIAUkY1MTExAFJGNTExMgBSRjI0MTMAQXRoZXJvcyAyMzEzIFdpU29DAEF0
-aGVyb3MgNTIxMiAoRlBHQSkAQXRoZXJvcyA1MjExIChGUEdBKQBBdGhlcm9zIDUyMTAA
-QXRoZXJvcyA1MjExAEF0aGVyb3MgNTMxMiBXaVNvQwBBdGhlcm9zIDUyMTIAREIAREVC
-VUcATkEATk9fQ09VTlRSWV9TRVQAQUwAQUxCQU5JQQBEWgBBTEdFUklBAEFSAEFSR0VO
-VElOQQBBTQBBUk1FTklBAEFVAEFVU1RSQUxJQQBBVABBVVNUUklBAEFaAEFaRVJCQUlK
-QU4AQkgAQkFIUkFJTgBCWQBCRUxBUlVTAEJFAEJFTEdJVU0AQloAQkVMSVpFAEJPAEJP
-TFZJQQBCUgBCUkFaSUwAQk4AQlJVTkVJIERBUlVTU0FMQU0AQkcAQlVMR0FSSUEAQ0EA
-Q0FOQURBAENMAENISUxFAENOAENISU5BAENPAENPTE9NQklBAENSAENPU1RBIFJJQ0EA
-SFIAQ1JPQVRJQQBDWQBDWVBSVVMAQ1oAQ1pFQ0ggUkVQVUJMSUMAREsAREVOTUFSSwBE
-TwBET01JTklDQU4gUkVQVUJMSUMARUMARUNVQURPUgBFRwBFR1lQVABTVgBFTCBTQUxW
-QURPUgBFRQBFU1RPTklBAEZJAEZJTkxBTkQARlIARlJBTkNFAEYyAEZSQU5DRV9SRVMA
-R0UAR0VPUkdJQQBERQBHRVJNQU5ZAEdSAEdSRUVDRQBHVABHVUFURU1BTEEASE4ASE9O
-RFVSQVMASEsASE9ORyBLT05HAEhVAEhVTkdBUlkASVMASUNFTEFORABJTgBJTkRJQQBJ
-RABJTkRPTkVTSUEASVIASVJBTgBJRQBJUkVMQU5EAElMAElTUkFFTABJVABJVEFMWQBK
-UABKQVBBTgBKMQBKQVBBTjEASjIASkFQQU4yAEozAEpBUEFOMwBKNABKQVBBTjQASjUA
-SkFQQU41AEpPAEpPUkRBTgBLWgBLQVpBS0hTVEFOAEtQAE5PUlRIIEtPUkVBAEtSAEtP
-UkVBIFJFUFVCTElDAEsyAEtPUkVBIFJFUFVCTElDMgBLVwBLVVdBSVQATFYATEFUVklB
-AExCAExFQkFOT04ATEkATElFQ0hURU5TVEVJTgBMVABMSVRIVUFOSUEATFUATFVYRU1C
-T1VSRwBNTwBNQUNBVQBNSwBNQUNFRE9OSUEATVkATUFMQVlTSUEATVgATUVYSUNPAE1D
-AE1PTkFDTwBNQQBNT1JPQ0NPAE5MAE5FVEhFUkxBTkRTAE5aAE5FVyBaRUFMQU5EAE5P
-AE5PUldBWQBPTQBPTUFOAFBLAFBBS0lTVEFOAFBBAFBBTkFNQQBQRQBQRVJVAFBIAFBI
-SUxJUFBJTkVTAFBMAFBPTEFORABQVABQT1JUVUdBTABQUgBQVUVSVE8gUklDTwBRQQBR
-QVRBUgBSTwBST01BTklBAFJVAFJVU1NJQQBTQQBTQVVESSBBUkFCSUEAU0cAU0lOR0FQ
-T1JFAFNLAFNMT1ZBSyBSRVBVQkxJQwBTSQBTTE9WRU5JQQBaQQBTT1VUSCBBRlJJQ0EA
-RVMAU1BBSU4AU0UAU1dFREVOAENIAFNXSVRaRVJMQU5EAFNZAFNZUklBAFRXAFRBSVdB
-TgBUSABUSEFJTEFORABUVABUUklOSURBRCAmIFRPQkFHTwBUTgBUVU5JU0lBAFRSAFRV
-UktFWQBVQQBVS1JBSU5FAEFFAFVOSVRFRCBBUkFCIEVNSVJBVEVTAEdCAFVOSVRFRCBL
-SU5HRE9NAFVTAFVOSVRFRCBTVEFURVMAVVkAVVJVR1VBWQBVWgBVWkJFS0lTVEFOAFZF
-AFZFTkVaVUVMQQBWTgBWSUVUIE5BTQBZRQBZRU1FTgBaVwBaSU1CQUJXRQAlczogcGh5
-Q250MSAweCV4LCByZXNldHRpbmcgY291bnRlciB2YWx1ZSB0byAweCV4CgAAJXM6IHBo
-eUNudDIgMHgleCwgcmVzZXR0aW5nIGNvdW50ZXIgdmFsdWUgdG8gMHgleAoAAAAAAAAw
-LjkuMTQuOQAAAAAAAAAABwAAAA4AAAAVAAAAHAAAACMAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAJBOIExEAiBPsExEAHhSCFA8AghTmFBIAXhVdFhQAXRbBFhQAwRba
-FhcAjBSgFLQUyBQ8FFAUZBR4FAAAMhRGFFoUbhQAAGwJhQmeCYoJqAkAAGwJhQmeCYoJ
-AABsCYUJngmKCQAAbAmFCZ4JigkAAHEWhRaZFq0WwRYAAFoUghSqFAAAgBaoFgAAfBWQ
-FaQVuBXMFeAV9BUIFhwWMBZEFgAAcQl2CXsJgAmPCZQJmQmjCQAAcQl2CXsJgAmPCZQJ
-mQkAAHEJdgl7CYAJjwmUCZkJAABxCXYJewmACY8JlAmZCQAAtAkAAIUJAAA8FFAUZBR4
-FAAAAAABAAAAagAAAAEAAAB8AAAABAAAAIYAAAAEAAAAkgAAAAQAAACcAAAABAAAAKYA
-AAABAAAAsAAAAAIAAAC8AAAAAgAAAMQAAAABAAAAygAAAAQAAADiAAAABAAAAPQAAAAE
-AAAABAEAAAQAAAAUAQAABAAAACQBAAAgAAAAKAEAADIURhRaFG4UAABaFIIUqhSAFqgW
-AAB8FZAVpBW4FcwV4BX0FQgWHBYwFkQWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AGAAAACoCQAAAQAAAKMJAAABAAAAtAkAAAEAAABnAAAAqAkAAAEAAACjCQAAAQAAALQJ
-AAABAAAAYQAAAKgJAAABAAAAowkAAAEAAAC0CQAAAQAAAGUAAACoCQAAAQAAAKMJAAAB
-AAAAtAkAAAEAAABKAAAAqAkAAAAAAACjCQAAAAAAALQJAAABAAAASwAAAKgJAAABAAAA
-owkAAAEAAAC0CQAAAQAAAGoAAACoCQAAAQAAAKMJAAABAAAAtAkAAAEAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIA
-AAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAA
+AAAADgAAABSrAQAZqwEAAKsBAASrAQAUqwEAFKsBAAirAQAMqwEAQVI1MjEwAEFSNTIx
+MQBBUjUyMTIAUkY1MTExAFJGNTExMgBSRjI0MTMAUkY1NDEzAEF0aGVyb3MgMjMxMyBX
+aVNvQwBBdGhlcm9zIDU0MjQAQXRoZXJvcyAyMzE3IFdpU29DAEF0aGVyb3MgNTIxMiAo
+RlBHQSkAQXRoZXJvcyA1MjExIChGUEdBKQBBdGhlcm9zIDUyMTAAQXRoZXJvcyA1MjEx
+AEF0aGVyb3MgNTMxMiBXaVNvQwBBdGhlcm9zIDIzMTUgV2lTb0MAQXRoZXJvcyA1MjEy
+AERCAERFQlVHAE5BAE5PX0NPVU5UUllfU0VUAEFMAEFMQkFOSUEARFoAQUxHRVJJQQBB
+UgBBUkdFTlRJTkEAQU0AQVJNRU5JQQBBVQBBVVNUUkFMSUEAQVQAQVVTVFJJQQBBWgBB
+WkVSQkFJSkFOAEJIAEJBSFJBSU4AQlkAQkVMQVJVUwBCRQBCRUxHSVVNAEJaAEJFTEla
+RQBCTwBCT0xWSUEAQlIAQlJBWklMAEJOAEJSVU5FSSBEQVJVU1NBTEFNAEJHAEJVTEdB
+UklBAENBAENBTkFEQQBDTABDSElMRQBDTgBDSElOQQBDTwBDT0xPTUJJQQBDUgBDT1NU
+QSBSSUNBAEhSAENST0FUSUEAQ1kAQ1lQUlVTAENaAENaRUNIIFJFUFVCTElDAERLAERF
+Tk1BUksARE8ARE9NSU5JQ0FOIFJFUFVCTElDAEVDAEVDVUFET1IARUcARUdZUFQAU1YA
+RUwgU0FMVkFET1IARUUARVNUT05JQQBGSQBGSU5MQU5EAEZSAEZSQU5DRQBGMgBGUkFO
+Q0VfUkVTAEdFAEdFT1JHSUEAREUAR0VSTUFOWQBHUgBHUkVFQ0UAR1QAR1VBVEVNQUxB
+AEhOAEhPTkRVUkFTAEhLAEhPTkcgS09ORwBIVQBIVU5HQVJZAElTAElDRUxBTkQASU4A
+SU5ESUEASUQASU5ET05FU0lBAElSAElSQU4ASUUASVJFTEFORABJTABJU1JBRUwASVQA
+SVRBTFkASlAASkFQQU4ASkFQQU4xAEpBUEFOMgBKQVBBTjMASkFQQU40AEpBUEFONQBK
+QVBBTjYASkFQQU43AEpBUEFOOABKQVBBTjkASkFQQU4xMABKQVBBTjExAEpBUEFOMTIA
+SkFQQU4xMwBKQVBBTjE0AEpBUEFOMTUASkFQQU4xNgBKQVBBTjE3AEpBUEFOMTgASkFQ
+QU4xOQBKQVBBTjIwAEpBUEFOMjEASkFQQU4yMgBKQVBBTjIzAEpBUEFOMjQASk8ASk9S
+REFOAEtaAEtBWkFLSFNUQU4AS1AATk9SVEggS09SRUEAS1IAS09SRUEgUkVQVUJMSUMA
+SzIAS09SRUEgUkVQVUJMSUMyAEszAEtPUkVBIFJFUFVCTElDMwBLVwBLVVdBSVQATFYA
+TEFUVklBAExCAExFQkFOT04ATEkATElFQ0hURU5TVEVJTgBMVABMSVRIVUFOSUEATFUA
+TFVYRU1CT1VSRwBNTwBNQUNBVQBNSwBNQUNFRE9OSUEATVkATUFMQVlTSUEATVQATUFM
+VEEATVgATUVYSUNPAE1DAE1PTkFDTwBNQQBNT1JPQ0NPAE5MAE5FVEhFUkxBTkRTAE5a
+AE5FVyBaRUFMQU5EAE5PAE5PUldBWQBPTQBPTUFOAFBLAFBBS0lTVEFOAFBBAFBBTkFN
+QQBQRQBQRVJVAFBIAFBISUxJUFBJTkVTAFBMAFBPTEFORABQVABQT1JUVUdBTABQUgBQ
+VUVSVE8gUklDTwBRQQBRQVRBUgBSTwBST01BTklBAFJVAFJVU1NJQQBTQQBTQVVESSBB
+UkFCSUEAU0cAU0lOR0FQT1JFAFNLAFNMT1ZBSyBSRVBVQkxJQwBTSQBTTE9WRU5JQQBa
+QQBTT1VUSCBBRlJJQ0EARVMAU1BBSU4AU0UAU1dFREVOAENIAFNXSVRaRVJMQU5EAFNZ
+AFNZUklBAFRXAFRBSVdBTgBUSABUSEFJTEFORABUVABUUklOSURBRCAmIFRPQkFHTwBU
+TgBUVU5JU0lBAFRSAFRVUktFWQBVQQBVS1JBSU5FAEFFAFVOSVRFRCBBUkFCIEVNSVJB
+VEVTAEdCAFVOSVRFRCBLSU5HRE9NAFVTAFVOSVRFRCBTVEFURVMAUFMAVU5JVEVEIFNU
+QVRFUyAoUFVCTElDIFNBRkVUWSkAVVkAVVJVR1VBWQBVWgBVWkJFS0lTVEFOAFZFAFZF
+TkVaVUVMQQBWTgBWSUVUIE5BTQBZRQBZRU1FTgBaVwBaSU1CQUJXRQAAAAAAAAAAAAAA
+AAAAAAAAMC45LjE3LjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAA4AAAAV
+AAAAHAAAACMAAAAqAAAAAAAAAAAA/wH/AQAAAAAAAAAAAAD/////////fwAAAAADAJgB
+mQEAAAAAAAAAAAAA/////////38AAAAABwCYATALAAAAAAAAAAAAAP////////9/AAAA
+AAgAmAEwDAAAAAAAAAAAAAD/////////fwAAAAAgACABEAoAAAAAAAAAAAAA////////
+/38AAAAAIQAgAZkBAAAAAAAAAAAAAP////////9/AAAAACIAIAEwDAAAAAAAAAAAAAD/
+////////fwAAAAA6AGABEAoAAAAAAAAAAAAA/////////38AAAAAOwBgAZkBAAAAAAAA
+AAAAAP////////9/AAAAABIAZQEQCgAAAwAAAAAAAAD/////////fwAAAAA3ADABmQEA
+AAMAAAAAAAAA/////////38AAAAANQAwApkBAAADAAAAAAAAAP////////9/AAAAADYA
+MAOZAQAAAwAAAAAAAAD/////////fwAAAAAwADAEmQEAAAMAAAAAAAAA/////////38A
+AAAAOQAwBZkBAAADAAAAAAAAAP////////9/AAAAADQAMAaZAQAAAwAAAAAAAAD/////
+////fwAAAAAyADADmQEAAAMAAAAAAAAA/////////38AAAAAMQAwA5kBAAAAAAAAAAAA
+AP////////9/AAAAABEAEAGZAQAAAAAAAAAAAAD/////////fwAAAAAQABABEAoAAAAA
+AAAAAAAA/////////38AAAAAUgBQAZkBAAAAAAAAAAAAAP////////9/AAAAAEUAUAKZ
+AQAAAAAAAAAAAAD/////////fwAAAABHAFADmQEAAAAAAAAAAAAA/////////38AAAAA
+QgBQBJkBAAAAAAAAAAAAAP////////9/AAAAAFgAUAWZAQAAAAAAAAAAAAD/////////
+fwAAAABbAFAGmQEAAAAAAAAAAAAA/////////38AAAAAXQBQCJkBAAAAAAAAAAAAAP//
+//////9/AAAAAF4AUAmZAQAAAAAAAAAAAAD/////////fwAAAABQAFADEAoAAAAAAAAA
+AAAA/////////38AAAAAVQBQATAMAAAAAAAAAAAAAP////////9/AAAAAFYAUAIwDAAA
+AAAAAAAAAAD/////////fwAAAABJAFACUA0AAAAAAAAAAAAA/////////38AAAAAQABA
+AUAKAABGAAAABAAAACgAAAAAAAAAiAEAAEEAQAFACgAARwAAAAQAAABoAAAAAAAAAIkB
+AABIAEABEAoAAEYAAAAEAAAACAAAAAAAAACKAQAASgBAAUAKAABGAAAABAAAAAgYAAAA
+AAAAjAEAAEsAQAFACgAARgAAAAQAAAAIYAAAAAAAAI0BAABMAEABUAoAAEYAAAAEAAAA
+CAAAAAAAAACPAQAAQwBAAkAKAABHAAAABAAAAHAAAAAAAAAAiwEAAPAAQANACgAARgAA
+AAQAAAAgAAAAAAAAAAAAAACAAEADQAoAAEcAAAAEAAAAYAAAAAAAAACnDwAA8QBAA0AK
+AABGAAAABAAAAAAYAAAAAAAAAAAAAIEAQANACgAARgAAAAQAAAAAYAAAAAAAAKgPAACC
+AEADUAoAAEYAAAAEAAAAAAAAAAAAAACpDwAA8gBAAxAKAABGAAAABAAAAAAAAAAAAAAA
+AAAAAIMAQARACgAARwAAAAQAAABggAAAAAAAAKoPAAD0AEAEQAoAAEYAAAAEAAAAAJgA
+AAAAAAAAAAAAhABABEAKAABGAAAABAAAAADgAAAAAAAAqw8AAIUAQARQCgAARgAAAAQA
+AAAAgAAAAAAAAKwPAAD1AEAEEAoAAEYAAAAEAAAAAIAAAAAAAAAAAAAAhgBABUAKAABH
+AAAABAAAAGCAAAAAAAAArQ8AAIcAQAVACgAARgAAAAQAAAAA4AAAAAAAAK4PAACIAEAF
+UAoAAEYAAAAEAAAAAIAAAAAAAACvDwAAiQBABkAKAABHAAAABAAAAGgAAAAAAAAAsA8A
+AIoAQAZACgAARgAAAAQAAAAIYAAAAAAAALEPAACLAEAGUAoAAEYAAAAEAAAACAAAAAAA
+AACyDwAAjABAB0AKAABHAAAABAAAAGiAAAAAAAAAsw8AAI0AQAdACgAARgAAAAQAAAAI
+4AAAAAAAALQPAACOAEAHUAoAAEYAAAAEAAAACIAAAAAAAAC1DwAAjwBACEAKAABHAAAA
+BAAAAGiAAAAAAAAAtg8AAJAAQAhACgAARgAAAAQAAAAI4AAAAAAAALcPAACRAEAIUAoA
+AEYAAAAEAAAACIAAAAAAAAC4DwAA9gBACUAKAABHAAAABAAAAGCAAAAAAAAAAAAAAPcA
+QAtACgAARwAAAAQAAABggAAAAAAAAAAAAABgAGAAYAAAAAAAAAAAAAAA/////////38A
+AAAAYQBhAGEAAAADAAAAAAAAAP////////9/AAAAAGIAYgBiAAAAAgAAAAAAAAD/////
+////fwAAAABjAGMAYwAAAAAAAAAAAAAA/////////38AAAAAZABkAGQAAAADAAAAAAAA
+AP////////9/AAAAAGUAZQBlAAAAAwAAAAAAAAD/////////fwAAAABmAGYAZgAAAAAA
+AAAAAAAA/////////38AAAAAZwBnAGcAAAAAAAAAAAAAAP////////9/AAAAAGgAaABo
+AAAAAAAAAAAAAAD/////////fwAAAABpAGkAaQAAAAMAAAAAAAAA/////////38AAAAA
+agBqAGoAAAADAAAAAAAAAP////////9/AAAAAAAAAAAAAAAAAAAAAGUAAAABAAAA////
+/4AAAAD/////AAAAAEpQAAC0DwAAAAAAAGoAAAABAAAA/////4AAAAD/////AAAAAEpQ
+AAC0DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAADZAAAA3AAAAAEAAAAB
+AAAAAQAAAFgbAAAAABAA4gAAAOUAAAABAAAAAQAAAAEAAABYGwAACAADAPQAAAD3AAAA
+AQAAAAAAAAABAAAAWBsAAAwAAwD/AAAAAgEAAAEAAAAAAAAAAQAAAFgbAAAgAEcACgEA
+AA0BAAAAAAAAAAAAAAAAAABYGwAAMwAwABcBAAAaAQAAAQAAAAAAAAABAAAAWBsAACQA
+IQAiAQAAJQEAAAEAAAABAAAAAQAAAFgbAAAoADcALwEAADIBAAABAAAAAAAAAAEAAABY
+GwAAHwAwADoBAAA9AQAAAQAAAAEAAAABAAAAWBsAADAAWwBIAQAASwEAAAEAAAAAAAAA
+AQAAAFgbAABwAAMAUwEAAFYBAAABAAAAAAAAAAEAAABYGwAAOAA3AF4BAABhAQAAAQAA
+AAAAAAABAAAAWBsAAFQAVQBpAQAAbAEAAAEAAAABAAAAAQAAAFgbAABEAFUAcwEAAHYB
+AAABAAAAAQAAAAEAAABYGwAATAA7AH0BAACAAQAAAQAAAAAAAAAAAAAAWBsAAGAAUgCH
+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
+AAAAPBR4FBQAFBQAAAAAAAAAAAUAAAAAAAAAAAAAADwUeBQXABQUAAAAAAAAAAAFAAAA
+AAAAAAAAAAA8FHgUFwYUFAAAAAAAAAAAAQAAAAAAAAAAAAAAPBTIFBQGFBQCAAAAAAAA
+AAQAAAAAAAAAAAAAAHgUoBQXABQUAQAAAAAAAAAFAAAAAAAAAAAAAACMFKAUFwAUFAMA
+AAAAAAAABQAAAAAAAAAAAAAAjBTIFBIAFBQDAAAAAAAAAAUAAAAAAAAAAAAAAIwUyBQU
+ABQUBwAAAAAAAAAFgAAAAAAAAAAAAACMFMgUFAYUFAMAAAAAAAAAAQAAAAAAAAACAAAA
+jBTIFBcGFBQDAAAAAAAAAAEAAAAAAAAAAgAAAIwUyBQXBhQUAwAAAAAAAAABAAAAAAAA
+AAAAAACMFMgUHgAUFAAAAAAAAAAAAAAAAAAAAAAAAAAAjBREFgUGFBQDAAAAAAAAAAAA
+AAAAAAAAAAAAAKAUyBQRBhQUAwAAAAAAAAABAAAAAAAAAAAAAAB8FfQVHgYUFAIAAAAA
+AAAABAAAAAAAAAAAAAAAfBVEFhQGFBQDAAAAAAAAAAEAAAAAAAAABAAAAHwVRBYbABQU
+AwAAAAAAAAAFAAAAAAAAAAAAAAB8FUQWHgAUFAMAAAAAAAAABQAAAAAAAAAAAAAAfBVE
+FhcAFBQHAAAAAAAAAAGAAAAAAAAAAAAAAHEWrRYXABQUAAAAAAAAAAAAAAAAAAAAAAAA
+AABxFq0WHgYUFAAAAAAAAAAAAAAAAAAAAAAAAAAAcRatFh4GFBQCAAAAAAAAAAQAAAAA
+AAAAAAAAAHEWwRYFBhQUAAAAAAAAAAAAAAAAAAAAAAAAAABxFsEWEQAUFAAAAAAAAAAA
+AAAAAAAAAAAAAAAAcRbBFhQAFBQAAAAAAAAAAAAAAAAAAAAAAAAAAHEWwRYeABQUAAAA
+AAAAAAAAAAAAAAAAAAAAAABxFsEWHgYUFAAAAAAAAAAAAAAAAAAAAAADAAAAcRbBFh4G
+FBQAAAAAAAAAAAAAAAAAAAAAAAAAADgTdBMeABQUAAAAAAAAAAAABAAAAAAAAAAAAACw
+E9gTHgAUFAAAAAAAAAAAAAQAAAAAAAAAAAAAMhRuFB4AFBQDAAAAAAAAAAAEAAAAAAAA
+AAAAADwUeBQeABQUAwAAAAAAAAAABAAAAAAAAAAAAACMFMgUHgAUFAMAAAAAAAAAAAQA
+AAAAAAAAAAAAcRbBFh4AFBQAAAAAAAAAAAAEAAAAAAAAAAAAAHwVRBYeABQUAwAAAAAA
+AAAABAAAAAAAAAAAAAAAAAAAAAAAAAoUWhQFBigoAAAAAAAAAAAAAAAAAAAAAAAAAACC
+FNIUBQYoKAEAAAAAAAAAAAAAAAAAAAAAAAAA+hRyFQUGKCgAAAAAAAAAAAAAAAAAAAAA
+AAAAAJoVEhYFBigoAQAAAAAAAAAAAAAAAAAAAAAAAAAeFEYUBQYoKAAAAAAAAAAAAAAA
+AAAAAAAAAAAAbhS+FAUGKCgBAAAAAAAAAAAAAAAAAAAAAAAAAOYUXhUFBigoAAAAAAAA
+AAAAAAAAAAAAAAAAAACGFSYWBQYoKAEAAAAAAAAAAAAAAAAAAAAAAAAAUBR4FBEGKCgA
+AAAAAAAAAAAAAAAAAAAAAAAAAFAUeBQXBigoAAAAAAAAAAAAAAAAAAAAAAAAAABaFFoU
+EQYoKAAAAAAAAAAAAAAAAAAAAAAAAAAAWhRaFBcAKCgAAAAAAAAAAAAAAAAAAAAAAAAA
+AKAUoBQXBigoAQAAAAAAAAACAAAAAAAAAAAAAACgFKAUFAYoKAEAAAAAAAAAAgAAAAAA
+AAAAAAAAghSCFBEAKCgBAAAAAAAAAAIAAAAAAAAAAAAAAKoUqhQUACgoAQAAAAAAAAAC
+AAAAAAAAAAAAAACCFKoUFAAoKAEAAAAAAAAAAgAAAAAAAAAAAAAAghSqFBcGKCgBAAAA
+AAAAAAIAAAAAAAAAAAAAAKQVHBYUBigoAQAAAAAAAAACAAAAAAAAAAAAAACAFqgWFAAo
+KAAAAAAAAAAAAAAAAAAAAAAAAAAAgBaoFh4GKCgAAAAAAAAAAAAAAAAAAAAAAAAAAIUW
+rRYeBigoAAAAAAAAAAAAAAAAAAAAAAAAAABaFIIUDwAoKAMAAAAAAAAAAAQAAAAAAAAA
+AAAAqhSqFBIAKCgDAAAAAAAAAAAEAAAAAAAAAAAAAKQVHBYUACgoAwAAAAAAAAAABAAA
+AAAAAAAAAACAFqgWFAAoKAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAICUQJBQYU
+BQAAAAAAAAAAAAAAAAAAAAAAAAAACAlECRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAGwJ
+qAkFBhQFAAAAAAAAAAAAAAAAAAAAAAAAAABsCagJFAAUBQAAAAAAAAAAIAAAAAAAAAAA
+AAAAbAmoCR4AFAUAAAAAAAAAAAAAAAAAAAAAAAAAAGwJngkbBhQFAAAAAAAAAAAAAAAA
+AAAAAAAAAABsCZ4JFAAUBQAAAAAAAAAAIAAAAAAAAAAAAAAAgAmKCRQAFAUAAAAAAAAA
+AAAAAAAAAAAAAAAAAJkJqAkUABQFAAAAAAAAAAAAAAAAAAAAAAAAAACjCagJFAAUBQAA
+AAAAAAAAICAAAAAAAAAAAAAAtAm0CQUGFAUAAAAAAAAAAAAAAAAAAAAAAAAAALQJtAkU
+ABQFAAAAAAAAAAAgKAAAAAAAAAAAAADQCawKBQYUBQAAAAAAAAAAAAAAAAAAAAAAAAAA
+CAlECRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAGwJbAkUABQFAAAAAAAAAAAAAAAAAAAA
+AAAAAABxCYAJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAhQmKCRQAFAUAAAAAAAAAAAAA
+AAAAAAAAAAAAAI8JmQkUABQFAAAAAAAAAAAAAAAAAAAAAAAAAACeCZ4JFAAUBQAAAAAA
+AAAAAAAAAAAAAAAAAAAAowmjCRQAFAUAAAAAAAAAAAAEAAAAAACAAAAAAKMJowkUABQF
+AAAAAAAAAAAAAAAAAAAAgAAAAACoCagJFAAUBQAAAAAAAAAAAAQAAAAAAIAAAAAAqAmo
+CRQAFAUAAAAAAAAAAAAAAAAAAACAAAAAALQJtAkUABQFAAAAAAAAAAAABAAAAAAAgAAA
+AAC0CbQJFAAUBQAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAgJRAkFBhQFAAAAAAAAAAAA
+AAAAAAAAAAAAAAAICUQJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAbAmoCQUGFAUAAAAA
+AAAAAAAAAAAAAAAAAAAAAGwJqAkUABQFAAAAAAAAAABAAAAAAAAAAAAAAABsCagJHgAU
+BQAAAAAAAAAAAAAAAAAAAAAAAAAAbAmeCRsGFAUAAAAAAAAAAAAAAAAAAAAAAAAAAGwJ
+ngkUABQFAAAAAAAAAABAAAAAAAAAAAAAAACACYoJFAAUBQAAAAAAAAAAAAAAAAAAAAAA
+AAAAmQmoCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAANAJrAoFBhQFAAAAAAAAAAAAAAAA
+AAAAAAAAAACjCagJFAAUBQAAAAAAAAAAICAAAAAAAAAAAAAACAlECRQAFAUAAAAAAAAA
+AAAAAAAAAAAAAAAAAGwJbAkUABQFAAAAAAAAAAAAAAAAAAAAAAAAAABxCYAJFAAUBQAA
+AAAAAAAAAAAAAAAAAAAAAAAAhQmKCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAI8JmQkU
+ABQFAAAAAAAAAAAAAAAAAAAAAAAAAACeCZ4JFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAA
+owmjCRQAFAUAAAAAAAAAAAAEAAAAAACAAAAAAKMJowkUABQFAAAAAAAAAAAAAAAAAAAA
+gAAAAACoCagJFAAUBQAAAAAAAAAAAAQAAAAAAIAAAAAAqAmoCRQAFAUAAAAAAAAAAAAA
+AAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAlECQUGKCgAAAAAAAAAAAAAAAAA
+AAAAAAAAAIUJhQkFBigoAAAAAAAAAAAAAAAAAAAAAAAAAACFCYUJFAYoKAAAAAAAAAAA
+AAAAAAAAAAAAAAAAhQmFCRIGKCgAAAAAAAAAAAAEAAAAAAAAAAAAANAJrAoFBigoAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BEAABAAAAAAAAAAAA
+AAAAAAAAAAAAAAACAAggAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAABEkAAAAAAAA
+AAAAAAAAAAUUAAAAAAAAAAAAAAAAAAAFAgAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAAAA
+AAAAAFABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFADEAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAABAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAFAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAGMAACAAAA
+AAAAAAMAAAAAAAAAAAAAAACAQACAAAAAAAAAAAAAAAAACAkAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAFAIMAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAQAAQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAJMAACAAAAAAAAAAQAAAAAAAAAAwAA
+AAAABCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABMAAC
+AAAAAAAAAAQAAAAAAAAAAwAAAACAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAADACMAACAAAAAAAAAAQAAAAAAAAAAwAAAABAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADMAACAAAAAAAAAAQAAAAAAAAA
+AwAAAACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAE
+MAACAAAAAAAAAAQAAAAAAAAAAwAAAABAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAADAFMAACAAAAAAAAAAQAAAAAAAAAAwAAAAAQAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMAACAAAAAAAAAAQAAAAA
+AAAAAwAAAAAAEQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ABABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAEAAgAAAAAAAAAAAAAABBIAAAAAAAAA
+AAAAAAAAABEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAACABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIABAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGABEAABAAAAAAAAAAMA
+AAAAAAAAAAAAAAAggEAAAgAAAAAAAAAAAAAAxBAAAAAAAAAAAAAAAAAAACEEAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAGUBEAABAAAAAAAAAAMAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABQAAAAAAAAAAAAAgAAAAAAAAAAgAAAAAEAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACQAAAAAAAAAAA
+ABAAAAAAAAAAAgAAAMcFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAEADQAAAAAAAAAAAAACAAAAAAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEQAAEAAAAAAAAAACAAAAAAAAAAgAAAACA
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFQAAEAAAA
+AAAAAACAAAAAAAAAAgAAAACAQAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAEAGQAAAAAAAAAAAAAgAAAAAAAAAAgAAAACIAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAHQAAEAAAAAAAAAAiAAAAAAAAAAgAA
+AACEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIQAAE
+AAAAAAAAAAiAAAAAAAAAAgAAAACEQAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAEAJQAAAAAAAAAAAAACAAAAAAAAAAgAAAMeBAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEALQAAEAAAAAAAAAACAAAAAAAAA
+AgAAAMeBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAN
+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAADAK/wAAAAAAAAAAAIAAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA
+AAAAAQAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADALMAAAAAAAAAAAAAABAAAA
+AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+ADAMMAAAAAAAAAAAAAACAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA
+AAAABAAAAAAAAAAAAAAAAAAAABAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA
+AAAAAAAgAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEAKQAAAAAAAAAAAAGB4
+AAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAEAKAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAA
+AAAAAFAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA
+AAAAAAAABAAAAAAAAAAAAAAAAAAAAJkBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA
+AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAGAA/wADAAAAAAAA
+AAAEAAAAAAAACAAAAAAAAAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAADArwAAAAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAA
+AAAAAAAAAGYA/wADAAAAAAAAAAAEAAAAAAAACAAAAAAAAAAA4AMAAAAAAAAAAAAAAMAC
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA8AEAAAAA
+AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGcA/wADAAAAAAAAAAAEAAAAAAAACAAAAAAA
+AAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwAA
+AAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGgA/wADAAAA
+AAAAAAAEAAAAAAAACAAAAAAAAAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAADAVwAAAAAAAAAAAAAAAAAA8BUAAAAAAAAAAAAAAAAACAAAAAAA
+AAAAAAAAAAAAAGEA/wADAAAAAAAAAAAEAAAAAAAAEAAAAAAAAAAA4AMAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADArwAAAAAAAAAAAAAAAAAA8AsA
+AAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGIA/wADAAAAAAAAAAAEAAAAAAAAEAAA
+AAAAAAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA
+rwAAAAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGMA/wAD
+AAAAAAAAAAAEAAAAAAAACAAAAAAAAAAA4AEAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAADALwAAAAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAA
+AAAAAAAAAAAAAAAAAGQA/wADAAAAAAAAAAAEAAAAAAAAEAAAAAAAAAAAwAEAAAAAAAAA
+AAAAAMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA
+8AEAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGUA/wADAAAAAAAAAAAEAAAAAAAA
+EAAAAAAAAAAAwAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AADALwAAAAAAAAAAAAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGkA
+/wADAAAAAAAAAAAEAAAAAAAAEAAAAAAAAAAAwAMAAAAAAAAAAAAAAMACAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA8AEAAAAAAAAAAAAAAAAA
+CAAAAAAAAAAAAAAAAAAAAGoA/wADAAAAAAAAAAAEAAAAAAAAEAAAAAAAAAAAwAMAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwAAAAAAAAAAAAAA
+AAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAJgB/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAQADwAPMAiIHwAPMAQQCAAIMAiYGAAIMASADyAPUAioHyAPUAQwD2APcA
+i4H2APcASgDxAPQAjIHxAPQASwCBAIQAjYGBAIQATACCAIUAj4GCAIUAAAAAAAAAAAAA
+AAAAiAHwAPMAiQGAAIMAigHyAPUAiwH2APcAjAHxAPQAjQGBAIQAjwGCAIUAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAECcBcLAIwAAAAAAAECKCMPABIAAAAAAAEC4C4KAJgCAAAAAAECUEYOACQCAAAAAAEC
+wF0JALAEAAAAAAECoIwNAEgEAAAAAAECgLsIAGAEAAAAAAEC8NIMAGwEAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDcBcL
-AIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgCAAAAAAEDUEYOACQCAAAAAAEDwF0JALAE
-AAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAAAAED8NIMAGwEAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA3AXCwCMAAAA
+AAABAygjDwASAAAAAAABA+AuCgCYAgAAAAABA1BGDgAkAgAAAAABA8BdCQCwBAAAAAAB
+A6CMDQBIBAAAAAABA4C7CABgBAAAAAABA/DSDABsBAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAnAXCwCMAAAAAAABAigj
-DwASAAAAAAABAuAuCgCYAgAAAAABAlBGDgAkAgAAAAABAsBdCQCwBAAAAAABAqCMDQBI
-BAAAAAABAoC7CABgBAAAAAABAvDSDABsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAA
+AAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIAAAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAA
+AQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgC
+AAAAAAEDUEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAA
+AAED8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNwFwsAjAAAAAAAAQMoIw8AEgAAAAAAAQPg
-LgoAmAIAAAAAAQNQRg4AJAIAAAAAAQPAXQkAsAQAAAAAAQOgjA0ASAQAAAAAAQOAuwgA
-YAQAAAAAAQPw0gwAbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAABAOgDCwCCAAAAAAABANAHCgSEAQAAAAABAHwVCQSLAQAAAAABAPgqCASW
+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAEA6AMLAIIAAAAAAAEA0AcKBIQBAAAAAAEAfBUJBIsBAAAAAAEA
-+CoIBJYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAABKIAAAAAAAAAAAAACKIAAEZGPlBGRj5QDKIAAGxBgGRsQYBkEKIA
+AAOgmQEDoJkBFKIAABDWTAQQ1kwEGKIAAEAAgBNAAIATHKIAAGAA4BtgAOAbIKIAAAqA
+UwwKgFMMJKIAADvfFAA73xQAKKIAALUBAAC1AQAALKIAACAAAAAgAAAAnJgAAAAAAAAA
+AAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAA
+nJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgA
+AAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAOAAAADgAnJgAAAAAAAAAAAAAnJgAAAAA
+AAAAAAAAnJgAAAAAAAAAAAAAnJgAAPkABAD5AAQA1JgAAAAAAAAEAAAAAAAAAAAAAAAA
+AAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAA
+AAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAQAAAAEJyYAAAAAAAEAAAABJyYAAAAAAAAAAAA
+AJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAACpyYAACAADgAgAA4ApyY
+AAAGAAIABgAAAJyYAACSAAAAkgAAAJyYAACgAAAAoAAAAJyYAAAHAAQABwAEANSYAAAa
+AAAAGgAAAJyYAABIAAAASAAAAJyYAAAQAAAAEAAAAJyYAAAIAAAACAAAAJyYAAAPAAAA
+DwAAAJyYAADyAAAAYgAAAJyYAABPkAAATJAAAJyYAABaEgAAmhIAAMyYAAAOAAAADwAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIA
+AAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAEogAAAAAAAAAAAAAIogAARkY+UEZGPlAMogAAbEGAZGxB
-gGQQogAAA6CZAQOgmQEUogAAENZMBBDWTAQYogAAQACAE0AAgBMcogAAYADgG2AA4Bsg
-ogAACoBTDAqAUwwkogAAO98UADvfFAAoogAAtQEAALUBAAAsogAAIAAAACAAAACcmAAA
-AAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAA
-AAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAAAAAAA
-AACcmAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAAAAA4AAAAOACcmAAAAAAAAAAAAACc
-mAAAAAAAAAAAAACcmAAAAAAAAAAAAACcmAAA+QAEAPkABADUmAAAAAAAAAQAAAAAAAAA
-AAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgA
-AAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAABAAAAAQnJgAAAAAAAQAAAAEnJgAAAAA
-AAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAKnJgAAIAAOACA
-ADgCnJgAAAYAAgAGAAAAnJgAAJIAAACSAAAAnJgAAKAAAACgAAAAnJgAAAcABAAHAAQA
-1JgAABoAAAAaAAAAnJgAAEgAAABIAAAAnJgAABAAAAAQAAAAnJgAAAgAAAAIAAAAnJgA
-AA8AAAAPAAAAnJgAAPIAAABiAAAAnJgAAE+QAABMkAAAnJgAAFoSAACaEgAAzJgAAA4A
-AAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAABAnAXCwCMAAAAAAABAigjDwASAAAAAAABAuAuCgCYAgAAAAABAlBG
-DgAkAgAAAAABAsBdCQCwBAAAAAABAqCMDQBIBAAAAAABAoC7CABgBAAAAAABAvDSDABs
-BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECuAsL
+AIYAAAAAAAEClBEPAAkAAAAAAAECcBcKAIwCAAAAAAECKCMOABICAAAAAAEC4C4JAJgE
+AAAAAAECUEYNACQEAAAAAAECwF0IADAEAAAAAAECeGkMADYEAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AQNwFwsAjAAAAAAAAQMoIw8AEgAAAAAAAQPgLgoAmAIAAAAAAQNQRg4AJAIAAAAAAQPA
-XQkAsAQAAAAAAQOgjA0ASAQAAAAAAQOAuwgAYAQAAAAAAQPw0gwAbAQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtwFCwCDAAAAAAABAsoI
+DwAEAAAAAAABArgLCgCGAgAAAAABApQRDgAJAgAAAAABAnAXCQCMBAAAAAABAigjDQAS
+BAAAAAABAuAuCAAYBAAAAAABArw0DAAbBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA6AMbAIIAAAAA
-AAEA0AcaBIQBAAAAAAEAfBUZBIsBAAAAAAEA+CoYBJYBAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNwFwsAjAAAAAAAAQPgLgoAmAIAAAAAAQNQ
+Rg4AJAIAAAAAAQPAXQkAsAMAAAAAAQOgjA0ASAMAAAAAAQOAuwgAYAMAAAAAAQPw0gwA
+bAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAOgDGwACAAAAAAABANAHGgQEAQAA
-AAABAHwVGQQLAgAAAAABAPgqGAQWAwAAAAAAAnAXCwAMBAAAAAAAAigjDwASBAAAAAAB
-AuAuCgAYBgAAAAABAlBGDgAkBgAAAAABAsBdCQAwCAAAAAABAqCMDQBICAAAAAABAoC7
-CABgCAAAAAABAvDSDABsCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQT0AQcAgQAAAAAAAQToAwIAiwEAAAAAAQTQBwYAlgIA
-AAAAAQS4CwEAlgMAAAAAAQJwFwsAjAQAAAAAAQIoIw8AEgQAAAAAAQLgLgoAmAYAAAAA
-AQJQRg4AJAYAAAAAAQLAXQkAsAgAAAAAAQKgjA0ASAgAAAAAAQKAuwgAYAgAAAAAAQLw
-0gwAbAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-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
-KSAzLjQuMiBbRnJlZUJTRF0gMjAwNDA3MjgAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0
-YWIALnJlbC50ZXh0AC5yZWwucm9kYXRhAC5yb2RhdGEuc3RyMS4xAC5yb2RhdGEuc3Ry
-MS40AC5yZWwuZGF0YQAuYnNzAC5jb21tZW50AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAB8AAAABAAAABgAAAAAAAAA0AAAAYmwBAAAAAAAAAAAA
-BAAAAAAAAAAbAAAACQAAAAAAAAAAAAAAZDICAPAWAAAMAAAAAQAAAAQAAAAIAAAAKQAA
-AAEAAAACAAAAAAAAAKBsAQAIdwAAAAAAAAAAAAAgAAAAAAAAACUAAAAJAAAAAAAAAAAA
-AABUSQIAEBkAAAwAAAADAAAABAAAAAgAAAAxAAAAAQAAADIAAAAAAAAAqOMBAMwFAAAA
-AAAAAAAAAAEAAAABAAAAQAAAAAEAAAAyAAAAAAAAAHTpAQBnAAAAAAAAAAAAAAAEAAAA
-AQAAAFMAAAABAAAAAwAAAAAAAADg6QEA5BYAAAAAAAAAAAAAIAAAAAAAAABPAAAACQAA
-AAAAAAAAAAAAZGICALAAAAAMAAAABwAAAAQAAAAIAAAAWQAAAAgAAAADAAAAAAAAAOAA
-AgCwAQAAAAAAAAAAAAAgAAAAAAAAAF4AAAABAAAAAAAAAAAAAADgAAIAywYAAAAAAAAA
-AAAAAQAAAAAAAAARAAAAAwAAAAAAAAAAAAAAqwcCAGcAAAAAAAAAAAAAAAEAAAAAAAAA
-AQAAAAIAAAAAAAAAAAAAAEQKAgCgFwAADQAAAAgAAAAEAAAAEAAAAAkAAAADAAAAAAAA
-AAAAAADkIQIAgBAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAwABAAAAAAAAAAAAAAAAAAMAAwAAAAAAAAAAAAAAAAADAAUAAAAAAAAAAAAA
-AAAAAwAGAAAAAAAAAAAAAAAAAAMABwAAAAAAAAAAAAAAAAADAAkAAAAAAAAAAAAAAAAA
-AwAKAAEAAADQiQAAqAAAABIAAQAMAAAARHsAAAYAAAASAAEAFwAAAJDvAAC7AAAAEgAB
-ACIAAABwYQAAdAAAABIAAQAtAAAA/OUAAI8AAAASAAEAOAAAAHRXAADbAAAAEgABAEMA
-AACoMwEA5AAAABIAAQBOAAAA4AIAAKQBAAARAAcAWQAAADjzAAAjAAAAEgABAGQAAABo
-WQAAMQAAABIAAQBvAAAAlE4AADwAAAASAAEAegAAAITsAAAlAAAAEgABAIUAAABU6QAA
-EwAAABIAAQCQAAAA2N8AAAwAAAASAAEAmwAAAPjNAAC6AAAAEgABAKYAAAB81gAA5QAA
-ABIAAQCxAAAAXAgAADwAAAASAAEAvAAAAITCAACWAAAAEgABAMcAAAA0rQAAiwAAABIA
-AQDSAAAAHJsAAAsAAAASAAEA3QAAABh/AAAlAAAAEgABAOgAAAAg8gAABgAAABIAAQDz
-AAAAjM0AAAYAAAASAAEA/gAAAEjeAAAXAAAAEgABAAkBAABY/gAAewAAABIAAQAUAQAA
-DAYAAHUAAAASAAEAHwEAAAyNAAAGAAAAEgABACoBAADIJgEAdQAAABIAAQA1AQAACIIA
-AAYAAAASAAEAQAEAACibAAAPAAAAEgABAEsBAABADgAApAEAABEABwBWAQAAPOsAAHQA
-AAASAAEAYQEAAAyAAABuAAAAEgABAGwBAAC8AgAALAAAABIAAQB3AQAAuCgBAFgAAAAS
-AAEAggEAAKirAAAhAAAAEgABAI0BAAAAAAAAAAAAABAAAACuAQAAiF4AAEEAAAASAAEA
-uQEAAPTEAACWAAAAEgABAMQBAABYYAAAJAAAABIAAQDPAQAA6JIAAEgAAAASAAEA2gEA
-AByWAAB4AAAAEgABAOUBAADIxQAAOQAAABIAAQDwAQAAEIIAAGEAAAASAAEA+wEAAMhd
-AAAzAAAAEgABAAYCAACIewAAOQAAABIAAQARAgAAZJgAAEoAAAASAAEAHAIAALDrAAAg
-AAAAEgABACcCAAC86gAAYAAAABIAAQAyAgAA6P4AADcAAAASAAEAPQIAALjOAABXAAAA
-EgABAEgCAABgWQAABgAAABIAAQBTAgAA0OsAAHgAAAASAAEAXgIAAAhQAADIBQAAEgAB
-AGkCAAAIlwAAHgEAABIAAQB0AgAAqOcAACYAAAASAAEAfwIAAGgCAABTAAAAEgABAIoC
-AAAc6wAAIAAAABIAAQCVAgAAvBcBAAIBAAASAAEAoAIAABjyAAAGAAAAEgABAKsCAABg
-3QAALAAAABIAAQC2AgAAnM8AAPEAAAASAAEAwQIAAABgAAAZAAAAEgABAMwCAABIjQAA
-mwAAABIAAQDXAgAAvJEAAHsAAAASAAEA4gIAAKR6AAAhAAAAEgABAO0CAABMHAEAiAAA
-ABIAAQD4AgAAhHAAAPIBAAASAAEAAwMAAKhiAAABAAAAEgABAA4DAADUHAEASAAAABIA
-AQAZAwAA4HwAADUCAAASAAEAJAMAABgBAABQAQAAEgABADMDAACsCQEA5gIAABIAAQA+
-AwAAKPIAAIcAAAASAAEASQMAANyWAAARAAAAEgABAFQDAAAUGwEAOAEAABIAAQBfAwAA
-4O0AAM4AAAASAAEAagMAALzyAAAPAAAAEgABAHUDAAAAlAAADgAAABIAAQCAAwAABMYA
-AN8AAAASAAEAiwMAAIzFAAA5AAAAEgABAJYDAAAIpwAAUwAAABIAAQChAwAA0FUAABAA
-AAASAAEArAMAABxgAAA7AAAAEgABALcDAADoAgAAKAEAABIAAQDNAwAAIAMBACEAAAAS
-AAEA2AMAAHSCAACWAAAAEgABAOMDAABQYQAAIAAAABIAAQDuAwAA5IsAABYAAAASAAEA
-+QMAANT+AAASAAAAEgABAAQEAACgswAAKgAAABIAAQAPBAAAnOEAAIIDAAASAAEAGgQA
-ACjfAAALAAAAEgABACUEAAA4WgAAiAAAABIAAQAwBAAAxIoAADgAAAASAAEAOwQAANwq
-AQA9AAAAEgABAEYEAAAY4AAA+AAAABIAAQBRBAAAwJYAAAEAAAASAAEAXAQAACBeAABl
-AAAAEgABAGcEAAAwkQAAiwAAABIAAQByBAAAlMQAAF8AAAASAAEAfQQAAJDQAACnBQAA
-EgABAIgEAABsGgEApgAAABIAAQCTBAAANOkAAAYAAAASAAEAngQAAECQAAAhAAAAEgAB
-AKkEAADU8wAAVwAAABIAAQC0BAAAbCUBAPUAAAASAAEAvwQAAJicAABFAAAAEgABAMoE
-AAA4XQAAKQAAABIAAQDVBAAASOwAACMAAAASAAEA4AQAADjWAABBAAAAEgABAOsEAAAM
-zAAAHwAAABIAAQD2BAAAECkBAD4AAAASAAEAAQUAABDyAAAGAAAAEgABAAwFAAAAAAAA
-AAAAABAAAAAZBQAAgHwAAGAAAAASAAEAJAUAABhnAABFAAAAEgABAC8FAACwKQEACwAA
-ABIAAQA6BQAABOgAAHcAAAASAAEARQUAAGwEAADFAAAAEgABAFYFAABUHwEA8wMAABIA
-AQBhBQAAfGAAAEQAAAASAAEAbAUAALCAAACPAAAAEgABAHcFAABo6QAAEQAAABIAAQCC
-BQAAjDQBAHEAAAASAAEAjQUAAJBmAABXAAAAEgABAJgFAAAUjQAAMQAAABIAAQCjBQAA
-FKkAACABAAASAAEArgUAAMh6AAB5AAAAEgABALkFAAAAEAAApAEAABEABwDEBQAArPQA
-ADgAAAASAAEAzwUAAEzwAAAsAAAAEgABANoFAAB4igAASgAAABIAAQDlBQAA4JwAAOUA
-AAASAAEA8AUAAKzsAAA0AQAAEgABAPsFAAAMlQAAXAAAABIAAQAGBgAAyJYAABMAAAAS
-AAEAEQYAALDuAADgAAAAEgABABwGAABkHQEAAQEAABIAAQAnBgAAHCsBAFQEAAASAAEA
-MgYAACiYAAA6AAAAEgABAD0GAADEWAAACwAAABIAAQBIBgAA/IoAAOgAAAASAAEAUwYA
-ABzbAABKAAAAEgABAF4GAADs5gAAJwAAABIAAQBpBgAAMGMAACQAAAASAAEAdAYAAMBr
-AQCiAAAAEgABAH8GAAC46AAAOAAAABIAAQCKBgAAwBEAAKQBAAARAAcAlQYAAIzMAABl
-AAAAEgABAKAGAAA4mwAADwAAABIAAQCrBgAAYGcAAC0BAAASAAEAtgYAADzlAAAhAAAA
-EgABAMEGAAAU5wAAlAAAABIAAQDMBgAA1FYAAGgAAAASAAEA1wYAAMgpAQATAQAAEgAB
-AOIGAAAwbwAAFAAAABIAAQDtBgAAeGUAAA8AAAASAAEA+AYAABxfAACqAAAAEgABAAMH
-AAD4ZgAAHQAAABIAAQAOBwAAjOYAAF8AAAASAAEAGQcAALAAAQDxAQAAEgABACQHAAD0
-zAAABgAAABIAAQAvBwAA4CMBAFsAAAASAAEAOgcAAARlAAAjAAAAEgABAEUHAABgBgAA
-pAEAABEABwBQBwAAwFoAAIwBAAASAAEAWwcAAEx7AAA5AAAAEgABAGYHAADoZgAADgAA
-ABIAAQBxBwAAAAAAAAAAAAAQAAAAkQcAAJBoAAAwBgAAEgABAJwHAAAAAAAACQAAABEA
-BwCsBwAANAUAAHUAAAASAAEAvQcAADiSAAAqAAAAEgABAMgHAABk1wAAUgAAABIAAQDT
-BwAA4OcAACIAAAASAAEA3gcAAKxiAAABAAAAEgABAOkHAAC4lgAABgAAABIAAQD0BwAA
-nJoAAAsAAAASAAEA/wcAAOSNAACIAAAAEgABAAoIAACU6QAAHgEAABIAAQAVCAAA3GQA
-AAYAAAASAAEAIAgAAAAAAAAAAAAAEAAAAC8IAACQkgAAMwAAABIAAQA6CAAA/PEAABQA
-AAASAAEARQgAAOTxAAAWAAAAEgABAFAIAABo2wAAOAAAABIAAQBbCAAAwG4AAG4AAAAS
-AAEAZggAAIiVAAB0AAAAEgABAHEIAAA86QAAFwAAABIAAQB8CAAANN8AAKIAAAASAAEA
-hwgAAGzsAAAXAAAAEgABAJIIAADYkwAAJgAAABIAAQCdCAAAVPQAAFYAAAASAAEAqAgA
-ACAyAQCFAQAAEgABALMIAABsjgAAuAEAABIAAQC+CAAAAGYAABcAAAASAAEAyQgAAMCQ
-AABAAAAAEgABANQIAACsdAAAHwAAABIAAQDfCAAAfPMAAFcAAAASAAEA6ggAAGSSAAAs
-AAAAEgABAPUIAABYkwAAgAAAABIAAQAACQAAyF8AACYAAAASAAEACwkAAGAjAQAfAAAA
-EgABABYJAAAAAAAAAAAAABAAAAAlCQAAaFwAACEAAAASAAEAMAkAAKDlAABZAAAAEgAB
-ADsJAAAgCAAApAEAABEABwBGCQAAdJwAAA4AAAASAAEAUQkAAPyLAABgAAAAEgABAFwJ
-AADkAAAAMwAAABIAAQBqCQAAJF0AABIAAAASAAEAdQkAAKAEAACkAQAAEQAHAIAJAAAc
-nAAAVwAAABIAAQCLCQAAXIwAAAsAAAASAAEAlgkAAAwAAAAcAAAAEQAHAKgJAADMXgAA
-HAAAABIAAQCzCQAA5N8AADQAAAASAAEAvgkAAFhkAAB4AAAAEgABAMkJAAAwNgEADAIA
-ABIAAQDUCQAA0GQAAAsAAAASAAEA3wkAAAjzAAAtAAAAEgABAOoJAACYSQAAmQAAABIA
-AQD1CQAASCMBABYAAAASAAEAAAoAAMSbAABXAAAAEgABAAsKAACUlgAAIwAAABIAAQAW
-CgAA3PIAACkAAAASAAEAIQoAACzMAAAeAAAAEgABACwKAAAcHQEASAAAABIAAQA3CgAA
-/JUAACAAAAASAAEAQgoAAECBAAAGAAAAEgABAE0KAADECAEAsQAAABIAAQBYCgAAaIwA
-AKIAAAASAAEAYwoAAJTNAABhAAAAEgABAG4KAADgCQAApAEAABEABwB5CgAA6GUAABcA
-AAASAAEAhAoAALwpAQAKAAAAEgABAI8KAABoWAAAXAAAABIAAQCaCgAAKGUAAEMAAAAS
-AAEApQoAAMTHAAAtBAAAEgABALAKAADkYgAASgAAABIAAQC7CgAAsJoAAAYAAAASAAEA
-xgoAAKDbAAA4AQAAEgABANEKAACEnAAAEgAAABIAAQDcCgAAsEsAADcAAAASAAEA5woA
-AOTdAABiAAAAEgABAPIKAACYCgAAbwAAABIAAQD9CgAAqJoAAAYAAAASAAEACAsAABAH
-AABLAQAAEgABABMLAAA03QAAKgAAABIAAQAeCwAABGIAAHgAAAASAAEAKQsAAGxlAAAL
-AAAAEgABADQLAADklAAAKAAAABIAAQA/CwAAIBYBAHYAAAASAAEASgsAAJxdAAAsAAAA
-EgABAFULAAB4CQEANAAAABIAAQBgCwAAEAQAAFsAAAASAAEAawsAAGDlAABAAAAAEgAB
-AHYLAAAAAAAAAAAAABAAAACGCwAAzLMAAIQBAAASAAEAkQsAAFBYAAAWAAAAEgABAJwL
-AABkJgEAYgAAABIAAQCnCwAA/F0AACQAAAASAAEAsgsAABDhAACMAAAAEgABAL0LAACg
-lAAARAAAABIAAQDICwAA/MwAAI4AAAASAAEA0wsAAAAAAAAAAAAAEAAAAPMLAACEBgAA
-igAAABIAAQD+CwAAjFwAAE0AAAASAAEACQwAANxcAABAAAAAEgABABQMAAAAkQAALwAA
-ABIAAQAfDAAAnFkAAJsAAAASAAEAKgwAADCTAAAnAAAAEgABADUMAAC41wAAoQIAABIA
-AQBADAAA8JYAABUAAAASAAEASwwAAOT0AAARAQAAEgABAFYMAABMXAAAHAAAABIAAQBh
-DAAAAAAAAAAAAAAQAAAAbwwAACSQAAAcAAAAEgABAHoMAAD8CAAAUwAAABIAAQCFDAAA
-sGIAADIAAAASAAEAkAwAAKSbAAAfAAAAEgABAJsMAACwmAAALAAAABIAAQCmDAAAvG8A
-AMgAAAASAAEAsQwAABhmAAAfAAAAEgABALwMAADoXgAANAAAABIAAQDHDAAAIOUAABwA
-AAASAAEA0gwAAMzyAAAPAAAAEgABAN0MAADEkgAAJAAAABIAAQDoDAAAwN0AACQAAAAS
-AAEA8wwAALgEAQALBAAAEgABAP4MAADAYAAALgAAABIAAQAJDQAA8F8AAA4AAAASAAEA
-FA0AAMCaAABbAAAAEgABAB8NAAA8JAEALQEAABIAAQAqDQAAEJQAABkAAAASAAEANQ0A
-AEiBAADAAAAAEgABAEANAABkkAAAWQAAABIAAQBLDQAAxJYAAAEAAAASAAEAVg0AAMR7
-AAC7AAAAEgABAGENAACAEwAApAEAABEABwBsDQAAPFcAADgAAAASAAEAdw0AANBYAACO
-AAAAEgABAIINAACM3QAAMwAAABIAAQCNDQAAnCgBABsAAAASAAEAmA0AALTqAAAGAAAA
-EgABAKMNAABolAAAOAAAABIAAQCuDQAAuJoAAAYAAAASAAEAuQ0AAGAVAQDAAAAAEgAB
-AMQNAAAQmgAAjAAAABIAAQDPDQAAyJ0AACsJAAASAAEA2g0AAEAVAACkAQAAEQAHAOUN
-AABkXQAANQAAABIAAQDwDQAArAUAAF0AAAASAAEA+w0AAEAnAQBaAQAAEgABAAYOAADc
-HgEAdgAAABIAAQARDgAA5GQAAB4AAAASAAEAHA4AAIhlAAAPAAAAEgABACcOAABolQAA
-IAAAABIAAQAyDgAAsPIAAAsAAAASAAEAPQ4AAJhlAABNAAAAEgABAEgOAADkYQAAIAAA
-ABIAAQBTDgAA5IcAABAAAAASAAEAXg4AAFAJAABHAQAAEgABAGkOAAC0zgAAAQAAABIA
-AQB0DgAAQH8AAEoAAAASAAEAfw4AAHSbAAAXAAAAEgABAIoOAACgYgAABgAAABIAAQCV
-DgAAWMcAAGsAAAASAAEAoA4AAFzzAAAfAAAAEgABAKsOAAAARwEAogAAABIAAQC2DgAA
-fGIAACMAAAASAAEAwQ4AAFhPAABAAAAAEgABAMwOAAC0RQAA4gMAABIAAQDiDgAALPQA
-ACcAAAASAAEA7Q4AADhmAABXAAAAEgABAPgOAAD49QAAXggAABIAAQADDwAAYN4AAMYA
-AAASAAEADg8AAEzMAAA9AAAAEgABABkPAACMmwAAFwAAABIAAQAkDwAAjH8AAH0AAAAS
-AAEALw8AAGg4AAB8AAAAEgABADoPAABEbwAAdwAAABIAAQBFDwAASJsAACkAAAASAAEA
-UA8AAPSmAAASAAAAEgABAFsPAAA8VgAAlgAAABIAAQBmDwAADIMAAAEAAAASAAEAcQ8A
-APBgAABgAAAAEgABAHwPAACYwQAAPwAAABIAAQCHDwAAcPEAAHQAAAASAAEAkg8AAPDo
-AABEAAAAEgABAJ0PAAAslAAAOwAAABIAAQCoDwAAaIMAAHoEAAASAAEAsw8AAHB3AAC5
-AgAAEgABAL4PAAB86QAAFQAAABIAAQDJDwAA9MsAABYAAAASAAEA1A8AAHRcAQCqAAAA
-EgABAN8PAACwTAAAkAAAABIAAQDqDwAAfOgAADsAAAASAAEA9Q8AANjcAABZAAAAEgAB
-AAAQAAAg/wAAjgEAABIAAQALEAAAgCMBAB4AAAASAAEAFhAAAFzaAAC+AAAAEgABACEQ
-AAAAAAAAAAAAABAAAAAwEAAAHF0AAAYAAAASAAEAOxAAAHyAAAAzAAAAEgABAEYQAADQ
-5wAADgAAABIAAQBREAAAXKcAALgBAAASAAEAXBAAANBOAACGAAAAEgABAHUQAACgIwEA
-PQAAABIAAQAAenowMDViNTg0NgB6ejAwMmRiMTFjAHp6MDJkYmY4NzUAenowMmRiYjFi
-MgB6ejAwMmRiNDYwAHp6MGI3YjgzNjgAenowNWI4YzY1YQB6ejAwNWI0MGFkAHp6MDVi
-OTQyZWQAenowZDk0Y2QwNAB6ejAwMTlmNDcwAHp6MDJkYmU3M2QAenowMDViNjkyYgB6
-ejBiNmQyMzI1AHp6MDA1Yjg1M2QAenowMDE2ZDkyZQB6ejBjZmIxODc1AHp6MDAyZGIz
-MWMAenowMmRhYmJhYwB6ejAwMGI2YzY4AHp6MDAwYjZiZjgAenowMmRiNWJmMAB6ejAx
-NmUxZGZkAHp6MGI3MGU5OGMAenowNmUwZjZjMgB6ejAwNjdkMmIxAHp6MGI2Y2EzMjUA
-enowMDViNmNmZAB6ejAxNmUwZGZkAHp6MDAwYjZmNjgAenowMDViNDhhZAB6ejAyZGJm
-MWIyAHp6MDA1Yjg4Y2IAenowMzNlYzhiZgB6ejBkYjRjOTRkAHp6MDJkYjNiYWMAYXRo
-X2hhbF9kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUAenowMGI2ZjE2MQB6ejBkYzU4NzE4
-AHp6MGRiMDkxMGUAenowMGI2ZTI3YQB6ejAyZGJiYWIyAHp6MGI2ZDFlZmYAenowMDVi
-NjRmZAB6ejAwMGI2ZDUyAHp6MGI2YzllZmYAenowMmRiZDg3NQB6ejAyZGIzMWIyAHp6
-MDBiNzA5MjMAenowMDBiNmQxZAB6ejAwYjZkNDUwAHp6MGI2YzIzMjUAenowMmRiZGFi
-MgB6ejAwMDViNjMyAHp6MDZkZjJmNTcAenowMDE2ZGE1MAB6ejAwMDY3ZDMyAHp6MDBi
-NmQ5MjMAenowMDJkYjUxYwB6ejAxNmRhN2YwAHp6MDE2ZGNiZmUAenowMDE2ZGVjMQB6
-ejAwMTZkZjJjAHp6MGI4MTQ2MTIAenowMTZkOTkyMAB6ejAyZGIxYmFjAHp6MGRjNzg3
-MTgAenowNWI3MDFlMAB6ejAwMGI2YjEwAHp6MGI3MDllZmYAenowMTZkZjg5YgBhdGhf
-aGFsX2F0dGFjaAB6ejA2ZTE0ZGQxAHp6MDE2ZGFiMmQAenowMmRiMTM1ZAB6ejBlMGI2
-ZjIzAHp6MDE2ZTI5MWQAenowMDBiNmZlOAB6ejAwMTZkOTQ4AHp6MDE2ZTIwOWIAenow
-YjcwMWVmZgB6ejAwMGI2YzlkAHp6MDAwNWI1YTIAenowMmRiMTcwYQBhdGhfaGFsX2Nv
-bXB1dGV0eHRpbWUAenowMmRiNWJhYwB6ejAwNWI4MTNkAHp6MDBiNmM5MjMAenowYjZj
-ZTk4YwB6ejAwNWI3ZjlkAHp6MGI3MDFkMDIAenowNmUwNDYwZQB6ejAyZGI1NzYzAHp6
-MDZmMjMyY2MAenowZTA3ODM3OQB6ejAwMmRhZjYyAHp6MGI4NTQ2MTIAenowMDBiNmI5
-MAB6ejAxNmQ5ZWZhAHp6MDAyZGIyNjAAenowMTZkZTA1MQB6ejAwMDViNmIyAHp6MDVi
-N2YxMTQAenowMzQ3NDZiNAB6ejAyZGJkZGZkAHp6MDA4ZWYzMDkAenowMGI3MTc3ZAB6
-ejAwYjcwZjNkAHp6MDE2ZDg5MjAAenowMmRiMWFiMgB6ejAwMDViNjIyAHp6MDAwYjZm
-NzgAenowYjZiNDk1MAB6ejAwNWI3NjMwAGF0aF9oYWxfZnJlZQB6ejA1Yjc5YjFiAHp6
-MDBiNzA3M2QAenowYjVmY2EyNgB6ejAxNmRmYmYxAGF0aF9oYWxfbWh6MmllZWUAenow
-MTZlMTg5YgB6ejBkYzM0OTRkAHp6MDAyZGM2MGIAenowMmRiMzM1ZAB6ejBiNmM1M2E0
-AHp6MGY4ZWYzMDgAenowZGE0Y2QwNAB6ejA1Yjc0MWUwAHp6MDJkYTliYWMAenowMTZl
-YzlhZAB6ejAwYjcxNzNkAHp6MDE2ZDlkNDEAenowZGMxMmMxZgB6ejAwNWI4NGZkAHp6
-MDA1YjhhYmQAenowMGI3MDEyMwB6ejAwNWI2NTJiAHp6MDJkYjM4NzUAenowMTZlMzA5
-YgB6ejAwNWI2MGIyAHp6MDJkYjE4NzUAenowMmRiMTc2MwB6ejBiN2Y4MzY4AHp6MGRj
-MzJjMWYAenowMGI3MDE2MQB6ejAxNmQ3ZDQxAHp6MDAxNmNkMzIAenowZGI0OTEwZQB6
-ejAwNWI0OGVkAHp6MDAyZGM4MGIAenowMmRiMzNlZAB6ejAwNWI4MGZkAHp6MDJkYmZk
-ZmQAenowMTZlNjQ4YQB6ejBkYmYyYzFmAHp6MDAyZGFmZjIAenowMDViNzc5ZAB6ejAw
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgCAAAAAAED
+UEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAAAAED8NIM
+AGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAOgDGwCCAAAAAAABANAHGgSEAQAAAAABAHwVGQSLAQAAAAABAPgqGASWAQAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDoAxsAggAA
+AAAAAQDQBxoEhAEAAAAAAQB8FRkEiwIAAAAAAQD4KhgElgMAAAAAAAJwFwsADAQAAAAA
+AAIoIw8AEgQAAAAAAQLgLgoAGAYAAAAAAQJQRg4AJAYAAAAAAQLAXQkAMAgAAAAAAQKg
+jA0ASAgAAAAAAQKAuwgAYAgAAAAAAQLw0gwAbAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE+gADAIEAZAJkAgEE9AEHAIEA
+yQHJAQEE6AMCAIIB5ADkAAEE0AcGAIQCoACgAAEEuAsBAIYDjACMAAECcBcLAIwEPAA8
+AAECKCMPABIEPAA8AAEC4C4KAJgGMAAwAAECUEYOACQGMAAwAAECwF0JADAILAAsAAEC
+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
+EgAAABIAAQCuBAAAjLcAACoAAAASAAEAuQQAAKTqAACWAwAAEgABAMQEAADM5wAACwAA
+ABIAAQDPBAAA4FwAAIgAAAASAAEA2gQAAOBhAQA9AAAAEgABAOUEAABgjgAAOAAAABIA
+AQDwBAAAfGEBAGEAAAASAAEA+wQAAIxNAQA9AAAAEgABAAYFAAAg6QAA+AAAABIAAQAR
+BQAAbJoAAAEAAAASAAEAHAUAAORgAABlAAAAEgABACcFAADsyAAAFAAAABIAAQAyBQAA
+qJsAAAEAAAASAAEAPQUAAGTVAABnBwAAEgABAEgFAACwOwEApgAAABIAAQBTBQAANPIA
+AAYAAAASAAEAXgUAADSUAAAhAAAAEgABAGkFAAD4AQEAVwAAABIAAQB0BQAASH4AAAYA
+AAASAAEAfwUAAIRHAQA9AQAAEgABAIoFAAAUnwAARQAAABIAAQCVBQAA6F8AAD8AAAAS
+AAEAoAUAALj0AAAjAAAAEgABAKsFAADM3AAAYwAAABIAAQC2BQAA2M8AAB8AAAASAAEA
+wQUAAIxLAQA+AAAAEgABAMwFAAAAAAAAAAAAABAAAADZBQAAjH8AAGAAAAASAAEA5AUA
+AJDSAAAGAAAAEgABAO8FAAAsXAEABgAAABIAAQD6BQAAAGoAAEUAAAASAAEABQYAADhJ
+AQAMAAAAEgABABAGAAA0TAEACwAAABIAAQAbBgAACPEAAHcAAAASAAEAJgYAAGAFAAAI
+AgAAEgABADcGAADYQQEAqgMAABIAAQBCBgAAXGMAAEQAAAASAAEATQYAALyDAACPAAAA
+EgABAFgGAABgmgAAAQAAABIAAQBjBgAAUPIAABEAAAASAAEAbgYAAEiGAAAGAAAAEgAB
+AHkGAABQWAEAcQAAABIAAQCEBgAAeGkAAFcAAAASAAEAjwYAADRcAQAGAAAAEgABAJoG
+AABQ4gAAiQAAABIAAQClBgAADJEAAC8AAAASAAEAsAYAAECrAABcAQAAEgABALsGAADA
+fQAAhwAAABIAAQDGBgAAdCIBACkGAAASAAEA0QYAANACAQA4AAAAEgABANwGAAAI/gAA
+LAAAABIAAQDnBgAAXJ8AAOUAAAASAAEA8gYAAABhAQAyAAAAEgABAP0GAACE9gAAIwIA
+ABIAAQAIBwAARJgAAFwAAAASAAEAEwcAAHSaAAATAAAAEgABAB4HAADE+QAAwAIAABIA
+AQApBwAAoD8BAEwBAAASAAEANAcAAMxNAQA8BQAAEgABAD8HAAD0mgAAOgAAABIAAQBK
+BwAAOIYAAA4AAAASAAEAVQcAAHBbAAALAAAAEgABAGAHAACYjgAA8wAAABIAAQBrBwAA
+BPAAACcAAAASAAEAdgcAAFRmAAAkAAAAEgABAIEHAAB8ogEAugAAABIAAQCMBwAAwGUA
+AAEAAAASAAEAlwcAAHzyAAALAAAAEgABAKIHAAC48QAAOAAAABIAAQCtBwAAIFEAAKQB
+AAARAAYAuAcAAFjQAABlAAAAEgABAMMHAADkZQEATgAAABIAAQDOBwAAsFwBAEUAAAAS
+AAEA2QcAAMhkAABUAAAAEgABAOQHAAC0nQAADwAAABIAAQDvBwAASGoAAC0BAAASAAEA
++gcAANwRAQA0AAAAEgABAAUIAABY7gAAIQAAABIAAQAQCAAALPAAAIAAAAASAAEAGwgA
+AExMAQA+AQAAEgABACYIAAAccgAAFAAAABIAAQAxCAAAYGgAAA8AAAASAAEAPAgAAPRh
+AAC2AAAAEgABAEcIAADgaQAAHQAAABIAAQBSCAAApO8AAF4AAAASAAEAXQgAAMwWAQDH
+AgAAEgABAGgIAAB8ZgAAAQAAABIAAQBzCAAAHEYBAGcBAAASAAEAfggAAIBAAACkAQAA
+EQAGAIkIAACY0gAABgAAABIAAQCUCAAAaF0AAIwBAAASAAEAnwgAAORBAABTAAAAEgAB
+AKoIAABYfgAAOQAAABIAAQC1CAAA0GkAAA4AAAASAAEAwAgAAAAAAAAAAAAAEAAAAOAI
+AAB4awAAAAYAABIAAQDrCAAAAAAAAAkAAAARAAYA+wgAACRcAQAGAAAAEgABAAYJAACs
+HQEAhAAAABIAAQARCQAAnJUAACoAAAASAAEAHAkAADi3AQC6AAAAEgABACcJAAAY3gAA
+TgAAABIAAQAyCQAA5PAAACIAAAASAAEAPQkAANBlAAABAAAAEgABAEgJAAC8GgEAZgAA
+ABIAAQBTCQAAZJoAAAYAAAASAAEAXgkAACSdAAAWAAAAEgABAGkJAADYkQAAiAAAABIA
+AQB0CQAAiPIAADIAAAASAAEAfwkAAAAAAAAAAAAAEAAAAI4JAAD0lQAAMwAAABIAAQCZ
+CQAAYE8AAKQBAAARAAYApAkAALD/AAAWAAAAEgABAK8JAABg4wAAOAAAABIAAQC6CQAA
+RLAAAFEAAAASAAEAxQkAAAhyAAAUAAAAEgABANAJAADAmAAAdAAAABIAAQDbCQAA2OcA
+AAcBAAASAAEA5gkAACBKAACkAQAAEQAGAPEJAABE9gAAFwAAABIAAQD8CQAAPJcAACYA
+AAASAAEABwoAAHgCAQBWAAAAEgABABIKAAA0YQEARwAAABIAAQAdCgAAwFUBAKkBAAAS
+AAEAKAoAAGCSAAC4AQAAEgABADMKAADY0gAABgAAABIAAQA+CgAA6GgAABcAAAASAAEA
+SQoAANSUAAA7AAAAEgABAFQKAAAYtAAAHgEAABIAAQBfCgAAwHcAAB8AAAASAAEAagoA
+AKABAQBXAAAAEgABAHUKAADgSwAApAEAABEABgCACgAAyJUAACwAAAASAAEAiwoAALyW
+AACAAAAAEgABAJYKAACsYgAAJgAAABIAAQChCgAAnEUBAB8AAAASAAEArAoAAAAAAAAA
+AAAAEAAAALsKAABY0QAADAAAABIAAQDGCgAAfO4AABwAAAASAAEA0QoAABBfAAAhAAAA
+EgABANwKAADY8wAAEgAAABIAAQDnCgAAWJoAAAYAAAASAAEA8goAAEjvAABZAAAAEgAB
+AP0KAABAQgAApAEAABEABgAICwAA8J4AAA4AAAASAAEAEwsAAKSPAACwAAAAEgABAB4L
+AAAcAQAAMwAAABIAAQAsCwAAwD4AAKQBAAARAAYANwsAAJieAABXAAAAEgABAEILAABU
+kAAACwAAABIAAQBNCwAAIAAAACAAAAARAAYAXwsAAJBhAAAbAAAAEgABAGoLAADoYQAA
+DAAAABIAAQB1CwAAPFwBAHQAAAASAAEAgAsAAOzoAAAyAAAAEgABAIsLAACQZwAAaAAA
+ABIAAQCWCwAA+GcAABYAAAASAAEAoQsAAFSZAAASAAAAEgABAKwLAAAUAQEARgAAABIA
+AQC3CwAAeE0AAMkAAAASAAEAwgsAAIRFAQAWAAAAEgABAM0LAABAngAAVwAAABIAAQDY
+CwAANJoAACMAAAASAAEA4wsAAOgAAQApAAAAEgABAO4LAAAgYgEAwwMAABIAAQD5CwAA
++M8AAB4AAAASAAEABAwAAFg/AQBIAAAAEgABAA8MAAA0mQAAIAAAABIAAQAaDAAAoCgB
+ALUAAAASAAEAJQwAAGCQAACiAAAAEgABADAMAABk0QAAYQAAABIAAQA7DAAAAEQAAKQB
+AAARAAYARgwAANBoAAAXAAAAEgABAFEMAACAZgAAAQAAABIAAQBcDAAAQEwBAAoAAAAS
+AAEAZwwAAARbAABpAAAAEgABAHIMAAAQaAAAQwAAABIAAQB9DAAAxMsAAPkDAAASAAEA
+iAwAAAhmAABKAAAAEgABAJMMAAC0ZAAAEgAAABIAAQCeDAAAmOMAAEABAAASAAEAqQwA
+ANw9AQCpAAAAEgABALQMAAAAnwAAEgAAABIAAQC/DAAARE4AADcAAAASAAEAygwAAOTl
+AABiAAAAEgABANUMAACEDQAAbwAAABIAAQDgDAAAcAgAACsCAAASAAEA6wwAADTlAAAq
+AAAAEgABAPYMAAAcZQAAeAAAABIAAQABDQAAVGgAAAsAAAASAAEADA0AAFQ3AQB2AAAA
+EgABABcNAABgYAAALAAAABIAAQAiDQAA9F8BADIAAAASAAEALQ0AAFgpAQA0AAAAEgAB
+ADgNAACEPwAALAAAABIAAQBDDQAABAUAAFoAAAASAAEATg0AAAzvAAA7AAAAEgABAFkN
+AAAAAAAAAAAAABAAAABpDQAAuLcAAIQBAAASAAEAdA0AAOxaAAAWAAAAEgABAH8NAADE
+SAEAdAAAABIAAQCKDQAAwGAAACQAAAASAAEAlQ0AABjqAACMAAAAEgABAKANAAAAmAAA
+RAAAABIAAQCrDQAAwNAAAI4AAAASAAEAtg0AAAAAAAAAAAAAEAAAANYNAABoYAEAmAAA
+ABIAAQDhDQAA5AcAAIoAAAASAAEA7A0AAFRfAABNAAAAEgABAPcNAACkXwAAOwAAABIA
+AQACDgAAEJUAAC8AAAASAAEADQ4AAERcAACbAAAAEgABABgOAACUlgAAJwAAABIAAQAj
+DgAAaN4AAKcDAAASAAEALg4AAJyaAAAVAAAAEgABADkOAAAIAwEAOwEAABIAAQBEDgAA
+uGUAAAYAAAASAAEATw4AAPReAAAcAAAAEgABAFoOAADgYQAABgAAABIAAQBlDgAAAAAA
+AAAAAAAQAAAAcw4AABiUAAAcAAAAEgABAH4OAACACwAAuwAAABIAAQCJDgAA1GUAADIA
+AAASAAEAlA4AACCeAAAfAAAAEgABAJ8OAAB8mwAALAAAABIAAQCqDgAApHIAAMgAAAAS
+AAEAtQ4AAABpAAAfAAAAEgABAMAOAAC8XgEAOAEAABIAAQDLDgAArGEAADQAAAASAAEA
+1g4AADzuAAAcAAAAEgABAOEOAADYAAEADwAAABIAAQDsDgAAdBEBAGcAAAASAAEA9w4A
+ACiWAAAkAAAAEgABAAIPAADA5QAAJAAAABIAAQANDwAAMB4BAEMEAAASAAEAGA8AADCG
+AAAGAAAAEgABACMPAADUYgAADgAAABIAAQAuDwAAPJ0AAFsAAAASAAEAOQ8AAHhmAAAB
+AAAAEgABAEQPAAB0lwAAGQAAABIAAQBPDwAATIQAAMAAAAASAAEAWg8AAHiUAABZAAAA
+EgABAGUPAABwmgAAAQAAABIAAQBwDwAA0H4AALsAAAASAAEAew8AAOBSAACkAQAAEQAG
+AIYPAABMXwAABgAAABIAAQCRDwAAcJQAAAYAAAASAAEAnA8AAMRZAAA4AAAAEgABAKcP
+AAB8WwAAjgAAABIAAQCyDwAAjOUAADMAAAASAAEAvQ8AAPQNAABZAAAAEgABAMgPAAAY
+SwEAGwAAABIAAQDTDwAAvPIAAAYAAAASAAEA3g8AAMiXAAA4AAAAEgABAOkPAACUNgEA
+wAAAABIAAQD0DwAAvJwAAGgAAAASAAEA/w8AAESgAADbCAAAEgABAAoQAACgVAAApAEA
+ABEABgAVEAAALOIAACMAAAASAAEAIBAAAChgAAA1AAAAEgABACsQAABoBwAAMgAAABIA
+AQA2EAAANF8AABcAAAASAAEAQRAAAFCGAAABAAAAEgABAEwQAAC8SQEAWwEAABIAAQBX
+EAAAYEEBAHYAAAASAAEAYhAAAHBoAAAPAAAAEgABAG0QAACgmAAAIAAAABIAAQB4EAAA
+vAABAAsAAAASAAEAgxAAAIBoAABNAAAAEgABAI4QAAAMWQAARgAAABIAAQCZEAAAlGQA
+ACAAAAASAAEApBAAAEyLAAAiAAAAEgABAK8QAAA8DAAARwEAABIAAQC6EAAAhNIAAAEA
+AAASAAEAxRAAAEyCAABKAAAAEgABANAQAACsmwAAAQAAABIAAQDbEAAA8J0AABcAAAAS
+AAEA5hAAAMRlAAAGAAAAEgABAPEQAABYywAAawAAABIAAQD8EAAAgAEBAB8AAAASAAEA
+BxEAAMR1AQC6AAAAEgABABIRAACUZQAAIwAAABIAAQAdEQAAXE8AACcAAAASAAEAKBEA
+AExGAAApBwAAEgABAD4RAABQAgEAJwAAABIAAQBJEQAAIGkAAFcAAAASAAEAVBEAAEQE
+AQAuDQAAEgABAF8RAABg5gAAaQEAABIAAQBqEQAAGNAAAD0AAAASAAEAdREAAAieAAAX
+AAAAEgABAIARAACI0gAABgAAABIAAQCLEQAAmIIAAH0AAAASAAEAlhEAAAg/AAB8AAAA
+EgABAKERAAAUhQAADAAAABIAAQCsEQAAMHIAAHMAAAASAAEAtxEAAMSdAAApAAAAEgAB
+AMIRAAAgqQAAEgAAABIAAQDNEQAAVFkAAG0AAAASAAEA2BEAAByGAAABAAAAEgABAOMR
+AACgYwAAYAAAABIAAQDuEQAAeMUAAD8AAAASAAEA+REAAEj/AABoAAAAEgABAAQSAADw
+8QAARAAAABIAAQAPEgAAkJcAADcAAAASAAEAGhIAAKyGAACeBAAAEgABACUSAACEegAA
+uQIAABIAAQAwEgAAZPIAABUAAAASAAEAOxIAAMDPAAAWAAAAEgABAEYSAABcjwEAwgAA
+ABIAAQBREgAAgPEAADcAAAASAAEAXBIAANjkAABZAAAAEgABAGcSAACcFAEALgIAABIA
+AQByEgAAvEUBAB4AAAASAAEAfRIAAJiNAABGAAAAEgABAIgSAADc4gAAgwAAABIAAQCT
+EgAA4F8AAAYAAAASAAEAnhIAALSaAAALAAAAEgABAKkSAACIgwAAMwAAABIAAQC0EgAA
+1PAAAA4AAAASAAEAvxIAAARaAQAgAgAAEgABAMoSAAC4MQEA4wAAABIAAQDVEgAAiKkA
+ALgBAAASAAEA4BIAAIBBAABhAAAAEgABAPkSAADcRQEAPQAAABIAAQAAenowMDViNTg0
+NgB6ejBkYzE5OGRlAHp6MDAyZGIxMWMAenowMmRiZjg3NQB6ejA1YjYzYzY0AHp6MDJk
+YmIxYjIAenowMmRiMjA1MwB6ejAwMmRiYTQyAHp6MGZiYjFlM2YAenowYjc5ZWE5NAB6
+ejA1YjhjNjVhAHp6MDAxNmQ1NGQAenowMDViNDBhZAB6ejA1Yjk0MmVkAHp6MGQ4ZGM2
+MmMAenowMDE5ZjQ3MAB6ejAyZGQ5NDJkAHp6MDJkYmU3M2QAenowMDViNjkyYgB6ejBi
+NmQyMzI1AHp6MDA1Yjg1M2QAenowMDE2ZDkyZQB6ejBjZmIxODc1AHp6MDAyZGIzMWMA
+enowMmRhYmJhYwB6ejAyZGJjODUxAHp6MDAwYjZjNjgAenowMDBiNmJmOAB6ejAwYjZj
+ZjVlAHp6MDE2ZTFkZmQAenowYjZmNTBiOAB6ejA2ZTBhNGZlAHp6MDA2N2QyYjEAenow
+YjZjYTMyNQB6ejAwNWI2Y2ZkAHp6MDE2ZTBkZmQAenowMDBiNmY2OABhdGhfaGFsX3By
+b2Nlc3Nfbm9pc2VmbG9vcgB6ejAwNWI0OGFkAHp6MDJkYmYxYjIAenowMDViODhjYgB6
+ejAzM2VjOGJmAHp6MGRiNDI1YzUAYXRoX2hhbF9kbWFfYmVhY29uX3Jlc3BvbnNlX3Rp
+bWUAenowMGI2ZjE2MQB6ejA2ZTAwYjhhAHp6MDJkYmZjMWQAenowZGM0ZTM5MAB6ejBk
+YWZlZDg2AHp6MDBiNmUyN2EAenowMmRiYmFiMgB6ejBiNmQxZWZmAHp6MDE2ZDkwZGQA
+enowMmRiZTg1MQB6ejAwNWI2NGZkAHp6MDAwYjZkNTIAenowYjZjOWVmZgB6ejAxNmUw
+MGRkAHp6MDBiNmU4MjIAenowMmRiZDg3NQB6ejAyZGIzMWIyAHp6MDBiNzA5MjMAenow
+MGI2ZDQ1MAB6ejAwMGI2ZDFkAHp6MGI2YzIzMjUAenowMmRiZGFiMgB6ejAwMDViNjMy
+AHp6MDZkZWRkOTMAenowMDE2ZGE1MAB6ejAwMDY3ZDMyAHp6MDBiNmQ5MjMAenowMDJk
+YjUxYwB6ejAxNmRjYmZlAHp6MDBiNzAxNDUAenowMDE2ZGVjMQB6ejAwMTZkZjJjAHp6
+MGI3ZmFkM2UAenowMTZkOTkyMAB6ejAyZGIxYmFjAHp6MGRjNmUzOTAAenowNWI3MDFl
+MAB6ejAwMGI2YjEwAHp6MGI3MDllZmYAenowMTZkZjg5YgBhdGhfaGFsX2F0dGFjaAB6
+ejA2ZTBmYzBkAHp6MDE2ZGFiMmQAenowMmRiMTM1ZAB6ejBlMDQ2ODRiAHp6MDE2ZTI5
+MWQAenowMDBiNmZlOAB6ejAwY2ZiM2UwAHp6MDAxNmQ5NDgAenowMTZlMjA5YgB6ejBi
+NzAxZWZmAHp6MDAwYjZjOWQAenowMDA1YjVhMgB6ejAyZGIxNzBhAGF0aF9oYWxfY29t
+cHV0ZXR4dGltZQB6ejAyZGI1YmFjAHp6MDA1YjgxM2QAenowMGI2YzkyMwB6ejBiNmI1
+MGI4AHp6MDA1YjdmOWQAenowYjcwMWQwMgB6ejA2ZGZmNDRhAHp6MDJkYjU3NjMAenow
+NmVlYWY2MAB6ejAxNmUzMThjAHp6MGUwMDdjYTEAenowMDJkYWQxZAB6ejAwMmRhZjYy
+AHp6MGI4M2FkM2UAenowMDBiNmI5MAB6ejAxNmQ5ZWZhAHp6MDE2ZGUwNTEAenowMDJk
+YWIxZAB6ejAwMDViNmIyAHp6MDViN2YxMTQAenowNGFlMDMxZgB6ejAyZGJkZGZkAHp6
+MDA1NDdmZWQAenowMGI2YmY1ZQB6ejAwYjcxNzdkAHp6MDBiNzBmM2QAenowMTZkODky
+MAB6ejAyZGIxYWIyAHp6MDAwNWI2MjIAenowMDBiNmY3OAB6ejBiNjliMDdjAGF0aF9o
+YWxfZnJlZQB6ejA1Yjc5YjFiAHp6MGRjMzk4ZGUAenowNWI2YmM2NAB6ejAwYjcwNzNk
+AHp6MDJkYmViYmQAenowYjVlMzE1MgB6ejAxNmRmYmYxAGF0aF9oYWxfbWh6MmllZWUA
+enowMTZlMTg5YgB6ejBkYzJhNWM1AHp6MDAyZGM2MGIAenowNmRmMGI4YQB6ejAyZGIz
+MzVkAHp6MDBiNmUwYjIAenowYjZjNTNhNAB6ejBmNTRkMWIwAHp6MDJkYjBlZTIAenow
+YjZmZDM2MwB6ejBkOWRjNjJjAHp6MDViNzQxZTAAenowMmRhOWJhYwB6ejBkYzIxZDNh
+AHp6MDBiNzE3M2QAenowMTZkOWQ0MQB6ejAwNWI4NGZkAHp6MDE2ZGUxMWQAenowMDVi
+OGFiZAB6ejAwYjcwMTIzAHp6MDA1YjY1MmIAenowMmRiMzg3NQB6ejAxNmUzMDliAHp6
+MDA1YjYwYjIAenowMmRiMTg3NQB6ejAwMmRiODQyAHp6MDJkYjE3NjMAenowYjdkZWE5
+NAB6ejAwYjcwMTYxAHp6MDE2ZDdkNDEAenowMDE2Y2QzMgB6ejA2ZGUwYjhhAHp6MDZk
+OWRkOTMAenowZGIzZWQ4NgB6ejAwNWI0OGVkAHp6MDAyZGM4MGIAenowMDJkYmM0MgB6
+ejAwYjZmMDIyAHp6MDJkYmE4NTEAenowMmRiMzNlZAB6ejAwNWI4MGZkAHp6MDA1Yjdm
+MmUAenowMmRiZmRmZAB6ejAxNmU2NDhhAHp6MDAyZGFmZjIAenowMDViNzc5ZAB6ejAw
MGI2ZWU4AHp6MDE2ZTQ0OGEAenowMGI2ZjZiYwB6ejAxNmRhOTIwAHp6MDViNzgxZTAA
-enowZTI3M2E0ZAB6ejAwMmRjYTBiAHp6MDJkYjFiZjAAenowMDViNDRhZAB6ejA2ZGU0
-NjBlAHp6MGI2ZjllZmYAenowMGI2YzZiYwBhdGhfaGFsX2FkZGl0aW9uYWxfc3diYV9i
-YWNrb2ZmAHp6MDAwMmRiOTIAYXRoX2hhbF92ZXJzaW9uAGF0aF9oYWxfaWVlZTJtaHoA
-enowMmRiNzlhZQB6ejBiNmNmMDA5AHp6MDAxNmUxMmMAenowMDE2ZDllNAB6ejAwNWI1
-Y2IyAHp6MDE2ZGEyNTEAenowNmZhMzJjYwB6ejA2ZTAyZjU3AHp6MDA1YjZlMzAAYXRo
-X2hhbF9tYWxsb2MAenowMDBiNmRkMgB6ejA1YjZjYmQ1AHp6MDE2ZGIyNTEAenowZTE3
-ODM3OQB6ejAxNmRkMDUxAHp6MDJkYmQxYjIAenowZGE5YzRmNgB6ejAyZGMxNzYzAHp6
-MDE2ZGYwNTEAenowMDE2ZDk1MAB6ejAwYjcwNmJjAHp6MDAxNmQ4NzIAenowNmRmNDYw
-ZQB6ejA1YjhjMmVkAHp6MDZmZjE3ZTcAenowYjZmOWQwMgB6ejBkNGVmMzA4AHp6MDE2
-ZGJiZmUAenowMTZlNTQ4YQB6ejAwMTZkODUwAHp6MDAwYjZmZjgAYXRoX2hhbF9tZW1j
-cHkAenowMmRiYmRmZAB6ejA2ZGI1ZWI2AHp6MDE2ZWI5YWQAenowMGI2Y2ViYwB6ejBk
-OWI4Yjc5AGF0aF9oYWxfcHJvYmUAenowMDJkYjA2MAB6ejAxNmVhOWFkAHp6MDAwZWYz
-MDkAenowMmRiMzc2MwBhdGhfaGFsX2J1aWxkb3B0cwB6ejAyZGFmMzVkAHp6MGRiNGNk
-MDQAenowMTZkZjI1MQB6ejAwMGI2YzEwAHp6MDE2ZDkyNTEAenowYjcyMWFlZAB6ejA2
-N2NmY2FlAHp6MDAwYjZjZjgAenowY2NlZjMwOAB6ejAyZGFmYWIyAHp6MDViOTJhZWQA
-enowMDViOGNjYgB6ejBiNmQ5ZWZmAHp6MDJkYjExYjIAenowZTE3M2E0ZAB6ejAyZGJm
-ZmIxAHp6MDJkYmY3NjMAenowMDViNjhmZAB6ejAwNWI0NGVkAHp6MGI3MTFhZWQAenow
-YjVmY2EzNAB6ejBkOGI4Yjc5AHp6MDE2ZDhiMmQAenowMTZlMDg5YgB6ejAyZGJiODc1
-AHp6MDE2ZDk3ZjAAenowYjgzODM2OAB6ejAwYjZmZWJjAHp6MGU5OTkzMTMAenowMGI2
-ZWE3YQB6ejAzM2U4ZmJmAHp6MDA1YjcyMzAAenowY2ZhNTg3NQB6ejAyZGI5OWFlAHp6
-MDJkYjlhYjIAenowMDBiNmJlOAB6ejBkOTljNGY2AHp6MGRlZDhhNTcAenowMTZkYWJm
-ZQB6ejBiNzA5ZDAyAHp6MDE5ZjNhMDEAenowNzA3MTdlNwBhdGhfaGFsX21lbXplcm8A
-enowNmUwNGRkMQB6ejBiNjhlOThjAHp6MDE2ZTJkZmQAenowMDBiNmQyMgB6ejA3MDIz
-MmNjAHp6MGRjNTQ5NGQAenowMGI3MGY3ZABhdGhfaGFsX3N3X2JlYWNvbl9yZXNwb25z
-ZV90aW1lAHp6MDlmNjlkMmUAenowMDViNjU3YQB6ejA2ZjcxN2U3AHp6MDZkYTVlYjYA
-enowYjdkNDYxMgB6ejAwYjZmOTYxAHp6MGI2YjBjOTAAenowMmRiZDM1ZAB6ejAwNWI4
-OGZkAHp6MDJkYWZkZmQAYXRoX2hhbF9kZWxheQB6ejAyZGIxZGZkAHp6MDY3ZDJmNDEA
-enowMmRhZjg3NQB6ejBiODA3NzQxAHp6MDE2ZDhkNDEAenowMDJkYWU5MgB6ejBiN2M3
-NzQxAHp6MDJkYmIzNWQAenowMmRiM2RmZAB6ejAyZGI1M2VkAHp6MDAwYjZkYTIAenow
-MDBiNmUyMgB6ejA1YjgwMDQxAHp6MGQ4OWM0ZjYAenowMDE2ZDg0OAB6ejAxNmQ5YjJk
-AHp6MGUzNzNhNGQAenowMDE2ZTAyYwB6ejAwYjcwNzdkAHp6MDA1YjY5N2EAenowMDE2
-ZGFlNAB6ejAxNmUxMDliAHp6MDA1YjRhMmQAenowZGY3ODM3OQB6ejAyZGJkNzYzAHp6
-MDAwYjZlNTIAenowNWI2YzZkYgB6ejBjYTVmMzI5AHp6MGRiMjkxMGUAenowMmRiM2Jm
-MAB6ejA2ZDc4YTRjAHp6MDE2ZTAyNTEAenowMDAyZGJiMgB6ejAwMmRkODZkAHp6MDJk
-YjU5YWUAenowMDY3ZDIyMQB6ejAwNWI4OTNkAHp6MDViODFiMWIAenowMTZkODdmMAB6
-ejAyZGIxM2VkAHp6MDBiNmQxMjMAenowMDBiNmNlOAB6ejA1YjhhYWVkAHp6MDJkYWYx
-YjIAenowMDA1YjVlMgB6ejAzM2ViZmJmAHp6MDViNjg2ZGIAenowMDBiNmVmOAB6ejBi
-NzE5YWVkAHp6MDA1YjU4YjIAenowNWI3ZGIxYgB6ejBiODQ3NzQxAHp6MDAxNmQ3MzIA
-enowMmRhZGFiMgB6ejBmNGRlMzA3AGF0aF9oYWxfaW5pdF9jaGFubmVscwB6ejAwYjZk
-NmJjAHp6MGM0ZWYzMDgAenowMDAyZGJkMgB6ejBkYWI4Yjc5AHp6MDE2ZTBiODcAenow
-NWI5MDJlZAB6ejBkYzM4NzE4AHp6MGFhMmVlYzEAenowMDBiNmMxZAB6ejA1YjhlYWVk
-AHp6MDA1YjdiOWQAenowMDViNTQ0NgB6ejA1YjY0NmRiAHp6MDBiNmY5MjMAenowZGRk
-OGE1NwB6ejAxNmUxMjUxAHp6MGRjNzQ5NGQAenowMmRiMzcwYQB6ejAwMDViNjcyAHp6
-MDZkZjRkZDEAenowMmRiZjM1ZAB6ejAwMGI2Yzc4AHp6MDAxNmQ4MzIAenowM2U5NzM1
-MwB6ejAyZGI1NzBhAHp6MDA1YjZkN2EAenowMDJkYjI5MgB6ejAwNWI5MGNiAHp6MDA1
-YjVjNDYAYXRoX2hhbF9wcmludGYAenowNmQ5NWViNgB6ejAxNmRmYjg3AHp6MDAxNmRh
-NDgAenowMDJkYjA5MgBhdGhfaGFsX2dldHdpcmVsZXNzbW9kZXMAenowMTZlMWI4NwB5
-AAAAAQMAAJEAAAABAwAAsAAAAAEDAAC/AAAAAQMAAMUAAAABAwAAzQAAAAEDAADVAAAA
-AQMAAM0BAAACbQAA5AEAAAJoAQD8AQAAAj0AAJ4CAAACHQEA4AYAAAJcAAD2BgAAAlwA
-ADQHAAABAgAAHwsAAAECAAAyCwAAAQIAANMOAAACvgAAmhMAAAIKAQDgHwAAAgoBAOEq
-AAABAgAA8yoAAAECAAAOOQAAAQIAAD45AAABAgAAmTkAAAECAADOOQAAAQIAAD46AAAB
-AgAAYDoAAAECAAByOgAAAQIAAOo6AAABAgAA9DoAAAECAAAKOwAAAQIAABQ7AAABAgAA
-OTsAAAECAABBOwAAAQIAAHE8AAABAgAAlDwAAAECAAAaPQAAAQIAAGs9AAABAgAAhj0A
-AAECAAAdPgAAAQIAACU+AAABAgAAmT4AAAECAACnPgAAAQIAAK8+AAABAgAA2D4AAAEC
-AAAZPwAAAQIAACE/AAABAgAAfT8AAAECAADRPwAAAQIAAOE/AAABAgAADUAAAAECAAAU
-QAAAAQIAAGVAAAABAgAAekAAAAECAACDQAAAAQIAAJFAAAABAgAAtEAAAAECAAC9QAAA
-AQIAAD1BAAABBQAAXkEAAAEFAABmQQAAAQUAABlCAAABAgAAIkIAAAECAABfQgAAAQIA
-AINCAAABAgAA3UIAAAECAAD0QgAAAQIAAA5DAAABAgAARUYAAAJ4AQC6RgAAAQIAAMBG
-AAABAgAADUkAAAECAAAcSQAAAQEAAK1KAAABAgAAa0wAAAK0AADkTAAAAQUAAO1MAAAB
-BQAAMU0AAAEFAADATQAAAQIAAHxPAAABAgAAH1AAAAK+AABAUAAAAQIAAEZQAAAC1AAA
-xFAAAAIjAQBCUQAAAikAAHBRAAACFAEAolEAAAIUAQDRUQAAAhQBACFSAAACFAEAXVIA
-AAIUAQAsVQAAAhQBAKZVAAACegAA2FUAAAJ6AABjVgAAASwAAHdWAAABEgEA+lYAAAId
-AQA6XAAAAmUAAGBcAAAC1AAAfFwAAALUAACtXAAAAkAAAERdAAACDgEAWF0AAAJqAAB7
-XgAAAjYBADdfAAAC1AAAqF8AAAJEAQC5XwAAAqwAAAxhAAACIQAAL2EAAAJBAQBoYQAA
-AiEAAIJhAAACIQAAuGEAAAJBAQD8YQAAAiEAABZiAAACIQAATGIAAAJBAQCXYgAAAiEA
-ANdiAAACAAEAI2MAAAIYAABMYwAAAh8BALZjAAACHQEA3WMAAAIdAQA2ZQAAAdwAAEVl
-AAABDwAAXWUAAAITAQDKZQAAAh0BAPVoAAACIwEAgWsAAAKnAAA3bAAAAQIAAGxsAAAC
-aQEAjm0AAAIdAQCybQAAAkAAAL9tAAACiAAA6G0AAAJOAAAHbgAAAnQAADpuAAACYwEA
-WW4AAAILAAB4bgAAAgIBAFRvAAAC4gAAiW8AAAIdAQClbwAAAh0BANFvAAAC4gAAJHAA
-AAIdAQBNcAAAAh0BAFlwAAAC4gAAvXAAAAIdAQDdcAAAAh0BAAdxAAACHQEAeHEAAAId
-AQCYcQAAAh0BAMVxAAACHQEA6XEAAAJAAAAVcgAAAogAAClyAAACHQEANnIAAAKIAACh
-cgAAAh0BALRyAAACQAAAL3YAAAECAACAdwAAAQIAAIp3AAAC1AAAlHcAAAECAACedwAA
-AtQAAPt3AAACKQAAI3gAAAIpAACneQAAAikAAMN5AAACKQAA3HkAAAIpAAA9egAAAuYA
-AHB6AAACKQAA7noAAAJAAAANewAAAh0BABN7AAACSQAAeXsAAAJLAQC1ewAAAv4AAC98
-AAACCgEAbnwAAAKvAACXfwAAApUAAKh/AAACNgEA2n8AAAI2AQD3fwAAAjYBAPmAAAAC
-HQEAKYEAAAJAAABfgwAAAikAAHmDAAACvgAAmoMAAAECAACggwAAAtQAABWEAAACdwEA
-V4QAAAIdAQDuhAAAAh0BACmFAAACMQEAhIUAAAIxAQDBhQAAAjEBACSGAAABAgAAaYYA
-AAJdAQCmhgAAAh0BAM6GAAACHQEACYcAAAIxAQA9hwAAAmQBAGCHAAACMQEAwYcAAAJK
-AQDshwAAAnoAAMWIAAACHQEAVYkAAALNAAAnigAAASwAADuKAAABEgEAj4oAAAJaAQCg
-igAAAh0BABWQAAACuwAAOJAAAALUAABUkAAAAtQAAJGQAAACQAAATpEAAAIxAQDIkQAA
-AigBANyRAAACMAAA65EAAALQAAAMkgAAAigBAC6SAAACvwAAKJMAAALwAABMkwAAAQIA
-AHOTAAAC1AAABJUAAALwAAAolQAAAiEAAEeVAAACQQEAgJUAAAIhAACalQAAAiEAANCV
-AAACQQEAFJYAAAIhAAAulgAAAiEAAGSWAAACQQEAr5YAAAIhAABXmAAAAgABAKOYAAAC
-GAAAzJgAAAIfAQA7mQAAAh0BAGGZAAACHQEA5ZoAAAGtAADtmgAAAfIAAPWaAAAB1wAA
-DZsAAAITAQBhmwAAAkAAAEieAAAC5gAASZ8AAAJ3AQBioAAAAikAAHKgAAACKQAAgKAA
-AAEFAACaoAAAAQUAAMWgAAABBQAA16AAAAEFAAACoQAAAQIAABWhAAABAgAALaEAAAEC
-AABBoQAAAQIAAFmhAAABAgAAXqEAAAECAAAZpAAAAgsBANOkAAACHQEA96QAAAJAAAAH
-pQAAAhoAAISlAAAC9wAAIaYAAAJrAAAxpgAAAkgAAGSmAAACjwAAg6YAAALEAACipgAA
-AjEAABinAAACPQEASKcAAAIdAQBxpwAAAj0BABKoAAACHQEAUagAAAIdAQCrqAAAAh0B
-AOCoAAACHQEA7KgAAAI9AQDaqQAAAhoAAO6pAAACHQEA+KkAAAIaAABeqgAAAh0BAHGq
-AAACQAAAqqoAAAJ/AADCqgAAAQIAAM+qAAACKQAA4KoAAAECAAAOqwAAAikAADirAAAC
-KQAASqwAAAIdAQBnrAAAAisAAFCtAAACVAEAgK0AAAECAAAjrwAAAQUAAESvAAABBQAA
-Ya8AAAEFAAApsAAAAQUAAD2wAAACKQAAWbAAAAEFAABqsAAAAikAAIewAAACKQAAmbAA
-AAEFAACqsAAAAikAAMewAAACKQAA17AAAAEFAAD5sAAAAQUAABGxAAABBQAAE7IAAAI+
-AADqtAAAAhIAAG+1AAABBgAAdLUAAAIKAQCBtQAAAQYAAIa1AAACCgEAi7UAAAEGAACj
-tQAAAQYAALK1AAABBgAAubUAAAEGAADCtQAAAQYAANC1AAABBgAA6LUAAAEGAAD/tQAA
-AQYAAAy2AAABBgAAHbYAAAEGAABBtgAAAQYAAGS2AAABBgAAcrYAAAEGAAB8tgAAAQYA
-AO22AAABBgAALrcAAAEGAACytwAAAQYAAMC3AAABBgAA5rcAAAEGAAAJuAAAAQYAACG4
-AAABBgAAJrgAAAEGAABPuAAAAQYAAFS4AAABBgAA0rgAAAEGAADfuAAAAm0BACe5AAAC
-/AAAX7sAAAECAACbvAAAAQIAAIu9AAACYgAApMEAAAECAAC6wQAAAQIAAFvDAAABAgAA
-nsMAAAECAACxwwAAAQIAANrDAAABAgAA9MMAAAECAAAWxAAAAQIAACnEAAABAgAAAMUA
-AALeAAARxQAAAvAAAE7FAAAC8AAAesUAAALwAAC5xQAAAksBAPXFAAAC/gAAi8YAAAIK
-AQDSxgAAAlgAAGvKAAABEgEAccoAAAEsAACBygAAAbEAALPMAAACWgEAxMwAAAIdAQAH
-zwAAAikAACXPAAABAgAANs8AAAECAABDzwAAAQIAAFDPAAABAgAAq88AAAK+AADVzwAA
-AQIAANvPAAAC1AAAr9AAAAJFAADP0AAAAmUBAO/QAAACcAEAadEAAAIXAACT0QAAAjoA
-AD/SAAACbwEAptIAAAJvAQDW0gAAAm8BABvTAAACbwEAatMAAAJvAQDV0wAAAQIAANrT
-AAABAgAAJdQAAAJdAQBu1AAAAh0BAHbUAAACOgAAltQAAAIdAQDL1AAAAm8BAPvUAAAC
-GQEAJtUAAAKaAABL1QAAAmwBAF7VAAACUgEActUAAAIFAQCY1QAAAm8BAPHVAAACowAA
-GdYAAAJ2AABC1gAAAmcAAGjWAAACZQEAcNYAAAJ6AABN1wAAAh0BALPaAAABLAAAx9oA
-AAESAQAz2wAAAnkBAETbAAACHQEABd0AAAJAAAA83gAAAsYAAOLhAAABAgAAuuMAAAIP
-AQAG5QAAAg8BADTlAAAC1AAAUOUAAALUAAAI5wAAAQIAAC/nAAAC1AAA2OoAAAIhAAD7
-6gAAAkEBADTrAAACIQAATusAAAIhAACE6wAAAkEBAMjrAAACIQAA4usAAAIhAAAY7AAA
-AkEBAGPsAAACIQAAe+wAAAIgAAC37AAAAhMAAOvtAAACEwAAzO4AAAECAACE7wAAAgAB
-AD/wAAACGAAAaPAAAAIfAQCb8AAAAh0BAMHwAAACHQEAafIAAAEmAABx8gAAAZwAAHjy
-AAABNAEAgfIAAAGJAACI8gAAAT8BAKHyAAACEwEA9fIAAAJAAAAk8wAAAioAACzzAAAC
-ygAAU/MAAAJ4AAB39QAAAoQAAFb2AAACZQEAc/YAAALmAAAz9wAAAlQAADv3AAACQgAA
-SPcAAAJwAQBF+AAAAQIAAFf4AAABAgAAcfgAAAIdAQCH+AAAAQIAAKL4AAABAgAAuPgA
-AAIdAQDm+AAAAlMAAAr6AAACUAAAWPoAAALvAABo+gAAAioBAAv7AAACIAAAPPwAAAId
-AQAA/QAAAoAAAF79AAACDAAAbv0AAAKoAACA/QAAAkAAAJr9AAACjgAAzf0AAAI4AADs
-/QAAAicAAAv+AAACPAAA+P4AAAJlAQBP/wAAAmUBAGcAAQACHQEAhgABAAIdAQDFAAEA
-AuYAAM4CAQACHQEA4QIBAAJAAAAEAwEAAmUBAM4DAQACXQAApAQBAAIpAADnBQEAArwA
-AKQJAQACUAAAygkBAAIKAQDbCQEAAgoBAA4KAQABAgAAywwBAAJtAQD3DAEAAhIAAIwO
-AQAC/AAAjhEBAALUAAD/EgEAAjwBAD0UAQACPAEAPBYBAAECAABMFgEAAQIAAG0WAQAB
-AgAAeRYBAAECAADzGAEAAQIAAP0YAQABAgAAgRoBAAIpAAA8GwEAAlEAAHUbAQACXAAA
-oxsBAAJRAADpGwEAAlwAACQcAQACXAAAZRwBAALGAADAHAEAAsYAAAgdAQACSwEAUB0B
-AAL+AAALHgEAAgoBAFIeAQACTQAA1yEBAAESAQDdIQEAASwAAOshAQABsQAAByQBAAJ5
-AQAYJAEAAh0BAI0kAQACxgAAUiUBAALGAADJKAEAAmYBACspAQACZgEAAyoBAAIKAQC6
-KgEAAioAAPIqAQACeAAAVisBAAECAADxLgEAAQIAABEwAQACZgEAaTABAAKTAACIMAEA
-ApMAAMYwAQACkwAA0DABAAKTAADwMAEAApMAAAoxAQACkwAAITEBAAKTAAAwMQEAAggB
-AEsxAQACkwAAXjEBAAKTAACpMQEAApMAAOoxAQACkwAA+TEBAAIIAQAUMgEAApMAAGky
-AQACkwAAczIBAAKTAAB9MgEAApMAAIoyAQACkwAAlDIBAAKTAACdMgEAAlYBAKoyAQAC
-yQAAzzIBAAKTAADnMgEAApMAAAEzAQACkwAAFzMBAAKTAAAvMwEAApMAAEYzAQACVgEA
-UzMBAALJAACNMwEAAlYBAJozAQACyQAA2zMBAAJmAQBDNQEAApMAAFw1AQACkwAAeDUB
-AAKTAACUNQEAApMAALA1AQACkwAApDYBAAJmAQDRNgEAAQIAANY2AQABBAAA3DYBAAJz
-AQANNwEAAQIAABI3AQABBAAAGDcBAAJzAQBdOAEAAQIAAG84AQABAgAAhjgBAAIdAQCi
-OAEAAQIAAKk4AQABAgAAvDgBAAIdAQDZOAEAAQIAAOI4AQABAgAA9TgBAAIdAQAiOQEA
-An8AADo5AQABAgAARzkBAAIpAABYOQEAAQIAALw5AQACKQAA6jkBAAIpAAByOgEAAQIA
-APg8AQABAgAALz0BAAJuAABCPQEAAm4AAFk9AQABAgAAcz0BAAIdAQCNPQEAAQIAAJQ9
-AQABAgAAqj0BAAIdAQDLPQEAAQIAAN09AQABAgAA9z0BAAIdAQAYPgEAAQIAACo+AQAB
-AgAARD4BAAIdAQBZPgEAAQIAAKE+AQACbgAAuD4BAAJuAADUPgEAAm4AAOk+AQACbgAA
-/j4BAAJuAAATPwEAAm4AACk/AQABAgAAQz8BAAIdAQBdPwEAAQIAAIw/AQACbgAAoT8B
-AAJuAAC5PwEAAQIAANM/AQACHQEAkUEBAAIKAQC6RAEAAjwBAJpGAQACPAEAw0YBAAJ6
-AADnRgEAAnoAABNHAQACvgAAP0cBAAK+AABeRwEAAQEAAGhHAQABAQAAckcBAAEBAAB8
-RwEAAQEAAIZHAQABAQAAkEcBAAEBAADFRwEAAQIAANdHAQABAgAA7kcBAAIdAQAKSAEA
-AQIAABFIAQABAgAAJEgBAAIdAQBBSAEAAQIAAEpIAQABAgAAXUgBAAIdAQAqSQEAAikA
-AKhJAQACKQAAtkkBAAIpAAD8SQEAAikAAApKAQACKQAAUkoBAAIpAABgSgEAAikAAM5K
-AQABAgAAEk0BAAECAAAqTQEAAQIAAElNAQABAgAAaE0BAAECAACWTQEAAm4AALBNAQAC
-bgAAy00BAAJuAAD6TQEAAm4AABhOAQACbgAANk4BAAJuAABUTgEAAm4AAHJOAQACbgAA
-kE4BAAJuAAC4TgEAAm4AANBOAQACbgAA8E4BAAJuAAAITwEAAm4AAERPAQACbgAAVU8B
-AAJuAABmTwEAAm4AAHpPAQACbgAAnk8BAAJuAACvTwEAAm4AAMBPAQACbgAA1E8BAAJu
-AADoTwEAAm4AAPpPAQABAgAAPFABAAJuAABaUAEAAm4AAGxQAQABAgAAhVABAAIdAQCd
-UAEAAQIAALdQAQACHQEAz1ABAAECAADpUAEAAh0BAAFRAQABAgAAG1EBAAIdAQA5UQEA
-AQIAAFZRAQACHQEAilMBAALUAACfUwEAAtQAAPJTAQAC1AAAJVQBAALUAAA6VAEAAtQA
-AI1UAQAC1AAAuFQBAALUAADNVAEAAtQAACBVAQAC1AAAN1wBAAJ6AABbXAEAAnoAAIdc
-AQACvgAAs1wBAAK+AADcXAEAAQEAAOZcAQABAQAA8FwBAAEBAAD6XAEAAQEAAARdAQAB
-AQAADl0BAAEBAABBXQEAAQIAAFNdAQABAgAAbV0BAAIdAQCGXQEAAQIAAI1dAQABAgAA
-o10BAAIdAQDFXQEAAQIAAM5dAQABAgAA5F0BAAIdAQCyXgEAAikAADBfAQACKQAAPl8B
-AAIpAACEXwEAAikAAJJfAQACKQAA2l8BAAIpAADoXwEAAikAAOJgAQABAgAA+mABAAEC
-AAAZYQEAAQIAADhhAQABAgAAZmEBAAJuAAB+YQEAAm4AAJBhAQABAgAAsmEBAAECAADL
-YQEAAh0BAONhAQABAgAA/WEBAAIdAQAVYgEAAQIAAC9iAQACHQEASWIBAAECAABjYgEA
-Ah0BAIBiAQABAgAAmmIBAAIdAQDeYgEAAQIAAINrAQACegAAp2sBAAJ6AADTawEAAr4A
-AP9rAQACvgAAHmwBAAEBAAAobAEAAQEAADJsAQABAQAAPGwBAAEBAABGbAEAAQEAAFBs
-AQABAQAAAAAAAAEBAAAEAAAAAQEAAAgAAAABAQAADAAAAAEBAAAQAAAAAQEAABQAAAAB
-AQAAGAAAAAEBAAAcAAAAAQEAACAAAAABAQAAJAAAAAEBAAAoAAAAAQEAACwAAAABAQAA
-MAAAAAEBAAA0AAAAAQEAADgAAAABAQAAPAAAAAEBAADkAAAAAQMAAOgAAAABAwAA/AAA
-AAEDAAAAAQAAAQMAABQBAAABAwAAGAEAAAEDAAAsAQAAAQMAADABAAABAwAARAEAAAED
-AABIAQAAAQMAAFwBAAABAwAAYAEAAAEDAAB0AQAAAQMAAHgBAAABAwAAjAEAAAEDAACQ
-AQAAAQMAAKQBAAABAwAAqAEAAAEDAAC8AQAAAQMAAMABAAABAwAA1AEAAAEDAADYAQAA
-AQMAAOwBAAABAwAA8AEAAAEDAAAEAgAAAQMAAAgCAAABAwAAHAIAAAEDAAAgAgAAAQMA
-ADQCAAABAwAAOAIAAAEDAABMAgAAAQMAAFACAAABAwAAZAIAAAEDAABoAgAAAQMAAHwC
-AAABAwAAgAIAAAEDAACUAgAAAQMAAJgCAAABAwAArAIAAAEDAACwAgAAAQMAAMQCAAAB
-AwAAyAIAAAEDAADcAgAAAQMAAOACAAABAwAA9AIAAAEDAAD4AgAAAQMAAAwDAAABAwAA
-EAMAAAEDAAAkAwAAAQMAACgDAAABAwAAPAMAAAEDAABAAwAAAQMAAFQDAAABAwAAWAMA
-AAEDAABsAwAAAQMAAHADAAABAwAAhAMAAAEDAACIAwAAAQMAAJwDAAABAwAAoAMAAAED
-AAC0AwAAAQMAALgDAAABAwAAzAMAAAEDAADQAwAAAQMAAOQDAAABAwAA6AMAAAEDAAD8
-AwAAAQMAAAAEAAABAwAAFAQAAAEDAAAYBAAAAQMAACwEAAABAwAAMAQAAAEDAABEBAAA
-AQMAAEgEAAABAwAAXAQAAAEDAABgBAAAAQMAAHQEAAABAwAAeAQAAAEDAACMBAAAAQMA
-AJAEAAABAwAApAQAAAEDAACoBAAAAQMAALwEAAABAwAAwAQAAAEDAADUBAAAAQMAANgE
-AAABAwAA7AQAAAEDAADwBAAAAQMAAAQFAAABAwAACAUAAAEDAAAcBQAAAQMAACAFAAAB
-AwAANAUAAAEDAAA4BQAAAQMAAEwFAAABAwAAUAUAAAEDAABkBQAAAQMAAGgFAAABAwAA
-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
-AAABAQAA9BYAAAECAAD4FgAAAQIAACgXAAABAgAAKBgAAAH2AAAsGAAAAVoAADAYAAAB
-sgAANBgAAAGkAAA4GAAAAcMAADwYAAABSwAAQBgAAAHOAABEGAAAAVwBAEgYAAABMwEA
-TBgAAAGvAABQGAAAATUAAFQYAAABewAAWBgAAAFOAABcGAAAARwAAGAYAAABTQEAZBgA
-AAF1AQBoGAAAASgAAGwYAAABggAAcBgAAAHuAAB0GAAAATABAHgYAAABJAAAfBgAAAEz
-AACAGAAAAV4AAIQYAAABYgEAiBgAAAEDAQCMGAAAAaUAAJAYAAABRQEAlBgAAAFIAQCY
-GAAAAfMAAJwYAAABzAAAoBgAAAEkAQCkGAAAAYUAAKgYAAABVwEArBgAAAGwAACwGAAA
-AacAALQYAAABfAAAuBgAAAGfAAC8GAAAAUwAAMAYAAABuAAAxBgAAAEgAQDIGAAAAfgA
-AMwYAAABmQAA0BgAAAEcAQDUGAAAAdUAANgYAAABFQEA3BgAAAEtAADgGAAAAaYAAOQY
-AAABQAEA6BgAAAEGAQDsGAAAAQ4BAPAYAAABNAAA9BgAAAFqAAD4GAAAASwBAPwYAAAB
-0gAAABkAAAFGAAAEGQAAAS8AAAgZAAABgQAADBkAAAEJAAAQGQAAAeAAABQZAAABJQEA
-GBkAAAFjAQAcGQAAAV8AACAZAAABCwAAJBkAAAFJAQAoGQAAAQIBACwZAAABUwEAMBkA
-AAE7AAA0GQAAARcBADgZAAABEQAAPBkAAAGuAABAGQAAAWUAAEQZAAAB4gAASBkAAAHk
-AABMGQAAAb0AAFAZAAABRAEAVBkAAAGsAABYGQAAAWEBAFwZAAABDQAAYBkAAAE1AQBk
-GQAAAaIAAGgZAAABDAEAbBkAAAH1AABwGQAAAZUAAHQZAAABNgEAeBkAAAEBAAB8GQAA
-ASsBAIAZAAABdAEAhBkAAAEUAQCMGQAAAUABAJAZAAABBgEAlBkAAAEOAQCYGQAAATQA
-AJwZAAABagAA6CUAAAEtAQDsJQAAAUoBAPAlAAABPgEA9CUAAAFgAQD4JQAAAWwAAPwl
-AAABhwAAACYAAAFiAAAEJgAAAS4AAAgmAAABVwAADCYAAAFYAAAQJgAAATIAABQmAAAB
-UAEAGCYAAAH3AAAcJgAAAWsBACAmAAABdwAAJCYAAAFaAQAoJgAAAesAACwmAAABnQAA
-MCYAAAGqAAA0JgAAAREBADgmAAABHgAAPCYAAAHxAABAJgAAARYAAEQmAAABTAEASCYA
-AAEbAABMJgAAASUAAFAmAAABngAAVCYAAAFfAQBYJgAAAU4BAFwmAAABWwEAYCYAAAEh
-AQBkJgAAAd0AAGgmAAAB6AAAbCYAAAHYAABwJgAAAfsAAHQmAAABcwAAeCYAAAGNAAB8
-JgAAAWkAAIAmAAABMgEAhCYAAAGUAACIJgAAATYAAIwmAAABIgEAkCYAAAEeAQCUJgAA
-AXAAAJgmAAABzQAAnCYAAAEYAQCgJgAAAdEAAKQmAAABtQAAqCYAAAHQAACsJgAAASgB
-ALAmAAABvwAAtCYAAAEwAAC4JgAAAVYAALwmAAAByAAAwCYAAAEvAQDEJgAAAToBAMgm
-AAABEAEAzCYAAAEZAADQJgAAAVIAANQmAAABGgEA2CYAAAGPAADcJgAAAUYBAOAmAAAB
-xAAA5CYAAAHtAADoJgAAATEAAOwmAAAB6QAA8CYAAAEiAAD0JgAAAUcAAPgmAAABhgAA
-/CYAAAHLAAAAJwAAAbsAAAQnAAABPQEACCcAAAG6AAAMJwAAAf8AABAnAAAB+QAAFCcA
-AAE7AQAYJwAAAQgAABwnAAABlgAAICcAAAFmAAAkJwAAAYwAACgnAAABYAAALCcAAAHZ
-AAAwJwAAAd4AADQnAAAB8AAAOCcAAAEBAAA8JwAAAQQBAEAnAAABFgEARCcAAAExAQBM
-JwAAAbUAAFAnAAAB0AAAVCcAAAEoAQBYJwAAAb8AAFwnAAABMAAAWDsAAAEBAABcOwAA
-AQEAAGA7AAABAQAAZDsAAAEBAABoOwAAAQEAAGw7AAABAQAAcDsAAAEBAAB0OwAAAQEA
-AMg8AAABUQAAzDwAAAF2AADQPAAAAVgBANQ8AAABYQAA2DwAAAHHAADcPAAAAakAAOA8
-AAABBwEA5DwAAAFKAADoPAAAAZIAAOw8AAABTQAA8DwAAAHsAAD0PAAAAUMBAPg8AAAB
-gAAA/DwAAAHnAAAAPQAAAdMAAAQ9AAABeQEACD0AAAFxAQAMPQAAAasAABA9AAABLgEA
-FD0AAAFyAAAYPQAAAQ0BABw9AAABIwAAID0AAAFCAQAkPQAAATgBACg9AAABRwEALD0A
-AAFVAAAwPQAAAScBADQ9AAAB6gAAOD0AAAHlAAA8PQAAARAAAEA9AAABUQEARD0AAAFx
-AABIPQAAAc8AAEw9AAABVgEAUD0AAAHJAABUPQAAAYoAAFg9AAABGwEAXD0AAAHjAABg
-PQAAAQ4AAGQ9AAABkQAAaD0AAAEKAABsPQAAAYsAAHA9AAABJgEAdD0AAAGgAAB4PQAA
-AQkBAHw9AAABmAAAgD0AAAGhAACEPQAAAQEBAIg9AAABRAAAjD0AAAEpAQCQPQAAATcB
-AJQ9AAAB/QAAmD0AAAF2AQCcPQAAAT8AAKA9AAABtwAApD0AAAGbAACoPQAAAWYBAKw9
-AAABQgAAsD0AAAGDAAC0PQAAAWoBALg9AAABOAAAvD0AAAFBAADAPQAAAScAAMQ9AAAB
-NwAAyD0AAAE8AADMPQAAAXUAANA9AAABFQAA1D0AAAFoAADYPQAAAeEAANw9AAABYwAA
-4D0AAAEPAQDkPQAAAWUBAOg9AAABwQAA7D0AAAF5AADwPQAAAUMAAPQ9AAABHQAA+D0A
-AAFyAQD8PQAAAfoAAAA+AAABwgAABD4AAAGXAAAIPgAAAR8AAAw+AAABWQEAED4AAAFk
-AAAUPgAAAcYAABg+AAABtgAAHD4AAAHFAAAgPgAAAdYAACQ+AAABbwEALD4AAAEBAQAw
-PgAAAUQAADQ+AAABKQEAOD4AAAE3AQA8PgAAAf0AAPxEAAABAQAAAEUAAAEBAAAERQAA
-AQEAAAhFAAABAQAADEUAAAEBAAAQRQAAAQEAAEBFAAABAQAAREUAAAEBAABIRQAAAQEA
-AExFAAABAQAAUEUAAAEBAABURQAAAQEAAFhFAAABAQAAXEUAAAEBAABgRQAAAQEAAGRF
-AAABAQAAaEUAAAEBAABsRQAAAQEAAHBFAAABAQAAdEUAAAEBAAB4RQAAAQEAAHxFAAAB
-AQAAgEUAAAEBAABwUQAAAQEAAHRRAAABAQAAeFEAAAEBAAB8UQAAAQEAAIBRAAABAQAA
-hFEAAAEBAACoXgAAAQEAAKxeAAABAQAAsF4AAAEBAAC0XgAAAQEAALheAAABAQAAvF4A
-AAEBAADAXgAAAQEAAMReAAABAQAAuGoAAAEBAAC8agAAAQEAAMBqAAABAQAAxGoAAAEB
-AADIagAAAQEAAMxqAAABAQAA0GoAAAEBAADUagAAAQEAAOh2AAABAQAA7HYAAAEBAADw
-dgAAAQEAAPR2AAABAQAA+HYAAAEBAAD8dgAAAQEAAAB3AAABAQAABHcAAAEBAAAMAAAA
-AQMAABAAAAABAwAAFAAAAAEDAAAYAAAAAQMAABwAAAABAwAAIAAAAAEDAAA8AQAAAQUA
-AEQBAAABBQAATAEAAAEFAABUAQAAAQUAAFwBAAABBQAAZAEAAAEFAABsAQAAAQUAAHQB
-AAABBQAAfAEAAAEFAACEAQAAAQUAAIwBAAABBQAAlAEAAAEFAACcAQAAAQUAAKQBAAAB
-BQAArAEAAAEFAAC0AQAAAQUAAA==
+enowMDBiNmYxYwB6ejAwMmRjYTBiAHp6MDA1YjQ0YWQAenowMmRhZWVlMgB6ejA2ZGRm
+NDRhAHp6MGZhYzBjOWIAenowYjZmOWVmZgB6ejAwYjZjNmJjAGF0aF9oYWxfYWRkaXRp
+b25hbF9zd2JhX2JhY2tvZmYAenowMDAyZGI5MgBhdGhfaGFsX3ZlcnNpb24AenowZGM1
+OThkZQB6ejAyZGJhYzJlAHp6MDJkYjc5YWUAenowMDE2ZTUzMgB6ejBiNmNmMDA5AHp6
+MDAxNmUxMmMAenowMDE2ZDllNAB6ejAwMDJkYWVhAHp6MDA1YjVjYjIAenowMTZkYTI1
+MQB6ejA2ZjZhZjYwAHp6MDZkZmRkOTMAYXRoX2hhbF9tYWxsb2MAenowMDBiNmRkMgB6
+ejAyZGQ5MmFkAHp6MDE2ZGIyNTEAenowZTEwN2NhMQB6ejAwYjZjNzVlAHp6MDE2ZGQw
+NTEAenowMmRiZDFiMgB6ejAyZGMxNzYzAHp6MGI2OTBkNmQAenowMTZkZjA1MQB6ejAw
+MTZkOTUwAHp6MDBiNzA2YmMAenowMGI2ZjA0ZAB6ejAwMTZkODcyAHp6MDZkZWY0NGEA
+enowMGI2ZThiMgB6ejA1YjhjMmVkAHp6MDZmYjk0N2IAenowZWJiMWUzZgB6ejBiNmY5
+ZDAyAHp6MGQxNGQxYjAAenowYjQ4MDMxZQB6ejAxNmRiYmZlAHp6MDE2ZTU0OGEAenow
+MDE2ZDg1MAB6ejAwMGI2ZmY4AGF0aF9oYWxfbWVtY3B5AHp6MDJkYmNiYmQAenowMTZk
+YTBkZAB6ejAyZGJiZGZkAHp6MDJkYjI4NTEAenowMmRiZGMxZAB6ejA2ZGIwY2YyAHp6
+MDE2ZWI5YWQAenowMGI2Y2ViYwB6ejBkOTQ4NGExAGF0aF9oYWxfcHJvYmUAenowMTZl
+YTlhZAB6ejBmZDRkMWIwAHp6MDJkYjM3NjMAYXRoX2hhbF9idWlsZG9wdHMAenowMmRh
+ZjM1ZAB6ejA2ZGRkZDkzAHp6MDBiNmYwYjIAenowZGFkYzYyYwB6ejAxNmRmMjUxAHp6
+MDE2ZDkyNTEAenowMmRiMDg1MQB6ejBiNzIxYWVkAHp6MDY3Y2ZjYWUAenowMDBiNmNm
+OAB6ejBjOTRkMWIwAHp6MDJkYWZhYjIAenowNWI5MmFlZAB6ejA1YjhjM2U0AHp6MDA1
+YjhjY2IAenowYjZkOWVmZgB6ejAyZGIxMWIyAHp6MDJkYmZmYjEAenowMmRiZjc2MwB6
+ejAwNWI2OGZkAHp6MDA1YjQ0ZWQAenowYjcxMWFlZAB6ejAwMTZkNDRkAHp6MGI1ZTMx
+NjAAenowZDg0ODRhMQB6ejAxNmQ4YjJkAHp6MDE2ZTA4OWIAenowMmRiYjg3NQB6ejAy
+ZGFlODUxAHp6MGI4MWVhOTQAenowMTZkZWMxZgB6ejAwYjZmZWJjAHp6MGU4OTQ5MDcA
+enowMGI2ZWE3YQB6ejAzM2U4ZmJmAHp6MGNmYTU4NzUAenowMmRiOTlhZQB6ejAyZGI5
+YWIyAHp6MDAwYjZiZTgAenowZGU2ODM3ZgB6ejAxNmRhYmZlAHp6MDAwYjcwMWMAenow
+YjcwOWQwMgB6ejA2N2QyNWUyAHp6MDE5ZjNhMDEAenowNzAzOTQ3YgBhdGhfaGFsX21l
+bXplcm8AenowNmRmZmMwZAB6ejBiNjc1MGI4AHp6MDE2ZTJkZmQAenowMDBiNmQyMgB6
+ejA2ZmVhZjYwAHp6MGRjNGE1YzUAenowMGI3MGY3ZABhdGhfaGFsX3N3X2JlYWNvbl9y
+ZXNwb25zZV90aW1lAHp6MDAxNmQ2NGQAenowOWY2NGI2YQB6ejAwNWI2NTdhAHp6MDZm
+Mzk0N2IAenowNmRhMGNmMgB6ejBiN2JhZDNlAHp6MDBiNmY5NjEAenowYjY5NzNiYwB6
+ejAyZGJkMzVkAHp6MDA1Yjg4ZmQAenowMmRiYmMxZAB6ejAyZGFmZGZkAHp6MDZkN2Rk
+OTMAYXRoX2hhbF9kZWxheQB6ejAyZGIxZGZkAHp6MDY3ZDJmNDEAenowMmRhZjg3NQB6
+ejBiN2VkZTZkAHp6MDE2ZDhkNDEAenowMDJkYWU5MgB6ejBiN2FkZTZkAHp6MGRhZGIw
+ZGUAenowMmRiYjM1ZAB6ejAyZGIzZGZkAHp6MDJkYjUzZWQAenowMTZkY2VhZQB6ejAw
+MGI2ZGEyAHp6MDAwYjZlMjIAenowNWI4MDA0MQB6ejAyZGFjZWUyAHp6MDAxNmQ4NDgA
+enowMTZkOWIyZAB6ejAwMmRhOTFkAHp6MDAxNmUwMmMAenowMGI3MDc3ZAB6ejAwNWI2
+OTdhAHp6MDAxNmRhZTQAenowMTZlMTA5YgB6ejAwNWI0YTJkAHp6MDE2ZGUwZGQAenow
+MTZkZjBkZAB6ejBkZjA3Y2ExAHp6MDJkYmQ3NjMAenowMDBiNmU1MgB6ejA2N2QwYzQ3
+AHp6MDViNmM2ZGIAenowYzMxNWViNQB6ejBkYjFlZDg2AHp6MDZkNDA2ZTAAenowMTZl
+MDI1MQB6ejAwMDJkYmIyAHp6MDAyZGQ4NmQAenowMDE2ZTE0ZAB6ejAyZGI1OWFlAHp6
+MDA2N2QyMjEAenowMTZkODBkZAB6ejAwYjZlMDIyAHp6MDA1Yjg5M2QAenowNWI4MWIx
+YgB6ejAyZGIxM2VkAHp6MDBiNmQxMjMAenowMDBiNmNlOAB6ejA1YjhhYWVkAHp6MGI2
+ZWQzNjMAenowMmRhZjFiMgB6ejAwMDViNWUyAHp6MDMzZWJmYmYAenowNWI2ODZkYgB6
+ejAwMGI2ZWY4AHp6MDAwYjZmOWMAenowYjcxOWFlZAB6ejAwNWI1OGIyAHp6MDViN2Ri
+MWIAenowYjgyZGU2ZAB6ejAwMTZkNzMyAHp6MDJkYWRhYjIAenowZjQ1ZTZlMwBhdGhf
+aGFsX2luaXRfY2hhbm5lbHMAenowMGI2ZDZiYwB6ejBjMTRkMWIwAHp6MDAwMmRiZDIA
+enowZGE0ODRhMQB6ejAxNmUwYjg3AHp6MDViOTAyZWQAenowNWI2N2M2NAB6ejBkYzJl
+MzkwAHp6MGE2MGQxNDUAenowMmRiYWJiZAB6ejAwMGI2YzFkAHp6MDViOGVhZWQAenow
+MDViN2I5ZAB6ejAwNWI1NDQ2AHp6MDViNjQ2ZGIAenowMGI2ZjkyMwB6ejBkZDY4Mzdm
+AHp6MDE2ZTEyNTEAenowZGM2YTVjNQB6ejAyZGIzNzBhAHp6MDAwNWI2NzIAenowNmRl
+ZmMwZAB6ejAyZGJmMzVkAHp6MDAwYjZjNzgAenowMDE2ZDgzMgB6ejAyZGI1NzBhAHp6
+MDA1YjZkN2EAenowMDJkYjI5MgB6ejAwNWI5MGNiAHp6MGI2ZjUzNjMAenowMDViNWM0
+NgB6ejA2ZDkwY2YyAHp6MDZkOGRkOTMAenowMTZkZmI4NwB6ejAwMTZkYTQ4AHp6MDAy
+ZGFmMDAAenowYjY2MzFhOAB6ejAwMmRiMDkyAGF0aF9oYWxfZ2V0d2lyZWxlc3Ntb2Rl
+cwB6ejAxNmUxYjg3AAYAAAABAwAAXwAAAAEDAACPAAAAAQMAANAAAAABAwAA3AAAAAED
+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
+BcgAAAECAAAMyQAAAgQBAB3JAAACGAEAWskAAAIYAQCGyQAAAhgBAMXJAAACfwEAAcoA
+AAIoAQCLygAAAjQBANLKAAACZQAAWM4AAAE8AQBezgAAATIAAG7OAAABzQAAf9AAAAKP
+AQCQ0AAAAkoBALvTAAACMAAA2dMAAAECAADq0wAAAQIAAPfTAAABAgAABNQAAAECAABf
+1AAAAtwAAInUAAABAgAAj9QAAAL3AAA/1QAAAQIAAEvVAAAC9wAAg9UAAAJRAACk1QAA
+ApwBACPWAAACpgEAedYAAAIcAACj1gAAAkUAAOvXAAACpQEAgNgAAAKlAQCw2AAAAqUB
+APXYAAACpQEARNkAAAKlAQCv2QAAAQIAALTZAAABAgAA/9kAAAKTAQCc2gAAAkoBAKTa
+AAACRQAAxNoAAAJKAQD72gAAAqUBACzbAAABCAEANtsAAAG3AAA/2wAAAkQBAIbbAAAC
+0wAAq9sAAAKwAADS2wAAAqMBAOXbAAAChwEABdwAAAItAQAr3AAAAqUBAIbcAAACvgAA
+rdwAAAKGAADW3AAAAnYAAPncAAACtwAAAd0AAAJGAAAO3QAAApwBAB7dAAACMQEAJt0A
+AAKJAAAB3gAAAkoBAB3iAAACtgAAPeIAAAGnAQBK4gAAAQEAAJ3iAAACtgAAIOMAAAEy
+AAAv4wAAATwBAFfjAAACmwAABeUAAAJMAAA85gAAAuQAAOrqAAABAgAA1uwAAAI5AQAi
+7gAAAjkBAFDuAAAC9wAAbO4AAAL3AACQ7gAAAvcAAK7uAAAC9wAAIPAAAAECAABH8AAA
+AvcAAK/yAAACDwAA4PIAAAInAAAD8wAAAnMBADzzAAACJwAAVvMAAAInAACM8wAAAnMB
+ANDzAAACJwAAUvQAAAInAACI9AAAAnMBANP0AAACJwAAa/UAAAJzAQBT9gAAAiYAAI/2
+AAACGAAAs/gAAAIYAACp+QAAAQIAALD5AAABAgAAv/kAAAECAADp+QAAAQIAACf8AAAC
+jwAAQfwAAAECAAB5/AAAAikBAKv8AAABAgAAwP0AAAECAADG/QAAAqkAAPz9AAACHQAA
+JP4AAAJMAQBe/gAAAkoBAIL+AAACSgEAMQABAAEtAABLAAEAAeUAAF8AAQAB8gAAaQAB
+AAG0AABxAAEAAWMBAHkAAQAB3gAAgAABAAEXAACJAAEAAXABAJAAAQAB5QAAlwABAAHy
+AACuAAEAAj4BAAEBAQACTAAAPAEBAAIxAABEAQEAAuoAAFEBAQAC6QAAdwEBAAKIAAD+
+AwEAApgAABUEAQACcwAAnQQBAAKcAQC6BAEAAg4BAB8FAQAC1wAANAUBAALqAACxBQEA
+Ag0AABwGAQACYAAAJAYBAAJOAAAxBgEAAqYBAC0HAQABAgAAPwcBAAECAABZBwEAAkoB
+AG8HAQABAgAAlgcBAAECAACsBwEAAkoBAOoHAQACJAEAVgkBAAJcAAB/CQEAAlYBAAMK
+AQACnwAAEwoBAAIXAQAjCgEAAlkBALMKAQACJgAAtgsBAAK7AADZCwEAAjQAAOYLAQAC
+XwAAmgwBAAJKAQC8DAEAAkoBAM0MAQACSgEAAg0BAAJKAQCXDQEAAlAAAOwNAQACkgAA
+Sw4BAALDAABdDgEAAkwAAGoOAQACpAAA7Q4BAAImAQBXEAEAAkQAAHIQAQACLgAAjRAB
+AAJIAADaEAEAAj0BADYRAQACSwAARxEBAAJxAQAqEgEAAg4BAEoSAQACsgEAnxIBAAJK
+AQDDEgEAArsAABMTAQACSgEAIhMBAAJcAACXEwEAAp8AAKcTAQACFwEAchQBAAKcAQDM
+FAEAApwBAIEWAQACSgEAoBYBAAJKAQDqFgEAAg4BANkYAQAC1wAA3RkBAAJKAQDwGQEA
+AkwAABEaAQACnAEA3hoBAAJqAAA0GwEAAikBAFAcAQACMAAAnB8BAAIPAABeIQEAAtEA
+AIQpAQACXAAAqikBAAI0AQC7KQEAAjQBAO4pAQABAgAA9SwBAAIWAAB9LgEAAiYBABAy
+AQABAgAAwjIBAAL3AAAzNAEAAm0BAHE1AQACbQEAczcBAAECAACDNwEAAQIAAKE3AQAB
+AgAArTcBAAECAAA2OgEAAQIAAEA6AQABAgAAxTsBAAIwAAB2PAEAAl0AAJw8AQACXQAA
+yDwBAAJdAAABPQEAAmkAAC89AQACXQAAez0BAAJpAAC2PQEAAmkAAKE+AQAC5AAA/D4B
+AALkAABEPwEAAn8BAIw/AQACKAEAg0ABAAI0AQDZQAEAAlkAAA9EAQABPAEAFUQBAAEy
+AAAjRAEAAc0AAEdGAQACsgEAWEYBAAJKAQBlRgEAArIBABJHAQACSgEAPUcBAAJKAQBH
+RwEAArIBAEVLAQACnQEAp0sBAAKdAQCFTAEAAjQBAG5NAQACMQAAok0BAAKIAAAGTgEA
+AQIAAKRRAQABAgAANFIBAAJ2AABDUgEAAosBAFZSAQAC6AAAg1IBAAKLAQCWUgEAAugA
+AMNSAQACMQAA11IBAAKLAQDqUgEAAugAAKlTAQACnQEA91MBAAKpAAAYVAEAAqkAAFlU
+AQACqQAAZlQBAAKpAACJVAEAAqkAAKhUAQACqQAAwlQBAAKpAADRVAEAAjIBAO9UAQAC
+qQAABVUBAAKpAABDVQEAAqkAAIVVAQACqQAAllUBAAIyAQC0VQEAAqkAAAxWAQACqQAA
+GVYBAAKpAAAmVgEAAqkAADNWAQACqQAAQFYBAAKpAABIVgEAAosBAFVWAQAC6AAAflYB
+AAKpAACaVgEAAqkAALxWAQACqQAA1lYBAAKpAADyVgEAAqkAAApXAQACiwEAF1cBAALo
+AABRVwEAAosBAF5XAQAC6AAAn1cBAAKdAQAOWQEAAqkAACtZAQACqQAAR1kBAAKpAABj
+WQEAAqkAAH9ZAQACqQAASloBAAITAQDLWgEAAp0BAE9cAQACpwAAbVwBAALcAACNXAEA
+Ai8BANBcAQACLwEA3lwBAAKJAAAJYAEAAjQBADxgAQACNAEATWABAAI0AQCcYAEAAi8B
+AL1gAQACiwEAymABAALoAADlYAEAAosBAPJgAQAC6AAACmEBAAKLAQAXYQEAAugAAEph
+AQACiwEAb2EBAALoAACfYQEAAosBAKxhAQAC6AAAxmEBAAIvAQBXYgEAAi8BAH1lAQAC
+NAEAmGUBAAI0AQDMZQEAAlIBAFVmAQABAgAAZ2YBAAECAAB+ZgEAAkoBAJpmAQABAgAA
+oWYBAAECAAC0ZgEAAkoBANFmAQABAgAA2mYBAAECAADtZgEAAkoBAB5nAQACkQAAOmcB
+AAECAABHZwEAAjAAAFhnAQABAgAAuGcBAAIwAADmZwEAAjAAAGZoAQABAgAAN2sBAAEC
+AABsawEAAn0AAH9rAQACfQAAlWsBAAECAACvawEAAkoBAMlrAQABAgAA0GsBAAECAADm
+awEAAkoBAANsAQABAgAADWwBAAECAAAjbAEAAkoBAEBsAQABAgAASmwBAAECAABgbAEA
+AkoBAHVsAQABAgAAwWwBAAJ9AADcbAEAAn0AAPhsAQACfQAADW0BAAJ9AAAibQEAAn0A
+ADdtAQACfQAATW0BAAECAABnbQEAAkoBAIFtAQABAgAAsG0BAAJ9AADFbQEAAn0AAAxu
+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
+AABsAAAAAQEAAHAAAAABAQAAdAAAAAEBAAB4AAAAAQEAAMgBAAABHwEAzAEAAAFnAADQ
+AQAAAc4AANQBAAABvwAA2AEAAAGVAQDcAQAAAeIAAOABAAABVwAA5AEAAAHwAADoAQAA
+ARwBAOwBAAABXQEA8AEAAAHFAAD0AQAAAQsAAPgBAAABCAAA/AEAAAFaAQAAAgAAAasA
+AAQCAAABkgEACAIAAAFiAQAMAgAAAcsAABACAAABPwAAFAIAAAGKAAAYAgAAAVoAABwC
+AAABIgAAIAIAAAGBAQAkAgAAAawBACgCAAABLwAALAIAAAGUAAAwAgAAAV8BADQCAAAB
+KgAAOAIAAAE9AAA8AgAAAWsAAEACAAABmQEARAIAAAGUAQBIAgAAASwBAEwCAAABwAAA
+UAIAAAF4AQBUAgAAAXsBAFgCAAABGwEAXAIAAAHtAABgAgAAAVEBAGQCAAABmQAAaAIA
+AAGMAQBsAgAAAcwAAHACAAABwgAAdAIAAAGNAAB4AgAAAboAAHwCAAABWAAAgAIAAAHW
+AACEAgAAAU0BAIgCAAABIQEAjAIAAAGvAACQAgAAAUgBAJQCAAAB+gAAmAIAAAF0AQCc
+AgAAAWQBAKACAAABQAEApAIAAAEzAACoAgAAAcEAAKwCAAABcgEAsAIAAAEuAQC0AgAA
+ATgBALgCAAABPgAAvAIAAAF5AADAAgAAAVsBAMQCAAAB9QAAyAIAAAFSAADMAgAAATcA
+ANACAAABkwAA1AIAAAEJAADYAgAAAQYBANwCAAABUwEA4AIAAAFJAQDkAgAAAQcBAOgC
+AAABmgEA7AIAAAFsAADwAgAAAQwAAPQCAAABfQEA+AIAAAG4AAD8AgAAASIBAAADAAAB
+KwEABAMAAAGIAQAIAwAAAUcBAAwDAAABsQAAEAMAAAFHAAAUAwAAAUIBABgDAAABFQAA
+HAMAAAHJAAAgAwAAAXIAACQDAAABCgEAKAMAAAELAQAsAwAAAWkBADADAAABfAEANAMA
+AAGYAQA4AwAAARAAADwDAAABZgEAQAMAAAE2AQBEAwAAAR4BAEgDAAABrAAATAMAAAFn
+AQBQAwAAAQEAAFQDAAABqgEAWAMAAAE/AQBgAwAAAXIBAGQDAAABLgEAaAMAAAE4AQBs
+AwAAAT4AAHADAAABeQAAdAMAAAEBAACoGAAAAVwBAKwYAAABfgEAsBgAAAFvAQC0GAAA
+AZcBALgYAAABZgAAvBgAAAF6AADAGAAAAZ0AAMQYAAABbwAAyBgAAAESAADMGAAAAXsA
+ANAYAAABggEA1BgAAAGRAQDYGAAAAYsAANwYAAAByAAA4BgAAAEOAADkGAAAATYAAOgY
+AAABZAAA7BgAAAFlAADwGAAAAToAAPQYAAABhQEA+BgAAAEgAQD8GAAAAaIBAAAZAAAB
+hwAABBkAAAGPAQAIGQAAARQBAAwZAAABtQAAEBkAAAE7AQAUGQAAASQAABgZAAABGQEA
+HBkAAAEbAAAgGQAAAYABACQZAAAB+AAAKBkAAAEhAAAsGQAAASsAADAZAAABuQAANBkA
+AAGWAQA4GQAAAYMBADwZAAABkAEAQBkAAAFOAQBEGQAAAQMBAEgZAAABEAEATBkAAAH/
+AABQGQAAASUBAFQZAAABgwAAWBkAAAGiAABcGQAAAXgAAGAZAAABYQEAZBkAAAGqAABo
+GQAAAUIAAGwZAAABTwEAcBkAAAFLAQB0GQAAAX8AAHgZAAABOwAAfBkAAAFlAQCAGQAA
+Ae4AAIQZAAABQwEAiBkAAAH0AACMGQAAAdIAAJAZAAAB8wAAlBkAAAFXAQCYGQAAAd0A
+AJwZAAABOAAAoBkAAAFjAACkGQAAAecAAKgZAAABXgEArBkAAAFsAQCwGQAAAToBALQZ
+AAABHgAAuBkAAAFeAAC8GQAAAUUBAMAZAAABqwEAxBkAAAFKAADIGQAAAaUAAMwZAAAB
+eQEA0BkAAAHjAADUGQAAARYBANgZAAABIAAA3BkAAAEMAQDgGQAAATkAAOQZAAABEQEA
+6BkAAAH8AADsGQAAAZUAAPAZAAABKAAA9BkAAAFTAAD4GQAAAZwAAPwZAAAB6wAAABoA
+AAHaAAAEGgAAAW4BAAgaAAAB2QAADBoAAAFpAQAQGgAAAagBABQaAAABBwAAGBoAAAGt
+AAAcGgAAAXQAACAaAAABbQAAJBoAAAEAAQAoGgAAAQQBACwaAAABGAEAMBoAAAEBAAA0
+GgAAAUEBADgaAAABYAEAQBoAAAHSAABEGgAAAfMAAEgaAAABVwEATBoAAAHdAABQGgAA
+ATgAAFQaAAABAQAA9DYAAAEBAAD4NgAAAQEAAPw2AAABAQAAADcAAAEBAAAENwAAAQEA
+AAg3AAABAQAADDcAAAEBAAAQNwAAAQEAAOg4AAABXQAA7DgAAAGGAADwOAAAAY0BAPQ4
+AAABbgAA+DgAAAFGAAD8OAAAAeYAAAA5AAABxAAABDkAAAEwAQAIOQAAAT0BAAw5AAAB
+dQAAEDkAAAEvAQAUOQAAAYwAABg5AAAB0AAAHDkAAAGaAAAgOQAAAbYAACQ5AAABVgAA
+KDkAAAGoAAAsOQAAAVkAADA5AAABFQEANDkAAAF3AQA4OQAAAZIAADw5AAABDwEAQDkA
+AAH2AABEOQAAAbIBAEg5AAABpwEATDkAAAHGAABQOQAAAYIAAFQ5AAABNwEAWDkAAAEp
+AABcOQAAAXYBAGA5AAABagEAZDkAAAGOAABoOQAAAXoBAGw5AAABYQAAcDkAAAFVAQB0
+OQAAARIBAHg5AAABDQEAfDkAAAEUAACAOQAAAYYBAIQ5AAABgAAAiDkAAAHxAACMOQAA
+AYsBAJA5AAAB6AAAlDkAAAGgAACYOQAAAUYBAJw5AAABrgEAoDkAAAERAACkOQAAAacA
+AKg5AAABCgAArDkAAAGhAACwOQAAAVQBALQ5AAABvAAAuDkAAAH5AAC8OQAAAUAAAMA5
+AAABMwEAxDkAAAGuAADIOQAAAb0AAMw5AAABKgEA0DkAAAFPAADUOQAAAVgBANg5AAAB
+aAEA3DkAAAEnAQDgOQAAAa0BAOQ5AAABSwAA6DkAAAHVAADsOQAAAbMAAPA5AAABnQEA
+9DkAAAFOAAD4OQAAAZYAAPw5AAABoQEAADoAAAGyAAAEOgAAAdsAAAg6AAABRAAADDoA
+AAFNAAAQOgAAAS4AABQ6AAABQwAAGDoAAAE8AAAcOgAAAfsAACA6AAABSAAAJDoAAAGF
+AAAoOgAAATUAACw6AAABNAAAMDoAAAEaAAA0OgAAAXcAADg6AAABCQEAPDoAAAFwAABA
+OgAAATkBAEQ6AAABnAEASDoAAAHfAABMOgAAAWkBAFA6AAABmwAAVDoAAAGpAQBYOgAA
+ASMBAFw6AAAB4AAAYDoAAAElAABkOgAAAY4BAGg6AAABcQAAbDoAAAHkAABwOgAAAdQA
+AHQ6AAAB/QAAeDoAAAGlAQCAOgAAASoBAIQ6AAABTwAAiDoAAAFYAQCMOgAAAWgBAJA6
+AAABJwEAlDoAAAGvAQCkSQAAAQEAAKhJAAABAQAArEkAAAEBAACwSQAAAQEAALRJAAAB
+AQAAuEkAAAEBAAAMSgAAAQEAABBKAAABAQAAFEoAAAEBAAAYSgAAAQEAABxKAAABAQAA
+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
+AAA=
====
-
diff --git a/usr/src/uts/common/io/ath/hal_x86_64.o.uu b/usr/src/uts/common/io/ath/hal_x86_64.o.uu
index 9ef4c90f80..312e482a5d 100644
--- a/usr/src/uts/common/io/ath/hal_x86_64.o.uu
+++ b/usr/src/uts/common/io/ath/hal_x86_64.o.uu
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting, Atheros
+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting, Atheros
* Communications, Inc. All rights reserved.
*
* Use is subject to license terms.
@@ -36,1971 +36,2311 @@
* SUCH DAMAGES.
*
*/
-#define ATH_HAL_VERSION "0.9.14.9"
#pragma ident "%Z%%M% %I% %E% SMI"
+#define ATH_HAL_VERSION "0.9.17.2"
begin-base64 644 hal.o
-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
+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
-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
+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
-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
+g34YAHQRD7dGGIPABMHgECUAAH8ACcKJkSCAAABBi4DsLQAAMOQPt1YaweIIgeIA/wAA
+CdBBiYDsLQAASItXIImCGIAAAEQPt04IRDlOHHYERItOHESLRgxEOUYcdgREi0YcRTnB
+dQWLTgTrAosOSItXIItGBIPoA8HgAyX//wcADQAAGAqJgtSAAABIi1cgjQTN6P///yX/
+/wcADQAAAAqJgtiAAABIi08gQQ+3wUSJwsHiEAnQiYHcgAAAw0iD7BhIiVwkCEiJbCQQ
+SIn7SInVSItHIImwAGAAAEiLRyDHgAhgAAABAAAAuQIAAAC6AwAAAL4MYAAA6AAAAAC6
+AAAAAIXAdBNIi0Mgi4AEYAAAZolFALoBAAAAidBIi1wkCEiLbCQQSIPEGMOQkJBIi38g
+jQw2ugMAAADT4ouHFEAAAAnQiYcUQAAAuAEAAADDSIt/II0MNrgDAAAA0+D30IuXFEAA
+ACHQiYcUQAAAuAEAAADDSIt/IESLhxhAAAC4/v///4nx08BBIcCD4gHT4kEJ0ESJhxhA
+AAC4AQAAAMOJ8bj/////g/4FdxJIi0cgi4AcQAAAg+Av0+iD4AHDSIPsCEiLRyBEi4gU
+QAAARI0ENrgDAAAARInB0+ANAPABAPfQQSHBweYMQQnxQYHJAIAAAESJyA0AAAEAhdJE
+D0XISItHIESJiBRAAACLt7wqAACBzgAAAAHoAAAAAEiDxAjDSItHIIuACEAAAIP4AQ+U
+wA+2wMNBuQAAAABJifpIi0cgRIuAgAAAAEH3wAAAgAB0S4uQjAAAAPfCAAAAAbgAACAA
+RA9FyESJyA0AAEAA98IAAAAgRA9FyESJyA0AAIAA98IAAAAERA9FyESJyA0AAAAC98IA
+AAACRA9FyEiLRyBEi4DAAAAAQYP4/3UMxwYAAAAAuAAAAADDRInAJbrYBQGJBkH3wAAA
+CAB0Bw0AAABAiQZB9sAFdAODDgFB98DABQAAdFKDDkBIi0cgi5DEAAAAidAl/wMAAEEL
+ghRXAACB4gAA/wPB6hAJwkGJkhRXAABIi0cgi4DIAAAAicGB4f8DAAAJ0SUAAP8DwegQ
+CchBiYIUVwAAQfbAIHQGgQ4AAABARInICwaJBqkAAABAdEdEiYfAFAAASItXIIuCxAAA
+AImHxBQAAIuCyAAAAImHyBQAAIuCzAAAAImHzBQAAIuC0AAAAImH0BQAAIuC1AAAAImH
+1BQAALgBAAAAw4uHvCoAAMNJifhEi4+8KgAARYXJeRJIi0cgx0AkAAAAAEiLRyCLQCSJ
+8oHiutgFAbkAAAAAQPbGQHQ0QYO4ZCsAAAB0A4PKQEGDuGgrAAAAdAOAzgFBg7hsKwAA
+AHQDgMqAQYO4cCsAAAB0A4DOBInQg8gHQPbGAQ9F0PfGAADgAnRGgcoAAIAAicgNAAAA
+AffGAAAgAA9FyInIDQAAACD3xgAAQAAPRciJyA0AAAAE98YAAIAAD0XIicgNAAAAAvfG
+AAAAAg9FyInQDQAACAD3xgAAAEAPRdBIi0cgiZCgAAAASItXIIuCrAAAACX///9ICciJ
+gqwAAABBibC8KgAAhfZ5C0iLRyDHQCQBAAAARInIw5CQD7eHUgQAAMOJ8GY7t1IEAABz
+HkjB4AUl4P8fAEiLVyCLhBAciAAAugEAAABmhcB4BboAAAAAidDDZju3UgQAAHIGuAAA
+AADDSInwSMHgBSXg/x8ASItXIIuMEBSIAADHhBAAiAAAAAAAAEiLVyDHhBAEiAAAAAAA
+AEiLVyDHhBAIiAAAAAAAAEiLVyDHhBAMiAAAAAAAAEiLVyDHhBAQiAAAAAAAAEiLVyDH
+hBAUiAAABwAAAEiLVyDHhBAYiAAAAAAAAEiLVyDHhBAciAAAAAAAAIP5BHVR9ofnLQAA
+CHRIjUZASMHgBSXg/x8ASItXIMeEEACIAAAAAAAASItXIMeEEASIAAAAAAAASItXIMeE
+EAiIAAAAAAAASItXIMeEEAyIAAAAAAAAuAEAAADDZju3UgQAAHIGuAAAAADDSIXSdD1E
+D7ZCBUHB4AgPtkIEQQnAD7ZKA8HhGA+2QgLB4BAJwQ+2QgHB4AgJwQ+2AgnB0elEicDB
+4B8JwUHR6OsLQbgAAAAAuQAAAABIifJIweIFgeLg/x8ASItHIImMAhiIAABIi08gRInA
+gMyAiYQKHIgAALgBAAAAw0iD7DhIiVwkCEiJbCQQTIlkJBhMiWwkIEyJdCQoTIl8JDBJ
+if1IidVIjb9IBAAARYXAugAAAAC4qqqqqkGJwUQPRMpmO3cKD4OGAAAAD7ZFAIP4BXd9
+icD/JMUAAAAAQbsFAAAA63b2RwEQdGZBuwYAAADraEG7BAAAAEH2hectAAAIdFgPt8aD
+wEAPt1cKvwAAAAA50A+NrgIAAOs/ZoN9AgR2LmaDfQIFdwhBuwAAAADrKWaDfQINdwhB
+uwEAAADrGkG7AwAAAOsSQbsHAAAA6wq/AAAAAOltAgAARA+2dQQPtkUFweAIQQnGD7ZF
+BsHgEEEJxg+2RQfB4BhBCcZFMc4PtkUJweAID7ZVCEGJ10EJx0Uxz0GB5///AABED7ZF
+Cg+2RQvB4AhBCcAPtkUMweAQQQnAD7ZFDcHgGEEJwEUxyA+2RQ/B4AgPtlUOQYnSQQnC
+RTHKQYHi//8AAA+2fRAPtkURweAICccPtkUSweAQCccPtkUTweAYCcdEMc9mg30CDXcG
+gef/AAAAQYP7BA+FUQEAAEH2hectAAAID4RDAQAAjV5AD7f2QYn0QcHkBU1j5EmLVSBE
+ifD30EGJhBQAiAAASYtVIESJ+PfQQYmEFASIAABJi0UgRYmEBAiIAABJi0UgRYmUBAyI
+AABJi0UgQYm8BBCIAABJi0UgQceEBBSIAAAEAAAASInKTInv6AAAAAAPtk0UD7ZFFcHg
+CAnBD7ZFFsHgEAnBD7ZFF8HgGAnBD7ZVGA+2RRnB4AgJwg+2RRrB4BAJwg+2RRvB4BgJ
+wkjB4wWB4+D/HwBJi0UgiYwDAIgAAEmLRSDHhAMEiAAAAAAAAEmLRSCJlAMIiAAASYtF
+IMeEAwyIAAAAAAAASYtFIMeEAxCIAAAAAAAASYtFIMeEAxSIAAAHAAAASYtFIMeEAxiI
+AAAAAAAASYtFIMeEAxyIAAAAAAAASYtFIEWJtAQAiAAASYtFIEWJvAQEiAAA61wPt/aJ
+8MHgBUiYSYtVIESJtBAAiAAASYtVIESJvBAEiAAASYtVIESJhBAIiAAASYtVIESJlBAM
+iAAASYtVIIm8EBCIAABJi1UgRImcEBSIAABIicpMie/oAAAAAL8BAAAAifhIi1wkCEiL
+bCQQTItkJBhMi2wkIEyLdCQoTIt8JDBIg8Q4w5CQkEiD7AhIifBIjbeoKgAAugYAAABI
+icfoAAAAAEiDxAjDSIPsCEiBx6gqAAC6BgAAAOgAAAAAuAEAAABIg8QIw0iD7AhIifBI
+jbe0KgAAugYAAABIicfoAAAAAEiDxAjDU0iJ+0iNv7QqAAC6BgAAAOgAAAAASItLIA+2
+k7QqAAAPtoO1KgAAweAICcIPtoO2KgAAweAQCcIPtoO3KgAAweAYCcKJkeCAAABIi0sg
+D7aTuSoAAMHiCA+2g7gqAAAJ0ImB5IAAALgBAAAAW8NmObdsBAAAdQe4DAAAAOsUgL/a
+FAAAAA+YwA+2wI0ExQMAAABIhdJ0AokCuAAAAADDSIn6uAAAAABmg7/uFAAAAHQUuAEA
+AABmg7/eFAAAAHUFuEMAAABmg7/yFAAAAHQDg8gEZoO/9BQAAAB0G2aBujIEAAARDnQQ
+g8gIZoO/4BQAAAB1A4PIIMNIg+wYSIkcJEyJZCQITIlsJBBIiftED7enuBQAAEWJ5UGD
+5RxBwf0CQYPkAkHR/ESJ7v+X8AMAAEiLUyCLggCYAACAzCCJggCYAABEie5Iid//k/gD
+AABEOeAPlcIPttJEie5Iid//kwgEAABIixwkTItkJAhMi2wkEEiDxBjDSItXIIuCEEAA
+ACWf//H/g+YHCwS1AAAAAImCEEAAAMNIg+wYSIlcJAhIiWwkEEiJ+4nVSI2/rioAALoG
+AAAA6AAAAABIi0sgD7aTrioAAA+2g68qAADB4AgJwg+2g7AqAADB4BAJwg+2g7EqAADB
+4BgJwomRCIAAAEiLSyAPtoOzKgAAweAID7aTsioAAAnCiegl/z8AAMHgEAnCiZEMgAAA
+SItcJAhIi2wkEEiDxBjDSItXIIuCUIAAAEjB4CCLkkyAAACJ0kgJ0MNIi0cgi4BMgAAA
+w0iLVyCLgiCAAAANAAAAAYmCIIAAAEiLVyCJgiCAAADDSIuHoBQAAEiFwHRp9kACIHRj
+QbgAAAAAugAAAAA7FnMdSGPCD7ZEMASEwHkLg+B/RDjAcgNBicD/wjsWcuNIi1cgi4oE
+gAAARYTAdBdEicDQ6DwCdw6JyA0AAAACiYIEgAAAw0iLVyCJyCX////9iYIEgAAAkMNI
+i0cgi4BkmAAAicHB6ROB4f8BAAD2xQF0BoHxAP7//0iLVyCLglCAAACLkkyAAAAx0DHI
+w0iLRyCLgCBAAAAl/wAAAInCg+IPuQAAAADB6AQ5hzQEAAB1DmY5lzgEAAB1BbkBAAAA
+icjDSItHIIuAkIAAAAEGSItHIIuAjIAAAAFGBEiLRyCLgJSAAAABRgxIi0cgi4CIgAAA
+AUYISItHIIuAmIAAAAFGEMO4AQAAAMNIi0cgi4AcnAAAJf8AAADDSItHIIuAWIAAAIPg
+B8NIi0cgg+YHibBYgAAAw4uH1C0AAMNIg+wISIuXoBQAAEiF0nUNibfULQAAuAEAAADr
+BegAAAAASIPECMO4AQAAAMNIg+wYSIkcJEiJbCQITIlkJBBIif2J80mJ/IP+BXYOvv//
+AADoAAAAADnDdhNBx4QkGC4AAP////+4AAAAAOsfid5Iie/oAAAAAEiLVSCJgnAQAACJ
+nRguAAC4AQAAAEiLHCRIi2wkCEyLZCQQSIPEGMNIg+wISItHIIuwcBAAAIHm//8AAOgA
+AAAASIPECMNIg+woSIkcJEiJbCQITIlkJBBMiWwkGEyJdCQgSIn9QYn2vv8/AADoAAAA
+AEE5xnYRx4UcLgAA/////7gAAAAA6zhMi2UgQYucJBSAAACB4wDA//9EifZIie/oAAAA
+ACX/PwAACcNBiZwkFIAAAESJtRwuAAC4AQAAAEiLHCRIi2wkCEyLZCQQTItsJBhMi3Qk
+IEiDxCjDSIPsCEiLRyCLsBSAAACB5v8/AADoAAAAAEiDxAjDD7aH5y0AAIPwAYPgAcOF
+9nQhSItXIIuCBIAAACX////+iYIEgAAAgafkLQAA/////usfSItXIIuCBIAAAA0AAAAB
+iYIEgAAAgY/kLQAAAAAAAbgBAAAAw0iD7ChIiRwkSIlsJAhMiWQkEEyJbCQYTIl0JCBI
+if1Bifa+/z8AAOgAAAAAQTnGdhHHhSAuAAD/////uAAAAADrO0yLZSBBi5wkFIAAAIHj
+//8AwESJ9kiJ7+gAAAAAweAQJQAA/z8Jw0GJnCQUgAAARIm1IC4AALgBAAAASIscJEiL
+bCQITItkJBBMi2wkGEyLdCQgSIPEKMNIg+wISItHIIuwFIAAAIHmAAD/P8HuEOgAAAAA
+SIPECMNBidC4DAAAAGaB/oAAdy1Ii1cgD7fGiYIABAAASItXIEWFwA+VwA+2wImCBAQA
+AA+3xkSIRAc4uAAAAADDSIPsGEiJXCQISIlsJBBIifuJ9UCIt6gUAACF0g+E9gAAAECE
+9g+E7QAAAEiLh6AUAAAPt0ACJUABAAA9QAEAAA+F0gAAAL4BAAAA6AAAAACJx0iLg6AU
+AAD2QANAdCdAD7b1ifjR6A+v8I00doHGBAEAAEAPts0Pr8iNBEmNjACsDQAA61dIi4Og
+FAAAZoN4AgB5KEAPtvWJ+MHoAg+v8I00doHG0gAAAEAPts0Pr8iNBEmNjABIDQAA6yFA
+D7b1D6/3jTR2gcZoAQAAQA+2zQ+vz40ESY2MAGAOAABAD7bVD6/XjRRSgcLoAwAAgeL/
+PwAASItDIImwcBAAAEiLQyCJiLAQAABIi0sgidDB4BAJ0ImBFIAAAEiLXCQISItsJBBI
+g8QYw0iD7AiLt0QEAADoAAAAAEiDxAjDuAAAAACD/gZ0F4C/+xQAAAB0DoO/AC4AAAF3
+BbgBAAAAw1NIifvoAAAAAIXAD4RBAQAASItDIMeAcJgAAB8AAABIi1MgD7eDPAQAACXw
+AAAAg+gwg/hAGcCD4PyDwBiJgviZAABIi1Mgi4IcgAAAJX/A//8MgImCHIAAAEiLQyDH
+gASBAAA9AAAASItTIIuCEEAAAIPIAomCEEAAAIO7NAQAAAd0LoO7NAQAAAt0JYO7NAQA
+AAp0HIO7NAQAAAl0E4O7NAQAAAp1WGaDuzgEAAADd05Ii0Mgx4B0mAAAJgAAAEiLQyDH
+gHiYAAANAAAASItDIMeA8JkAAAcAAABIi0Mgx4D0mQAAPwAAAEiLUyCLghBAAAAl////
+/A0AAAAC60dIi0Mgx4B0mAAACgAAAEiLQyDHgHiYAAAMAAAASItDIMeA8JkAAAMAAABI
+i0Mgx4D0mQAAIAAAAEiLUyCLghBAAAANAAAAA4mCEEAAAOnKAAAASItTIIuCEEAAACX/
+///8iYIQQAAASItTIIuCEEAAAIPg/YmCEEAAAEiLQyDHgHCYAAAfAAAASItDIMeAdJgA
+AH8AAABIi0Mgx4B4mAAADgAAAEiLQyDHgPCZAAAMAAAASItDIMeA9JkAAP8AAABIi1Mg
+D7eDPAQAACXwAAAAg+gwg/hAGcCD4PyDwBKJgviZAABIi3Mgi4YcgAAAJX/A//8Pt5M8
+BAAAgeLwAAAAg+owicGByYATAAANgA8AAIP6Pw9GwYmGHIAAAFvDU0iJ++gAAAAAhcAP
+hNgAAABIi1Mgi4IQQAAAJf////yJghBAAABIi1Mgi4IQQAAAg+D9iYIQQAAASItDIMeA
+BIEAAAEAAABIi3Mgi4YcgAAAJX/A//8Pt5M8BAAAgeLwAAAAg+owicGByYATAAANgA8A
+AIP6Pw9GwYmGHIAAAEiLQyDHgHCYAAAfAAAASItDIMeAdJgAAH8AAABIi0Mgx4B4mAAA
+DgAAAEiLQyDHgPCZAAAMAAAASItDIMeA9JkAAP8AAABIi1MgD7eDPAQAACXwAAAAg+gw
+g/hAGcCD4PyDwBiJgviZAABbw7oAAAAASMfHAAAAAA+3BonBZjsFAAAAAHcL/8JIY8Jm
+OwyHdvVIY8IPvwSFAAAAAMNIg+wYSIlcJAhIiWwkEInTSInNSI2PSAQAAIP+HQ+HAwIA
+AInw/yTFAAAAAIP7AnQig/sCD4LlAQAAg/sEcmWD+wUPhtcBAACD+38PhM4BAADrUfZB
+ARDpGQEAALgAAAAAhdsPhMcBAACD+wEPha0BAACLh+QtAADB6BvpWAEAAIO/NAQAAAUP
+h5IBAACDvzQEAAAFdQ5mg784BAAABw+HewEAALgNAAAA6YIBAACDvzwuAAAA63i4AAAA
+AIXbD4RsAQAAg/sBD4XFAAAASItHIIuACKIAAMHoDen5AAAAi4dcBAAA6TIBAAC4AAAA
+AIXbD4Q5AQAAg/sBD4UfAQAAg7/0LQAAAOsmhdt0B4P7AXQM6yZmg7/uFAAAAOsRSLgA
+AP////8AAEiFh/AUAAAPlMAPtsDp9gAAALgBAAAA6ewAAAC4AAAAAIXbD4TfAAAAg/sB
+dTyLh+QtAAD30MHoH+nKAAAAhdt0B4P7AXQY6yH2QQIIugAAAAC4DQAAAA9FwumpAAAA
+i4foLQAAwegD60a4DAAAAOmUAAAAi4f4LQAAg+A/63WLh/gtAAAlAD8AAMHoCOtlg/sB
+dBa4AAAAAIP7AXJquAwAAACD+wZ3YOsOi4c4LgAAg/ABg+AB61DoAAAAAEiJwrgBAAAA
+SIXSdD6D+wZ3KInY/yTFAAAAAA+2QgnrFg+2QgzrEA+2Qg3rCg+2QgvrBA+2QgqJRQC4
+AAAAAOsKSInpidroAAAAAEiLXCQISItsJBBIg8QYw0iD7AhJifpMjY9IBAAAg/4dD4c1
+AQAAifD/JMUAAAAAhcl0D4GP5C0AAAAAAAjpEgEAAIGn5C0AAP////fpAwEAAEiLRyCL
+sAiiAACJ8oDOIInwgOTfhcmJ1g9E8EiLRyCJsAiiAADp2QAAAImPXAQAAEiLRyCJiEiA
+AADpxAAAAIXJD5XAD7bAiYf0LQAA6bEAAACFyXQPgY/kLQAAAAAAgOmeAAAAgafkLQAA
+////f+mPAAAAD7+HFC4AAAHBg/lAuD8AAAAPQ8iD/hp1DYnIC4f4LQAAg+A/6xiLl/gt
+AACB4gA/AACJyCUAPwAAwegICdBBiYL4LQAASItXIEGLgvgtAACJguiAAADrN7gAAAAA
+g/oGdzmJ0Is0hQAAAACJyugAAAAA6ydB9kECCHQbhcl0CYOP6C0AAAjrB4On6C0AAPe4
+AQAAAOsF6AAAAABIg8QIw0iD7AjoAAAAAIXAD5XAD7bASIPECMOQVVNIg+wISIn7hfZ0
+ZUiLVyCLggRAAAAl///8/4mCBEAAAL8KAAAA6AAAAAC9KAAAAEiLQyCLgBBAAACpAAAB
+AHQlvzIAAADoAAAAAEiLUyCLggRAAAAl///8/4mCBEAAAP/NdczrBIXtdQe4AAAAAOsa
+SItTIIuCBIAAACX///v/iYIEgAAAuAEAAABIg8QIW13DSItXIIuCBIAAAA0AAAQAiYIE
+gAAAhfZ0GkiLVyCLggRAAAAl///8/w0AAAEAiYIEQAAAw0iLVyCLggSAAAANAAAEAImC
+BIAAAIX2dBpIi1cgi4IEQAAAJf///P8NAAACAImCBEAAAMNIg+wYSIkcJEiJbCQITIlk
+JBCJ80iJ/UG8AQAAAIP+AXQYg/4BcgeD/gJ0F+seidbo0P7//0GJxOsZidboV////+sQ
+idbogv///+sHuAAAAADrCYmd0C0AAESJ4EiLHCRIi2wkCEyLZCQQSIPEGMNIi0cgi4AE
+QAAAJQAAAwDB6BDDkJCQU4P+CA+EhwAAAIP+CHcig/4CD4SCAAAAg/4CdwqD/gF0OOmg
+AAAAg/4EdFzplgAAAIH+AAEAAHRzgf4AAQAAdweD/iB0Xet/gf4AAgAAdGWB/gAEAAB0
+ZuttSMfDAAAAAEiDv6AUAAAAdGNIi4egFAAA9kADQHU9SIuHoBQAAGaDeAIAeUjrNkjH
+wwAAAADrPUjHwwAAAADrNEjHwwAAAADrK0jHwwAAAADrIkjHwwAAAADrGUjHwwAAAADr
+EEjHwwAAAADrB7gAAAAA6wtIid7oAAAAAEiJ2FvDkEiLRyCLQAzDSItHIIlwDMNIi0cg
+x0AIBAAAAMNIg+wISItHIMdACCAAAAC5AAAAALoEAAAAvggAAADoAAAAAIXAD5XAD7bA
+SIPECMNTSIn7SItXIIuCSIAAAIPg34mCSIAAAPaHOC4AAAF0DegAAAAASInf6AAAAABI
+id/oAAAAAFvDSIPsCEiLVyCLgkiAAACDyCCJgkiAAADoAAAAAEiDxAjDSItHIImwQIAA
+AEiLRyCJkESAAADDuAAAAACD/j93R4P+H3YgSItXIESLgkSAAACNTuC4/v///9PARCHA
+iYJEgAAA6x1Ii1cgRIuCQIAAALj+////ifHTwEQhwImCQIAAALgBAAAAw7gAAAAAg/4/
+d0eD/h92IEiLVyBEi4JEgAAAjU7guAEAAADT4EQJwImCRIAAAOsdSItHIESLgECAAAC6
+AQAAAInx0+JECcKJkECAAAC4AQAAAMNIi1cgi4I8gAAAi4oMgQAAicKAzgL2wSAPRcKJ
+woDOAffBAAACAg9FwsNIi1cgQA+2xomCPIAAALgAAAAA98YAAgAAuiAAAAAPRcKJwoHK
+AAACAvfGAAEAAA9FwkiLVyCJggyBAACFwHQMSItXIItCNIPIEOsKSItXIItCNIPg74lC
+NMPHRggAAAAAidAl/w8AAIlGDPbBIHQGgMwgiUYMx0YUAAAAAMdGEAAAAAC4AQAAAMNB
+VUFUVVNIg+wISYn8SInzTYnF9kYUAXUKuQ8AAADp/wAAAPZBFAF1FEiLRyCLQAy5DwAA
+ADnQD4TlAAAAD7dGEGYl/w9miUMgi0YUJQAA/3/B6BBmiUMixkMkAItGECUAAPAPwegU
+iEMmPIB1BMZDJgCLRhT2xAF0DSUA/gAAwegJiEMn6wTGQyf/i0YQJQCADwDB6A+IQyiL
+RhAlAAAA8MHoHIhDKYtGEMHoDIPgAYhDKotGFKgCdWOoBHQGgEskAetZ9kYUEHQ9gEsk
+Ag+2bhVAiGslQYO8JDwuAAAAdRGD/QV0EUiNcyBMiefoAAAAAIP9BXUmTInqSIneTInn
+6AAAAADrFvZGFAh0BoBLJAjrCvZGFCB0BIBLJBC5AAAAAInISIPECFtdQVxBXcNBV0FW
+QVVBVFVTSIPsSEiJ/Yl0JEBJidSJTCQ8TIlEJDBIiXwkIEG9AAAAAA+3QgL2xAF0B6mA
+AAAA6wwPt0ICwegHg/ABqAEPhWgCAABBD7dEJAKoIHQEqEDrDkEPt0QkAsHoBoPwAagB
+D4VGAgAAugEAAAC+AAAAAEiJ7+gAAAAAugAAAACFwA+E0gwAAEyJ5kiJ7+gAAAAASIlE
+JBi6DAAAAEiFwA+EowwAAIN8JEAGdB+DfCRABncNg3wkQAEPh/ABAADrC4N8JEAID4Xj
+AQAAx0QkFAAAAACDfCQ8AHQsSItFIIuAQBEAAIlEJBRIi3QkGEiJ7+gAAAAA9oU4LgAA
+AXQISInv6AAAAACDvTQEAAAHdC6DvTQEAAALdCWDvTQEAAAKdByDvTQEAAAJdBODvTQE
+AAAKdV1mg704BAAAA3dTg3wkPAB0TEiDvaAUAAAAdEJIi42gFAAAQQ+3BCRmOwF0MUEP
+t1QkAoHi8AEAAA+3QQIl8AEAADnCdRhMieZIie/oAAAAALoBAAAAhcAPhckLAABIi0Ug
+i4BYgAAAiUQkEIXAuAEAAAAPRUQkEIlEJBBIi1Ugi4IEgAAAJQAAIAKJRCQIi4IQQAAA
+JWAA/gCJRCQMi4IUQAAAiUQkLIuSGEAAAIlUJCiLdCRASInv6AAAAABIie/oAAAAAEyJ
+5kiJ7+gAAAAAugMAAACFwA+EOAsAAEEPt0QkAiXwAQAAPUABAAB0TD1AAQAAfyA9wAAA
+AHRjPcAAAAB/CT2gAAAAdEvrbj3QAAAAdFbrZT3ACAAAdEM9wAgAAH8HPVABAADrDD1A
+CQAAdAk9UAkAAHQM60DHRCQEAQAAAOsIx0QkBAIAAADHBCQBAAAA6y/HRCQEAwAAAOsS
+x0QkBAQAAADrCMdEJAQFAAAAxwQkAgAAAOsKugwAAADpkAoAAEiLRSDHgACYAAAHAAAA
+uwAAAABJx8cAAAAARIt0JARIY8NIjQRAQYsMx0iLVSBJjQRGQYsEh4kEEUH/xUH2xT91
+Cr8BAAAA6AAAAAD/w4P7GHbMuwAAAABIY8OLFMUAAAAAg3wkPAB0Fo2C4H///4P4GHYx
+jYIsf///g/gIdiaJ0UiLVSBIY8OLBMUAAAAAiQQRQf/FQfbFP3UKvwEAAADoAAAAAP/D
+gfvDAAAAdqlEiemLFCSLdCQESInvSItcJCD/kygrAABB9kQkA0B1CWZBg3wkAgB5C0yJ
+5kiJ7+gAAAAAZoO9OgQAAEEPhu0AAABIi0Ugx4AsmAAAAqACAGZBgTwktAl1L0iLRCQg
+D7aQ+hQAAA+3gAQVAAApwkhjwkhpwGdmZmZIwegg0fjB+h+JxmYp1usdSItUJCAPtoL6
+FAAASJhIacBnZmZmSMHoIInG0e5BD7dEJAIl0AAAAD3AAAAAdTFIi00gSItcJCAPtpP6
+FAAA99rB4gaB4sAPAACJ8MHgEvfYJQAA/AAJwomRTJkAAOsOSItFIMeATJkAAAAAAABI
+i1Ugi4IoogAAgOT9iYIoogAASItVIIuCKKIAACX/A/7/gMwIiYIoogAASItFIMeAYIAA
+AA8AAABmg706BAAAQnYOSItFIMeAVKIAAAAAAABIi0Ugx4B4mAAADgAAAIO9NAQAAAp0
+HIO9NAQAAAl0E4O9NAQAAAp1OmaDvTgEAAADdzC5AQAAAGZBgTwkngl0CWZBgTwkowl1
+BbkAAAAASItVIIuCTKIAADnIdAaJikyiAABIjVQkREiLdCQYSInv6AAAAAC6AwAAAIXA
+D4QYCAAAg3wkQAZ0EYO9aAQAAAB0CEiJ7+gAAAAAD7dUJARIjUwkREiLdCQYSInvSItc
+JCD/k0ArAAC6AwAAAIXAD4TWBwAAQfZEJAJAdF+DvTQEAAAKdCyDvTQEAAAJdCODvTQE
+AAAKdQpmg704BAAAA3YQSItEJCBmgbjYFAAAAlB2H0EPt0QkAiWgAAAAPaAAAAB0DUiL
+dCQYSInv6AAAAABMieZIie/oAAAAAEiLdCQYSInv6AAAAAC6AwAAAIXAD4RVBwAAg3wk
+PAB0DkiLRSCLVCQUiZBAEQAASItNIEiLXCQgD7aTqCoAAA+2g6kqAADB4AgJwg+2g6oq
+AADB4BAJwg+2g6sqAADB4BgJwomRAIAAAEiLTSAPtpOtKgAAweIID7aDrCoAAAnQC0Qk
+CAuD5C0AAA0AAIAAiYEEgAAAi3QkQEiJ7+gAAAAASItNIA+2k7QqAAAPtoO1KgAAweAI
+CcIPtoO2KgAAweAQCcIPtoO3KgAAweAYCcKJkeCAAABIi00gD7aTuSoAAMHiCA+2g7gq
+AAAJ0ImB5IAAAEiLVSCLghBAAAALRCQMiYIQQAAASItFIItUJCyJkBRAAABIi0Ugi0wk
+KImIGEAAAEiLRSCLXCQQiZhYgAAASItNIEiLRCQgD7aQrioAAA+2gK8qAADB4AgJwkiL
+XCQgD7aDsCoAAMHgEAnCD7aDsSoAAMHgGAnCiZEIgAAASItNIA+2k7MqAADB4ggPtoOy
+KgAACdCJgQyAAABIi1Ugi4PsLQAAiYIYgAAASItFIMeAgAAAAP////9Ii3QkGEiJ7+gA
+AAAAugMAAACFwA+EqgUAAA+2tagUAAC6AQAAAEiJ7+gAAAAATInmSInv6AAAAAAPt4U8
+BAAAJfAAAACD6DCD+D93QEiLhaAUAAD2QANAdQdmg3gCAHksSIuFoBQAAPZAA0APlMAP
+tsCDwAxIi00gi5EkmAAAg+Lwg+APCcKJkSSYAABIi0Ugi4AUmQAAicKB4v8/AABB9kQk
+AiB0HY0ElQAAAACJwLqjiy66SA+vwkjB6CCJwsHqBOsUidC6zczMzEgPr8JIweggicLB
+6gNIi0Ugx4AcmAAAAQAAAEiLhaAUAAD2QANAdAaNfBJk6xpIi4WgFAAAZoN4AgB5CY08
+lWQAAADrA416ZOgAAAAASItFIESLqAiYAADHgAiYAAAAOAAAuwEAAABIi0Ugi4AknAAA
+qBB0Ib/IAAAA6AAAAACJ2P/Dg/gTfw5Ii0Ugi4AknAAAqBB130iLRSBEiagImAAASItV
+IIuCYJgAAIPIA4mCYJgAAEEPt0QkAiWgAAAAPaAAAAB0R0iLRCQgg7jYLQAAAnQ5SItV
+IIuCIJkAAIDM8ImCIJkAAEiLVSCLgiCZAAANAAABAImCIJkAAEiLVCQgx4LYLQAAAQAA
+AOsPSItMJCDHgdgtAAAAAAAASInv6AAAAAC7AAAAAL4BAAAAjQSdAAAAAEiYSIt9IIny
+idnT4omUOAAQAAD/w4P7CX7fSItcJCDHgxRXAAAAAAAAuwAAAABmg71QBAAAAHQXid5I
+ie/oAAAAAP/DD7eFUAQAADnDfOlIi0QkIMeAvCoAAGUJCACDfCRABnUKx4C8KgAAZRkI
+AEiLVSBIi0wkIIuBvCoAAImCoAAAAEiLVSCLgqwAAAANAAAHAImCrAAAAIO9vBQAAAB0
+CEiJ7+gAAAAAuQAAAAC6AQAAAL5gmAAASInv6AAAAACLdCRASInv6AAAAABIi1Ugi4Ig
+gAAAJf//f/6JgiCAAACDvTQEAAAFdxODvTQEAAAFdSZmg704BAAAB3YcSItFIMeAGIEA
+AKoAAQBIi0Ugx4AcgQAAEDIAAEiLRSDHgAiBAABSAAAAQfZEJAMBdA5Ii1wkIA+2g/YU
+AADrDEiLVCQgD7aC9xQAAA++0EyJ5kiJ7+gAAAAAQYnBSItMJCBEi4H4LQAAQYPgPw+/
+gRQuAABEicEpwUiLXCQYD75TBo0EEDnRRA9HwA++QwUBwEEPvtGJxinWQTnwdhBIi1Qk
+IA+/ghQuAABEjQQwSItMJCCLufgtAACB5wA/AADB7wgPv4EULgAAifkpwUiLXCQYD75T
+Bo0EEDnRD0f4D75DBQHAQQ++0SnQicI5x3YPSItMJCAPv4EULgAAjTwQSItcJCCLs/gt
+AACB5gAAPwDB7hAPv4MULgAAifEpwUiLXCQYD75TBo0EEDnRD0fwD75DBQHAQQ++0SnQ
+icI5xnYPSItMJCAPv4EULgAAjTQQQYP4QLg/AAAARA9DwIP/QA9D+IP+QA9D8ESJwoPi
+P4n4weAIJQA/AAAJwonwweAQJQAAPwAJwkiLRSCJkOiAAABIi1wkIIO76C0AAAB0EEiL
+VSCLg+gtAACJgiCBAABIi0QkIIO4GC4AAP90DouwGC4AAEiJ7+gAAAAASItUJCCDuhwu
+AAD/dA6LshwuAABIie/oAAAAAEiLTCQgg7kgLgAA/3QOi7EgLgAASInv6AAAAACDvVwE
+AAAAdBBIi1Ugi4VcBAAAiYJIgAAAi1wkQImdRAQAAIN8JDwAD4SOAAAASItUJBgPt0IC
+JdAAAAA90AAAAHUISInv6AAAAABIi0wkGPZBBAJ1BIBhBP5Ii1wkGA+3QwJmQYlEJAIP
+tkMEQYhEJAQPtkMFQYhEJAUPtkMGQYhEJAYPtkMHQYhEJAdIi4WgFAAASMdAMAAAAABI
+i52gFAAASInv6AAAAABIiUMovgEAAABIie/oAAAAALoBAAAA6xFIi0QkMIM4AHQCiRC6
+AAAAAInQSIPESFtdQVxBXUFeQV/Di7doBAAAQPbGA3QgSItPIIuRRJkAAIHi////34nw
+g+ABweAdCcKJkUSZAACJ8IPgDHQrqAR1FEiLVyCLgtCAAACD4OOJgtCAAADDSItXIIuC
+0IAAAIPIHImC0IAAAJDDU0iJ+/+XOCsAALoAAAAAhcB0DmbHg7oqAAD//7oBAAAAidBb
+w0FXQVZBVUFUVVNIg+wISIn9SYn1QbwBAAAASYn/6AAAAABJica7AAAAAGaDvVAEAAAA
+dBuJ3kiJ7+gAAAAAhcB1Hf/DD7eFUAQAADnDcuW6AAAAAEWF5A+ETAEAAOsIQbwAAAAA
+6+hIi0Ugx4B8mQAAAQAAALsAAAAASItFIIuAIJwAAIXAdRO/BQAAAOgAAAAA/8OD+2N2
+4esFg/tjdgq6AAAAAOn/AAAATIn2SInv6AAAAAC6AAAAAIXAD4TnAAAASItFIIuAFJkA
+ACX/PwAAQfZGAiB0F8HgAonAuqOLLrpID6/CSMHoIMHoBOsSicC6zczMzEgPr8JIwegg
+wegDjXhk6AAAAABIieJMifZIie/oAAAAALoAAAAAhcAPhIUAAABIi0Ugx4B8mQAAAAAA
+AEH2RgJAdFiDvTQEAAAKdCiDvTQEAAAJdB+DvTQEAAAKdQpmg704BAAAA3YMZkGBv9gU
+AAACUHYcQQ+3RQIloAAAAD2gAAAAdAtMifZIie/oAAAAAEyJ7kiJ7+gAAAAASItVIIuC
+YJgAAIPIAomCYJgAALoBAAAAidBIg8QIW11BXEFdQV5BX8NIi0cgi4AEgAAAJf///P+D
+/gF0T4P+AX8GhfZ0KZDDg/4GdAeD/gh0OpDDSItXIA0AAAEQiYIEgAAASItXIItCFIPg
+3+sZSItXIA0AAAIQiYIEgAAASItXIItCFIPIIIlCFMNIi1cgDQAAABCJggSAAADDSIPs
+CL4CAAAA6B4FAABIg8QIw1NIifu6AQAAAL4AAAAA6AAAAAC6AAAAAIXAdA++EwAAAEiJ
+3+jwBAAAicKJ0FvDSIPsKEiJXCQISIlsJBBMiWQkGEyJbCQgSIn7SIn1vhMAAADowgQA
+ALoAAAAAhcAPhAACAAC6AQAAAL4AAAAASInf6AAAAAC6AAAAAIXAD4ThAQAAvgAAAABI
+id/oiQQAALoAAAAAhcAPhMcBAABIhe0PhLkBAACDuzQEAAAKdByDuzQEAAAJdBODuzQE
+AAAKdS9mg7s4BAAAA3clQb0IAAAAD7dFAqggdVcl0AAAALkEAAAAPcAAAAAPhawAAADr
+QA+3gzwEAAAl8AAAAIPoMIP4P3YSg7s0BAAAB3QJg7s0BAAAC3VDQb0IAAAAD7dFAqgg
+dQwl0AAAAD3AAAAAdQe56wAAAOtj9kUDQHQHueoBAADrVmaDfQIAeQe56gIAAOtIueoA
+AADrQUG9AAAAAA+3RQKoIHUMJdAAAAA9wAAAAHUHuasAAADrIPZFA0B0B7mqAQAA6xNm
+g30CAHkHuaoCAADrBbmqAAAAD7dFAqhAdBaoIHUMJdAAAAA9wAAAAHUGQYPNBOsORIno
+g8gB9kUCQEQPROhEieiDyAL2RQMBRA9E6PZFAhAPlcBED7bgR40kZEiLQyCLkHyYAAAP
+t0UCqCB1DCXQAAAAPcAAAAB1MEiLQyBEiaAEmAAASItDIESJqACiAAA5ynRESItDIImI
+fJgAAL8sAQAA6AAAAADrLjnKdBRIi0MgiYh8mAAAvywBAADoAAAAAEiLQyBEiaAEmAAA
+SItDIESJqACiAAC6AQAAAInQSItcJAhIi2wkEEyLZCQYTItsJCBIg8Qow0FWQVVBVFVT
+SIn7SYn2SInVSYn9xwIAAAAA6AAAAABJicS4AAAAAE2F5A+EYQIAAIO72C0AAAJ0CYO7
+2C0AAAB1B8dFAAEAAABBg73YLQAAAQ+FSAEAAEiLQyCLgCCZAACpAAABAA+FMwEAAEHH
+hdgtAAAAAAAAx0UAAQAAAL4AAAAASItDIIu4EJwAAIuIFJwAAESLgBicAACF/3QEhcl1
+HEiLUyCLgiCZAAANAAABAImCIJkAAP/Gg/4JfsWJ+NHoicrR6gHQic7B7geJwcHpBw+E
+HQEAAIP+AQ+OFAEAAESJwPfYRA++wESJwJn3+UGJwIP44H0IQbjg////6wyD+CC4HwAA
+AEQPTcCJ+LoAAAAA9/aNcICD/vB9B77w////6wuD/hC4DwAAAA9N8EiLSyCLkSCZAACB
+4h/4//9EicDB4AUl4AcAAAnCiZEgmQAASItLIIuBIJkAAIPg4Inyg+IfCdCJgSCZAABI
+i1Mgi4IgmQAAgMwIiYIgmQAAQceF2C0AAAIAAABBx0QkEAEAAABFiEQkFEGIdCQV61ZB
+D7dGAiWgAAAAPaAAAAB0RUGDvdgtAAACdTtBg3wkEAB1M0iLUyCLgiCZAACAzPCJgiCZ
+AABIi1Mgi4IgmQAADQAAAQCJgiCZAABBx4XYLQAAAQAAAEyJ5kiJ3+gAAAAAQfZEJAIC
+dXdIi1Mgi4JgmAAAg8gCiYJgmAAAQQ+3VgL2xgF1GQ+3gzwEAAAl8AAAAIPoMIP4P3dT
+9sJAdE6DuzQEAAAHdEWDuzQEAAALdDyDuzQEAAAKdDODuzQEAAAJdCqDuzQEAAAKdQpm
+g7s4BAAAA3YXSInf6OUeAADrDWZBg04CAmZBg2QkAv24AQAAAFtdQVxBXUFew0iD7BhI
+iRwkSIlsJAhMiWQkEEiJ/Ynzhfa4/////0GJxEQPReaDvzQEAAAJdBODvzQEAAAKdQ1m
+g784BAAAA3cDg+PvSItFIItQDImYAEAAAL8PAAAA6AAAAACD4wNEieKD4gOJ2b4AQAAA
+SInv6AAAAABBicT2wwF1K0iLRSDHQBQAAAAAugEAAAC+AAAAAEiJ7+gAAAAAhcB0CkiL
+RSCLgMAAAABEieBIixwkSItsJAhMi2QkEEiDxBjDSItHIIuAZJgAAMHoE2Yl/wH2xAF0
+BGY1AP6Yww+3RgIl4AEAAD3AAAAAdCk9wAAAAH8JPaAAAAB0EuspPUABAAB1Ig+3hzQV
+AADrEA+3hzYVAADrBw+3hzgVAABmiQK4AQAAAMO4AAAAAMNIg+woSIlcJBBIiWwkGEyJ
+ZCQgSIn7SIn1SItHIIuAYJgAAEG8AAAAAKgCdTToAAAAAEGJxEiNVCQOSInuSInf6Gz/
+//+FwHQNZkQ7ZCQOfgtmg00CAkG8AAAAAGZEiWUWQQ+/xEiLXCQQSItsJBhMi2QkIEiD
+xCjDU0iJ+7kAAAAAugAAAAC+DAAAAOgAAAAAhcB1ckiLQyDHgCAEAAABAAAASItDIMeA
+AAYAAAAAAABIi1Mgi4IABgAAg8gIiYIABgAASItDIMeABAYAAAECEABIi0Mgx4AgBgAA
+AAAAALkAAAAASItDIImIAAQAAEiLUyCJyA+2RAM4iYIEBAAA/8GD+X923lvDQVVBVFVT
+SIPsCEiJ/UGJ9L8AAAAARI1S/0HB6gNEjUL/QYPgB0GJ8UG7AAAAAIX2fma7AQAAAI00
+zQAAAABHjSwBQYP9CbgIAAAARA9D6InYRInp0+D/yInaRInB0+L/yjHQifHT4ESJ0iNE
+lQDT6ESJwdPoRInZ0+AJx0SJ6UQpwUEBy0eNTAj4QbgAAAAAQf/CRYXJf6ZEieboAAAA
+AEiDxAhbXUFcQV3DSYn5D7dCAiXgAQAAPcAAAAB0Kz3AAAAAfww9oAAAAHQW6cEAAAC6
+AAAAAD1AAQAAdBHpsAAAALoBAAAA6wW6AgAAAEhj0kUPt4RRUhUAAEEPt4RRWBUAAMHg
+BkEJwEEPt4RRXhUAAMHgDEEJwEEPt4RRZBUAAMHgEkEJwEEPt4RRahUAAMHgGEEJwEEP
+t4xRcBUAAEEPt4RRdhUAAMHgBgnBQQ+3hFF8FQAAweAMCcFBD7eEUYIVAADB4BIJwUEP
+t4RRiBUAAMHgGAnBg/4BdAyD/gFyF4P+AnQH6wpEicHrC0GJyOsGuAAAAADDRDnBdQ9I
+i1cgi4IIogAAgOTf6w1Ii1cgi4IIogAAgMwgiYIIogAAQYmx1C0AAEiLRyBEiYBgmQAA
+SItHIImIZJkAALgBAAAAw1ODvzQEAAAKdEeDvzQEAAAJdD6DvzQEAAAKdQpmg784BAAA
+A3Yrg780BAAAB3Qig780BAAAC3QZD7eHPAQAACXwAAAAg+gwuiAAAACD+D93BbooAAAA
+uQAAAAAPtwaJ07oAAAAA9/OF0nQOjUL2g/gNuAEAAAAPQ8iJyFvDQVdBVkFVQVRVU0iD
+7BhIif1JifZJifxED7duAkHB7QdBg+UBD7dGAiXwAQAAPUABAAB0ZD1AAQAAfzI9wAAA
+AA+E0wAAAD3AAAAAfxA9oAAAAA+EuQAAAOnEAAAAPdAAAAAPhLEAAADptAAAAD3ACAAA
+D4ShAAAAPcAIAAB/Bz1QAQAA6ww9QAkAAHQLPVAJAAAPhYkAAABBvwAAAAAPt4U8BAAA
+JfAAAACD6DCD+D92eYO9NAQAAAd0cIO9NAQAAAt0Z4O9NAQAAAp0XoO9NAQAAAl0VYO9
+NAQAAAp1CmaDvTgEAAADdkJIi00gi5FEmQAAg+LHSYuEJKAqAAAPvwDB4AOD4DgJwomR
+RJkAAOsaQb8BAAAA6xJBvwIAAADrCrgAAAAA6RYDAABIi00gi5EQmQAAgeIG/P//SWPf
+QQ+3hFxMFQAAweAECcKDygGJkRCZAABBi7Qk1C0AAEyJ8kiJ7+gAAAAASItVIEEPv4Rc
+NBUAACX/AQAAgMwCiYJomQAAZkGBvCTYFAAA/092OUH2RgIQdDJJY8VBD7e0RKwVAABB
+D7a8BLQVAABFD7aEBLYVAABFD7eMRLAVAABBD7eERLgVAADrM0ljx0EPt7REChUAAEEP
+trwELhUAAEljxUUPtoQEMRUAAEUPt4xEEBUAAEEPt4REmhUAAGaJBCRIi00gi5FEmAAA
+geJ/wP//ifDB4AclgD8AAAnCiZFEmAAASItNIIuBUJgAALAAQA+21wnQiYFQmAAASItN
+IIuRUJgAADD2RInAweAIJQD/AAAJwomRUJgAAEiLTSCLkUiYAACB4v8P/P9EicjB4Awl
+APADAAnCiZFImAAASIt9IElj90EPt5R0IhUAAInQweAYweIQCdBBD7eMdCgVAACJysHi
+CAnQCciJhzSYAABIi00gi5EomAAAMPZBD7eEdBYVAADB4AgJwomRKJgAAEiLTSCLkWSY
+AACB4v8P+P9BD7eEdBwVAADB4AwlAPAHAAnCiZFkmAAAuwIAAABmQYG8JNgUAAACMHcZ
+ZoG9MgQAACIQdStB9kYCQHQkuwgAAADrHUyJ9kiJ7+gAAAAAhcB0Dkljx0EPt4REjhUA
+AAHDSItNIIuRJJkAAIDiAY0EGyX+AAAACcKJkSSZAABBg34QAHQMQQ++dhRBD75+FesV
+SWPFQQ+3tEQeFgAAQQ+3vEQiFgAASItNIIuRIJkAAIHiH/j//4nwweAFJeAHAAAJwomR
+IJkAAEiLTSCLgSCZAACD4OCJ+oPiHwnQiYEgmQAASItVIIuCIJkAAIDMCImCIJkAAGZB
+gbwk2BQAAABAdkFBD7dGAiXQAAAAPdAAAAB1DWZBgbwk2BQAAP9PdiNIi00gi5EMogAA
+geL//wP/iwQkweASJQAA/AAJwomRDKIAAGZBgbwk2BQAAABQdg5Ii0Ugx4DgmQAAAAAA
+ALgBAAAASIPEGFtdQVxBXUFeQV/DQVdBVkFVQVRVU0iD7HhIif1BvgAAAABIx0QkYAAA
+AABIx0QkaAAAAABmx0QkRgAAQb8AAAAAx0QkQAAAAADHRCRIAQACAMdEJEwCAAEAZsdE
+JFABAGbHRCRSAgBmx0QkVAEAD7dOAsHpB0yNr9gUAAAPtwaD4QF0DY0UgESNnBIopv//
+6wuNFIBEjZwSmEAAAGaDfjgAdBJED7dmOOt4QYnMZkGB5P8/62hBvACA//+/VwAAAPZG
+AhC6rgAAAA9F+kG6AAAAAInLQQ+3wkiNFENBD7eMVY4DAABmgfkAgHQxRQ+3y0QPt8dE
+ichEKcCJyoHi/z8AADnQfw1FAcFEiUwkKEE50X2XQf/CZkGD+gR2t2ZEiWY4ZkGB/ACA
+D4UZAQAASItNIIuRIJkAAPfCAAAAQA+EhgQAAIuRDJkAAIHi////AImRDJkAAEiLTSCL
+kSCZAACB4v///4+JkQyZAABIi1Ugx4KgmQAAAAAAAEiLVSDHgoCZAAAAAAAASItVIIuK
+hJkAAIHhAADw/4mKhJkAAEiLVSDHgpiZAAAAAAAASItVIIuKnJkAAIHhAADw/4mKnJkA
+AEiLVSDHggCZAAAAAAAASItVIMeCBJkAAAAAAABIi1Ugx4IImQAAAAAAAEiLVSCLigyZ
+AACB4QDA//+JigyZAABIi1Ugx4KImQAAAAAAAEiLVSDHgoyZAAAAAAAASItVIMeCkJkA
+AAAAAABIi1Ugi4qUmQAAgeEAwP//iYqUmQAA6YMDAABBD7fMQQ+30ynRD7dWAonQJfAB
+AAA90AAAAA+EpQAAAD3QAAAAfww9wAAAAHRM6ccAAAA9QAEAAHQQPVABAAAPhIAAAADp
+sAAAAEGJz0HB5xFJY9dIadIfhetRSMHqIInWwf4DRIn4mUGJ90Ep10SJ+sH6ColUJEDr
+QonIweAISGPQSGnSlSBPCUjB6iCJ1tH+mSnWiXQkQEGJz0HB5xFJY9dIadIfhetRSMHq
+IInWwf4DRIn4mUGJ90Ep12bHRCRGNQzrNUGJz0HB5xBJY9dIadIfhetRSMHqIInWwf4D
+RIn4mUGJ90Ep10SJ+sH6ColUJEBmx0QkRmoYichpwOgDAADB4AQPt0wkRolMJCSZ9/mo
+D3QNQbgEAAAATI1MJEjrC0G4AwAAAEyNTCRQQboAAAAAZkWFwA+E/wAAAInHwf8EQbsB
+AAAASLsAAAAA/////4P/HA+PKAIAAEEPt8KNdDgZg/4gdy6D/hl/D0SJ2onx0+JECfJJ
+Id7rOIP+Gn42jU7/RInY0+CJwUQJ8Ukh3kkJzushjU7fg/kTdxlMifJIweogRInY0+AJ
+wkjB4iBBg+b/SQnWjVYBg/oPdxVBD7fKQQ+3FEmNTDYC0+IJVCRg61WNRvGD+A93FUEP
+t9JBD7cUUY1MNuLT4glUJGTrOI1W4YP6D3cVQQ+30kEPtxRRjUw2wtPiCVQkaOsbjVbR
+g/oGdxNBD7fSQQ+3FFGNTDai0+IJVCRsQf/CQQ+30kEPv8g5yg+MFv///0iLVSCLigyZ
+AACByQAAAP+JigyZAABIi00gi5EgmQAAgcoAAABwiZEgmQAASItNIItUJEDB4hSJ1oHm
+AADwP0SJ+oHi//8PAAnygcoAAABAiZGgmQAASItVIESJsoCZAABIi00gi5GEmQAAidaB
+5gAA8P9MifJIweoggeL//w8ACdaJsYSZAABIi00gRImxmJkAAEiLTSCLsZyZAACB5gAA
+8P8J8omRnJkAAEiLVSCLTCRgiYoAmQAASItVIItMJGSJigSZAABIi1Ugi0wkaImKCJkA
+AEiLTSCLkQyZAACJ1oHmAMD//4tUJGyB4v8/AAAJ8omRDJkAAEiLVSCLTCRgiYqImQAA
+SItVIItMJGSJioyZAABIi1Ugi0wkaImKkJkAAEiLTSCLkZSZAACJ1oHmAMD//4tUJGyB
+4v8/AAAJ8omRlJkAAEiDxHhbXUFcQV1BXkFfw7oAAABk9kYCELgAAADISA9F0PZGA0B0
+BUjR6usLZoN+AgB5BEjB6gJID7cOSInQugAAAABI9/FIicZBuR8AAABIifBEiclI0+io
+AXUFSf/Jde64JgAAAEwpyEmJwbgXAAAAicJEKcq4AQAAAInR0+BImEiNBDC6GAAAAEGJ
+0EUpyESJwUjT6EiLdyCLlhSYAACB4v//AQDB4BEJwomWFJgAAEiLdyCLlhSYAACB4v8f
+/v9EicjB4A0lAOABAAnCiZYUmAAAw0iD7AiD/kC4PwAAAA9D8GaJt2AEAABIi7egFAAA
+SI1UJAToAAAAAEiDxAjDQVVBVFVTSIPsGEiJ/UmJ9EmJ1UiJ+4u38FYAAEiLv+hWAADo
+AAAAAEiNvfRWAAC+IAAAAOgAAAAAD7eNYAQAAGaD+UC4PwAAAA9NyGaD+T5/CrgAAAAA
+ZoXJdQ6LhWQEAAAPt4QAAAAAAA+/yQ+/0EiNRCQWSIkEJEyNTCQUQbgBAAAATInmSInv
+6KYCAAC6AAAAAIXAD4SMAgAATYnoTInhSI1UJBZIjXQkFEiJ7/+TSCsAALoAAAAAhcAP
+hGYCAACDvTQEAAAHdDaDvTQEAAALdC2DvTQEAAAKdCSDvTQEAAAJdBuDvTQEAAAKdQpm
+g704BAAAA3YIZoODElcAAARBuAAAAAAPt5MULgAASWPAZgGUQ/RWAABmg7xD9FYAAD92
+CmbHhEP0VgAAPwBB/8BBg/gPdtdmg7sGFQAAAQ+HuwAAAGaDvToEAABBd2RBD7dEJAIl
+0AAAAD3AAAAAdVJmQYE8JLQJdSgPtpP6FAAAD7eDBBUAACnCSGPCSGnAZ2ZmZkjB6CDR
++MH6H2Yp0OsWD7aD+hQAAEiYSGnAZ2ZmZkjB6CDR6A+38EiJ7+jiBwAAQbgAAAAAQo0M
+hQAAAABIY8lIi30gSWPwSIuD6FYAAA+3VLACweIYgcoAAP8AD7cEsMHgCAz/Jf//AAAJ
+womUOYChAABB/8BBg/gffrlIi00gD7eT+lYAAIPiP8HiGA+3g/hWAACD4D/B4BAJwg+3
+g/ZWAACD4D/B4AgJwg+3g/RWAACD4D8JwomRNJkAAEiLTSAPt5MCVwAAg+I/weIYD7eD
+AFcAAIPgP8HgEAnCD7eD/lYAAIPgP8HgCAnCD7eD/FYAAIPgPwnCiZE4mQAASItNIA+3
+kwhXAACD4j/B4hgPt4MGVwAAg+A/weAQCcIPt4MSVwAAg+A/weAICcIPt4MEVwAAg+A/
+CcKJkTSiAABIi00gD7eTEFcAAIPiP8HiGA+3gw5XAACD4D/B4BAJwg+3gwxXAACD4D/B
+4AgJwg+3gwpXAACD4D8JwomROKIAAEiLRSCDu/QtAAAAdAe6fwAAAOsFuj8AAACJkDyZ
+AAC6AQAAAInQSIPEGFtdQVxBXcNBV0FWQVVBVFVTSIHsuAAAAEiJvCSIAAAASYn0RIlE
+JGxMiUwkYGaJlCSGAAAAZolMJHBIif1IifhIBfRWAABIiUQkWGbHRCRAPwBmx0QkMD8A
+ZsdEJBAAAA++RgUBwGaJRCQuSIuUJPAAAABmxwLB/0iLXCRgZscDPwBIi7wkiAAAAOgA
+AAAAQYnFuwAAAABIi4QkiAAAAGaDuNwVAAAAD4SIAAAAZkUPtv1FD7b1RInyg+L4iVQk
+DEhjw2aDvEXeFQAAAHRaZkQ5vEXeFQAAdBIPt4RF3hUAAIPgBwzgQTnGdT1IY8NIweAG
+SI20KDwaAABBD7c8JOiKBgAAgXwkDOAAAAB1E2Y7RCRAi1QkQA9G0GaJVCRA6wdmiUQk
+QOsN/8MPt4XcFQAAOcN8i0EPt0QkAiXQAAAAPcAAAAAPhaEAAABBg+X4QYPNAbsAAAAA
+ZoO93BUAAAAPhI8AAABmRQ+29UUPtu1Fie9Bg+f4SGPDZoO8Rd4VAAAAdFlmRDm0Rd4V
+AAB0Eg+3hEXeFQAAg+AHDOBBOcV1PEhjw0jB4AZIjbQoPBoAAEEPtzwk6NQFAABBgf/g
+AAAAdRNmO0QkMItUJDAPRtBmiVQkMOsHZolEJDDrGP/DD7eF3BUAADnDfIzrCYtcJEBm
+iVwkMEH2RCQDAXQJD7aF9hQAAOsHD7aF9xQAAA++0EyJ5kiLvCSIAAAA6AAAAACJw0H2
+RCQCQA+E3gEAAEGAfCQCAHkYTI2EJKAAAAAPt40EGgAASI2VBhoAAOsWTI2EJKAAAAAP
+t42yGQAASI2VtBkAAEyJ5kiLvCSIAAAA6EcGAAAPt0QkQA+3VCQuD77LKco5wonGD07y
+QfZEJAIQdEBmgb3YFAAAADB2EQ+/1g+3heYUAAA50InWD07wZoG92BQAAP8/dhlBgHwk
+AgB5EQ+/1g+3hegUAAA50InWD07wD7/WD7eEJKYAAAA50A9O0GaJVCQQD7eEJIYAAAAB
+wInWZinGuAAAAAAPSPBmOXQkcItEJHAPTvCDfCRsAA+E0AAAAEiLVCRYZolyCGaJcgZm
+iXIEZolyAmaJMon3i4QkpAAAAGY58HYCifBIi1QkWGaJQgoPt4QkogAAAGY7AnYDD7cC
+SItUJFhmiUIMi4QkoAAAAGY7AnYDD7cCSItUJFhmiUIOicFmgb3YFAAA/z92Qg+/1kGA
+fCQCAHkJD7eF7BQAAOsHD7eF6hQAADnCfBpBgHwkAgB5CQ+3hewUAADrCw+3heoUAADr
+AonwSItUJFjrCEiLVCRYD7cCZolCHkiLlCTwAAAAD78CiYUQLgAA6xSJ9w+/1g+3hCSg
+AAAAOdCJ0Q9OyEiLRCRgZokISIuUJPAAAABmiTpBD7dEJAKoIHUQJdAAAAA9wAAAAA+F
+DgEAAEyNhCSQAAAAD7eNJBoAAEiNlSYaAABMieZIi7wkiAAAAOhvBAAAD7dMJDAPt0Qk
+Lg++0ynQOciJzg9O8A+/1g+3hCSWAAAAOdCJ1g9O8A+3hCSGAAAAAcBmKca4AAAAAA9I
+8ItEJHBmOfAPTvCDfCRsAHReD7/WD7eEJJYAAAA50A9PwkiLXCRYZolDEA+3hCSUAAAA
+OdAPT8JmiUMSicFmiUMUD7eEJJIAAAA50A9PwmaJQxZmiUMYD7eEJJAAAAA50A9PwmaJ
+QxqJwmaJQxzrHw+/1g+3hCSUAAAAOdCJ0Q9OyA+3hCSQAAAAOdAPTtBIi0QkYGY7EH0D
+ZokQSIuUJPAAAABmOwp+A2aJCoN8JGwAdCdIi5wk8AAAAA+/A4mF4C0AAA+3heAtAABI
+i5QkiAAAAGaJgmIEAAC4AQAAAEiBxLgAAABbXUFcQV1BXkFfw0FXQVZBVUFUVVNIg+wY
+SYn9SYn3QYnW/5dQKwAAugAAAACFwA+EswAAAEUPt6VgBAAAZkGD/EC4PwAAAEQPTeBm
+QYP8Pn8NZsdEJBIAAGZFheR1FEGLhWQEAAAPt4QAAAAAAGaJRCQSvQAAAABEOfVzZono
+SY0cx0iNRCQWSIkEJEyNTCQUQbgAAAAAQQ+/zA+/VCQSSIneTInv6O75//+6AAAAAIXA
+dDRmD75DBmY5RCQWfQgPtkQkFohDBmYPvkMHZjlEJBR9CA+2RCQUiEMH/8VEOfVymroB
+AAAAidBIg8QYW11BXEFdQV5BX8NBVFVTSIPsIIn1SIn7RA+3pwIVAABIjbf0VgAASInn
+uiAAAADoAAAAAEG5CAAAAEEPt8FmRCkkRL8AAAAAQboAAAAASYnAZkKDPEQAeQdmQscE
+RAAAZoP/CHUHvw8AAADrR0EPt8kPvxRMD7f3D7eEc/RWAAA5wnUuZoO8c/RWAAAAdQZm
+/wRM6xNmQYP6MnYHZkL/BETrBWZC/wxEvwAAAABB/8LrAv/HZoP/D3aXQQ+3wWaDPEQ/
+fgZmxwREPwBBD7fBD7eEQ/RWAAAp6LoAAAAAD0jCQQ+30UgPvwxUSIuT6FYAAEiYD7cE
+QmaJBEpB/8FmQYP5Dg+GMf///0G5CAAAAEEPt9EPtwRUZomEU/RWAABB/8FmQYP5Dnbm
+SIPEIFtdQVzDQVRVU0iD7CBIifNBify6AAAAAEhjymaDPMsAdBAPtwTLZolETBD/woP6
+B37midUPt9JIjXQkEEEPt/xMjUQkDkiNTCQM6AAAAAC6AAAAADnqfR2LRCQMZjtEJBB0
+EonB/8I56n0KSGPCZjtMRBB18ItEJAxmO0QkDnUGZkQ54HQKSGPCg3zDBAB0Ckhjwg+3
+RMMC6wW4PwAAAA+3wEiDxCBbXUFcw1NBidJBickPt8FBD7fQD6/CugAAAACFwHRpichm
+QTnydF4Pt8cPt9Yp0GvIZEEPt8Ip0InCiciJ05n3+4nBRInIZoXJeDpEicBmg/lkfzEP
+v8lBD7fQD6/RuGQAAAApyEEPt8kPr8EBwkhjwkhpwB+F61FIweggwfgFwfofZinQD7fQ
+idBbw0FXQVZBVUFUVVNIg+woSYn3SInVTIkEJEGJzb4AAAAAD7fBicE5xn0XSGPGSI0U
+gA+3VFUIZolURBD/xjnOfOlBD7fdSI10JBBBD7c/TI1EJA5IjUwkDIna6AAAAABBvAAA
+AABBuQAAAAC+AAAAADnefS2LfCQMD7dMJA6J2khjxmY7fEQQdQNBifFIY8ZmO0xEEHUF
+QYn06wb/xjnWfN5FD7fkT40kpE0B5EYPt0QlBkEPt9lIjRybSAHbD7dMHQZED7dsJA5E
+D7d0JAxBD7c/RInqRIn26J3+//9IixQkZolCBkYPt0QlBA+3TB0EQQ+3P0SJ6kSJ9uh7
+/v//SIsUJGaJQgRGD7dEJQIPt0wdAkEPtz9EiepEifboWf7//0iLFCRmiUICRg+3RCUA
+D7dMHQBBD7c/RInqRIn26Df+//9IixQkZokCSIPEKFtdQVxBXUFeQV/DD7f/a/9kD7fS
+SI0UVg+3BmvAZIPoCjnHchoPt0L+a8Bkg8AKOcd2IA+3Qv5mQYkAZokBww+3BuvzD7cG
+ZokBD7dGAmZBiQDDSDnWcykPtwZrwGQp+IP493wFg/gJftUPt0YCa8Bkg+gKOcdyzEiD
+xgJIOdZy15DDSI2XgCoAAA+3hzwEAAAl8AAAAIPoMIP4P3c0iwUAAAAAiYeAKgAAicBI
+jQTASI0EhQAAAABIiUIgx0IYAQAAAMdCDBQAAADHQhBVAAAAw4sFAAAAAIkCicBIjQTA
+SI0EhQAAAABIiUIgx0IYAQAAAMdCDBQAAADHQhAjAAAAw1NIifpIifMPt4c8BAAAJfAA
+AACD6DCD+D93Ub4HAAAA/5cwKwAASInHuQAAAAC6JAAAAL4BAAAA6B3k//9BuQAAAABB
+uGsAAAC/AAAAAL5rAAAAg/gBdXlBuFMAAAC+UwAAAMdDEDcAAADrZb4HAAAA/5IwKwAA
+SInHuQAAAAC6JQAAAL4GAAAA6Mzj//9BuQAAAACNSASD+D+6MgAAAEGJ0EQPRcG6QAAA
+AInXQQ9E+Y13MkGNURSD+D9BD0XRiVMMjU7xjVYFg/g/D0TRiVMQi1MEuAAAAABEOcpy
+BUQ5wnYNOfpyBDnydgW4AQAAAFvDD7+HFC4AAAOHEC4AAEiLVyDB4AklAH4AAIDMgImC
+MJkAAMeH3C0AAAEAAADDSIPsGEiJHCRIiWwkCEyJZCQQSIn7SYn8SI2vgCoAAIN9GAB1
+CrgAAAAA6eEAAACDv9wtAAABD4XOAAAASItHIIuAMJkAAGaFwA+IuwAAAInCweoZiVUE
+JQAAgAHB6BeD+AJ1HGaDvzoEAABBdg4Pt4cCFQAAAdCJRQTrBINFBAVBD7eEJDwEAAAl
+8AAAAIPoMIP4P3cfTInn6JgBAACLRQQ7RRRyCCtFFIlFBOsHx0UEAAAAAMeD3C0AAAAA
+AABIie5MiefoF/7//4XAdTxIie5MiefoSgAAAIXAdC1Iie5MiefoUwAAAIXAfh7Hg9wt
+AAACAAAAx4PwLQAAAQAAAMeD2C0AAAAAAACLg9wtAABIixwkSItsJAhMi2QkEEiDxBjD
+uAAAAACLVgQ7Vgx2BTtWEHIFuAEAAADDD7eHPAQAACXwAAAAg+gwg/g/SMfCAAAAAEjH
+wAAAAABIicdID0f6iwZIjQTASI1EhwhIiUYgi0YEO0YQclODPgB1Brj/////w4tGBIlG
+CDtGEHI3gz4AdDL/DosWSI0U0kiNFJdIi04gi0IYK0EQAcCLTggpwYlOCEiDwghIiVYg
+O04QcgWDPgB1zrgBAAAAw4tGBDtGDHdciwf/yDkGdQa4/v///8OLRgSJRgg7Rgx3PYsH
+/8g5BnM1/waLFkiNFNJIjRSXSItOIItCGCtBEAHAi04IKcGJTghIg8IISIlWIDtODHcI
+iwf/yDkGcsu4AgAAAMO4AAAAAMNIg+wYSIkcJEiJbCQITIlkJBBIiftIja+AKgAAx0UU
+AAAAAL4HAAAA/5cwKwAASInHuQAAAAC6JAAAAL4BAAAA6MDg//+D+AF1W0iLRSBED78g
+vgcAAABIid//kzArAABIice5AAAAALogAAAAvgQAAADojuD//0GD/AF0JUGD/AFyDkGD
+/AJ0EUGD/AN0EesUx0UUAAAAAOsLjUQA++sCAcCJRRRIixwkSItsJAhMi2QkEEiDxBjD
+QVVBVFVTSIPsCEiJ/Yn3QYnUictFicWJ1ugAAAAAQYnBRI1D/0HB6AONe/+D5wdFheR+
+ekG7AQAAAEaNFO0AAAAAuwgAAABBjQw8g/kJuAgAAAAPTchEidjT4InBjVH/RInYifnT
+4P/IMdBBicVEidFB0+VEicZEier30iNUtQBEiciJ+dPgRInR0+BEIegJ0IlEtQBGjWQn
++InZKflB0+m/AAAAAEH/wEWF5H+ZSIPECFtdQVxBXcNBV0FWQVVBVFVTSIPsCEmJ/0mJ
+9vZGA0B0B74AAgAA6yJmg34CAHkHvgAEAADrEfZGAhC+AAEAALgCAAAAD0XwTIn/6AAA
+AABIicVBvQAAAABEOyh9SEljxUiNBEBIjUSFIA+2WAjB4wJIY9tNi2cgD7ZIC0G4AAAA
+ALoOAAAASInuTIn/6AAAAAAPt8BCiYQjAIcAAEH/xUQ7bQB8uEH2RgIQD4W0AAAAvggA
+AABMif/oAAAAAEiJxUG9AAAAAEQ7KA+NlQAAAEljxUiNBEBMjXSFIEEPtkYIjQSFAIcA
+AIlEJARBgH4FAHVlQYnESYtfIEEPtk4LQbgAAAAAug4AAABIie5Mif/oAAAAAA+3wEGJ
+BBxBgH4JAHQ1QQ+2RgmLVCQEjRSCQYnUSYtfIEEPtk4LQbgBAAAAug4AAABIie5Mif/o
+AAAAAA+3wEGJBBxB/8VEO20AD4xr////SIPECFtdQVxBXUFeQV/DSItHIIuAHIAAACWA
+PwAA9kYDQHQkQboEAQAAQbsAAIAfvgAAGwC5EwAAAEG4rA0AAEG5FAAAAOsiQbrSAAAA
+QbsAAIAfvgAANgC5CQAAAEG4SA0AAEG5CgAAAEiLVyAJyAnwRAnYiYIcgAAASItHIESJ
+kHAQAABIi0cgRImAsBAAAEiLTyCLgfAQAAAl/wPw/0SJysHiCgnQiYHwEAAAw0iD7ChI
+iVwkCEiJbCQQTIlkJBhMiWwkIEmJ/Ynzi7e8KgAAgeb///9/6AAAAACJxkmLRSCLUDCJ
+1YHl8AMAAMHtBEGJ7IXbdA+4JQAAACno0ehEjSQo6wxBjUQk/4P9AkQPQ+BBOex0GkmL
+TSCB4g/8//9EieDB4AQl8AMAAAnCiVEwTInv6AAAAABBOewPlcAPtsBIi1wkCEiLbCQQ
+TItkJBhMi2wkIEiDxCjDSIPsCA+3h1AEAAC5AAAAADnGfRxIY8ZIicZIweYESCnGSI20
+t3grAADoAAAAAInBichIg8QIw0iD7AhJidAPt4dQBAAAugAAAAA5xn0fSGPGSInCSMHi
+BEgpwkiNlJd4KwAATInG6AAAAACJwonQSIPECMNBV0FWQVVBVFVTSIPsCEmJ/UGJ9EmJ
+1kiJ/kiNj0gEAABBvwsAAABBg/wCdCJBg/wCdwtBg/wBdFXppAAAAEGD/AN0GkGD/AR0
+JOmTAAAAD7dpCP/NQYHPwAAFAOtpD7dpCIPtAkGBz8ABBQDrWQ+3aQiD7QNIY9VIidBI
+weAESCnQg7yHfCsAAAB0O+tUvQAAAAAPt0EIicc5xX0dSGPVSInQSMHgBEgp0IO8hnwr
+AAAAdAb/xTn9fOMPt0EIuv////85xXR8SGPVSInQSMHgBEgp0EiNnIZ4KwAAg3sEAHQH
+uv/////rWr48AAAASInf6AAAAABEiWMETYX2dS5EiXsMx0MUAgAAAMdDGP/////HQxz/
+AwAAZsdDIAoAZsdDIgoAx0M0AAAAAOsUQYtGMIlDNEyJ8onuTInv6AAAAACJ6onQSIPE
+CFtdQVxBXUFeQV/DSItPIIuXZCsAAIHi/wMAAIuHbCsAAMHgECUAAP8DCcKJkaQAAABI
+i08gi5doKwAAgeL/AwAAi4dwKwAAweAQJQAA/wMJwomRqAAAAEiLTyCLgawAAAAlAPz/
+/4uXdCsAAIHi/wMAAAnQiYGsAAAAw0iD7AgPt4dQBAAAugAAAAA5xnNeifJIidBIweAE
+SCnQTI2Eh3grAABBg3gEAHUHugAAAADrPEHHQAQAAAAAuP7///+J8dPAIYdkKwAAIYdo
+KwAAIYdsKwAAIYdwKwAAIYd0KwAATInG6CP///+6AQAAAInQSIPECMNTQYnySYn7SIuP
+oBQAAA+3h1AEAAC6AAAAADnGD4OxAwAAifJIidBIweAESCnQTI2Eh3grAABBg3gEAA+E
+jQMAAEGDeBj/dTNIhcl0FQ+3QQIloAAAALofAAAAPaAAAAB0BboPAAAAuAEAAAA50HMP
+AcCDyAE50HL36wRBi0AYQo0clQAAAACNs0AQAABIi08gicKB4v8DAABBi0AcweAKJQD8
+DwAJwkGLQBTB4BQlAADwDwnCiRQOjbOAEAAASItPIEEPt0AiweAEJfAAAABBD7dQIIPi
+DwnQDQAgCACJBA6+AAgAAEG5AAEAAEGDeCQAdDGNs8AIAABIi08gQYtQJIHi////AEGL
+QCjB4BgJwokUDr4BCAAAQYN4KAB0Bb4BCQAAQYN4MAB0HUKNDJUACQAASItXIEGLQDAl
+////AA0AAAABiQQRQo0MlcAQAABIi1cgQYtALCX//w8AQYN4LAB0BQ0AABAAiQQRQYN4
+MAB0DYnwgMwCQfZADCAPRfBB9kAMQHQGg+bwg84CQPbGD3QoifKDykCJ8IPgv0H2QA0B
+idYPRPCJ8oPKIInwg+DfQYB4DACJ1g9J8ESJyA0AACAAQfZADgFED0XIRInIgMwCQfZA
+DoBED0XIQfZADgR0CUGByQAABADrEUSJyA0AAAIAQfZADgJED0XIRInIgMxAQfZADghE
+D0XIRInIDQAAEABB9kAOEEQPRchBi0AEg/gCdAeD+AN0D+tQQIDOokGByQAAJQDrQ4PO
+YkGDeDAAdTKLFQAAAAArFQAAAABBi4P8LQAAKdArBQAAAADB4ApCjQyVAAkAAEiLVyAN
+AAAAAYkEEUGByQAABABEicgNAAAkAEH2QDgBRA9FyEKNFJUAAAAAjYrACQAASItHIIk0
+AYHCABEAAEiLRyBEiQwCQYN4NAB0OEiLVyBDjUQSUImCAAsAAEiLVyBBi0A0iYIECwAA
+SItHIMeACAsAAAkAAABIi1cgiwQRgMwQiQQRQfZADAF0E7gBAAAARInR0+BBCYNkKwAA
+6xG4/v///0SJ0dPAQSGDZCsAAEH2QAwBdBO4AQAAAESJ0dPgQQmDaCsAAOsRuP7///9E
+idHTwEEhg2grAABB9kAMAnQTuAEAAABEidHT4EEJg2wrAADrEbj+////RInR08BBIYNs
+KwAAQfZADAR0E7gBAAAARInR0+BBCYNwKwAA6xG4/v///0SJ0dPAQSGDcCsAAEH2QAwI
+dBO4AQAAAESJ0dPgQQmDdCsAAOsRuP7///9EidHTwEEhg3QrAABMicboSfv//7oBAAAA
+idBbw400tQAIAABIi0cgiwQGw400tQAIAABIi0cgiRQGuAEAAADDifFIi1cguAEAAADT
+4ImCQAgAALgBAAAAw40EtQAKAABIi1cgiwQQiceD5wN1GbgBAAAAifHT4IuSQAgAAIXC
+uAEAAAAPRfiJ+MNBVUFUVVNIg+wISIn7QYn0SItXILgBAAAAifHT4ImCgAgAAEG96AMA
+AESJ5kiJ3+gAAAAAhcB0D79kAAAA6AAAAABB/8114kSJ5kiJ3+gAAAAAhcAPhPIAAACD
+uzQEAAAHdDaDuzQEAAALdC2DuzQEAAAKdCSDuzQEAAAJdBuDuzQEAAAKD4XBAAAAZoO7
+OAQAAAMPh7MAAAC+AAAAAEiLQyCLkEyAAADHgACBAABkAAoASItLIMHqCg+3wg0AAAEA
+iYH8gAAASItDIIuATIAAAMHoCjnQdAf/xoP+AXa/SItTIIuCSIAAAA0AAEAAiYJIgAAA
+v8gAAADoAAAAAEiLUyCLgvyAAAAl///+/4mC/IAAAL1kAAAA6w7/zXQZvwoAAADoAAAA
+AESJ5kiJ3+gAAAAAhcB140iLUyCLgkiAAAAl//+//4mCSIAAAEiLQyDHgIAIAAAAAAAA
+RYXtD5XAD7bASIPECFtdQVxBXcNEi1wkGESLVCQoD7+HFC4AAEEBwUGD+UC4PwAAAEQP
+Q8iB4v8PAABBweEQRAnKidANAACAAEH2wiAPRdCLRCQgweAZJQAAAB4JwonQDQAAAAFB
+9sIBD0TCicKBygAAACBB9sIQD0XCiUYIQcHgFItMJFDB4RmLVCRAweIdi0QkSMHgG0EJ
+yEEJ0EEJwESJwA0AAAABQfbCAkQPRcBEiUYMi0QkEMHgECUAAA8AicKAzoBB9sJAD0XC
+iUYQi0QkCIlGFEGD+/90FUSJ2MHgDSUA4A8ACUYMgU4IAAAAQEH2wgx0TrgA/wB/D7ZM
+JDDT+LoAAAAAqAF0PkH2wgi4AAAAALoAAACAD0XCicKBygAAQABB9sIED0XCCUYIi0Qk
+OCX/fwAACUYQi0QkMMHgFAlGFLoBAAAAidDDi3wkEIXJdBuJyMHgFCUAAPAAC0YQgMyA
+iUYQidDB4AUJRhRFhcl0HUSJyMHgGCUAAAAPC0YQgMyAiUYQRInAweAKCUYUhf90GIn4
+weAcC0YQgMyAiUYQi0QkCMHgDwlGFLgBAAAAw4FOCAAAACDDhcl0FYtGDAnQicKAzhBF
+hcAPRMKJRgzrPEWFwHQax0YIAAAAAIlWDEGLQRCJRhBBi0EUiUYU6x3HRggAAAAAidCA
+zBCJRgzHRhAAAAAAx0YUAAAAAMdGHAAAAADHRhgAAAAAuAEAAADDSIny9kYcAXUGuA8A
+AADDi0YcJf4fAADR6GaJRiAPt0YaZolGIsZGJACLRhioAXUcqAJ0BMZGJAH2QhgIdASA
+TiQC9kIYBHQEgE4kBItCHCUAAGAAwegVg/gBdBqD+AFyDIP4AnQdg/gDdCXrNA+2QhSD
+4B/rKItCFCXgAwAAwegF6xiLQhQlAHwAAMHoCusLi0IUJQCADwDB6A+DyICIRiWLQhwl
+AOAfAMHoDYhGJotCGCXwAAAAwegEiEYni0IYJQAPAADB6AiIRiiLQhwlAABgAMHoFYP4
+AnQfg/gCdweD+AF0I+svg/gDdSqLQhAlAAAAD8HoGABGKItCECUAAPAAwegUAEYoi0IQ
+JQAADwDB6BAARiiLQhglAPAAAMHoDIhGKfZCHwEPlMC6AgAAACjCiFYquAAAAADDiwYj
+hxRXAACJBvfQIYcUVwAAw5BTSIn7SI23/CoAAOgAAAAASItDIMeAJIEAAAAAAABIi0Mg
+x4AogQAAAAAAAEiLQyDHQEAAAAAASItDIMeAMIEAAAAAAgBIi0Mgx4A4gQAAAAAAAlvD
+U0iJ+0iLRyDHQEAGAAAASI23/CoAAOgAAAAASItDIMeAJIEAAAAAAABIi0Mgx4AogQAA
+AAAAAFvDuQAAAABIY8FIa8BYD7eEB1AuAABmOwZ0N0hjwUhrwFhIjRQHTI2CUC4AAGaD
+ulAuAAAAdR4PtwZmiYJQLgAAD7dGAmZBiUACD7ZGBEGIQASJyMP/wYP5P3aruAAAAADD
+SIuHSC4AAMNIjYfAKgAAw1VTSIPsCEiJ+0iJ/bgAAAAAg780BAAABXUPZoO/OAQAAAl1
+BbgBAAAAiYM8LgAASI27UC4AAL4AFgAA6AAAAAC+AAAAAIO9NAQAAAZ3EUhjxkhrwFjG
+hANYLgAAB+sPSGPGSGvAWMaEA1guAAACSGPGSGvAWEiNDANIjYFgLgAAx0AE9AEAAMdA
+CMgAAADHQAzIAAAASI2BcC4AAMeBcC4AAGQAAADHQAgoAAAAx0AEBwAAAEiNgVAuAADG
+QAwAxkANAA+2UAiIUArGQAsAg7s8LgAAAHQVSI2BkC4AAMdABAz+vwDHQAg4/78A/8aD
+/j8Phk7///+DuzwuAAAAdChIi1Ugi4OULgAAiYIsgQAASItVIIuDmC4AAImCNIEAAEiJ
+7+gAAAAAx4NALgAAZAAAAIOLOC4AAAFIg8QIW13DU0iJ+4O/PC4AAAB0IegAAAAASItD
+IMeALIEAAAAAAABIi0Mgx4A0gQAAAAAAAFvDSIHsiAAAAEiJXCR4SImsJIAAAABIiftI
+if1Mi4dILgAAuAAAAACD/gYPh4AEAACJ8P8kxQAAAACJ17gAAAAAg/oED4dnBAAASItL
+IIuRUJgAAIHi//8P8In+i4SzlFYAAMHgFCUAAPAPCcKJkVCYAABIi0sgi5FcmAAAgeJ/
+gP//i4SzvFYAAMHgByWAfwAACcKJkVyYAABIi0sgi5FcmAAAgeL/f8D/i4SzqFYAAMHg
+DyUAgD8ACcKJkVyYAABIi0sgi5FYmAAAgeL//wP8i4Sz0FYAAMHgEiUAAPwDCcKJkViY
+AABBD7ZACTnHdgj/g8AqAADrD0EPtkAJOcdzBv+DxCoAAEGIeAnpmwMAAMdEJDh/AAAA
+x0QkPDIAAADHRCQwfwAAAMdEJDQoAAAAx0QkKH8AAADHRCQsTQAAAMdEJCB/AAAAx0Qk
+JEAAAADHRCQYHwAAAMdEJBwQAAAAx0QkED8AAADHRCQUMAAAAIXSD5XAD7b4SItzIIuW
+bJgAAIHi/z/g/4n5SMHhAotEDDjB4A4lAMAfAAnCiZZsmAAASItzIIuWbJgAAIHi//8f
+8ItEDDDB4BUlAADgDwnCiZZsmAAASItzIIuWaJgAAIHi//8B/4tEDCjB4BElAAD+AAnC
+iZZomAAASItzIIuWaJgAAIHi////gItEDCDB4BglAAAAfwnCiZZomAAASItzIIuGaJgA
+AIPg4ItUDBiD4h8J0ImGaJgAAEiLcyCLlmyYAACA5sCLRAwQweAIJQA/AAAJwomWbJgA
+AIX/dA9Ii1Mgi4JsmAAAg8gB6w1Ii1Mgi4JsmAAAg+D+iYJsmAAAhf8PlMAPtsBBD7ZQ
+DDnQD4QlAgAAhf90CP+F0CoAAOsG/4XUKgAAhf9BD5RADOkHAgAAx0QkCAgAAADHRCQM
+BgAAAIXSD5XAD7bwSItPIIuBCKIAAIPgwInyi1SUCIPiPwnQiYEIogAAQQ+2QA05xg+E
+xAEAAIX2dAj/h9gqAADrBv+H3CoAAEGIcA3pqQEAAMdEJGAAAAAAx0QkZAQAAADHRCRo
+CAAAAInWuAAAAACD+gIPh4YBAABIi08gi5FYmAAAgeL/D/z/ifCLRIRgweAMJQDwAwAJ
+womRWJgAAEEPtkALOcZ2CP+H4CoAAOsPQQ+2QAs5xnMG/4fkKgAAQYhwC+kyAQAAx0Qk
+QAIAAADHRCREBAAAAMdEJEgGAAAAx0QkTAgAAADHRCRQCgAAAMdEJFQMAAAAx0QkWA4A
+AADHRCRcEAAAAInWuAAAAACD+gcPh+cAAABIi08gi5EkmQAAgOIBifCLRIRAAcAl/gAA
+AAnCiZEkmQAAQQ+2QAo5xnYI/4fIKgAA6w9BD7ZACjnGcwb/h8wqAABBiHAK6ZcAAACF
+0nUmg6c4LgAA/ugAAAAASInf6AAAAACJxoHm//7//0iJ3+gAAAAA6232hzguAAABdWSD
+vzwuAAAAdD/oAAAAAInGgeb//v//SInf6AAAAABIi1Mgi4OULgAAiYIsgQAASItTIIuD
+mC4AAImCNIEAAEiJ3+gAAAAA6xXoAAAAAInGgc4AAQAASInf6AAAAACDjTguAAABuAEA
+AABIi1wkeEiLrCSAAAAASIHEiAAAAMNTSIn5SIufSC4AAMdDEAAAAACDvzwuAAAAdHyB
+exQAAMAAdgnHQ0QAAAAA6wu4AADAACtDFIlDRIF7HAAAwAB+CcdDSAAAAADrC7gAAMAA
+K0MciUNISItXIItDRImCLIEAAEiLVyCLQ0iJgjSBAABIi0cgx4AwgQAAAAACAEiLRyDH
+gDiBAAAAAAACSI2x/CoAAOgAAAAAx0M8AAAAAMdDQAAAAABbw0iD7BhIiVwkCEiJbCQQ
+SIn7SIu3oBQAAPaHOC4AAAEPhN8AAABIi69ILgAAgH0JA3cQD7ZVCf/CvgEAAADpvQAA
+AA+2RQo6RQhzBw+20P/C60CLjxArAACJyIPgf4P4P3YFjUF/6waLhxArAADB6Ac7RSh+
+JIB9DAB1O7oAAAAAvgIAAABIid/oAAAAALoAAAAAvgUAAADrYztFJH4mgH0MAHQSugEA
+AAC+AgAAAEiJ3+gAAAAAgH0LAXdID7ZVC//C6zNIid/oAAAAAIPoAoP4AXcwgH0MAHUS
+ugAAAAC+AgAAAEiJ3+gAAAAAgH0LAHQSugAAAAC+BAAAAEiJ3+gAAAAASItcJAhIi2wk
+EEiDxBjDSIPsGEiJXCQISIlsJBBIiftIi7egFAAA9oc4LgAAAXRzSIuvSC4AAIB9CQN3
+DQ+2VQn/wr4BAAAA61SLlxArAACJ0IPgf4P4P3YFjUJ/6waLhxArAADB6Ac7RSR+DoB9
+CwF3MA+2VQv/wusbSInf6AAAAACD6AKD+AF3GIB9CwB0EroAAAAAvgQAAABIid/oAAAA
+AEiLXCQISItsJBBIg8QYw0FUVVNIiftJifxIi7egFAAA6On2//9ImEhrwFhIjawYUC4A
+AEiJq0guAAD2gzguAAABD4SSAAAAg7tEBAAAAQ+EhQAAAP+D8CoAALoAAAAAvgEAAABI
+id/oAAAAALoAAAAAvgUAAABIid/oAAAAALoAAAAAvgQAAABIid/oAAAAALoAAAAAvgIA
+AABIid/oAAAAALoAAAAAvgMAAABIid/oAAAAAEiJ3+gAAAAAicaBzgABAABIid/oAAAA
+AEiJ3+je/P//6d4AAACAfQkAdBEPtlUJvgEAAABIid/oAAAAAIB9CgB0EQ+2VQq+BQAA
+AEiJ3+gAAAAAgH0MAHQTD5TCD7bSvgIAAABIid/oAAAAAIB9DQB0EQ+2VQ2+AwAAAEiJ
+3+gAAAAAgH0LAHQRD7ZVC74EAAAASInf6AAAAABBg7wkPC4AAAB0PkiJ3+gAAAAAicaB
+5v/+//9Iid/oAAAAAEiJ3+g5/P//SItDIMeAMIEAAAAAAgBIi0Mgx4A4gQAAAAAAAusg
+SInf6BP8//9Iid/oAAAAAInGgc4AAQAASInf6AAAAABbXUFcw0FUVVNIif1IifNJifxI
+i0cgx4AkgQAAAAAAAEiLRyDHgCiBAAAAAAAASI23/CoAAOgAAAAASIsDSImFECsAAItD
+CImFGCsAAEiLRSCLkCyBAACLiDSBAACJ0CUAAMAAPQAAwAB0DonIJQAAwAA9AADAAHVY
+SYucJEguAAArU0SJ0CtDPEEBhCToKgAAiVM8icorU0iJ0CtDQEEBhCTsKgAAiVNAi0M8
+O0MUdghIie/o6fv//4tDQDtDHHYISInv6Oz8//9Iie/oKvv//1tdQVzDU0iJ+0iLl0gu
+AACAfgURdRj/Qjz/h+gqAACLQjw7QhR2K+il+///6xyAfgUZdR7/QkD/h+wqAACLQkA7
+Qhx2Deia/P//SInf6Nj6//9bw0iD7AhIi5dILgAAi48QKwAAiciD4H+D+D92BY1Bf+sG
+i4cQKwAAwegHO0Iofyo7QiR+EoB6DAB0DLoBAAAAvgIAAADrN4B6CwB0DQ+2Ugv/yr4E
+AAAA6ySAegoAdA0PtlIK/8q+BQAAAOsRgHoJAHQQD7ZSCf/KvgEAAADoAAAAAEiDxAjD
+SItHIESLiOyAAABEi5DwgAAARIuA+IAAAEiLt0guAACDfjgAdAZEOUY4dg25AAAAAP+H
+9CoAAOswRInBK044RInQK0Y0RInKK1YwKcEp0UhjwUhpwCk5U19IweggicfB/w6JyJmJ
++SnRRIlGOESJTjBEiVY0icjDSIPsKEiJXCQISIlsJBBMiWQkGEyJbCQgSIn7SYn0SIn9
+SIO/SC4AAAAPhOwBAAD2hzsuAABAdB9Ii4egFAAAD7dAAiXQAAAAPdAAAAB1CEiJ1ugA
+AAAA9oM4LgAAAQ+EtwEAAEiDvUguAAAAD4SpAQAATIutSC4AAEmLBCRIiYUQKwAAQYtE
+JAiJhRgrAABIid/o8f7//0GJxIXAeQ7/hfgqAABIid/oLPn//0UBZRCDvTwuAAAAD4Si
+AAAASI21/CoAAEiJ3+gAAAAASItDIIuQLIEAAIuINIEAAEE7VURyDEE7TUhzTUE7VURz
+HEiLQyBBi1VEiZAsgQAASItDIMeAMIEAAAAAAgBBO01ID4MHAQAASItDIEGLVUiJkDSB
+AABIi0Mgx4A4gQAAAAAAAunmAAAAQStVRInQQStFPAGF6CoAAEGJVTyJykErVUiJ0EEr
+RUABhewqAABBiVVA9oM4LgAAAQ+ErwAAAIuFQC4AAI0EgEE5RRB2REGLVRCJ0EEPr0UY
+SGnA001iEEjB6CDB6AZBOUU8d3mJ0EEPr0UgSGnA001iEEjB6CDB6AZBOUVAd15Iid/o
+Rf3//+tUQYtFEDuFQC4AAHZQQQ+vRRRIacDTTWIQSMHoIMHoBkE5RTx2CkiJ3+iT+P//
+6yVBi0UQQQ+vRRxIacDTTWIQSMHoIMHoBkE5RUB2EEiJ3+h/+f//SInf6L33//9Ii1wk
+CEiLbCQQTItkJBhMi2wkIEiDxCjDkJC4AAAAAMO4AAAAAMO4AAAAAMNIg+wYSIlcJAhI
+iWwkEEiJ+7kAAAAAugEAAAC+EQAAAOgAAAAAhcB1N4GLOC4AAAAAAEC/AAABAOgAAAAA
+SImDcFYAAEiFwHUHuAIAAADrHkiJ3+gAAAAASInf6DYDAABmx4O6KgAA//+4AAAAAEiL
+XCQISItsJBBIg8QYw1NIifvHh3AEAAAAAAAASIO/cFYAAAB0HOgAAAAASIu7cFYAAOgA
+AAAASMeDcFYAAAAAAABbw0FXQVZBVUFUVVNIg+wISYn+SIn3SYnSSYnJTYnHRA+2biZm
+g34gAHQQSIN+LAB0CUiLRiwPthjrBbsAAAAARYTtdQiF2w+ERgEAAEEPtylFD7dhAkUP
+t1kQQQ+3cRJEidhIicJIweIFSo1EEgRBxkEMAYsAiUQkBItEJASFwHRJSo0EEosAiQQk
+ixQkiwQkwegQZjnQD4SKAAAAQf/DD7fNRInYugAAAAD38UGJ0//GQQ+3zInwugAAAAD3
+8YnWidDB4BBECdjrWESJ2EjB4AVKjQQQiwCJBCSLFCSLBCTB6BBmOdB0PonpZtHpD7fJ
+Qo0EGUQPt8W6AAAAAEH38EGJ0InwKchBD7fUidG6AAAAAPfxweIQRInACdCJBCSLBCRB
+iUEIRInYSMHgBUWIbAIYQYhcAhlBD7aWuioAAEGIVAIaD7dXImaB4v9/ZkGJVAIITYl8
+AhCJ8oHKAAD//0GJFAJBjUMBD7fVidG6AAAAAPfxZkGJURCNRgFBD7fUidG6AAAAAPfx
+ZkGJURJB/0EYSIPECFtdQVxBXUFeQV/DQVVBVFVTSIPsCEmJ80iJ1UiJy8cBAAAAAIB+
+DAAPhOEAAABED7dGBA+3TgZED7cmRA+3bgJBD7fASMHgBUiNBDjHQAQBAAAASYnBiwCJ
+wkGLAcHoEEG6AAAAAGY5wg+EpgAAAGY50XVeQQ+38EjB5gVIi0Q3CEiJRQBIi0Q3EEiJ
+RQhIi0Q3GEiJRRBBD7fA/8CZQff8ZkGJUwQPt8mNQQGZQff9ZkGJUwZB/0MUicjB4BAJ
+yIkEN0HHAQAAAABBugEAAADrQ8cDAQAAAEGLQwiJRCQERInCic6LRCQEQYnAi0QkBInB
+wekQZkE50A+FQf///0G6AAAAAGY58XQL6TH///9BugAAAABEidBIg8QIW11BXEFdw1NI
+iftIjb9QTgAAvhwIAADoAAAAAMeDYFYAABQAAADHg2RWAAAUAAAAW8NTSIn7SIu/cFYA
+AL4AAAEA6AAAAABIjbt4VgAAvhwAAADoAAAAAGbHg3hWAAAACGbHg3pWAAABCFvDSIPs
+GEiJHCRIiWwkCEyJZCQQSIn9SIuHoBQAAEyNp1BOAAD3hzguAAAAAADAdFgPt0ACJdAA
+AAA90AAAAHVd6AAAAABIi0Ugi5hUmQAAQceEJBgIAAAFAAAAgcsAABQASInv6AAAAACJ
+xoHOAAIAAEiJ7+gAAAAASItFIIPLAYmYVJkAAOsV6AAAAACJxoHm//3//0iJ7+gAAAAA
+SIscJEiLbCQITItkJBBIg8QYw1NIifvoAAAAAInGgeb//v//SInf6AAAAABIi1Mgi4JU
+mQAAg+D+iYJUmQAAW8NTSIn7SIO/oBQAAAB0J+gAAAAA94M4LgAAAAAAwHQJg7tEBAAA
+BnQNgOT9icZIid/oAAAAAFvDU0iJ+0iLh6AUAAAPt0ACJdAAAAA90AAAAHU46AAAAACJ
+xoHm//7//0iJ3+gAAAAASItTIIuCVJkAAIPg/omCVJkAAEiJ3+gAAAAASInf6F/+//9b
+w0iD7AhJidBIi4egFAAAD7dAAiXQAAAAPdAAAAB1E0iNj3hWAABIi5dwVgAA6En7//9I
+g8QIw0FXQVZBVUFUVVNIg+w4SYn+SYn3SYn8Qb0AAAAAx0QkDAAAAABIjZ9QTgAA6UwD
+AACDfCQMAHQITIn36AAAAACLbCQQRA+2RCQgD7ZMJCGBewT/AAAAdRuNkf8AAACJUwSB
++f8AAAC4/wAAAInBD0XK616B+f8AAAB1IIF7BP4BAAB0EoF7BP0CAAB0CYF7BPwDAAB1
+BQFLBOs2gXsE+wQAAHUXgfn/AAAAdA+BwfsEAADHQwQAAAAA6xaBewT/AAAAdgqJSwS5
+/wAAAOsDiUsEjYH//v//g/gVdhaNgdn+//+D+B52C42BAPv//4P4FHdCvwAAAACB+QAF
+AAC6/wAAALj7BAAAicYPQvJmOytzBb8AgP//D7fVD7fHAcIPtwMpwg+3xonOKcY58rgB
+AAAAD0XIg/kKD4ZAAgAAgfn/AAAAdQxBg/gSuAIAAAAPQ8iNgQD7//+D+BR2C42Bwv7/
+/4P4B3cQuQMAAACDQxQCg4MECAAAAo1B/z39AQAAD4f4AQAAicj/RIMIjUHfg/gLdlCN
+QcuD+AV2SI1BgoP4DnZAjYFz////g/gTdjWNgUP///+D+BV2Ko2BmP7//4P4FHYfjYH/
+/v//g/gNdhSNgdn+//+D+Ad2CYP5Aw+FlwEAAIuTBAgAAI1CAYmDBAgAAEGD+A92D4nI
+/0SDCI1CAomDBAgAAEgPt4MICAAAicqLRIMIO0STCHM5D7eDCggAADnBdAkPt4MKCAAA
+6wcPt4MMCAAAZomDDAgAAA+3gwgIAABmiYMKCAAAZomLCAgAAOtnD7eDCAgAADnBdCtI
+D7eDCggAAInKi0SDCDtEkwhzFw+3gwoIAABmiYMMCAAAZomLCggAAOsxD7eDCggAADnB
+dCYPt4MICAAAOcF0G0gPt4MMCAAAicqLRIMIO0STCHMHZomLDAgAALkDAAAAi7MECAAA
+ugAAAACJ0GaDvEMICAAAAHQ7hdJ1JWaDuwgIAAADdRuLQxQ7QxBzE4P4BnYOA0MQQQHF
+AYMECAAA6xSJ0EgPt4RDCAgAAEQDbIMI6wL/yf/Cg/oDdq+LgwQIAAA7gxAIAAB2SkSJ
+6sHiB4nID6+DFAgAAA+vgwQIAAA5wnYwQYBPBAG+BgAAAEiNuwgIAADoAAAAAMeDBAgA
+AAAAAAC+/AcAAEiNewjoAAAAAOsGibMECAAAZokrSYu8JHBWAABIjUwkDEiNVCQQSY20
+JHhWAADoAAAAAIXAD4WN/P//SIPEOFtdQVxBXUFeQV/DSIuHoBQAAA+3AGaJBkiLh6AU
+AACASAQIgE4ECEiLh6AUAAAPt0ACZolGAkiLh6AUAAAPtkAEiEYESIuHoBQAAA+2QAWI
+RgW4AAAAAMOQkJBBV0FWQVVBVFVTSIPsCEmJ/EGJ14nLvQAAAABJx8YAAAAAQYn1SGPF
+SI0EQEGLDMZJi1QkIEmNREUAQYsEhokEEf/D9sM/dQq/AQAAAOgAAAAA/8WD/Q12zL0A
+AAAASGPFiwzFAAAAAEmLVCQgiwTFAAAAAIkEEf/D9sM/dQq/AQAAAOgAAAAA/8WD/Ud2
+z70AAAAAScfGAAAAAEWJ/UhjxUiNBEBBiwyGSYtUJCBMAehBiwSGiQQR/8P2wz91Cr8B
+AAAA6AAAAAD/xYP9P3bOSIPECFtdQVxBXUFeQV/DQVVBVFVTSIPsCEmJ/EmJ9Q+3VgIP
+tzboAAAAAEGAfQIAeVxID7/YSI0EW0iNHIUAAAAAi3sEvggAAADoAAAAAInFgeX/AAAA
+weUFiwPB4AQJxQ+3SwhJi1QkIIuCBKIAAGZBgX0AtAl1BYPIEOsISYtUJCCD4O+JggSi
AADrB4nBvQAAAABmgfmQAH8F9sEBdB8Pv/mD7xi+CAAAAOgAAAAAicaB5v8AAAC4AQAA
AOsmD7/5g+8YifjB6B8Bx9H/vggAAADoAAAAAInGgeb/AAAAuAAAAADB5gIBwAnGgc4B
-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
+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
-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
+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
-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
+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
-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
+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
-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
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAoAFAAeADIARgBV
-AFoAXwBkAAAAAAAAAAAAAAAAAAoAFAAeACgAMgA8AEYAUABaAGQAAAAAAAAAAAAAAMIA
-AADEAAAAxQAAANAAAADaAAAA5AAAAAAAAAAAAAAAwgAAAMMAAADUAAAA8gAAAA0BAAAo
-AQAAAAAAAAAAAABOT05FAAAAAAAA/wFGQ0MAAAAAABAASANNS0sAAAAAAEAAiAFFVFNJ
-AAAAADcAOgMAAAAAAAAAAAAAAAAAAAAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
-AAEAAAABAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAA
-AAAIAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAADAADAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAACAARwAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAzADAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
-AAEAAAAAAAAAJAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAACgA
-OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAfADAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAMAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AQAAAAAAAAABAAAAAAAAAHAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAA
-AAAAAAA4ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAVABVAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAEQAVQAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAEAAAABAAAAAQAAAAAAAABMAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAYABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAA
-AGQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAB8ACAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAmABYAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAEAAAAAAAAAAAAAAJwAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAA
-AQAAAAAAAACqABAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAvAAD
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAL8ANgAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAADEADcAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
-AAAAAQAAAAEAAAAAAAAAywA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAANAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAADWABAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAA2gADAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAADIDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
-AAAAAQAAAAAAAADeAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAA
-6QA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAPYANwAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAD6ADYAAAAAAAAAAAAAAAAAAAAAAAAA
-AAABAAAAAAAAAAEAAAAAAAAA/wA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
-AAAAAAAAAAwBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAUATcA
-AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAALAEDAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAEABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
-AAABAAAAAQAAAAAAAABUAQMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAA
-AAAAWAEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAFwBNQAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABgATcAAAAAAAAAAAAAAAAAAAAA
-AAAAAAABAAAAAAAAAAEAAAAAAAAAZAEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
-AAABAAAAAAAAAGgBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABs
-AVIAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAdAE3AAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAHgBAwAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEAAAAAAAAAAQAAAAAAAAB8ATcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEA
-AAAAAAAAiAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAIkBQQAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACKAUgAAAAAAAAAAAAAAAAA
-AAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAiwFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
-AAAAAAAAAAAAAAAAAIwBSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA
-AACNAUsAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkAEDAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAI4BAwAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAEAAAAAAAAAAQAAAAAAAACYAUUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAA
-AAEAAAAAAAAAmgFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAJsB
-SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACeAQMAAAAAAAAAAAAA
-AAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAArAEDAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AQAAAAAAAAABAAAAAAAAAKYBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAA
-AAAAAAC2ATUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAuAE3AAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAALoBNwAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAEAAAAAAAAAAQAAAAAAAAC+ASEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
-AQAAAAEAAAAAAAAAJwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAA
-AMoBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkARAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAA7AEwAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAQAAAAEAAAABAAAAAAAAAPgBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA
-AQAAAAAAAAAQAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAKgIi
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAEICNwAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
-AAAAAAAAAAEAAAAAAAAASgIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAA
-AAAAAE8CEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAABcAgMAAAAA
-AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAYAIRAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAQAAAAEAAAABAAAAAAAAAGgCNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
-AAAAAQAAAAAAAABsAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAA
-dgIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAHoCAwAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAACCAgMAAAAAAAAAAAAAAAAAAAAAAAAA
-AAABAAAAAAAAAAEAAAAAAAAAgwIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
-AAAAAAAAAKoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAC+AkIA
-AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAvwI2AAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAMECNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
-AAAAAAAAAQAAAAAAAADGAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAA
-AAAA1AI3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAPACNwAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAD0AjUAAAAAAAAAAAAAAAAAAAAA
-AAAAAAABAAAAAAAAAAEAAAAAAAAA+AIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
-AAABAAAAAAAAAJ4ARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAD8
-AkUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAADAMwAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAABQDNgAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEAAAAAAAAAAQAAAAAAAAAYAzYAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEA
-AAAAAAAAJAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAABADAwAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAA6AzcAAAAAAAAAAAAAAAAA
-AAAAAAAAAAABAAAAAAAAAAEAAAAAAAAASAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
-AAEAAAABAAAAAAAAAFoDRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAA
-AABcAzoAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAXgNWAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAMACAwAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAEAAAAAAAAAAQAAAAAAAAB3AwMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
-AAEAAAAAAAAAzAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wH/AQMAmAGZAQcAmAEwCwgAmAEwDCAAIAEQ
-CiEAIAGZASIAIAEwDDoAYAEQCjcAMAGZATUAMAKZATYAMAOZATAAMASZATkAMAWZATQA
-MAaZATIAMAOZATEAMAOZAREAEAGZARAAEAEQClIAUAGZAUUAUAKZAUcAUAOZAUIAUASZ
-AVgAUAWZAVUAUAEwDFYAUAIwDEkAUAJQDUAAQAFACkEAQAFACkMAQAJACkgAQAEQCkoA
-QAFACksAQAFACmAAYABgAGEAYQBhAGIAYgBiAGMAYwBjAGQAZABkAGUAZQBlAGYAZgBm
-AGcAZwBnAGgAaABoAGkAaQBpAGoAagBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAP8BAgAQAAAURBYFBnEWwRYFBgAAAAAAAAAAAAAAAFABAQAQAHEWwRYeAAAAAAAA
-AAAAAAAAAAAAAAAAAFACAQAQAHEWrRYXAAAAAAAAAAAAAAAAAAAAAAAAAFADAgAQAKAU
-yBQRBnEWrRYeBgAAAAAAAAAAAAAAAFAEAgAQADwUeBQUAHEWwRYUAAAAAAAAAAAAAAAA
-AFAFAgAQAHEWwRYRAAAAAAAAAAAAAAAAAAAAAAAAADABAgAwADwUyBQUAHwVRBYbAAAA
-AAAAAAAAAAAAADACAQAwADwUeBQSAAAAAAAAAAAAAAAAAAAAAAAAADADAQAwADwUyBQU
-AAAAAAAAAAAAAAAAAAAAAAAAADAEAQAwADwUyBQSAAAAAAAAAAAAAAAAAAAAAAAAADAF
-AQAwADwUeBQPAAAAAAAAAAAAAAAAAAAAAAAAADAGAgAwADwUoBQXAHwVRBYeAAAAAAAA
-AAAAAAAAABABAwAQAIwUyBQXBjwUeBQRBnEWwRYeBgAAAAAAACABAgAQADwUyBQXBnEW
-wRYeBgAAAAAAAAAAAAAAAGABBAAQADwUeBQRBowUyBQUBnwVRBYUBnEWwRYeBkABAQBA
-ADIUbhQXAAAAAAAAAAAAAAAAAAAAAAAAAEACAwBAADIUbhQXALAT2BMXADgTdBMXAAAA
-AAAAAAAA/wECABMAChQmFgUGHhQSFgUGAAAAAAAAAAAAAAAAEAEDABMAghSqFBcGWhRa
-FBEGgBaoFh4GAAAAAAAAYAEDABMAghSqFBcGWhRaFBEGgBaoFh4GAAAAAAAAAAAAAAAA
-YAEEABMAeBSgFBcGUBRQFBEGhRatFh4GpBUcFh4GAAAQCgEAEQAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAP8BAwD/AAgJRAkFBoUJhQkFBtAJrAoFBgAAAAAAABAKAQAUAIUJ
-hQkUBgAAAAAAAAAAAAAAAAAAAAAAADAKAQA0AIUJhQkUBgAAAAAAAAAAAAAAAAAAAAAA
-ADALAQA0AIUJhQkUBgAAAAAAAAAAAAAAAAAAAAAAADAMAQA0AIUJhQkUBgAAAAAAAAAA
-AAAAAAAAAAAAAEAKAQBEAIUJhQkUBgAAAAAAAAAAAAAAAAAAAAAAAJkBAQA0AIUJhQkU
-BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wEEAP8ACAlECQUGbAmoCQUG
-tAm0CQUG0AmsCgUGUA0CAP8AbAmoCRQACAlECRQAAAAAAAAAAAAAAAAAMAoBAP8AmQmo
-CRQAAAAAAAAAAAAAAAAAAAAAAAAAMAsBADEAgAmKCRQAAAAAAAAAAAAAAAAAAAAAAAAA
-MAwBADEAbAmoCR4AAAAAAAAAAAAAAAAAAAAAAAAAEAoBABEAbAmeCRsGAAAAAAAAAAAA
-AAAAAAAAAAAAQAoCAEEAbAmoCRQAtAm0CRQAAAAAAAAAAAAAAAAAmQEBADEAbAmoCRQA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAYAAAAAEAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAA
+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
+JBBIifVIifu/rAAAAOgAAAAASImDCC4AAEiFwHQgx4PwVgAAAAEAAL8AAQAA6AAAAABI
+iYPoVgAASIXAdQ7HRQACAAAAuAAAAADrXUjHgyArAAAAAAAASMeDKCsAAAAAAABIx4Mw
+KwAAAAAAAEjHgzgrAAAAAAAASMeDQCsAAAAAAABIx4NIKwAAAAAAAEjHg1ArAAAAAAAA
+SMeDWCsAAAAAAAC4AQAAAEiLXCQISItsJBBIg8QYw5CQAAAAAAAAAAAAAAAAAAAAAChQ
+FixYKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKD/o/+e/6D/o/+g/wAAAAAA
+AAUACgAUAB4AMgBGAFUAWgBfAGQAAAAAAAAAAAAAAAAACgAUAB4AKAAyADwARgBQAFoA
+ZAAAAAAAAAAAAAAAwgAAAMQAAADFAAAA0AAAANoAAADkAAAAAAAAAAAAAADCAAAAwwAA
+ANQAAADyAAAADQEAACgBAADPAAAAygAAAAIAUCEBAEABBACgAAgAwAAgANAAQABQAQAA
+AAAAAAAAJAGYGQAiBQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAABmAAAAAQAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAACYAABH
+AAAACJgAAAAAAAAMmAAApo6ECRCYAAAA4DI9FJgAAGsHAAAcmAAAAAAAACCYAAAAAgIC
+JJgAAA4OAAAomAAAAQICCiyYAAD8bwMAMJgAAAAAAAA0mAAADg4AADiYAAAHAAAAPJgA
+AAABAgBAmAAAAABjiUSYAACcFnITSJgAADO2GABMmAAAPGGEElCYAADguOgNVJgAAFlI
+BwBYmAAAur6AflyYAABeZjoxYJgAAAgdAABkmAAAAM4BAGiYAACQQZpAcJgAAA8AAAB0
+mAAAgAAAAHiYAAAEAAAAAJkAAAAAAAAEmQAAAAAAAAiZAAAAAAAADJkAAAAAgAAQmQAA
+AwAAAACbAAAAAAAABJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAA
+ABibAAAoAAAAHJsAAAQAAAAgmwAAJAAAACSbAAAUAAAAKJsAADQAAAAsmwAADAAAADCb
+AAAsAAAANJsAAAIAAAA4mwAAIgAAADybAAASAAAAQJsAADIAAABEmwAACgAAAEibAAAq
+AAAATJsAAAEAAABQmwAAIQAAAFSbAAARAAAAWJsAADEAAABcmwAACQAAAGCbAAApAAAA
+ZJsAAAUAAABomwAAJQAAAGybAAAVAAAAcJsAADUAAAB0mwAADQAAAHibAAAtAAAAfJsA
+AAMAAACAmwAAIwAAAISbAAATAAAAiJsAADMAAACMmwAACwAAAJCbAAArAAAAlJsAAAcA
+AACYmwAAJwAAAJybAAAXAAAAoJsAADcAAACkmwAADwAAAKibAAAvAAAArJsAAC8AAACw
+mwAALwAAALSbAAAvAAAAuJsAAC8AAAC8mwAALwAAAMCbAAAvAAAAxJsAAC8AAADImwAA
+LwAAAMybAAAvAAAA0JsAAC8AAADUmwAALwAAANibAAAvAAAA3JsAAC8AAADgmwAALwAA
+AOSbAAAvAAAA6JsAAC8AAADsmwAALwAAAPCbAAAvAAAA9JsAAC8AAAD4mwAALwAAAPyb
+AAAvAAAAAJoAAB0AAAAEmgAAXQAAAAiaAACdAAAADJoAAN0AAAAQmgAAHQEAABSaAAAh
+AAAAGJoAAGEAAAAcmgAAoQAAACCaAADhAAAAJJoAADEAAAAomgAAcQAAACyaAACxAAAA
+MJoAABwAAAA0mgAAXAAAADiaAAApAAAAPJoAAGkAAABAmgAAqQAAAESaAAAgAAAASJoA
+ABkAAABMmgAAWQAAAFCaAACZAAAAVJoAADAAAABYmgAABQAAAFyaAAAlAAAAYJoAAGUA
+AABkmgAApQAAAGiaAAAoAAAAbJoAAGgAAABwmgAAHwAAAHSaAAAeAAAAeJoAABgAAAB8
+mgAAWAAAAICaAACYAAAAhJoAAAMAAACImgAABAAAAIyaAABEAAAAkJoAAIQAAACUmgAA
+EwAAAJiaAAASAAAAnJoAAFIAAACgmgAAkgAAAKSaAADSAAAAqJoAACsAAACsmgAAKgAA
+ALCaAABqAAAAtJoAAKoAAAC4mgAAGwAAALyaAAAaAAAAwJoAAFoAAADEmgAAmgAAAMia
+AADaAAAAzJoAAAYAAADQmgAABgAAANSaAAAGAAAA2JoAAAYAAADcmgAABgAAAOCaAAAG
+AAAA5JoAAAYAAADomgAABgAAAOyaAAAGAAAA8JoAAAYAAAD0mgAABgAAAPiaAAAGAAAA
+/JoAAAYAAADUmAAAIAAAAMyYAAAEAAAAyJgAAAYBBgCcmAAAbQAAAMCYAAAAAAAA0JgA
+ABQAAAAAAAAAAAAAAAkJAAAAAAACAgYGBgYGBgICAAAAAwAGAAkAPAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAADwAAAAzAAAAAAAAAAAAAAAAAAAAAriAAAAIAAACgIAAAEY
+AAABAAAAQBgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRXGQAiBQYAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAGcAAAABAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAEAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAACAAAAAAAAAAAAAAAKAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAAEAAAAAAAAAAAAAAAgAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAABwAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUAAAAAAAAAAAAAAAAAAAAFAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAAAAAAAAAAAAAAAAAAgA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqAAAAAAAAAAAAAAAAAAAA
-BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAEA
-AAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAAA
-AQAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGcA
-AAABAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-aAAAAAEAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AABhAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAGIAAAACAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAYwAAAAEAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAABkAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAGUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAaQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAABqAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAGIAUABAAAAAAAAAAAAABABSANQAQAAAAAA
-AAAAAAAwARACQAEAAAAAAAAAAAAAAgBQAQEAQAEEAKAACADAACAA0AAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjBSg
-FLQUyBQAAAAAAAAAAHwVkBWkFbgVzBXgFfQVCBYcFjAWRBYAAAAAAAAAAAAAQAECAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAGABOgBAAQAAAAAAAAAAAAAwAQAAQAEAAAAAAAAAAAAAMAIAAEABAAAAAAAA
-AAAAADADAABAAQAAAAAAAAAAAAAwBAAAQAEAAAAAAAAAAAAAMAUAAEABAAAAAAAAAAAA
-ADAGAABAAQAAAAAAAAAAAAAwCgAAQAEAAAAAAAAAAAAAMAsAAEABAAAAAAAAAAAAADAM
-AABAAQAAAAAAAAAAAABoAGgAQAEAAAAAAAAAAAAAQAJDAEABAAAAAAAAAAAAAEAKQwCg
-AAAAAAAAAAAAAABACkMAwAAAAAAAAAAAAAAAQAFBAEABAAAAAAAAAAAAAEAKQQCgAAAA
-AAAAAAAAAABACkEAwAAAAAAAAAAAAAAAQABDAEEASABKAEsAAAAAACQBmBkAKREEAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2049,36 +2389,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAmAAARwAAAAiYAAAAAAAADJgAAKaOhAkQmAAAAOAyPRSYAABrBwAAHJgAAAAA
-AAAgmAAAAAICAiSYAAAODgAAKJgAAAECAgosmAAA/G8DADCYAAAAAAAANJgAAA4OAAA4
-mAAABwAAADyYAAAAAQIAQJgAAAAAY4lEmAAAnBZyE0iYAAAzthgATJgAADxhhBJQmAAA
-4LjoDVSYAABZSAcAWJgAALq+gH5cmAAAXmY6MWCYAAAIHQAAZJgAAADOAQBomAAAkEGa
-QHCYAAAPAAAAdJgAAIAAAAB4mAAABAAAAACZAAAAAAAABJkAAAAAAAAImQAAAAAAAAyZ
-AAAAAIAAEJkAAAMAAAAAmwAAAAAAAASbAAAgAAAACJsAABAAAAAMmwAAMAAAABCbAAAI
-AAAAFJsAACgAAAAYmwAAKAAAABybAAAEAAAAIJsAACQAAAAkmwAAFAAAACibAAA0AAAA
-LJsAAAwAAAAwmwAALAAAADSbAAACAAAAOJsAACIAAAA8mwAAEgAAAECbAAAyAAAARJsA
-AAoAAABImwAAKgAAAEybAAABAAAAUJsAACEAAABUmwAAEQAAAFibAAAxAAAAXJsAAAkA
-AABgmwAAKQAAAGSbAAAFAAAAaJsAACUAAABsmwAAFQAAAHCbAAA1AAAAdJsAAA0AAAB4
-mwAALQAAAHybAAADAAAAgJsAACMAAACEmwAAEwAAAIibAAAzAAAAjJsAAAsAAACQmwAA
-KwAAAJSbAAAHAAAAmJsAACcAAACcmwAAFwAAAKCbAAA3AAAApJsAAA8AAAComwAALwAA
-AKybAAAvAAAAsJsAAC8AAAC0mwAALwAAALibAAAvAAAAvJsAAC8AAADAmwAALwAAAMSb
-AAAvAAAAyJsAAC8AAADMmwAALwAAANCbAAAvAAAA1JsAAC8AAADYmwAALwAAANybAAAv
-AAAA4JsAAC8AAADkmwAALwAAAOibAAAvAAAA7JsAAC8AAADwmwAALwAAAPSbAAAvAAAA
-+JsAAC8AAAD8mwAALwAAAACaAAAdAAAABJoAAF0AAAAImgAAnQAAAAyaAADdAAAAEJoA
-AB0BAAAUmgAAIQAAABiaAABhAAAAHJoAAKEAAAAgmgAA4QAAACSaAAAxAAAAKJoAAHEA
-AAAsmgAAsQAAADCaAAAcAAAANJoAAFwAAAA4mgAAKQAAADyaAABpAAAAQJoAAKkAAABE
-mgAAIAAAAEiaAAAZAAAATJoAAFkAAABQmgAAmQAAAFSaAAAwAAAAWJoAAAUAAABcmgAA
-JQAAAGCaAABlAAAAZJoAAKUAAABomgAAKAAAAGyaAABoAAAAcJoAAB8AAAB0mgAAHgAA
-AHiaAAAYAAAAfJoAAFgAAACAmgAAmAAAAISaAAADAAAAiJoAAAQAAACMmgAARAAAAJCa
-AACEAAAAlJoAABMAAACYmgAAEgAAAJyaAABSAAAAoJoAAJIAAACkmgAA0gAAAKiaAAAr
-AAAArJoAACoAAACwmgAAagAAALSaAACqAAAAuJoAABsAAAC8mgAAGgAAAMCaAABaAAAA
-xJoAAJoAAADImgAA2gAAAMyaAAAGAAAA0JoAAAYAAADUmgAABgAAANiaAAAGAAAA3JoA
-AAYAAADgmgAABgAAAOSaAAAGAAAA6JoAAAYAAADsmgAABgAAAPCaAAAGAAAA9JoAAAYA
-AAD4mgAABgAAAPyaAAAGAAAA1JgAACAAAADMmAAABAAAAMiYAAAGAQYAnJgAAG0AAADA
-mAAAAAAAANCYAAAUAAAAAAAAAAAAAAAJCQAAAAAAAgIGBgYGBgYCAgAAAAMABgAJADwA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAMwAAAAAAAAAAAAAAAAAAAAK4gAA
-ACAAAAoCAAABGAAAAQAAAEAYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE
-VxkAKREEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2110,7 +2420,84 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAABsCY8JtAkAAP///////wAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAACAAAAAgAAAAQAAAAEAAAAAAAAYAAAAGAAAABgAwAAAAFQAAABUA
+AAAdAAAAFQAAAEAQAAAP/C8AD/wvAB/8LwAP/C8ARBAAAA/8LwAP/C8AH/wvAA/8LwBI
+EAAAD/wvAA/8LwAf/C8AD/wvAEwQAAAP/C8AD/wvAB/8LwAP/C8AUBAAAA/8LwAP/C8A
+H/wvAA/8LwBUEAAAD/wvAA/8LwAf/C8AD/wvAFgQAAAP/C8AD/wvAB/8LwAP/C8AXBAA
+AA/8LwAP/C8AH/wvAA/8LwBgEAAAD/wvAA/8LwAf/C8AD/wvAGQQAAAP/C8AD/wvAB/8
+LwAP/C8AcBAAAGgBAADgAQAAuAEAAGgBAAAwEAAAMAIAAOABAACwAAAAMAIAALAQAACY
+DQAAgBEAAEgfAACYDQAA8BAAAOCgAABoQAEAgFgAAOCgAAAUgAAAAAQABAAIAAgAMAAg
+AAQABByAAACnj40Oz4+NDpWPYAGnj40OBJgAAAAAAAADAAAAAAAAAAAAAAAgmAAAAAIC
+AgACAgIAAgECAAICAiSYAAAODgAADg4AAAcHAAAODgAAKJgAAAEAAgoBAAIKAAABBQEA
+Ago0mAAADg4AAA4OAAAODgAADg4AADiYAAAHAAAABwAAAAsAAAALAAAARJgAAJwWchOl
+FnITqBZyE5wWchNImAAAZ7oYAGe6GABpuhgAaboYAFCYAADgtCgM4LQoDOC0KAzgtCgM
+WJgAAC4NgH4uDYB+Lg3Afi4NgH5cmAAAXl03MV5dNzFeXToxXl03MWCYAAAQvQAAEL0A
+ADi9AAAQvQAAZJgAAADOAQAAzgEAAM4BAADOAQAUmQAAECcAABAnAAB8FQAAECcAABiZ
+AACQAQAAkAEAAIQAAACQAQAARJkAACAQ4G8gEOBvIAngbyAQ4G+AoQAA/xT/Bf8U/wX/
+FP8F/xn/BdSYAAAQAAAAFAAAABAAAAAQAAAAAAAAAAwAAAAAAAAAKAAAAJychIQsAAAA
+fHx8fDQAAAAFAAAAQAAAAAAAAABEAAAACAAAAEgAAAAIAAAATAAAABAAAABQAAAAAAAA
+AFQAAAAfAAAAAAgAAAAAAAAECAAAAAAAAAgIAAAAAAAADAgAAAAAAAAQCAAAAAAAABQI
+AAAAAAAAGAgAAAAAAAAcCAAAAAAAACAIAAAAAAAAJAgAAAAAAAAwEgAAAAAAAASAAAAA
+AAAACIAAAAAAAAAMgAAAAAAAABiAAAAAAAAAJIAAAAAAAAAogAAAMAAAACyAAAD//wcA
+MIAAAP///wE0gAAAMQAAADiAAAAAAAAAPIAAAAAAAABAgAAAAAAAAESAAAACAAAASIAA
+AAAAAABUgAAAAAAAAFiAAAAAAAAACJgAAAAAAAAMmAAAk5CELRCYAAAA4DJ9FJgAAGsP
+AAAcmAAAAAAAACyYAAD+bwIAMJgAAAAAAAA8mAAAAAECAECYAAB6AWogTJgAADxhhBJU
+mAAAWQgAAGiYAACQQZpAbJgAAIGwDAVwmAAADwAAAHSYAACAAAAAeJgAAAwAAAAAmQAA
+AAAAAASZAAAAAAAACJkAAAAAAAAMmQAAAACAABCZAAABAAAAHJkAACoJAAAgmQAAAAAA
+ACSZAAAFigUAKJkAAAEAAAAsmQAAAAAAADCZAAAAAAAANJkAAAAAAAA4mQAAAAAAADyZ
+AAA/AAAAQJkAAAQAAABImQAAAAAAAEyZAAAAAAAAUJkAAAAAAABUmQAATPFQXViZAAAY
+AAAAXJkAAI5qSwCEoQAA/wX/BoihAAD/B/8HjKEAAP8I/wiQoQAA/wn/CZShAAD/Cv8K
+mKEAAP8L/wucoQAA/wz/DKChAAD/Df8NpKEAAP8O/w+ooQAA/xL/EqyhAAD/E/8UsKEA
+AP8V/xa0oQAA/xf/GbihAAD/Gv8bvKEAAP8d/x7AoQAA/yD/I8ShAAD/Jf8nyKEAAP8p
+/yzMoQAA/y//MdChAAD/NP831KEAAP86/zrYoQAA/zr/OtyhAAD/Ov864KEAAP86/zrk
+oQAA/zr/OuihAAD/Ov867KEAAP86/zrwoQAA/zr/OvShAAD/Ov86+KEAAP86/zr8oQAA
+/zr/OgCbAAAAAAAABJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAAKAAA
+ABibAAAEAAAAHJsAACQAAAAgmwAAFAAAACSbAAA0AAAAKJsAAAwAAAAsmwAALAAAADCb
+AAACAAAANJsAACIAAAA4mwAAEgAAADybAAAyAAAAQJsAAAoAAABEmwAAKgAAAEibAAAG
+AAAATJsAACYAAABQmwAAFgAAAFSbAAA2AAAAWJsAAA4AAABcmwAALgAAAGCbAAABAAAA
+ZJsAACEAAABomwAAEQAAAGybAAAxAAAAcJsAAAkAAAB0mwAAKQAAAHibAAAFAAAAfJsA
+ACUAAACAmwAAFQAAAISbAAA1AAAAiJsAAA0AAACMmwAALQAAAJCbAAADAAAAlJsAACMA
+AACYmwAAEwAAAJybAAAzAAAAoJsAAAsAAACkmwAAKwAAAKibAAArAAAArJsAACsAAACw
+mwAAKwAAALSbAAArAAAAuJsAACsAAAC8mwAAKwAAAMCbAAArAAAAxJsAACsAAADImwAA
+KwAAAMybAAArAAAA0JsAACsAAADUmwAAKwAAANibAAArAAAA3JsAACsAAADgmwAAKwAA
+AOSbAAArAAAA6JsAACsAAADsmwAAKwAAAPCbAAArAAAA9JsAACsAAAD4mwAAAgAAAPyb
+AAAWAAAA1JgAACAAAADYmAAAaBBgAAAAAAAAAAAAAJoAAKkBAAAAAAAABJoAAOkBAABA
+AAAACJoAACkAAACAAAAADJoAAGkAAABQAQAAEJoAAJkBAACQAQAAFJoAANkBAADQAQAA
+GJoAABkAAAAQAAAAHJoAAFkAAABEAAAAIJoAAJkAAACEAAAAJJoAAKUBAABIAQAAKJoA
+AOUBAACIAQAALJoAACUAAADIAQAAMJoAAMgBAAAUAAAANJoAAAgAAABCAAAAOJoAAEgA
+AACCAAAAPJoAAIgAAAB4AQAAQJoAAJgBAAC4AQAARJoAANgBAAD4AQAASJoAABgAAAAS
+AAAATJoAAFgAAABSAAAAUJoAAJgAAACSAAAAVJoAAKQBAAB8AQAAWJoAAOQBAAC8AQAA
+XJoAACQAAAD8AQAAYJoAAGQAAAAKAAAAZJoAAKQAAABKAAAAaJoAAOQAAACKAAAAbJoA
+AAoBAABaAQAAcJoAAEoBAACaAQAAdJoAAIoBAADaAQAAeJoAAMoBAAAOAAAAfJoAAAoA
+AABOAAAAgJoAAEoAAACOAAAAhJoAAIoAAABeAQAAiJoAALoBAACeAQAAjJoAAPoBAADe
+AQAAkJoAADoAAAAJAAAAlJoAAHoAAABJAAAAmJoAAIYBAACJAAAAnJoAAMYBAAB5AQAA
+oJoAAAYAAAC5AQAApJoAAEYAAAD5AQAAqJoAAIYAAAA5AAAArJoAAMYAAAB5AAAAsJoA
+AMYAAAC5AAAAtJoAAMYAAAC9AQAAuJoAAMYAAAD9AQAAvJoAAMYAAAA9AAAAwJoAAMYA
+AAB9AAAAxJoAAMYAAAC9AAAAyJoAAMYAAAD9AAAAzJoAAMYAAAD9AAAA0JoAAMYAAAD9
+AAAA1JoAAMYAAAD9AAAA2JoAAMYAAAD9AAAA3JoAAMYAAAD9AAAA4JoAAMYAAAD9AAAA
+5JoAAMYAAAD9AAAA6JoAAMYAAAD9AAAA7JoAAMYAAAD9AAAA8JoAAMYAAAD9AAAA9JoA
+AMYAAAD9AAAA+JoAAMYAAAD9AAAA/JoAAMYAAAD9AAAAAQAAAEYAAABgAAAAAQAAAEYA
+AABhAAAAAQAAAEYAAABiAAAAAQAAAEYAAABjAAAAAQAAAEYAAABkAAAAAQAAAEYAAABl
+AAAAAQAAAEYAAABmAAAAAQAAAEYAAABnAAAAAQAAAEYAAABoAAAAAQAAAEYAAABpAAAA
+AQAAAEYAAABqAAAAAQAAAEYAAABrAAAAAQAAAEYAAABsAAAAAQAAAEYAAAB0AAAAAQAA
+AEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYA
+AAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB0AAAAAQAAAEYAAAB1AAAAAQAAAEYAAAB2
+AAAAAQAAAEYAAAB3AAAAAQAAAEYAAAB4AAAAAQAAAEYAAAB5AAAAAQAAAEYAAAB6AAAA
+AQAAAEYAAAB7AAAAAQAAAEYAAAB8AAAAAQAAAEYAAAB9AAAAAQAAAEYAAAB+AAAAAQAA
+AEYAAAB/AAAAAQAAAEYAAACAAAAAAQAAAEQAAAB8AAAAAQAAAEYAAACIAAAAAQAAAEYA
+AACMAAAAAQAAAEYAAACQAAAAAQAAAEYAAACUAAAAAQAAAEYAAACYAAAAAQAAAEYAAACc
+AAAAAQAAAEYAAACgAAAAAQAAAEYAAACkAAAAAQAAAEYAAACoAAAAAQAAAEYAAACsAAAA
+AQAAAEYAAACwAAAAAQAAAEYAAAC0AAAAAAIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAnhYL
+AGIWCgA6FgkAHBYIAOoVBwCaFQUAShUEAAMVAgBZFAAAAAABAAAAAwAGAAkAPwAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAABAAAAAQAAQABAAEABgAAAEZHOAAAAAAA
+AAAAAAAAAAAEAAAAAQABAAQAAABGRzcAAAAAAAAAAAAAAAAAAwABAAEAAQADAAAARkc2
+AAAAAAAAAAAAAAAAAAQAAAAAAAEAAQAAAEZHNQAAAAAAAAAAAAAAAAAEAAEAAQAAAAAA
+AABGRzQAAAAAAAAAAAAAAAAABAAAAAEAAAD+////RkczAAAAAAAAAAAAAAAAAAMAAQAB
+AAAA/f///0ZHMgAAAAAAAAAAAAAAAAAEAAAAAAAAAPz///9GRzEAAAAAAAAAAAAAAAAA
+AgABAAEAAAD6////RkcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAUEFQZACIFBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2125,83 +2512,7 @@ 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
-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
-OvyhAAD/Ov86AJsAAAAAAAAEmwAAIAAAAAibAAAQAAAADJsAADAAAAAQmwAACAAAABSb
-AAAoAAAAGJsAAAQAAAAcmwAAJAAAACCbAAAUAAAAJJsAADQAAAAomwAADAAAACybAAAs
-AAAAMJsAAAIAAAA0mwAAIgAAADibAAASAAAAPJsAADIAAABAmwAACgAAAESbAAAqAAAA
-SJsAAAYAAABMmwAAJgAAAFCbAAAWAAAAVJsAADYAAABYmwAADgAAAFybAAAuAAAAYJsA
-AAEAAABkmwAAIQAAAGibAAARAAAAbJsAADEAAABwmwAACQAAAHSbAAApAAAAeJsAAAUA
-AAB8mwAAJQAAAICbAAAVAAAAhJsAADUAAACImwAADQAAAIybAAAtAAAAkJsAAAMAAACU
-mwAAIwAAAJibAAATAAAAnJsAADMAAACgmwAACwAAAKSbAAArAAAAqJsAACsAAACsmwAA
-KwAAALCbAAArAAAAtJsAACsAAAC4mwAAKwAAALybAAArAAAAwJsAACsAAADEmwAAKwAA
-AMibAAArAAAAzJsAACsAAADQmwAAKwAAANSbAAArAAAA2JsAACsAAADcmwAAKwAAAOCb
-AAArAAAA5JsAACsAAADomwAAKwAAAOybAAArAAAA8JsAACsAAAD0mwAAKwAAAPibAAAC
-AAAA/JsAABYAAADUmAAAIAAAANiYAABoEGAAAAAAAAAAAAAAmgAAqQEAAAAAAAAEmgAA
-6QEAAEAAAAAImgAAKQAAAIAAAAAMmgAAaQAAAFABAAAQmgAAmQEAAJABAAAUmgAA2QEA
-ANABAAAYmgAAGQAAABAAAAAcmgAAWQAAAEQAAAAgmgAAmQAAAIQAAAAkmgAApQEAAEgB
-AAAomgAA5QEAAIgBAAAsmgAAJQAAAMgBAAAwmgAAyAEAABQAAAA0mgAACAAAAEIAAAA4
-mgAASAAAAIIAAAA8mgAAiAAAAHgBAABAmgAAmAEAALgBAABEmgAA2AEAAPgBAABImgAA
-GAAAABIAAABMmgAAWAAAAFIAAABQmgAAmAAAAJIAAABUmgAApAEAAHwBAABYmgAA5AEA
-ALwBAABcmgAAJAAAAPwBAABgmgAAZAAAAAoAAABkmgAApAAAAEoAAABomgAA5AAAAIoA
-AABsmgAACgEAAFoBAABwmgAASgEAAJoBAAB0mgAAigEAANoBAAB4mgAAygEAAA4AAAB8
-mgAACgAAAE4AAACAmgAASgAAAI4AAACEmgAAigAAAF4BAACImgAAugEAAJ4BAACMmgAA
-+gEAAN4BAACQmgAAOgAAAAkAAACUmgAAegAAAEkAAACYmgAAhgEAAIkAAACcmgAAxgEA
-AHkBAACgmgAABgAAALkBAACkmgAARgAAAPkBAAComgAAhgAAADkAAACsmgAAxgAAAHkA
-AACwmgAAxgAAALkAAAC0mgAAxgAAAL0BAAC4mgAAxgAAAP0BAAC8mgAAxgAAAD0AAADA
-mgAAxgAAAH0AAADEmgAAxgAAAL0AAADImgAAxgAAAP0AAADMmgAAxgAAAP0AAADQmgAA
-xgAAAP0AAADUmgAAxgAAAP0AAADYmgAAxgAAAP0AAADcmgAAxgAAAP0AAADgmgAAxgAA
-AP0AAADkmgAAxgAAAP0AAADomgAAxgAAAP0AAADsmgAAxgAAAP0AAADwmgAAxgAAAP0A
-AAD0mgAAxgAAAP0AAAD4mgAAxgAAAP0AAAD8mgAAxgAAAP0AAAABAAAARgAAAGAAAAAB
-AAAARgAAAGEAAAABAAAARgAAAGIAAAABAAAARgAAAGMAAAABAAAARgAAAGQAAAABAAAA
-RgAAAGUAAAABAAAARgAAAGYAAAABAAAARgAAAGcAAAABAAAARgAAAGgAAAABAAAARgAA
-AGkAAAABAAAARgAAAGoAAAABAAAARgAAAGsAAAABAAAARgAAAGwAAAABAAAARgAAAHQA
-AAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAAB
-AAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHQAAAABAAAARgAAAHUAAAABAAAA
-RgAAAHYAAAABAAAARgAAAHcAAAABAAAARgAAAHgAAAABAAAARgAAAHkAAAABAAAARgAA
-AHoAAAABAAAARgAAAHsAAAABAAAARgAAAHwAAAABAAAARgAAAH0AAAABAAAARgAAAH4A
-AAABAAAARgAAAH8AAAABAAAARgAAAIAAAAABAAAARAAAAHwAAAABAAAARgAAAIgAAAAB
-AAAARgAAAIwAAAABAAAARgAAAJAAAAABAAAARgAAAJQAAAABAAAARgAAAJgAAAABAAAA
-RgAAAJwAAAABAAAARgAAAKAAAAABAAAARgAAAKQAAAABAAAARgAAAKgAAAABAAAARgAA
-AKwAAAABAAAARgAAALAAAAABAAAARgAAALQAAAAAAgcAAAADAAYACQA8AAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAACQAAAAQAAAAEAAEAAQABAAYAAABGRzgAAAAAAAAAAAAAAAAA
-BAAAAAEAAQAEAAAARkc3AAAAAAAAAAAAAAAAAAMAAQABAAEAAwAAAEZHNgAAAAAAAAAA
-AAAAAAAEAAAAAAABAAEAAABGRzUAAAAAAAAAAAAAAAAABAABAAEAAAAAAAAARkc0AAAA
-AAAAAAAAAAAAAAQAAAABAAAA/v///0ZHMwAAAAAAAAAAAAAAAAADAAEAAQAAAP3///9G
-RzIAAAAAAAAAAAAAAAAABAAAAAAAAAD8////RkcxAAAAAAAAAAAAAAAAAAIAAQABAAAA
-+v///0ZHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBBU
-GQApEQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -2248,150 +2559,343 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAmP
-CbQJCAlsCbQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAABAAAAAQAAAAAAABgAA
-AAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAABAEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBEEAAAD/wvAA/8LwAf
-/C8AD/wvAA/8LwBIEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBMEAAAD/wvAA/8LwAf/C8A
-D/wvAA/8LwBQEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBUEAAAD/wvAA/8LwAf/C8AD/wv
-AA/8LwBYEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBcEAAAD/wvAA/8LwAf/C8AD/wvAA/8
-LwBgEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwBkEAAAD/wvAA/8LwAf/C8AD/wvAA/8LwAw
-EAAAMAIAAOABAACwAAAAYAEAAOABAABwEAAAaAEAAOABAAC4AQAAjAEAAOABAACwEAAA
-YA4AAIARAAAcHwAAOD4AAIARAADwEAAA4KAAAGhAAQCAWAAA4LAAAGhAAQAUgAAA6APo
-A+AG4AYgBCAEQAhACOAG4AYEmAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAgmAAAAAICAgAC
-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
-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
-Dg4AAA4OAAAODgAADg4AAA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAWtoY
-AFraGABpyhgAacoYAGnKGABQmAAA4LToDeC06A3gtOgN4LToDeC06A1YmAAALg2Afi4N
-gH4uTeh+Lk3ofi4NgH5cmAAAXmY3MV5mNzFeZjcxXmY3MV5hNzFsmAAAgbAMBYGwDAWB
-sAwFgLAMBYCwDAUUmQAAECcAABAnAAB8FQAA+CoAABAnAABEmQAAIBC49yAQuPcgDbj3
-IBC49yAQuPcMogAAakEsZGpBLGRqQUBkakFAZGpBQGQcogAACoCDGAqAgxgKgHMYCoCD
-GAqAgxgAAAAAAAAAAAAAAAAAAAAAMBIAAAAAAAAsmAAA/i8CADyYAAAAAQIATJgAADxh
-hBIwmQAAg0gAAECZAAAEAAAAdJkAAAAAAAD4mQAAGAAAAASiAAAAAAAACKIAAIhnPtAo
-ogAAtQEAADyiAACvicgTBJsAACAAAAAImwAAEAAAAAybAAAwAAAAEJsAAAgAAAAUmwAA
-KAAAABibAAAEAAAAHJsAACQAAAAgmwAAFAAAACSbAAA0AAAALJsAACwAAAAwmwAAAgAA
-ADSbAAAiAAAAPJsAADIAAABAmwAACgAAAESbAAAqAAAASJsAAAYAAABMmwAAJgAAAFCb
-AAAWAAAAVJsAADYAAABYmwAADgAAAFybAAAuAAAAYJsAAAEAAABomwAAEQAAAGybAAAx
-AAAAcJsAAAkAAAB0mwAAKQAAAHibAAAFAAAAfJsAACUAAACAmwAAFQAAAISbAAA1AAAA
-iJsAAA0AAACQmwAAAwAAAJSbAAAjAAAAmJsAABMAAACgmwAACwAAAKSbAAArAAAAqJsA
-ACsAAACsmwAAKwAAALCbAAArAAAAtJsAACsAAAC4mwAAKwAAALybAAArAAAAwJsAACsA
-AADEmwAAKwAAAMibAAArAAAAzJsAACsAAADQmwAAKwAAANSbAAArAAAA2JsAACsAAADc
-mwAAKwAAAOCbAAArAAAA5JsAACsAAADomwAAKwAAAOybAAArAAAA8JsAACsAAAD0mwAA
-KwAAAPibAAACAAAA/JsAABYAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwJjwm0CQgJbAm0Cf//
+/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAgAAAAIAAAAEAAAABAAAAAAAAGAAAABgAAAAYAnhYLAGIWCgA6FgkA
+HBYIAOoVBwCaFQUAShUEAAMVAgBZFAAAuAsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAIAAAAD
+AAAABAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAEAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAEQQAAAP/C8AD/wv
+AB/8LwAP/C8AD/wvAEgQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAEwQAAAP/C8AD/wvAB/8
+LwAP/C8AD/wvAFAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFQQAAAP/C8AD/wvAB/8LwAP
+/C8AD/wvAFgQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAFwQAAAP/C8AD/wvAB/8LwAP/C8A
+D/wvAGAQAAAP/C8AD/wvAB/8LwAP/C8AD/wvAGQQAAAP/C8AD/wvAB/8LwAP/C8AD/wv
+ADAQAAAwAgAA4AEAALAAAABgAQAA4AEAAHAQAABoAQAA4AEAALgBAACMAQAA4AEAALAQ
+AABgDgAAgBEAABwfAAA4PgAAgBEAAPAQAADgoAAAaEABAIBYAADgsAAAaEABABSAAADo
+A+gD4AbgBiAEIARACEAI4AbgBgSYAAAAAAAAAwAAAAAAAAAAAAAAAwAAACCYAAAAAgIC
+AAICAgACAQIAAgICAAICAiSYAAAODgAADg4AAAcHAAAODgAADg4AAESYAAAcFnITJRxy
+EyIXchOiFnITJRxyE2CYAAAQnQAAEJ0AABidAAAYnQAAEJ0AAGSYAAAAzgEAAM4BAADO
+AQAAzgEAAM4BAGiYAACQQZpAkEGaQJBBmkCQQZpAkEGaQBiZAAC4AQAAuAEAAIQAAAAI
+AQAAuAEAACSZAAAFigUQBYoFEAWKBRAFigUQBYoFEDCiAAAAAAAAAAAAAAAAAAAIAQAA
+AAAAAAAAAAAAAAAADAAAAAAAAAA0AAAABQAAAEAAAAAAAAAARAAAAAgAAABIAAAACAAA
+AEwAAAAQAAAAUAAAAAAAAABUAAAAHwAAAAAIAAAAAAAABAgAAAAAAAAICAAAAAAAAAwI
+AAAAAAAAEAgAAAAAAAAUCAAAAAAAABgIAAAAAAAAHAgAAAAAAAAgCAAAAAAAACQIAAAA
+AAAAcBIAAAAAAAA4EAAAAAAAAHgQAAAAAAAAuBAAAAAAAAD4EAAAAAAAADgRAAAAAAAA
+eBEAAAAAAAC4EQAAAAAAAPgRAAAAAAAAOBIAAAAAAAB4EgAAAAAAALgSAAAAAAAA+BIA
+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
+AAAAQJsAAAoAAABEmwAAKgAAAEibAAAGAAAATJsAACYAAABQmwAAFgAAAFSbAAA2AAAA
+WJsAAA4AAABcmwAALgAAAGCbAAABAAAAaJsAABEAAABsmwAAMQAAAHCbAAAJAAAAdJsA
+ACkAAAB4mwAABQAAAHybAAAlAAAAgJsAABUAAACEmwAANQAAAIibAAANAAAAkJsAAAMA
+AACUmwAAIwAAAJibAAATAAAAoJsAAAsAAACkmwAAKwAAAKibAAArAAAArJsAACsAAACw
+mwAAKwAAALSbAAArAAAAuJsAACsAAAC8mwAAKwAAAMCbAAArAAAAxJsAACsAAADImwAA
+KwAAAMybAAArAAAA0JsAACsAAADUmwAAKwAAANibAAArAAAA3JsAACsAAADgmwAAKwAA
+AOSbAAArAAAA6JsAACsAAADsmwAAKwAAAPCbAAArAAAA9JsAACsAAAD4mwAAAgAAAPyb
+AAAWAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
nJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAA
-OAAAADgAAAA4AAAAOAAAADgAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAwAAAAIAAAACAAAAAnJgAAPkABAD5AAQA
-/wAEAP0ABAD9AAQA1JgAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAmgAAqQEA
-AAAAAAAEmgAA6QEAAEAAAAAImgAAKQAAAIAAAAAMmgAAaQAAAFABAAAQmgAAmQEAAJAB
-AAAUmgAA2QEAANABAAAYmgAAGQAAABAAAAAcmgAAWQAAAEQAAAAgmgAAmQAAAIQAAAAk
-mgAApQEAAEgBAAAomgAA5QEAAIgBAAAsmgAAJQAAAMgBAAAwmgAAyAEAABQAAAA0mgAA
-CAAAAEIAAAA4mgAASAAAAIIAAAA8mgAAiAAAAHgBAABAmgAAmAEAALgBAABEmgAA2AEA
-APgBAABImgAAGAAAABIAAABMmgAAWAAAAFIAAABQmgAAmAAAAJIAAABUmgAApAEAAHwB
-AABYmgAA5AEAALwBAABcmgAAJAAAAPwBAABgmgAAZAAAAAoAAABkmgAApAAAAEoAAABo
-mgAA5AAAAIoAAABsmgAACgEAAFoBAABwmgAASgEAAJoBAAB0mgAAigEAANoBAAB4mgAA
-ygEAAA4AAAB8mgAACgAAAE4AAACAmgAASgAAAI4AAACEmgAAigAAAF4BAACImgAAugEA
-AJ4BAACMmgAA+gEAAN4BAACQmgAAOgAAAAkAAACUmgAAegAAAEkAAACYmgAAhgEAAIkA
-AACcmgAAxgEAAHkBAACgmgAABgAAALkBAACkmgAARgAAAPkBAAComgAAhgAAADkAAACs
-mgAAxgAAAHkAAACwmgAAxgAAALkAAAC0mgAAxgAAAL0BAAC4mgAAxgAAAP0BAAC8mgAA
-xgAAAD0AAADAmgAAxgAAAH0AAADEmgAAxgAAAL0AAADImgAAxgAAAP0AAADMmgAAxgAA
-AP0AAADQmgAAxgAAAP0AAADUmgAAxgAAAP0AAADYmgAAxgAAAP0AAADcmgAAxgAAAP0A
-AADgmgAAxgAAAP0AAADkmgAAxgAAAP0AAADomgAAxgAAAP0AAADsmgAAxgAAAP0AAADw
-mgAAxgAAAP0AAAD0mgAAxgAAAP0AAAD4mgAAxgAAAP0AAAD8mgAAxgAAAP0AAADUmAAA
-IAAAAAAAAAAAAAAA1JgAABAAAAAUAAAAEAAAABAAAAAUAAAAAAAAAAAAAADYmAAAaBBg
-AGgQYABoEGAAaBBgAGgQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAnJgAAAAAOAAAADgAAAA4AAAAOAAAADgAnJgAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAAAAAAAAwAAA
+AIAAAACAAAAAnJgAAPkABAD5AAQA/wAEAP0ABAD9AAQA1JgAAAAAAAAAAAAABAAAAAQA
+AAAEAAAAAAAAAAAAAAAAmgAAqQEAAAAAAAAEmgAA6QEAAEAAAAAImgAAKQAAAIAAAAAM
+mgAAaQAAAFABAAAQmgAAmQEAAJABAAAUmgAA2QEAANABAAAYmgAAGQAAABAAAAAcmgAA
+WQAAAEQAAAAgmgAAmQAAAIQAAAAkmgAApQEAAEgBAAAomgAA5QEAAIgBAAAsmgAAJQAA
+AMgBAAAwmgAAyAEAABQAAAA0mgAACAAAAEIAAAA4mgAASAAAAIIAAAA8mgAAiAAAAHgB
+AABAmgAAmAEAALgBAABEmgAA2AEAAPgBAABImgAAGAAAABIAAABMmgAAWAAAAFIAAABQ
+mgAAmAAAAJIAAABUmgAApAEAAHwBAABYmgAA5AEAALwBAABcmgAAJAAAAPwBAABgmgAA
+ZAAAAAoAAABkmgAApAAAAEoAAABomgAA5AAAAIoAAABsmgAACgEAAFoBAABwmgAASgEA
+AJoBAAB0mgAAigEAANoBAAB4mgAAygEAAA4AAAB8mgAACgAAAE4AAACAmgAASgAAAI4A
+AACEmgAAigAAAF4BAACImgAAugEAAJ4BAACMmgAA+gEAAN4BAACQmgAAOgAAAAkAAACU
+mgAAegAAAEkAAACYmgAAhgEAAIkAAACcmgAAxgEAAHkBAACgmgAABgAAALkBAACkmgAA
+RgAAAPkBAAComgAAhgAAADkAAACsmgAAxgAAAHkAAACwmgAAxgAAALkAAAC0mgAAxgAA
+AL0BAAC4mgAAxgAAAP0BAAC8mgAAxgAAAD0AAADAmgAAxgAAAH0AAADEmgAAxgAAAL0A
+AADImgAAxgAAAP0AAADMmgAAxgAAAP0AAADQmgAAxgAAAP0AAADUmgAAxgAAAP0AAADY
+mgAAxgAAAP0AAADcmgAAxgAAAP0AAADgmgAAxgAAAP0AAADkmgAAxgAAAP0AAADomgAA
+xgAAAP0AAADsmgAAxgAAAP0AAADwmgAAxgAAAP0AAAD0mgAAxgAAAP0AAAD4mgAAxgAA
+AP0AAAD8mgAAxgAAAP0AAADUmAAAIAAAAAAAAAAAAAAA1JgAABAAAAAUAAAAEAAAABAA
+AAAUAAAAAAAAAAAAAADYmAAAaBBgAGgQYABoEGAAaBBgAGgQYAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAACcmAAAAAAAEAAAABAAAAAQAAAAEAAAABCcmAAAAAAABAAAAAQAAAAEAAAA
-BAAAAAScmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAKAAAAAAAAAACc
-mAAAwAA4AIAAOADAADgCwAA4AMAAOACcmAAABgACAAYAAgAGAAAABgACAAYAAgCcmAAA
-iQAAAIkAAACJAAAAiQAAAIkAAACcmAAAoAAAAKAAAACgAAAAoAAAAKAAAACcmAAABwAE
-AAcABAAHAAQABwAEAAcABADUmAAAGgAAABoAAAAaAAAAGgAAABoAAAAAAAAAAAAAAJyY
-AABAAAAASAAAAEAAAABAAAAAQAAAAJyYAAAQAAAAEAAAABAAAAAQAAAAEAAAAJyYAAAI
-AAAACAAAAAgAAAAIAAAACAAAAJyYAABPAAAATwAAAE8AAABPAAAATwAAAJyYAADxAAAA
-8QAAAGEAAADxAAAA8QAAAJyYAABPkAAAT5AAAEyQAABPkAAAT5AAAJyYAABaEgAAWhIA
-AJoSAABaEgAAWhIAAMyYAAAOAAAADgAAAA8AAAAOAAAADgAAAAEAAABGAAAAYAAAAAEA
-AABGAAAAYQAAAAEAAABGAAAAYgAAAAEAAABGAAAAYwAAAAEAAABGAAAAZAAAAAEAAABG
-AAAAZQAAAAEAAABGAAAAZgAAAAEAAABGAAAAZwAAAAEAAABGAAAAaAAAAAEAAABGAAAA
-aQAAAAEAAABGAAAAagAAAAEAAABGAAAAawAAAAEAAABGAAAAbAAAAAEAAABGAAAAdAAA
-AAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEA
-AABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdQAAAAEAAABG
-AAAAdgAAAAEAAABGAAAAdwAAAAEAAABGAAAAeAAAAAEAAABGAAAAeQAAAAEAAABGAAAA
-egAAAAEAAABGAAAAewAAAAEAAABGAAAAfAAAAAEAAABGAAAAfQAAAAEAAABGAAAAfgAA
-AAEAAABGAAAAfwAAAAEAAABGAAAAgAAAAAEAAABEAAAAfAAAAAEAAABGAAAAiAAAAAEA
-AABGAAAAjAAAAAEAAABGAAAAkAAAAAEAAABGAAAAlAAAAAEAAABGAAAAmAAAAAEAAABG
-AAAAnAAAAAEAAABGAAAAoAAAAAEAAABGAAAApAAAAAEAAABGAAAAqAAAAAEAAABGAAAA
-rAAAAAEAAABGAAAAsAAAAAEAAABGAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAwAAAAFYAAABWAAAAVgAAAFYAAABWAAAAcgAAAp5ONEs8TiAmV
-E+AEqxPgEs8TiAkomAAAAQACCgEAAgoAAQIFAQACCgEAAgo0mAAADg4AAA4OAAAODgAA
-Dg4AAA4OAAA4mAAABwAAAAcAAAALAAAACwAAAAsAAABImAAAbdoYAG3aGAB1yhgAdcoY
-AHXKGABQmAAA4LToDeC06A3gtOgN4LToDeC06A1YmAAALg2Afi4NgH4uDeh+Lg3ofi4N
-gH5cmAAAXmY3MV5mNzFeZjcxXmY3MV5mNzFsmAAAgbAMBYGwDAWBsAwFgbAMBYGwDAUU
-mQAA0AcAANAHAABMBAAAmAgAANAHAABEmQAAIBC49yAQuPcQDbj3EBC49xAQuPcEogAA
-AAAAAAAAAAAIAAAACAAAAAgAAAAIogAAiGe+1ohnvtaIZz7QiGc+0IhnPtAMogAAQAEs
-ZEABLGRgwUJkYMFCZGDBQmQcogAACoCDGAqAgxgKgHMYCoCDGAqAgxgwEgAAAAAAACyY
-AAD+LwIAPJgAAAABAgBMmAAAPGGEEjCZAACCSAAAQJkAAAQAAAB0mQAAAAAAACiiAAC1
-AQAAPKIAAK+JyBMEmwAAAQAAAAibAAACAAAADJsAAAMAAAAQmwAABAAAABSbAAAFAAAA
+AAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAEAAAABAAAAAQAAAAEAAA
+ABCcmAAAAAAABAAAAAQAAAAEAAAABAAAAAScmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc
+mAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcmAAA
+AAAAAAAAAAAAAAAKAAAAAAAAAACcmAAAwAA4AIAAOADAADgCwAA4AMAAOACcmAAABgAC
+AAYAAgAGAAAABgACAAYAAgCcmAAAiQAAAIkAAACJAAAAiQAAAIkAAACcmAAAoAAAAKAA
+AACgAAAAoAAAAKAAAACcmAAABwAEAAcABAAHAAQABwAEAAcABADUmAAAGgAAABoAAAAa
+AAAAGgAAABoAAAAAAAAAAAAAAJyYAABAAAAASAAAAEAAAABAAAAAQAAAAJyYAAAQAAAA
+EAAAABAAAAAQAAAAEAAAAJyYAAAIAAAACAAAAAgAAAAIAAAACAAAAJyYAABPAAAATwAA
+AE8AAABPAAAATwAAAJyYAADxAAAA8QAAAGEAAADxAAAA8QAAAJyYAABPkAAAT5AAAEyQ
+AABPkAAAT5AAAJyYAABaEgAAWhIAAJoSAABaEgAAWhIAAMyYAAAOAAAADgAAAA8AAAAO
+AAAADgAAAAEAAABGAAAAYAAAAAEAAABGAAAAYQAAAAEAAABGAAAAYgAAAAEAAABGAAAA
+YwAAAAEAAABGAAAAZAAAAAEAAABGAAAAZQAAAAEAAABGAAAAZgAAAAEAAABGAAAAZwAA
+AAEAAABGAAAAaAAAAAEAAABGAAAAaQAAAAEAAABGAAAAagAAAAEAAABGAAAAawAAAAEA
+AABGAAAAbAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABG
+AAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAAdAAAAAEAAABGAAAA
+dAAAAAEAAABGAAAAdQAAAAEAAABGAAAAdgAAAAEAAABGAAAAdwAAAAEAAABGAAAAeAAA
+AAEAAABGAAAAeQAAAAEAAABGAAAAegAAAAEAAABGAAAAewAAAAEAAABGAAAAfAAAAAEA
+AABGAAAAfQAAAAEAAABGAAAAfgAAAAEAAABGAAAAfwAAAAEAAABGAAAAgAAAAAEAAABE
+AAAAfAAAAAEAAABGAAAAiAAAAAEAAABGAAAAjAAAAAEAAABGAAAAkAAAAAEAAABGAAAA
+lAAAAAEAAABGAAAAmAAAAAEAAABGAAAAnAAAAAEAAABGAAAAoAAAAAEAAABGAAAApAAA
+AAEAAABGAAAAqAAAAAEAAABGAAAArAAAAAEAAABGAAAAsAAAAAEAAABGAAAAtAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeFgYAYhYEADoWAwAcFgIA
+6hUBAJoVAABKFQAAAxUBAFkUAwC4CwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA
+ABWAAAAVgAAAFYAAABWAAAAVgAAAHIAAAKeTjRLPE4gJlRPgBKsT4BLPE4gJKJgAAAEA
+AgoBAAIKAAECBQEAAgoBAAIKNJgAAA4OAAAODgAADg4AAA4OAAAODgAAOJgAAAcAAAAH
+AAAACwAAAAsAAAALAAAASJgAAG3aGABt2hgAdcoYAHXKGAB1yhgAUJgAAOC06A3gtOgN
+4LToDeC06A3gtOgNWJgAAC4NgH4uDYB+Lg3ofi4N6H4uDYB+XJgAAF5mNzFeZjcxXmY3
+MV5mNzFeZjcxbJgAAIGwDAWBsAwFgbAMBYGwDAWBsAwFFJkAANAHAADQBwAATAQAAJgI
+AADQBwAARJkAACAQuPcgELj3EA249xAQuPcQELj3BKIAAAAAAAAAAAAACAAAAAgAAAAI
+AAAACKIAAIhnvtaIZ77WiGc+0IhnPtCIZz7QDKIAAEABLGRAASxkYMFCZGDBQmRgwUJk
+HKIAAAqAgxgKgIMYCoBzGAqAgxgKgIMYMBIAAAAAAAAImAAAAAAAACyYAAD+LwIAPJgA
+AAABAgBMmAAAPGGEEjCZAACCSAAAQJkAAAQAAABYmQAA/wAAAHSZAAAAAAAAKKIAALUB
+AAA8ogAAr4nIEwSbAAABAAAACJsAAAIAAAAMmwAAAwAAABCbAAAEAAAAFJsAAAUAAAAY
+mwAACAAAABybAAAJAAAAIJsAAAoAAAAkmwAACwAAACybAAANAAAAMJsAABAAAAA0mwAA
+EQAAADybAAATAAAAQJsAABQAAABEmwAAFQAAAEibAAAYAAAATJsAABkAAABQmwAAGgAA
+AFSbAAAbAAAAWJsAABwAAABcmwAAHQAAAGCbAAAgAAAAaJsAACIAAABsmwAAIwAAAHCb
+AAAkAAAAdJsAACUAAAB4mwAAKAAAAHybAAApAAAAgJsAACoAAACEmwAAKwAAAIibAAAs
+AAAAkJsAADAAAACUmwAAMQAAAJibAAAyAAAAoJsAADQAAACkmwAANQAAAKibAAA1AAAA
+rJsAADUAAACwmwAANQAAALSbAAA1AAAAuJsAADUAAAC8mwAANQAAAMCbAAA1AAAAxJsA
+ADUAAADImwAANQAAAMybAAA1AAAA0JsAADUAAADUmwAANQAAANibAAA1AAAA3JsAADUA
+AADgmwAANQAAAOSbAAA1AAAA6JsAADUAAADsmwAANQAAAPCbAAA1AAAA9JsAADUAAAD4
+mwAAEAAAAPybAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJoAAAcAAAAHAAAA
+BJoAAEcAAABHAAAACJoAAIcAAACHAAAADJoAAKABAACgAQAAEJoAAOABAADgAQAAFJoA
+ACAAAAAgAAAAGJoAAGAAAABgAAAAHJoAAKEBAAChAQAAIJoAAOEBAADhAQAAJJoAACEA
+AAAhAAAAKJoAAGEAAABhAAAALJoAAGIBAABiAQAAMJoAAKIBAACiAQAANJoAAOIBAADi
+AQAAOJoAACIAAAAiAAAAPJoAAGIAAABiAAAAQJoAAGMBAABjAQAARJoAAKMBAACjAQAA
+SJoAAOMBAADjAQAATJoAACMAAAAjAAAAUJoAAGMAAABjAAAAVJoAAIQBAACEAQAAWJoA
+AMQBAADEAQAAXJoAAAQAAAAEAAAAYJoAAOoBAAALAAAAZJoAACoAAABLAAAAaJoAAGoA
+AACLAAAAbJoAAKoAAACsAQAAcJoAAKsBAADsAQAAdJoAAOsBAAAsAAAAeJoAACsAAAAS
+AAAAfJoAAGsAAABSAAAAgJoAAKsAAACSAAAAhJoAAKwBAACTAQAAiJoAAOwBAADTAQAA
+jJoAACwAAAATAAAAkJoAADoAAABTAAAAlJoAAHoAAACTAAAAmJoAALoAAACUAQAAnJoA
+ALsBAADUAQAAoJoAAPsBAAAUAAAApJoAADsAAAA6AAAAqJoAAHsAAAB6AAAArJoAALsA
+AAC6AAAAsJoAALwBAAC7AQAAtJoAAPwBAAD7AQAAuJoAADwAAAA7AAAAvJoAAHwAAAB7
+AAAAwJoAALwAAAC7AAAAxJoAAPwAAAC8AQAAyJoAAPwAAAD8AQAAzJoAAPwAAAA8AAAA
+0JoAAPwAAAB8AAAA1JoAAPwAAAC8AAAA2JoAAPwAAAD8AAAA3JoAAPwAAAD8AAAA4JoA
+APwAAAD8AAAA5JoAAPwAAAD8AAAA6JoAAPwAAAD8AAAA7JoAAPwAAAD8AAAA8JoAAPwA
+AAD8AAAA9JoAAPwAAAD8AAAA+JoAAPwAAAD8AAAA/JoAAPwAAAD8AAAA1JgAACAAAAAA
+AAAAAAAAANCYAAAIBAYDCAQHAwgEBgMIBAYDCAQHAwAAAAAAAAAA3JgAAMAgoADAIKAA
+wCDgAMAg4ADAIOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAA8AAAAPAAAA
+DwAAAA8AAAAPnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAgAAAAIAAAACAAAAA
+gAAAAIAAnJgAAAAAKgAAACoAAAAqAAAAKgAAACoAnJgAAAAAAQAAAAEAAAABAAAAAQAA
+AAEAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAGAAAABgAAAAYAAAAGAAAABgA
+nJgAAAAAYAAAAGAAAABuAAAAbgAAAG4AnJgAAAAAxwAAAMcAAADHAAAAxwAAAMcAnJgA
+AAAASwAAAEsAAABLAAAASwAAAEsAnJgAAAAASAQAAEgEAABIBAAASAQAAEgEnJgAAAAA
+TAAAAEwAAABMAAAATAAAAEwAnJgAAAAA5AAAAOQAAADkAAAA5AAAAOQAnJgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAnJgAAAAA/AAAAPwAAAD8AAAA/AAAAPwAnJgAAAAA/wAAAP8A
+AAD/AAAA/wAAAP8AnJgAAAAAPwQAAD8EAAA/BAAAPwQAAD8EnJgAAAAADAAAAAwAAAAM
+AAAADAAAAAwAnJgAAAAAGQIAABkCAAAZAgAAGQIAABkCnJgAAAAAJAAAACQAAAAkAAAA
+JAAAACQAnJgAAAAAtAAAALQAAAC0AAAAtAAAALQAnJgAAAAAmQAAAJkAAACZAAAAmQAA
+AJkAnJgAAAAAUAAAAFAAAABQAAAAUAAAAFAAnJgAAAAAKgAAACoAAAAqAAAAKgAAACoA
+nJgAAAAAEgAAABIAAAASAAAAEgAAABIAnJgAAAAAMsAAADLAAAAywAAAMsAAADLAnJgA
+AAAAdAEAAHQBAAB0AQAAdAEAAHQBnJgAAAAAEQAAABEAAAARAAAAEQAAABEAnJgAAAAA
+KIYAACiGAAAohgAAKIYAACiGnJgAAAAAhDEAAIQxAACEMQAAhDEAAIQxnJgAAIAA8gCA
+APIAgADyAIAA8gCAAPIAnJgAABkAJwAZACcAGQAnABkAJwAZACcAnJgAAAMAAAADAAAA
+AwAAAAMAAAADAAAAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAALIAAACyAAAAsgAA
+ALIAAACyAAAAnJgAAIQgsACEILAAhCCwAIQgsACEILAAnJgAAKQlQQCkJUEApCVBAKQl
+QQCkJUEAnJgAACCSEQAgkhEAIJIRACCSEQAgkhEAnJgAAABIGgAASBoAAEgaAABIGgAA
+SBoA2JgAADACCwAwAgsAMAILADACCwAwAgsAnJgAAJQAAACUAAAAlAAAAJQAAACUAAAA
+nJgAAJEAAACRAAAAkQAAAJEAAACRAAAAnJgAABIAAAASAAAAEgAAABIAAAASAAAAnJgA
+AIAAAACAAAAAgAAAAIAAAACAAAAAnJgAANkAAADZAAAA2QAAANkAAADZAAAAnJgAAGAA
+AABgAAAAYAAAAGAAAABgAAAAnJgAAPAAAADwAAAA8AAAAPAAAADwAAAAnJgAAKIAAACi
+AAAAogAAAKIAAACiAAAAnJgAAFIAAABSAAAAUgAAAFIAAABSAAAAnJgAANQAAADUAAAA
+1AAAANQAAADUAAAAnJgAAMwUAADMFAAAzBQAAMwUAADMFAAAnJgAAIwEAACMBAAAjAQA
+AIwEAACMBAAAxJgAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAMAAAABUAAAAVAAAAFQAAABUAAAAVAAAAHIAAAKeTjRLPE4gJlRPgBKsT4BLPE4gJ
+KJgAAAEAAgoBAAIKAAACBQEAAgoBAAIKNJgAAAAOAAAADgAAAA4AAAAOAAAADgAAOJgA
+AAIAAAACAAAACgAAAAoAAAAKAAAASJgAAG3aGABt2hgAZGoaAGRqGgBkahoAUJgAAOC0
+6A3gtOgN2rDoDdqwmAzasOgNWJgAAC4NgH4uDYB+Lg3ofi4NyH4uDYB+XJgAAF5mNzFe
+ZjcxXmY3MV5gOTFeZjcxbJgAAIGwDAWBsAwFgbAMBYGwDAWBsAwFFJkAANAHAADQBwAA
+TAQAAJgIAADQBwAARJkAAAAQuPcAELj3AA249wAQuPcAELj3BKIAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAACKIAAIhnvtaIZ77WiGc+0IhnPtCIZz7QDKIAAEABLABAASwAQMFCAEDB
+QgBAwUIAHKIAAAqAgxgKgIMYCoBjGAqAgxgKgIMYMBIAAOADAABggAAADwAAABiBAAAA
+AAAAHIEAAAAAAAAggQAAAAAAACSBAAAAAAAAKIEAAAAAAAAsgQAAAAAAADCBAAAAAAAA
+NIEAAAAAAAA4gQAAAAAAADyBAAAAAAAAQIEAAKgAAIBEgQAAAAAAAAiYAAAAAAAALJgA
+AACgAAA8mAAAAAQgAEyYAAA8I4QScJgAAB8AAAB0mAAAgAAAAHiYAAAOAAAAWJkAAP8A
+AACAmQAAAAAAAISZAAAAAIACoJkAAAAAAADgmQAAAAAAAOSZAACqqqqq6JkAAHhkRjzs
+mQAAqgAAAPCZAAAMAAAA9JkAAP8AAAD4mQAAFAAAACiiAAC1CQAAPKIAAK+JyJNMogAA
+AQAAAFCiAAAAoAAAVKIAAAAAAABYogAAgFPHDFyiAAABDw8PYKIAAAEPaV9kogAAEYpB
+AGiiAAAAAAAAbKIAAGrBMAxwogAAIAiCAHSiAACqfBsAeKIAAM455xx8ogAAzgEXBQCj
+AAAAAAEYBKMAAAImAzAIowAABj4HSAyjAAAKTAtWEKMAAA9gGmQUowAAG25PeBijAABa
+fI+GHKMAAFuGz44gowAAD5dPnSSjAACPoc+lKKMAAB+vX7UsowAAn7nfvTCjAAA/x3/N
+NKMAAL/R/9U4owAAAAAAADyjAAAAAAAAQKMAAAAAAABEowAAAAAAAEijAAD///8/TKMA
+AP///z9QowAA////P1SjAAD//wMAWKMAAB+qqHlcowAAD0JsBmCjAAAHIigPZKMAAIUW
+YBdoowAABBGAH2yjAAADDKA3cKMAAIMIxD90owAAAwjAV3ijAACCBthffKMAAIIE4H+A
+owAAuns8f4SjAADwfzDzBJsAAAEAAAAImwAAAgAAAAybAAADAAAAEJsAAAQAAAAUmwAA
+BQAAABibAAAIAAAAHJsAAAkAAAAgmwAACgAAACSbAAALAAAALJsAAA0AAAAwmwAAEAAA
+ADSbAAARAAAAPJsAABMAAABAmwAAFAAAAESbAAAVAAAASJsAABgAAABMmwAAGQAAAFCb
+AAAaAAAAVJsAABsAAABYmwAAHAAAAFybAAAdAAAAYJsAACAAAABomwAAIgAAAGybAAAj
+AAAAcJsAACQAAAB0mwAAJQAAAHibAAAoAAAAfJsAACkAAACAmwAAKgAAAISbAAArAAAA
+iJsAACwAAACQmwAAMAAAAJSbAAAxAAAAmJsAADIAAACgmwAANAAAAKSbAAA1AAAAqJsA
+ADUAAACsmwAANQAAALCbAAA1AAAAtJsAADUAAAC4mwAANQAAALybAAA1AAAAwJsAADUA
+AADEmwAANQAAAMibAAA1AAAAzJsAADUAAADQmwAANQAAANSbAAA1AAAA2JsAADUAAADc
+mwAANQAAAOCbAAA1AAAA5JsAADUAAADomwAANQAAAOybAAA1AAAA8JsAADUAAAD0mwAA
+NQAAAPibAAAQAAAA/JsAABoAAAAAAAAAAAAAAACaAAAAAAAAAAAAAASaAAAAAAAAQAAA
+AAiaAAAAAAAAgAAAAAyaAAAAAAAAgQEAABCaAAAAAAAAwQEAABSaAAAAAAAAAQAAABia
+AAAAAAAAQQAAAByaAAAAAAAAgQAAACCaAAAAAAAAaAEAACSaAAAAAAAAqAEAACiaAAAA
+AAAA6AEAACyaAAAAAAAAKAAAADCaAAAAAAAAaAAAADSaAAAAAAAAiQEAADiaAAAAAAAA
+yQEAADyaAAAAAAAACQAAAECaAAAAAAAASQAAAESaAAAAAAAAiQAAAEiaAAAAAAAAkAEA
+AEyaAAAAAAAA0AEAAFCaAAAAAAAAEAAAAFSaAAAAAAAAUAAAAFiaAAAAAAAAkAAAAFya
+AAAAAAAAkQEAAGCaAAAAAAAA0QEAAGSaAAAAAAAAEQAAAGiaAAAAAAAAUQAAAGyaAAAA
+AAAAkQAAAHCaAAAAAAAAeAEAAHSaAAAAAAAAuAEAAHiaAAAAAAAA+AEAAHyaAAAAAAAA
+OAAAAICaAAAAAAAAeAAAAISaAAAAAAAAmQEAAIiaAAAAAAAA2QEAAIyaAAAAAAAAGQAA
+AJCaAAAAAAAAWQAAAJSaAAAAAAAAmQAAAJiaAAAAAAAA2QAAAJyaAAAAAAAA+QAAAKCa
+AAAAAAAA+QAAAKSaAAAAAAAA+QAAAKiaAAAAAAAA+QAAAKyaAAAAAAAA+QAAALCaAAAA
+AAAA+QAAALSaAAAAAAAA+QAAALiaAAAAAAAA+QAAALyaAAAAAAAA+QAAAMCaAAAAAAAA
++QAAAMSaAAAAAAAA+QAAAMiaAAAAAAAA+QAAAMyaAAAAAAAA+QAAANCaAAAAAAAA+QAA
+ANSaAAAAAAAA+QAAANiaAAAAAAAA+QAAANyaAAAAAAAA+QAAAOCaAAAAAAAA+QAAAOSa
+AAAAAAAA+QAAAOiaAAAAAAAA+QAAAOyaAAAAAAAA+QAAAPCaAAAAAAAA+QAAAPSaAAAA
+AAAA+QAAAPiaAAAAAAAA+QAAAPyaAAAAAAAA+QAAANSYAAAgAAAAAAAAAAAAAADQmAAA
+CBQAAggUAQIIFAACCBQAAggUAQIAAAAAAAAAANyYAADAIKAAwCCgAMAg4ADAIOAAwCDg
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAADwAAAA8AAAAPAAAADwAAAA8JyY
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAADAAAAAwAAAAMAAAADAAAAA5yYAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAJyYAAAAAEBAAABAQAAAQEAAAEBAAABAQJyYAAAAAAVlAAAFZQAA
+BWUAAAVlAAAFZZyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAJyYAAAAAEIAAABCAAAAQgAAAEIAAABCAJyYAAAAALUAAAC1AAAAtQAAALUA
+AAC1AJyYAAAAAAMAAAADAAAAAwAAAAMAAAADAJyYAAAAAPcAAAD3AAAA9wAAAPcAAAD3
+AJyYAAAAAJ0AAACdAAAAnQAAAJ0AAACdAJyYAAAAACIAAAAiAAAAIgAAACIAAAAiAJyY
+AAAAACIEAAAiBAAAIgQAACIEAAAiBJyYAAAYACMAGAAjABgAIwAYACMAGAAjAJyYAAAA
+ACgAAAAoAGAAKABgACgAYAAoAJyYAADAAFAAwABQAMMAUADDAFAAwwBQAJyYAAB/AAQA
+fwAEAH8ABAB/AAQAfwAEAJyYAABYBAAAWAQAAFgEAABYBAAAWAQAAJyYAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAJyYAAAAwAAAAMAAAADAAAAAwAAAAMAAANiYAAAwAkAAMAJAADAC
+QAAwAkAAMAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAZAAAAGQAAABkAAAA
+ZAAAAGQAAJyYAAAACAAAAAgAAAAIAAAACAAAAAgAAMyYAAAOAAAADgAAAA4AAAAOAAAA
+DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAFQAAABUA
+AAAVAAAAFQAAABUAAAAcgAAAp5ONEs8TiAmVE+AEqxPgEs8TiAkomAAAAQACCgEAAgoA
+AQIFAQACCgEAAgo0mAAADg4AAA4OAAAODgAADg4AAA4OAAA4mAAABwAAAAcAAAALAAAA
+CwAAAAsAAABImAAAYfoYAGH6GABjGhoAYxoaAGMaGgBQmAAA4LSYDOC0mAzasJgM2rCY
+DNqwmAxYmAAALg3Ifi4NyH4uDch+Lg3Ifi4NyH5cmAAAXmA5MV5gOTFeYDkxXmA5MV5g
+OTFsmAAAgbAMBYGwDAWBsAwFgbAMBYGwDAUUmQAA0AcAANAHAABMBAAAmAgAANAHAABE
+mQAAABC49wAQuPcADbj3ABC49wAQuPcEogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIogAA
+iGe+1ohnvtaIZz7QiGc+0IhnPtAMogAA4MEuAODBLgAgwSoAIMEqACDBKgAcogAACoCD
+GAqAgxgKgGMYCoCDGAqAgxgAowAAAAABGAAAARgAAAEYAAABGAAAARgEowAAAiYDMAIm
+AzACJgMwAiYDMAImAzAIowAABj4HSAY+B0gGPgdIBj4HSAY+B0gMowAACkwLVgpMC1YK
+TAtWCkwLVgpMC1YQowAAD2AaZA9gGmQPYBpkD2AaZA9gGmQUowAAG25PeBtuT3gbbk94
+G25PeBtuT3gYowAAWnyPhlp8j4ZafI+GWnyPhlp8j4YcowAAW4bPkFuGz5Bbhs+OW4bP
+jluGz44gowAAD5dPnQ+XT50Pl0+bD5dPmw+XT5skowAAj6PPp4+jz6ePn8+jj5/Po4+f
+z6MoowAAH69ftR+vX7Ufr1+zH69fsx+vX7MsowAAn7nfvZ+5372fud+7n7nfu5+537sw
+owAAP8V/yz/Ff8s/x3/LP8d/yz/Hf8s0owAAv9H/1b/R/9W/0f/Tv9H/07/R/9MAAAAA
+AAAAAAAAAAAAAAAAMBIAAOADAABoQAAAEAAAAGCAAAAPAAAAnIAAAAAAAACggAAAAAAA
+ABiBAAAAAAAAHIEAAAAAAAAggQAAAAAAACSBAAAAAAAAKIEAAAAAAAAsgQAAAAAAADCB
+AAAAAAAANIEAAAAAAAA4gQAAAAAAADyBAAAAAAAAQIEAAPkDAIBEgQAAAAAAAAiYAAAA
+AAAALJgAAACgAAA8mAAAAAQgAEyYAAA8I4QScJgAAB8AAAB0mAAAgAAAAHiYAAAOAAAA
+WJkAAP8fCACAmQAAAAAAAISZAAAAAIACoJkAAAAAAADgmQAAAAAAAOSZAACqqqqq6JkA
+AHhkRjzsmQAAqgAAAPCZAAAMAAAA9JkAAP8AAAD4mQAAFAAAACiiAAC1CQAAPKIAAK+J
+yJNMogAAAQAAAFCiAAAAoAAAVKIAAAAAAABYogAAgFPHDFyiAAABDw8PYKIAAAEPaV9k
+ogAAEYpBAGiiAAAAAAAAbKIAAGrBMAxwogAAIAiCAHSiAACqfBsIeKIAAM455xx8ogAA
+zgEXBTijAAAAAAAAPKMAAAAAAABAowAAAAAAAESjAAAAAAAASKMAAP///z9MowAA////
+P1CjAAD///8/VKMAAP//AwBYowAAH6qoeVyjAAAPQmwGYKMAAAciKA9kowAAhRZgF2ij
+AAAEEYAfbKMAAAMMoDdwowAAgwjEP3SjAAADCMBXeKMAAIIG2F98owAAggTgf4CjAAC6
+ezx/hKMAAPB/MPMEmwAAAQAAAAibAAACAAAADJsAAAMAAAAQmwAABAAAABSbAAAFAAAA
GJsAAAgAAAAcmwAACQAAACCbAAAKAAAAJJsAAAsAAAAsmwAADQAAADCbAAAQAAAANJsA
ABEAAAA8mwAAEwAAAECbAAAUAAAARJsAABUAAABImwAAGAAAAEybAAAZAAAAUJsAABoA
AABUmwAAGwAAAFibAAAcAAAAXJsAAB0AAABgmwAAIAAAAGibAAAiAAAAbJsAACMAAABw
@@ -2400,1838 +2904,2297 @@ LAAAAJCbAAAwAAAAlJsAADEAAACYmwAAMgAAAKCbAAA0AAAApJsAADUAAAComwAANQAA
AKybAAA1AAAAsJsAADUAAAC0mwAANQAAALibAAA1AAAAvJsAADUAAADAmwAANQAAAMSb
AAA1AAAAyJsAADUAAADMmwAANQAAANCbAAA1AAAA1JsAADUAAADYmwAANQAAANybAAA1
AAAA4JsAADUAAADkmwAANQAAAOibAAA1AAAA7JsAADUAAADwmwAANQAAAPSbAAA1AAAA
-+JsAABAAAAD8mwAAGgAAAAAAAAAAAAAAAJoAAAcAAAAHAAAABJoAAEcAAABHAAAACJoA
-AIcAAACHAAAADJoAAKABAACgAQAAEJoAAOABAADgAQAAFJoAACAAAAAgAAAAGJoAAGAA
-AABgAAAAHJoAAKEBAAChAQAAIJoAAOEBAADhAQAAJJoAACEAAAAhAAAAKJoAAGEAAABh
-AAAALJoAAGIBAABiAQAAMJoAAKIBAACiAQAANJoAAOIBAADiAQAAOJoAACIAAAAiAAAA
-PJoAAGIAAABiAAAAQJoAAGMBAABjAQAARJoAAKMBAACjAQAASJoAAOMBAADjAQAATJoA
-ACMAAAAjAAAAUJoAAGMAAABjAAAAVJoAAIQBAACEAQAAWJoAAMQBAADEAQAAXJoAAAQA
-AAAEAAAAYJoAAOoBAAALAAAAZJoAACoAAABLAAAAaJoAAGoAAACLAAAAbJoAAKoAAACs
-AQAAcJoAAKsBAADsAQAAdJoAAOsBAAAsAAAAeJoAACsAAAASAAAAfJoAAGsAAABSAAAA
-gJoAAKsAAACSAAAAhJoAAKwBAACTAQAAiJoAAOwBAADTAQAAjJoAACwAAAATAAAAkJoA
-ADoAAABTAAAAlJoAAHoAAACTAAAAmJoAALoAAACUAQAAnJoAALsBAADUAQAAoJoAAPsB
-AAAUAAAApJoAADsAAAA6AAAAqJoAAHsAAAB6AAAArJoAALsAAAC6AAAAsJoAALwBAAC7
-AQAAtJoAAPwBAAD7AQAAuJoAADwAAAA7AAAAvJoAAHwAAAB7AAAAwJoAALwAAAC7AAAA
-xJoAAPwAAAC8AQAAyJoAAPwAAAD8AQAAzJoAAPwAAAA8AAAA0JoAAPwAAAB8AAAA1JoA
-APwAAAC8AAAA2JoAAPwAAAD8AAAA3JoAAPwAAAD8AAAA4JoAAPwAAAD8AAAA5JoAAPwA
-AAD8AAAA6JoAAPwAAAD8AAAA7JoAAPwAAAD8AAAA8JoAAPwAAAD8AAAA9JoAAPwAAAD8
-AAAA+JoAAPwAAAD8AAAA/JoAAPwAAAD8AAAA1JgAACAAAAAAAAAAAAAAANCYAAAIBAYD
-CAQHAwgEBgMIBAYDCAQHAwAAAAAAAAAA3JgAAMDAoADAwKAAwMDgAMDA4ADAwOAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAAA8AAAAPAAAADwAAAA8AAAAPnJgAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAnJgAAAAAgAAAAIAAAACAAAAAgAAAAIAAnJgAAAAAKgAA
-ACoAAAAqAAAAKgAAACoAnJgAAAAAAQAAAAEAAAABAAAAAQAAAAEAnJgAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAnJgAAAAAGAAAABgAAAAYAAAAGAAAABgAnJgAAAAAYAAAAGAAAABu
-AAAAbgAAAG4AnJgAAAAAxwAAAMcAAADHAAAAxwAAAMcAnJgAAAAASwAAAEsAAABLAAAA
-SwAAAEsAnJgAAAAASAQAAEgEAABIBAAASAQAAEgEnJgAAAAATAAAAEwAAABMAAAATAAA
-AEwAnJgAAAAA5AAAAOQAAADkAAAA5AAAAOQAnJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-nJgAAAAA/AAAAPwAAAD8AAAA/AAAAPwAnJgAAAAA/wAAAP8AAAD/AAAA/wAAAP8AnJgA
-AAAAPwQAAD8EAAA/BAAAPwQAAD8EnJgAAAAADAAAAAwAAAAMAAAADAAAAAwAnJgAAAAA
-GQIAABkCAAAZAgAAGQIAABkCnJgAAAAAJAAAACQAAAAkAAAAJAAAACQAnJgAAAAAtAAA
-ALQAAAC0AAAAtAAAALQAnJgAAAAAmQAAAJkAAACZAAAAmQAAAJkAnJgAAAAAUAAAAFAA
-AABQAAAAUAAAAFAAnJgAAAAAKgAAACoAAAAqAAAAKgAAACoAnJgAAAAAEgAAABIAAAAS
-AAAAEgAAABIAnJgAAAAAMsAAADLAAAAywAAAMsAAADLAnJgAAAAAdAEAAHQBAAB0AQAA
-dAEAAHQBnJgAAAAAEQAAABEAAAARAAAAEQAAABEAnJgAAAAAKIYAACiGAAAohgAAKIYA
-ACiGnJgAAAAAhDEAAIQxAACEMQAAhDEAAIQxnJgAAIAA8gCAAPIAgADyAIAA8gCAAPIA
-nJgAABkAJwAZACcAGQAnABkAJwAZACcAnJgAAAMAAAADAAAAAwAAAAMAAAADAAAAnJgA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAnJgAALIAAACyAAAAsgAAALIAAACyAAAAnJgAAIQg
-sACEILAAhCCwAIQgsACEILAAnJgAAKQlQQCkJUEApCVBAKQlQQCkJUEAnJgAACCSEQAg
-khEAIJIRACCSEQAgkhEAnJgAAABIGgAASBoAAEgaAABIGgAASBoA2JgAADACCwAwAgsA
-MAILADACCwAwAgsAnJgAAJQAAACUAAAAlAAAAJQAAACUAAAAnJgAAJEAAACRAAAAkQAA
-AJEAAACRAAAAnJgAABIAAAASAAAAEgAAABIAAAASAAAAnJgAAIAAAACAAAAAgAAAAIAA
-AACAAAAAnJgAANkAAADZAAAA2QAAANkAAADZAAAAnJgAAGAAAABgAAAAYAAAAGAAAABg
-AAAAnJgAAPAAAADwAAAA8AAAAPAAAADwAAAAnJgAAKIAAACiAAAAogAAAKIAAACiAAAA
-nJgAAFIAAABSAAAAUgAAAFIAAABSAAAAnJgAANQAAADUAAAA1AAAANQAAADUAAAAnJgA
-AMwUAADMFAAAzBQAAMwUAADMFAAAnJgAAIwEAACMBAAAjAQAAIwEAACMBAAAxJgAAAMA
-AAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAABUAAAAVAAAA
-FQAAABUAAAAVAAAAHIAAAKeTjRLPE4gJlRPgBKsT4BLPE4gJKJgAAAEAAgoBAAIKAAAC
-BQEAAgoBAAIKNJgAAAAOAAAADgAAAA4AAAAOAAAADgAAOJgAAAIAAAACAAAACgAAAAoA
-AAAKAAAASJgAAG3aGABt2hgAZGoaAGRqGgBkahoAUJgAAOC06A3gtOgN2rDoDdqwmAza
-sOgNWJgAAC4NgH4uDYB+Lg3ofi4NyH4uDYB+XJgAAF5mNzFeZjcxXmY3MV5gOTFeZjcx
-bJgAAIGwDAWBsAwFgbAMBYGwDAWBsAwFFJkAANAHAADQBwAATAQAAJgIAADQBwAARJkA
-AAAQuPcAELj3AA249wAQuPcAELj3BKIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKIAAIhn
-vtaIZ77WiGc+0IhnPtCIZz7QDKIAAEABLABAASwAQMFCAEDBQgBAwUIAHKIAAAqAgxgK
-gIMYCoBjGAqAgxgKgIMYMBIAAOADAABggAAADwAAABiBAAAAAAAAHIEAAAAAAAAggQAA
-AAAAACSBAAAAAAAAKIEAAAAAAAAsgQAAAAAAADCBAAAAAAAANIEAAAAAAAA4gQAAAAAA
-ADyBAAAAAAAAQIEAAKgAAIBEgQAAAAAAACyYAAAAoAAAPJgAAAAEIABMmAAAPCOEEnCY
-AAAfAAAAdJgAAIAAAAB4mAAADgAAAICZAAAAAAAAhJkAAAAAgAKgmQAAAAAAAOCZAAAA
-AAAA5JkAAKqqqqromQAAeGRGPOyZAACqAAAA8JkAAAwAAAD0mQAA/wAAAPiZAAAUAAAA
-KKIAALUJAAA8ogAAr4nIk0yiAAABAAAAUKIAAACgAABUogAAAAAAAFiiAACAU8cMXKIA
-AAEPDw9gogAAAQ9pX2SiAAARikEAaKIAAAAAAABsogAAasEwDHCiAAAgCIIAdKIAAKp8
-GwB4ogAAzjnnHHyiAADOARcFAKMAAAAAARgEowAAAiYDMAijAAAGPgdIDKMAAApMC1YQ
-owAAD2AaZBSjAAAbbk94GKMAAFp8j4YcowAAW4bPjiCjAAAPl0+dJKMAAI+hz6UoowAA
-H69ftSyjAACfud+9MKMAAD/Hf800owAAv9H/1TijAAAAAAAAPKMAAAAAAABAowAAAAAA
-AESjAAAAAAAASKMAAP///z9MowAA////P1CjAAD///8/VKMAAP//AwBYowAAH6qoeVyj
-AAAPQmwGYKMAAAciKA9kowAAhRZgF2ijAAAEEYAfbKMAAAMMoDdwowAAgwjEP3SjAAAD
-CMBXeKMAAIIG2F98owAAggTgf4CjAAC6ezx/hKMAAPB/MPMEmwAAAQAAAAibAAACAAAA
-DJsAAAMAAAAQmwAABAAAABSbAAAFAAAAGJsAAAgAAAAcmwAACQAAACCbAAAKAAAAJJsA
-AAsAAAAsmwAADQAAADCbAAAQAAAANJsAABEAAAA8mwAAEwAAAECbAAAUAAAARJsAABUA
-AABImwAAGAAAAEybAAAZAAAAUJsAABoAAABUmwAAGwAAAFibAAAcAAAAXJsAAB0AAABg
-mwAAIAAAAGibAAAiAAAAbJsAACMAAABwmwAAJAAAAHSbAAAlAAAAeJsAACgAAAB8mwAA
-KQAAAICbAAAqAAAAhJsAACsAAACImwAALAAAAJCbAAAwAAAAlJsAADEAAACYmwAAMgAA
-AKCbAAA0AAAApJsAADUAAAComwAANQAAAKybAAA1AAAAsJsAADUAAAC0mwAANQAAALib
-AAA1AAAAvJsAADUAAADAmwAANQAAAMSbAAA1AAAAyJsAADUAAADMmwAANQAAANCbAAA1
-AAAA1JsAADUAAADYmwAANQAAANybAAA1AAAA4JsAADUAAADkmwAANQAAAOibAAA1AAAA
-7JsAADUAAADwmwAANQAAAPSbAAA1AAAA+JsAABAAAAD8mwAAGgAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAACaAAAAAAAAAAAAAASaAAAAAAAAQAAAAAiaAAAAAAAAgAAAAAya
-AAAAAAAAgQEAABCaAAAAAAAAwQEAABSaAAAAAAAAAQAAABiaAAAAAAAAQQAAAByaAAAA
-AAAAgQAAACCaAAAAAAAAaAEAACSaAAAAAAAAqAEAACiaAAAAAAAA6AEAACyaAAAAAAAA
-KAAAADCaAAAAAAAAaAAAADSaAAAAAAAAiQEAADiaAAAAAAAAyQEAADyaAAAAAAAACQAA
-AECaAAAAAAAASQAAAESaAAAAAAAAiQAAAEiaAAAAAAAAkAEAAEyaAAAAAAAA0AEAAFCa
-AAAAAAAAEAAAAFSaAAAAAAAAUAAAAFiaAAAAAAAAkAAAAFyaAAAAAAAAkQEAAGCaAAAA
-AAAA0QEAAGSaAAAAAAAAEQAAAGiaAAAAAAAAUQAAAGyaAAAAAAAAkQAAAHCaAAAAAAAA
-eAEAAHSaAAAAAAAAuAEAAHiaAAAAAAAA+AEAAHyaAAAAAAAAOAAAAICaAAAAAAAAeAAA
-AISaAAAAAAAAmQEAAIiaAAAAAAAA2QEAAIyaAAAAAAAAGQAAAJCaAAAAAAAAWQAAAJSa
-AAAAAAAAmQAAAJiaAAAAAAAA2QAAAJyaAAAAAAAA+QAAAKCaAAAAAAAA+QAAAKSaAAAA
-AAAA+QAAAKiaAAAAAAAA+QAAAKyaAAAAAAAA+QAAALCaAAAAAAAA+QAAALSaAAAAAAAA
-+QAAALiaAAAAAAAA+QAAALyaAAAAAAAA+QAAAMCaAAAAAAAA+QAAAMSaAAAAAAAA+QAA
-AMiaAAAAAAAA+QAAAMyaAAAAAAAA+QAAANCaAAAAAAAA+QAAANSaAAAAAAAA+QAAANia
-AAAAAAAA+QAAANyaAAAAAAAA+QAAAOCaAAAAAAAA+QAAAOSaAAAAAAAA+QAAAOiaAAAA
-AAAA+QAAAOyaAAAAAAAA+QAAAPCaAAAAAAAA+QAAAPSaAAAAAAAA+QAAAPiaAAAAAAAA
-+QAAAPyaAAAAAAAA+QAAANSYAAAgAAAAAAAAAAAAAADQmAAACBQAAggUAQIIFAACCBQA
-AggUAQIAAAAAAAAAANyYAADAIKAAwCCgAMAg4ADAIOAAwCDgAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAJyYAAAAAADwAAAA8AAAAPAAAADwAAAA8JyYAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAJyYAAAAAAADAAAAAwAAAAMAAAADAAAAA5yYAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyY
-AAAAAEBAAABAQAAAQEAAAEBAAABAQJyYAAAAAAVlAAAFZQAABWUAAAVlAAAFZZyYAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAEIA
-AABCAAAAQgAAAEIAAABCAJyYAAAAALUAAAC1AAAAtQAAALUAAAC1AJyYAAAAAAMAAAAD
-AAAAAwAAAAMAAAADAJyYAAAAAPcAAAD3AAAA9wAAAPcAAAD3AJyYAAAAAJ0AAACdAAAA
-nQAAAJ0AAACdAJyYAAAAACIAAAAiAAAAIgAAACIAAAAiAJyYAAAAACIEAAAiBAAAIgQA
-ACIEAAAiBJyYAAAYACMAGAAjABgAIwAYACMAGAAjAJyYAAAAACgAAAAoAGAAKABgACgA
-YAAoAJyYAADAAFAAwABQAMMAUADDAFAAwwBQAJyYAAB/AAQAfwAEAH8ABAB/AAQAfwAE
-AJyYAABYBAAAWAQAAFgEAABYBAAAWAQAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyY
-AAAAwAAAAMAAAADAAAAAwAAAAMAAANiYAAAwAkAAMAJAADACQAAwAkAAMAJAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAZAAAAGQAAABkAAAAZAAAAGQAAJyYAAAACAAA
-AAgAAAAIAAAACAAAAAgAAMyYAAAOAAAADgAAAA4AAAAOAAAADgAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AABBUjUyMTAAQVI1MjExAEFSNTIxMgBSRjUxMTEAUkY1MTEyAFJGMjQxMwBBdGhlcm9z
-IDIzMTMgV2lTb0MAQXRoZXJvcyA1MjEyIChGUEdBKQBBdGhlcm9zIDUyMTEgKEZQR0Ep
-AEF0aGVyb3MgNTIxMABBdGhlcm9zIDUyMTEAQXRoZXJvcyA1MzEyIFdpU29DAEF0aGVy
-b3MgNTIxMgBEQgBERUJVRwBOQQBOT19DT1VOVFJZX1NFVABBTABBTEJBTklBAERaAEFM
-R0VSSUEAQVIAQVJHRU5USU5BAEFNAEFSTUVOSUEAQVUAQVVTVFJBTElBAEFUAEFVU1RS
-SUEAQVoAQVpFUkJBSUpBTgBCSABCQUhSQUlOAEJZAEJFTEFSVVMAQkUAQkVMR0lVTQBC
-WgBCRUxJWkUAQk8AQk9MVklBAEJSAEJSQVpJTABCTgBCUlVORUkgREFSVVNTQUxBTQBC
-RwBCVUxHQVJJQQBDQQBDQU5BREEAQ0wAQ0hJTEUAQ04AQ0hJTkEAQ08AQ09MT01CSUEA
-Q1IAQ09TVEEgUklDQQBIUgBDUk9BVElBAENZAENZUFJVUwBDWgBDWkVDSCBSRVBVQkxJ
-QwBESwBERU5NQVJLAERPAERPTUlOSUNBTiBSRVBVQkxJQwBFQwBFQ1VBRE9SAEVHAEVH
-WVBUAFNWAEVMIFNBTFZBRE9SAEVFAEVTVE9OSUEARkkARklOTEFORABGUgBGUkFOQ0UA
-RjIARlJBTkNFX1JFUwBHRQBHRU9SR0lBAERFAEdFUk1BTlkAR1IAR1JFRUNFAEdUAEdV
-QVRFTUFMQQBITgBIT05EVVJBUwBISwBIT05HIEtPTkcASFUASFVOR0FSWQBJUwBJQ0VM
-QU5EAElOAElORElBAElEAElORE9ORVNJQQBJUgBJUkFOAElFAElSRUxBTkQASUwASVNS
-QUVMAElUAElUQUxZAEpQAEpBUEFOAEoxAEpBUEFOMQBKMgBKQVBBTjIASjMASkFQQU4z
-AEo0AEpBUEFONABKNQBKQVBBTjUASk8ASk9SREFOAEtaAEtBWkFLSFNUQU4AS1AATk9S
-VEggS09SRUEAS1IAS09SRUEgUkVQVUJMSUMASzIAS09SRUEgUkVQVUJMSUMyAEtXAEtV
-V0FJVABMVgBMQVRWSUEATEIATEVCQU5PTgBMSQBMSUVDSFRFTlNURUlOAExUAExJVEhV
-QU5JQQBMVQBMVVhFTUJPVVJHAE1PAE1BQ0FVAE1LAE1BQ0VET05JQQBNWQBNQUxBWVNJ
-QQBNWABNRVhJQ08ATUMATU9OQUNPAE1BAE1PUk9DQ08ATkwATkVUSEVSTEFORFMATloA
-TkVXIFpFQUxBTkQATk8ATk9SV0FZAE9NAE9NQU4AUEsAUEFLSVNUQU4AUEEAUEFOQU1B
-AFBFAFBFUlUAUEgAUEhJTElQUElORVMAUEwAUE9MQU5EAFBUAFBPUlRVR0FMAFBSAFBV
-RVJUTyBSSUNPAFFBAFFBVEFSAFJPAFJPTUFOSUEAUlUAUlVTU0lBAFNBAFNBVURJIEFS
-QUJJQQBTRwBTSU5HQVBPUkUAU0sAU0xPVkFLIFJFUFVCTElDAFNJAFNMT1ZFTklBAFpB
-AFNPVVRIIEFGUklDQQBFUwBTUEFJTgBTRQBTV0VERU4AQ0gAU1dJVFpFUkxBTkQAU1kA
-U1lSSUEAVFcAVEFJV0FOAFRIAFRIQUlMQU5EAFRUAFRSSU5JREFEICYgVE9CQUdPAFRO
-AFRVTklTSUEAVFIAVFVSS0VZAFVBAFVLUkFJTkUAQUUAVU5JVEVEIEFSQUIgRU1JUkFU
-RVMAR0IAVU5JVEVEIEtJTkdET00AVVMAVU5JVEVEIFNUQVRFUwBVWQBVUlVHVUFZAFVa
-AFVaQkVLSVNUQU4AVkUAVkVORVpVRUxBAFZOAFZJRVQgTkFNAFlFAFlFTUVOAFpXAFpJ
-TUJBQldFAAAAAAAAAAAAAAAAACVzOiBwaHlDbnQxIDB4JXgsIHJlc2V0dGluZyBjb3Vu
-dGVyIHZhbHVlIHRvIDB4JXgKAAAAAAAAAAAAAAAAAAAlczogcGh5Q250MiAweCV4LCBy
-ZXNldHRpbmcgY291bnRlciB2YWx1ZSB0byAweCV4CgAAAAAAAAAAAAAAAAAAMC45LjE0
-LjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBOIExEAiBPsExEA
-HhSCFA8AghTmFBIAXhVdFhQAXRbBFhQAwRbaFhcAAAAAAAAAjBSgFLQUyBQ8FFAUZBR4
-FAAAMhRGFFoUbhQAAGwJhQmeCYoJqAkAAGwJhQmeCYoJAABsCYUJngmKCQAAbAmFCZ4J
-igkAAHEWhRaZFq0WwRYAAFoUghSqFAAAgBaoFgAAfBWQFaQVuBXMFeAV9BUIFhwWMBZE
-FgAAAAAAAAAAAABxCXYJewmACY8JlAmZCaMJAAAAAAAAAAAAAAAAAAAAAHEJdgl7CYAJ
-jwmUCZkJAABxCXYJewmACY8JlAmZCQAAcQl2CXsJgAmPCZQJmQkAALQJAACFCQAAPBRQ
-FGQUeBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA
-AAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAE
-AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAA
-AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAA
-AAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAA
-AAAAAAAAIAAAAAAAAAAAAAAAAAAAADIURhRaFG4UAABaFIIUqhSAFqgWAAAAAAAAAAAA
-AAAAfBWQFaQVuBXMFeAV9BUIFhwWMBZEFgAAAAAAAAAAAABgAAAAqAkAAAEAAACjCQAA
-AQAAALQJAAABAAAAZwAAAKgJAAABAAAAowkAAAEAAAC0CQAAAQAAAGEAAACoCQAAAQAA
-AKMJAAABAAAAtAkAAAEAAABlAAAAqAkAAAEAAACjCQAAAQAAALQJAAABAAAASgAAAKgJ
-AAAAAAAAowkAAAAAAAC0CQAAAQAAAEsAAACoCQAAAQAAAKMJAAABAAAAtAkAAAEAAABq
-AAAAqAkAAAEAAACjCQAAAQAAALQJAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECcBcLAIwAAAAA
-AAECKCMPABIAAAAAAAEC4C4KAJgCAAAAAAECUEYOACQCAAAAAAECwF0JALAEAAAAAAEC
-oIwNAEgEAAAAAAECgLsIAGAEAAAAAAEC8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA3AXCwCMAAAAAAABAygjDwASAAAA
-AAABA+AuCgCYAgAAAAABA1BGDgAkAgAAAAABA8BdCQCwBAAAAAABA6CMDQBIBAAAAAAB
-A4C7CABgBAAAAAABA/DSDABsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIA
-AAAAAQJQRg4AJAIAAAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAA
-AQLw0gwAbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgCAAAAAAEDUEYOACQC
-AAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAAAAED8NIMAGwEAAAA
++JsAABAAAAD8mwAAGgAAAACaAAAAAAAAAAAAAASaAABAAAAAQAAAAAiaAACAAAAAgAAA
+AAyaAAChAQAAYQEAABCaAADhAQAAoQEAABSaAAAhAAAA4QEAABiaAABhAAAAIQAAABya
+AACIAQAAYQAAACCaAADIAQAAiAEAACSaAAAIAAAAyAEAACiaAABIAAAACAAAACyaAACI
+AAAASAAAADCaAACpAQAAiAAAADSaAADpAQAAaQEAADiaAAApAAAAqQEAADyaAABpAAAA
+6QEAAECaAADQAQAAKQAAAESaAAAQAAAAaQAAAEiaAABQAAAAkAEAAEyaAACQAAAA0AEA
+AFCaAACxAQAAEAAAAFSaAADxAQAAUAAAAFiaAAAxAAAAkAAAAFyaAABxAAAAcQEAAGCa
+AAC4AQAAsQEAAGSaAAD4AQAA8QEAAGiaAAA4AAAAMQAAAGyaAAB4AAAAcQAAAHCaAACZ
+AQAAmAEAAHSaAADZAQAA2AEAAHiaAAAZAAAAGAAAAHyaAABZAAAAWAAAAICaAACZAAAA
+mAAAAISaAADZAAAAeQEAAIiaAAD5AAAAuQEAAIyaAAD5AAAA+QEAAJCaAAD5AAAAOQAA
+AJSaAAD5AAAAeQAAAJiaAAD5AAAAuQAAAJyaAAD5AAAA+QAAAKCaAAD5AAAA+QAAAKSa
+AAD5AAAA+QAAAKiaAAD5AAAA+QAAAKyaAAD5AAAA+QAAALCaAAD5AAAA+QAAALSaAAD5
+AAAA+QAAALiaAAD5AAAA+QAAALyaAAD5AAAA+QAAAMCaAAD5AAAA+QAAAMSaAAD5AAAA
++QAAAMiaAAD5AAAA+QAAAMyaAAD5AAAA+QAAANCaAAD5AAAA+QAAANSaAAD5AAAA+QAA
+ANiaAAD5AAAA+QAAANyaAAD5AAAA+QAAAOCaAAD5AAAA+QAAAOSaAAD5AAAA+QAAAOia
+AAD5AAAA+QAAAOyaAAD5AAAA+QAAAPCaAAD5AAAA+QAAAPSaAAD5AAAA+QAAAPiaAAD5
+AAAA+QAAAPyaAAD5AAAA+QAAANSYAAAgAAAAAAAAAAAAAADQmAAACAAAAAgAAAAIAAAA
+CAAAAAgAAAAAAAAAAAAAANyYAADAAKAAwACgAMAA4ADAAOAAwADgAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAJyYAAAAAAAzAAAAMwAAADMAAAAzAAAAM5yYAAAAAAABAAAAAQAA
+AAEAAAABAAAAAZyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAJyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAAAAfAAAAHwAAAB8AAAAf
+AAAAH5yYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAAALgAAAC4AAAAuAAAALgAAAC4
+AJyYAAAAALcAAAC3AAAAtwAAALcAAAC3AJyYAAAAAIQAAACEAAAAhAAAAIQAAACEAJyY
+AAAAAJgAAACYAAAAmAAAAJgAAACYAJyYAAAAAMAAAADAAAAAwAAAAMAAAADAAJyYAAAA
+AP8AAAD/AAAA/wAAAP8AAAD/AJyYAAAAAP8AAAD/AAAA/wAAAP8AAAD/AJyYAAAAAP8A
+AAD/AAAA/wAAAP8AAAD/AJyYAAAAAP8AAAD/AAAA/wAAAP8AAAD/AJyYAAAAANcAAADX
+AAAA1wAAANcAAADXAJyYAAAAAGEAAABhAAAAYQAAAGEAAABhAJyYAAAAAP4AAAD+AAAA
+/gAAAP4AAAD+AJyYAAAAAN4AAADeAAAA3gAAAN4AAADeAJyYAAAAAH8AAAB/AAAAfwAA
+AH8AAAB/AJyYAAAAAD0EAAA9BAAAPQQAAD0EAAA9BJyYAAAAAHcAAAB3AAAAdwAAAHcA
+AAB3AJyYAAAAAEQAAABEAAAARAAAAEQAAABEAJyYAAAAAJgAAACYAAAAmAAAAJgAAACY
+AJyYAACAABAAgAAQAIAAEACAABAAgAAQAJyYAAA0wAUANMAFADTABQA0wAUANMAFAJyY
+AADwADEA8AAxAPAAMQDwADEA8AAxAJyYAAAfAQwAHwEMAB8BDAAfAQwAHwEMAJyYAABA
+AFEAQABRAEAAUQBAAFEAQABRAJyYAADaAFAA2gBQANoAUADaAFAA2gBQAJyYAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAJyYAABEQAAAREAAAERAAABEQAAAREAAAJyYAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAJyYAADAYAAAwGAAAMBgAADAYAAAwGAAAJyYAAAALAAAACwAAAA2
+AAAANgAAACwAAMiYAAADBAAAAwQAAAMEAAADBAAAAwQAAAAAAAAAAAAAnJgAAABkAAAA
+ZAAAAGQAAABkAAAAZAAAnJgAAAAIAAAACAAAAAgAAAAIAAAACAAAzJgAAA4AAAAOAAAA
+DgAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFSNTIxMABBUjUyMTEAQVI1MjEyAFJGNTEx
+MQBSRjUxMTIAUkYyNDEzAFJGNTQxMwBBdGhlcm9zIDIzMTMgV2lTb0MAQXRoZXJvcyA1
+NDI0AEF0aGVyb3MgMjMxNyBXaVNvQwBBdGhlcm9zIDUyMTIgKEZQR0EpAEF0aGVyb3Mg
+NTIxMSAoRlBHQSkAQXRoZXJvcyA1MjEwAEF0aGVyb3MgNTIxMQBBdGhlcm9zIDUzMTIg
+V2lTb0MAQXRoZXJvcyAyMzE1IFdpU29DAEF0aGVyb3MgNTIxMgBEQgBERUJVRwBOQQBO
+T19DT1VOVFJZX1NFVABBTABBTEJBTklBAERaAEFMR0VSSUEAQVIAQVJHRU5USU5BAEFN
+AEFSTUVOSUEAQVUAQVVTVFJBTElBAEFUAEFVU1RSSUEAQVoAQVpFUkJBSUpBTgBCSABC
+QUhSQUlOAEJZAEJFTEFSVVMAQkUAQkVMR0lVTQBCWgBCRUxJWkUAQk8AQk9MVklBAEJS
+AEJSQVpJTABCTgBCUlVORUkgREFSVVNTQUxBTQBCRwBCVUxHQVJJQQBDQQBDQU5BREEA
+Q0wAQ0hJTEUAQ04AQ0hJTkEAQ08AQ09MT01CSUEAQ1IAQ09TVEEgUklDQQBIUgBDUk9B
+VElBAENZAENZUFJVUwBDWgBDWkVDSCBSRVBVQkxJQwBESwBERU5NQVJLAERPAERPTUlO
+SUNBTiBSRVBVQkxJQwBFQwBFQ1VBRE9SAEVHAEVHWVBUAFNWAEVMIFNBTFZBRE9SAEVF
+AEVTVE9OSUEARkkARklOTEFORABGUgBGUkFOQ0UARjIARlJBTkNFX1JFUwBHRQBHRU9S
+R0lBAERFAEdFUk1BTlkAR1IAR1JFRUNFAEdUAEdVQVRFTUFMQQBITgBIT05EVVJBUwBI
+SwBIT05HIEtPTkcASFUASFVOR0FSWQBJUwBJQ0VMQU5EAElOAElORElBAElEAElORE9O
+RVNJQQBJUgBJUkFOAElFAElSRUxBTkQASUwASVNSQUVMAElUAElUQUxZAEpQAEpBUEFO
+AEpBUEFOMQBKQVBBTjIASkFQQU4zAEpBUEFONABKQVBBTjUASkFQQU42AEpBUEFONwBK
+QVBBTjgASkFQQU45AEpBUEFOMTAASkFQQU4xMQBKQVBBTjEyAEpBUEFOMTMASkFQQU4x
+NABKQVBBTjE1AEpBUEFOMTYASkFQQU4xNwBKQVBBTjE4AEpBUEFOMTkASkFQQU4yMABK
+QVBBTjIxAEpBUEFOMjIASkFQQU4yMwBKQVBBTjI0AEpPAEpPUkRBTgBLWgBLQVpBS0hT
+VEFOAEtQAE5PUlRIIEtPUkVBAEtSAEtPUkVBIFJFUFVCTElDAEsyAEtPUkVBIFJFUFVC
+TElDMgBLMwBLT1JFQSBSRVBVQkxJQzMAS1cAS1VXQUlUAExWAExBVFZJQQBMQgBMRUJB
+Tk9OAExJAExJRUNIVEVOU1RFSU4ATFQATElUSFVBTklBAExVAExVWEVNQk9VUkcATU8A
+TUFDQVUATUsATUFDRURPTklBAE1ZAE1BTEFZU0lBAE1UAE1BTFRBAE1YAE1FWElDTwBN
+QwBNT05BQ08ATUEATU9ST0NDTwBOTABORVRIRVJMQU5EUwBOWgBORVcgWkVBTEFORABO
+TwBOT1JXQVkAT00AT01BTgBQSwBQQUtJU1RBTgBQQQBQQU5BTUEAUEUAUEVSVQBQSABQ
+SElMSVBQSU5FUwBQTABQT0xBTkQAUFQAUE9SVFVHQUwAUFIAUFVFUlRPIFJJQ08AUUEA
+UUFUQVIAUk8AUk9NQU5JQQBSVQBSVVNTSUEAU0EAU0FVREkgQVJBQklBAFNHAFNJTkdB
+UE9SRQBTSwBTTE9WQUsgUkVQVUJMSUMAU0kAU0xPVkVOSUEAWkEAU09VVEggQUZSSUNB
+AEVTAFNQQUlOAFNFAFNXRURFTgBDSABTV0lUWkVSTEFORABTWQBTWVJJQQBUVwBUQUlX
+QU4AVEgAVEhBSUxBTkQAVFQAVFJJTklEQUQgJiBUT0JBR08AVE4AVFVOSVNJQQBUUgBU
+VVJLRVkAVUEAVUtSQUlORQBBRQBVTklURUQgQVJBQiBFTUlSQVRFUwBHQgBVTklURUQg
+S0lOR0RPTQBVUwBVTklURUQgU1RBVEVTAFBTAFVOSVRFRCBTVEFURVMgKFBVQkxJQyBT
+QUZFVFkpAFVZAFVSVUdVQVkAVVoAVVpCRUtJU1RBTgBWRQBWRU5FWlVFTEEAVk4AVklF
+VCBOQU0AWUUAWUVNRU4AWlcAWklNQkFCV0UAAAAAAAAAAAAAAAAAAAAAADAuOS4xNy4y
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wH/AQAAAAAAAAAA
+AAD/////////fwAAAAAAAAAAAwCYAZkBAAAAAAAAAAAAAP////////9/AAAAAAAAAAAH
+AJgBMAsAAAAAAAAAAAAA/////////38AAAAAAAAAAAgAmAEwDAAAAAAAAAAAAAD/////
+////fwAAAAAAAAAAIAAgARAKAAAAAAAAAAAAAP////////9/AAAAAAAAAAAhACABmQEA
+AAAAAAAAAAAA/////////38AAAAAAAAAACIAIAEwDAAAAAAAAAAAAAD/////////fwAA
+AAAAAAAAOgBgARAKAAAAAAAAAAAAAP////////9/AAAAAAAAAAA7AGABmQEAAAAAAAAA
+AAAA/////////38AAAAAAAAAABIAZQEQCgAAAwAAAAAAAAD/////////fwAAAAAAAAAA
+NwAwAZkBAAADAAAAAAAAAP////////9/AAAAAAAAAAA1ADACmQEAAAMAAAAAAAAA////
+/////38AAAAAAAAAADYAMAOZAQAAAwAAAAAAAAD/////////fwAAAAAAAAAAMAAwBJkB
+AAADAAAAAAAAAP////////9/AAAAAAAAAAA5ADAFmQEAAAMAAAAAAAAA/////////38A
+AAAAAAAAADQAMAaZAQAAAwAAAAAAAAD/////////fwAAAAAAAAAAMgAwA5kBAAADAAAA
+AAAAAP////////9/AAAAAAAAAAAxADADmQEAAAAAAAAAAAAA/////////38AAAAAAAAA
+ABEAEAGZAQAAAAAAAAAAAAD/////////fwAAAAAAAAAAEAAQARAKAAAAAAAAAAAAAP//
+//////9/AAAAAAAAAABSAFABmQEAAAAAAAAAAAAA/////////38AAAAAAAAAAEUAUAKZ
+AQAAAAAAAAAAAAD/////////fwAAAAAAAAAARwBQA5kBAAAAAAAAAAAAAP////////9/
+AAAAAAAAAABCAFAEmQEAAAAAAAAAAAAA/////////38AAAAAAAAAAFgAUAWZAQAAAAAA
+AAAAAAD/////////fwAAAAAAAAAAWwBQBpkBAAAAAAAAAAAAAP////////9/AAAAAAAA
+AABdAFAImQEAAAAAAAAAAAAA/////////38AAAAAAAAAAF4AUAmZAQAAAAAAAAAAAAD/
+////////fwAAAAAAAAAAUABQAxAKAAAAAAAAAAAAAP////////9/AAAAAAAAAABVAFAB
+MAwAAAAAAAAAAAAA/////////38AAAAAAAAAAFYAUAIwDAAAAAAAAAAAAAD/////////
+fwAAAAAAAAAASQBQAlANAAAAAAAAAAAAAP////////9/AAAAAAAAAABAAEABQAoAAEYA
+AAAEAAAAKAAAAAAAAACIAQAAAAAAAEEAQAFACgAARwAAAAQAAABoAAAAAAAAAIkBAAAA
+AAAASABAARAKAABGAAAABAAAAAgAAAAAAAAAigEAAAAAAABKAEABQAoAAEYAAAAEAAAA
+CBgAAAAAAACMAQAAAAAAAEsAQAFACgAARgAAAAQAAAAIYAAAAAAAAI0BAAAAAAAATABA
+AVAKAABGAAAABAAAAAgAAAAAAAAAjwEAAAAAAABDAEACQAoAAEcAAAAEAAAAcAAAAAAA
+AACLAQAAAAAAAPAAQANACgAARgAAAAQAAAAgAAAAAAAAAAAAAAAAAAAAgABAA0AKAABH
+AAAABAAAAGAAAAAAAAAApw8AAAAAAADxAEADQAoAAEYAAAAEAAAAABgAAAAAAAAAAAAA
+AAAAAIEAQANACgAARgAAAAQAAAAAYAAAAAAAAKgPAAAAAAAAggBAA1AKAABGAAAABAAA
+AAAAAAAAAAAAqQ8AAAAAAADyAEADEAoAAEYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAIMA
+QARACgAARwAAAAQAAABggAAAAAAAAKoPAAAAAAAA9ABABEAKAABGAAAABAAAAACYAAAA
+AAAAAAAAAAAAAACEAEAEQAoAAEYAAAAEAAAAAOAAAAAAAACrDwAAAAAAAIUAQARQCgAA
+RgAAAAQAAAAAgAAAAAAAAKwPAAAAAAAA9QBABBAKAABGAAAABAAAAACAAAAAAAAAAAAA
+AAAAAACGAEAFQAoAAEcAAAAEAAAAYIAAAAAAAACtDwAAAAAAAIcAQAVACgAARgAAAAQA
+AAAA4AAAAAAAAK4PAAAAAAAAiABABVAKAABGAAAABAAAAACAAAAAAAAArw8AAAAAAACJ
+AEAGQAoAAEcAAAAEAAAAaAAAAAAAAACwDwAAAAAAAIoAQAZACgAARgAAAAQAAAAIYAAA
+AAAAALEPAAAAAAAAiwBABlAKAABGAAAABAAAAAgAAAAAAAAAsg8AAAAAAACMAEAHQAoA
+AEcAAAAEAAAAaIAAAAAAAACzDwAAAAAAAI0AQAdACgAARgAAAAQAAAAI4AAAAAAAALQP
+AAAAAAAAjgBAB1AKAABGAAAABAAAAAiAAAAAAAAAtQ8AAAAAAACPAEAIQAoAAEcAAAAE
+AAAAaIAAAAAAAAC2DwAAAAAAAJAAQAhACgAARgAAAAQAAAAI4AAAAAAAALcPAAAAAAAA
+kQBACFAKAABGAAAABAAAAAiAAAAAAAAAuA8AAAAAAAD2AEAJQAoAAEcAAAAEAAAAYIAA
+AAAAAAAAAAAAAAAAAPcAQAtACgAARwAAAAQAAABggAAAAAAAAAAAAAAAAAAAYABgAGAA
+AAAAAAAAAAAAAP////////9/AAAAAAAAAABhAGEAYQAAAAMAAAAAAAAA/////////38A
+AAAAAAAAAGIAYgBiAAAAAgAAAAAAAAD/////////fwAAAAAAAAAAYwBjAGMAAAAAAAAA
+AAAAAP////////9/AAAAAAAAAABkAGQAZAAAAAMAAAAAAAAA/////////38AAAAAAAAA
+AGUAZQBlAAAAAwAAAAAAAAD/////////fwAAAAAAAAAAZgBmAGYAAAAAAAAAAAAAAP//
+//////9/AAAAAAAAAABnAGcAZwAAAAAAAAAAAAAA/////////38AAAAAAAAAAGgAaABo
+AAAAAAAAAAAAAAD/////////fwAAAAAAAAAAaQBpAGkAAAADAAAAAAAAAP////////9/
+AAAAAAAAAABqAGoAagAAAAMAAAAAAAAA/////////38AAAAAAAAAAGUAAAABAAAA////
+/4AAAAD/////AAAAAEpQAAC0DwAAAAAAAGoAAAABAAAA/////4AAAAD/////AAAAAEpQ
+AAC0DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAABAAAAAQAAAFgbAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AQAAAAEAAABYGwAACAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsA
+AAwAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAAgAEcAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYGwAAMwAwAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAQAAAAAAAAABAAAAWBsAACQAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAA
+AQAAAFgbAAAoADcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAHwAw
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAADAAWwAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAABwAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+AAAAAAAAAAEAAABYGwAAOAA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAA
+WBsAAFQAVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAFgbAABEAFUAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAABYGwAATAA7AAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQAAAAAAAAAAAAAAWBsAAGAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB
+AAAAAQAAAFgbAABkADQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAA
+fAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAAJgAWwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAFgbAACcAFIAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAQAAAAEAAABYGwAAqgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
+AAAAWBsAALwAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAC/ADYA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAxAA3AAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAAMsANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
+AAAAAAAAAQAAAFgbAADQADcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABY
+GwAA1gAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAANoAAwAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgbAAAyAzYAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAAAAAAAAAAEAAABYGwAA3gADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
+AAABAAAAWBsAAOkANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAD2
+ADcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAA+gA3AAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAP8ANgAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAEAAAAAAAAAAQAAAFgbAAAMATAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEA
+AABYGwAAFAE3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAACwBNwAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAABAARAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAABAAAAAQAAAAEAAABYGwAAVAEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+AAAAAAABAAAAWBsAAFgBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAFgb
+AABcATcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAYAE3AAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAGQBWwAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAEAAAAAAAAAAQAAAFgbAABoAVIAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+AAEAAABYGwAAbAFSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAWBsAAHQB
+NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAB4AQMAAAAAAAAAAAAA
+AAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAfAE3AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AQAAAAAAAAABAAAAWBsAAIgBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA
+AFgbAACJAUEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAAigFIAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsAAIsBQwAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAAAAAAAAAAAAFgbAACMAUoAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AAAAAAAAAABYGwAAjQFLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsA
+AI8BTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACnD4AAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAAqA+BAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAQAAAAAAAAAAAAAAWBsAAKkPggAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA
+AAAAAFgbAACqD4MAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAAqw+E
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsAAKwPhQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACtD4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+AAAAAAAAAAAAAABYGwAArg+HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA
+WBsAAK8PiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACwD4kAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAAsQ+KAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQAAAAAAAAAAAAAAWBsAALIPiwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
+AAAAAAAAAFgbAACzD4wAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABYGwAA
+tA+NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsAALUPjgAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAAC2D48AAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAAAAAAAAAABYGwAAtw+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA
+AAAAWBsAALgPkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACQAUIA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAjgEDAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAJgBRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
+AAABAAAAAQAAAFgbAACaAUUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAABY
+GwAAmwFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAWBsAAJwBXgAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAACeAQMAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAAAAAAAAAAEAAABYGwAArAE3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
+AAABAAAAWBsAAKYBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAC2
+ATcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAuAE3AAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAALoBNwAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAEAAAAAAAAAAQAAAFgbAAC+ASEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEA
+AABYGwAAJwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAMoBXQAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFgbAADWATcAAAAAAAAAAAAAAAAA
+AAAAAAAAAAABAAAAAAAAAAEAAABYGwAA5AEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+AAEAAAABAAAAWBsAAOwBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAFgb
+AAD4AQMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAEAI3AAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAACoCIgAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAEAAAAAAAAAAQAAAFgbAABCAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+AAEAAABYGwAAAAJbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAEoC
+AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAABPAhAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAABAAAAAQAAAAEAAABYGwAAXAJSAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AQAAAAAAAAABAAAAWBsAAGACUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAA
+AFgbAABoAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAbAI3AAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAHYCEAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAABAAAAAQAAAFgbAAB6AgMAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AAAAAAEAAABYGwAAggIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsA
+AIMCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAACqAgMAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAvgJbAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAQAAAAEAAAABAAAAWBsAAL8CNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA
+AQAAAFgbAADBAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAAxgI7
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAANQCNwAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAADwAjcAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+AAAAAAAAAAEAAABYGwAA9AI3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAA
+WBsAAPgCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAACeAFAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAABYGwAA/AIDAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQAAAAAAAAABAAAAWBsAAAwDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
+AAAAAQAAAFgbAAAUAzYAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABYGwAA
+GAM2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAACQDAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAAAQAwMAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAAAAAAEAAABYGwAAOgM3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
+AAAAWBsAAEgDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAMEWAABKAxIA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAABYGwAAWgNFAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAFwDOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
+AAABAAAAAQAAAFgbAABeA1YAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAABY
+GwAAwAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAWBsAAHcDAwAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAFgbAADMAgMAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAAAAAAAAAAEAAABYGwAAAAAAAAAAAAAzEz0TFwAKBQAAAAAAAAAAEAAAAAAA
+AAAQAAAAAAAAAEcTURMXAAoFAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAOBN0ExcAFBQA
+AAAAAAAAABAAAAAAAAAABwAAAAAAAABOE3sTGwYFBQAAAAAAAAAAAQAAAAAAAAAAAAAA
+AAAAAFETeRMeBgoFAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAVhN0EyEGFAUAAAAAAAAA
+AAEAAAAAAAAAAAAAAAAAAACrE7ATFwAKBQAAAAAAAAAAEAAAAAAAAAAMAAAAAAAAALAT
+2BMXABQUAAAAAAAAAAAQAAAAAAAAAAIAAAAAAAAAvxO/ExcACgUAAAAAAAAAABAAAAAA
+AAAADAAAAAAAAAAAFHgUBQYUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIUbhQXABQU
+AAAAAAAAAAAYAAAAAAAAAAEAAAAAAAAAMhRuFBQAFBQAAAAAAAAAABgAAAAAAAAAAQAA
+AAAAAAA8FHgUDwAUFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADwUeBQRBhQUAAAAAAAA
+AAABAAAAAAAAAAEAAAAAAAAAPBR4FBIAFBQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA8
+FHgUFAAUFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADwUeBQXABQUAAAAAAAAAAAFAAAA
+AAAAAAAAAAAAAAAAPBR4FBcGFBQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA8FMgUFAYU
+FAIAAAAAAAAABAAAAAAAAAAAAAAAAAAAAHgUoBQXABQUAQAAAAAAAAAFAAAAAAAAAAAA
+AAAAAAAAjBSgFBcAFBQDAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACMFMgUEgAUFAMAAAAA
+AAAABQAAAAAAAAAAAAAAAAAAAIwUyBQUABQUBwAAAAAAAAAFgAAAAAAAAAAAAAAAAAAA
+jBTIFBQGFBQDAAAAAAAAAAEAAAAAAAAAAgAAAAAAAACMFMgUFwYUFAMAAAAAAAAAAQAA
+AAAAAAACAAAAAAAAAIwUyBQXBhQUAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAjBTIFB4A
+FBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMFEQWBQYUFAMAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAKAUyBQRBhQUAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAfBX0FR4GFBQCAAAA
+AAAAAAQAAAAAAAAAAAAAAAAAAAB8FUQWFAYUFAMAAAAAAAAAAQAAAAAAAAAEAAAAAAAA
+AHwVRBYbABQUAwAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfBVEFh4AFBQDAAAAAAAAAAUA
+AAAAAAAAAAAAAAAAAAB8FUQWFwAUFAcAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAHEWrRYX
+ABQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcRatFh4GFBQAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAABxFq0WHgYUFAIAAAAAAAAABAAAAAAAAAAAAAAAAAAAAHEWwRYFBhQUAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAcRbBFhEAFBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABxFsEWFAAUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEWwRYeABQUAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAcRbBFh4GFBQAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABxFsEW
+HgYUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgTdBMeABQUAAAAAAAAAAAABAAAAAAA
+AAAAAAAAAAAAsBPYEx4AFBQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAyFG4UHgAUFAMA
+AAAAAAAAAAQAAAAAAAAAAAAAAAAAADwUeBQeABQUAwAAAAAAAAAABAAAAAAAAAAAAAAA
+AAAAjBTIFB4AFBQDAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABxFsEWHgAUFAAAAAAAAAAA
+AAQAAAAAAAAAAAAAAAAAAHwVRBYeABQUAwAAAAAAAAAABAAAAAAAAAAAAAAAAAAAChRa
+FAUGKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCFNIUBQYoKAEAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAPoUchUFBigoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmhUSFgUGKCgB
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeFEYUBQYoKAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAG4UvhQFBigoAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5hReFQUGKCgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAACGFSYWBQYoKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAU
+eBQRBigoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBR4FBcGKCgAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAABaFFoUEQYoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFoUWhQXACgo
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoBSgFBcGKCgBAAAAAAAAAAIAAAAAAAAAAAAA
+AAAAAACgFKAUFAYoKAEAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIIUghQRACgoAQAAAAAA
+AAACAAAAAAAAAAAAAAAAAAAAqhSqFBQAKCgBAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACC
+FKoUFAAoKAEAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIIUqhQXBigoAQAAAAAAAAACAAAA
+AAAAAAAAAAAAAAAApBUcFhQGKCgBAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAFqgWFAAo
+KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAWqBYeBigoAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAhRatFh4GKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaFIIUDwAoKAMAAAAA
+AAAAAAQAAAAAAAAAAAAAAAAAAKoUqhQSACgoAwAAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+pBUcFhQAKCgDAAAAAAAAAAAEAAAAAAAAAAAAAAAAAACAFqgWFAAoKAAAAAAAAAAAAAQA
+AAAAAAAAAAAAAAAAAAgJRAkFBhQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAlECRQA
+FAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsCagJBQYUBQAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAGwJqAkUABQFAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAbAmoCR4AFAUAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAABsCZ4JGwYUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AGwJngkUABQFAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAgAmKCRQAFAUAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAACZCagJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMJqAkU
+ABQFAAAAAAAAAAAgIAAAAAAAAAAAAAAAAAAAtAm0CQUGFAUAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAC0CbQJFAAUBQAAAAAAAAAAICgAAAAAAAAAAAAAAAAAANAJrAoFBhQFAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAACAlECRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABsCWwJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEJgAkUABQFAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAhQmKCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPCZkJ
+FAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4JngkUABQFAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAowmjCRQAFAUAAAAAAAAAAAAEAAAAAACAAAAAAAAAAACjCaMJFAAUBQAA
+AAAAAAAAAAAAAAAAAIAAAAAAAAAAAKgJqAkUABQFAAAAAAAAAAAABAAAAAAAgAAAAAAA
+AAAAqAmoCRQAFAUAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAC0CbQJFAAUBQAAAAAAAAAA
+AAQAAAAAAIAAAAAAAAAAALQJtAkUABQFAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAACAlE
+CQUGFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICUQJFAAUBQAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAGwJqAkFBhQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAmoCRQAFAUA
+AAAAAAAAAEAAAAAAAAAAAAAAAAAAAABsCagJHgAUBQAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAGwJngkbBhQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAmeCRQAFAUAAAAAAAAA
+AEAAAAAAAAAAAAAAAAAAAACACYoJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkJ
+qAkUABQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AmsCgUGFAUAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAACjCagJFAAUBQAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAgJRAkUABQF
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAlsCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAABxCYAJFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUJigkUABQFAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAjwmZCRQAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe
+CZ4JFAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMJowkUABQFAAAAAAAAAAAABAAA
+AAAAgAAAAAAAAAAAowmjCRQAFAUAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACoCagJFAAU
+BQAAAAAAAAAAAAQAAAAAAIAAAAAAAAAAAKgJqAkUABQFAAAAAAAAAAAAAAAAAAAAgAAA
+AAAAAAAACAlECQUGKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFCYUJBQYoKAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAIUJhQkUBigoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+hQmFCRIGKCgAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAADQCawKBQYoKAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAP8BEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACCAA
+AAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAESQAAAAAAAAAAAAAAAAABRQAAAAAAAAA
+AAAAAAAAAAUCAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAUAEQAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAABQAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFADEAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAUAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA
+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBRAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAFAGMAAAAAAAAgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAIBA
+AIAAAAAAAAAAAAAAAAAICQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAgwAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAEAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAABQCTAAAAAAAAIAAAAAAAAABAAAAAAAAAADAAAAAAAAAAAA
+BCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABMAAAAAAA
+AgAAAAAAAAAEAAAAAAAAAAMAAAAAAAAAAIBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAMAIwAAAAAAACAAAAAAAAAAQAAAAAAAAAAwAAAAAAAAAA
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAzAAAAAA
+AAIAAAAAAAAABAAAAAAAAAADAAAAAAAAAACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAADAEMAAAAAAAAgAAAAAAAAAEAAAAAAAAAAMAAAAAAAAA
+AEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUwAAAA
+AAACAAAAAAAAAAQAAAAAAAAAAwAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAwBjAAAAAAAAIAAAAAAAAABAAAAAAAAAADAAAAAAAA
+AAAAEQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABEAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAQACAAAAAAAAAAAAAAAEEgAAAAAA
+AAAAAAAAAAAAESAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAICAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASIAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgARAA
+AAAAAAEAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAggEAAAgAAAAAAAAAAAAAAxBAAAAAA
+AAAAAAAAAAAAACEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUBEAAAAAAAAQAAAAAAAAADAAAAAAAAAAAAAAAA
+AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAFA
+AAAAAAAAAAAAAAAAAAgAAAAAAAAAAgAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAkAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAA
+AAAAAMcFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAD
+QAAAAAAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQARAAAAAAAAEAAAAAAAAAACAAAAAAAAAAgAA
+AAAAAAAAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA
+BUAAAAAAAAQAAAAAAAAAAIAAAAAAAAACAAAAAAAAAACAQAACAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAGQAAAAAAAAAAAAAAAAAAIAAAAAAAAAAIA
+AAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+QAdAAAAAAAAEAAAAAAAAAAiAAAAAAAAAAgAAAAAAAAAAhEAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACEAAAAAAAAQAAAAAAAAACIAAAAAAAAAC
+AAAAAAAAAACEQAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AEAJQAAAAAAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAx4EAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAtAAAAAAAAEAAAAAAAAAACAAAAAAAAA
+AgAAAAAAAADHgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AABQDf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAK/wAAAAAAAAAAAAAAAACAAAAAAAAA
+AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAA
+AAAAMAswAAAAAAAAAAAAAAAAAAABAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAA
+AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAwDDAAAAAAAAAAAAAAAAAAAAIAAAAA
+AAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAA
+AAAAABAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAA
+AAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQApAAAAAAAAAAAAAAAAAAGB4AAAA
+AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAABACgAAAAAAAAAAAAAAAAAAQAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAA
+AAAAAABQCkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAI
+AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAJkBMAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAA
+AAAAAAAAYAD/AAAAAAADAAAAAAAAAAAEAAAAAAAACAAAAAAAAAAAAAAAAOADAAAAAAAA
+AAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwK8AAAAAAAAAAAAAAAAA
+APALAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAABmAP8AAAAAAAMAAAAAAAAAAAQA
+AAAAAAAIAAAAAAAAAAAAAAAA4AMAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA8AEAAAAAAAAAAAAAAAAACAAAAAAAAAAA
+AAAAAAAAAGcA/wAAAAAAAwAAAAAAAAAABAAAAAAAAAgAAAAAAAAAAAAAAADgAwAAAAAA
+AAAAAAAAwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvAAAAAAAAAAAAAAAA
+AADwCwAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAaAD/AAAAAAADAAAAAAAAAAAE
+AAAAAAAACAAAAAAAAAAAAAAAAOADAAAAAAAAAAAAAADAAgAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAwFcAAAAAAAAAAAAAAAAAAPAVAAAAAAAAAAAAAAAAAAgAAAAAAAAA
+AAAAAAAAAABhAP8AAAAAAAMAAAAAAAAAAAQAAAAAAAAQAAAAAAAAAAAAAAAA4AMAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADArwAAAAAAAAAAAAAA
+AAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAGIA/wAAAAAAAwAAAAAAAAAA
+BAAAAAAAABAAAAAAAAAAAAAAAADgAwAAAAAAAAAAAAAAwAIAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAMCvAAAAAAAAAAAAAAAAAADwCwAAAAAAAAAAAAAAAAAIAAAAAAAA
+AAAAAAAAAAAAYwD/AAAAAAADAAAAAAAAAAAEAAAAAAAACAAAAAAAAAAAAAAAAOABAAAA
+AAAAAAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwC8AAAAAAAAAAAAA
+AAAAAPALAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAABkAP8AAAAAAAMAAAAAAAAA
+AAQAAAAAAAAQAAAAAAAAAAAAAAAAwAEAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAA8AEAAAAAAAAAAAAAAAAACAAAAAAA
+AAAAAAAAAAAAAGUA/wAAAAAAAwAAAAAAAAAABAAAAAAAABAAAAAAAAAAAAAAAADAAQAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvAAAAAAAAAAAA
+AAAAAADwCwAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAaQD/AAAAAAADAAAAAAAA
+AAAEAAAAAAAAEAAAAAAAAAAAAAAAAMADAAAAAAAAAAAAAADAAgAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAwAcAAAAAAAAAAAAAAAAAAPABAAAAAAAAAAAAAAAAAAgAAAAA
+AAAAAAAAAAAAAABqAP8AAAAAAAMAAAAAAAAAAAQAAAAAAAAQAAAAAAAAAAAAAAAAwAMA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwAAAAAAAAAA
+AAAAAAAA8AsAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAJgB/wAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAQADwAPMAiIHwAPMAQQCAAIMAiYGAAIMASADyAPUAioHyAPUAQwD2
+APcAi4H2APcASgDxAPQAjIHxAPQASwCBAIQAjYGBAIQATACCAIUAj4GCAIUAAAAAAAAA
+AAAAAAAAiAHwAPMAiQGAAIMAigHyAPUAiwH2APcAjAHxAPQAjQGBAIQAjwGCAIUAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAECcBcLAIwAAAAAAAECKCMPABIAAAAAAAEC4C4KAJgCAAAAAAECUEYOACQCAAAA
+AAECwF0JALAEAAAAAAECoIwNAEgEAAAAAAECgLsIAGAEAAAAAAEC8NIMAGwEAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAOgD
-CwCCAAAAAAABANAHCgSEAQAAAAABAHwVCQSLAQAAAAABAPgqCASWAQAAAAAAAAAAAAAA
+AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA3AXCwCM
+AAAAAAABAygjDwASAAAAAAABA+AuCgCYAgAAAAABA1BGDgAkAgAAAAABA8BdCQCwBAAA
+AAABA6CMDQBIBAAAAAABA4C7CABgBAAAAAABA/DSDABsBAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8A
+EgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIAAAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQA
+AAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-BKIAAAAAAAAAAAAACKIAAEZGPlBGRj5QDKIAAGxBgGRsQYBkEKIAAAOgmQEDoJkBFKIA
-ABDWTAQQ1kwEGKIAAEAAgBNAAIATHKIAAGAA4BtgAOAbIKIAAAqAUwwKgFMMJKIAADvf
-FAA73xQAKKIAALUBAAC1AQAALKIAACAAAAAgAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4K
+AJgCAAAAAAEDUEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAE
+AAAAAAED8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAABAOgDCwCCAAAAAAABANAHCgSEAQAAAAABAHwVCQSLAQAAAAABAPgq
+CASWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAABKIAAAAAAAAAAAAACKIAAEZGPlBGRj5QDKIAAGxBgGRsQYBk
+EKIAAAOgmQEDoJkBFKIAABDWTAQQ1kwEGKIAAEAAgBNAAIATHKIAAGAA4BtgAOAbIKIA
+AAqAUwwKgFMMJKIAADvfFAA73xQAKKIAALUBAAC1AQAALKIAACAAAAAgAAAAnJgAAAAA
+AAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAA
AAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAA
-nJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgA
-AAAAAAAAAAAAnJgAAAAAOAAAADgAnJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAA
-AAAAAAAAnJgAAPkABAD5AAQA1JgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAJyYAAAA
-AAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAA
-AAAAAJyYAAAAAAAQAAAAEJyYAAAAAAAEAAAABJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAA
-AJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAACpyYAACAADgAgAA4ApyYAAAGAAIABgAAAJyY
-AACSAAAAkgAAAJyYAACgAAAAoAAAAJyYAAAHAAQABwAEANSYAAAaAAAAGgAAAJyYAABI
-AAAASAAAAJyYAAAQAAAAEAAAAJyYAAAIAAAACAAAAJyYAAAPAAAADwAAAJyYAADyAAAA
-YgAAAJyYAABPkAAATJAAAJyYAABaEgAAmhIAAMyYAAAOAAAADwAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJwFwsA
-jAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4AJAIAAAAAAQLAXQkAsAQA
-AAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMP
-ABIAAAAAAAED4C4KAJgCAAAAAAEDUEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgE
-AAAAAAEDgLsIAGAEAAAAAAED8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAOgDGwCCAAAAAAABANAHGgSEAQAAAAABAHwV
-GQSLAQAAAAABAPgqGASWAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAQDoAxsAAgAAAAAAAQDQBxoEBAEAAAAAAQB8FRkECwIAAAAAAQD4
-KhgEFgMAAAAAAAJwFwsADAQAAAAAAAIoIw8AEgQAAAAAAQLgLgoAGAYAAAAAAQJQRg4A
-JAYAAAAAAQLAXQkAMAgAAAAAAQKgjA0ASAgAAAAAAQKAuwgAYAgAAAAAAQLw0gwAbAgA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEE9AEHAIEAAAAAAAEE6AMCAIsBAAAAAAEE0AcGAJYCAAAAAAEEuAsBAJYDAAAAAAEC
-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
-AAAAABQAAABUAwAAAAAAAAAAAAAGAAAAAAAAABQAAABsAwAAAAAAAAAAAAABAAAAAAAA
-ABQAAACEAwAAAAAAAAAAAAABAAAAAAAAABwAAACcAwAAAAAAAAAAAAAkAAAAAAAAAEQO
-EAAAAAAAHAAAALwDAAAAAAAAAAAAAC8AAAAAAAAARA4QAAAAAAAcAAAA3AMAAAAAAAAA
-AAAADgAAAAAAAABEDhAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABQAAAAcAAAA
-AAAAAAAAAAAzAAAAAAAAABwAAAA0AAAAAAAAAAAAAACVAAAAAAAAAEQOIEqGAoMDFAAA
-AFQAAAAAAAAAAAAAAC0AAAAAAAAAJAAAAGwAAAAAAAAAAAAAAHsAAAAAAAAARA4gTowC
-hgODBAAAAAAAABQAAACUAAAAAAAAAAAAAAAHAAAAAAAAABQAAACsAAAAAAAAAAAAAAAG
-AAAAAAAAABQAAADEAAAAAAAAAAAAAAAbAAAAAAAAABQAAADcAAAAAAAAAAAAAAAgAAAA
-AAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABwAAAAcAAAAAAAAAAAAAAAxAAAAAAAA
-AEEOEIMCAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAFAAAABwAAAAAAAAAAAAAAAgA
-AAAAAAAAFAAAADQAAAAAAAAAAAAAAAgAAAAAAAAAFAAAAEwAAAAAAAAAAAAAAAwAAAAA
-AAAAJAAAAGQAAAAAAAAAAAAAAEsAAAAAAAAAQQ4QQQ4YRA4ggwOGAgAAABQAAACMAAAA
-AAAAAAAAAAAUAAAAAAAAABQAAACkAAAAAAAAAAAAAAAUAAAAAAAAABQAAAC8AAAAAAAA
-AAAAAAAVAAAAAAAAABQAAADUAAAAAAAAAAAAAABSAAAAAAAAABQAAADsAAAAAAAAAAAA
-AABSAAAAAAAAABQAAAAEAQAAAAAAAAAAAAALAAAAAAAAABQAAAAcAQAAAAAAAAAAAAAc
-AAAAAAAAABQAAAA0AQAAAAAAAAAAAAA7AAAAAAAAABQAAABMAQAAAAAAAAAAAAAfAQAA
-AAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAADwAAAAcAAAAAAAAAAAAAAAkBgAAAAAA
-AEIOEEIOGEIOIEIOKEEOMEEOOEQOQIMHhgaMBY0EjgOPAgAAAAAAAAAUAAAAXAAAAAAA
-AAAAAAAAXAAAAAAAAAAcAAAAdAAAAAAAAAAAAAAAGAAAAAAAAABEDhAAAAAAABwAAACU
-AAAAAAAAAAAAAABrAAAAAAAAAEEOEIMCAAAAHAAAALQAAAAAAAAAAAAAAOQAAAAAAAAA
-RA4gSoYCgwM8AAAA1AAAAAAAAAAAAAAA9gEAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhE
-DkCDB4YGjAWNBI4DjwIAAAAAAAAAJAAAABQBAAAAAAAAAAAAAHQAAAAAAAAARA4gTowC
-hgODBAAAAAAAABQAAAA8AQAAAAAAAAAAAACtAAAAAAAAABwAAABUAQAAAAAAAAAAAADl
-AAAAAAAAAEEOEIMCAAAAFAAAAHQBAAAAAAAAAAAAABgAAAAAAAAAPAAAAIwBAAAAAAAA
-AAAAAOgCAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44RA5AgweGBowFjQSOA48CAAAAAAAA
-ACwAAADMAQAAAAAAAAAAAADKAgAAAAAAAEIOEEEOGEEOIEQOkAGDBIYDjAIAAAAAACQA
-AAD8AQAAAAAAAAAAAACPAAAAAAAAAEQOIE6MAoYDgwQAAAAAAAAUAAAAJAIAAAAAAAAA
-AAAAHAAAAAAAAAAkAAAAPAIAAAAAAAAAAAAAdwAAAAAAAABBDhBBDhhEDiCDA4YCAAAA
-FAAAAGQCAAAAAAAAAAAAAAYAAAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAHAAA
-ABwAAAAAAAAAAAAAAC0AAAAAAAAARA4QAAAAAAAcAAAAPAAAAAAAAAAAAAAAMwAAAAAA
-AABEDhAAAAAAACQAAABcAAAAAAAAAAAAAADdAAAAAAAAAEQOMFiOAo0DjASGBYMGAAAU
-AAAAhAAAAAAAAAAAAAAAXgAAAAAAAAAUAAAAnAAAAAAAAAAAAAAAYAIAAAAAAAAUAAAA
-tAAAAAAAAAAAAAAAKQAAAAAAAAAUAAAAzAAAAAAAAAAAAAAAQQAAAAAAAAAkAAAA5AAA
-AAAAAAAAAAAAkgAAAAAAAABEDiBOjAKGA4MEAAAAAAAAFAAAAAwBAAAAAAAAAAAAAGcA
-AAAAAAAAFAAAACQBAAAAAAAAAAAAADIAAAAAAAAAJAAAADwBAAAAAAAAAAAAAJgAAAAA
-AAAAQQ4QQQ4YRA4ggwOGAgAAABQAAABkAQAAAAAAAAAAAAAGAAAAAAAAABQAAAB8AQAA
-AAAAAAAAAACvAAAAAAAAABQAAACUAQAAAAAAAAAAAAAGAAAAAAAAABQAAACsAQAAAAAA
-AAAAAABKAAAAAAAAABQAAADEAQAAAAAAAAAAAACMAAAAAAAAABQAAADcAQAAAAAAAAAA
-AAABAAAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABwAAAAcAAAAAAAAAAAAAABb
-AAAAAAAAAEQOEAAAAAAAPAAAADwAAAAAAAAAAAAAAI4EAAAAAAAAQg4QQg4YQg4gQg4o
-QQ4wQQ44RA5QgweGBowFjQSOA48CAAAAAAAAABwAAAB8AAAAAAAAAAAAAAAOAAAAAAAA
-AEQOEAAAAAAAHAAAAJwAAAAAAAAAAAAAAPcAAAAAAAAAQQ4QRA4wgwIUAAAAvAAAAAAA
-AAAAAAAAOAAAAAAAAAAcAAAA1AAAAAAAAAAAAAAAqwAAAAAAAABEDiBKhgKDAxQAAAAA
-AAAAAQABeBAMBwiQAQAAAAAAABQAAAAcAAAAAAAAAAAAAACkAAAAAAAAACQAAAA0AAAA
-AAAAAAAAAABGAAAAAAAAAEEOEEEOGEQOIIMDhgIAAAAUAAAAXAAAAAAAAAAAAAAANwAA
-AAAAAAAUAAAAdAAAAAAAAAAAAAAA4wAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAA
-AAAUAAAAHAAAAAAAAAAAAAAAEwAAAAAAAAAUAAAANAAAAAAAAAAAAAAAVwAAAAAAAAAU
+nJgAAAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAAAAOAAAADgAnJgAAAAAAAAAAAAAnJgA
+AAAAAAAAAAAAnJgAAAAAAAAAAAAAnJgAAPkABAD5AAQA1JgAAAAAAAAEAAAAAAAAAAAA
+AAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAA
+AAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAQAAAAEJyYAAAAAAAEAAAABJyYAAAAAAAA
+AAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAAAJyYAAAAAAAAAAAACpyYAACAADgAgAA4
+ApyYAAAGAAIABgAAAJyYAACSAAAAkgAAAJyYAACgAAAAoAAAAJyYAAAHAAQABwAEANSY
+AAAaAAAAGgAAAJyYAABIAAAASAAAAJyYAAAQAAAAEAAAAJyYAAAIAAAACAAAAJyYAAAP
+AAAADwAAAJyYAADyAAAAYgAAAJyYAABPkAAATJAAAJyYAABaEgAAmhIAAMyYAAAOAAAA
+DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQJwFwsAjAAAAAAAAQIoIw8AEgAAAAAAAQLgLgoAmAIAAAAAAQJQRg4A
+JAIAAAAAAQLAXQkAsAQAAAAAAQKgjA0ASAQAAAAAAQKAuwgAYAQAAAAAAQLw0gwAbAQA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEC
+uAsLAIYAAAAAAAEClBEPAAkAAAAAAAECcBcKAIwCAAAAAAECKCMOABICAAAAAAEC4C4J
+AJgEAAAAAAECUEYNACQEAAAAAAECwF0IADAEAAAAAAECeGkMADYEAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAtwFCwCDAAAAAAAB
+AsoIDwAEAAAAAAABArgLCgCGAgAAAAABApQRDgAJAgAAAAABAnAXCQCMBAAAAAABAigj
+DQASBAAAAAABAuAuCAAYBAAAAAABArw0DAAbBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNwFwsAjAAAAAAAAQPgLgoAmAIAAAAA
+AQNQRg4AJAIAAAAAAQPAXQkAsAMAAAAAAQOgjA0ASAMAAAAAAQOAuwgAYAMAAAAAAQPw
+0gwAbAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEDcBcLAIwAAAAAAAEDKCMPABIAAAAAAAED4C4KAJgCAAAA
+AAEDUEYOACQCAAAAAAEDwF0JALAEAAAAAAEDoIwNAEgEAAAAAAEDgLsIAGAEAAAAAAED
+8NIMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAOgDGwCCAAAAAAABANAHGgSEAQAAAAABAHwVGQSLAQAAAAABAPgqGASWAQAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDoAxsA
+ggAAAAAAAQDQBxoEhAEAAAAAAQB8FRkEiwIAAAAAAQD4KhgElgMAAAAAAAJwFwsADAQA
+AAAAAAIoIw8AEgQAAAAAAQLgLgoAGAYAAAAAAQJQRg4AJAYAAAAAAQLAXQkAMAgAAAAA
+AQKgjA0ASAgAAAAAAQKAuwgAYAgAAAAAAQLw0gwAbAgAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0A
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE+gADAIEAZAJkAgEE9AEH
+AIEAyQHJAQEE6AMCAIIB5ADkAAEE0AcGAIQCoACgAAEEuAsBAIYDjACMAAECcBcLAIwE
+PAA8AAECKCMPABIEPAA8AAEC4C4KAJgGMAAwAAECUEYOACQGMAAwAAECwF0JADAILAAs
+AAECoIwNAEgILAAsAAECgLsIAGAILAAsAAEC8NIMAGwILAAsAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAAAAAUAAAAHAAAAAAAAAAA
+AAAAFgEAAAAAAAAcAAAANAAAAAAAAAAAAAAALQAAAAAAAABEDhAAAAAAABwAAABUAAAA
+AAAAAAAAAAANAQAAAAAAAEQOEAAAAAAAFAAAAHQAAAAAAAAAAAAAAAwAAAAAAAAANAAA
+AIwAAAAAAAAAAAAAAFEAAAAAAAAAQg4QQg4YQg4gQQ4oQQ4wgwaGBYwEjQOOAgAAAAAA
+AAAUAAAAxAAAAAAAAAAAAAAAIQAAAAAAAAAUAAAA3AAAAAAAAAAAAAAA1QEAAAAAAAAU
+AAAA9AAAAAAAAAAAAAAAVAAAAAAAAAAcAAAADAEAAAAAAAAAAAAARAEAAAAAAABEDiBK
+hgKDAxwAAAAsAQAAAAAAAAAAAAAnAAAAAAAAAEEOEIMCAAAAHAAAAEwBAAAAAAAAAAAA
+AEQAAAAAAAAAQQ4QgwIAAAA0AAAAbAEAAAAAAAAAAAAAsgAAAAAAAABCDhBCDhhCDiBB
+DihBDjCDBoYFjASNA44CAAAAAAAAABQAAACkAQAAAAAAAAAAAAAZAQAAAAAAABQAAAC8
+AQAAAAAAAAAAAABbAAAAAAAAABwAAADUAQAAAAAAAAAAAABkAAAAAAAAAEEOEIMCAAAA
+HAAAAPQBAAAAAAAAAAAAAJQAAAAAAAAAQQ4QgwIAAAAUAAAAFAIAAAAAAAAAAAAANAEA
+AAAAAAAUAAAALAIAAAAAAAAAAAAAaAAAAAAAAAAkAAAARAIAAAAAAAAAAAAAcgAAAAAA
+AABEDiBOjAKGA4MEAAAAAAAAPAAAAGwCAAAAAAAAAAAAAFQBAAAAAAAAQg4QQg4YQg4g
+Qg4oQQ4wQQ44RA5AgweGBowFjQSOA48CAAAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAA
+AAAAABwAAAAcAAAAAAAAAAAAAABsAAAAAAAAAEEOEIMCAAAAFAAAADwAAAAAAAAAAAAA
+AEQAAAAAAAAAFAAAAFQAAAAAAAAAAAAAACUAAAAAAAAALAAAAGwAAAAAAAAAAAAAAJ4C
+AAAAAAAAQg4QQg4YQQ4gQQ4oRA4wgwWGBIwDjQIAJAAAAJwAAAAAAAAAAAAAAOQAAAAA
+AAAAQg4QQQ4YQQ4ggwSGA4wCABwAAADEAAAAAAAAAAAAAABjAgAAAAAAAEQOEAAAAAAA
+PAAAAOQAAAAAAAAAAAAAAIgEAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44Rw6QA4MHhgaM
+BY0EjgOPAgAAAAAAACQAAAAkAQAAAAAAAAAAAABEAAAAAAAAAEEOEEEOGEQOIIMDhgIA
+AAAUAAAATAEAAAAAAAAAAAAAaQAAAAAAAAA8AAAAZAEAAAAAAAAAAAAAIAYAAAAAAABC
+DhBCDhhCDiBCDihBDjBBDjhEDoABgweGBowFjQSOA48CAAAAAAAAHAAAAKQBAAAAAAAA
+AAAAANwAAAAAAAAAQQ4QgwIAAAA8AAAAxAEAAAAAAAAAAAAAagEAAAAAAABCDhBCDhhC
+DiBCDihBDjBBDjhEDkiDB4YGjAWNBI4DjwIAAAAAAAAAPAAAAAQCAAAAAAAAAAAAAPEB
+AAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44RA5AgweGBowFjQSOA48CAAAAAAAAADwAAABE
+AgAAAAAAAAAAAAAnAwAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOUIMHhgaMBY0EjgOP
+AgAAAAAAAAA8AAAAhAIAAAAAAAAAAAAAVQIAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhE
+DlCDB4YGjAWNBI4DjwIAAAAAAAAAPAAAAMQCAAAAAAAAAAAAAA8EAAAAAAAAQg4QQg4Y
+Qg4gQg4oQQ4wQQ44RA5QgweGBowFjQSOA48CAAAAAAAAADQAAAAEAwAAAAAAAAAAAAAv
+DgAAAAAAAEIOEEIOGEIOIEEOKEEOMEQOQIMGhgWMBI0DjgIAAAAAHAAAADwDAAAAAAAA
+AAAAAHwAAAAAAAAARA4gSoYCgwMcAAAAXAMAAAAAAAAAAAAAHAAAAAAAAABEDhAAAAAA
+ABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABQAAAAcAAAAAAAAAAAAAAAoAAAAAAAAABQA
+AAA0AAAAAAAAAAAAAAANAAAAAAAAABQAAABMAAAAAAAAAAAAAAAiAAAAAAAAABwAAABk
+AAAAAAAAAAAAAABrAAAAAAAAAEQOEAAAAAAAHAAAAIQAAAAAAAAAAAAAAHUAAAAAAAAA
+QQ4QgwIAAAAkAAAApAAAAAAAAAAAAAAAdwAAAAAAAABEDiBOjAKGA4MEAAAAAAAAJAAA
+AMwAAAAAAAAAAAAAAJMAAAAAAAAARw6wAWCNAowDhgSDBQAAABwAAAD0AAAAAAAAAAAA
+AABDAAAAAAAAAEEOEIMCAAAAFAAAABQBAAAAAAAAAAAAADYAAAAAAAAAJAAAACwBAAAA
+AAAAAAAAAHMAAAAAAAAAQQ4QQQ4YRA4ggwOGAgAAABwAAABUAQAAAAAAAAAAAABSAAAA
+AAAAAEQOEAAAAAAAFAAAAHQBAAAAAAAAAAAAADgAAAAAAAAAPAAAAIwBAAAAAAAAAAAA
+ALsBAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44RA5QgweGBowFjQSOA48CAAAAAAAAABQA
+AADMAQAAAAAAAAAAAAAtAAAAAAAAABQAAADkAQAAAAAAAAAAAAAwAAAAAAAAACwAAAD8
+AQAAAAAAAAAAAABYBwAAAAAAAEcO8ANwjwKOA40EjAWGBoMHAAAAAAAAABwAAAAsAgAA
+AAAAAAAAAAC+AAAAAAAAAEEOEIMCAAAAHAAAAEwCAAAAAAAAAAAAACsAAAAAAAAAQQ4Q
+gwIAAAAkAAAAbAIAAAAAAAAAAAAA9AAAAAAAAABEDiBOjAKGA4MEAAAAAAAAHAAAAJQC
+AAAAAAAAAAAAACUAAAAAAAAARA4QAAAAAAA8AAAAtAIAAAAAAAAAAAAAhwAAAAAAAABC
+DhBCDhhCDiBCDihBDjBBDjhEDlCDB4YGjAWNBI4DjwIAAAAAAAAAHAAAAPQCAAAAAAAA
+AAAAAJQAAAAAAAAARA4gSoYCgwMcAAAAFAMAAAAAAAAAAAAAdwAAAAAAAABBDhCDAgAA
+ACwAAAA0AwAAAAAAAAAAAACEAAAAAAAAAEIOEEEOGEEOIEQOMIMEhgOMAgAAAAAAACwA
+AABkAwAAAAAAAAAAAACEAAAAAAAAAEIOEEEOGEEOIEQOMIMEhgOMAgAAAAAAABwAAACU
+AwAAAAAAAAAAAABcAAAAAAAAAEQOIEqGAoMDFAAAAAAAAAABAAF4EAwHCJABAAAAAAAA
+PAAAABwAAAAAAAAAAAAAAEcGAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44Rw7gAYMHhgaM
+BY0EjgOPAgAAAAAAABwAAABcAAAAAAAAAAAAAAAOAAAAAAAAAEQOEAAAAAAAFAAAAHwA
+AAAAAAAAAAAAAB0AAAAAAAAAFAAAAJQAAAAAAAAAAAAAAAYAAAAAAAAAFAAAAKwAAAAA
+AAAAAAAAAFgAAAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAFAAAABwAAAAAAAAA
+AAAAAEEAAAAAAAAAHAAAADQAAAAAAAAAAAAAAGQAAAAAAAAARA4wAAAAAAAUAAAAVAAA
+AAAAAAAAAAAANwAAAAAAAAAUAAAAbAAAAAAAAAAAAAAA6wAAAAAAAAAUAAAAAAAAAAEA
+AXgQDAcIkAEAAAAAAAAUAAAAHAAAAAAAAAAAAAAAEwAAAAAAAAAUAAAANAAAAAAAAAAA
+AAAAWwAAAAAAAAAUAAAATAAAAAAAAAAAAAAABwAAAAAAAAAUAAAAZAAAAAAAAAAAAAAA
+hAAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAAAAAUAAAAHAAAAAAAAAAAAAAABgAA
+AAAAAAAUAAAANAAAAAAAAAAAAAAALgAAAAAAAAAUAAAATAAAAAAAAAAAAAAAmQAAAAAA
+AAAUAAAAZAAAAAAAAAAAAAAAhwAAAAAAAAAkAAAAfAAAAAAAAAAAAAAAqgEAAAAAAABE
+DjBUjQKMA4YEgwUAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAHAAAABwAAAAAAAAA
+AAAAACAAAAAAAAAARA4QAAAAAAAcAAAAPAAAAAAAAAAAAAAAHwAAAAAAAABEDhAAAAAA
+ABwAAABcAAAAAAAAAAAAAAAdAAAAAAAAAEQOEAAAAAAAFAAAAHwAAAAAAAAAAAAAAAYA
+AAAAAAAAHAAAAJQAAAAAAAAAAAAAAGMAAAAAAAAARA4gSoYCgwMUAAAAtAAAAAAAAAAA
+AAAAMQAAAAAAAAAUAAAAzAAAAAAAAAAAAAAABgAAAAAAAAAkAAAA5AAAAAAAAAAAAAAA
+WgAAAAAAAABEDiBOjQKMA4MEAAAAAAAAFAAAAAwBAAAAAAAAAAAAAC0AAAAAAAAAFAAA
+ACQBAAAAAAAAAAAAACQAAAAAAAAAFAAAADwBAAAAAAAAAAAAACwAAAAAAAAAFAAAAFQB
+AAAAAAAAAAAAAB8AAAAAAAAAHAAAAGwBAAAAAAAAAAAAAGcAAAAAAAAARA4QAAAAAAAU
+AAAAjAEAAAAAAAAAAAAAMwAAAAAAAAAUAAAApAEAAAAAAAAAAAAAGAAAAAAAAAAUAAAA
+vAEAAAAAAAAAAAAALgAAAAAAAAAUAAAA1AEAAAAAAAAAAAAABgAAAAAAAAAUAAAA7AEA
+AAAAAAAAAAAACQAAAAAAAAAkAAAABAIAAAAAAAAAAAAArAAAAAAAAABBDhBBDhhEDiCD
+A4YCAAAAFAAAACwCAAAAAAAAAAAAABoAAAAAAAAAFAAAAEQCAAAAAAAAAAAAAAsAAAAA
+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
+AAAAAAAAAIYAAAAAAAAAQg4QQQ4YQQ4ggwSGA4wCABQAAAB8AgAAAAAAAAAAAAAGAAAA
+AAAAABQAAACUAgAAAAAAAAAAAAAGAAAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAA
+ABwAAAAcAAAAAAAAAAAAAAAtAAAAAAAAAEQOEAAAAAAAHAAAADwAAAAAAAAAAAAAADMA
+AAAAAAAARA4QAAAAAAAkAAAAXAAAAAAAAAAAAAAA3QAAAAAAAABEDjBYjgKNA4wEhgWD
+BgAAFAAAAIQAAAAAAAAAAAAAAF4AAAAAAAAAFAAAAJwAAAAAAAAAAAAAAGACAAAAAAAA
+FAAAALQAAAAAAAAAAAAAACkAAAAAAAAAFAAAAMwAAAAAAAAAAAAAAEEAAAAAAAAAJAAA
+AOQAAAAAAAAAAAAAAJIAAAAAAAAARA4gTowChgODBAAAAAAAABQAAAAMAQAAAAAAAAAA
+AABnAAAAAAAAABQAAAAkAQAAAAAAAAAAAAAyAAAAAAAAACQAAAA8AQAAAAAAAAAAAACY
+AAAAAAAAAEEOEEEOGEQOIIMDhgIAAAAUAAAAZAEAAAAAAAAAAAAArwAAAAAAAAAUAAAA
+fAEAAAAAAAAAAAAABgAAAAAAAAAUAAAAlAEAAAAAAAAAAAAACAAAAAAAAAAUAAAArAEA
+AAAAAAAAAAAASgAAAAAAAAAUAAAAxAEAAAAAAAAAAAAAjAAAAAAAAAAUAAAA3AEAAAAA
+AAAAAAAAAQAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAAAAAUAAAAHAAAAAAAAAAA
+AAAABgAAAAAAAAAUAAAANAAAAAAAAAAAAAAABgAAAAAAAAAUAAAATAAAAAAAAAAAAAAA
+BgAAAAAAAAAUAAAAZAAAAAAAAAAAAAAACgAAAAAAAAAUAAAAfAAAAAAAAAAAAAAABgAA
+AAAAAAAUAAAAlAAAAAAAAAAAAAAAAQAAAAAAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAA
+AAAcAAAAHAAAAAAAAAAAAAAAWwAAAAAAAABEDhAAAAAAADwAAAA8AAAAAAAAAAAAAAC5
+BAAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOUIMHhgaMBY0EjgOPAgAAAAAAAAAcAAAA
+fAAAAAAAAAAAAAAAGgAAAAAAAABBDhCDAgAAABwAAACcAAAAAAAAAAAAAAD3AAAAAAAA
+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
-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
+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
-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
-AAAAFAAAACwDAAAAAAAAAAAAAAYAAAAAAAAAFAAAAEQDAAAAAAAAAAAAAAEAAAAAAAAA
-FAAAAFwDAAAAAAAAAAAAAAEAAAAAAAAAFAAAAHQDAAAAAAAAAAAAABAAAAAAAAAAFAAA
-AIwDAAAAAAAAAAAAAA4AAAAAAAAAFAAAAKQDAAAAAAAAAAAAAA4AAAAAAAAAFAAAALwD
-AAAAAAAAAAAAAA8BAAAAAAAAHAAAANQDAAAAAAAAAAAAACkAAAAAAAAARA4QAAAAAAAc
-AAAA9AMAAAAAAAAAAAAALwAAAAAAAABEDhAAAAAAABwAAAAUBAAAAAAAAAAAAAAWAAAA
-AAAAAEQOEAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAFAAAABwAAAAAAAAAAAAA
-ADMAAAAAAAAAHAAAADQAAAAAAAAAAAAAAJUAAAAAAAAARA4gSoYCgwMUAAAAVAAAAAAA
-AAAAAAAAKAAAAAAAAAAUAAAAbAAAAAAAAAAAAAAALgAAAAAAAAAkAAAAhAAAAAAAAAAA
-AAAAjAAAAAAAAABEDiBOjAKGA4MEAAAAAAAAFAAAAKwAAAAAAAAAAAAAAAcAAAAAAAAA
-FAAAAMQAAAAAAAAAAAAAAAYAAAAAAAAAFAAAANwAAAAAAAAAAAAAAAYAAAAAAAAAFAAA
-APQAAAAAAAAAAAAAAAYAAAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAHAAAABwA
-AAAAAAAAAAAAAEgAAAAAAAAAQQ4QgwIAAAAUAAAAAAAAAAEAAXgQDAcIkAEAAAAAAAAU
+ABwAAADEAgAAAAAAAAAAAAAeAAAAAAAAAEQOEAAAAAAAFAAAAOQCAAAAAAAAAAAAAA4A
+AAAAAAAAFAAAAPwCAAAAAAAAAAAAAEoAAAAAAAAAJAAAABQDAAAAAAAAAAAAAJoAAAAA
+AAAARA4wWI4CjQOMBIYFgwYAABwAAAA8AwAAAAAAAAAAAAAhAAAAAAAAAEQOEAAAAAAA
+FAAAAFwDAAAAAAAAAAAAAAYAAAAAAAAAFAAAAHQDAAAAAAAAAAAAAAEAAAAAAAAAFAAA
+AIwDAAAAAAAAAAAAAAYAAAAAAAAAFAAAAKQDAAAAAAAAAAAAAAEAAAAAAAAAFAAAALwD
+AAAAAAAAAAAAAAEAAAAAAAAAFAAAANQDAAAAAAAAAAAAABAAAAAAAAAAFAAAAOwDAAAA
+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
+AAAARA4QAAAAAAAUAAAA9AMAAAAAAAAAAAAAQgAAAAAAAAAUAAAADAQAAAAAAAAAAAAA
+dwAAAAAAAAAUAAAAJAQAAAAAAAAAAAAAJgAAAAAAAAAkAAAAPAQAAAAAAAAAAAAAqQAA
+AAAAAABEDiBOjAKGA4MEAAAAAAAAFAAAAGQEAAAAAAAAAAAAABgAAAAAAAAAFAAAAHwE
+AAAAAAAAAAAAABYBAAAAAAAAFAAAAJQEAAAAAAAAAAAAAEIAAAAAAAAAFAAAAKwEAAAA
+AAAAAAAAAGYAAAAAAAAAHAAAAMQEAAAAAAAAAAAAABQAAAAAAAAARA4QAAAAAAAUAAAA
+AAAAAAEAAXgQDAcIkAEAAAAAAAAkAAAAHAAAAAAAAAAAAAAAqQAAAAAAAABEDiBOjAKG
+A4MEAAAAAAAAHAAAAEQAAAAAAAAAAAAAAC0AAAAAAAAARA4QAAAAAAAcAAAAZAAAAAAA
+AAAAAAAAMwAAAAAAAABEDhAAAAAAACQAAACEAAAAAAAAAAAAAAD0AAAAAAAAAEQOMFiO
+Ao0DjASGBYMGAAAUAAAArAAAAAAAAAAAAAAAcAAAAAAAAAAcAAAAxAAAAAAAAAAAAAAA
+cQAAAAAAAABEDhAAAAAAABwAAADkAAAAAAAAAAAAAADFAwAAAAAAAEQOEAAAAAAAFAAA
+AAQBAAAAAAAAAAAAAA8AAAAAAAAAFAAAABwBAAAAAAAAAAAAABQAAAAAAAAAFAAAADQB
+AAAAAAAAAAAAABkAAAAAAAAAFAAAAEwBAAAAAAAAAAAAADEAAAAAAAAAJAAAAGQBAAAA
+AAAAAAAAAGQAAAAAAAAAQg4QQQ4YQQ4ggwSGA4wCABQAAACMAQAAAAAAAAAAAACQAAAA
+AAAAABQAAACkAQAAAAAAAAAAAAAGAAAAAAAAABQAAAC8AQAAAAAAAAAAAAAIAAAAAAAA
+ABQAAADUAQAAAAAAAAAAAABKAAAAAAAAABQAAADsAQAAAAAAAAAAAACxAAAAAAAAABQA
+AAAEAgAAAAAAAAAAAAABAAAAAAAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAABQAAAAc
+AAAAAAAAAAAAAAAGAAAAAAAAABQAAAA0AAAAAAAAAAAAAAAGAAAAAAAAABQAAABMAAAA
+AAAAAAAAAAAGAAAAAAAAABQAAABkAAAAAAAAAAAAAAAvAAAAAAAAABQAAAB8AAAAAAAA
+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
-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
-AAAAAAByAQAAAAAAAEQOQFSNAowDhgSDBQAAAAAUAAAARAMAAAAAAAAAAAAAYAAAAAAA
-AAAcAAAAXAMAAAAAAAAAAAAApQAAAAAAAABBDhCDAgAAABQAAAB8AwAAAAAAAAAAAACd
-AAAAAAAAABwAAACUAwAAAAAAAAAAAABDAAAAAAAAAEQOEAAAAAAAFAAAALQDAAAAAAAA
-AAAAAEIAAAAAAAAAFAAAAMwDAAAAAAAAAAAAAHcAAAAAAAAAFAAAAOQDAAAAAAAAAAAA
-ACYAAAAAAAAAJAAAAPwDAAAAAAAAAAAAAKkAAAAAAAAARA4gTowChgODBAAAAAAAABQA
-AAAkBAAAAAAAAAAAAAAYAAAAAAAAABQAAAA8BAAAAAAAAAAAAAAWAQAAAAAAABQAAABU
-BAAAAAAAAAAAAABCAAAAAAAAABQAAABsBAAAAAAAAAAAAABRAAAAAAAAABQAAAAAAAAA
-AQABeBAMBwiQAQAAAAAAACQAAAAcAAAAAAAAAAAAAACpAAAAAAAAAEQOIE6MAoYDgwQA
-AAAAAAAcAAAARAAAAAAAAAAAAAAALQAAAAAAAABEDhAAAAAAABwAAABkAAAAAAAAAAAA
-AAAzAAAAAAAAAEQOEAAAAAAAJAAAAIQAAAAAAAAAAAAAAAEBAAAAAAAARA4wWI4CjQOM
-BIYFgwYAABQAAACsAAAAAAAAAAAAAABwAAAAAAAAABwAAADEAAAAAAAAAAAAAABxAAAA
-AAAAAEQOEAAAAAAAHAAAAOQAAAAAAAAAAAAAAO8DAAAAAAAARA4QAAAAAAAUAAAABAEA
-AAAAAAAAAAAADwAAAAAAAAAUAAAAHAEAAAAAAAAAAAAAFAAAAAAAAAAUAAAANAEAAAAA
-AAAAAAAAGQAAAAAAAAAUAAAATAEAAAAAAAAAAAAAMQAAAAAAAAAkAAAAZAEAAAAAAAAA
-AAAAZAAAAAAAAABCDhBBDhhBDiCDBIYDjAIAFAAAAIwBAAAAAAAAAAAAAAYAAAAAAAAA
-FAAAAKQBAAAAAAAAAAAAAJAAAAAAAAAAFAAAALwBAAAAAAAAAAAAAAYAAAAAAAAAFAAA
-ANQBAAAAAAAAAAAAAEoAAAAAAAAAFAAAAOwBAAAAAAAAAAAAALEAAAAAAAAAFAAAAAQC
-AAAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAABAAF4EAwHCJABAAAAAAAAHAAAABwAAAAA
-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
-AAAAQQ4QgwIAAAAcAAAAjAMAAAAAAAAAAAAAzwAAAAAAAABBDhCDAgAAABwAAACsAwAA
-AAAAAAAAAACqAAAAAAAAAEQOEAAAAAAAHAAAAMwDAAAAAAAAAAAAAJQAAAAAAAAARA4Q
-AAAAAAAcAAAA7AMAAAAAAAAAAAAAFgAAAAAAAABEDhAAAAAAABQAAAAAAAAAAQABeBAM
-BwiQAQAAAAAAABwAAAAcAAAAAAAAAAAAAACVAAAAAAAAAEQOIEqGAoMDFAAAADwAAAAA
-AAAAAAAAACgAAAAAAAAAFAAAAFQAAAAAAAAAAAAAAC4AAAAAAAAAJAAAAGwAAAAAAAAA
-AAAAAHsAAAAAAAAARA4gTowChgODBAAAAAAAABQAAACUAAAAAAAAAAAAAAATAAAAAAAA
-ABQAAACsAAAAAAAAAAAAAAARAAAAAAAAABQAAADEAAAAAAAAAAAAAAAGAAAAAAAAABQA
-AADcAAAAAAAAAAAAAAAGAAAAAAAAABQAAAD0AAAAAAAAAAAAAAAGAAAAAAAAABQAAAAA
-AAAAAQABeBAMBwiQAQAAAAAAABwAAAAcAAAAAAAAAAAAAABzAAAAAAAAAEEOEIMCAAAA
-FAAAAAAAAAABAAF4EAwHCJABAAAAAAAAFAAAABwAAAAAAAAAAAAAAAgAAAAAAAAAFAAA
-ADQAAAAAAAAAAAAAAAgAAAAAAAAAFAAAAEwAAAAAAAAAAAAAAAwAAAAAAAAAHAAAAGQA
-AAAAAAAAAAAAADAAAAAAAAAARA4QAAAAAAAcAAAAhAAAAAAAAAAAAAAAJgAAAAAAAABB
-DhCDAgAAABwAAACkAAAAAAAAAAAAAAAhAAAAAAAAAEQOEAAAAAAAFAAAAMQAAAAAAAAA
-AAAAABUAAAAAAAAAFAAAANwAAAAAAAAAAAAAAFIAAAAAAAAAFAAAAPQAAAAAAAAAAAAA
-AFIAAAAAAAAAFAAAAAwBAAAAAAAAAAAAACoAAAAAAAAAFAAAACQBAAAAAAAAAAAAAFoA
-AAAAAAAAFAAAADwBAAAAAAAAAAAAADAAAAAAAAAAJAAAAFQBAAAAAAAAAAAAAP4AAAAA
-AAAAQQ4QQQ4YRA4ggwOGAgAAABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAADwAAAAcAAAA
-AAAAAAAAAABYCAAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOgAGDB4YGjAWNBI4DjwIA
-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
-ACQAAACkAAAAAAAAAAAAAAAQAQAAAAAAAEEOEEEOGEQOIIMDhgIAAAAcAAAAzAAAAAAA
-AAAAAAAAMAAAAAAAAABBDhCDAgAAABwAAADsAAAAAAAAAAAAAAANBAAAAAAAAEQOgAEA
-AAAAHAAAAAwBAAAAAAAAAAAAAKcAAAAAAAAAQQ4QgwIAAAAcAAAALAEAAAAAAAAAAAAA
-HgEAAAAAAABEDiBKhgKDAxwAAABMAQAAAAAAAAAAAACsAAAAAAAAAEQOIEqGAoMDJAAA
-AGwBAAAAAAAAAAAAAK0BAAAAAAAAQg4QQQ4YQQ4ggwSGA4wCACQAAACUAQAAAAAAAAAA
-AADRAAAAAAAAAEIOEEEOGEEOIIMEhgOMAgAcAAAAvAEAAAAAAAAAAAAATwAAAAAAAABB
-DhCDAgAAABwAAADcAQAAAAAAAAAAAACGAAAAAAAAAEQOEAAAAAAAFAAAAPwBAAAAAAAA
-AAAAAHgAAAAAAAAAJAAAABQCAAAAAAAAAAAAAEkCAAAAAAAARA4wVI0CjAOGBIMFAAAA
-ABQAAAAAAAAAAQABeBAMBwiQAQAAAAAAADwAAAAcAAAAAAAAAAAAAADfAAAAAAAAAEIO
-EEIOGEIOIEIOKEEOMEEOOEQOQIMHhgaMBY0EjgOPAgAAAAAAAAAsAAAAXAAAAAAAAAAA
-AAAALAEAAAAAAABCDhBCDhhBDiBBDihEDjCDBYYEjAONAgAUAAAAjAAAAAAAAAAAAAAA
-OwAAAAAAAAA8AAAApAAAAAAAAAAAAAAAegUAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhE
-DrABgweGBowFjQSOA48CAAAAAAAAHAAAAOQAAAAAAAAAAAAAAIcAAAAAAAAAQQ4QgwIA
-AAA8AAAABAEAAAAAAAAAAAAAsgMAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhHDoADgweG
-BowFjQSOA48CAAAAAAAAJAAAAEQBAAAAAAAAAAAAAGABAAAAAAAARA5AVI0CjAOGBIMF
-AAAAABQAAABsAQAAAAAAAAAAAABoAAAAAAAAABwAAACEAQAAAAAAAAAAAABDAAAAAAAA
-AEQOEAAAAAAAHAAAAKQBAAAAAAAAAAAAAEgAAAAAAAAAQQ4QgwIAAAAcAAAAxAEAAAAA
-AAAAAAAArgAAAAAAAABEDiBKhgKDAxQAAAAAAAAAAQABeBAMBwiQAQAAAAAAADwAAAAc
-AAAAAAAAAAAAAADfAAAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOQIMHhgaMBY0EjgOP
-AgAAAAAAAAA0AAAAXAAAAAAAAAAAAAAAdAIAAAAAAABCDhBCDhhCDiBBDihBDjCDBoYF
-jASNA44CAAAAAAAAABQAAACUAAAAAAAAAAAAAAA2AAAAAAAAADwAAACsAAAAAAAAAAAA
-AADzBgAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOYIMHhgaMBY0EjgOPAgAAAAAAAAA8
-AAAA7AAAAAAAAAAAAAAA0AYAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhHDuAIgweGBowF
-jQSOA48CAAAAAAAAFAAAACwBAAAAAAAAAAAAAD0AAAAAAAAAFAAAAEQBAAAAAAAAAAAA
-AHEAAAAAAAAAPAAAAFwBAAAAAAAAAAAAAMgAAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44
-RA5AgweGBowFjQSOA48CAAAAAAAAABQAAACcAQAAAAAAAAAAAAC2AAAAAAAAACQAAAC0
-AQAAAAAAAAAAAAD7AAAAAAAAAEIOEEEOGEEOIIMEhgOMAgAcAAAA3AEAAAAAAAAAAAAA
-SAAAAAAAAABBDhCDAgAAABwAAAD8AQAAAAAAAAAAAAC4AAAAAAAAAEQOIEqGAoMDFAAA
-AAAAAAABAAF4EAwHCJABAAAAAAAAPAAAABwAAAAAAAAAAAAAAOIAAAAAAAAAQg4QQg4Y
-Qg4gQg4oQQ4wQQ44RA5AgweGBowFjQSOA48CAAAAAAAAADQAAABcAAAAAAAAAAAAAAB0
-AgAAAAAAAEIOEEIOGEIOIEEOKEEOMIMGhgWMBI0DjgIAAAAAAAAAPAAAAJQAAAAAAAAA
-AAAAAKICAAAAAAAAQg4QQg4YQg4gQg4oQQ4wQQ44RA5AgweGBowFjQSOA48CAAAAAAAA
-ABQAAADUAAAAAAAAAAAAAAAzAAAAAAAAABQAAADsAAAAAAAAAAAAAABpAAAAAAAAADwA
-AAAEAQAAAAAAAAAAAAAjAQAAAAAAAEIOEEIOGEIOIEIOKEEOMEEOOEQOUIMHhgaMBY0E
-jgOPAgAAAAAAAAAUAAAARAEAAAAAAAAAAAAAPQAAAAAAAAA8AAAAXAEAAAAAAAAAAAAA
-2QQAAAAAAABCDhBCDhhCDiBCDihBDjBBDjhHDpANgweGBowFjQSOA48CAAAAAAAANAAA
-AJwBAAAAAAAAAAAAAIoBAAAAAAAAQg4QQg4YQg4gQQ4oQQ4wRA5QgwaGBYwEjQOOAgAA
-AAAcAAAA1AEAAAAAAAAAAAAASAAAAAAAAABBDhCDAgAAABwAAAD0AQAAAAAAAAAAAACu
-AAAAAAAAAEQOIEqGAoMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdDQzogKEdOVSkg
-My4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdO
-VSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzog
-KEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdD
-QzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQA
-AEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4z
-LjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkg
-My4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdO
-VSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzog
-KEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdD
-QzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQA
-AEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4z
-LjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkg
-My4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdO
-VSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzog
-KEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdD
-QzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQAAEdDQzogKEdOVSkgMy4zLjQA
-AEdDQzogKEdOVSkgMy4zLjQAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALnJlbGEu
-dGV4dAAucmVsYS5yb2RhdGEALnJvZGF0YS5zdHIxLjEALnJvZGF0YS5zdHIxLjMyAC5y
-ZWxhLmRhdGEALnJlbGEuZWhfZnJhbWUALmJzcwAuY29tbWVudAAubm90ZS5HTlUtc3Rh
-Y2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAACAAAAABAAAABgAAAAAAAAAAAAAAAAAAAEAAAAAAAAAA8WEB
-AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAbAAAABAAAAAAAAAAAAAAAAAAAAAAA
-AAB4hwIAAAAAAGhAAAAAAAAADwAAAAEAAAAIAAAAAAAAABgAAAAAAAAAKwAAAAEAAAAC
-AAAAAAAAAAAAAAAAAAAAQGIBAAAAAAAIiQAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAA
-AAAAACYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAODHAgAAAAAAMEsAAAAAAAAPAAAAAwAA
-AAgAAAAAAAAAGAAAAAAAAAAzAAAAAQAAADIAAAAAAAAAAAAAAAAAAABI6wEAAAAAAMwF
-AAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAQgAAAAEAAAAyAAAAAAAAAAAAAAAA
-AAAAIPEBAAAAAABzAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAABAAAAAAAAAFcAAAABAAAA
-AwAAAAAAAAAAAAAAAAAAAKDxAQAAAAAApBcAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA
-AAAAAABSAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQEwMAAAAAABACAAAAAAAADwAAAAcA
-AAAIAAAAAAAAABgAAAAAAAAAYgAAAAEAAAACAAAAAAAAAAAAAAAAAAAASAkCAAAAAADg
-QQAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAF0AAAAEAAAAAAAAAAAAAAAAAAAA
-AAAAACAVAwAAAAAAIC4AAAAAAAAPAAAACQAAAAgAAAAAAAAAGAAAAAAAAABsAAAACAAA
-AAMAAAAAAAAAAAAAAAAAAABASwIAAAAAALABAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA
-AAAAAAAAcQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAQEsCAAAAAABOAwAAAAAAAAAAAAAA
-AAAAAQAAAAAAAAAAAAAAAAAAAHoAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAI5OAgAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAwAAAAAAAAAAAAAAAAAA
-AAAAAACOTgIAAAAAAIoAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAIA
-AAAAAAAAAAAAAAAAAAAAAAAAWFMCAAAAAACgIwAAAAAAABAAAAAKAAAACAAAAAAAAAAY
-AAAAAAAAAAkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAPh2AgAAAAAAgBAAAAAAAAAAAAAA
-AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAB
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAFAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAwAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAHAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAwALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAJAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAwAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwANAAAAAAAAAAAAAAAA
-AAAAAAABAAAAEgABADiGAAAAAAAApAAAAAAAAAAMAAAAEgABAJ93AAAAAAAABgAAAAAA
-AAAXAAAAEgABADznAAAAAAAAlAAAAAAAAAAiAAAAEgABAD1eAAAAAAAAlwAAAAAAAAAt
-AAAAEgABAPXdAAAAAAAAkQAAAAAAAAA4AAAAEgABAL5UAAAAAAAA1AAAAAAAAABDAAAA
-EgABAMspAQAAAAAA0QAAAAAAAABOAAAAEQAHAKADAAAAAAAApAEAAAAAAABZAAAAEgAB
-AGrqAAAAAAAAIQAAAAAAAABkAAAAEgABAIpWAAAAAAAALgAAAAAAAABvAAAAEgABAIZL
-AAAAAAAAMQAAAAAAAAB6AAAAEgABAGfkAAAAAAAAIgAAAAAAAACFAAAAEgABABLhAAAA
-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
-AwAAEgABAMP1AAAAAAAAEwAAAAAAAAAEBAAAEgABAByuAAAAAAAAIgAAAAAAAAAPBAAA
-EgABAMrZAAAAAAAAYQMAAAAAAAAaBAAAEgABAGrXAAAAAAAABwAAAAAAAAAlBAAAEgAB
-AFFXAAAAAAAAhwAAAAAAAAAwBAAAEgABACKHAAAAAAAANwAAAAAAAAA7BAAAEgABAHAh
-AQAAAAAAMAAAAAAAAABGBAAAEgABAEnYAAAAAAAA9gAAAAAAAABRBAAAEgABAP+SAAAA
-AAAAAQAAAAAAAABcBAAAEgABACxbAAAAAAAAZwAAAAAAAABnBAAAEgABAGaNAAAAAAAA
-kAAAAAAAAAByBAAAEgABAMG9AAAAAAAAUQAAAAAAAAB9BAAAEgABAJvJAAAAAAAABwUA
-AAAAAACIBAAAEgABAFERAQAAAAAAuQAAAAAAAACTBAAAEgABAPjgAAAAAAAABgAAAAAA
-AACeBAAAEgABAHiMAAAAAAAAHwAAAAAAAACpBAAAEgABAPLqAAAAAAAAUgAAAAAAAAC0
-BAAAEgABAHAcAQAAAAAA+AAAAAAAAAC/BAAAEgABAPuXAAAAAAAAOwAAAAAAAADKBAAA
-EgABAGtaAAAAAAAAJQAAAAAAAADVBAAAEgABADLkAAAAAAAAIQAAAAAAAADgBAAAEgAB
-AKLOAAAAAAAAPQAAAAAAAADrBAAAEgABAP3EAAAAAAAAFAAAAAAAAAD2BAAAEgABAMkf
-AQAAAAAAOQAAAAAAAAABBQAAEgABAHLpAAAAAAAABgAAAAAAAAAMBQAAEAAAAAAAAAAA
-AAAAAAAAAAAAAAAZBQAAEgABAOV4AAAAAAAAXgAAAAAAAAAkBQAAEgABAHNjAAAAAAAA
-OwAAAAAAAAAvBQAAEgABAFAgAQAAAAAACAAAAAAAAAA6BQAAEgABANbfAAAAAAAAdwAA
-AAAAAABFBQAAEgABANwDAAAAAAAAkQAAAAAAAABWBQAAEgABAJAWAQAAAAAAtwMAAAAA
-AABhBQAAEgABAD9dAAAAAAAAQQAAAAAAAABsBQAAEgABADh9AAAAAAAAmAAAAAAAAAB3
-BQAAEgABACLhAAAAAAAADgAAAAAAAACCBQAAEgABAJwqAQAAAAAATwAAAAAAAACNBQAA
-EgABAPpiAAAAAAAAUgAAAAAAAACYBQAAEgABAFKJAAAAAAAALgAAAAAAAACjBQAAEgAB
-AOyjAAAAAAAABgEAAAAAAACuBQAAEgABACh3AAAAAAAAdwAAAAAAAAC5BQAAEQAHAMAQ
-AAAAAAAApAEAAAAAAADEBQAAEgABAMjrAAAAAAAAMAAAAAAAAADPBQAAEgABANDnAAAA
-AAAAFgAAAAAAAADaBQAAEgABANyGAAAAAAAARgAAAAAAAADlBQAAEgABADaYAAAAAAAA
-3AAAAAAAAADwBQAAEgABAInkAAAAAAAAOgEAAAAAAAD7BQAAEgABAP2QAAAAAAAAbgAA
-AAAAAAAGBgAAEgABAAGTAAAAAAAAEAAAAAAAAAARBgAAEgABAJLmAAAAAAAAqgAAAAAA
-AAAcBgAAEgABAHUUAQAAAAAAMgEAAAAAAAAnBgAAEgABAKAhAQAAAAAADQQAAAAAAAAy
-BgAAEgABADyUAAAAAAAAKQAAAAAAAAA9BgAAEgABAPZVAAAAAAAABwAAAAAAAABIBgAA
-EgABAFmHAAAAAAAA4wAAAAAAAABTBgAAEgABAIbTAAAAAAAARgAAAAAAAABeBgAAEgAB
-ANveAAAAAAAAIAAAAAAAAABpBgAAEgABAAhgAAAAAAAADgAAAAAAAAB0BgAAEgABAENh
-AQAAAAAArgAAAAAAAAB/BgAAEgABAILgAAAAAAAANQAAAAAAAACKBgAAEQAHAIASAAAA
-AAAApAEAAAAAAACVBgAAEgABAFvFAAAAAAAAZAAAAAAAAACgBgAAEgABAMiWAAAAAAAA
-DAAAAAAAAACrBgAAEgABAK5jAAAAAAAAHwEAAAAAAAC2BgAAEgABAEzdAAAAAAAAHwAA
-AAAAAADBBgAAEgABAPveAAAAAAAAlgAAAAAAAADMBgAAEgABACJUAAAAAAAAZQAAAAAA
-AADXBgAAEgABAGAgAQAAAAAAEAEAAAAAAADiBgAAEgABAFBrAAAAAAAAGAAAAAAAAADt
-BgAAEgABAAxiAAAAAAAACAAAAAAAAAD4BgAAEgABAAxcAAAAAAAAogAAAAAAAAADBwAA
-EgABAFdjAAAAAAAAHAAAAAAAAAAOBwAAEgABAIbeAAAAAAAAVQAAAAAAAAAZBwAAEgAB
-AMb3AAAAAAAA0AEAAAAAAAAkBwAAEgABAL/FAAAAAAAABgAAAAAAAAAvBwAAEgABALQa
-AQAAAAAAWgAAAAAAAAA6BwAAEgABALBhAAAAAAAAIAAAAAAAAABFBwAAEQAHACAHAAAA
-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
-CgAAEgABAAPUAAAAAAAANQEAAAAAAADRCgAAEgABAPCXAAAAAAAACwAAAAAAAADcCgAA
-EgABAKlIAAAAAAAAKwAAAAAAAADnCgAAEgABADnWAAAAAAAAYwAAAAAAAADyCgAAEgAB
-APcIAAAAAAAAaAAAAAAAAAD9CgAAEgABAF2WAAAAAAAABgAAAAAAAAAICwAAEgABADMG
-AAAAAAAAugAAAAAAAAATCwAAEgABAKjVAAAAAAAAIgAAAAAAAAAeCwAAEgABAPJeAAAA
-AAAAmgAAAAAAAAApCwAAEgABAARiAAAAAAAACAAAAAAAAAA0CwAAEgABANWQAAAAAAAA
-KAAAAAAAAAA/CwAAEgABANsMAQAAAAAAfAAAAAAAAABKCwAAEgABAL1aAAAAAAAAJAAA
-AAAAAABVCwAAEgABAIYAAQAAAAAALAAAAAAAAABgCwAAEgABAIgDAAAAAAAAVAAAAAAA
-AABrCwAAEgABAGvdAAAAAAAAMQAAAAAAAAB2CwAAEAAAAAAAAAAAAAAAAAAAAAAAAACG
-CwAAEgABAD6uAAAAAAAAgAEAAAAAAACRCwAAEgABAJRVAAAAAAAAEwAAAAAAAACcCwAA
-EgABAGgdAQAAAAAAVQAAAAAAAACnCwAAEgABAA1bAAAAAAAAHwAAAAAAAACyCwAAEgAB
-AD/ZAAAAAAAAiwAAAAAAAAC9CwAAEgABAJSQAAAAAAAAQQAAAAAAAADICwAAEgABAMXF
-AAAAAAAAkAAAAAAAAADTCwAAEAAAAAAAAAAAAAAAAAAAAAAAAADzCwAAEgABAIEFAAAA
-AAAAsgAAAAAAAAD+CwAAEgABAMNZAAAAAAAAYwAAAAAAAAAJDAAAEgABACZaAAAAAAAA
-MQAAAAAAAAAUDAAAEgABADWNAAAAAAAAMQAAAAAAAAAfDAAAEgABALhWAAAAAAAAmQAA
-AAAAAAAqDAAAEgABAD6PAAAAAAAAIAAAAAAAAAA1DAAAEgABAA7QAAAAAAAAvgIAAAAA
-AABADAAAEgABAB+TAAAAAAAADgAAAAAAAABLDAAAEgABAPjrAAAAAAAA/gAAAAAAAABW
-DAAAEgABAIRZAAAAAAAAIAAAAAAAAABhDAAAEAAAAAAAAAAAAAAAAAAAAAAAAABvDAAA
-EgABAFiMAAAAAAAAIAAAAAAAAAB6DAAAEgABAIAHAAAAAAAAQwAAAAAAAACFDAAAEgAB
-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
-AAAAAADfDwAAEgABAK1JAAAAAAAAlQAAAAAAAADqDwAAEgABAE3gAAAAAAAANQAAAAAA
-AAD1DwAAEgABADjVAAAAAAAAbQAAAAAAAAAAEAAAEgABAAr2AAAAAAAAvAEAAAAAAAAL
-EAAAEgABAGoaAQAAAAAAGQAAAAAAAAAWEAAAEgABAMzSAAAAAAAAugAAAAAAAAAhEAAA
-EAAAAAAAAAAAAAAAAAAAAAAAAAAwEAAAEgABAFdaAAAAAAAABgAAAAAAAAA7EAAAEgAB
-AAZ9AAAAAAAAMgAAAAAAAABGEAAAEgABAKvfAAAAAAAACwAAAAAAAABREAAAEgABADmi
-AAAAAAAAswEAAAAAAABcEAAAEgABALdLAAAAAAAAmwAAAAAAAAB1EAAAEgABAIMaAQAA
-AAAAMQAAAAAAAAAAenowMDViNTg0NgB6ejAwMmRiMTFjAHp6MDJkYmY4NzUAenowMmRi
-YjFiMgB6ejAwMmRiNDYwAHp6MGI3YjgzNjgAenowNWI4YzY1YQB6ejAwNWI0MGFkAHp6
-MDViOTQyZWQAenowZDk0Y2QwNAB6ejAwMTlmNDcwAHp6MDJkYmU3M2QAenowMDViNjky
-YgB6ejBiNmQyMzI1AHp6MDA1Yjg1M2QAenowMDE2ZDkyZQB6ejBjZmIxODc1AHp6MDAy
-ZGIzMWMAenowMmRhYmJhYwB6ejAwMGI2YzY4AHp6MDAwYjZiZjgAenowMmRiNWJmMAB6
-ejAxNmUxZGZkAHp6MGI3MGU5OGMAenowNmUwZjZjMgB6ejAwNjdkMmIxAHp6MGI2Y2Ez
-MjUAenowMDViNmNmZAB6ejAxNmUwZGZkAHp6MDAwYjZmNjgAenowMDViNDhhZAB6ejAy
-ZGJmMWIyAHp6MDA1Yjg4Y2IAenowMzNlYzhiZgB6ejBkYjRjOTRkAHp6MDJkYjNiYWMA
-YXRoX2hhbF9kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUAenowMGI2ZjE2MQB6ejBkYzU4
-NzE4AHp6MGRiMDkxMGUAenowMGI2ZTI3YQB6ejAyZGJiYWIyAHp6MGI2ZDFlZmYAenow
-MDViNjRmZAB6ejAwMGI2ZDUyAHp6MGI2YzllZmYAenowMmRiZDg3NQB6ejAyZGIzMWIy
-AHp6MDBiNzA5MjMAenowMDBiNmQxZAB6ejAwYjZkNDUwAHp6MGI2YzIzMjUAenowMmRi
-ZGFiMgB6ejAwMDViNjMyAHp6MDZkZjJmNTcAenowMDE2ZGE1MAB6ejAwMDY3ZDMyAHp6
-MDBiNmQ5MjMAenowMDJkYjUxYwB6ejAxNmRhN2YwAHp6MDE2ZGNiZmUAenowMDE2ZGVj
-MQB6ejAwMTZkZjJjAHp6MGI4MTQ2MTIAenowMTZkOTkyMAB6ejAyZGIxYmFjAHp6MGRj
-Nzg3MTgAenowNWI3MDFlMAB6ejAwMGI2YjEwAHp6MGI3MDllZmYAenowMTZkZjg5YgBh
-dGhfaGFsX2F0dGFjaAB6ejA2ZTE0ZGQxAHp6MDE2ZGFiMmQAenowMmRiMTM1ZAB6ejBl
-MGI2ZjIzAHp6MDE2ZTI5MWQAenowMDBiNmZlOAB6ejAwMTZkOTQ4AHp6MDE2ZTIwOWIA
-enowYjcwMWVmZgB6ejAwMGI2YzlkAHp6MDAwNWI1YTIAenowMmRiMTcwYQBhdGhfaGFs
-X2NvbXB1dGV0eHRpbWUAenowMmRiNWJhYwB6ejAwNWI4MTNkAHp6MDBiNmM5MjMAenow
-YjZjZTk4YwB6ejAwNWI3ZjlkAHp6MGI3MDFkMDIAenowNmUwNDYwZQB6ejAyZGI1NzYz
-AHp6MDZmMjMyY2MAenowZTA3ODM3OQB6ejAwMmRhZjYyAHp6MGI4NTQ2MTIAenowMDBi
-NmI5MAB6ejAxNmQ5ZWZhAHp6MDAyZGIyNjAAenowMTZkZTA1MQB6ejAwMDViNmIyAHp6
-MDViN2YxMTQAenowMzQ3NDZiNAB6ejAyZGJkZGZkAHp6MDA4ZWYzMDkAenowMGI3MTc3
-ZAB6ejAwYjcwZjNkAHp6MDE2ZDg5MjAAenowMmRiMWFiMgB6ejAwMDViNjIyAHp6MDAw
-YjZmNzgAenowYjZiNDk1MAB6ejAwNWI3NjMwAGF0aF9oYWxfZnJlZQB6ejA1Yjc5YjFi
-AHp6MDBiNzA3M2QAenowYjVmY2EyNgB6ejAxNmRmYmYxAGF0aF9oYWxfbWh6MmllZWUA
-enowMTZlMTg5YgB6ejBkYzM0OTRkAHp6MDAyZGM2MGIAenowMmRiMzM1ZAB6ejBiNmM1
-M2E0AHp6MGY4ZWYzMDgAenowZGE0Y2QwNAB6ejA1Yjc0MWUwAHp6MDJkYTliYWMAenow
-MTZlYzlhZAB6ejAwYjcxNzNkAHp6MDE2ZDlkNDEAenowZGMxMmMxZgB6ejAwNWI4NGZk
-AHp6MDA1YjhhYmQAenowMGI3MDEyMwB6ejAwNWI2NTJiAHp6MDJkYjM4NzUAenowMTZl
-MzA5YgB6ejAwNWI2MGIyAHp6MDJkYjE4NzUAenowMmRiMTc2MwB6ejBiN2Y4MzY4AHp6
-MGRjMzJjMWYAenowMGI3MDE2MQB6ejAxNmQ3ZDQxAHp6MDAxNmNkMzIAenowZGI0OTEw
-ZQB6ejAwNWI0OGVkAHp6MDAyZGM4MGIAenowMmRiMzNlZAB6ejAwNWI4MGZkAHp6MDJk
-YmZkZmQAenowMTZlNjQ4YQB6ejBkYmYyYzFmAHp6MDAyZGFmZjIAenowMDViNzc5ZAB6
-ejAwMGI2ZWU4AHp6MDE2ZTQ0OGEAenowMGI2ZjZiYwB6ejAxNmRhOTIwAHp6MDViNzgx
-ZTAAenowZTI3M2E0ZAB6ejAwMmRjYTBiAHp6MDJkYjFiZjAAenowMDViNDRhZAB6ejA2
-ZGU0NjBlAHp6MGI2ZjllZmYAenowMGI2YzZiYwBhdGhfaGFsX2FkZGl0aW9uYWxfc3di
-YV9iYWNrb2ZmAHp6MDAwMmRiOTIAYXRoX2hhbF92ZXJzaW9uAGF0aF9oYWxfaWVlZTJt
-aHoAenowMmRiNzlhZQB6ejBiNmNmMDA5AHp6MDAxNmUxMmMAenowMDE2ZDllNAB6ejAw
-NWI1Y2IyAHp6MDE2ZGEyNTEAenowNmZhMzJjYwB6ejA2ZTAyZjU3AHp6MDA1YjZlMzAA
-YXRoX2hhbF9tYWxsb2MAenowMDBiNmRkMgB6ejA1YjZjYmQ1AHp6MDE2ZGIyNTEAenow
-ZTE3ODM3OQB6ejAxNmRkMDUxAHp6MDJkYmQxYjIAenowZGE5YzRmNgB6ejAyZGMxNzYz
-AHp6MDE2ZGYwNTEAenowMDE2ZDk1MAB6ejAwYjcwNmJjAHp6MDAxNmQ4NzIAenowNmRm
-NDYwZQB6ejA1YjhjMmVkAHp6MDZmZjE3ZTcAenowYjZmOWQwMgB6ejBkNGVmMzA4AHp6
-MDE2ZGJiZmUAenowMTZlNTQ4YQB6ejAwMTZkODUwAHp6MDAwYjZmZjgAYXRoX2hhbF9t
-ZW1jcHkAenowMmRiYmRmZAB6ejA2ZGI1ZWI2AHp6MDE2ZWI5YWQAenowMGI2Y2ViYwB6
-ejBkOWI4Yjc5AGF0aF9oYWxfcHJvYmUAenowMDJkYjA2MAB6ejAxNmVhOWFkAHp6MDAw
-ZWYzMDkAenowMmRiMzc2MwBhdGhfaGFsX2J1aWxkb3B0cwB6ejAyZGFmMzVkAHp6MGRi
-NGNkMDQAenowMTZkZjI1MQB6ejAwMGI2YzEwAHp6MDE2ZDkyNTEAenowYjcyMWFlZAB6
-ejA2N2NmY2FlAHp6MDAwYjZjZjgAenowY2NlZjMwOAB6ejAyZGFmYWIyAHp6MDViOTJh
-ZWQAenowMDViOGNjYgB6ejBiNmQ5ZWZmAHp6MDJkYjExYjIAenowZTE3M2E0ZAB6ejAy
-ZGJmZmIxAHp6MDJkYmY3NjMAenowMDViNjhmZAB6ejAwNWI0NGVkAHp6MGI3MTFhZWQA
-enowYjVmY2EzNAB6ejBkOGI4Yjc5AHp6MDE2ZDhiMmQAenowMTZlMDg5YgB6ejAyZGJi
-ODc1AHp6MDE2ZDk3ZjAAenowYjgzODM2OAB6ejAwYjZmZWJjAHp6MGU5OTkzMTMAenow
-MGI2ZWE3YQB6ejAzM2U4ZmJmAHp6MDA1YjcyMzAAenowY2ZhNTg3NQB6ejAyZGI5OWFl
-AHp6MDJkYjlhYjIAenowMDBiNmJlOAB6ejBkOTljNGY2AHp6MGRlZDhhNTcAenowMTZk
-YWJmZQB6ejBiNzA5ZDAyAHp6MDE5ZjNhMDEAenowNzA3MTdlNwBhdGhfaGFsX21lbXpl
-cm8AenowNmUwNGRkMQB6ejBiNjhlOThjAHp6MDE2ZTJkZmQAenowMDBiNmQyMgB6ejA3
-MDIzMmNjAHp6MGRjNTQ5NGQAenowMGI3MGY3ZABhdGhfaGFsX3N3X2JlYWNvbl9yZXNw
-b25zZV90aW1lAHp6MDlmNjlkMmUAenowMDViNjU3YQB6ejA2ZjcxN2U3AHp6MDZkYTVl
-YjYAenowYjdkNDYxMgB6ejAwYjZmOTYxAHp6MGI2YjBjOTAAenowMmRiZDM1ZAB6ejAw
-NWI4OGZkAHp6MDJkYWZkZmQAYXRoX2hhbF9kZWxheQB6ejAyZGIxZGZkAHp6MDY3ZDJm
-NDEAenowMmRhZjg3NQB6ejBiODA3NzQxAHp6MDE2ZDhkNDEAenowMDJkYWU5MgB6ejBi
-N2M3NzQxAHp6MDJkYmIzNWQAenowMmRiM2RmZAB6ejAyZGI1M2VkAHp6MDAwYjZkYTIA
-enowMDBiNmUyMgB6ejA1YjgwMDQxAHp6MGQ4OWM0ZjYAenowMDE2ZDg0OAB6ejAxNmQ5
-YjJkAHp6MGUzNzNhNGQAenowMDE2ZTAyYwB6ejAwYjcwNzdkAHp6MDA1YjY5N2EAenow
-MDE2ZGFlNAB6ejAxNmUxMDliAHp6MDA1YjRhMmQAenowZGY3ODM3OQB6ejAyZGJkNzYz
-AHp6MDAwYjZlNTIAenowNWI2YzZkYgB6ejBjYTVmMzI5AHp6MGRiMjkxMGUAenowMmRi
-M2JmMAB6ejA2ZDc4YTRjAHp6MDE2ZTAyNTEAenowMDAyZGJiMgB6ejAwMmRkODZkAHp6
-MDJkYjU5YWUAenowMDY3ZDIyMQB6ejAwNWI4OTNkAHp6MDViODFiMWIAenowMTZkODdm
-MAB6ejAyZGIxM2VkAHp6MDBiNmQxMjMAenowMDBiNmNlOAB6ejA1YjhhYWVkAHp6MDJk
-YWYxYjIAenowMDA1YjVlMgB6ejAzM2ViZmJmAHp6MDViNjg2ZGIAenowMDBiNmVmOAB6
-ejBiNzE5YWVkAHp6MDA1YjU4YjIAenowNWI3ZGIxYgB6ejBiODQ3NzQxAHp6MDAxNmQ3
-MzIAenowMmRhZGFiMgB6ejBmNGRlMzA3AGF0aF9oYWxfaW5pdF9jaGFubmVscwB6ejAw
-YjZkNmJjAHp6MGM0ZWYzMDgAenowMDAyZGJkMgB6ejBkYWI4Yjc5AHp6MDE2ZTBiODcA
-enowNWI5MDJlZAB6ejBkYzM4NzE4AHp6MGFhMmVlYzEAenowMDBiNmMxZAB6ejA1Yjhl
-YWVkAHp6MDA1YjdiOWQAenowMDViNTQ0NgB6ejA1YjY0NmRiAHp6MDBiNmY5MjMAenow
-ZGRkOGE1NwB6ejAxNmUxMjUxAHp6MGRjNzQ5NGQAenowMmRiMzcwYQB6ejAwMDViNjcy
-AHp6MDZkZjRkZDEAenowMmRiZjM1ZAB6ejAwMGI2Yzc4AHp6MDAxNmQ4MzIAenowM2U5
-NzM1MwB6ejAyZGI1NzBhAHp6MDA1YjZkN2EAenowMDJkYjI5MgB6ejAwNWI5MGNiAHp6
-MDA1YjVjNDYAYXRoX2hhbF9wcmludGYAenowNmQ5NWViNgB6ejAxNmRmYjg3AHp6MDAx
-NmRhNDgAenowMDJkYjA5MgBhdGhfaGFsX2dldHdpcmVsZXNzbW9kZXMAenowMTZlMWI4
-NwBkAAAAAAAAAAsAAAADAAAAKgAAAAAAAAB6AAAAAAAAAAsAAAADAAAAPQAAAAAAAACb
-AAAAAAAAAAsAAAADAAAAUQAAAAAAAACsAAAAAAAAAAsAAAADAAAAZQAAAAAAAAC0AAAA
-AAAAAAsAAAADAAAAcgAAAAAAAAC8AAAAAAAAAAsAAAADAAAAfwAAAAAAAADEAAAAAAAA
-AAsAAAADAAAAkgAAAAAAAABzAQAAAAAAAAIAAABvAAAA/P////////99AQAAAAAAAAIA
-AABqAQAA/P////////+HAQAAAAAAAAIAAAA/AAAA/P////////8nAgAAAAAAAAIAAAAf
-AQAA/P/////////8BQAAAAAAAAIAAABeAAAA/P////////8ZBgAAAAAAAAIAAABeAAAA
-/P////////9IBgAAAAAAAAsAAAACAAAAAAAAAAAAAABtCQAAAAAAAAsAAAACAAAAgAAA
-AAAAAAB2CQAAAAAAAAsAAAACAAAAoAAAAAAAAAD9DAAAAAAAAAIAAADAAAAA/P//////
-//+SEQAAAAAAAAIAAAAMAQAA/P////////+OHQAAAAAAAAIAAAAMAQAA/P////////95
-KAAAAAAAAAsAAAACAAAA4AAAAAAAAACLKAAAAAAAAAsAAAACAAAAwAAAAAAAAAAxNgAA
-AAAAAAsAAAACAAAAYBIAAAAAAABeNgAAAAAAAAsAAAACAAAAQAEAAAAAAACwNgAAAAAA
-AAsAAAACAAAAIBgAAAAAAADtNgAAAAAAAAIAAAACAAAAHBgAAAAAAABwNwAAAAAAAAsA
-AAACAAAAQgEAAAAAAACPNwAAAAAAAAsAAAACAAAAZBIAAAAAAAChNwAAAAAAAAsAAAAC
-AAAAYhIAAAAAAAAVOAAAAAAAAAsAAAACAAAAgBMAAAAAAAAcOAAAAAAAAAsAAAACAAAA
-gBUAAAAAAAA2OAAAAAAAAAsAAAACAAAAABcAAAAAAAA9OAAAAAAAAAsAAAACAAAAIBYA
-AAAAAABiOAAAAAAAAAsAAAACAAAAUCEAAAAAAABpOAAAAAAAAAsAAAACAAAAZCEAAAAA
-AACHOQAAAAAAAAsAAAACAAAAZCEAAAAAAACvOQAAAAAAAAsAAAACAAAAaCEAAAAAAAA+
-OgAAAAAAAAsAAAACAAAA8BcAAAAAAACBOgAAAAAAAAsAAAACAAAAQAEAAAAAAACtOgAA
-AAAAAAsAAAACAAAAcCIAAAAAAAAlOwAAAAAAAAsAAAACAAAAQAEAAAAAAABBOwAAAAAA
-AAsAAAACAAAAUAEAAAAAAACnOwAAAAAAAAsAAAACAAAAIBgAAAAAAACuOwAAAAAAAAsA
-AAACAAAAMBgAAAAAAADTOwAAAAAAAAsAAAACAAAAMBgAAAAAAAAHPAAAAAAAAAsAAAAC
-AAAAMBgAAAAAAABCPAAAAAAAAAsAAAACAAAAQAEAAAAAAABJPAAAAAAAAAsAAAACAAAA
-UAEAAAAAAAC4PAAAAAAAAAsAAAACAAAAYhIAAAAAAAAKPQAAAAAAAAsAAAACAAAAXAEA
-AAAAAAAYPQAAAAAAAAsAAAACAAAAQAEAAAAAAABIPQAAAAAAAAsAAAACAAAAQAEAAAAA
-AABfPQAAAAAAAAsAAAACAAAAYAEAAAAAAAClPQAAAAAAAAsAAAACAAAAQCMAAAAAAAAA
-PgAAAAAAAAsAAAACAAAAQCMAAAAAAACFPgAAAAAAAAsAAAAFAAAAwAIAAAAAAACmPgAA
-AAAAAAsAAAAFAAAAwAIAAAAAAABmPwAAAAAAAAsAAAACAAAAQAEAAAAAAAC0PwAAAAAA
-AAsAAAACAAAAQAEAAAAAAADbPwAAAAAAAAsAAAACAAAAYBIAAAAAAABUQAAAAAAAAAsA
-AAACAAAAJBgAAAAAAABqQAAAAAAAAAsAAAACAAAAoBwAAAAAAAB/QAAAAAAAAAsAAAAC
-AAAAIBgAAAAAAABHQwAAAAAAAAIAAAB6AQAA/P/////////GQwAAAAAAAAsAAAACAAAA
-UCEAAAAAAADNQwAAAAAAAAsAAAACAAAAZCEAAAAAAAABRgAAAAAAAAsAAAACAAAAZCEA
-AAAAAAATRgAAAAAAAAsAAAABAAAAikIAAAAAAACVRwAAAAAAAAsAAAACAAAAIBgAAAAA
-AABnSQAAAAAAAAIAAAC2AAAA/P/////////XSQAAAAAAAAsAAAAFAAAAYAAAAAAAAACv
-SgAAAAAAAAsAAAACAAAAIBgAAAAAAABwTAAAAAAAAAsAAAACAAAAUCQAAAAAAABFTQAA
-AAAAAAIAAADAAAAA/P////////9mTQAAAAAAAAsAAAACAAAAYCQAAAAAAABuTQAAAAAA
-AAIAAADWAAAA/P/////////hTQAAAAAAAAIAAAAlAQAA/P////////9hTgAAAAAAAAIA
-AAArAAAA/P////////+WTgAAAAAAAAIAAAAWAQAA/P/////////KTgAAAAAAAAIAAAAW
-AQAA/P/////////2TgAAAAAAAAIAAAAWAQAA/P////////9JTwAAAAAAAAIAAAAWAQAA
-/P////////+HTwAAAAAAAAIAAAAWAQAA/P////////+IUgAAAAAAAAIAAAAWAQAA/P//
-//////8KUwAAAAAAAAIAAAB8AAAA/P////////86UwAAAAAAAAIAAAB8AAAA/P//////
-//+xUwAAAAAAAAIAAAAuAAAA/P/////////GUwAAAAAAAAIAAAAUAQAA/P////////9J
-VAAAAAAAAAIAAAAfAQAA/P////////9lWQAAAAAAAAIAAABnAAAA/P////////+bWQAA
-AAAAAAIAAADWAAAA/P////////+1WQAAAAAAAAIAAADWAAAA/P/////////1WQAAAAAA
-AAIAAABCAAAA/P////////91WgAAAAAAAAIAAAAQAQAA/P////////+KWgAAAAAAAAIA
-AABsAAAA/P////////+KWwAAAAAAAAIAAAA4AQAA/P////////8kXAAAAAAAAAIAAADW
-AAAA/P////////+ZXAAAAAAAAAIAAABGAQAA/P////////+jXAAAAAAAAAIAAACuAAAA
-/P/////////SXQAAAAAAAAIAAAAjAAAA/P/////////zXQAAAAAAAAIAAABDAQAA/P//
-//////80XgAAAAAAAAIAAAAjAAAA/P////////9lXgAAAAAAAAIAAAAjAAAA/P//////
-//+YXgAAAAAAAAIAAABDAQAA/P/////////pXgAAAAAAAAIAAAAjAAAA/P////////8a
-XwAAAAAAAAIAAAAjAAAA/P////////9NXwAAAAAAAAIAAABDAQAA/P////////+kXwAA
-AAAAAAIAAAAjAAAA/P/////////QXwAAAAAAAAIAAAACAQAA/P//////////XwAAAAAA
-AAIAAAAaAAAA/P////////8NYAAAAAAAAAIAAAAhAQAA/P////////90YAAAAAAAAAIA
-AAAfAQAA/P////////+UYAAAAAAAAAIAAAAfAQAA/P/////////ZYQAAAAAAAAsAAADe
-AAAAAAAAAAAAAADnYQAAAAAAAAsAAAARAAAAAAAAAAAAAAD4YQAAAAAAAAIAAAAVAQAA
-/P////////9PYgAAAAAAAAIAAAAfAQAA/P////////8tZQAAAAAAAAIAAAAlAQAA/P//
-//////+uZwAAAAAAAAIAAACpAAAA/P////////9waAAAAAAAAAsAAAACAAAAAC4AAAAA
-AACsaAAAAAAAAAIAAABrAQAA/P/////////UaQAAAAAAAAIAAAAfAQAA/P/////////+
-aQAAAAAAAAIAAABCAAAA/P////////8JagAAAAAAAAIAAACKAAAA/P////////8sagAA
-AAAAAAIAAABQAAAA/P////////9GagAAAAAAAAIAAAB2AAAA/P////////92agAAAAAA
-AAIAAABlAQAA/P////////+RagAAAAAAAAIAAAANAAAA/P////////+sagAAAAAAAAIA
-AAAEAQAA/P////////98awAAAAAAAAIAAADkAAAA/P////////+qawAAAAAAAAIAAAAf
-AQAA/P/////////GawAAAAAAAAIAAAAfAQAA/P/////////3awAAAAAAAAIAAADkAAAA
-/P////////9JbAAAAAAAAAIAAAAfAQAA/P////////9ubAAAAAAAAAIAAAAfAQAA/P//
-//////+FbAAAAAAAAAIAAADkAAAA/P/////////9bAAAAAAAAAIAAAAfAQAA/P//////
-//8cbQAAAAAAAAIAAAAfAQAA/P////////8+bQAAAAAAAAIAAAAfAQAA/P////////+x
-bQAAAAAAAAIAAAAfAQAA/P/////////QbQAAAAAAAAIAAAAfAQAA/P/////////9bQAA
-AAAAAAIAAAAfAQAA/P////////8nbgAAAAAAAAIAAABCAAAA/P////////9SbgAAAAAA
-AAIAAACKAAAA/P////////9gbgAAAAAAAAIAAAAfAQAA/P////////9rbgAAAAAAAAIA
-AACKAAAA/P/////////ebgAAAAAAAAIAAAAfAQAA/P/////////1bgAAAAAAAAIAAABC
-AAAA/P////////9ecgAAAAAAAAsAAAACAAAAUjMAAAAAAADMcwAAAAAAAAsAAAACAAAA
-YDMAAAAAAADRcwAAAAAAAAIAAADWAAAA/P/////////icwAAAAAAAAsAAAACAAAAQDMA
-AAAAAADqcwAAAAAAAAIAAADWAAAA/P////////9GdAAAAAAAAAIAAAArAAAA/P//////
-//9tdAAAAAAAAAIAAAArAAAA/P/////////6dQAAAAAAAAIAAAArAAAA/P////////8V
-dgAAAAAAAAIAAAArAAAA/P////////8tdgAAAAAAAAIAAAArAAAA/P////////+WdgAA
-AAAAAAIAAADoAAAA/P/////////MdgAAAAAAAAIAAAArAAAA/P////////9UdwAAAAAA
-AAIAAABCAAAA/P////////9sdwAAAAAAAAIAAAAfAQAA/P////////90dwAAAAAAAAIA
-AABLAAAA/P/////////MdwAAAAAAAAIAAABNAQAA/P//////////dwAAAAAAAAIAAAAA
-AQAA/P////////+IeAAAAAAAAAIAAAAMAQAA/P/////////BeAAAAAAAAAIAAACxAAAA
-/P////////8lfAAAAAAAAAIAAACXAAAA/P////////84fAAAAAAAAAIAAAA4AQAA/P//
-//////9nfAAAAAAAAAIAAAA4AQAA/P////////+DfAAAAAAAAAIAAAA4AQAA/P//////
-//+HfQAAAAAAAAIAAAAfAQAA/P////////++fQAAAAAAAAIAAABCAAAA/P////////+2
-fwAAAAAAAAIAAAArAAAA/P/////////lfwAAAAAAAAIAAADAAAAA/P////////8GgAAA
-AAAAAAsAAAACAAAAwDMAAAAAAAAOgAAAAAAAAAIAAADWAAAA/P////////+CgAAAAAAA
-AAIAAAB5AQAA/P/////////BgAAAAAAAAAIAAAAfAQAA/P////////9PgQAAAAAAAAIA
-AAAfAQAA/P////////+HgQAAAAAAAAIAAAAzAQAA/P/////////mgQAAAAAAAAIAAAAz
-AQAA/P////////8hggAAAAAAAAIAAAAzAQAA/P////////+PggAAAAAAAAsAAAACAAAA
-UD0AAAAAAADXggAAAAAAAAIAAABfAQAA/P////////8QgwAAAAAAAAIAAAAfAQAA/P//
-//////83gwAAAAAAAAIAAAAfAQAA/P////////9vgwAAAAAAAAIAAAAzAQAA/P//////
-//+ggwAAAAAAAAIAAABmAQAA/P/////////FgwAAAAAAAAIAAAAzAQAA/P////////8n
-hAAAAAAAAAIAAABMAQAA/P////////9ShAAAAAAAAAIAAAB8AAAA/P////////9DhQAA
-AAAAAAIAAAAfAQAA/P////////+3hQAAAAAAAAIAAADPAAAA/P////////+HhgAAAAAA
-AAIAAAAuAAAA/P////////+chgAAAAAAAAIAAAAUAQAA/P/////////zhgAAAAAAAAIA
-AABcAQAA/P////////8BhwAAAAAAAAIAAAAfAQAA/P////////9IjAAAAAAAAAIAAAC9
-AAAA/P////////9vjAAAAAAAAAIAAADWAAAA/P////////+JjAAAAAAAAAIAAADWAAAA
-/P/////////TjAAAAAAAAAIAAABCAAAA/P////////+HjQAAAAAAAAIAAAAzAQAA/P//
-//////8AjgAAAAAAAAIAAAAqAQAA/P////////8VjgAAAAAAAAIAAAAyAAAA/P//////
-//8jjgAAAAAAAAIAAADSAAAA/P////////9EjgAAAAAAAAIAAAAqAQAA/P////////9k
-jgAAAAAAAAIAAADBAAAA/P////////81jwAAAAAAAAIAAADyAAAA/P////////9TjwAA
-AAAAAAsAAAACAAAAYD0AAAAAAAB+jwAAAAAAAAIAAADWAAAA/P/////////0kAAAAAAA
-AAIAAADyAAAA/P////////8ikQAAAAAAAAIAAAAjAAAA/P////////8/kQAAAAAAAAIA
-AABDAQAA/P////////+AkQAAAAAAAAIAAAAjAAAA/P////////+xkQAAAAAAAAIAAAAj
-AAAA/P/////////kkQAAAAAAAAIAAABDAQAA/P////////81kgAAAAAAAAIAAAAjAAAA
-/P////////9mkgAAAAAAAAIAAAAjAAAA/P////////+ZkgAAAAAAAAIAAABDAQAA/P//
-///////wkgAAAAAAAAIAAAAjAAAA/P////////9clAAAAAAAAAIAAAACAQAA/P//////
-//+LlAAAAAAAAAIAAAAaAAAA/P////////+ZlAAAAAAAAAIAAAAhAQAA/P////////8I
-lQAAAAAAAAIAAAAfAQAA/P////////8olQAAAAAAAAIAAAAfAQAA/P////////+MlgAA
-AAAAAAsAAACvAAAAAAAAAAAAAACVlgAAAAAAAAsAAAD0AAAAAAAAAAAAAACelgAAAAAA
-AAsAAADZAAAAAAAAAAAAAACvlgAAAAAAAAIAAAAVAQAA/P/////////zlgAAAAAAAAIA
-AABCAAAA/P////////+SmQAAAAAAAAIAAADoAAAA/P////////97mgAAAAAAAAIAAAB5
-AQAA/P////////9/mwAAAAAAAAIAAAArAAAA/P////////+RmwAAAAAAAAIAAAArAAAA
-/P////////+gmwAAAAAAAAsAAAAFAAAAjA0AAAAAAAC+mwAAAAAAAAsAAAAFAAAAmA0A
-AAAAAADqmwAAAAAAAAsAAAAFAAAAYAwAAAAAAAAknAAAAAAAAAsAAAACAAAAgD0AAAAA
-AABVnAAAAAAAAAsAAAACAAAAoEUAAAAAAACEnAAAAAAAAAsAAAACAAAAQEAAAAAAAACL
-nAAAAAAAAAsAAAACAAAAREAAAAAAAAAwnwAAAAAAAAIAAAANAQAA/P/////////VnwAA
-AAAAAAIAAAAfAQAA/P//////////nwAAAAAAAAIAAABCAAAA/P////////8KoAAAAAAA
-AAIAAAAcAAAA/P////////+CoAAAAAAAAAIAAAD5AAAA/P////////8foQAAAAAAAAIA
-AABtAAAA/P////////8roQAAAAAAAAIAAABKAAAA/P////////9boQAAAAAAAAIAAACR
-AAAA/P////////92oQAAAAAAAAIAAADGAAAA/P////////+RoQAAAAAAAAIAAAAzAAAA
-/P////////8DogAAAAAAAAIAAAA/AQAA/P////////8sogAAAAAAAAIAAAAfAQAA/P//
-//////9cogAAAAAAAAIAAAA/AQAA/P/////////vogAAAAAAAAIAAAAfAQAA/P//////
-//8kowAAAAAAAAIAAAAfAQAA/P////////96owAAAAAAAAIAAAAfAQAA/P////////+o
-owAAAAAAAAIAAAAfAQAA/P////////+/owAAAAAAAAIAAAA/AQAA/P////////+jpAAA
-AAAAAAIAAAAcAAAA/P////////+xpAAAAAAAAAIAAAAfAQAA/P////////+8pAAAAAAA
-AAIAAAAcAAAA/P////////8opQAAAAAAAAIAAAAfAQAA/P////////8/pQAAAAAAAAIA
-AABCAAAA/P////////+FpQAAAAAAAAIAAACBAAAA/P////////+dpQAAAAAAAAsAAAAC
-AAAAhEkAAAAAAACqpQAAAAAAAAIAAAArAAAA/P/////////hpQAAAAAAAAIAAAArAAAA
-/P////////8JpgAAAAAAAAIAAAArAAAA/P////////8IpwAAAAAAAAIAAAAfAQAA/P//
-//////8lpwAAAAAAAAIAAAAtAAAA/P/////////ypwAAAAAAAAIAAABWAQAA/P//////
-//8eqAAAAAAAAAsAAAACAAAAyEoAAAAAAACYqQAAAAAAAAsAAAAFAAAA/A0AAAAAAAC3
-qQAAAAAAAAsAAAAFAAAACA4AAAAAAADWqQAAAAAAAAsAAAAFAAAAvA4AAAAAAAB3qgAA
-AAAAAAsAAAAFAAAARA4AAAAAAACQqgAAAAAAAAIAAAArAAAA/P////////+vqgAAAAAA
-AAsAAAAFAAAAUA4AAAAAAADEqgAAAAAAAAIAAAArAAAA/P/////////mqgAAAAAAAAIA
-AAArAAAA/P/////////8qgAAAAAAAAsAAAAFAAAAXA4AAAAAAAARqwAAAAAAAAIAAAAr
-AAAA/P////////8vqwAAAAAAAAIAAAArAAAA/P////////9DqwAAAAAAAAsAAAAFAAAA
-jA4AAAAAAABmqwAAAAAAAAsAAAAFAAAAwA0AAAAAAACDrAAAAAAAAAIAAABAAAAA/P//
-//////9ZrwAAAAAAAAIAAAAUAAAA/P/////////trwAAAAAAAAsAAAAGAAAAAAAAAAAA
-AADyrwAAAAAAAAIAAAAMAQAA/P/////////+rwAAAAAAAAsAAAAGAAAAIAEAAAAAAAAD
-sAAAAAAAAAIAAAAMAQAA/P////////8KsAAAAAAAAAsAAAAGAAAACAAAAAAAAAARsAAA
-AAAAAAsAAAAGAAAAiAAAAAAAAAA0sAAAAAAAAAIAAAAGAAAAAgAAAAAAAAA7sAAAAAAA
-AAIAAAAGAAAA/P////////9EsAAAAAAAAAIAAAAGAAAA/v////////9SsAAAAAAAAAIA
-AAAGAAAAAgAAAAAAAAB2sAAAAAAAAAIAAAAGAAAAAgAAAAAAAACFsAAAAAAAAAIAAAAG
-AAAAAgAAAAAAAACXsAAAAAAAAAIAAAAGAAAAAgAAAAAAAAC6sAAAAAAAAAIAAAAGAAAA
-AgAAAAAAAADgsAAAAAAAAAIAAAAGAAAAAgAAAAAAAADusAAAAAAAAAIAAAAGAAAAAgAA
-AAAAAAD3sAAAAAAAAAIAAAAGAAAAAgAAAAAAAABksQAAAAAAAAsAAAAGAAAAIAEAAAAA
-AACksQAAAAAAAAIAAAAGAAAAAgAAAAAAAABSsgAAAAAAAAsAAAAGAAAAIAEAAAAAAABx
-sgAAAAAAAAIAAAAGAAAAAgAAAAAAAACLsgAAAAAAAAsAAAAGAAAAIAEAAAAAAACRsgAA
-AAAAAAEAAAAGAAAAHgEAAAAAAAC8sgAAAAAAAAsAAAAGAAAAIgEAAAAAAADDsgAAAAAA
-AAsAAAAGAAAAIAEAAAAAAABhswAAAAAAAAsAAAAGAAAAoAEAAAAAAABpswAAAAAAAAIA
-AABvAQAA/P////////+qswAAAAAAAAIAAAD+AAAA/P////////8BtQAAAAAAAAsAAAAC
-AAAA2EoAAAAAAAAntgAAAAAAAAsAAAACAAAAzEoAAAAAAABOtwAAAAAAAAIAAABkAAAA
-/P/////////SugAAAAAAAAIAAAACAAAAIEsAAAAAAADtugAAAAAAAAsAAAACAAAAKEsA
-AAAAAACAvAAAAAAAAAsAAAACAAAAKEsAAAAAAACuvAAAAAAAAAsAAAACAAAAIEsAAAAA
-AAC1vAAAAAAAAAsAAAACAAAAKEsAAAAAAAADvQAAAAAAAAIAAAACAAAAHEsAAAAAAAAg
-vQAAAAAAAAIAAAACAAAAHEsAAAAAAAAtvQAAAAAAAAsAAAACAAAAIEsAAAAAAAA0vQAA
-AAAAAAsAAAACAAAAKEsAAAAAAAAsvgAAAAAAAAIAAADgAAAA/P////////8/vgAAAAAA
-AAIAAADyAAAA/P////////92vgAAAAAAAAIAAADyAAAA/P////////+hvgAAAAAAAAIA
-AADyAAAA/P/////////hvgAAAAAAAAIAAABNAQAA/P////////8UvwAAAAAAAAIAAAAA
-AQAA/P////////+6vwAAAAAAAAIAAAAMAQAA/P/////////6vwAAAAAAAAIAAABaAAAA
-/P////////94wwAAAAAAAAIAAAAUAQAA/P////////9+wwAAAAAAAAIAAAAuAAAA/P//
-//////+PwwAAAAAAAAIAAACzAAAA/P////////+ExQAAAAAAAAIAAABcAQAA/P//////
-//+SxQAAAAAAAAIAAAAfAQAA/P////////+qxwAAAAAAAAIAAAArAAAA/P////////+9
-yAAAAAAAAAIAAADAAAAA/P/////////jyAAAAAAAAAsAAAACAAAAQEwAAAAAAADryAAA
-AAAAAAIAAADWAAAA/P////////+wyQAAAAAAAAIAAABHAAAA/P/////////byQAAAAAA
-AAIAAABnAQAA/P/////////syQAAAAAAAAIAAAByAQAA/P////////9dygAAAAAAAAIA
-AAAZAAAA/P////////+DygAAAAAAAAIAAAA8AAAA/P////////8fywAAAAAAAAIAAABx
-AQAA/P////////97ywAAAAAAAAIAAABxAQAA/P////////+hywAAAAAAAAIAAABxAQAA
-/P/////////UywAAAAAAAAIAAABxAQAA/P////////8YzAAAAAAAAAIAAABxAQAA/P//
-//////+EzAAAAAAAAAsAAAACAAAA0FUAAAAAAACLzAAAAAAAAAsAAAACAAAA1lUAAAAA
-AADXzAAAAAAAAAIAAABfAQAA/P////////8SzQAAAAAAAAIAAAAfAQAA/P////////8a
-zQAAAAAAAAIAAAA8AAAA/P////////85zQAAAAAAAAIAAAAfAQAA/P////////9ozQAA
-AAAAAAIAAABxAQAA/P////////+LzQAAAAAAAAIAAAAbAQAA/P////////+nzQAAAAAA
-AAIAAACcAAAA/P/////////FzQAAAAAAAAIAAABuAQAA/P/////////SzQAAAAAAAAIA
-AABUAQAA/P/////////izQAAAAAAAAIAAAAHAQAA/P////////8HzgAAAAAAAAIAAABx
-AQAA/P////////9lzgAAAAAAAAIAAAClAAAA/P////////9+zgAAAAAAAAIAAAB4AAAA
-/P////////+nzgAAAAAAAAIAAABpAAAA/P/////////RzgAAAAAAAAIAAABnAQAA/P//
-///////ZzgAAAAAAAAIAAAB8AAAA/P/////////HzwAAAAAAAAIAAAAfAQAA/P//////
-//8b0wAAAAAAAAIAAAAuAAAA/P////////8w0wAAAAAAAAIAAAAUAQAA/P////////+d
-0wAAAAAAAAIAAAB7AQAA/P////////+r0wAAAAAAAAIAAAAfAQAA/P////////901QAA
-AAAAAAIAAABCAAAA/P////////+T1gAAAAAAAAIAAADIAAAA/P////////8h2gAAAAAA
-AAsAAAACAAAA4FUAAAAAAADP2wAAAAAAAAIAAAARAQAA/P/////////93AAAAAAAAAIA
-AAARAQAA/P////////9D3QAAAAAAAAIAAADWAAAA/P////////9d3QAAAAAAAAIAAADW
-AAAA/P/////////w3gAAAAAAAAsAAAACAAAAIFYAAAAAAAAT3wAAAAAAAAIAAADWAAAA
-/P////////944gAAAAAAAAIAAAAjAAAA/P////////+Z4gAAAAAAAAIAAABDAQAA/P//
-///////a4gAAAAAAAAIAAAAjAAAA/P////////8L4wAAAAAAAAIAAAAjAAAA/P//////
-//8+4wAAAAAAAAIAAABDAQAA/P////////+P4wAAAAAAAAIAAAAjAAAA/P/////////A
-4wAAAAAAAAIAAAAjAAAA/P/////////z4wAAAAAAAAIAAABDAQAA/P////////9K5AAA
-AAAAAAIAAAAjAAAA/P////////9e5AAAAAAAAAIAAAAiAAAA/P////////+O5AAAAAAA
-AAIAAAAVAAAA/P/////////I5QAAAAAAAAIAAAAVAAAA/P////////+k5gAAAAAAAAsA
-AAACAAAAQFYAAAAAAAAz5wAAAAAAAAIAAAACAQAA/P/////////H5wAAAAAAAAIAAAAa
-AAAA/P/////////V5wAAAAAAAAIAAAAhAQAA/P////////8R6AAAAAAAAAIAAAAfAQAA
-/P////////8x6AAAAAAAAAIAAAAfAQAA/P////////+56QAAAAAAAAsAAAAoAAAAAAAA
-AAAAAADC6QAAAAAAAAsAAACeAAAAAAAAAAAAAADL6QAAAAAAAAsAAAA2AQAAAAAAAAAA
-AADU6QAAAAAAAAsAAACLAAAAAAAAAAAAAADd6QAAAAAAAAsAAABBAQAAAAAAAAAAAADu
-6QAAAAAAAAIAAAAVAQAA/P////////8z6gAAAAAAAAIAAABCAAAA/P////////9c6gAA
-AAAAAAIAAAAsAAAA/P////////9k6gAAAAAAAAIAAADMAAAA/P////////+C6gAAAAAA
-AAIAAAB6AAAA/P////////997AAAAAAAAAIAAACGAAAA/P////////957QAAAAAAAAIA
-AABnAQAA/P////////+R7QAAAAAAAAIAAADoAAAA/P////////9U7gAAAAAAAAIAAABW
-AAAA/P////////9c7gAAAAAAAAIAAABEAAAA/P////////9n7gAAAAAAAAIAAAByAQAA
-/P////////9E7wAAAAAAAAsAAAACAAAA4FYAAAAAAABT7wAAAAAAAAsAAAACAAAA4FYA
-AAAAAABp7wAAAAAAAAIAAAAfAQAA/P////////9/7wAAAAAAAAsAAAACAAAAQFkAAAAA
-AACj7wAAAAAAAAsAAAACAAAARFkAAAAAAAC57wAAAAAAAAIAAAAfAQAA/P/////////j
-7wAAAAAAAAIAAABVAAAA/P////////8L8QAAAAAAAAIAAABSAAAA/P////////9R8QAA
-AAAAAAIAAADxAAAA/P////////9e8QAAAAAAAAIAAAAsAQAA/P////////8C8gAAAAAA
-AAIAAAAiAAAA/P////////9N8wAAAAAAAAIAAAAfAQAA/P////////8L9AAAAAAAAAIA
-AACCAAAA/P////////9j9AAAAAAAAAIAAAAOAAAA/P////////9v9AAAAAAAAAIAAACq
-AAAA/P////////+G9AAAAAAAAAIAAABCAAAA/P////////+g9AAAAAAAAAIAAACQAAAA
-/P/////////O9AAAAAAAAAIAAAA6AAAA/P/////////n9AAAAAAAAAIAAAApAAAA/P//
-//////8A9QAAAAAAAAIAAAA+AAAA/P/////////q9QAAAAAAAAIAAABnAQAA/P//////
-//9S9gAAAAAAAAIAAABnAQAA/P////////9y9wAAAAAAAAIAAAAfAQAA/P////////+M
-9wAAAAAAAAIAAAAfAQAA/P/////////a9wAAAAAAAAIAAADoAAAA/P/////////M+QAA
-AAAAAAIAAAAfAQAA/P/////////j+QAAAAAAAAIAAABCAAAA/P////////8N+gAAAAAA
-AAIAAABnAQAA/P/////////O+gAAAAAAAAIAAABfAAAA/P////////+v+wAAAAAAAAIA
-AAArAAAA/P/////////e/AAAAAAAAAIAAAC+AAAA/P////////+pAAEAAAAAAAIAAABS
-AAAA/P/////////WAAEAAAAAAAIAAAAMAQAA/P/////////nAAEAAAAAAAIAAAAMAQAA
-/P////////8YAQEAAAAAAAsAAAACAAAAeF8AAAAAAAAKBAEAAAAAAAIAAABvAQAA/P//
-//////8wBAEAAAAAAAIAAAAUAAAA/P/////////ABQEAAAAAAAIAAAD+AAAA/P//////
-///cCAEAAAAAAAIAAADWAAAA/P////////8kCgEAAAAAAAIAAAA+AQAA/P////////9l
-CwEAAAAAAAIAAAA+AQAA/P/////////1DAEAAAAAAAIAAAACAAAAIGEAAAAAAAAJDQEA
-AAAAAAsAAAACAAAAKGEAAAAAAAApDQEAAAAAAAIAAAACAAAAoF8AAAAAAAA5DQEAAAAA
-AAsAAAACAAAAqF8AAAAAAACzDwEAAAAAAAsAAAACAAAAoF8AAAAAAAC6DwEAAAAAAAsA
-AAACAAAAIGEAAAAAAABrEQEAAAAAAAIAAAArAAAA/P////////8wEgEAAAAAAAIAAABT
-AAAA/P////////9yEgEAAAAAAAIAAABeAAAA/P////////+eEgEAAAAAAAIAAABTAAAA
-/P/////////uEgEAAAAAAAIAAABeAAAA/P////////8qEwEAAAAAAAIAAABeAAAA/P//
-//////9+EwEAAAAAAAIAAADIAAAA/P/////////bEwEAAAAAAAIAAADIAAAA/P//////
-//8rFAEAAAAAAAIAAABNAQAA/P////////9oFAEAAAAAAAIAAAAAAQAA/P////////9C
-FQEAAAAAAAIAAAAMAQAA/P////////+CFQEAAAAAAAIAAABPAAAA/P/////////nGAEA
-AAAAAAIAAAAUAQAA/P/////////tGAEAAAAAAAIAAAAuAAAA/P/////////8GAEAAAAA
-AAIAAACzAAAA/P/////////dGgEAAAAAAAIAAAB7AQAA/P/////////rGgEAAAAAAAIA
-AAAfAQAA/P////////91GwEAAAAAAAIAAADIAAAA/P////////9FHAEAAAAAAAIAAADI
-AAAA/P////////+AHwEAAAAAAAIAAABoAQAA/P/////////gHwEAAAAAAAIAAABoAQAA
-/P////////+cIAEAAAAAAAIAAAAMAQAA/P////////9RIQEAAAAAAAIAAAAsAAAA/P//
-//////9+IQEAAAAAAAIAAAB6AAAA/P/////////BIQEAAAAAAAsAAAACAAAAkGIAAAAA
-AABAJgEAAAAAAAIAAABoAQAA/P/////////oJgEAAAAAAAIAAACVAAAA/P////////8R
-JwEAAAAAAAIAAACVAAAA/P////////8nJwEAAAAAAAIAAAAKAQAA/P////////9HJwEA
-AAAAAAIAAACVAAAA/P////////9fJwEAAAAAAAIAAACVAAAA/P/////////rJwEAAAAA
-AAIAAAAKAQAA/P////////8LKAEAAAAAAAIAAACVAAAA/P////////93KAEAAAAAAAIA
-AACVAAAA/P////////+JKAEAAAAAAAIAAACVAAAA/P////////+bKAEAAAAAAAIAAACV
-AAAA/P////////+tKAEAAAAAAAIAAACVAAAA/P////////+/KAEAAAAAAAIAAACVAAAA
-/P/////////HKAEAAAAAAAIAAABYAQAA/P/////////XKAEAAAAAAAIAAADLAAAA/P//
-///////7KAEAAAAAAAIAAACVAAAA/P////////8SKQEAAAAAAAIAAACVAAAA/P//////
-//8rKQEAAAAAAAIAAACVAAAA/P////////9CKQEAAAAAAAIAAACVAAAA/P////////9Z
-KQEAAAAAAAIAAACVAAAA/P////////9sKQEAAAAAAAIAAABYAQAA/P////////98KQEA
-AAAAAAIAAADLAAAA/P////////+yKQEAAAAAAAIAAABYAQAA/P/////////CKQEAAAAA
-AAIAAADLAAAA/P/////////8KQEAAAAAAAIAAABoAQAA/P////////9oKwEAAAAAAAIA
-AACVAAAA/P////////9SLAEAAAAAAAIAAABoAQAA/P////////+ILAEAAAAAAAsAAAAC
-AAAAwGIAAAAAAACPLAEAAAAAAAsAAAAEAAAAAAAAAAAAAACcLAEAAAAAAAIAAAB1AQAA
-/P/////////TLAEAAAAAAAsAAAACAAAAwGIAAAAAAADaLAEAAAAAAAsAAAAEAAAAQAAA
-AAAAAADnLAEAAAAAAAIAAAB1AQAA/P////////9SLgEAAAAAAAsAAAACAAAA4GIAAAAA
-AACCLgEAAAAAAAIAAAAfAQAA/P////////+YLgEAAAAAAAsAAAACAAAAQGQAAAAAAACk
-LgEAAAAAAAsAAAACAAAARGQAAAAAAAC4LgEAAAAAAAIAAAAfAQAA/P/////////LLgEA
-AAAAAAsAAAACAAAAIGgAAAAAAAD5LgEAAAAAAAIAAAAfAQAA/P////////8tLwEAAAAA
-AAIAAACBAAAA/P////////9FLwEAAAAAAAsAAAACAAAAxG4AAAAAAABSLwEAAAAAAAIA
-AAArAAAA/P////////+yLwEAAAAAAAIAAAArAAAA/P/////////aLwEAAAAAAAIAAAAr
-AAAA/P////////9QMAEAAAAAAAsAAAACAAAACHAAAAAAAACxMgEAAAAAAAsAAAACAAAA
-gGYAAAAAAADyMgEAAAAAAAIAAABwAAAA/P////////8NMwEAAAAAAAIAAABwAAAA/P//
-//////8gMwEAAAAAAAsAAAACAAAAgGYAAAAAAAA9MwEAAAAAAAIAAAAfAQAA/P//////
-//9TMwEAAAAAAAsAAAACAAAAIGsAAAAAAABeMwEAAAAAAAsAAAACAAAAJGsAAAAAAABz
-MwEAAAAAAAIAAAAfAQAA/P////////+DMwEAAAAAAAsAAAACAAAAMGsAAAAAAAC1MwEA
-AAAAAAIAAAAfAQAA/P/////////FMwEAAAAAAAsAAAACAAAAUGsAAAAAAAD3MwEAAAAA
-AAIAAAAfAQAA/P////////8NNAEAAAAAAAsAAAACAAAAgGsAAAAAAABgNAEAAAAAAAIA
-AABwAAAA/P////////+ANAEAAAAAAAIAAABwAAAA/P////////+iNAEAAAAAAAIAAABw
-AAAA/P////////+/NAEAAAAAAAIAAABwAAAA/P/////////cNAEAAAAAAAIAAABwAAAA
-/P/////////5NAEAAAAAAAIAAABwAAAA/P////////8MNQEAAAAAAAsAAAACAAAAgGsA
-AAAAAAApNQEAAAAAAAIAAAAfAQAA/P////////9CNQEAAAAAAAsAAAACAAAAIG0AAAAA
-AAB9NQEAAAAAAAIAAABwAAAA/P////////+aNQEAAAAAAAIAAABwAAAA/P////////+t
-NQEAAAAAAAsAAAACAAAAIG0AAAAAAADKNQEAAAAAAAIAAAAfAQAA/P////////9oNwEA
-AAAAAAIAAAAMAQAA/P////////+FOgEAAAAAAAIAAAA+AQAA/P////////8vPAEAAAAA
-AAIAAAA+AQAA/P////////9OPAEAAAAAAAIAAAB8AAAA/P////////9vPAEAAAAAAAIA
-AAB8AAAA/P////////+aPAEAAAAAAAIAAADAAAAA/P////////+6PAEAAAAAAAIAAADA
-AAAA/P/////////fPAEAAAAAAAsAAAABAAAAODwBAAAAAADqPAEAAAAAAAsAAAABAAAA
-NC4BAAAAAAD1PAEAAAAAAAsAAAABAAAAPzABAAAAAAAAPQEAAAAAAAsAAAABAAAAEy8B
-AAAAAAALPQEAAAAAAAsAAAABAAAAejABAAAAAAAWPQEAAAAAAAsAAAABAAAAezYBAAAA
-AABOPQEAAAAAAAsAAAACAAAAYHAAAAAAAAB+PQEAAAAAAAIAAAAfAQAA/P////////+U
-PQEAAAAAAAsAAAACAAAA4HEAAAAAAACgPQEAAAAAAAsAAAACAAAA5HEAAAAAAAC0PQEA
-AAAAAAIAAAAfAQAA/P/////////HPQEAAAAAAAsAAAACAAAAAHQAAAAAAAD1PQEAAAAA
-AAIAAAAfAQAA/P/////////mPgEAAAAAAAIAAAArAAAA/P////////9jPwEAAAAAAAIA
-AAArAAAA/P////////+8PwEAAAAAAAIAAAArAAAA/P////////8WQAEAAAAAAAIAAAAr
-AAAA/P////////8nQAEAAAAAAAIAAAArAAAA/P////////+UQAEAAAAAAAsAAAACAAAA
-WHwAAAAAAABvQgEAAAAAAAsAAAACAAAABHcAAAAAAACPQgEAAAAAAAsAAAACAAAAEHcA
-AAAAAAC4QgEAAAAAAAsAAAACAAAAMHcAAAAAAADhQgEAAAAAAAsAAAACAAAAYHcAAAAA
-AAAaQwEAAAAAAAIAAABwAAAA/P////////86QwEAAAAAAAIAAABwAAAA/P////////9b
-QwEAAAAAAAIAAABwAAAA/P////////+KQwEAAAAAAAIAAABwAAAA/P////////+uQwEA
-AAAAAAIAAABwAAAA/P/////////SQwEAAAAAAAIAAABwAAAA/P/////////2QwEAAAAA
-AAIAAABwAAAA/P////////8aRAEAAAAAAAIAAABwAAAA/P////////8+RAEAAAAAAAIA
-AABwAAAA/P////////9mRAEAAAAAAAIAAABwAAAA/P////////+ZRAEAAAAAAAIAAABw
-AAAA/P////////+2RAEAAAAAAAIAAABwAAAA/P////////8DRQEAAAAAAAIAAABwAAAA
-/P////////8gRQEAAAAAAAIAAABwAAAA/P////////89RQEAAAAAAAIAAABwAAAA/P//
-//////9aRQEAAAAAAAIAAABwAAAA/P////////+KRQEAAAAAAAIAAABwAAAA/P//////
-//+nRQEAAAAAAAIAAABwAAAA/P/////////ERQEAAAAAAAIAAABwAAAA/P/////////h
-RQEAAAAAAAIAAABwAAAA/P/////////+RQEAAAAAAAIAAABwAAAA/P////////8QRgEA
-AAAAAAsAAAACAAAAIHsAAAAAAABaRgEAAAAAAAIAAABwAAAA/P////////97RgEAAAAA
-AAIAAABwAAAA/P////////+KRgEAAAAAAAsAAAACAAAAAHcAAAAAAACoRgEAAAAAAAIA
-AAAfAQAA/P////////+/RgEAAAAAAAsAAAACAAAAEHcAAAAAAADdRgEAAAAAAAIAAAAf
-AQAA/P/////////0RgEAAAAAAAsAAAACAAAAMHcAAAAAAAASRwEAAAAAAAIAAAAfAQAA
-/P////////8pRwEAAAAAAAsAAAACAAAAYHcAAAAAAABHRwEAAAAAAAIAAAAfAQAA/P//
-//////9hRwEAAAAAAAsAAAACAAAAIHsAAAAAAACCRwEAAAAAAAIAAAAfAQAA/P//////
-///DSQEAAAAAAAIAAADWAAAA/P/////////WSQEAAAAAAAIAAADWAAAA/P////////9M
-SgEAAAAAAAIAAADWAAAA/P////////9fSgEAAAAAAAIAAADWAAAA/P////////+xSgEA
-AAAAAAIAAADWAAAA/P/////////fSgEAAAAAAAIAAADWAAAA/P/////////ySgEAAAAA
-AAIAAADWAAAA/P////////9ASwEAAAAAAAIAAADWAAAA/P////////+5UQEAAAAAAAIA
-AAB8AAAA/P/////////aUQEAAAAAAAIAAAB8AAAA/P////////8FUgEAAAAAAAIAAADA
-AAAA/P////////8lUgEAAAAAAAIAAADAAAAA/P////////9UUgEAAAAAAAsAAAABAAAA
-o1EBAAAAAABfUgEAAAAAAAsAAAABAAAAMD0BAAAAAABqUgEAAAAAAAsAAAABAAAAg0AB
-AAAAAAB1UgEAAAAAAAsAAAABAAAADz4BAAAAAACAUgEAAAAAAAsAAAABAAAAuUABAAAA
-AACLUgEAAAAAAAsAAAABAAAArEcBAAAAAADCUgEAAAAAAAsAAAACAAAAoHwAAAAAAADy
-UgEAAAAAAAIAAAAfAQAA/P////////8IUwEAAAAAAAsAAAACAAAAIH4AAAAAAAAUUwEA
-AAAAAAsAAAACAAAAJH4AAAAAAAAoUwEAAAAAAAIAAAAfAQAA/P////////8+UwEAAAAA
-AAsAAAACAAAAgIIAAAAAAABsUwEAAAAAAAIAAAAfAQAA/P////////9dVAEAAAAAAAIA
-AAArAAAA/P/////////aVAEAAAAAAAIAAAArAAAA/P////////8zVQEAAAAAAAIAAAAr
-AAAA/P////////+NVQEAAAAAAAIAAAArAAAA/P////////+eVQEAAAAAAAIAAAArAAAA
-/P////////9/VgEAAAAAAAsAAAACAAAAhIUAAAAAAACdVgEAAAAAAAsAAAACAAAAkIUA
-AAAAAADFVgEAAAAAAAsAAAACAAAAsIUAAAAAAADtVgEAAAAAAAsAAAACAAAA4IUAAAAA
-AAAoVwEAAAAAAAIAAABwAAAA/P////////9FVwEAAAAAAAIAAABwAAAA/P////////9V
-VwEAAAAAAAsAAAACAAAAgIgAAAAAAAB+VwEAAAAAAAsAAAACAAAAgIUAAAAAAACbVwEA
-AAAAAAIAAAAfAQAA/P////////+yVwEAAAAAAAsAAAACAAAAkIUAAAAAAADQVwEAAAAA
-AAIAAAAfAQAA/P/////////nVwEAAAAAAAsAAAACAAAAsIUAAAAAAAAFWAEAAAAAAAIA
-AAAfAQAA/P////////8cWAEAAAAAAAsAAAACAAAA4IUAAAAAAAA6WAEAAAAAAAIAAAAf
-AQAA/P////////9UWAEAAAAAAAsAAAACAAAAgIgAAAAAAAByWAEAAAAAAAIAAAAfAQAA
-/P////////+tWAEAAAAAAAsAAAACAAAAyIgAAAAAAAARYQEAAAAAAAIAAAB8AAAA/P//
-//////8yYQEAAAAAAAIAAAB8AAAA/P////////9dYQEAAAAAAAIAAADAAAAA/P//////
-//99YQEAAAAAAAIAAADAAAAA/P////////+iYQEAAAAAAAsAAAABAAAA+2ABAAAAAACt
-YQEAAAAAAAsAAAABAAAApFIBAAAAAAC4YQEAAAAAAAsAAAABAAAAnFgBAAAAAADDYQEA
-AAAAAAsAAAABAAAAhlMBAAAAAADOYQEAAAAAAAsAAAABAAAA+lUBAAAAAADZYQEAAAAA
-AAsAAAABAAAAcV8BAAAAAAAAAAAAAAAAAAEAAAABAAAATAYAAAAAAAAIAAAAAAAAAAEA
-AAABAAAA4QYAAAAAAAAQAAAAAAAAAAEAAAABAAAA4QYAAAAAAAAYAAAAAAAAAAEAAAAB
-AAAA4QYAAAAAAAAgAAAAAAAAAAEAAAABAAAA5wYAAAAAAAAoAAAAAAAAAAEAAAABAAAA
-4QYAAAAAAAAwAAAAAAAAAAEAAAABAAAAVQYAAAAAAAA4AAAAAAAAAAEAAAABAAAAYgYA
-AAAAAABAAAAAAAAAAAEAAAABAAAA5wYAAAAAAABIAAAAAAAAAAEAAAABAAAAaQYAAAAA
-AABQAAAAAAAAAAEAAAABAAAAcAYAAAAAAABYAAAAAAAAAAEAAAABAAAAoQYAAAAAAABg
-AAAAAAAAAAEAAAABAAAAgwYAAAAAAABoAAAAAAAAAAEAAAABAAAAlQYAAAAAAABwAAAA
-AAAAAAEAAAABAAAAmwYAAAAAAAB4AAAAAAAAAAEAAAABAAAAqQYAAAAAAABIAQAAAAAA
-AAEAAAADAAAAnwAAAAAAAABQAQAAAAAAAAEAAAADAAAAogAAAAAAAABwAQAAAAAAAAEA
-AAADAAAAqAAAAAAAAAB4AQAAAAAAAAEAAAADAAAAqwAAAAAAAACYAQAAAAAAAAEAAAAD
-AAAAugAAAAAAAACgAQAAAAAAAAEAAAADAAAAvQAAAAAAAADAAQAAAAAAAAEAAAADAAAA
-xQAAAAAAAADIAQAAAAAAAAEAAAADAAAAyAAAAAAAAADoAQAAAAAAAAEAAAADAAAA0AAA
-AAAAAADwAQAAAAAAAAEAAAADAAAA0wAAAAAAAAAQAgAAAAAAAAEAAAADAAAA3QAAAAAA
-AAAYAgAAAAAAAAEAAAADAAAA4AAAAAAAAAA4AgAAAAAAAAEAAAADAAAA6AAAAAAAAABA
-AgAAAAAAAAEAAAADAAAA6wAAAAAAAABgAgAAAAAAAAEAAAADAAAA9QAAAAAAAABoAgAA
-AAAAAAEAAAADAAAA+AAAAAAAAACIAgAAAAAAAAEAAAADAAAAAAEAAAAAAACQAgAAAAAA
-AAEAAAADAAAAAwEAAAAAAACwAgAAAAAAAAEAAAADAAAADgEAAAAAAAC4AgAAAAAAAAEA
-AAADAAAAEQEAAAAAAADYAgAAAAAAAAEAAAADAAAAGQEAAAAAAADgAgAAAAAAAAEAAAAD
-AAAAHAEAAAAAAAAAAwAAAAAAAAEAAAADAAAAJAEAAAAAAAAIAwAAAAAAAAEAAAADAAAA
-JwEAAAAAAAAoAwAAAAAAAAEAAAADAAAALwEAAAAAAAAwAwAAAAAAAAEAAAADAAAAMgEA
-AAAAAABQAwAAAAAAAAEAAAADAAAAOQEAAAAAAABYAwAAAAAAAAEAAAADAAAAPAEAAAAA
-AAB4AwAAAAAAAAEAAAADAAAAQwEAAAAAAACAAwAAAAAAAAEAAAADAAAARgEAAAAAAACg
-AwAAAAAAAAEAAAADAAAATQEAAAAAAACoAwAAAAAAAAEAAAADAAAAUAEAAAAAAADIAwAA
-AAAAAAEAAAADAAAAYgEAAAAAAADQAwAAAAAAAAEAAAADAAAAZQEAAAAAAADwAwAAAAAA
-AAEAAAADAAAAbgEAAAAAAAD4AwAAAAAAAAEAAAADAAAAcQEAAAAAAAAYBAAAAAAAAAEA
-AAADAAAAeAEAAAAAAAAgBAAAAAAAAAEAAAADAAAAewEAAAAAAABABAAAAAAAAAEAAAAD
-AAAAgQEAAAAAAABIBAAAAAAAAAEAAAADAAAAhAEAAAAAAABoBAAAAAAAAAEAAAADAAAA
-igEAAAAAAABwBAAAAAAAAAEAAAADAAAAjQEAAAAAAACQBAAAAAAAAAEAAAADAAAAlgEA
-AAAAAACYBAAAAAAAAAEAAAADAAAAmQEAAAAAAAC4BAAAAAAAAAEAAAADAAAApAEAAAAA
-AADABAAAAAAAAAEAAAADAAAApwEAAAAAAADgBAAAAAAAAAEAAAADAAAArwEAAAAAAADo
-BAAAAAAAAAEAAAADAAAAsgEAAAAAAAAIBQAAAAAAAAEAAAADAAAAuQEAAAAAAAAQBQAA
-AAAAAAEAAAADAAAAvAEAAAAAAAAwBQAAAAAAAAEAAAADAAAAywEAAAAAAAA4BQAAAAAA
-AAEAAAADAAAAzgEAAAAAAABYBQAAAAAAAAEAAAADAAAA1gEAAAAAAABgBQAAAAAAAAEA
-AAADAAAA2QEAAAAAAACABQAAAAAAAAEAAAADAAAA7AEAAAAAAACIBQAAAAAAAAEAAAAD
-AAAA7wEAAAAAAACoBQAAAAAAAAEAAAADAAAA9wEAAAAAAACwBQAAAAAAAAEAAAADAAAA
-+gEAAAAAAADQBQAAAAAAAAEAAAADAAAAAAIAAAAAAADYBQAAAAAAAAEAAAADAAAAAwIA
-AAAAAAD4BQAAAAAAAAEAAAADAAAADwIAAAAAAAAABgAAAAAAAAEAAAADAAAAEgIAAAAA
-AAAgBgAAAAAAAAEAAAADAAAAGgIAAAAAAAAoBgAAAAAAAAEAAAADAAAAHQIAAAAAAABI
-BgAAAAAAAAEAAAADAAAAJQIAAAAAAABQBgAAAAAAAAEAAAADAAAAKAIAAAAAAABwBgAA
-AAAAAAEAAAADAAAALwIAAAAAAAB4BgAAAAAAAAEAAAADAAAAMgIAAAAAAACYBgAAAAAA
-AAEAAAADAAAAPQIAAAAAAACgBgAAAAAAAAEAAAADAAAAQAIAAAAAAADABgAAAAAAAAEA
-AAADAAAASAIAAAAAAADIBgAAAAAAAAEAAAADAAAASwIAAAAAAADoBgAAAAAAAAEAAAAD
-AAAAUwIAAAAAAADwBgAAAAAAAAEAAAADAAAAVgIAAAAAAAAQBwAAAAAAAAEAAAADAAAA
-XQIAAAAAAAAYBwAAAAAAAAEAAAADAAAAYAIAAAAAAAA4BwAAAAAAAAEAAAADAAAAagIA
-AAAAAABABwAAAAAAAAEAAAADAAAAbQIAAAAAAABgBwAAAAAAAAEAAAADAAAAdgIAAAAA
-AABoBwAAAAAAAAEAAAADAAAAeQIAAAAAAACIBwAAAAAAAAEAAAADAAAAgwIAAAAAAACQ
-BwAAAAAAAAEAAAADAAAAhgIAAAAAAACwBwAAAAAAAAEAAAADAAAAjgIAAAAAAAC4BwAA
-AAAAAAEAAAADAAAAkQIAAAAAAADYBwAAAAAAAAEAAAADAAAAmQIAAAAAAADgBwAAAAAA
-AAEAAAADAAAAnAIAAAAAAAAACAAAAAAAAAEAAAADAAAAogIAAAAAAAAICAAAAAAAAAEA
-AAADAAAApQIAAAAAAAAoCAAAAAAAAAEAAAADAAAArwIAAAAAAAAwCAAAAAAAAAEAAAAD
-AAAAsgIAAAAAAABQCAAAAAAAAAEAAAADAAAAtwIAAAAAAABYCAAAAAAAAAEAAAADAAAA
-ugIAAAAAAAB4CAAAAAAAAAEAAAADAAAAwgIAAAAAAACACAAAAAAAAAEAAAADAAAAxQIA
-AAAAAACgCAAAAAAAAAEAAAADAAAAzAIAAAAAAACoCAAAAAAAAAEAAAADAAAAzwIAAAAA
-AADICAAAAAAAAAEAAAADAAAA1QIAAAAAAADQCAAAAAAAAAEAAAADAAAA2AIAAAAAAADw
-CAAAAAAAAAEAAAADAAAA3gIAAAAAAAD4CAAAAAAAAAEAAAADAAAA4QIAAAAAAAAYCQAA
-AAAAAAEAAAADAAAA6AIAAAAAAAAgCQAAAAAAAAEAAAADAAAA6wIAAAAAAABACQAAAAAA
-AAEAAAADAAAA8gIAAAAAAABICQAAAAAAAAEAAAADAAAA9QIAAAAAAABoCQAAAAAAAAEA
-AAADAAAA/AIAAAAAAABwCQAAAAAAAAEAAAADAAAA/wIAAAAAAACQCQAAAAAAAAEAAAAD
-AAAABgMAAAAAAACYCQAAAAAAAAEAAAADAAAACQMAAAAAAAC4CQAAAAAAAAEAAAADAAAA
-EAMAAAAAAADACQAAAAAAAAEAAAADAAAAEwMAAAAAAADgCQAAAAAAAAEAAAADAAAAGgMA
-AAAAAADoCQAAAAAAAAEAAAADAAAAHQMAAAAAAAAICgAAAAAAAAEAAAADAAAAKAMAAAAA
-AAAQCgAAAAAAAAEAAAADAAAAKwMAAAAAAAAwCgAAAAAAAAEAAAADAAAANwMAAAAAAAA4
-CgAAAAAAAAEAAAADAAAAOgMAAAAAAABYCgAAAAAAAAEAAAADAAAASQMAAAAAAABgCgAA
-AAAAAAEAAAADAAAATAMAAAAAAACACgAAAAAAAAEAAAADAAAAXAMAAAAAAACICgAAAAAA
-AAEAAAADAAAAXwMAAAAAAACoCgAAAAAAAAEAAAADAAAAZgMAAAAAAACwCgAAAAAAAAEA
-AAADAAAAaQMAAAAAAADQCgAAAAAAAAEAAAADAAAAcAMAAAAAAADYCgAAAAAAAAEAAAAD
-AAAAcwMAAAAAAAD4CgAAAAAAAAEAAAADAAAAewMAAAAAAAAACwAAAAAAAAEAAAADAAAA
-fgMAAAAAAAAgCwAAAAAAAAEAAAADAAAAjAMAAAAAAAAoCwAAAAAAAAEAAAADAAAAjwMA
-AAAAAABICwAAAAAAAAEAAAADAAAAmQMAAAAAAABQCwAAAAAAAAEAAAADAAAAnAMAAAAA
-AABwCwAAAAAAAAEAAAADAAAApwMAAAAAAAB4CwAAAAAAAAEAAAADAAAAqgMAAAAAAACY
-CwAAAAAAAAEAAAADAAAAsAMAAAAAAACgCwAAAAAAAAEAAAADAAAAswMAAAAAAADACwAA
-AAAAAAEAAAADAAAAvQMAAAAAAADICwAAAAAAAAEAAAADAAAAwAMAAAAAAADoCwAAAAAA
-AAEAAAADAAAAyQMAAAAAAADwCwAAAAAAAAEAAAADAAAAzAMAAAAAAAAQDAAAAAAAAAEA
-AAADAAAA0wMAAAAAAAAYDAAAAAAAAAEAAAADAAAA1gMAAAAAAAA4DAAAAAAAAAEAAAAD
-AAAA3QMAAAAAAABADAAAAAAAAAEAAAADAAAA4AMAAAAAAABgDAAAAAAAAAEAAAADAAAA
-6AMAAAAAAABoDAAAAAAAAAEAAAADAAAA6wMAAAAAAACIDAAAAAAAAAEAAAADAAAA9wMA
-AAAAAACQDAAAAAAAAAEAAAADAAAA+gMAAAAAAACwDAAAAAAAAAEAAAADAAAABgQAAAAA
-AAC4DAAAAAAAAAEAAAADAAAACQQAAAAAAADYDAAAAAAAAAEAAAADAAAAEAQAAAAAAADg
-DAAAAAAAAAEAAAADAAAAEwQAAAAAAAAADQAAAAAAAAEAAAADAAAAGAQAAAAAAAAIDQAA
-AAAAAAEAAAADAAAAGwQAAAAAAAAoDQAAAAAAAAEAAAADAAAAJAQAAAAAAAAwDQAAAAAA
-AAEAAAADAAAAJwQAAAAAAABQDQAAAAAAAAEAAAADAAAALgQAAAAAAABYDQAAAAAAAAEA
-AAADAAAAMQQAAAAAAAB4DQAAAAAAAAEAAAADAAAANgQAAAAAAACADQAAAAAAAAEAAAAD
-AAAAOQQAAAAAAACgDQAAAAAAAAEAAAADAAAARQQAAAAAAACoDQAAAAAAAAEAAAADAAAA
-SAQAAAAAAADIDQAAAAAAAAEAAAADAAAATwQAAAAAAADQDQAAAAAAAAEAAAADAAAAUgQA
-AAAAAADwDQAAAAAAAAEAAAADAAAAWwQAAAAAAAD4DQAAAAAAAAEAAAADAAAAXgQAAAAA
-AAAYDgAAAAAAAAEAAAADAAAAagQAAAAAAAAgDgAAAAAAAAEAAAADAAAAbQQAAAAAAABA
-DgAAAAAAAAEAAAADAAAAcwQAAAAAAABIDgAAAAAAAAEAAAADAAAAdgQAAAAAAABoDgAA
-AAAAAAEAAAADAAAAfgQAAAAAAABwDgAAAAAAAAEAAAADAAAAgQQAAAAAAACQDgAAAAAA
-AAEAAAADAAAAiAQAAAAAAACYDgAAAAAAAAEAAAADAAAAiwQAAAAAAAC4DgAAAAAAAAEA
-AAADAAAAmAQAAAAAAADADgAAAAAAAAEAAAADAAAAmwQAAAAAAADgDgAAAAAAAAEAAAAD
-AAAApQQAAAAAAADoDgAAAAAAAAEAAAADAAAAqAQAAAAAAAAIDwAAAAAAAAEAAAADAAAA
-uAQAAAAAAAAQDwAAAAAAAAEAAAADAAAAuwQAAAAAAAAwDwAAAAAAAAEAAAADAAAAxAQA
-AAAAAAA4DwAAAAAAAAEAAAADAAAAxwQAAAAAAABYDwAAAAAAAAEAAAADAAAA1AQAAAAA
-AABgDwAAAAAAAAEAAAADAAAA1wQAAAAAAACADwAAAAAAAAEAAAADAAAA3QQAAAAAAACI
-DwAAAAAAAAEAAAADAAAA4AQAAAAAAACoDwAAAAAAAAEAAAADAAAA5wQAAAAAAACwDwAA
-AAAAAAEAAAADAAAA6gQAAAAAAADQDwAAAAAAAAEAAAADAAAA9gQAAAAAAADYDwAAAAAA
-AAEAAAADAAAA+QQAAAAAAAD4DwAAAAAAAAEAAAADAAAA/wQAAAAAAAAAEAAAAAAAAAEA
-AAADAAAAAgUAAAAAAAAgEAAAAAAAAAEAAAADAAAACQUAAAAAAAAoEAAAAAAAAAEAAAAD
-AAAADAUAAAAAAABIEAAAAAAAAAEAAAADAAAAFQUAAAAAAABQEAAAAAAAAAEAAAADAAAA
-GAUAAAAAAABwEAAAAAAAAAEAAAADAAAAKgUAAAAAAAB4EAAAAAAAAAEAAAADAAAALQUA
-AAAAAACYEAAAAAAAAAEAAAADAAAANQUAAAAAAACgEAAAAAAAAAEAAAADAAAAOAUAAAAA
-AADAEAAAAAAAAAEAAAADAAAAPwUAAAAAAADIEAAAAAAAAAEAAAADAAAAQgUAAAAAAADo
-EAAAAAAAAAEAAAADAAAASgUAAAAAAADwEAAAAAAAAAEAAAADAAAATQUAAAAAAAAQEQAA
-AAAAAAEAAAADAAAAYgUAAAAAAAAYEQAAAAAAAAEAAAADAAAAZQUAAAAAAAA4EQAAAAAA
-AAEAAAADAAAAdAUAAAAAAABAEQAAAAAAAAEAAAADAAAAdwUAAAAAAABgEQAAAAAAAAEA
-AAADAAAAhQUAAAAAAABoEQAAAAAAAAEAAAADAAAAiAUAAAAAAACIEQAAAAAAAAEAAAAD
-AAAAkAUAAAAAAACQEQAAAAAAAAEAAAADAAAAkwUAAAAAAACwEQAAAAAAAAEAAAADAAAA
-ngUAAAAAAAC4EQAAAAAAAAEAAAADAAAAoQUAAAAAAADYEQAAAAAAAAEAAAADAAAAqwUA
-AAAAAADgEQAAAAAAAAEAAAADAAAArgUAAAAAAAAAEgAAAAAAAAEAAAADAAAAtwUAAAAA
-AAAIEgAAAAAAAAEAAAADAAAAugUAAAAAAAAoEgAAAAAAAAEAAAADAAAAwAUAAAAAAAAw
-EgAAAAAAAAEAAAADAAAAwwUAAAAAAAA4GAAAAAAAAAEAAAAFAAAAgAEAAAAAAABAGAAA
-AAAAAAEAAAAFAAAAkAEAAAAAAABIGAAAAAAAAAEAAAAFAAAAoAEAAAAAAABQGAAAAAAA
-AAEAAAAFAAAA4AEAAAAAAABYGAAAAAAAAAEAAAAFAAAA8AEAAAAAAABgGAAAAAAAAAEA
-AAAFAAAAAAIAAAAAAABoGAAAAAAAAAEAAAAFAAAAEAIAAAAAAABwGAAAAAAAAAEAAAAF
-AAAAIAIAAAAAAAB4GAAAAAAAAAEAAAAFAAAAYAIAAAAAAACAGAAAAAAAAAEAAAAFAAAA
-cAIAAAAAAACgGAAAAAAAAAEAAAAFAAAAgAEAAAAAAACoGAAAAAAAAAEAAAAFAAAAkAEA
-AAAAAACwGAAAAAAAAAEAAAAFAAAAsAEAAAAAAAC4GAAAAAAAAAEAAAAFAAAA4AEAAAAA
-AADAGAAAAAAAAAEAAAAFAAAA8AEAAAAAAADIGAAAAAAAAAEAAAAFAAAAAAIAAAAAAADQ
-GAAAAAAAAAEAAAAFAAAAEAIAAAAAAADYGAAAAAAAAAEAAAAFAAAAMAIAAAAAAADgGAAA
-AAAAAAEAAAAFAAAAcAIAAAAAAAAIGQAAAAAAAAEAAAAFAAAAgAEAAAAAAAAQGQAAAAAA
-AAEAAAAFAAAAkAEAAAAAAAAYGQAAAAAAAAEAAAAFAAAAoAEAAAAAAAAgGQAAAAAAAAEA
-AAAFAAAA4AEAAAAAAAAoGQAAAAAAAAEAAAAFAAAA8AEAAAAAAAAwGQAAAAAAAAEAAAAF
-AAAAAAIAAAAAAAA4GQAAAAAAAAEAAAAFAAAAEAIAAAAAAABAGQAAAAAAAAEAAAAFAAAA
-IAIAAAAAAABIGQAAAAAAAAEAAAAFAAAAcAIAAAAAAABwGQAAAAAAAAEAAAAFAAAAgAEA
-AAAAAAB4GQAAAAAAAAEAAAAFAAAAkAEAAAAAAACAGQAAAAAAAAEAAAAFAAAAoAEAAAAA
-AACIGQAAAAAAAAEAAAAFAAAA4AEAAAAAAACQGQAAAAAAAAEAAAAFAAAA8AEAAAAAAACY
-GQAAAAAAAAEAAAAFAAAAAAIAAAAAAACgGQAAAAAAAAEAAAAFAAAAEAIAAAAAAACoGQAA
-AAAAAAEAAAAFAAAAIAIAAAAAAACwGQAAAAAAAAEAAAAFAAAAcAIAAAAAAADYGQAAAAAA
-AAEAAAAFAAAAgAEAAAAAAADgGQAAAAAAAAEAAAAFAAAAkAEAAAAAAADoGQAAAAAAAAEA
-AAAFAAAAoAEAAAAAAADwGQAAAAAAAAEAAAAFAAAA4AEAAAAAAAD4GQAAAAAAAAEAAAAF
-AAAAEAIAAAAAAAAAGgAAAAAAAAEAAAAFAAAAIAIAAAAAAAAIGgAAAAAAAAEAAAAFAAAA
-YAIAAAAAAAAQGgAAAAAAAAEAAAAFAAAAcAIAAAAAAAAwGgAAAAAAAAEAAAAFAAAAaAEA
-AAAAAABAGgAAAAAAAAEAAAAFAAAAgAEAAAAAAABIGgAAAAAAAAEAAAAFAAAAkAEAAAAA
-AABQGgAAAAAAAAEAAAAFAAAAoAEAAAAAAABYGgAAAAAAAAEAAAAFAAAA4AEAAAAAAABg
-GgAAAAAAAAEAAAAFAAAA8AEAAAAAAABoGgAAAAAAAAEAAAAFAAAAAAIAAAAAAABwGgAA
-AAAAAAEAAAAFAAAAEAIAAAAAAAB4GgAAAAAAAAEAAAAFAAAAIAIAAAAAAACAGgAAAAAA
-AAEAAAAFAAAAYAIAAAAAAACIGgAAAAAAAAEAAAAFAAAAcAIAAAAAAACoGgAAAAAAAAEA
-AAAFAAAAgAEAAAAAAACwGgAAAAAAAAEAAAAFAAAAkAEAAAAAAAC4GgAAAAAAAAEAAAAF
-AAAAoAEAAAAAAADAGgAAAAAAAAEAAAAFAAAA4AEAAAAAAADIGgAAAAAAAAEAAAAFAAAA
-8AEAAAAAAADQGgAAAAAAAAEAAAAFAAAAAAIAAAAAAADYGgAAAAAAAAEAAAAFAAAAIAIA
-AAAAAADgGgAAAAAAAAEAAAAFAAAAcAIAAAAAAAAQGwAAAAAAAAEAAAAFAAAAgAEAAAAA
-AAAYGwAAAAAAAAEAAAAFAAAAwAEAAAAAAAAgGwAAAAAAAAEAAAAFAAAA4AEAAAAAAAAo
-GwAAAAAAAAEAAAAFAAAA8AEAAAAAAAAwGwAAAAAAAAEAAAAFAAAAAAIAAAAAAAA4GwAA
-AAAAAAEAAAAFAAAAQAIAAAAAAABAGwAAAAAAAAEAAAAFAAAAcAIAAAAAAAB4GwAAAAAA
-AAEAAAAFAAAAgAEAAAAAAACAGwAAAAAAAAEAAAAFAAAAoAEAAAAAAACIGwAAAAAAAAEA
-AAAFAAAA4AEAAAAAAACQGwAAAAAAAAEAAAAFAAAAIAIAAAAAAACYGwAAAAAAAAEAAAAF
-AAAAcAIAAAAAAADgGwAAAAAAAAEAAAAFAAAAgAEAAAAAAADoGwAAAAAAAAEAAAAFAAAA
-wAEAAAAAAADwGwAAAAAAAAEAAAAFAAAA4AEAAAAAAAD4GwAAAAAAAAEAAAAFAAAA8AEA
-AAAAAAAAHAAAAAAAAAEAAAAFAAAAAAIAAAAAAAAIHAAAAAAAAAEAAAAFAAAAEAIAAAAA
-AAAQHAAAAAAAAAEAAAAFAAAAQAIAAAAAAAAYHAAAAAAAAAEAAAAFAAAAcAIAAAAAAABI
-HAAAAAAAAAEAAAAFAAAAgAEAAAAAAABQHAAAAAAAAAEAAAAFAAAAoAEAAAAAAABYHAAA
-AAAAAAEAAAAFAAAA4AEAAAAAAABgHAAAAAAAAAEAAAAFAAAAEAIAAAAAAABoHAAAAAAA
-AAEAAAAFAAAAIAIAAAAAAABwHAAAAAAAAAEAAAAFAAAAcAIAAAAAAAC4HAAAAAAAAAEA
-AAAFAAAAgAEAAAAAAADAHAAAAAAAAAEAAAAFAAAAkAEAAAAAAADIHAAAAAAAAAEAAAAF
-AAAAsAEAAAAAAADQHAAAAAAAAAEAAAAFAAAA4AEAAAAAAADYHAAAAAAAAAEAAAAFAAAA
-8AEAAAAAAADgHAAAAAAAAAEAAAAFAAAAAAIAAAAAAADoHAAAAAAAAAEAAAAFAAAAEAIA
-AAAAAADwHAAAAAAAAAEAAAAFAAAAMAIAAAAAAAD4HAAAAAAAAAEAAAAFAAAAcAIAAAAA
-AAAgHQAAAAAAAAEAAAAFAAAAgAEAAAAAAAAoHQAAAAAAAAEAAAAFAAAAkAEAAAAAAAAw
-HQAAAAAAAAEAAAAFAAAAsAEAAAAAAAA4HQAAAAAAAAEAAAAFAAAA4AEAAAAAAABAHQAA
-AAAAAAEAAAAFAAAA8AEAAAAAAABIHQAAAAAAAAEAAAAFAAAAAAIAAAAAAABQHQAAAAAA
-AAEAAAAFAAAAEAIAAAAAAABYHQAAAAAAAAEAAAAFAAAAMAIAAAAAAABgHQAAAAAAAAEA
-AAAFAAAAcAIAAAAAAACIHQAAAAAAAAEAAAAFAAAAgAEAAAAAAACQHQAAAAAAAAEAAAAF
-AAAAkAEAAAAAAACYHQAAAAAAAAEAAAAFAAAAoAEAAAAAAACgHQAAAAAAAAEAAAAFAAAA
-4AEAAAAAAACoHQAAAAAAAAEAAAAFAAAA8AEAAAAAAACwHQAAAAAAAAEAAAAFAAAAAAIA
-AAAAAAC4HQAAAAAAAAEAAAAFAAAAEAIAAAAAAADAHQAAAAAAAAEAAAAFAAAAMAIAAAAA
-AADIHQAAAAAAAAEAAAAFAAAAcAIAAAAAAADwHQAAAAAAAAEAAAAFAAAAgAEAAAAAAAD4
-HQAAAAAAAAEAAAAFAAAAkAEAAAAAAAAAHgAAAAAAAAEAAAAFAAAAoAEAAAAAAAAIHgAA
-AAAAAAEAAAAFAAAA4AEAAAAAAAAQHgAAAAAAAAEAAAAFAAAA8AEAAAAAAAAYHgAAAAAA
-AAEAAAAFAAAAAAIAAAAAAAAgHgAAAAAAAAEAAAAFAAAAEAIAAAAAAAAoHgAAAAAAAAEA
-AAAFAAAAMAIAAAAAAAAwHgAAAAAAAAEAAAAFAAAAcAIAAAAAAABYHgAAAAAAAAEAAAAF
-AAAAgAEAAAAAAABgHgAAAAAAAAEAAAAFAAAAkAEAAAAAAABoHgAAAAAAAAEAAAAFAAAA
-sAEAAAAAAABwHgAAAAAAAAEAAAAFAAAA4AEAAAAAAAB4HgAAAAAAAAEAAAAFAAAAEAIA
-AAAAAACAHgAAAAAAAAEAAAAFAAAAMAIAAAAAAACIHgAAAAAAAAEAAAAFAAAAcAIAAAAA
-AACwHgAAAAAAAAEAAAAFAAAAaAEAAAAAAADAHgAAAAAAAAEAAAAFAAAAgAEAAAAAAADI
-HgAAAAAAAAEAAAAFAAAAkAEAAAAAAADQHgAAAAAAAAEAAAAFAAAAsAEAAAAAAADYHgAA
-AAAAAAEAAAAFAAAA4AEAAAAAAADgHgAAAAAAAAEAAAAFAAAA8AEAAAAAAADoHgAAAAAA
-AAEAAAAFAAAAAAIAAAAAAADwHgAAAAAAAAEAAAAFAAAAEAIAAAAAAAD4HgAAAAAAAAEA
-AAAFAAAAMAIAAAAAAAAAHwAAAAAAAAEAAAAFAAAAcAIAAAAAAAAoHwAAAAAAAAEAAAAF
-AAAAgAEAAAAAAAAwHwAAAAAAAAEAAAAFAAAAkAEAAAAAAAA4HwAAAAAAAAEAAAAFAAAA
-sAEAAAAAAABAHwAAAAAAAAEAAAAFAAAA4AEAAAAAAABIHwAAAAAAAAEAAAAFAAAA8AEA
-AAAAAABQHwAAAAAAAAEAAAAFAAAAAAIAAAAAAABYHwAAAAAAAAEAAAAFAAAAMAIAAAAA
-AABgHwAAAAAAAAEAAAAFAAAAcAIAAAAAAACQHwAAAAAAAAEAAAAFAAAAgAEAAAAAAACY
-HwAAAAAAAAEAAAAFAAAA0AEAAAAAAACgHwAAAAAAAAEAAAAFAAAA4AEAAAAAAACoHwAA
-AAAAAAEAAAAFAAAA8AEAAAAAAACwHwAAAAAAAAEAAAAFAAAAAAIAAAAAAAC4HwAAAAAA
-AAEAAAAFAAAAUAIAAAAAAADAHwAAAAAAAAEAAAAFAAAAcAIAAAAAAAD4HwAAAAAAAAEA
-AAAFAAAAgAEAAAAAAAAAIAAAAAAAAAEAAAAFAAAA0AEAAAAAAAAIIAAAAAAAAAEAAAAF
-AAAA4AEAAAAAAAAQIAAAAAAAAAEAAAAFAAAAUAIAAAAAAAAYIAAAAAAAAAEAAAAFAAAA
-cAIAAAAAAABgIAAAAAAAAAEAAAAFAAAAgAEAAAAAAABoIAAAAAAAAAEAAAAFAAAA0AEA
-AAAAAABwIAAAAAAAAAEAAAAFAAAA4AEAAAAAAAB4IAAAAAAAAAEAAAAFAAAA8AEAAAAA
-AACAIAAAAAAAAAEAAAAFAAAAAAIAAAAAAACIIAAAAAAAAAEAAAAFAAAAEAIAAAAAAACQ
-IAAAAAAAAAEAAAAFAAAAUAIAAAAAAACYIAAAAAAAAAEAAAAFAAAAcAIAAAAAAADIIAAA
-AAAAAAEAAAAFAAAAgAEAAAAAAADQIAAAAAAAAAEAAAAFAAAA0AEAAAAAAADYIAAAAAAA
-AAEAAAAFAAAA4AEAAAAAAADgIAAAAAAAAAEAAAAFAAAAEAIAAAAAAADoIAAAAAAAAAEA
-AAAFAAAAUAIAAAAAAADwIAAAAAAAAAEAAAAFAAAAcAIAAAAAAAAoIQAAAAAAAAEAAAAF
-AAAAgAIAAAAAAAA4IQAAAAAAAAEAAAAFAAAAigIAAAAAAABIIQAAAAAAAAEAAAAFAAAA
-oAIAAAAAAABoIQAAAAAAAAEAAAABAAAA0TkAAAAAAABwIQAAAAAAAAEAAAABAAAAszkA
-AAAAAAB4IQAAAAAAAAEAAAABAAAAxTkAAAAAAACAIQAAAAAAAAEAAAABAAAA0TkAAAAA
-AACIIQAAAAAAAAEAAAABAAAAuTkAAAAAAACQIQAAAAAAAAEAAAABAAAA0TkAAAAAAACY
-IQAAAAAAAAEAAAABAAAA0TkAAAAAAACgIQAAAAAAAAEAAAABAAAA0TkAAAAAAACoIQAA
-AAAAAAEAAAABAAAAvzkAAAAAAACwIQAAAAAAAAEAAAABAAAA0TkAAAAAAAC4IQAAAAAA
-AAEAAAABAAAA0TkAAAAAAADAIQAAAAAAAAEAAAABAAAA0TkAAAAAAADIIQAAAAAAAAEA
-AAABAAAA0TkAAAAAAADQIQAAAAAAAAEAAAABAAAA0TkAAAAAAADYIQAAAAAAAAEAAAAB
-AAAA0TkAAAAAAADgIQAAAAAAAAEAAAABAAAA0TkAAAAAAADoIQAAAAAAAAEAAAABAAAA
-0TkAAAAAAADwIQAAAAAAAAEAAAABAAAA0TkAAAAAAAD4IQAAAAAAAAEAAAABAAAA0TkA
-AAAAAAAAIgAAAAAAAAEAAAABAAAA0TkAAAAAAAAIIgAAAAAAAAEAAAABAAAA0TkAAAAA
-AAAQIgAAAAAAAAEAAAABAAAA0TkAAAAAAAAYIgAAAAAAAAEAAAABAAAA0TkAAAAAAAAg
-IgAAAAAAAAEAAAABAAAA0TkAAAAAAAAoIgAAAAAAAAEAAAABAAAA0TkAAAAAAAAwIgAA
-AAAAAAEAAAABAAAA0TkAAAAAAAA4IgAAAAAAAAEAAAABAAAA0TkAAAAAAABAIgAAAAAA
-AAEAAAABAAAA0TkAAAAAAABIIgAAAAAAAAEAAAABAAAA0TkAAAAAAABQIgAAAAAAAAEA
-AAABAAAA0TkAAAAAAABYIgAAAAAAAAEAAAABAAAA0TkAAAAAAABgIgAAAAAAAAEAAAAB
-AAAA0TkAAAAAAABoIgAAAAAAAAEAAAABAAAAyzkAAAAAAABwIgAAAAAAAAEAAAABAAAA
-sToAAAAAAAB4IgAAAAAAAAEAAAABAAAAsToAAAAAAACAIgAAAAAAAAEAAAABAAAA1DoA
-AAAAAACIIgAAAAAAAAEAAAABAAAAuDoAAAAAAACQIgAAAAAAAAEAAAABAAAA1DoAAAAA
-AACYIgAAAAAAAAEAAAABAAAA1DoAAAAAAACgIgAAAAAAAAEAAAABAAAA1DoAAAAAAACo
-IgAAAAAAAAEAAAABAAAA1DoAAAAAAACwIgAAAAAAAAEAAAABAAAAvzoAAAAAAAC4IgAA
-AAAAAAEAAAABAAAA1DoAAAAAAADAIgAAAAAAAAEAAAABAAAAxjoAAAAAAADIIgAAAAAA
-AAEAAAABAAAAzToAAAAAAAAIIwAAAAAAAAEAAAACAAAA0CIAAAAAAAAQIwAAAAAAAAEA
-AAACAAAA4CIAAAAAAABIIwAAAAAAAAEAAAACAAAAACMAAAAAAACYJAAAAAAAAAEAAAD4
-AAAAAAAAAAAAAACgJAAAAAAAAAEAAABcAAAAAAAAAAAAAACoJAAAAAAAAAEAAAC0AAAA
-AAAAAAAAAACwJAAAAAAAAAEAAACmAAAAAAAAAAAAAAC4JAAAAAAAAAEAAADFAAAAAAAA
-AAAAAADAJAAAAAAAAAEAAABNAAAAAAAAAAAAAADIJAAAAAAAAAEAAADQAAAAAAAAAAAA
-AADQJAAAAAAAAAEAAABeAQAAAAAAAAAAAADYJAAAAAAAAAEAAAA1AQAAAAAAAAAAAADg
-JAAAAAAAAAEAAACxAAAAAAAAAAAAAADoJAAAAAAAAAEAAAA3AAAAAAAAAAAAAADwJAAA
-AAAAAAEAAAB9AAAAAAAAAAAAAAD4JAAAAAAAAAEAAABQAAAAAAAAAAAAAAAAJQAAAAAA
-AAEAAAAeAAAAAAAAAAAAAAAIJQAAAAAAAAEAAABPAQAAAAAAAAAAAAAQJQAAAAAAAAEA
-AAB3AQAAAAAAAAAAAAAYJQAAAAAAAAEAAAAqAAAAAAAAAAAAAAAgJQAAAAAAAAEAAACE
-AAAAAAAAAAAAAAAoJQAAAAAAAAEAAADwAAAAAAAAAAAAAAAwJQAAAAAAAAEAAAAyAQAA
-AAAAAAAAAAA4JQAAAAAAAAEAAAAmAAAAAAAAAAAAAABAJQAAAAAAAAEAAAA1AAAAAAAA
-AAAAAABIJQAAAAAAAAEAAABgAAAAAAAAAAAAAABQJQAAAAAAAAEAAABkAQAAAAAAAAAA
-AABYJQAAAAAAAAEAAAAFAQAAAAAAAAAAAABgJQAAAAAAAAEAAACnAAAAAAAAAAAAAABo
-JQAAAAAAAAEAAABHAQAAAAAAAAAAAABwJQAAAAAAAAEAAABKAQAAAAAAAAAAAAB4JQAA
-AAAAAAEAAAD1AAAAAAAAAAAAAACAJQAAAAAAAAEAAADOAAAAAAAAAAAAAACIJQAAAAAA
-AAEAAAAmAQAAAAAAAAAAAACQJQAAAAAAAAEAAACHAAAAAAAAAAAAAACYJQAAAAAAAAEA
-AABZAQAAAAAAAAAAAACgJQAAAAAAAAEAAACyAAAAAAAAAAAAAACoJQAAAAAAAAEAAACp
-AAAAAAAAAAAAAACwJQAAAAAAAAEAAAB+AAAAAAAAAAAAAAC4JQAAAAAAAAEAAAChAAAA
-AAAAAAAAAADAJQAAAAAAAAEAAABOAAAAAAAAAAAAAADIJQAAAAAAAAEAAAC6AAAAAAAA
-AAAAAADQJQAAAAAAAAEAAAAiAQAAAAAAAAAAAADYJQAAAAAAAAEAAAD6AAAAAAAAAAAA
-AADgJQAAAAAAAAEAAACbAAAAAAAAAAAAAADoJQAAAAAAAAEAAAAeAQAAAAAAAAAAAADw
-JQAAAAAAAAEAAADXAAAAAAAAAAAAAAD4JQAAAAAAAAEAAAAXAQAAAAAAAAAAAAAAJgAA
-AAAAAAEAAAAvAAAAAAAAAAAAAAAIJgAAAAAAAAEAAACoAAAAAAAAAAAAAAAQJgAAAAAA
-AAEAAABCAQAAAAAAAAAAAAAYJgAAAAAAAAEAAAAIAQAAAAAAAAAAAAAgJgAAAAAAAAEA
-AAAQAQAAAAAAAAAAAAAoJgAAAAAAAAEAAAA2AAAAAAAAAAAAAAAwJgAAAAAAAAEAAABs
-AAAAAAAAAAAAAAA4JgAAAAAAAAEAAAAuAQAAAAAAAAAAAABAJgAAAAAAAAEAAADUAAAA
-AAAAAAAAAABIJgAAAAAAAAEAAABIAAAAAAAAAAAAAABQJgAAAAAAAAEAAAAxAAAAAAAA
-AAAAAABYJgAAAAAAAAEAAACDAAAAAAAAAAAAAABgJgAAAAAAAAEAAAALAAAAAAAAAAAA
-AABoJgAAAAAAAAEAAADiAAAAAAAAAAAAAABwJgAAAAAAAAEAAAAnAQAAAAAAAAAAAAB4
-JgAAAAAAAAEAAABlAQAAAAAAAAAAAACAJgAAAAAAAAEAAABhAAAAAAAAAAAAAACIJgAA
-AAAAAAEAAAANAAAAAAAAAAAAAACQJgAAAAAAAAEAAABLAQAAAAAAAAAAAACYJgAAAAAA
-AAEAAAAEAQAAAAAAAAAAAACgJgAAAAAAAAEAAABVAQAAAAAAAAAAAACoJgAAAAAAAAEA
-AAA9AAAAAAAAAAAAAACwJgAAAAAAAAEAAAAZAQAAAAAAAAAAAAC4JgAAAAAAAAEAAAAT
-AAAAAAAAAAAAAADAJgAAAAAAAAEAAACwAAAAAAAAAAAAAADIJgAAAAAAAAEAAABnAAAA
-AAAAAAAAAADQJgAAAAAAAAEAAADkAAAAAAAAAAAAAADYJgAAAAAAAAEAAADmAAAAAAAA
-AAAAAADgJgAAAAAAAAEAAAC/AAAAAAAAAAAAAADoJgAAAAAAAAEAAABGAQAAAAAAAAAA
-AADwJgAAAAAAAAEAAACuAAAAAAAAAAAAAAD4JgAAAAAAAAEAAABjAQAAAAAAAAAAAAAA
-JwAAAAAAAAEAAAAPAAAAAAAAAAAAAAAIJwAAAAAAAAEAAAA3AQAAAAAAAAAAAAAQJwAA
-AAAAAAEAAACkAAAAAAAAAAAAAAAYJwAAAAAAAAEAAAAOAQAAAAAAAAAAAAAgJwAAAAAA
-AAEAAAD3AAAAAAAAAAAAAAAoJwAAAAAAAAEAAACXAAAAAAAAAAAAAAAwJwAAAAAAAAEA
-AAA4AQAAAAAAAAAAAAA4JwAAAAAAAAEAAAABAAAAQ1MAAAAAAABAJwAAAAAAAAEAAAAt
-AQAAAAAAAAAAAABIJwAAAAAAAAEAAAB2AQAAAAAAAAAAAABQJwAAAAAAAAEAAAAWAQAA
-AAAAAAAAAABgJwAAAAAAAAEAAABCAQAAAAAAAAAAAABoJwAAAAAAAAEAAAAIAQAAAAAA
-AAAAAABwJwAAAAAAAAEAAAAQAQAAAAAAAAAAAAB4JwAAAAAAAAEAAAA2AAAAAAAAAAAA
-AACAJwAAAAAAAAEAAABsAAAAAAAAAAAAAAD4MwAAAAAAAAEAAAAvAQAAAAAAAAAAAAAA
-NAAAAAAAAAEAAABMAQAAAAAAAAAAAAAINAAAAAAAAAEAAABAAQAAAAAAAAAAAAAQNAAA
-AAAAAAEAAABiAQAAAAAAAAAAAAAYNAAAAAAAAAEAAABuAAAAAAAAAAAAAAAgNAAAAAAA
-AAEAAACJAAAAAAAAAAAAAAAoNAAAAAAAAAEAAABkAAAAAAAAAAAAAAAwNAAAAAAAAAEA
-AAAwAAAAAAAAAAAAAAA4NAAAAAAAAAEAAABZAAAAAAAAAAAAAABANAAAAAAAAAEAAABa
-AAAAAAAAAAAAAABINAAAAAAAAAEAAAA0AAAAAAAAAAAAAABQNAAAAAAAAAEAAABSAQAA
-AAAAAAAAAABYNAAAAAAAAAEAAAD5AAAAAAAAAAAAAABgNAAAAAAAAAEAAABtAQAAAAAA
-AAAAAABoNAAAAAAAAAEAAAB5AAAAAAAAAAAAAABwNAAAAAAAAAEAAABcAQAAAAAAAAAA
-AAB4NAAAAAAAAAEAAADtAAAAAAAAAAAAAACANAAAAAAAAAEAAACfAAAAAAAAAAAAAACI
-NAAAAAAAAAEAAACsAAAAAAAAAAAAAACQNAAAAAAAAAEAAAATAQAAAAAAAAAAAACYNAAA
-AAAAAAEAAAAgAAAAAAAAAAAAAACgNAAAAAAAAAEAAADzAAAAAAAAAAAAAACoNAAAAAAA
-AAEAAAAYAAAAAAAAAAAAAACwNAAAAAAAAAEAAABOAQAAAAAAAAAAAAC4NAAAAAAAAAEA
-AAAdAAAAAAAAAAAAAADANAAAAAAAAAEAAAAnAAAAAAAAAAAAAADINAAAAAAAAAEAAACg
-AAAAAAAAAAAAAADQNAAAAAAAAAEAAABhAQAAAAAAAAAAAADYNAAAAAAAAAEAAABQAQAA
-AAAAAAAAAADgNAAAAAAAAAEAAABdAQAAAAAAAAAAAADoNAAAAAAAAAEAAAAjAQAAAAAA
-AAAAAADwNAAAAAAAAAEAAADfAAAAAAAAAAAAAAD4NAAAAAAAAAEAAADqAAAAAAAAAAAA
-AAAANQAAAAAAAAEAAADaAAAAAAAAAAAAAAAINQAAAAAAAAEAAAD9AAAAAAAAAAAAAAAQ
-NQAAAAAAAAEAAAB1AAAAAAAAAAAAAAAYNQAAAAAAAAEAAACPAAAAAAAAAAAAAAAgNQAA
-AAAAAAEAAABrAAAAAAAAAAAAAAAoNQAAAAAAAAEAAAA0AQAAAAAAAAAAAAAwNQAAAAAA
-AAEAAACWAAAAAAAAAAAAAAA4NQAAAAAAAAEAAAA4AAAAAAAAAAAAAABANQAAAAAAAAEA
-AAAkAQAAAAAAAAAAAABINQAAAAAAAAEAAAAgAQAAAAAAAAAAAABQNQAAAAAAAAEAAABy
-AAAAAAAAAAAAAABYNQAAAAAAAAEAAADPAAAAAAAAAAAAAABgNQAAAAAAAAEAAAAaAQAA
-AAAAAAAAAABoNQAAAAAAAAEAAADTAAAAAAAAAAAAAABwNQAAAAAAAAEAAAC3AAAAAAAA
-AAAAAAB4NQAAAAAAAAEAAADSAAAAAAAAAAAAAACANQAAAAAAAAEAAAAqAQAAAAAAAAAA
-AACINQAAAAAAAAEAAADBAAAAAAAAAAAAAACQNQAAAAAAAAEAAAAyAAAAAAAAAAAAAACY
-NQAAAAAAAAEAAABYAAAAAAAAAAAAAACgNQAAAAAAAAEAAADKAAAAAAAAAAAAAACoNQAA
-AAAAAAEAAAAxAQAAAAAAAAAAAACwNQAAAAAAAAEAAAA8AQAAAAAAAAAAAAC4NQAAAAAA
-AAEAAAASAQAAAAAAAAAAAADANQAAAAAAAAEAAAAbAAAAAAAAAAAAAADINQAAAAAAAAEA
-AABUAAAAAAAAAAAAAADQNQAAAAAAAAEAAAAcAQAAAAAAAAAAAADYNQAAAAAAAAEAAACR
-AAAAAAAAAAAAAADgNQAAAAAAAAEAAABIAQAAAAAAAAAAAADoNQAAAAAAAAEAAADGAAAA
-AAAAAAAAAADwNQAAAAAAAAEAAADvAAAAAAAAAAAAAAD4NQAAAAAAAAEAAAAzAAAAAAAA
-AAAAAAAANgAAAAAAAAEAAADrAAAAAAAAAAAAAAAINgAAAAAAAAEAAAAkAAAAAAAAAAAA
-AAAQNgAAAAAAAAEAAABJAAAAAAAAAAAAAAAYNgAAAAAAAAEAAACIAAAAAAAAAAAAAAAg
-NgAAAAAAAAEAAADNAAAAAAAAAAAAAAAoNgAAAAAAAAEAAAC9AAAAAAAAAAAAAAAwNgAA
-AAAAAAEAAAA/AQAAAAAAAAAAAAA4NgAAAAAAAAEAAAC8AAAAAAAAAAAAAABANgAAAAAA
-AAEAAAABAQAAAAAAAAAAAABINgAAAAAAAAEAAAD7AAAAAAAAAAAAAABQNgAAAAAAAAEA
-AAA9AQAAAAAAAAAAAABYNgAAAAAAAAEAAAAKAAAAAAAAAAAAAABgNgAAAAAAAAEAAACY
-AAAAAAAAAAAAAABoNgAAAAAAAAEAAABoAAAAAAAAAAAAAABwNgAAAAAAAAEAAACOAAAA
-AAAAAAAAAAB4NgAAAAAAAAEAAABiAAAAAAAAAAAAAACANgAAAAAAAAEAAADbAAAAAAAA
-AAAAAACINgAAAAAAAAEAAADgAAAAAAAAAAAAAACQNgAAAAAAAAEAAADyAAAAAAAAAAAA
-AACYNgAAAAAAAAEAAAABAAAAUoUAAAAAAACgNgAAAAAAAAEAAAAGAQAAAAAAAAAAAACo
-NgAAAAAAAAEAAAAYAQAAAAAAAAAAAACwNgAAAAAAAAEAAAAzAQAAAAAAAAAAAADANgAA
-AAAAAAEAAAC3AAAAAAAAAAAAAADINgAAAAAAAAEAAADSAAAAAAAAAAAAAADQNgAAAAAA
-AAEAAAAqAQAAAAAAAAAAAADYNgAAAAAAAAEAAADBAAAAAAAAAAAAAADgNgAAAAAAAAEA
-AAAyAAAAAAAAAAAAAADYSgAAAAAAAAEAAAABAAAABbUAAAAAAADgSgAAAAAAAAEAAAAB
-AAAABbUAAAAAAADoSgAAAAAAAAEAAAABAAAALLUAAAAAAADwSgAAAAAAAAEAAAABAAAA
-LLUAAAAAAAD4SgAAAAAAAAEAAAABAAAAU7UAAAAAAAAASwAAAAAAAAEAAAABAAAAU7UA
-AAAAAAAISwAAAAAAAAEAAAABAAAAerUAAAAAAAAQSwAAAAAAAAEAAAABAAAAerUAAAAA
-AAB4TAAAAAAAAAEAAABTAAAAAAAAAAAAAACATAAAAAAAAAEAAAB4AAAAAAAAAAAAAACI
-TAAAAAAAAAEAAABaAQAAAAAAAAAAAACQTAAAAAAAAAEAAABjAAAAAAAAAAAAAACYTAAA
-AAAAAAEAAADJAAAAAAAAAAAAAACgTAAAAAAAAAEAAACrAAAAAAAAAAAAAACoTAAAAAAA
-AAEAAAAJAQAAAAAAAAAAAACwTAAAAAAAAAEAAABMAAAAAAAAAAAAAAC4TAAAAAAAAAEA
-AACUAAAAAAAAAAAAAADATAAAAAAAAAEAAABPAAAAAAAAAAAAAADITAAAAAAAAAEAAADu
-AAAAAAAAAAAAAADQTAAAAAAAAAEAAABFAQAAAAAAAAAAAADYTAAAAAAAAAEAAACCAAAA
-AAAAAAAAAADgTAAAAAAAAAEAAADpAAAAAAAAAAAAAADoTAAAAAAAAAEAAADVAAAAAAAA
-AAAAAADwTAAAAAAAAAEAAAB7AQAAAAAAAAAAAAD4TAAAAAAAAAEAAABzAQAAAAAAAAAA
-AAAATQAAAAAAAAEAAACtAAAAAAAAAAAAAAAITQAAAAAAAAEAAAAwAQAAAAAAAAAAAAAQ
-TQAAAAAAAAEAAAB0AAAAAAAAAAAAAAAYTQAAAAAAAAEAAAAPAQAAAAAAAAAAAAAgTQAA
-AAAAAAEAAAAlAAAAAAAAAAAAAAAoTQAAAAAAAAEAAABEAQAAAAAAAAAAAAAwTQAAAAAA
-AAEAAAA6AQAAAAAAAAAAAAA4TQAAAAAAAAEAAABJAQAAAAAAAAAAAABATQAAAAAAAAEA
-AABXAAAAAAAAAAAAAABITQAAAAAAAAEAAAApAQAAAAAAAAAAAABQTQAAAAAAAAEAAADs
-AAAAAAAAAAAAAABYTQAAAAAAAAEAAADnAAAAAAAAAAAAAABgTQAAAAAAAAEAAAASAAAA
-AAAAAAAAAABoTQAAAAAAAAEAAABTAQAAAAAAAAAAAABwTQAAAAAAAAEAAABzAAAAAAAA
-AAAAAAB4TQAAAAAAAAEAAADRAAAAAAAAAAAAAACATQAAAAAAAAEAAABYAQAAAAAAAAAA
-AACITQAAAAAAAAEAAADLAAAAAAAAAAAAAACQTQAAAAAAAAEAAACMAAAAAAAAAAAAAACY
-TQAAAAAAAAEAAAAdAQAAAAAAAAAAAACgTQAAAAAAAAEAAADlAAAAAAAAAAAAAACoTQAA
-AAAAAAEAAAAQAAAAAAAAAAAAAACwTQAAAAAAAAEAAACTAAAAAAAAAAAAAAC4TQAAAAAA
-AAEAAAAMAAAAAAAAAAAAAADATQAAAAAAAAEAAACNAAAAAAAAAAAAAADITQAAAAAAAAEA
-AAAoAQAAAAAAAAAAAADQTQAAAAAAAAEAAACiAAAAAAAAAAAAAADYTQAAAAAAAAEAAAAL
-AQAAAAAAAAAAAADgTQAAAAAAAAEAAACaAAAAAAAAAAAAAADoTQAAAAAAAAEAAACjAAAA
-AAAAAAAAAADwTQAAAAAAAAEAAAADAQAAAAAAAAAAAAD4TQAAAAAAAAEAAABGAAAAAAAA
-AAAAAAAATgAAAAAAAAEAAAArAQAAAAAAAAAAAAAITgAAAAAAAAEAAAA5AQAAAAAAAAAA
-AAAQTgAAAAAAAAEAAAD/AAAAAAAAAAAAAAAYTgAAAAAAAAEAAAB4AQAAAAAAAAAAAAAg
-TgAAAAAAAAEAAABBAAAAAAAAAAAAAAAoTgAAAAAAAAEAAAC5AAAAAAAAAAAAAAAwTgAA
-AAAAAAEAAACdAAAAAAAAAAAAAAA4TgAAAAAAAAEAAABoAQAAAAAAAAAAAABATgAAAAAA
-AAEAAABEAAAAAAAAAAAAAABITgAAAAAAAAEAAACFAAAAAAAAAAAAAABQTgAAAAAAAAEA
-AABsAQAAAAAAAAAAAABYTgAAAAAAAAEAAAA6AAAAAAAAAAAAAABgTgAAAAAAAAEAAABD
-AAAAAAAAAAAAAABoTgAAAAAAAAEAAAApAAAAAAAAAAAAAABwTgAAAAAAAAEAAAA5AAAA
-AAAAAAAAAAB4TgAAAAAAAAEAAAA+AAAAAAAAAAAAAACATgAAAAAAAAEAAAB3AAAAAAAA
-AAAAAACITgAAAAAAAAEAAAAXAAAAAAAAAAAAAACQTgAAAAAAAAEAAABqAAAAAAAAAAAA
-AACYTgAAAAAAAAEAAADjAAAAAAAAAAAAAACgTgAAAAAAAAEAAABlAAAAAAAAAAAAAACo
-TgAAAAAAAAEAAAARAQAAAAAAAAAAAACwTgAAAAAAAAEAAABnAQAAAAAAAAAAAAC4TgAA
-AAAAAAEAAADDAAAAAAAAAAAAAADATgAAAAAAAAEAAAB7AAAAAAAAAAAAAADITgAAAAAA
-AAEAAABFAAAAAAAAAAAAAADQTgAAAAAAAAEAAAAfAAAAAAAAAAAAAADYTgAAAAAAAAEA
-AAB0AQAAAAAAAAAAAADgTgAAAAAAAAEAAAD8AAAAAAAAAAAAAADoTgAAAAAAAAEAAADE
-AAAAAAAAAAAAAADwTgAAAAAAAAEAAACZAAAAAAAAAAAAAAD4TgAAAAAAAAEAAAAhAAAA
-AAAAAAAAAAAATwAAAAAAAAEAAABbAQAAAAAAAAAAAAAITwAAAAAAAAEAAABmAAAAAAAA
-AAAAAAAQTwAAAAAAAAEAAADIAAAAAAAAAAAAAAAYTwAAAAAAAAEAAAC4AAAAAAAAAAAA
-AAAgTwAAAAAAAAEAAADHAAAAAAAAAAAAAAAoTwAAAAAAAAEAAADYAAAAAAAAAAAAAAAw
-TwAAAAAAAAEAAABxAQAAAAAAAAAAAABATwAAAAAAAAEAAAADAQAAAAAAAAAAAABITwAA
-AAAAAAEAAABGAAAAAAAAAAAAAABQTwAAAAAAAAEAAAArAQAAAAAAAAAAAABYTwAAAAAA
-AAEAAAA5AQAAAAAAAAAAAABgTwAAAAAAAAEAAAD/AAAAAAAAAAAAAADgVQAAAAAAAAEA
-AAABAAAAWtoAAAAAAADoVQAAAAAAAAEAAAABAAAAJdoAAAAAAADwVQAAAAAAAAEAAAAB
-AAAALdoAAAAAAAD4VQAAAAAAAAEAAAABAAAAj9oAAAAAAAAAVgAAAAAAAAEAAAABAAAA
-O9oAAAAAAAAIVgAAAAAAAAEAAAABAAAAh9oAAAAAAABAVgAAAAAAAAEAAAABAAAAMucA
-AAAAAABIVgAAAAAAAAEAAAABAAAAqOYAAAAAAABQVgAAAAAAAAEAAAABAAAA1OYAAAAA
-AABYVgAAAAAAAAEAAAABAAAAK+cAAAAAAABgVgAAAAAAAAEAAAABAAAA3eYAAAAAAABo
-VgAAAAAAAAEAAAABAAAA5uYAAAAAAABwVgAAAAAAAAEAAAABAAAAMucAAAAAAAB4VgAA
-AAAAAAEAAAABAAAAMucAAAAAAACAVgAAAAAAAAEAAAABAAAAMucAAAAAAACIVgAAAAAA
-AAEAAAABAAAAMucAAAAAAACQVgAAAAAAAAEAAAABAAAAMucAAAAAAACYVgAAAAAAAAEA
-AAABAAAAMucAAAAAAACgVgAAAAAAAAEAAAABAAAAMucAAAAAAACoVgAAAAAAAAEAAAAB
-AAAAMucAAAAAAACwVgAAAAAAAAEAAAABAAAAMucAAAAAAAC4VgAAAAAAAAEAAAABAAAA
-MucAAAAAAADAVgAAAAAAAAEAAAABAAAADucAAAAAAACQYgAAAAAAAAEAAAABAAAAoyUB
-AAAAAACYYgAAAAAAAAEAAAABAAAAxSEBAAAAAACgYgAAAAAAAAEAAAABAAAAoCIBAAAA
-AACoYgAAAAAAAAEAAAABAAAAPCQBAAAAAACwYgAAAAAAAAEAAAABAAAAmiQBAAAAAAC4
-YgAAAAAAAAEAAAABAAAAESUBAAAAAAAIcAAAAAAAAAEAAAABAAAAVDABAAAAAAAQcAAA
-AAAAAAEAAAABAAAAWDABAAAAAAAYcAAAAAAAAAEAAAABAAAAXTABAAAAAAAgcAAAAAAA
-AAEAAAABAAAAYjABAAAAAAAocAAAAAAAAAEAAAABAAAAdDABAAAAAAAwcAAAAAAAAAEA
-AAABAAAAdDABAAAAAAA4cAAAAAAAAAEAAAABAAAAZzABAAAAAABAcAAAAAAAAAEAAAAB
-AAAAbDABAAAAAABYfAAAAAAAAAEAAAABAAAAs0ABAAAAAABgfAAAAAAAAAEAAAABAAAA
-mEABAAAAAABofAAAAAAAAAEAAAABAAAAnEABAAAAAABwfAAAAAAAAAEAAAABAAAAoUAB
-AAAAAAB4fAAAAAAAAAEAAAABAAAAs0ABAAAAAACAfAAAAAAAAAEAAAABAAAAs0ABAAAA
-AACIfAAAAAAAAAEAAAABAAAApkABAAAAAACQfAAAAAAAAAEAAAABAAAAq0ABAAAAAADI
-iAAAAAAAAAEAAAABAAAAyVgBAAAAAADQiAAAAAAAAAEAAAABAAAAsVgBAAAAAADYiAAA
-AAAAAAEAAAABAAAAtVgBAAAAAADgiAAAAAAAAAEAAAABAAAAulgBAAAAAADoiAAAAAAA
-AAEAAAABAAAAyVgBAAAAAADwiAAAAAAAAAEAAAABAAAAyVgBAAAAAAD4iAAAAAAAAAEA
-AAABAAAAv1gBAAAAAAAAiQAAAAAAAAEAAAABAAAAxFgBAAAAAAAgAAAAAAAAAAEAAAAD
-AAAAAAAAAAAAAAAoAAAAAAAAAAEAAAADAAAABwAAAAAAAAAwAAAAAAAAAAEAAAADAAAA
-DgAAAAAAAAA4AAAAAAAAAAEAAAADAAAAFQAAAAAAAABAAAAAAAAAAAEAAAADAAAAHAAA
-AAAAAABIAAAAAAAAAAEAAAADAAAAIwAAAAAAAACIAQAAAAAAAAEAAAAFAAAAkAAAAAAA
-AACYAQAAAAAAAAEAAAAFAAAAogAAAAAAAACoAQAAAAAAAAEAAAAFAAAArAAAAAAAAAC4
-AQAAAAAAAAEAAAAFAAAAuAAAAAAAAADIAQAAAAAAAAEAAAAFAAAAwgAAAAAAAADYAQAA
-AAAAAAEAAAAFAAAAzAAAAAAAAADoAQAAAAAAAAEAAAAFAAAA1gAAAAAAAAD4AQAAAAAA
-AAEAAAAFAAAA4gAAAAAAAAAIAgAAAAAAAAEAAAAFAAAA6gAAAAAAAAAYAgAAAAAAAAEA
-AAAFAAAA8AAAAAAAAAAoAgAAAAAAAAEAAAAFAAAAEAEAAAAAAAA4AgAAAAAAAAEAAAAF
-AAAAMAEAAAAAAABIAgAAAAAAAAEAAAAFAAAAQAEAAAAAAABYAgAAAAAAAAEAAAAFAAAA
-UAEAAAAAAABoAgAAAAAAAAEAAAAFAAAAYAEAAAAAAAB4AgAAAAAAAAEAAAAFAAAAZAEA
-AAAAAAAgAAAAAAAAAAEAAAABAAAAAAAAAAAAAAA4AAAAAAAAAAEAAAABAAAAzwAAAAAA
-AABYAAAAAAAAAAEAAAABAAAA/AAAAAAAAAB4AAAAAAAAAAEAAAABAAAA9AEAAAAAAACw
-AAAAAAAAAAEAAAABAAAARQIAAAAAAADIAAAAAAAAAAEAAAABAAAAZgIAAAAAAADgAAAA
-AAAAAAEAAAABAAAAiAMAAAAAAAD4AAAAAAAAAAEAAAABAAAA3AMAAAAAAAAQAQAAAAAA
-AAEAAAABAAAAbQQAAAAAAAAoAQAAAAAAAAEAAAABAAAAxQQAAAAAAABAAQAAAAAAAAEA
-AAABAAAADQUAAAAAAABYAQAAAAAAAAEAAAABAAAAgQUAAAAAAACQAQAAAAAAAAEAAAAB
-AAAAMwYAAAAAAACoAQAAAAAAAAEAAAABAAAA7QYAAAAAAADAAQAAAAAAAAEAAAABAAAA
-HAcAAAAAAADgAQAAAAAAAAEAAAABAAAAgAcAAAAAAAAAAgAAAAAAAAEAAAABAAAAwwcA
-AAAAAAAYAgAAAAAAAAEAAAABAAAA9wgAAAAAAABIAgAAAAAAAAEAAAABAAAAYAkAAAAA
-AABoAgAAAAAAAAEAAAABAAAAzAkAAAAAAACAAgAAAAAAAAEAAAABAAAAEAoAAAAAAACY
-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
-AAAAkFoAAAAAAABQDgAAAAAAAAEAAAABAAAAvVoAAAAAAABoDgAAAAAAAAEAAAABAAAA
-4VoAAAAAAACADgAAAAAAAAEAAAABAAAADVsAAAAAAACYDgAAAAAAAAEAAAABAAAALFsA
-AAAAAAC4DgAAAAAAAAEAAAABAAAAk1sAAAAAAADQDgAAAAAAAAEAAAABAAAAxlsAAAAA
-AADoDgAAAAAAAAEAAAABAAAA3lsAAAAAAAAADwAAAAAAAAEAAAABAAAADFwAAAAAAAAo
-DwAAAAAAAAEAAAABAAAArlwAAAAAAABADwAAAAAAAAEAAAABAAAAyFwAAAAAAABYDwAA
-AAAAAAEAAAABAAAA01wAAAAAAABwDwAAAAAAAAEAAAABAAAA6VwAAAAAAACIDwAAAAAA
-AAEAAAABAAAAHl0AAAAAAACgDwAAAAAAAAEAAAABAAAAP10AAAAAAAC4DwAAAAAAAAEA
-AAABAAAAgF0AAAAAAADQDwAAAAAAAAEAAAABAAAArV0AAAAAAAD4DwAAAAAAAAEAAAAB
-AAAAH14AAAAAAAAYEAAAAAAAAAEAAAABAAAAPV4AAAAAAABAEAAAAAAAAAEAAAABAAAA
-1F4AAAAAAABgEAAAAAAAAAEAAAABAAAA8l4AAAAAAACIEAAAAAAAAAEAAAABAAAAjF8A
-AAAAAACoEAAAAAAAAAEAAAABAAAArV8AAAAAAADAEAAAAAAAAAEAAAABAAAAs18AAAAA
-AADYEAAAAAAAAAEAAAABAAAAtF8AAAAAAADwEAAAAAAAAAEAAAABAAAAtV8AAAAAAAAQ
-EQAAAAAAAAEAAAABAAAA2V8AAAAAAAAwEQAAAAAAAAEAAAABAAAACGAAAAAAAABoEQAA
-AAAAAAEAAAABAAAAGGAAAAAAAACAEQAAAAAAAAEAAAABAAAAS2AAAAAAAACgEQAAAAAA
-AAEAAAABAAAA4GAAAAAAAAC4EQAAAAAAAAEAAAABAAAADWEAAAAAAADgEQAAAAAAAAEA
-AAABAAAAiGEAAAAAAAD4EQAAAAAAAAEAAAABAAAAj2EAAAAAAAAQEgAAAAAAAAEAAAAB
-AAAAlWEAAAAAAAAoEgAAAAAAAAEAAAABAAAAsGEAAAAAAABYEgAAAAAAAAEAAAABAAAA
-0GEAAAAAAACQEgAAAAAAAAEAAAABAAAABGIAAAAAAACoEgAAAAAAAAEAAAABAAAADGIA
-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
-AAEAAAABAAAAieQAAAAAAACQLwAAAAAAAAEAAAABAAAAw+UAAAAAAACwLwAAAAAAAAEA
-AAABAAAAkuYAAAAAAADQLwAAAAAAAAEAAAABAAAAPOcAAAAAAADwLwAAAAAAAAEAAAAB
-AAAA0OcAAAAAAAAoMAAAAAAAAAEAAAABAAAA6OcAAAAAAABIMAAAAAAAAAEAAAABAAAA
-fegAAAAAAABgMAAAAAAAAAEAAAABAAAApegAAAAAAAB4MAAAAAAAAAEAAAABAAAA0+gA
-AAAAAACgMAAAAAAAAAEAAAABAAAATukAAAAAAAC4MAAAAAAAAAEAAAABAAAAYekAAAAA
-AADQMAAAAAAAAAEAAAABAAAAcukAAAAAAADoMAAAAAAAAAEAAAABAAAAeOkAAAAAAAAA
-MQAAAAAAAAEAAAABAAAAfukAAAAAAAAwMQAAAAAAAAEAAAABAAAAhOkAAAAAAABoMQAA
-AAAAAAEAAAABAAAA+OkAAAAAAACAMQAAAAAAAAEAAAABAAAAAOoAAAAAAACYMQAAAAAA
-AAEAAAABAAAACOoAAAAAAACwMQAAAAAAAAEAAAABAAAAFOoAAAAAAADQMQAAAAAAAAEA
-AAABAAAAROoAAAAAAADwMQAAAAAAAAEAAAABAAAAauoAAAAAAAAQMgAAAAAAAAEAAAAB
-AAAAi+oAAAAAAAAoMgAAAAAAAAEAAAABAAAAoOoAAAAAAABAMgAAAAAAAAEAAAABAAAA
-8uoAAAAAAABYMgAAAAAAAAEAAAABAAAAROsAAAAAAABwMgAAAAAAAAEAAAABAAAAbusA
-AAAAAACIMgAAAAAAAAEAAAABAAAAyOsAAAAAAACgMgAAAAAAAAEAAAABAAAA+OsAAAAA
-AADgMgAAAAAAAAEAAAABAAAA+OwAAAAAAAAgMwAAAAAAAAEAAAABAAAAUPUAAAAAAAA4
-MwAAAAAAAAEAAAABAAAAw/UAAAAAAABYMwAAAAAAAAEAAAABAAAA1vUAAAAAAAB4MwAA
-AAAAAAEAAAABAAAACvYAAAAAAACgMwAAAAAAAAEAAAABAAAAxvcAAAAAAADQMwAAAAAA
-AAEAAAABAAAAlvkAAAAAAAD4MwAAAAAAAAEAAAABAAAANfoAAAAAAAAQNAAAAAAAAAEA
-AAABAAAAUfoAAAAAAAAoNAAAAAAAAAEAAAABAAAAoPoAAAAAAABQNAAAAAAAAAEAAAAB
-AAAAE/sAAAAAAACANAAAAAAAAAEAAAABAAAAvvsAAAAAAADANAAAAAAAAAEAAAABAAAA
-yv8AAAAAAADYNAAAAAAAAAEAAAABAAAAhgABAAAAAAD4NAAAAAAAAAEAAAABAAAAsgAB
-AAAAAAAoNQAAAAAAAAEAAAABAAAAvQMBAAAAAABoNQAAAAAAAAEAAAABAAAAtwgBAAAA
-AACYNQAAAAAAAAEAAAABAAAA3gkBAAAAAADINQAAAAAAAAEAAAABAAAAhAoBAAAAAADo
-NQAAAAAAAAEAAAABAAAACwsBAAAAAAAoNgAAAAAAAAEAAAABAAAAYwwBAAAAAABANgAA
-AAAAAAEAAAABAAAA2wwBAAAAAABYNgAAAAAAAAEAAAABAAAAVw0BAAAAAAB4NgAAAAAA
-AAEAAAABAAAARg4BAAAAAACQNgAAAAAAAAEAAAABAAAAcw4BAAAAAAC4NgAAAAAAAAEA
-AAABAAAAiQ8BAAAAAADQNgAAAAAAAAEAAAABAAAAoQ8BAAAAAADoNgAAAAAAAAEAAAAB
-AAAAmRABAAAAAAAQNwAAAAAAAAEAAAABAAAAUREBAAAAAABANwAAAAAAAAEAAAABAAAA
-ChIBAAAAAACYNwAAAAAAAAEAAAABAAAAVBMBAAAAAADANwAAAAAAAAEAAAABAAAAARQB
-AAAAAADgNwAAAAAAAAEAAAABAAAAOBQBAAAAAAAAOAAAAAAAAAEAAAABAAAAdRQBAAAA
-AAAoOAAAAAAAAAEAAAABAAAApxUBAAAAAABAOAAAAAAAAAEAAAABAAAAFxYBAAAAAABg
-OAAAAAAAAAEAAAABAAAAkBYBAAAAAACAOAAAAAAAAAEAAAABAAAARxoBAAAAAACYOAAA
-AAAAAAEAAAABAAAAVhoBAAAAAACwOAAAAAAAAAEAAAABAAAAahoBAAAAAADIOAAAAAAA
-AAEAAAABAAAAgxoBAAAAAADgOAAAAAAAAAEAAAABAAAAtBoBAAAAAAAIOQAAAAAAAAEA
-AAABAAAADhsBAAAAAAAwOQAAAAAAAAEAAAABAAAAcBwBAAAAAABIOQAAAAAAAAEAAAAB
-AAAAaB0BAAAAAABgOQAAAAAAAAEAAAABAAAAvR0BAAAAAAB4OQAAAAAAAAEAAAABAAAA
-Jh4BAAAAAACQOQAAAAAAAAEAAAABAAAAYR8BAAAAAADAOQAAAAAAAAEAAAABAAAAdB8B
-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
+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
+AEIOEEIOGEIOIEIOKEEOMEEOOEQOQIMHhgaMBY0EjgOPAgAAAAAAAAAcAAAApAIAAAAA
+AAAAAAAAxAAAAAAAAABEDiBKhgKDAwAAAAAAAAAAAAAAAAAAAAAAR0NDOiAoR05VKSAz
+LjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05V
+KSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAo
+R05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0ND
+OiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAA
+R0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMu
+NAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAz
+LjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05V
+KSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAo
+R05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0ND
+OiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAA
+R0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMu
+NAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAz
+LjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05V
+KSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAo
+R05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0ND
+OiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAA
+R0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMu
+NAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAzLjMuNAAAR0NDOiAoR05VKSAz
+LjMuNAAALnN5bXRhYgAuc3RydGFiAC5zaHN0cnRhYgAucmVsYS50ZXh0AC5yZWxhLnJv
+ZGF0YQAucm9kYXRhLnN0cjEuMQAucmVsYS5kYXRhAC5yZWxhLmVoX2ZyYW1lAC5ic3MA
+LmNvbW1lbnQALm5vdGUuR05VLXN0YWNrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAQAA
+AAYAAAAAAAAAAAAAAAAAAABAAAAAAAAAANCoAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAA
+AAAAAAAAGwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAiDoDAAAAAABgTgAAAAAAAA4AAAAB
+AAAACAAAAAAAAAAYAAAAAAAAACsAAAABAAAAAgAAAAAAAAAAAAAAAAAAACCpAQAAAAAA
+6JgAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAmAAAABAAAAAAAAAAAAAAAAAAA
+AAAAAADoiAMAAAAAABAsAAAAAAAADgAAAAMAAAAIAAAAAAAAABgAAAAAAAAAMwAAAAEA
+AAAyAAAAAAAAAAAAAAAAAAAACEICAAAAAADIBgAAAAAAAAAAAAAAAAAAAQAAAAAAAAAB
+AAAAAAAAAEcAAAABAAAAAwAAAAAAAAAAAAAAAAAAAOBIAgAAAAAA5GAAAAAAAAAAAAAA
+AAAAACAAAAAAAAAAAAAAAAAAAABCAAAABAAAAAAAAAAAAAAAAAAAAAAAAAD4tAMAAAAA
+ADgZAAAAAAAADgAAAAYAAAAIAAAAAAAAABgAAAAAAAAAUgAAAAEAAAACAAAAAAAAAAAA
+AAAAAAAAyKkCAAAAAACITAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAE0AAAAE
+AAAAAAAAAAAAAAAAAAAAAAAAADDOAwAAAAAAKDUAAAAAAAAOAAAACAAAAAgAAAAAAAAA
+GAAAAAAAAABcAAAACAAAAAMAAAAAAAAAAAAAAAAAAABg9gIAAAAAALABAAAAAAAAAAAA
+AAAAAAAgAAAAAAAAAAAAAAAAAAAAYQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAYPYCAAAA
+AACoAwAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAGoAAAAHAAAAAAAAAAAAAAAA
+AAAAAAAAAAj6AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAA
+AwAAAAAAAAAAAAAAAAAAAAAAAAAI+gIAAAAAAHoAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+AAAAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAiP4CAAAAAAD4KAAAAAAAAA8A
+AAAJAAAACAAAAAAAAAAYAAAAAAAAAAkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAIAnAwAA
+AAAABBMAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAwABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAGAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAwAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAIAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAwALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAAAAAAAAAAAAAAAAAAAAAAABAAAA
+EgABAGmIAAAAAAAAcAAAAAAAAAAMAAAAEgABAMKAAAAAAAAABgAAAAAAAAAXAAAAEgAB
+APl4AAAAAAAABgAAAAAAAAAiAAAAEgABAB/yAAAAAAAAVgEAAAAAAAAtAAAAEgABALyA
+AAAAAAAABgAAAAAAAAA4AAAAEgABAGNfAAAAAAAAlwAAAAAAAABDAAAAEgABAB8HAQAA
+AAAAugEAAAAAAABOAAAAEgABAK7JAAAAAAAALwAAAAAAAABZAAAAEgABAFMRAQAAAAAA
+NgEAAAAAAABkAAAAEgABAIxVAAAAAAAA6wAAAAAAAABvAAAAEgABAMxKAQAAAAAA0QAA
+AAAAAAB6AAAAEgABAKmVAAAAAAAAAQAAAAAAAACFAAAAEQAGAKBHAAAAAAAApAEAAAAA
+AACQAAAAEgABAGv2AAAAAAAAIQAAAAAAAACbAAAAEgABAHpXAAAAAAAALgAAAAAAAACm
+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
+AAAACAAAAAAAAACsEQAAEgABAKpsAAAAAAAAZgAAAAAAAAC3EQAAEgABAISXAAAAAAAA
+MAAAAAAAAADCEQAAEgABAGSiAAAAAAAAEwAAAAAAAADNEQAAEgABAPFUAAAAAAAAZAAA
+AAAAAADYEQAAEgABALuAAAAAAAAAAQAAAAAAAADjEQAAEgABANNeAAAAAAAAcgAAAAAA
+AADuEQAAEgABABq9AAAAAAAAQgAAAAAAAAD5EQAAEgABAIf0AAAAAAAAbwAAAAAAAAAE
+EgAAEgABAA3oAAAAAAAAQQAAAAAAAAAPEgAAEgABANGRAAAAAAAANQAAAAAAAAAaEgAA
+EgABADuBAAAAAAAAuQQAAAAAAAAlEgAAEgABABN1AAAAAAAAygIAAAAAAAAwEgAAEgAB
+AHLoAAAAAAAADgAAAAAAAAA7EgAAEgABAC/HAAAAAAAADwAAAAAAAABGEgAAEgABACOB
+AQAAAAAAzgAAAAAAAABREgAAEgABAKPnAAAAAAAANQAAAAAAAABcEgAAEgABADzbAAAA
+AAAAbQAAAAAAAABnEgAAEgABAI4JAQAAAAAAUAIAAAAAAAByEgAAEgABAHg6AQAAAAAA
+GQAAAAAAAAB9EgAAEgABACiIAAAAAAAAQQAAAAAAAACIEgAAEgABAFPZAAAAAAAAcAAA
+AAAAAACTEgAAEgABAGpbAAAAAAAABgAAAAAAAACeEgAAEgABAAuVAAAAAAAABwAAAAAA
+AACpEgAAEgABAF5+AAAAAAAAMgAAAAAAAAC0EgAAEgABAAHnAAAAAAAACwAAAAAAAAC/
+EgAAEgABAOpMAQAAAAAANAIAAAAAAADKEgAAEgABAL0mAQAAAAAA7gAAAAAAAADVEgAA
+EgABALyiAAAAAAAAqQEAAAAAAADgEgAAEgABAG49AAAAAAAAkwAAAAAAAAD5EgAAEgAB
+AJE6AQAAAAAAMQAAAAAAAAAAenowMDViNTg0NgB6ejBkYzE5OGRlAHp6MDAyZGIxMWMA
+enowMmRiZjg3NQB6ejA1YjYzYzY0AHp6MDJkYmIxYjIAenowMmRiMjA1MwB6ejAwMmRi
+YTQyAHp6MGZiYjFlM2YAenowYjc5ZWE5NAB6ejA1YjhjNjVhAHp6MDAxNmQ1NGQAenow
+MDViNDBhZAB6ejA1Yjk0MmVkAHp6MGQ4ZGM2MmMAenowMDE5ZjQ3MAB6ejAyZGQ5NDJk
+AHp6MDJkYmU3M2QAenowMDViNjkyYgB6ejBiNmQyMzI1AHp6MDA1Yjg1M2QAenowMDE2
+ZDkyZQB6ejBjZmIxODc1AHp6MDAyZGIzMWMAenowMmRhYmJhYwB6ejAyZGJjODUxAHp6
+MDAwYjZjNjgAenowMDBiNmJmOAB6ejAwYjZjZjVlAHp6MDE2ZTFkZmQAenowYjZmNTBi
+OAB6ejA2ZTBhNGZlAHp6MDA2N2QyYjEAenowYjZjYTMyNQB6ejAwNWI2Y2ZkAHp6MDE2
+ZTBkZmQAenowMDBiNmY2OABhdGhfaGFsX3Byb2Nlc3Nfbm9pc2VmbG9vcgB6ejAwNWI0
+OGFkAHp6MDJkYmYxYjIAenowMDViODhjYgB6ejAzM2VjOGJmAHp6MGRiNDI1YzUAYXRo
+X2hhbF9kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUAenowMGI2ZjE2MQB6ejA2ZTAwYjhh
+AHp6MDJkYmZjMWQAenowZGM0ZTM5MAB6ejBkYWZlZDg2AHp6MDBiNmUyN2EAenowMmRi
+YmFiMgB6ejBiNmQxZWZmAHp6MDE2ZDkwZGQAenowMmRiZTg1MQB6ejAwNWI2NGZkAHp6
+MDAwYjZkNTIAenowYjZjOWVmZgB6ejAxNmUwMGRkAHp6MDBiNmU4MjIAenowMmRiZDg3
+NQB6ejAyZGIzMWIyAHp6MDBiNzA5MjMAenowMGI2ZDQ1MAB6ejAwMGI2ZDFkAHp6MGI2
+YzIzMjUAenowMmRiZGFiMgB6ejAwMDViNjMyAHp6MDZkZWRkOTMAenowMDE2ZGE1MAB6
+ejAwMDY3ZDMyAHp6MDBiNmQ5MjMAenowMDJkYjUxYwB6ejAxNmRjYmZlAHp6MDBiNzAx
+NDUAenowMDE2ZGVjMQB6ejAwMTZkZjJjAHp6MGI3ZmFkM2UAenowMTZkOTkyMAB6ejAy
+ZGIxYmFjAHp6MGRjNmUzOTAAenowNWI3MDFlMAB6ejAwMGI2YjEwAHp6MGI3MDllZmYA
+enowMTZkZjg5YgBhdGhfaGFsX2F0dGFjaAB6ejA2ZTBmYzBkAHp6MDE2ZGFiMmQAenow
+MmRiMTM1ZAB6ejBlMDQ2ODRiAHp6MDE2ZTI5MWQAenowMDBiNmZlOAB6ejAwY2ZiM2Uw
+AHp6MDAxNmQ5NDgAenowMTZlMjA5YgB6ejBiNzAxZWZmAHp6MDAwYjZjOWQAenowMDA1
+YjVhMgB6ejAyZGIxNzBhAGF0aF9oYWxfY29tcHV0ZXR4dGltZQB6ejAyZGI1YmFjAHp6
+MDA1YjgxM2QAenowMGI2YzkyMwB6ejBiNmI1MGI4AHp6MDA1YjdmOWQAenowYjcwMWQw
+MgB6ejA2ZGZmNDRhAHp6MDJkYjU3NjMAenowNmVlYWY2MAB6ejAxNmUzMThjAHp6MGUw
+MDdjYTEAenowMDJkYWQxZAB6ejAwMmRhZjYyAHp6MGI4M2FkM2UAenowMDBiNmI5MAB6
+ejAxNmQ5ZWZhAHp6MDE2ZGUwNTEAenowMDJkYWIxZAB6ejAwMDViNmIyAHp6MDViN2Yx
+MTQAenowNGFlMDMxZgB6ejAyZGJkZGZkAHp6MDA1NDdmZWQAenowMGI2YmY1ZQB6ejAw
+YjcxNzdkAHp6MDBiNzBmM2QAenowMTZkODkyMAB6ejAyZGIxYWIyAHp6MDAwNWI2MjIA
+enowMDBiNmY3OAB6ejBiNjliMDdjAGF0aF9oYWxfZnJlZQB6ejA1Yjc5YjFiAHp6MGRj
+Mzk4ZGUAenowNWI2YmM2NAB6ejAwYjcwNzNkAHp6MDJkYmViYmQAenowYjVlMzE1MgB6
+ejAxNmRmYmYxAGF0aF9oYWxfbWh6MmllZWUAenowMTZlMTg5YgB6ejBkYzJhNWM1AHp6
+MDAyZGM2MGIAenowNmRmMGI4YQB6ejAyZGIzMzVkAHp6MDBiNmUwYjIAenowYjZjNTNh
+NAB6ejBmNTRkMWIwAHp6MDJkYjBlZTIAenowYjZmZDM2MwB6ejBkOWRjNjJjAHp6MDVi
+NzQxZTAAenowMmRhOWJhYwB6ejBkYzIxZDNhAHp6MDBiNzE3M2QAenowMTZkOWQ0MQB6
+ejAwNWI4NGZkAHp6MDE2ZGUxMWQAenowMDViOGFiZAB6ejAwYjcwMTIzAHp6MDA1YjY1
+MmIAenowMmRiMzg3NQB6ejAxNmUzMDliAHp6MDA1YjYwYjIAenowMmRiMTg3NQB6ejAw
+MmRiODQyAHp6MDJkYjE3NjMAenowYjdkZWE5NAB6ejAwYjcwMTYxAHp6MDE2ZDdkNDEA
+enowMDE2Y2QzMgB6ejA2ZGUwYjhhAHp6MDZkOWRkOTMAenowZGIzZWQ4NgB6ejAwNWI0
+OGVkAHp6MDAyZGM4MGIAenowMDJkYmM0MgB6ejAwYjZmMDIyAHp6MDJkYmE4NTEAenow
+MmRiMzNlZAB6ejAwNWI4MGZkAHp6MDA1YjdmMmUAenowMmRiZmRmZAB6ejAxNmU2NDhh
+AHp6MDAyZGFmZjIAenowMDViNzc5ZAB6ejAwMGI2ZWU4AHp6MDE2ZTQ0OGEAenowMGI2
+ZjZiYwB6ejAxNmRhOTIwAHp6MDViNzgxZTAAenowMDBiNmYxYwB6ejAwMmRjYTBiAHp6
+MDA1YjQ0YWQAenowMmRhZWVlMgB6ejA2ZGRmNDRhAHp6MGZhYzBjOWIAenowYjZmOWVm
+ZgB6ejAwYjZjNmJjAGF0aF9oYWxfYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYAenowMDAy
+ZGI5MgBhdGhfaGFsX3ZlcnNpb24AenowZGM1OThkZQB6ejAyZGJhYzJlAHp6MDJkYjc5
+YWUAenowMDE2ZTUzMgB6ejBiNmNmMDA5AHp6MDAxNmUxMmMAenowMDE2ZDllNAB6ejAw
+MDJkYWVhAHp6MDA1YjVjYjIAenowMTZkYTI1MQB6ejA2ZjZhZjYwAHp6MDZkZmRkOTMA
+YXRoX2hhbF9tYWxsb2MAenowMDBiNmRkMgB6ejAyZGQ5MmFkAHp6MDE2ZGIyNTEAenow
+ZTEwN2NhMQB6ejAwYjZjNzVlAHp6MDE2ZGQwNTEAenowMmRiZDFiMgB6ejAyZGMxNzYz
+AHp6MGI2OTBkNmQAenowMTZkZjA1MQB6ejAwMTZkOTUwAHp6MDBiNzA2YmMAenowMGI2
+ZjA0ZAB6ejAwMTZkODcyAHp6MDZkZWY0NGEAenowMGI2ZThiMgB6ejA1YjhjMmVkAHp6
+MDZmYjk0N2IAenowZWJiMWUzZgB6ejBiNmY5ZDAyAHp6MGQxNGQxYjAAenowYjQ4MDMx
+ZQB6ejAxNmRiYmZlAHp6MDE2ZTU0OGEAenowMDE2ZDg1MAB6ejAwMGI2ZmY4AGF0aF9o
+YWxfbWVtY3B5AHp6MDJkYmNiYmQAenowMTZkYTBkZAB6ejAyZGJiZGZkAHp6MDJkYjI4
+NTEAenowMmRiZGMxZAB6ejA2ZGIwY2YyAHp6MDE2ZWI5YWQAenowMGI2Y2ViYwB6ejBk
+OTQ4NGExAGF0aF9oYWxfcHJvYmUAenowMTZlYTlhZAB6ejBmZDRkMWIwAHp6MDJkYjM3
+NjMAYXRoX2hhbF9idWlsZG9wdHMAenowMmRhZjM1ZAB6ejA2ZGRkZDkzAHp6MDBiNmYw
+YjIAenowZGFkYzYyYwB6ejAxNmRmMjUxAHp6MDE2ZDkyNTEAenowMmRiMDg1MQB6ejBi
+NzIxYWVkAHp6MDY3Y2ZjYWUAenowMDBiNmNmOAB6ejBjOTRkMWIwAHp6MDJkYWZhYjIA
+enowNWI5MmFlZAB6ejA1YjhjM2U0AHp6MDA1YjhjY2IAenowYjZkOWVmZgB6ejAyZGIx
+MWIyAHp6MDJkYmZmYjEAenowMmRiZjc2MwB6ejAwNWI2OGZkAHp6MDA1YjQ0ZWQAenow
+YjcxMWFlZAB6ejAwMTZkNDRkAHp6MGI1ZTMxNjAAenowZDg0ODRhMQB6ejAxNmQ4YjJk
+AHp6MDE2ZTA4OWIAenowMmRiYjg3NQB6ejAyZGFlODUxAHp6MGI4MWVhOTQAenowMTZk
+ZWMxZgB6ejAwYjZmZWJjAHp6MGU4OTQ5MDcAenowMGI2ZWE3YQB6ejAzM2U4ZmJmAHp6
+MGNmYTU4NzUAenowMmRiOTlhZQB6ejAyZGI5YWIyAHp6MDAwYjZiZTgAenowZGU2ODM3
+ZgB6ejAxNmRhYmZlAHp6MDAwYjcwMWMAenowYjcwOWQwMgB6ejA2N2QyNWUyAHp6MDE5
+ZjNhMDEAenowNzAzOTQ3YgBhdGhfaGFsX21lbXplcm8AenowNmRmZmMwZAB6ejBiNjc1
+MGI4AHp6MDE2ZTJkZmQAenowMDBiNmQyMgB6ejA2ZmVhZjYwAHp6MGRjNGE1YzUAenow
+MGI3MGY3ZABhdGhfaGFsX3N3X2JlYWNvbl9yZXNwb25zZV90aW1lAHp6MDAxNmQ2NGQA
+enowOWY2NGI2YQB6ejAwNWI2NTdhAHp6MDZmMzk0N2IAenowNmRhMGNmMgB6ejBiN2Jh
+ZDNlAHp6MDBiNmY5NjEAenowYjY5NzNiYwB6ejAyZGJkMzVkAHp6MDA1Yjg4ZmQAenow
+MmRiYmMxZAB6ejAyZGFmZGZkAHp6MDZkN2RkOTMAYXRoX2hhbF9kZWxheQB6ejAyZGIx
+ZGZkAHp6MDY3ZDJmNDEAenowMmRhZjg3NQB6ejBiN2VkZTZkAHp6MDE2ZDhkNDEAenow
+MDJkYWU5MgB6ejBiN2FkZTZkAHp6MGRhZGIwZGUAenowMmRiYjM1ZAB6ejAyZGIzZGZk
+AHp6MDJkYjUzZWQAenowMTZkY2VhZQB6ejAwMGI2ZGEyAHp6MDAwYjZlMjIAenowNWI4
+MDA0MQB6ejAyZGFjZWUyAHp6MDAxNmQ4NDgAenowMTZkOWIyZAB6ejAwMmRhOTFkAHp6
+MDAxNmUwMmMAenowMGI3MDc3ZAB6ejAwNWI2OTdhAHp6MDAxNmRhZTQAenowMTZlMTA5
+YgB6ejAwNWI0YTJkAHp6MDE2ZGUwZGQAenowMTZkZjBkZAB6ejBkZjA3Y2ExAHp6MDJk
+YmQ3NjMAenowMDBiNmU1MgB6ejA2N2QwYzQ3AHp6MDViNmM2ZGIAenowYzMxNWViNQB6
+ejBkYjFlZDg2AHp6MDZkNDA2ZTAAenowMTZlMDI1MQB6ejAwMDJkYmIyAHp6MDAyZGQ4
+NmQAenowMDE2ZTE0ZAB6ejAyZGI1OWFlAHp6MDA2N2QyMjEAenowMTZkODBkZAB6ejAw
+YjZlMDIyAHp6MDA1Yjg5M2QAenowNWI4MWIxYgB6ejAyZGIxM2VkAHp6MDBiNmQxMjMA
+enowMDBiNmNlOAB6ejA1YjhhYWVkAHp6MGI2ZWQzNjMAenowMmRhZjFiMgB6ejAwMDVi
+NWUyAHp6MDMzZWJmYmYAenowNWI2ODZkYgB6ejAwMGI2ZWY4AHp6MDAwYjZmOWMAenow
+YjcxOWFlZAB6ejAwNWI1OGIyAHp6MDViN2RiMWIAenowYjgyZGU2ZAB6ejAwMTZkNzMy
+AHp6MDJkYWRhYjIAenowZjQ1ZTZlMwBhdGhfaGFsX2luaXRfY2hhbm5lbHMAenowMGI2
+ZDZiYwB6ejBjMTRkMWIwAHp6MDAwMmRiZDIAenowZGE0ODRhMQB6ejAxNmUwYjg3AHp6
+MDViOTAyZWQAenowNWI2N2M2NAB6ejBkYzJlMzkwAHp6MGE2MGQxNDUAenowMmRiYWJi
+ZAB6ejAwMGI2YzFkAHp6MDViOGVhZWQAenowMDViN2I5ZAB6ejAwNWI1NDQ2AHp6MDVi
+NjQ2ZGIAenowMGI2ZjkyMwB6ejBkZDY4MzdmAHp6MDE2ZTEyNTEAenowZGM2YTVjNQB6
+ejAyZGIzNzBhAHp6MDAwNWI2NzIAenowNmRlZmMwZAB6ejAyZGJmMzVkAHp6MDAwYjZj
+NzgAenowMDE2ZDgzMgB6ejAyZGI1NzBhAHp6MDA1YjZkN2EAenowMDJkYjI5MgB6ejAw
+NWI5MGNiAHp6MGI2ZjUzNjMAenowMDViNWM0NgB6ejA2ZDkwY2YyAHp6MDZkOGRkOTMA
+enowMTZkZmI4NwB6ejAwMTZkYTQ4AHp6MDAyZGFmMDAAenowYjY2MzFhOAB6ejAwMmRi
+MDkyAGF0aF9oYWxfZ2V0d2lyZWxlc3Ntb2RlcwB6ejAxNmUxYjg3AAAAAAAGAAAAAAAA
+AAsAAAADAAAAMQAAAAAAAABYAAAAAAAAAAsAAAADAAAARAAAAAAAAACAAAAAAAAAAAsA
+AAADAAAAUQAAAAAAAADFAAAAAAAAAAsAAAADAAAAZAAAAAAAAADTAAAAAAAAAAsAAAAD
+AAAAeAAAAAAAAADjAAAAAAAAAAsAAAADAAAAjAAAAAAAAADsAAAAAAAAAAsAAAADAAAA
+mQAAAAAAAAD1AAAAAAAAAAsAAAADAAAApgAAAAAAAAD+AAAAAAAAAAsAAAADAAAAuQAA
+AAAAAAAHAQAAAAAAAAsAAAADAAAAzAAAAAAAAADPAQAAAAAAAAIAAAB+AAAA/P//////
+///ZAQAAAAAAAAIAAAChAQAA/P/////////jAQAAAAAAAAIAAABLAAAA/P////////+P
+AgAAAAAAAAIAAABMAQAA/P////////8xBQAAAAAAAAIAAADMAAAA/P////////+jBQAA
+AAAAAAIAAADMAAAA/P////////9LBgAAAAAAAAIAAAA0AQAA/P////////9UBgAAAAAA
+AAsAAAACAAAAAAAAAAAAAAByBgAAAAAAAAIAAAA0AQAA/P////////97BgAAAAAAAAsA
+AAACAAAAAAAAAAAAAAAhBwAAAAAAAAIAAABrAAAA/P////////8+BwAAAAAAAAIAAABr
+AAAA/P////////9tBwAAAAAAAAsAAAACAAAACAAAAAAAAAB5CwAAAAAAAAIAAAAQAQAA
+/P////////+YCwAAAAAAAAIAAAA0AQAA/P////////+wCwAAAAAAAAsAAAACAAAA8AAA
+AAAAAAAyDAAAAAAAAAIAAAA0AQAA/P////////9ADAAAAAAAAAsAAAACAAAA8AAAAAAA
+AACsDAAAAAAAAAsAAAACAAAA8AAAAAAAAAA1DQAAAAAAAAsAAAACAAAAAAEAAAAAAAA+
+DQAAAAAAAAsAAAACAAAAIAEAAAAAAADFEAAAAAAAAAIAAADeAAAA/P////////9aFQAA
+AAAAAAIAAAA2AQAA/P////////+cGAAAAAAAAAIAAACLAAAA/P////////+sIQAAAAAA
+AAIAAADeAAAA/P/////////YIQAAAAAAAAIAAAA2AQAA/P////////9lIgAAAAAAAAIA
+AAA2AQAA/P/////////uIgAAAAAAAAIAAAA2AQAA/P////////9YIwAAAAAAAAIAAACL
+AAAA/P////////8hLQAAAAAAAAsAAAACAAAAYAEAAAAAAAAzLQAAAAAAAAsAAAACAAAA
+QAEAAAAAAAA0PAAAAAAAAAsAAAAEAAAAIAoAAAAAAABgPAAAAAAAAAsAAAAEAAAAYAAA
+AAAAAADKPAAAAAAAAAsAAAAEAAAAIAoAAAAAAABOPgAAAAAAAAsAAAAEAAAAIAoAAAAA
+AABlPgAAAAAAAAsAAAAEAAAAIAoAAAAAAACzPgAAAAAAAAsAAAAEAAAAYAAAAAAAAADH
+PgAAAAAAAAsAAAAEAAAAcAAAAAAAAAAGPwAAAAAAAAsAAAAEAAAAgC4AAAAAAAAWPwAA
+AAAAAAsAAAAEAAAAgC4AAAAAAAAjPwAAAAAAAAIAAAD5AAAA/P////////9QPwAAAAAA
+AAsAAAAEAAAAYAAAAAAAAAD8PwAAAAAAAAsAAAAEAAAAYAAAAAAAAAAWQAAAAAAAAAsA
+AAAEAAAAYAAAAAAAAABvQAAAAAAAAAsAAAAEAAAAwAkAAAAAAACgQAAAAAAAAAsAAAAE
+AAAAwAkAAAAAAACBQwAAAAAAAAsAAAACAAAAgAEAAAAAAACIQwAAAAAAAAsAAAACAAAA
+mAEAAAAAAAA3RAAAAAAAAAsAAAAEAAAA4CQAAAAAAABmRAAAAAAAAAsAAAAEAAAAoB4A
+AAAAAACSRAAAAAAAAAsAAAAEAAAAICgAAAAAAADBRAAAAAAAAAsAAAAEAAAAQCsAAAAA
+AADxRAAAAAAAAAsAAAAEAAAA4C0AAAAAAAAhRQAAAAAAAAsAAAAEAAAA4CQAAAAAAABT
+RgAAAAAAAAIAAAA2AQAA/P////////+8RwAAAAAAAAsAAAACAAAAmAEAAAAAAADnRwAA
+AAAAAAsAAAABAAAAwDsAAAAAAACpSQAAAAAAAAIAAAAQAQAA/P////////9+SgAAAAAA
+AAIAAAAQAQAA/P/////////JSgAAAAAAAAIAAAAQAQAA/P////////+nTAAAAAAAAAsA
+AAAEAAAAAEcAAAAAAAArTQAAAAAAAAsAAAAEAAAAYEcAAAAAAAAJTgAAAAAAAAIAAADe
+AAAA/P////////8qTgAAAAAAAAsAAAACAAAAoAEAAAAAAAAyTgAAAAAAAAIAAAD5AAAA
+/P////////+vTgAAAAAAAAIAAABSAQAA/P////////8vTwAAAAAAAAIAAAAyAAAA/P//
+//////9kTwAAAAAAAAIAAABBAQAA/P////////+YTwAAAAAAAAIAAABBAQAA/P//////
+///ETwAAAAAAAAIAAABBAQAA/P////////8XUAAAAAAAAAIAAABBAQAA/P////////9V
+UAAAAAAAAAIAAABBAQAA/P////////8PUQAAAAAAAAsAAACZAAAAAAAAAAAAAAAbUQAA
+AAAAAAsAAAB3AQAAAAAAAAAAAAAnUQAAAAAAAAsAAACDAAAAAAAAAAAAAAB6UwAAAAAA
+AAIAAABBAQAA/P/////////8UwAAAAAAAAIAAACLAAAA/P////////8sVAAAAAAAAAIA
+AACLAAAA/P////////8GVQAAAAAAAAIAAAA0AAAA/P////////8VVQAAAAAAAAIAAAA+
+AQAA/P////////9MVQAAAAAAAAIAAAB+AQAA/P////////9VWgAAAAAAAAIAAAB0AAAA
+/P////////+LWgAAAAAAAAIAAAD5AAAA/P////////+lWgAAAAAAAAIAAAD5AAAA/P//
+///////CWgAAAAAAAAsAAAACAAAAeBYAAAAAAADHWgAAAAAAAAIAAAD5AAAA/P//////
+//8IWwAAAAAAAAIAAABOAAAA/P////////+gWwAAAAAAAAIAAAA6AQAA/P////////+z
+WwAAAAAAAAIAAAB7AAAA/P/////////EXAAAAAAAAAIAAABpAQAA/P////////9tXQAA
+AAAAAAIAAAD5AAAA/P/////////4XgAAAAAAAAIAAAApAAAA/P////////8ZXwAAAAAA
+AAIAAAB1AQAA/P////////9aXwAAAAAAAAIAAAApAAAA/P////////+LXwAAAAAAAAIA
+AAApAAAA/P////////++XwAAAAAAAAIAAAB1AQAA/P////////8PYAAAAAAAAAIAAAAp
+AAAA/P////////+YYAAAAAAAAAIAAAApAAAA/P/////////LYAAAAAAAAAIAAAB1AQAA
+/P////////8iYQAAAAAAAAIAAAApAAAA/P////////9VYQAAAAAAAAIAAAArAQAA/P//
+//////+EYQAAAAAAAAIAAAAfAAAA/P////////+SYQAAAAAAAAIAAABOAQAA/P//////
+///3YQAAAAAAAAIAAABMAQAA/P////////8XYgAAAAAAAAIAAABMAQAA/P////////8d
+YwAAAAAAAAsAAAAEAQAAAAAAAAAAAAArYwAAAAAAAAsAAAAVAAAAAAAAAAAAAAA8YwAA
+AAAAAAIAAABAAQAA/P////////+TYwAAAAAAAAIAAABMAQAA/P////////8/ZgAAAAAA
+AAIAAAAQAQAA/P////////+PZgAAAAAAAAIAAABSAQAA/P////////+haAAAAAAAAAIA
+AADEAAAA/P////////9jaQAAAAAAAAsAAAACAAAAgBYAAAAAAACiaQAAAAAAAAIAAACi
+AQAA/P/////////sagAAAAAAAAIAAABMAQAA/P////////8WawAAAAAAAAIAAABOAAAA
+/P////////8hawAAAAAAAAIAAACgAAAA/P////////9EawAAAAAAAAIAAABcAAAA/P//
+//////9cawAAAAAAAAIAAACGAAAA/P////////+MawAAAAAAAAIAAACcAQAA/P//////
+//+nawAAAAAAAAIAAAAOAAAA/P/////////CawAAAAAAAAIAAAAtAQAA/P////////+5
+bAAAAAAAAAIAAAAMAQAA/P/////////nbAAAAAAAAAIAAABMAQAA/P////////8DbQAA
+AAAAAAIAAABMAQAA/P////////8vbQAAAAAAAAIAAAAMAQAA/P////////+BbQAAAAAA
+AAIAAABMAQAA/P////////+mbQAAAAAAAAIAAABMAQAA/P////////+4bQAAAAAAAAIA
+AAAMAQAA/P////////8EbgAAAAAAAAIAAAAQAQAA/P////////9LbgAAAAAAAAIAAABM
+AQAA/P////////9qbgAAAAAAAAIAAABMAQAA/P////////+MbgAAAAAAAAIAAABMAQAA
+/P////////8DbwAAAAAAAAIAAABMAQAA/P////////8ibwAAAAAAAAIAAABMAQAA/P//
+//////9PbwAAAAAAAAIAAABMAQAA/P////////95bwAAAAAAAAIAAABOAAAA/P//////
+//+nbwAAAAAAAAIAAACgAAAA/P////////+1bwAAAAAAAAIAAABMAQAA/P/////////A
+bwAAAAAAAAIAAACgAAAA/P////////8+cAAAAAAAAAIAAABMAQAA/P////////9VcAAA
+AAAAAAIAAABOAAAA/P////////++cwAAAAAAAAsAAAACAAAA0hsAAAAAAAAsdQAAAAAA
+AAsAAAACAAAA4BsAAAAAAAAxdQAAAAAAAAIAAAD5AAAA/P////////9CdQAAAAAAAAsA
+AAACAAAAwBsAAAAAAABKdQAAAAAAAAIAAAD5AAAA/P////////+mdQAAAAAAAAIAAAAy
+AAAA/P/////////NdQAAAAAAAAIAAAAyAAAA/P////////9adwAAAAAAAAIAAAAyAAAA
+/P////////91dwAAAAAAAAIAAAAyAAAA/P////////+NdwAAAAAAAAIAAAAyAAAA/P//
+//////8VeAAAAAAAAAIAAAAyAAAA/P////////+aeAAAAAAAAAIAAABOAAAA/P//////
+//+yeAAAAAAAAAIAAABMAQAA/P////////+6eAAAAAAAAAIAAABXAAAA/P////////8k
+eQAAAAAAAAIAAACBAQAA/P////////9XeQAAAAAAAAIAAAAqAQAA/P/////////geQAA
+AAAAAAIAAAA2AQAA/P////////8ZegAAAAAAAAIAAADNAAAA/P////////99fQAAAAAA
+AAIAAACuAAAA/P////////+QfQAAAAAAAAIAAABpAQAA/P////////+/fQAAAAAAAAIA
+AABpAQAA/P/////////bfQAAAAAAAAIAAABpAQAA/P/////////ffgAAAAAAAAIAAABM
+AQAA/P////////8WfwAAAAAAAAIAAABOAAAA/P////////8ygQAAAAAAAAIAAAAyAAAA
+/P////////9hgQAAAAAAAAIAAADeAAAA/P////////+CgQAAAAAAAAsAAAACAAAAQBwA
+AAAAAACKgQAAAAAAAAIAAAD5AAAA/P////////8IggAAAAAAAAIAAACyAQAA/P//////
+//9HggAAAAAAAAIAAABMAQAA/P/////////VggAAAAAAAAIAAABMAQAA/P////////8N
+gwAAAAAAAAIAAABiAQAA/P////////9sgwAAAAAAAAIAAABiAQAA/P////////+ngwAA
+AAAAAAIAAABiAQAA/P////////8VhAAAAAAAAAsAAAACAAAAGDEAAAAAAABdhAAAAAAA
+AAIAAACVAQAA/P////////+WhAAAAAAAAAIAAABMAQAA/P////////+9hAAAAAAAAAIA
+AABMAQAA/P/////////1hAAAAAAAAAIAAABiAQAA/P////////8hhQAAAAAAAAsAAADu
+AAAAAAAAAAAAAAAshQAAAAAAAAsAAABDAAAAAAAAAAAAAAA3hQAAAAAAAAsAAADjAAAA
+AAAAAAAAAABHhQAAAAAAAAIAAACdAQAA/P////////9shQAAAAAAAAIAAABiAQAA/P//
+///////OhQAAAAAAAAIAAACAAQAA/P////////8AhgAAAAAAAAIAAAAzAQAA/P//////
+//8IhgAAAAAAAAIAAACLAAAA/P/////////2hgAAAAAAAAIAAABMAQAA/P////////9y
+hwAAAAAAAAIAAADwAAAA/P////////8AiAAAAAAAAAIAAABiAQAA/P////////+hiAAA
+AAAAAAIAAAA0AAAA/P////////+wiAAAAAAAAAIAAAA+AQAA/P/////////QiAAAAAAA
+AAIAAACqAQAA/P////////9YjgAAAAAAAAIAAADcAAAA/P////////9/jgAAAAAAAAIA
+AAD5AAAA/P////////+ZjgAAAAAAAAIAAAD5AAAA/P////////+2jgAAAAAAAAsAAAAC
+AAAAIDEAAAAAAAC7jgAAAAAAAAIAAAD5AAAA/P////////8GjwAAAAAAAAIAAABOAAAA
+/P/////////JjwAAAAAAAAIAAAD1AAAA/P/////////njwAAAAAAAAIAAABZAQAA/P//
+///////6jwAAAAAAAAIAAAA6AAAA/P/////////ckAAAAAAAAAIAAAAaAQAA/P//////
+///6kAAAAAAAAAsAAAACAAAAQDEAAAAAAAAlkQAAAAAAAAIAAAD5AAAA/P////////+h
+kgAAAAAAAAIAAAApAAAA/P////////++kgAAAAAAAAIAAAB1AQAA/P//////////kgAA
+AAAAAAIAAAApAAAA/P////////8wkwAAAAAAAAIAAAApAAAA/P////////9jkwAAAAAA
+AAIAAAB1AQAA/P////////+0kwAAAAAAAAIAAAApAAAA/P////////89lAAAAAAAAAIA
+AAApAAAA/P////////9wlAAAAAAAAAIAAAB1AQAA/P/////////HlAAAAAAAAAIAAAAp
+AAAA/P////////8wlQAAAAAAAAIAAADxAAAA/P////////9ZlQAAAAAAAAIAAAArAQAA
+/P////////+IlQAAAAAAAAIAAAAfAAAA/P////////+WlQAAAAAAAAIAAABOAQAA/P//
+///////UlQAAAAAAAAIAAABMAQAA/P/////////0lQAAAAAAAAIAAABMAQAA/P//////
+//88lwAAAAAAAAsAAADJAAAAAAAAAAAAAABFlwAAAAAAAAsAAAAcAQAAAAAAAAAAAABO
+lwAAAAAAAAsAAAAAAQAAAAAAAAAAAABflwAAAAAAAAIAAABAAQAA/P////////+jlwAA
+AAAAAAIAAABOAAAA/P////////9CmgAAAAAAAAIAAAAQAQAA/P////////9OmwAAAAAA
+AAIAAACyAQAA/P////////9SnAAAAAAAAAIAAAAyAAAA/P////////9knAAAAAAAAAIA
+AAAyAAAA/P////////9znAAAAAAAAAsAAAAEAAAAjFEAAAAAAACRnAAAAAAAAAsAAAAE
+AAAAmFEAAAAAAAC9nAAAAAAAAAsAAAAEAAAAYFAAAAAAAAD3nAAAAAAAAAsAAAACAAAA
+YDEAAAAAAAAonQAAAAAAAAsAAAACAAAAgDkAAAAAAABXnQAAAAAAAAsAAAACAAAAIDQA
+AAAAAABenQAAAAAAAAsAAAACAAAAJDQAAAAAAACLnwAAAAAAAAIAAAA3AQAA/P//////
+//9eoAAAAAAAAAIAAABMAQAA/P////////+IoAAAAAAAAAIAAABOAAAA/P////////+V
+oAAAAAAAAAIAAAAhAAAA/P////////8NoQAAAAAAAAIAAAAiAQAA/P////////+zoQAA
+AAAAAAIAAABWAAAA/P/////////joQAAAAAAAAIAAACnAAAA/P/////////+oQAAAAAA
+AAIAAADlAAAA/P////////8ZogAAAAAAAAIAAAA7AAAA/P////////+GogAAAAAAAAIA
+AABwAQAA/P////////+vogAAAAAAAAIAAABMAQAA/P/////////aogAAAAAAAAIAAABw
+AQAA/P////////9towAAAAAAAAIAAABMAQAA/P////////+iowAAAAAAAAIAAABMAQAA
+/P/////////4owAAAAAAAAIAAABMAQAA/P////////8mpAAAAAAAAAIAAABMAQAA/P//
+//////84pAAAAAAAAAIAAABwAQAA/P////////+OpAAAAAAAAAIAAAAQAQAA/P//////
+//9XpQAAAAAAAAIAAAAhAAAA/P////////9lpQAAAAAAAAIAAABMAQAA/P////////9w
+pQAAAAAAAAIAAAAhAAAA/P/////////+pQAAAAAAAAIAAABMAQAA/P////////8VpgAA
+AAAAAAIAAABOAAAA/P////////9ZpgAAAAAAAAIAAACTAAAA/P////////9xpgAAAAAA
+AAsAAAACAAAAZD0AAAAAAAB+pgAAAAAAAAIAAAAyAAAA/P////////+1pgAAAAAAAAIA
+AAAyAAAA/P/////////dpgAAAAAAAAIAAAAyAAAA/P/////////cpwAAAAAAAAIAAABM
+AQAA/P/////////aqAAAAAAAAAIAAACLAQAA/P////////8HqQAAAAAAAAsAAAACAAAA
+qD4AAAAAAAB2qQAAAAAAAAsAAAACAAAAwD4AAAAAAACCqQAAAAAAAAIAAAACAAAAvD4A
+AAAAAACaqQAAAAAAAAsAAAACAAAAwj4AAAAAAADhqgAAAAAAAAsAAAAEAAAA/FEAAAAA
+AAAAqwAAAAAAAAsAAAAEAAAACFIAAAAAAAAfqwAAAAAAAAsAAAAEAAAAvFIAAAAAAADA
+qwAAAAAAAAsAAAAEAAAARFIAAAAAAADZqwAAAAAAAAIAAAAyAAAA/P/////////4qwAA
+AAAAAAsAAAAEAAAAUFIAAAAAAAANrAAAAAAAAAIAAAAyAAAA/P////////8vrAAAAAAA
+AAIAAAAyAAAA/P////////9FrAAAAAAAAAsAAAAEAAAAXFIAAAAAAABarAAAAAAAAAIA
+AAAyAAAA/P////////94rAAAAAAAAAIAAAAyAAAA/P////////+MrAAAAAAAAAsAAAAE
+AAAAjFIAAAAAAACvrAAAAAAAAAsAAAAEAAAAwFEAAAAAAADbrgAAAAAAAAIAAADxAAAA
+/P////////+xsQAAAAAAAAIAAAAYAAAA/P////////9FsgAAAAAAAAsAAAAFAAAAAAAA
+AAAAAABKsgAAAAAAAAIAAAA2AQAA/P////////9WsgAAAAAAAAsAAAAFAAAAIAEAAAAA
+AABbsgAAAAAAAAIAAAA2AQAA/P////////9isgAAAAAAAAsAAAAFAAAACAAAAAAAAABp
+sgAAAAAAAAsAAAAFAAAAiAAAAAAAAACMsgAAAAAAAAIAAAAFAAAAAgAAAAAAAACTsgAA
+AAAAAAIAAAAFAAAA/P////////+csgAAAAAAAAIAAAAFAAAA/v////////+qsgAAAAAA
+AAIAAAAFAAAAAgAAAAAAAADOsgAAAAAAAAIAAAAFAAAAAgAAAAAAAADdsgAAAAAAAAIA
+AAAFAAAAAgAAAAAAAADvsgAAAAAAAAIAAAAFAAAAAgAAAAAAAAASswAAAAAAAAIAAAAF
+AAAAAgAAAAAAAAA4swAAAAAAAAIAAAAFAAAAAgAAAAAAAABGswAAAAAAAAIAAAAFAAAA
+AgAAAAAAAABPswAAAAAAAAIAAAAFAAAAAgAAAAAAAAC8swAAAAAAAAsAAAAFAAAAIAEA
+AAAAAAD8swAAAAAAAAIAAAAFAAAAAgAAAAAAAACqtAAAAAAAAAsAAAAFAAAAIAEAAAAA
+AADJtAAAAAAAAAIAAAAFAAAAAgAAAAAAAADjtAAAAAAAAAsAAAAFAAAAIAEAAAAAAADp
+tAAAAAAAAAEAAAAFAAAAHgEAAAAAAAAUtQAAAAAAAAsAAAAFAAAAIgEAAAAAAAAbtQAA
+AAAAAAsAAAAFAAAAIAEAAAAAAAC5tQAAAAAAAAsAAAAFAAAAoAEAAAAAAAD7tQAAAAAA
+AAIAAAAoAQAA/P////////9StwAAAAAAAAsAAAACAAAA+D4AAAAAAAB4uAAAAAAAAAsA
+AAACAAAA6D4AAAAAAACfuQAAAAAAAAIAAABxAAAA/P////////8jvQAAAAAAAAIAAAAC
+AAAAQD8AAAAAAAA+vQAAAAAAAAsAAAACAAAASD8AAAAAAADRvgAAAAAAAAsAAAACAAAA
+SD8AAAAAAAD/vgAAAAAAAAsAAAACAAAAQD8AAAAAAAAGvwAAAAAAAAsAAAACAAAASD8A
+AAAAAABUvwAAAAAAAAIAAAACAAAAPD8AAAAAAABxvwAAAAAAAAIAAAACAAAAPD8AAAAA
+AAB+vwAAAAAAAAsAAAACAAAAQD8AAAAAAACFvwAAAAAAAAsAAAACAAAASD8AAAAAAACk
+wAAAAAAAAAIAAAAGAQAA/P////////+3wAAAAAAAAAIAAAAaAQAA/P/////////uwAAA
+AAAAAAIAAAAaAQAA/P////////8ZwQAAAAAAAAIAAAAaAQAA/P////////9ZwQAAAAAA
+AAIAAACBAQAA/P////////+MwQAAAAAAAAIAAAAqAQAA/P////////8lwgAAAAAAAAIA
+AAA2AQAA/P////////9lwgAAAAAAAAIAAABnAAAA/P/////////QxQAAAAAAAAIAAAA+
+AQAA/P/////////WxQAAAAAAAAIAAAA0AAAA/P/////////nxQAAAAAAAAIAAADPAAAA
+/P/////////FxwAAAAAAAAIAAACRAQAA/P/////////TxwAAAAAAAAIAAABMAQAA/P//
+///////DygAAAAAAAAIAAAAyAAAA/P/////////WywAAAAAAAAIAAADeAAAA/P//////
+///8ywAAAAAAAAsAAAACAAAAYEAAAAAAAAAEzAAAAAAAAAIAAAD5AAAA/P////////+0
+zAAAAAAAAAsAAAACAAAARFUAAAAAAAC5zAAAAAAAAAIAAAD5AAAA/P/////////rzAAA
+AAAAAAIAAABTAAAA/P////////8RzQAAAAAAAAIAAACeAQAA/P////////98zQAAAAAA
+AAIAAACoAQAA/P/////////JzQAAAAAAAAIAAAAeAAAA/P/////////vzQAAAAAAAAIA
+AABHAAAA/P////////8TzwAAAAAAAAIAAACnAQAA/P////////+QzwAAAAAAAAIAAACn
+AQAA/P////////+2zwAAAAAAAAIAAACnAQAA/P/////////pzwAAAAAAAAIAAACnAQAA
+/P////////8t0AAAAAAAAAIAAACnAQAA/P////////+Z0AAAAAAAAAsAAAACAAAAOFUA
+AAAAAACg0AAAAAAAAAsAAAACAAAAPlUAAAAAAADs0AAAAAAAAAIAAACVAQAA/P//////
+//970QAAAAAAAAIAAABMAQAA/P////////+D0QAAAAAAAAIAAABHAAAA/P////////+i
+0QAAAAAAAAIAAABMAQAA/P/////////R0QAAAAAAAAIAAACnAQAA/P/////////30QAA
+AAAAAAsAAAAKAQAAAAAAAAAAAAAC0gAAAAAAAAsAAAC5AAAAAAAAAAAAAAAK0gAAAAAA
+AAIAAABGAQAA/P////////9C0gAAAAAAAAIAAADVAAAA/P////////9h0gAAAAAAAAIA
+AACyAAAA/P////////+C0gAAAAAAAAIAAAClAQAA/P////////+P0gAAAAAAAAIAAACJ
+AQAA/P////////+t0gAAAAAAAAIAAAAvAQAA/P/////////S0gAAAAAAAAIAAACnAQAA
+/P////////8w0wAAAAAAAAIAAADAAAAA/P////////9J0wAAAAAAAAIAAACIAAAA/P//
+//////9y0wAAAAAAAAIAAAB4AAAA/P////////+N0wAAAAAAAAIAAAC5AAAA/P//////
+//+V0wAAAAAAAAIAAABIAAAA/P////////+n0wAAAAAAAAIAAACeAQAA/P////////+2
+0wAAAAAAAAIAAAAzAQAA/P////////++0wAAAAAAAAIAAACLAAAA/P////////+s1AAA
+AAAAAAIAAABMAQAA/P////////+Z2AAAAAAAAAIAAAC4AAAA/P////////+t2AAAAAAA
+AAsAAAABAAAAkdgAAAAAAAC02AAAAAAAAAsAAACpAQAAAAAAAAAAAAAW2QAAAAAAAAIA
+AAC4AAAA/P////////+L2QAAAAAAAAIAAAA0AAAA/P////////+a2QAAAAAAAAIAAAA+
+AQAA/P////////+62QAAAAAAAAIAAACdAAAA/P////////942wAAAAAAAAIAAABOAAAA
+/P////////+X3AAAAAAAAAIAAADmAAAA/P////////9J4QAAAAAAAAsAAAACAAAAUFUA
+AAAAAAAB4wAAAAAAAAIAAAA7AQAA/P////////8v5AAAAAAAAAIAAAA7AQAA/P//////
+//935AAAAAAAAAIAAAD5AAAA/P////////+R5AAAAAAAAAIAAAD5AAAA/P////////+2
+5AAAAAAAAAIAAAD5AAAA/P/////////Q5AAAAAAAAAIAAAD5AAAA/P////////9L5gAA
+AAAAAAsAAAACAAAAgFUAAAAAAAB25gAAAAAAAAIAAAD5AAAA/P////////+l6AAAAAAA
+AAIAAAARAAAA/P/////////Z6AAAAAAAAAIAAAApAAAA/P/////////66AAAAAAAAAIA
+AAB1AQAA/P////////876QAAAAAAAAIAAAApAAAA/P////////9s6QAAAAAAAAIAAAAp
+AAAA/P////////+f6QAAAAAAAAIAAAB1AQAA/P/////////w6QAAAAAAAAIAAAApAAAA
+/P////////956gAAAAAAAAIAAAApAAAA/P////////+s6gAAAAAAAAIAAAB1AQAA/P//
+//////8D6wAAAAAAAAIAAAApAAAA/P////////+V6wAAAAAAAAIAAAB1AQAA/P//////
+//977AAAAAAAAAIAAAAoAAAA/P////////+r7AAAAAAAAAIAAAAaAAAA/P/////////J
+7gAAAAAAAAIAAAAaAAAA/P////////+37wAAAAAAAAsAAAACAAAAoFUAAAAAAADD7wAA
+AAAAAAIAAAACAAAAnFUAAAAAAADb7wAAAAAAAAsAAAACAAAAolUAAAAAAAAI8AAAAAAA
+AAsAAAACAAAA0FUAAAAAAADB8QAAAAAAAAIAAACRAAAA/P/////////c8QAAAAAAAAsA
+AAACAAAAwFYAAAAAAAAM8gAAAAAAAAIAAAArAQAA/P////////878gAAAAAAAAsAAAAC
+AAAAIFcAAAAAAAA88wAAAAAAAAsAAAACAAAAAFcAAAAAAABD8wAAAAAAAAIAAACrAAAA
+/P////////9s8wAAAAAAAAIAAAAfAAAA/P////////968wAAAAAAAAIAAABOAQAA/P//
+//////+08wAAAAAAAAIAAABMAQAA/P/////////U8wAAAAAAAAIAAABMAQAA/P//////
+//9p9QAAAAAAAAsAAAAvAAAAAAAAAAAAAACX9QAAAAAAAAsAAAC2AAAAAAAAAAAAAACg
+9QAAAAAAAAsAAABlAQAAAAAAAAAAAACp9QAAAAAAAAsAAADgAAAAAAAAAAAAAACy9QAA
+AAAAAAsAAAAZAAAAAAAAAAAAAAC79QAAAAAAAAsAAAByAQAAAAAAAAAAAADE9QAAAAAA
+AAsAAADnAAAAAAAAAAAAAADN9QAAAAAAAAsAAAD0AAAAAAAAAAAAAADe9QAAAAAAAAIA
+AABAAQAA/P////////8j9gAAAAAAAAIAAABOAAAA/P////////9V9gAAAAAAAAIAAAAz
+AAAA/P////////9d9gAAAAAAAAIAAADsAAAA/P////////9l9gAAAAAAAAIAAADrAAAA
+/P////////+D9gAAAAAAAAIAAACKAAAA/P/////////n+AAAAAAAAAIAAACaAAAA/P//
+///////6+AAAAAAAAAIAAAB1AAAA/P////////+m+QAAAAAAAAIAAACeAQAA/P//////
+//+++QAAAAAAAAIAAAAQAQAA/P////////8h+gAAAAAAAAIAAADZAAAA/P////////8y
++gAAAAAAAAIAAADsAAAA/P////////+v+gAAAAAAAAIAAAAPAAAA/P////////8c+wAA
+AAAAAAIAAABiAAAA/P////////8k+wAAAAAAAAIAAABQAAAA/P////////8v+wAAAAAA
+AAIAAACoAQAA/P/////////++wAAAAAAAAsAAAACAAAAIFgAAAAAAAAw/AAAAAAAAAIA
+AABMAQAA/P////////9G/AAAAAAAAAsAAAACAAAAgFoAAAAAAABz/AAAAAAAAAsAAAAC
+AAAAhFoAAAAAAACJ/AAAAAAAAAIAAABMAQAA/P/////////H/AAAAAAAAAIAAAAmAQAA
+/P////////9P/gAAAAAAAAIAAABeAAAA/P////////90/gAAAAAAAAIAAABYAQAA/P//
+///////6/gAAAAAAAAIAAAChAAAA/P////////8F/wAAAAAAAAIAAAAZAQAA/P//////
+//8S/wAAAAAAAAIAAABbAQAA/P////////+m/wAAAAAAAAIAAAAoAAAA/P////////+9
+AAEAAAAAAAIAAAC9AAAA/P/////////eAAEAAAAAAAIAAAA2AAAA/P/////////pAAEA
+AAAAAAIAAABhAAAA/P/////////IAQEAAAAAAAIAAABMAQAA/P/////////6AQEAAAAA
+AAIAAABMAQAA/P////////+fAgEAAAAAAAIAAABSAAAA/P/////////yAgEAAAAAAAIA
+AACUAAAA/P////////9aAwEAAAAAAAIAAADFAAAA/P////////9xAwEAAAAAAAIAAABO
+AAAA/P////////99AwEAAAAAAAIAAACmAAAA/P////////8IBAEAAAAAAAIAAAAoAQAA
+/P////////95BQEAAAAAAAIAAABGAAAA/P////////+VBQEAAAAAAAIAAAAwAAAA/P//
+//////+xBQEAAAAAAAIAAABKAAAA/P/////////8BQEAAAAAAAIAAAA/AQAA/P//////
+//9cBgEAAAAAAAIAAABNAAAA/P////////9tBgEAAAAAAAIAAABzAQAA/P////////89
+BwEAAAAAAAIAAAAQAQAA/P////////9ZBwEAAAAAAAIAAAC0AQAA/P////////+tBwEA
+AAAAAAIAAABMAQAA/P/////////QBwEAAAAAAAIAAAC9AAAA/P////////8kCAEAAAAA
+AAIAAABMAQAA/P////////8yCAEAAAAAAAIAAABeAAAA/P////////+hCAEAAAAAAAIA
+AAChAAAA/P////////+sCAEAAAAAAAIAAAAZAQAA/P////////9uCQEAAAAAAAIAAACe
+AQAA/P/////////RCQEAAAAAAAIAAACeAQAA/P////////+KCwEAAAAAAAIAAABMAQAA
+/P////////+kCwEAAAAAAAIAAABMAQAA/P/////////5CwEAAAAAAAIAAAAQAQAA/P//
+///////aDQEAAAAAAAIAAADZAAAA/P/////////PDgEAAAAAAAIAAABMAQAA/P//////
+///nDgEAAAAAAAIAAABOAAAA/P////////8MDwEAAAAAAAIAAACeAQAA/P/////////N
+DwEAAAAAAAIAAABsAAAA/P////////8sEAEAAAAAAAIAAAArAQAA/P////////9EEQEA
+AAAAAAIAAAAyAAAA/P////////9qFAEAAAAAAAIAAAARAAAA/P////////8vFgEAAAAA
+AAIAAADTAAAA/P////////8NHgEAAAAAAAIAAABeAAAA/P////////86HgEAAAAAAAIA
+AAA2AQAA/P////////9LHgEAAAAAAAIAAAA2AQAA/P////////98HgEAAAAAAAsAAAAC
+AAAAoGAAAAAAAADPIQEAAAAAAAIAAAAYAAAA/P////////9gIwEAAAAAAAIAAAAoAQAA
+/P////////8cJwEAAAAAAAsAAAACAAAAqmAAAAAAAADQJwEAAAAAAAIAAAD5AAAA/P//
+//////8YKQEAAAAAAAIAAABvAQAA/P////////9ZKgEAAAAAAAIAAABvAQAA/P//////
+///sKwEAAAAAAAIAAAACAAAAQGIAAAAAAAAALAEAAAAAAAsAAAACAAAASGIAAAAAAAAg
+LAEAAAAAAAIAAAACAAAAwGAAAAAAAAAwLAEAAAAAAAsAAAACAAAAyGAAAAAAAAC9LgEA
+AAAAAAsAAAACAAAAwGAAAAAAAADELgEAAAAAAAsAAAACAAAAQGIAAAAAAAB1MAEAAAAA
+AAIAAAAyAAAA/P////////9YMQEAAAAAAAIAAABfAAAA/P////////+aMQEAAAAAAAIA
+AABrAAAA/P/////////GMQEAAAAAAAIAAABfAAAA/P////////8dMgEAAAAAAAIAAABr
+AAAA/P////////9ZMgEAAAAAAAIAAABrAAAA/P////////9KMwEAAAAAAAIAAADmAAAA
+/P////////+nMwEAAAAAAAIAAADmAAAA/P/////////3MwEAAAAAAAIAAACBAQAA/P//
+//////80NAEAAAAAAAIAAAAqAQAA/P////////8zNQEAAAAAAAIAAAA2AQAA/P//////
+//9+NQEAAAAAAAIAAABbAAAA/P/////////DOAEAAAAAAAIAAAA+AQAA/P/////////J
+OAEAAAAAAAIAAAA0AAAA/P/////////YOAEAAAAAAAIAAADPAAAA/P/////////yOgEA
+AAAAAAIAAAC0AQAA/P////////8AOwEAAAAAAAIAAABMAQAA/P////////8QOwEAAAAA
+AAIAAAC0AQAA/P////////+8OwEAAAAAAAIAAABMAQAA/P/////////mOwEAAAAAAAIA
+AABMAQAA/P/////////xOwEAAAAAAAIAAAC0AQAA/P////////+cPwEAAAAAAAIAAACf
+AQAA/P/////////8PwEAAAAAAAIAAACfAQAA/P/////////KQAEAAAAAAAIAAAA2AQAA
+/P////////+yQQEAAAAAAAIAAAAzAAAA/P/////////cQQEAAAAAAAIAAACKAAAA/P//
+//////8yQgEAAAAAAAsAAAACAAAAsGMAAAAAAAAdRgEAAAAAAAIAAAB4AAAA/P//////
+//8lRgEAAAAAAAIAAACNAQAA/P////////81RgEAAAAAAAIAAADqAAAA/P////////9O
+RgEAAAAAAAIAAACNAQAA/P////////9eRgEAAAAAAAIAAADqAAAA/P////////+GRgEA
+AAAAAAIAAAAzAAAA/P////////+NRgEAAAAAAAIAAACNAQAA/P////////+dRgEAAAAA
+AAIAAADqAAAA/P////////9VRwEAAAAAAAIAAACfAQAA/P/////////yRwEAAAAAAAIA
+AACrAAAA/P////////8bSAEAAAAAAAIAAACrAAAA/P////////8xSAEAAAAAAAIAAAA0
+AQAA/P////////9RSAEAAAAAAAIAAACrAAAA/P////////9pSAEAAAAAAAIAAACrAAAA
+/P/////////sSAEAAAAAAAIAAAA0AQAA/P////////8MSQEAAAAAAAIAAACrAAAA/P//
+//////94SQEAAAAAAAIAAACrAAAA/P////////+KSQEAAAAAAAIAAACrAAAA/P//////
+//+cSQEAAAAAAAIAAACrAAAA/P////////+uSQEAAAAAAAIAAACrAAAA/P/////////A
+SQEAAAAAAAIAAACrAAAA/P/////////ISQEAAAAAAAIAAACNAQAA/P/////////YSQEA
+AAAAAAIAAADqAAAA/P/////////8SQEAAAAAAAIAAACrAAAA/P////////8TSgEAAAAA
+AAIAAACrAAAA/P////////8sSgEAAAAAAAIAAACrAAAA/P////////9DSgEAAAAAAAIA
+AACrAAAA/P////////9aSgEAAAAAAAIAAACrAAAA/P////////9tSgEAAAAAAAIAAACN
+AQAA/P////////99SgEAAAAAAAIAAADqAAAA/P////////+zSgEAAAAAAAIAAACNAQAA
+/P/////////DSgEAAAAAAAIAAADqAAAA/P/////////9SgEAAAAAAAIAAACfAQAA/P//
+//////9pTAEAAAAAAAIAAACrAAAA/P////////89TQEAAAAAAAIAAAAVAQAA/P//////
+//+yTQEAAAAAAAIAAACfAQAA/P////////9TTwEAAAAAAAIAAACpAAAA/P////////9r
+TwEAAAAAAAIAAADeAAAA/P////////+GTwEAAAAAAAIAAAAxAQAA/P/////////ITwEA
+AAAAAAIAAAAxAQAA/P/////////UTwEAAAAAAAIAAACLAAAA/P////////+uUgEAAAAA
+AAIAAAA2AQAA/P/////////ZUgEAAAAAAAIAAAA2AQAA/P/////////qUgEAAAAAAAIA
+AAA2AQAA/P////////9CUwEAAAAAAAIAAAAxAQAA/P////////9mUwEAAAAAAAIAAACN
+AQAA/P////////92UwEAAAAAAAIAAADqAAAA/P////////+KUwEAAAAAAAIAAACNAQAA
+/P////////+aUwEAAAAAAAIAAADqAAAA/P////////+2UwEAAAAAAAIAAACNAQAA/P//
+///////GUwEAAAAAAAIAAADqAAAA/P/////////uUwEAAAAAAAIAAACNAQAA/P//////
+//8QVAEAAAAAAAIAAADqAAAA/P////////8yVAEAAAAAAAIAAACNAQAA/P////////9C
+VAEAAAAAAAIAAADqAAAA/P////////9dVAEAAAAAAAIAAAAxAQAA/P/////////dVAEA
+AAAAAAIAAAAxAQAA/P/////////3VwEAAAAAAAIAAAA2AQAA/P////////8PWAEAAAAA
+AAIAAAA2AQAA/P////////85WAEAAAAAAAIAAABUAQAA/P/////////CWAEAAAAAAAsA
+AAACAAAAAGQAAAAAAADyWAEAAAAAAAIAAABMAQAA/P////////8IWQEAAAAAAAsAAAAC
+AAAAYGUAAAAAAAAUWQEAAAAAAAsAAAACAAAAZGUAAAAAAAAoWQEAAAAAAAIAAABMAQAA
+/P////////87WQEAAAAAAAsAAAACAAAAQGkAAAAAAABpWQEAAAAAAAIAAABMAQAA/P//
+//////+bWQEAAAAAAAIAAACTAAAA/P////////+yWQEAAAAAAAsAAAACAAAA5G8AAAAA
+AAC/WQEAAAAAAAIAAAAyAAAA/P////////8hWgEAAAAAAAIAAAAyAAAA/P////////9J
+WgEAAAAAAAIAAAAyAAAA/P/////////CWgEAAAAAAAsAAAACAAAAKHEAAAAAAAAjXQEA
+AAAAAAsAAAACAAAAoGcAAAAAAABkXQEAAAAAAAIAAAB/AAAA/P////////9/XQEAAAAA
+AAIAAAB/AAAA/P////////+SXQEAAAAAAAsAAAACAAAAoGcAAAAAAACvXQEAAAAAAAIA
+AABMAQAA/P/////////FXQEAAAAAAAsAAAACAAAAQGwAAAAAAADQXQEAAAAAAAsAAAAC
+AAAARGwAAAAAAADlXQEAAAAAAAIAAABMAQAA/P/////////1XQEAAAAAAAsAAAACAAAA
+UGwAAAAAAAApXgEAAAAAAAIAAABMAQAA/P////////85XgEAAAAAAAsAAAACAAAAcGwA
+AAAAAABtXgEAAAAAAAIAAABMAQAA/P////////+DXgEAAAAAAAsAAAACAAAAoGwAAAAA
+AADWXgEAAAAAAAIAAAB/AAAA/P/////////2XgEAAAAAAAIAAAB/AAAA/P////////8Y
+XwEAAAAAAAIAAAB/AAAA/P////////81XwEAAAAAAAIAAAB/AAAA/P////////9SXwEA
+AAAAAAIAAAB/AAAA/P////////9vXwEAAAAAAAIAAAB/AAAA/P////////+CXwEAAAAA
+AAsAAAACAAAAoGwAAAAAAACfXwEAAAAAAAIAAABMAQAA/P////////+4XwEAAAAAAAsA
+AAACAAAAQG4AAAAAAADzXwEAAAAAAAIAAAB/AAAA/P////////8QYAEAAAAAAAIAAAB/
+AAAA/P////////9eYAEAAAAAAAIAAAB/AAAA/P////////95YAEAAAAAAAIAAAB/AAAA
+/P////////+WYAEAAAAAAAIAAAB/AAAA/P////////+pYAEAAAAAAAsAAAACAAAAQG4A
+AAAAAADGYAEAAAAAAAIAAABMAQAA/P////////9kYgEAAAAAAAIAAAA2AQAA/P//////
+//+BZQEAAAAAAAIAAABvAQAA/P////////8rZwEAAAAAAAIAAABvAQAA/P////////9K
+ZwEAAAAAAAIAAACLAAAA/P////////9rZwEAAAAAAAIAAACLAAAA/P////////+KZwEA
+AAAAAAsAAAACAAAAgHEAAAAAAACWZwEAAAAAAAIAAAACAAAAfHEAAAAAAACuZwEAAAAA
+AAsAAAACAAAAgnEAAAAAAADNZwEAAAAAAAIAAADeAAAA/P/////////tZwEAAAAAAAIA
+AADeAAAA/P////////8SaAEAAAAAAAsAAAABAAAANGcBAAAAAAAdaAEAAAAAAAsAAAAB
+AAAApFgBAAAAAAAoaAEAAAAAAAsAAAABAAAAsVoBAAAAAAAzaAEAAAAAAAsAAAABAAAA
+g1kBAAAAAAA+aAEAAAAAAAsAAAABAAAA7FoBAAAAAABJaAEAAAAAAAsAAAABAAAAd2EB
+AAAAAABUaAEAAAAAAAsAAAABAAAAfGcBAAAAAABfaAEAAAAAAAsAAAABAAAAgmcBAAAA
+AACWaAEAAAAAAAsAAAACAAAAwHEAAAAAAADGaAEAAAAAAAIAAABMAQAA/P/////////c
+aAEAAAAAAAsAAAACAAAAQHMAAAAAAADoaAEAAAAAAAsAAAACAAAARHMAAAAAAAD8aAEA
+AAAAAAIAAABMAQAA/P////////8PaQEAAAAAAAsAAAACAAAAgHUAAAAAAAA9aQEAAAAA
+AAIAAABMAQAA/P////////8uagEAAAAAAAIAAAAyAAAA/P////////+1agEAAAAAAAIA
+AAAyAAAA/P////////8XawEAAAAAAAIAAAAyAAAA/P////////9wawEAAAAAAAIAAAAy
+AAAA/P/////////KawEAAAAAAAIAAAAyAAAA/P/////////bawEAAAAAAAIAAAAyAAAA
+/P////////9IbAEAAAAAAAsAAAACAAAA2H0AAAAAAAAjbgEAAAAAAAsAAAACAAAAhHgA
+AAAAAABDbgEAAAAAAAsAAAACAAAAkHgAAAAAAABsbgEAAAAAAAsAAAACAAAAsHgAAAAA
+AACVbgEAAAAAAAsAAAACAAAA4HgAAAAAAADObgEAAAAAAAIAAAB/AAAA/P/////////u
+bgEAAAAAAAIAAAB/AAAA/P////////8PbwEAAAAAAAIAAAB/AAAA/P////////8+bwEA
+AAAAAAIAAAB/AAAA/P////////9ibwEAAAAAAAIAAAB/AAAA/P////////+GbwEAAAAA
+AAIAAAB/AAAA/P////////+qbwEAAAAAAAIAAAB/AAAA/P/////////ObwEAAAAAAAIA
+AAB/AAAA/P/////////ybwEAAAAAAAIAAAB/AAAA/P////////8acAEAAAAAAAIAAAB/
+AAAA/P////////9NcAEAAAAAAAIAAAB/AAAA/P////////9qcAEAAAAAAAIAAAB/AAAA
+/P/////////QcAEAAAAAAAIAAAB/AAAA/P/////////tcAEAAAAAAAIAAAB/AAAA/P//
+//////8KcQEAAAAAAAIAAAB/AAAA/P////////8ncQEAAAAAAAIAAAB/AAAA/P//////
+//9XcQEAAAAAAAIAAAB/AAAA/P////////90cQEAAAAAAAIAAAB/AAAA/P////////+R
+cQEAAAAAAAIAAAB/AAAA/P////////+ucQEAAAAAAAIAAAB/AAAA/P/////////LcQEA
+AAAAAAIAAAB/AAAA/P/////////dcQEAAAAAAAsAAAACAAAAoHwAAAAAAAAncgEAAAAA
+AAIAAAB/AAAA/P////////9IcgEAAAAAAAIAAAB/AAAA/P////////+RcgEAAAAAAAIA
+AAB/AAAA/P////////+scgEAAAAAAAIAAAB/AAAA/P////////+7cgEAAAAAAAsAAAAC
+AAAAgHgAAAAAAADZcgEAAAAAAAIAAABMAQAA/P/////////wcgEAAAAAAAsAAAACAAAA
+kHgAAAAAAAAOcwEAAAAAAAIAAABMAQAA/P////////8lcwEAAAAAAAsAAAACAAAAsHgA
+AAAAAABDcwEAAAAAAAIAAABMAQAA/P////////9acwEAAAAAAAsAAAACAAAA4HgAAAAA
+AAB4cwEAAAAAAAIAAABMAQAA/P////////+ScwEAAAAAAAsAAAACAAAAoHwAAAAAAACz
+cwEAAAAAAAIAAABMAQAA/P////////8LdgEAAAAAAAIAAAD5AAAA/P////////8edgEA
+AAAAAAIAAAD5AAAA/P////////+UdgEAAAAAAAIAAAD5AAAA/P////////+ndgEAAAAA
+AAIAAAD5AAAA/P/////////5dgEAAAAAAAIAAAD5AAAA/P////////8ndwEAAAAAAAIA
+AAD5AAAA/P////////86dwEAAAAAAAIAAAD5AAAA/P////////+IdwEAAAAAAAIAAAD5
+AAAA/P////////8BfgEAAAAAAAIAAACLAAAA/P////////8ifgEAAAAAAAIAAACLAAAA
+/P////////89gQEAAAAAAAIAAADeAAAA/P////////9dgQEAAAAAAAIAAADeAAAA/P//
+//////+MgQEAAAAAAAsAAAABAAAA630BAAAAAACXgQEAAAAAAAsAAAABAAAAeGgBAAAA
+AACigQEAAAAAAAsAAAABAAAAN2wBAAAAAACtgQEAAAAAAAsAAAABAAAAV2kBAAAAAAC4
+gQEAAAAAAAsAAAABAAAAbWwBAAAAAADDgQEAAAAAAAsAAAABAAAA3XMBAAAAAADOgQEA
+AAAAAAsAAAABAAAAq4ABAAAAAADZgQEAAAAAAAsAAAAlAAAAAAAAAAAAAAASggEAAAAA
+AAsAAAACAAAAIH4AAAAAAABCggEAAAAAAAIAAABMAQAA/P////////9YggEAAAAAAAsA
+AAACAAAAoH8AAAAAAABkggEAAAAAAAsAAAACAAAApH8AAAAAAAB4ggEAAAAAAAIAAABM
+AQAA/P////////+OggEAAAAAAAsAAAACAAAAAIQAAAAAAAC8ggEAAAAAAAIAAABMAQAA
+/P////////+tgwEAAAAAAAIAAAAyAAAA/P////////80hAEAAAAAAAIAAAAyAAAA/P//
+//////+WhAEAAAAAAAIAAAAyAAAA/P/////////vhAEAAAAAAAIAAAAyAAAA/P//////
+//9JhQEAAAAAAAIAAAAyAAAA/P////////9ahQEAAAAAAAIAAAAyAAAA/P////////87
+hgEAAAAAAAsAAAACAAAABIcAAAAAAABZhgEAAAAAAAsAAAACAAAAEIcAAAAAAACBhgEA
+AAAAAAsAAAACAAAAMIcAAAAAAACphgEAAAAAAAsAAAACAAAAYIcAAAAAAADkhgEAAAAA
+AAIAAAB/AAAA/P////////8BhwEAAAAAAAIAAAB/AAAA/P////////8RhwEAAAAAAAsA
+AAACAAAAAIoAAAAAAAA6hwEAAAAAAAsAAAACAAAAAIcAAAAAAABXhwEAAAAAAAIAAABM
+AQAA/P////////9uhwEAAAAAAAsAAAACAAAAEIcAAAAAAACMhwEAAAAAAAIAAABMAQAA
+/P////////+jhwEAAAAAAAsAAAACAAAAMIcAAAAAAADBhwEAAAAAAAIAAABMAQAA/P//
+///////YhwEAAAAAAAsAAAACAAAAYIcAAAAAAAD2hwEAAAAAAAIAAABMAQAA/P//////
+//8QiAEAAAAAAAsAAAACAAAAAIoAAAAAAAAuiAEAAAAAAAIAAABMAQAA/P////////9p
+iAEAAAAAAAsAAAACAAAASIoAAAAAAADikAEAAAAAAAIAAACLAAAA/P////////8DkQEA
+AAAAAAIAAACLAAAA/P////////8klAEAAAAAAAIAAADeAAAA/P////////9ElAEAAAAA
+AAIAAADeAAAA/P////////9plAEAAAAAAAsAAAABAAAAzJABAAAAAAB0lAEAAAAAAAsA
+AAABAAAA9IEBAAAAAAB/lAEAAAAAAAsAAAABAAAAWIgBAAAAAACKlAEAAAAAAAsAAAAB
+AAAA1oIBAAAAAACVlAEAAAAAAAsAAAABAAAAtoUBAAAAAACglAEAAAAAAAsAAAABAAAA
+Qo8BAAAAAACrlAEAAAAAAAsAAAABAAAAkpMBAAAAAAC2lAEAAAAAAAsAAAAlAAAAAAAA
+AAAAAADulAEAAAAAAAsAAAACAAAAoIoAAAAAAAAelQEAAAAAAAIAAABMAQAA/P//////
+//80lQEAAAAAAAsAAAACAAAAgI0AAAAAAABAlQEAAAAAAAsAAAACAAAAhI0AAAAAAABU
+lQEAAAAAAAIAAABMAQAA/P////////9nlQEAAAAAAAsAAAACAAAAgJEAAAAAAACVlQEA
+AAAAAAIAAABMAQAA/P////////+GlgEAAAAAAAIAAAAyAAAA/P////////8NlwEAAAAA
+AAIAAAAyAAAA/P/////////2lwEAAAAAAAIAAAAyAAAA/P////////8HmAEAAAAAAAIA
+AAAyAAAA/P////////+dmQEAAAAAAAsAAAACAAAAhJQAAAAAAAC7mQEAAAAAAAsAAAAC
+AAAAkJQAAAAAAADjmQEAAAAAAAsAAAACAAAAsJQAAAAAAAALmgEAAAAAAAsAAAACAAAA
+4JQAAAAAAABRmgEAAAAAAAIAAAB/AAAA/P////////9umgEAAAAAAAIAAAB/AAAA/P//
+//////+LmgEAAAAAAAIAAAB/AAAA/P////////+5mgEAAAAAAAIAAAAyAAAA/P//////
+///zmgEAAAAAAAIAAAB/AAAA/P////////8QmwEAAAAAAAIAAAB/AAAA/P////////8g
+mwEAAAAAAAsAAAACAAAAYJgAAAAAAABMmwEAAAAAAAsAAAACAAAAgJQAAAAAAABpmwEA
+AAAAAAIAAABMAQAA/P////////+AmwEAAAAAAAsAAAACAAAAkJQAAAAAAACemwEAAAAA
+AAIAAABMAQAA/P////////+1mwEAAAAAAAsAAAACAAAAsJQAAAAAAADTmwEAAAAAAAIA
+AABMAQAA/P/////////qmwEAAAAAAAsAAAACAAAA4JQAAAAAAAAInAEAAAAAAAIAAABM
+AQAA/P////////8inAEAAAAAAAsAAAACAAAAYJgAAAAAAABDnAEAAAAAAAIAAABMAQAA
+/P////////9+nAEAAAAAAAsAAAACAAAAqJgAAAAAAAD7pAEAAAAAAAIAAACLAAAA/P//
+//////8cpQEAAAAAAAIAAACLAAAA/P////////8kqAEAAAAAAAIAAADeAAAA/P//////
+//9EqAEAAAAAAAIAAADeAAAA/P////////9pqAEAAAAAAAsAAAABAAAA5aQBAAAAAAB0
+qAEAAAAAAAsAAAABAAAA0JQBAAAAAAB/qAEAAAAAAAsAAAABAAAAbZwBAAAAAACKqAEA
+AAAAAAsAAAABAAAAr5UBAAAAAACVqAEAAAAAAAsAAAABAAAAY5gBAAAAAACgqAEAAAAA
+AAsAAAABAAAAWqMBAAAAAACrqAEAAAAAAAsAAAABAAAAkqcBAAAAAAC2qAEAAAAAAAsA
+AAAlAAAAAAAAAAAAAAAIAAAAAAAAAAEAAAABAAAAcQcAAAAAAAAQAAAAAAAAAAEAAAAB
+AAAAZQgAAAAAAAAYAAAAAAAAAAEAAAABAAAAZQgAAAAAAAAgAAAAAAAAAAEAAAABAAAA
+ZQgAAAAAAAAoAAAAAAAAAAEAAAABAAAAawgAAAAAAAAwAAAAAAAAAAEAAAABAAAAZQgA
+AAAAAAA4AAAAAAAAAAEAAAABAAAAegcAAAAAAABAAAAAAAAAAAEAAAABAAAAhwcAAAAA
+AABIAAAAAAAAAAEAAAABAAAAawgAAAAAAABQAAAAAAAAAAEAAAABAAAAjgcAAAAAAABY
+AAAAAAAAAAEAAAABAAAAlQcAAAAAAABgAAAAAAAAAAEAAAABAAAAxgcAAAAAAABoAAAA
+AAAAAAEAAAABAAAAqAcAAAAAAABwAAAAAAAAAAEAAAABAAAAugcAAAAAAAB4AAAAAAAA
+AAEAAAABAAAAwAcAAAAAAACAAAAAAAAAAAEAAAABAAAAzgcAAAAAAACIAAAAAAAAAAEA
+AAABAAAAawgAAAAAAACQAAAAAAAAAAEAAAABAAAAawgAAAAAAACYAAAAAAAAAAEAAAAB
+AAAACggAAAAAAACgAAAAAAAAAAEAAAABAAAAEQgAAAAAAACoAAAAAAAAAAEAAAABAAAA
+ZQgAAAAAAACwAAAAAAAAAAEAAAABAAAAGAgAAAAAAAC4AAAAAAAAAAEAAAABAAAAZQgA
+AAAAAADAAAAAAAAAAAEAAAABAAAAHwgAAAAAAADIAAAAAAAAAAEAAAABAAAAJggAAAAA
+AADQAAAAAAAAAAEAAAABAAAAMAgAAAAAAADYAAAAAAAAAAEAAAABAAAAawgAAAAAAADg
+AAAAAAAAAAEAAAABAAAAawgAAAAAAADoAAAAAAAAAAEAAAABAAAAZQgAAAAAAABYAgAA
+AAAAAAEAAAAhAQAAAAAAAAAAAABgAgAAAAAAAAEAAABpAAAAAAAAAAAAAABoAgAAAAAA
+AAEAAADQAAAAAAAAAAAAAABwAgAAAAAAAAEAAADBAAAAAAAAAAAAAAB4AgAAAAAAAAEA
+AACXAQAAAAAAAAAAAACAAgAAAAAAAAEAAADkAAAAAAAAAAAAAACIAgAAAAAAAAEAAABZ
+AAAAAAAAAAAAAACQAgAAAAAAAAEAAADyAAAAAAAAAAAAAACYAgAAAAAAAAEAAAAeAQAA
+AAAAAAAAAACgAgAAAAAAAAEAAABfAQAAAAAAAAAAAACoAgAAAAAAAAEAAADHAAAAAAAA
+AAAAAACwAgAAAAAAAAEAAAANAAAAAAAAAAAAAAC4AgAAAAAAAAEAAAAKAAAAAAAAAAAA
+AADAAgAAAAAAAAEAAABcAQAAAAAAAAAAAADIAgAAAAAAAAEAAACtAAAAAAAAAAAAAADQ
+AgAAAAAAAAEAAACUAQAAAAAAAAAAAADYAgAAAAAAAAEAAABkAQAAAAAAAAAAAADgAgAA
+AAAAAAEAAADNAAAAAAAAAAAAAADoAgAAAAAAAAEAAABBAAAAAAAAAAAAAADwAgAAAAAA
+AAEAAACMAAAAAAAAAAAAAAD4AgAAAAAAAAEAAABcAAAAAAAAAAAAAAAAAwAAAAAAAAEA
+AAAkAAAAAAAAAAAAAAAIAwAAAAAAAAEAAACDAQAAAAAAAAAAAAAQAwAAAAAAAAEAAACu
+AQAAAAAAAAAAAAAYAwAAAAAAAAEAAAAxAAAAAAAAAAAAAAAgAwAAAAAAAAEAAACWAAAA
+AAAAAAAAAAAoAwAAAAAAAAEAAABhAQAAAAAAAAAAAAAwAwAAAAAAAAEAAAAsAAAAAAAA
+AAAAAAA4AwAAAAAAAAEAAAA/AAAAAAAAAAAAAABAAwAAAAAAAAEAAABtAAAAAAAAAAAA
+AABIAwAAAAAAAAEAAACbAQAAAAAAAAAAAABQAwAAAAAAAAEAAACWAQAAAAAAAAAAAABY
+AwAAAAAAAAEAAAAuAQAAAAAAAAAAAABgAwAAAAAAAAEAAADCAAAAAAAAAAAAAABoAwAA
+AAAAAAEAAAB6AQAAAAAAAAAAAABwAwAAAAAAAAEAAAB9AQAAAAAAAAAAAAB4AwAAAAAA
+AAEAAAAdAQAAAAAAAAAAAACAAwAAAAAAAAEAAADvAAAAAAAAAAAAAACIAwAAAAAAAAEA
+AABTAQAAAAAAAAAAAACQAwAAAAAAAAEAAACbAAAAAAAAAAAAAACYAwAAAAAAAAEAAACO
+AQAAAAAAAAAAAACgAwAAAAAAAAEAAADOAAAAAAAAAAAAAACoAwAAAAAAAAEAAADEAAAA
+AAAAAAAAAACwAwAAAAAAAAEAAACPAAAAAAAAAAAAAAC4AwAAAAAAAAEAAAC8AAAAAAAA
+AAAAAADAAwAAAAAAAAEAAABaAAAAAAAAAAAAAADIAwAAAAAAAAEAAADYAAAAAAAAAAAA
+AADQAwAAAAAAAAEAAABPAQAAAAAAAAAAAADYAwAAAAAAAAEAAAAjAQAAAAAAAAAAAADg
+AwAAAAAAAAEAAACxAAAAAAAAAAAAAADoAwAAAAAAAAEAAABKAQAAAAAAAAAAAADwAwAA
+AAAAAAEAAAD8AAAAAAAAAAAAAAD4AwAAAAAAAAEAAAB2AQAAAAAAAAAAAAAABAAAAAAA
+AAEAAABmAQAAAAAAAAAAAAAIBAAAAAAAAAEAAABCAQAAAAAAAAAAAAAQBAAAAAAAAAEA
+AAA1AAAAAAAAAAAAAAAYBAAAAAAAAAEAAADDAAAAAAAAAAAAAAAgBAAAAAAAAAEAAAB0
+AQAAAAAAAAAAAAAoBAAAAAAAAAEAAAAwAQAAAAAAAAAAAAAwBAAAAAAAAAEAAAA6AQAA
+AAAAAAAAAAA4BAAAAAAAAAEAAABAAAAAAAAAAAAAAABABAAAAAAAAAEAAAB7AAAAAAAA
+AAAAAABIBAAAAAAAAAEAAABdAQAAAAAAAAAAAABQBAAAAAAAAAEAAAD3AAAAAAAAAAAA
+AABYBAAAAAAAAAEAAABUAAAAAAAAAAAAAABgBAAAAAAAAAEAAAA5AAAAAAAAAAAAAABo
+BAAAAAAAAAEAAACVAAAAAAAAAAAAAABwBAAAAAAAAAEAAAALAAAAAAAAAAAAAAB4BAAA
+AAAAAAEAAAAIAQAAAAAAAAAAAACABAAAAAAAAAEAAABVAQAAAAAAAAAAAACIBAAAAAAA
+AAEAAABLAQAAAAAAAAAAAACQBAAAAAAAAAEAAAAJAQAAAAAAAAAAAACYBAAAAAAAAAEA
+AACcAQAAAAAAAAAAAACgBAAAAAAAAAEAAABuAAAAAAAAAAAAAACoBAAAAAAAAAEAAAAO
+AAAAAAAAAAAAAACwBAAAAAAAAAEAAAB/AQAAAAAAAAAAAAC4BAAAAAAAAAEAAAC6AAAA
+AAAAAAAAAADABAAAAAAAAAEAAAAkAQAAAAAAAAAAAADIBAAAAAAAAAEAAAAtAQAAAAAA
+AAAAAADQBAAAAAAAAAEAAACKAQAAAAAAAAAAAADYBAAAAAAAAAEAAABJAQAAAAAAAAAA
+AADgBAAAAAAAAAEAAACzAAAAAAAAAAAAAADoBAAAAAAAAAEAAABJAAAAAAAAAAAAAADw
+BAAAAAAAAAEAAABEAQAAAAAAAAAAAAD4BAAAAAAAAAEAAAAXAAAAAAAAAAAAAAAABQAA
+AAAAAAEAAADLAAAAAAAAAAAAAAAIBQAAAAAAAAEAAAB0AAAAAAAAAAAAAAAQBQAAAAAA
+AAEAAAAMAQAAAAAAAAAAAAAYBQAAAAAAAAEAAAANAQAAAAAAAAAAAAAgBQAAAAAAAAEA
+AABrAQAAAAAAAAAAAAAoBQAAAAAAAAEAAAB+AQAAAAAAAAAAAAAwBQAAAAAAAAEAAACa
+AQAAAAAAAAAAAAA4BQAAAAAAAAEAAAASAAAAAAAAAAAAAABABQAAAAAAAAEAAABoAQAA
+AAAAAAAAAABIBQAAAAAAAAEAAAA4AQAAAAAAAAAAAABQBQAAAAAAAAEAAAAgAQAAAAAA
+AAAAAABYBQAAAAAAAAEAAACuAAAAAAAAAAAAAABgBQAAAAAAAAEAAABpAQAAAAAAAAAA
+AABoBQAAAAAAAAEAAAABAAAANVQAAAAAAABwBQAAAAAAAAEAAACsAQAAAAAAAAAAAAB4
+BQAAAAAAAAEAAABBAQAAAAAAAAAAAACIBQAAAAAAAAEAAAB0AQAAAAAAAAAAAACQBQAA
+AAAAAAEAAAAwAQAAAAAAAAAAAACYBQAAAAAAAAEAAAA6AQAAAAAAAAAAAACgBQAAAAAA
+AAEAAABAAAAAAAAAAAAAAACoBQAAAAAAAAEAAAB7AAAAAAAAAAAAAACwBQAAAAAAAAEA
+AAABAAAAUlQAAAAAAAD4HAAAAAAAAAEAAABeAQAAAAAAAAAAAAAAHQAAAAAAAAEAAACA
+AQAAAAAAAAAAAAAIHQAAAAAAAAEAAABxAQAAAAAAAAAAAAAQHQAAAAAAAAEAAACZAQAA
+AAAAAAAAAAAYHQAAAAAAAAEAAABoAAAAAAAAAAAAAAAgHQAAAAAAAAEAAAB8AAAAAAAA
+AAAAAAAoHQAAAAAAAAEAAACfAAAAAAAAAAAAAAAwHQAAAAAAAAEAAABxAAAAAAAAAAAA
+AAA4HQAAAAAAAAEAAAAUAAAAAAAAAAAAAABAHQAAAAAAAAEAAAB9AAAAAAAAAAAAAABI
+HQAAAAAAAAEAAACEAQAAAAAAAAAAAABQHQAAAAAAAAEAAACTAQAAAAAAAAAAAABYHQAA
+AAAAAAEAAACNAAAAAAAAAAAAAABgHQAAAAAAAAEAAADKAAAAAAAAAAAAAABoHQAAAAAA
+AAEAAAAQAAAAAAAAAAAAAABwHQAAAAAAAAEAAAA4AAAAAAAAAAAAAAB4HQAAAAAAAAEA
+AABmAAAAAAAAAAAAAACAHQAAAAAAAAEAAABnAAAAAAAAAAAAAACIHQAAAAAAAAEAAAA8
+AAAAAAAAAAAAAACQHQAAAAAAAAEAAACHAQAAAAAAAAAAAACYHQAAAAAAAAEAAAAiAQAA
+AAAAAAAAAACgHQAAAAAAAAEAAACkAQAAAAAAAAAAAACoHQAAAAAAAAEAAACJAAAAAAAA
+AAAAAACwHQAAAAAAAAEAAACRAQAAAAAAAAAAAAC4HQAAAAAAAAEAAAAWAQAAAAAAAAAA
+AADAHQAAAAAAAAEAAAC3AAAAAAAAAAAAAADIHQAAAAAAAAEAAAA9AQAAAAAAAAAAAADQ
+HQAAAAAAAAEAAAAmAAAAAAAAAAAAAADYHQAAAAAAAAEAAAAbAQAAAAAAAAAAAADgHQAA
+AAAAAAEAAAAdAAAAAAAAAAAAAADoHQAAAAAAAAEAAACCAQAAAAAAAAAAAADwHQAAAAAA
+AAEAAAD6AAAAAAAAAAAAAAD4HQAAAAAAAAEAAAAjAAAAAAAAAAAAAAAAHgAAAAAAAAEA
+AAAtAAAAAAAAAAAAAAAIHgAAAAAAAAEAAAC7AAAAAAAAAAAAAAAQHgAAAAAAAAEAAACY
+AQAAAAAAAAAAAAAYHgAAAAAAAAEAAACFAQAAAAAAAAAAAAAgHgAAAAAAAAEAAACSAQAA
+AAAAAAAAAAAoHgAAAAAAAAEAAABQAQAAAAAAAAAAAAAwHgAAAAAAAAEAAAAFAQAAAAAA
+AAAAAAA4HgAAAAAAAAEAAAASAQAAAAAAAAAAAABAHgAAAAAAAAEAAAABAQAAAAAAAAAA
+AABIHgAAAAAAAAEAAAAnAQAAAAAAAAAAAABQHgAAAAAAAAEAAACFAAAAAAAAAAAAAABY
+HgAAAAAAAAEAAACkAAAAAAAAAAAAAABgHgAAAAAAAAEAAAB6AAAAAAAAAAAAAABoHgAA
+AAAAAAEAAABjAQAAAAAAAAAAAABwHgAAAAAAAAEAAACsAAAAAAAAAAAAAAB4HgAAAAAA
+AAEAAABEAAAAAAAAAAAAAACAHgAAAAAAAAEAAABRAQAAAAAAAAAAAACIHgAAAAAAAAEA
+AABNAQAAAAAAAAAAAACQHgAAAAAAAAEAAACBAAAAAAAAAAAAAACYHgAAAAAAAAEAAAA9
+AAAAAAAAAAAAAACgHgAAAAAAAAEAAABnAQAAAAAAAAAAAACoHgAAAAAAAAEAAADwAAAA
+AAAAAAAAAACwHgAAAAAAAAEAAABFAQAAAAAAAAAAAAC4HgAAAAAAAAEAAAD2AAAAAAAA
+AAAAAADAHgAAAAAAAAEAAADUAAAAAAAAAAAAAADIHgAAAAAAAAEAAAD1AAAAAAAAAAAA
+AADQHgAAAAAAAAEAAABZAQAAAAAAAAAAAADYHgAAAAAAAAEAAADfAAAAAAAAAAAAAADg
+HgAAAAAAAAEAAAA6AAAAAAAAAAAAAADoHgAAAAAAAAEAAABlAAAAAAAAAAAAAADwHgAA
+AAAAAAEAAADpAAAAAAAAAAAAAAD4HgAAAAAAAAEAAABgAQAAAAAAAAAAAAAAHwAAAAAA
+AAEAAABuAQAAAAAAAAAAAAAIHwAAAAAAAAEAAAA8AQAAAAAAAAAAAAAQHwAAAAAAAAEA
+AAAgAAAAAAAAAAAAAAAYHwAAAAAAAAEAAABgAAAAAAAAAAAAAAAgHwAAAAAAAAEAAABH
+AQAAAAAAAAAAAAAoHwAAAAAAAAEAAACtAQAAAAAAAAAAAAAwHwAAAAAAAAEAAABMAAAA
+AAAAAAAAAAA4HwAAAAAAAAEAAACnAAAAAAAAAAAAAABAHwAAAAAAAAEAAAB7AQAAAAAA
+AAAAAABIHwAAAAAAAAEAAADlAAAAAAAAAAAAAABQHwAAAAAAAAEAAAAYAQAAAAAAAAAA
+AABYHwAAAAAAAAEAAAAiAAAAAAAAAAAAAABgHwAAAAAAAAEAAAAOAQAAAAAAAAAAAABo
+HwAAAAAAAAEAAAA7AAAAAAAAAAAAAABwHwAAAAAAAAEAAAATAQAAAAAAAAAAAAB4HwAA
+AAAAAAEAAAD+AAAAAAAAAAAAAACAHwAAAAAAAAEAAACXAAAAAAAAAAAAAACIHwAAAAAA
+AAEAAAAqAAAAAAAAAAAAAACQHwAAAAAAAAEAAABVAAAAAAAAAAAAAACYHwAAAAAAAAEA
+AACeAAAAAAAAAAAAAACgHwAAAAAAAAEAAADtAAAAAAAAAAAAAACoHwAAAAAAAAEAAADc
+AAAAAAAAAAAAAACwHwAAAAAAAAEAAABwAQAAAAAAAAAAAAC4HwAAAAAAAAEAAADbAAAA
+AAAAAAAAAADAHwAAAAAAAAEAAABrAQAAAAAAAAAAAADIHwAAAAAAAAEAAACqAQAAAAAA
+AAAAAADQHwAAAAAAAAEAAAAJAAAAAAAAAAAAAADYHwAAAAAAAAEAAACvAAAAAAAAAAAA
+AADgHwAAAAAAAAEAAAB2AAAAAAAAAAAAAADoHwAAAAAAAAEAAABvAAAAAAAAAAAAAADw
+HwAAAAAAAAEAAAACAQAAAAAAAAAAAAD4HwAAAAAAAAEAAAAGAQAAAAAAAAAAAAAAIAAA
+AAAAAAEAAAAaAQAAAAAAAAAAAAAIIAAAAAAAAAEAAAABAAAABYcAAAAAAAAQIAAAAAAA
+AAEAAABDAQAAAAAAAAAAAAAYIAAAAAAAAAEAAABiAQAAAAAAAAAAAAAoIAAAAAAAAAEA
+AADUAAAAAAAAAAAAAAAwIAAAAAAAAAEAAAD1AAAAAAAAAAAAAAA4IAAAAAAAAAEAAABZ
+AQAAAAAAAAAAAABAIAAAAAAAAAEAAADfAAAAAAAAAAAAAABIIAAAAAAAAAEAAAA6AAAA
+AAAAAAAAAABQIAAAAAAAAAEAAAABAAAAPYcAAAAAAAD4PgAAAAAAAAEAAAABAAAAVrcA
+AAAAAAAAPwAAAAAAAAEAAAABAAAAVrcAAAAAAAAIPwAAAAAAAAEAAAABAAAAfbcAAAAA
+AAAQPwAAAAAAAAEAAAABAAAAfbcAAAAAAAAYPwAAAAAAAAEAAAABAAAApLcAAAAAAAAg
+PwAAAAAAAAEAAAABAAAApLcAAAAAAAAoPwAAAAAAAAEAAAABAAAAy7cAAAAAAAAwPwAA
+AAAAAAEAAAABAAAAy7cAAAAAAAAYQQAAAAAAAAEAAABfAAAAAAAAAAAAAAAgQQAAAAAA
+AAEAAACIAAAAAAAAAAAAAAAoQQAAAAAAAAEAAACPAQAAAAAAAAAAAAAwQQAAAAAAAAEA
+AABwAAAAAAAAAAAAAAA4QQAAAAAAAAEAAABIAAAAAAAAAAAAAABAQQAAAAAAAAEAAADo
+AAAAAAAAAAAAAABIQQAAAAAAAAEAAADGAAAAAAAAAAAAAABQQQAAAAAAAAEAAAAyAQAA
+AAAAAAAAAABYQQAAAAAAAAEAAAA/AQAAAAAAAAAAAABgQQAAAAAAAAEAAAB3AAAAAAAA
+AAAAAABoQQAAAAAAAAEAAAAxAQAAAAAAAAAAAABwQQAAAAAAAAEAAACOAAAAAAAAAAAA
+AAB4QQAAAAAAAAEAAADSAAAAAAAAAAAAAACAQQAAAAAAAAEAAACcAAAAAAAAAAAAAACI
+QQAAAAAAAAEAAAC4AAAAAAAAAAAAAACQQQAAAAAAAAEAAABYAAAAAAAAAAAAAACYQQAA
+AAAAAAEAAACqAAAAAAAAAAAAAACgQQAAAAAAAAEAAABbAAAAAAAAAAAAAACoQQAAAAAA
+AAEAAAAXAQAAAAAAAAAAAACwQQAAAAAAAAEAAAB5AQAAAAAAAAAAAAC4QQAAAAAAAAEA
+AACUAAAAAAAAAAAAAADAQQAAAAAAAAEAAAARAQAAAAAAAAAAAADIQQAAAAAAAAEAAAD4
+AAAAAAAAAAAAAADQQQAAAAAAAAEAAAC0AQAAAAAAAAAAAADYQQAAAAAAAAEAAACpAQAA
+AAAAAAAAAADgQQAAAAAAAAEAAADIAAAAAAAAAAAAAADoQQAAAAAAAAEAAACEAAAAAAAA
+AAAAAADwQQAAAAAAAAEAAAA5AQAAAAAAAAAAAAD4QQAAAAAAAAEAAAArAAAAAAAAAAAA
+AAAAQgAAAAAAAAEAAAB4AQAAAAAAAAAAAAAIQgAAAAAAAAEAAABsAQAAAAAAAAAAAAAQ
+QgAAAAAAAAEAAACQAAAAAAAAAAAAAAAYQgAAAAAAAAEAAAB8AQAAAAAAAAAAAAAgQgAA
+AAAAAAEAAABjAAAAAAAAAAAAAAAoQgAAAAAAAAEAAABXAQAAAAAAAAAAAAAwQgAAAAAA
+AAEAAAAUAQAAAAAAAAAAAAA4QgAAAAAAAAEAAAAPAQAAAAAAAAAAAABAQgAAAAAAAAEA
+AAAWAAAAAAAAAAAAAABIQgAAAAAAAAEAAACIAQAAAAAAAAAAAABQQgAAAAAAAAEAAACC
+AAAAAAAAAAAAAABYQgAAAAAAAAEAAADzAAAAAAAAAAAAAABgQgAAAAAAAAEAAACNAQAA
+AAAAAAAAAABoQgAAAAAAAAEAAADqAAAAAAAAAAAAAABwQgAAAAAAAAEAAACiAAAAAAAA
+AAAAAAB4QgAAAAAAAAEAAABIAQAAAAAAAAAAAACAQgAAAAAAAAEAAACwAQAAAAAAAAAA
+AACIQgAAAAAAAAEAAAATAAAAAAAAAAAAAACQQgAAAAAAAAEAAACpAAAAAAAAAAAAAACY
+QgAAAAAAAAEAAAAMAAAAAAAAAAAAAACgQgAAAAAAAAEAAACjAAAAAAAAAAAAAACoQgAA
+AAAAAAEAAABWAQAAAAAAAAAAAACwQgAAAAAAAAEAAAC+AAAAAAAAAAAAAAC4QgAAAAAA
+AAEAAAD7AAAAAAAAAAAAAADAQgAAAAAAAAEAAABCAAAAAAAAAAAAAADIQgAAAAAAAAEA
+AAA1AQAAAAAAAAAAAADQQgAAAAAAAAEAAACwAAAAAAAAAAAAAADYQgAAAAAAAAEAAAC/
+AAAAAAAAAAAAAADgQgAAAAAAAAEAAAAsAQAAAAAAAAAAAADoQgAAAAAAAAEAAABRAAAA
+AAAAAAAAAADwQgAAAAAAAAEAAABaAQAAAAAAAAAAAAD4QgAAAAAAAAEAAABqAQAAAAAA
+AAAAAAAAQwAAAAAAAAEAAAApAQAAAAAAAAAAAAAIQwAAAAAAAAEAAACvAQAAAAAAAAAA
+AAAQQwAAAAAAAAEAAABNAAAAAAAAAAAAAAAYQwAAAAAAAAEAAADXAAAAAAAAAAAAAAAg
+QwAAAAAAAAEAAAC1AAAAAAAAAAAAAAAoQwAAAAAAAAEAAACfAQAAAAAAAAAAAAAwQwAA
+AAAAAAEAAABQAAAAAAAAAAAAAAA4QwAAAAAAAAEAAACYAAAAAAAAAAAAAABAQwAAAAAA
+AAEAAACjAQAAAAAAAAAAAABIQwAAAAAAAAEAAAC0AAAAAAAAAAAAAABQQwAAAAAAAAEA
+AADdAAAAAAAAAAAAAABYQwAAAAAAAAEAAABGAAAAAAAAAAAAAABgQwAAAAAAAAEAAABP
+AAAAAAAAAAAAAABoQwAAAAAAAAEAAAAwAAAAAAAAAAAAAABwQwAAAAAAAAEAAABFAAAA
+AAAAAAAAAAB4QwAAAAAAAAEAAAA+AAAAAAAAAAAAAACAQwAAAAAAAAEAAAD9AAAAAAAA
+AAAAAACIQwAAAAAAAAEAAABKAAAAAAAAAAAAAACQQwAAAAAAAAEAAACHAAAAAAAAAAAA
+AACYQwAAAAAAAAEAAAA3AAAAAAAAAAAAAACgQwAAAAAAAAEAAAA2AAAAAAAAAAAAAACo
+QwAAAAAAAAEAAAAcAAAAAAAAAAAAAACwQwAAAAAAAAEAAAB5AAAAAAAAAAAAAAC4QwAA
+AAAAAAEAAAALAQAAAAAAAAAAAADAQwAAAAAAAAEAAAByAAAAAAAAAAAAAADIQwAAAAAA
+AAEAAAA7AQAAAAAAAAAAAADQQwAAAAAAAAEAAACeAQAAAAAAAAAAAADYQwAAAAAAAAEA
+AADhAAAAAAAAAAAAAADgQwAAAAAAAAEAAABrAQAAAAAAAAAAAADoQwAAAAAAAAEAAACd
+AAAAAAAAAAAAAADwQwAAAAAAAAEAAACrAQAAAAAAAAAAAAD4QwAAAAAAAAEAAAAlAQAA
+AAAAAAAAAAAARAAAAAAAAAEAAADiAAAAAAAAAAAAAAAIRAAAAAAAAAEAAAAnAAAAAAAA
+AAAAAAAQRAAAAAAAAAEAAACQAQAAAAAAAAAAAAAYRAAAAAAAAAEAAABzAAAAAAAAAAAA
+AAAgRAAAAAAAAAEAAADmAAAAAAAAAAAAAAAoRAAAAAAAAAEAAADWAAAAAAAAAAAAAAAw
+RAAAAAAAAAEAAAD/AAAAAAAAAAAAAAA4RAAAAAAAAAEAAACnAQAAAAAAAAAAAABIRAAA
+AAAAAAEAAAAsAQAAAAAAAAAAAABQRAAAAAAAAAEAAABRAAAAAAAAAAAAAABYRAAAAAAA
+AAEAAABaAQAAAAAAAAAAAABgRAAAAAAAAAEAAABqAQAAAAAAAAAAAABoRAAAAAAAAAEA
+AAApAQAAAAAAAAAAAABwRAAAAAAAAAEAAACxAQAAAAAAAAAAAABQVQAAAAAAAAEAAAAB
+AAAAjOEAAAAAAABYVQAAAAAAAAEAAAABAAAATeEAAAAAAABgVQAAAAAAAAEAAAABAAAA
+VeEAAAAAAABoVQAAAAAAAAEAAAABAAAAweEAAAAAAABwVQAAAAAAAAEAAAABAAAAY+EA
+AAAAAAB4VQAAAAAAAAEAAAABAAAAueEAAAAAAADQVQAAAAAAAAEAAAABAAAABvIAAAAA
+AADYVQAAAAAAAAEAAAABAAAADPAAAAAAAADgVQAAAAAAAAEAAAABAAAAPPAAAAAAAADo
+VQAAAAAAAAEAAAABAAAA//EAAAAAAADwVQAAAAAAAAEAAAABAAAAjvAAAAAAAAD4VQAA
+AAAAAAEAAAABAAAAl/AAAAAAAAAAVgAAAAAAAAEAAAABAAAABvIAAAAAAAAIVgAAAAAA
+AAEAAAABAAAABvIAAAAAAAAQVgAAAAAAAAEAAAABAAAABvIAAAAAAAAYVgAAAAAAAAEA
+AAABAAAABvIAAAAAAAAgVgAAAAAAAAEAAAABAAAABvIAAAAAAAAoVgAAAAAAAAEAAAAB
+AAAAv/AAAAAAAAAwVgAAAAAAAAEAAAABAAAABvIAAAAAAAA4VgAAAAAAAAEAAAABAAAA
+BvIAAAAAAABAVgAAAAAAAAEAAAABAAAABvIAAAAAAABIVgAAAAAAAAEAAAABAAAABvIA
+AAAAAABQVgAAAAAAAAEAAAABAAAAyvAAAAAAAABYVgAAAAAAAAEAAAABAAAA6fAAAAAA
+AABgVgAAAAAAAAEAAAABAAAABvIAAAAAAABoVgAAAAAAAAEAAAABAAAAJPEAAAAAAABw
+VgAAAAAAAAEAAAABAAAARvEAAAAAAAB4VgAAAAAAAAEAAAABAAAABvIAAAAAAACAVgAA
+AAAAAAEAAAABAAAAYPAAAAAAAACIVgAAAAAAAAEAAAABAAAABvIAAAAAAACQVgAAAAAA
+AAEAAAABAAAABvIAAAAAAACYVgAAAAAAAAEAAAABAAAABvIAAAAAAACgVgAAAAAAAAEA
+AAABAAAAfPEAAAAAAACoVgAAAAAAAAEAAAABAAAAh/EAAAAAAACwVgAAAAAAAAEAAAAB
+AAAABvIAAAAAAAC4VgAAAAAAAAEAAAABAAAAl/EAAAAAAADAVgAAAAAAAAEAAAABAAAA
+//EAAAAAAADIVgAAAAAAAAEAAAABAAAA//EAAAAAAADQVgAAAAAAAAEAAAABAAAA4PEA
+AAAAAADYVgAAAAAAAAEAAAABAAAA5vEAAAAAAADgVgAAAAAAAAEAAAABAAAA7PEAAAAA
+AADoVgAAAAAAAAEAAAABAAAA8vEAAAAAAADwVgAAAAAAAAEAAAABAAAA+PEAAAAAAAAg
+VwAAAAAAAAEAAAABAAAAa/MAAAAAAAAoVwAAAAAAAAEAAAABAAAAa/MAAAAAAAAwVwAA
+AAAAAAEAAAABAAAAP/IAAAAAAAA4VwAAAAAAAAEAAAABAAAAa/MAAAAAAABAVwAAAAAA
+AAEAAAABAAAAa/MAAAAAAABIVwAAAAAAAAEAAAABAAAAYfIAAAAAAABQVwAAAAAAAAEA
+AAABAAAAa/MAAAAAAABYVwAAAAAAAAEAAAABAAAAa/MAAAAAAABgVwAAAAAAAAEAAAAB
+AAAAa/MAAAAAAABoVwAAAAAAAAEAAAABAAAAa/MAAAAAAABwVwAAAAAAAAEAAAABAAAA
+a/MAAAAAAAB4VwAAAAAAAAEAAAABAAAAi/IAAAAAAACAVwAAAAAAAAEAAAABAAAAa/MA
+AAAAAACIVwAAAAAAAAEAAAABAAAAa/MAAAAAAACQVwAAAAAAAAEAAAABAAAAa/MAAAAA
+AACYVwAAAAAAAAEAAAABAAAAa/MAAAAAAACgVwAAAAAAAAEAAAABAAAAoPIAAAAAAACo
+VwAAAAAAAAEAAAABAAAAa/MAAAAAAACwVwAAAAAAAAEAAAABAAAAa/MAAAAAAAC4VwAA
+AAAAAAEAAAABAAAAs/IAAAAAAADAVwAAAAAAAAEAAAABAAAASfMAAAAAAADIVwAAAAAA
+AAEAAAABAAAAa/MAAAAAAADQVwAAAAAAAAEAAAABAAAAa/MAAAAAAADYVwAAAAAAAAEA
+AAABAAAAa/MAAAAAAADgVwAAAAAAAAEAAAABAAAAa/MAAAAAAADoVwAAAAAAAAEAAAAB
+AAAAa/MAAAAAAADwVwAAAAAAAAEAAAABAAAA1fIAAAAAAAD4VwAAAAAAAAEAAAABAAAA
+1fIAAAAAAAAAWAAAAAAAAAEAAAABAAAAa/MAAAAAAAAIWAAAAAAAAAEAAAABAAAALfMA
+AAAAAACwYwAAAAAAAAEAAAABAAAAqEYBAAAAAAC4YwAAAAAAAAEAAAABAAAANkIBAAAA
+AADAYwAAAAAAAAEAAAABAAAADUMBAAAAAADIYwAAAAAAAAEAAAABAAAAoUQBAAAAAADQ
+YwAAAAAAAAEAAAABAAAA/0QBAAAAAADYYwAAAAAAAAEAAAABAAAAdkUBAAAAAADgYwAA
+AAAAAAEAAAABAAAAEUYBAAAAAAAocQAAAAAAAAEAAAABAAAAxloBAAAAAAAwcQAAAAAA
+AAEAAAABAAAAyloBAAAAAAA4cQAAAAAAAAEAAAABAAAAz1oBAAAAAABAcQAAAAAAAAEA
+AAABAAAA1FoBAAAAAABIcQAAAAAAAAEAAAABAAAA5loBAAAAAABQcQAAAAAAAAEAAAAB
+AAAA5loBAAAAAABYcQAAAAAAAAEAAAABAAAA2VoBAAAAAABgcQAAAAAAAAEAAAABAAAA
+3loBAAAAAADYfQAAAAAAAAEAAAABAAAAZ2wBAAAAAADgfQAAAAAAAAEAAAABAAAATGwB
+AAAAAADofQAAAAAAAAEAAAABAAAAUGwBAAAAAADwfQAAAAAAAAEAAAABAAAAVWwBAAAA
+AAD4fQAAAAAAAAEAAAABAAAAZ2wBAAAAAAAAfgAAAAAAAAEAAAABAAAAZ2wBAAAAAAAI
+fgAAAAAAAAEAAAABAAAAWmwBAAAAAAAQfgAAAAAAAAEAAAABAAAAX2wBAAAAAABIigAA
+AAAAAAEAAAABAAAAhYgBAAAAAABQigAAAAAAAAEAAAABAAAAbYgBAAAAAABYigAAAAAA
+AAEAAAABAAAAcYgBAAAAAABgigAAAAAAAAEAAAABAAAAdogBAAAAAABoigAAAAAAAAEA
+AAABAAAAhYgBAAAAAABwigAAAAAAAAEAAAABAAAAhYgBAAAAAAB4igAAAAAAAAEAAAAB
+AAAAe4gBAAAAAACAigAAAAAAAAEAAAABAAAAgIgBAAAAAAComAAAAAAAAAEAAAABAAAA
+nZwBAAAAAACwmAAAAAAAAAEAAAABAAAAgpwBAAAAAAC4mAAAAAAAAAEAAAABAAAAhpwB
+AAAAAADAmAAAAAAAAAEAAAABAAAAi5wBAAAAAADImAAAAAAAAAEAAAABAAAAnZwBAAAA
+AADQmAAAAAAAAAEAAAABAAAAnZwBAAAAAADYmAAAAAAAAAEAAAABAAAAkJwBAAAAAADg
+mAAAAAAAAAEAAAABAAAAlZwBAAAAAAAgAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAoAAAA
+AAAAAAEAAAADAAAABwAAAAAAAAAwAAAAAAAAAAEAAAADAAAADgAAAAAAAAA4AAAAAAAA
+AAEAAAADAAAAFQAAAAAAAABAAAAAAAAAAAEAAAADAAAAHAAAAAAAAABIAAAAAAAAAAEA
+AAADAAAAIwAAAAAAAABQAAAAAAAAAAEAAAADAAAAKgAAAAAAAAAoCgAAAAAAAAEAAAAD
+AAAA2QAAAAAAAAAwCgAAAAAAAAEAAAADAAAA3AAAAAAAAABQCgAAAAAAAAEAAAADAAAA
+4gAAAAAAAABYCgAAAAAAAAEAAAADAAAA5QAAAAAAAAB4CgAAAAAAAAEAAAADAAAA9AAA
+AAAAAACACgAAAAAAAAEAAAADAAAA9wAAAAAAAACgCgAAAAAAAAEAAAADAAAA/wAAAAAA
+AACoCgAAAAAAAAEAAAADAAAAAgEAAAAAAADICgAAAAAAAAEAAAADAAAACgEAAAAAAADQ
+CgAAAAAAAAEAAAADAAAADQEAAAAAAADwCgAAAAAAAAEAAAADAAAAFwEAAAAAAAD4CgAA
+AAAAAAEAAAADAAAAGgEAAAAAAAAYCwAAAAAAAAEAAAADAAAAIgEAAAAAAAAgCwAAAAAA
+AAEAAAADAAAAJQEAAAAAAABACwAAAAAAAAEAAAADAAAALwEAAAAAAABICwAAAAAAAAEA
+AAADAAAAMgEAAAAAAABoCwAAAAAAAAEAAAADAAAAOgEAAAAAAABwCwAAAAAAAAEAAAAD
+AAAAPQEAAAAAAACQCwAAAAAAAAEAAAADAAAASAEAAAAAAACYCwAAAAAAAAEAAAADAAAA
+SwEAAAAAAAC4CwAAAAAAAAEAAAADAAAAUwEAAAAAAADACwAAAAAAAAEAAAADAAAAVgEA
+AAAAAADgCwAAAAAAAAEAAAADAAAAXgEAAAAAAADoCwAAAAAAAAEAAAADAAAAYQEAAAAA
+AAAIDAAAAAAAAAEAAAADAAAAaQEAAAAAAAAQDAAAAAAAAAEAAAADAAAAbAEAAAAAAAAw
+DAAAAAAAAAEAAAADAAAAcwEAAAAAAAA4DAAAAAAAAAEAAAADAAAAdgEAAAAAAABYDAAA
+AAAAAAEAAAADAAAAfQEAAAAAAABgDAAAAAAAAAEAAAADAAAAgAEAAAAAAACADAAAAAAA
+AAEAAAADAAAAhwEAAAAAAACIDAAAAAAAAAEAAAADAAAAigEAAAAAAACoDAAAAAAAAAEA
+AAADAAAAnAEAAAAAAACwDAAAAAAAAAEAAAADAAAAnwEAAAAAAADQDAAAAAAAAAEAAAAD
+AAAAqAEAAAAAAADYDAAAAAAAAAEAAAADAAAAqwEAAAAAAAD4DAAAAAAAAAEAAAADAAAA
+sgEAAAAAAAAADQAAAAAAAAEAAAADAAAAtQEAAAAAAAAgDQAAAAAAAAEAAAADAAAAuwEA
+AAAAAAAoDQAAAAAAAAEAAAADAAAAvgEAAAAAAABIDQAAAAAAAAEAAAADAAAAxAEAAAAA
+AABQDQAAAAAAAAEAAAADAAAAxwEAAAAAAABwDQAAAAAAAAEAAAADAAAA0AEAAAAAAAB4
+DQAAAAAAAAEAAAADAAAA0wEAAAAAAACYDQAAAAAAAAEAAAADAAAA3gEAAAAAAACgDQAA
+AAAAAAEAAAADAAAA4QEAAAAAAADADQAAAAAAAAEAAAADAAAA6QEAAAAAAADIDQAAAAAA
+AAEAAAADAAAA7AEAAAAAAADoDQAAAAAAAAEAAAADAAAA8wEAAAAAAADwDQAAAAAAAAEA
+AAADAAAA9gEAAAAAAAAQDgAAAAAAAAEAAAADAAAABQIAAAAAAAAYDgAAAAAAAAEAAAAD
+AAAACAIAAAAAAAA4DgAAAAAAAAEAAAADAAAAEAIAAAAAAABADgAAAAAAAAEAAAADAAAA
+EwIAAAAAAABgDgAAAAAAAAEAAAADAAAAJgIAAAAAAABoDgAAAAAAAAEAAAADAAAAKQIA
+AAAAAACIDgAAAAAAAAEAAAADAAAAMQIAAAAAAACQDgAAAAAAAAEAAAADAAAANAIAAAAA
+AACwDgAAAAAAAAEAAAADAAAAOgIAAAAAAAC4DgAAAAAAAAEAAAADAAAAPQIAAAAAAADY
+DgAAAAAAAAEAAAADAAAASQIAAAAAAADgDgAAAAAAAAEAAAADAAAATAIAAAAAAAAADwAA
+AAAAAAEAAAADAAAAVAIAAAAAAAAIDwAAAAAAAAEAAAADAAAAVwIAAAAAAAAoDwAAAAAA
+AAEAAAADAAAAXwIAAAAAAAAwDwAAAAAAAAEAAAADAAAAYgIAAAAAAABQDwAAAAAAAAEA
+AAADAAAAaQIAAAAAAABYDwAAAAAAAAEAAAADAAAAbAIAAAAAAAB4DwAAAAAAAAEAAAAD
+AAAAdwIAAAAAAACADwAAAAAAAAEAAAADAAAAegIAAAAAAACgDwAAAAAAAAEAAAADAAAA
+ggIAAAAAAACoDwAAAAAAAAEAAAADAAAAhQIAAAAAAADIDwAAAAAAAAEAAAADAAAAjQIA
+AAAAAADQDwAAAAAAAAEAAAADAAAAkAIAAAAAAADwDwAAAAAAAAEAAAADAAAAlwIAAAAA
+AAD4DwAAAAAAAAEAAAADAAAAmgIAAAAAAAAYEAAAAAAAAAEAAAADAAAApAIAAAAAAAAg
+EAAAAAAAAAEAAAADAAAApwIAAAAAAABAEAAAAAAAAAEAAAADAAAAsAIAAAAAAABIEAAA
+AAAAAAEAAAADAAAAswIAAAAAAABoEAAAAAAAAAEAAAADAAAAvQIAAAAAAABwEAAAAAAA
+AAEAAAADAAAAwAIAAAAAAACQEAAAAAAAAAEAAAADAAAAyAIAAAAAAACYEAAAAAAAAAEA
+AAADAAAAywIAAAAAAAC4EAAAAAAAAAEAAAADAAAA0wIAAAAAAADAEAAAAAAAAAEAAAAD
+AAAA1gIAAAAAAADgEAAAAAAAAAEAAAADAAAA3AIAAAAAAADoEAAAAAAAAAEAAAADAAAA
+3wIAAAAAAAAIEQAAAAAAAAEAAAADAAAA6QIAAAAAAAAQEQAAAAAAAAEAAAADAAAA7AIA
+AAAAAAAwEQAAAAAAAAEAAAADAAAA8QIAAAAAAAA4EQAAAAAAAAEAAAADAAAA9AIAAAAA
+AABYEQAAAAAAAAEAAAADAAAA/AIAAAAAAABgEQAAAAAAAAEAAAADAAAA/wIAAAAAAACA
+EQAAAAAAAAEAAAADAAAABgMAAAAAAACIEQAAAAAAAAEAAAADAAAACQMAAAAAAACoEQAA
+AAAAAAEAAAADAAAADwMAAAAAAACwEQAAAAAAAAEAAAADAAAAEgMAAAAAAADQEQAAAAAA
+AAEAAAADAAAADwMAAAAAAADYEQAAAAAAAAEAAAADAAAAGAMAAAAAAAD4EQAAAAAAAAEA
+AAADAAAADwMAAAAAAAAAEgAAAAAAAAEAAAADAAAAHwMAAAAAAAAgEgAAAAAAAAEAAAAD
+AAAADwMAAAAAAAAoEgAAAAAAAAEAAAADAAAAJgMAAAAAAABIEgAAAAAAAAEAAAADAAAA
+DwMAAAAAAABQEgAAAAAAAAEAAAADAAAALQMAAAAAAABwEgAAAAAAAAEAAAADAAAADwMA
+AAAAAAB4EgAAAAAAAAEAAAADAAAANAMAAAAAAACYEgAAAAAAAAEAAAADAAAADwMAAAAA
+AACgEgAAAAAAAAEAAAADAAAAOwMAAAAAAADAEgAAAAAAAAEAAAADAAAADwMAAAAAAADI
+EgAAAAAAAAEAAAADAAAAQgMAAAAAAADoEgAAAAAAAAEAAAADAAAADwMAAAAAAADwEgAA
+AAAAAAEAAAADAAAASQMAAAAAAAAQEwAAAAAAAAEAAAADAAAADwMAAAAAAAAYEwAAAAAA
+AAEAAAADAAAAUAMAAAAAAAA4EwAAAAAAAAEAAAADAAAADwMAAAAAAABAEwAAAAAAAAEA
+AAADAAAAVwMAAAAAAABgEwAAAAAAAAEAAAADAAAADwMAAAAAAABoEwAAAAAAAAEAAAAD
+AAAAXwMAAAAAAACIEwAAAAAAAAEAAAADAAAADwMAAAAAAACQEwAAAAAAAAEAAAADAAAA
+ZwMAAAAAAACwEwAAAAAAAAEAAAADAAAADwMAAAAAAAC4EwAAAAAAAAEAAAADAAAAbwMA
+AAAAAADYEwAAAAAAAAEAAAADAAAADwMAAAAAAADgEwAAAAAAAAEAAAADAAAAdwMAAAAA
+AAAAFAAAAAAAAAEAAAADAAAADwMAAAAAAAAIFAAAAAAAAAEAAAADAAAAfwMAAAAAAAAo
+FAAAAAAAAAEAAAADAAAADwMAAAAAAAAwFAAAAAAAAAEAAAADAAAAhwMAAAAAAABQFAAA
+AAAAAAEAAAADAAAADwMAAAAAAABYFAAAAAAAAAEAAAADAAAAjwMAAAAAAAB4FAAAAAAA
+AAEAAAADAAAADwMAAAAAAACAFAAAAAAAAAEAAAADAAAAlwMAAAAAAACgFAAAAAAAAAEA
+AAADAAAADwMAAAAAAACoFAAAAAAAAAEAAAADAAAAnwMAAAAAAADIFAAAAAAAAAEAAAAD
+AAAADwMAAAAAAADQFAAAAAAAAAEAAAADAAAApwMAAAAAAADwFAAAAAAAAAEAAAADAAAA
+DwMAAAAAAAD4FAAAAAAAAAEAAAADAAAArwMAAAAAAAAYFQAAAAAAAAEAAAADAAAADwMA
+AAAAAAAgFQAAAAAAAAEAAAADAAAAtwMAAAAAAABAFQAAAAAAAAEAAAADAAAADwMAAAAA
+AABIFQAAAAAAAAEAAAADAAAAvwMAAAAAAABoFQAAAAAAAAEAAAADAAAADwMAAAAAAABw
+FQAAAAAAAAEAAAADAAAAxwMAAAAAAACQFQAAAAAAAAEAAAADAAAAzwMAAAAAAACYFQAA
+AAAAAAEAAAADAAAA0gMAAAAAAAC4FQAAAAAAAAEAAAADAAAA2QMAAAAAAADAFQAAAAAA
+AAEAAAADAAAA3AMAAAAAAADgFQAAAAAAAAEAAAADAAAA5wMAAAAAAADoFQAAAAAAAAEA
+AAADAAAA6gMAAAAAAAAIFgAAAAAAAAEAAAADAAAA9gMAAAAAAAAQFgAAAAAAAAEAAAAD
+AAAA+QMAAAAAAAAwFgAAAAAAAAEAAAADAAAACAQAAAAAAAA4FgAAAAAAAAEAAAADAAAA
+CwQAAAAAAABYFgAAAAAAAAEAAAADAAAAGwQAAAAAAABgFgAAAAAAAAEAAAADAAAAHgQA
+AAAAAACAFgAAAAAAAAEAAAADAAAALgQAAAAAAACIFgAAAAAAAAEAAAADAAAAMQQAAAAA
+AACoFgAAAAAAAAEAAAADAAAAOAQAAAAAAACwFgAAAAAAAAEAAAADAAAAOwQAAAAAAADQ
+FgAAAAAAAAEAAAADAAAAQgQAAAAAAADYFgAAAAAAAAEAAAADAAAARQQAAAAAAAD4FgAA
+AAAAAAEAAAADAAAATQQAAAAAAAAAFwAAAAAAAAEAAAADAAAAUAQAAAAAAAAgFwAAAAAA
+AAEAAAADAAAAXgQAAAAAAAAoFwAAAAAAAAEAAAADAAAAYQQAAAAAAABIFwAAAAAAAAEA
+AAADAAAAawQAAAAAAABQFwAAAAAAAAEAAAADAAAAbgQAAAAAAABwFwAAAAAAAAEAAAAD
+AAAAeQQAAAAAAAB4FwAAAAAAAAEAAAADAAAAfAQAAAAAAACYFwAAAAAAAAEAAAADAAAA
+ggQAAAAAAACgFwAAAAAAAAEAAAADAAAAhQQAAAAAAADAFwAAAAAAAAEAAAADAAAAjwQA
+AAAAAADIFwAAAAAAAAEAAAADAAAAkgQAAAAAAADoFwAAAAAAAAEAAAADAAAAmwQAAAAA
+AADwFwAAAAAAAAEAAAADAAAAngQAAAAAAAAQGAAAAAAAAAEAAAADAAAApAQAAAAAAAAY
+GAAAAAAAAAEAAAADAAAApwQAAAAAAAA4GAAAAAAAAAEAAAADAAAArgQAAAAAAABAGAAA
+AAAAAAEAAAADAAAAsQQAAAAAAABgGAAAAAAAAAEAAAADAAAAuAQAAAAAAABoGAAAAAAA
+AAEAAAADAAAAuwQAAAAAAACIGAAAAAAAAAEAAAADAAAAwwQAAAAAAACQGAAAAAAAAAEA
+AAADAAAAxgQAAAAAAACwGAAAAAAAAAEAAAADAAAA0gQAAAAAAAC4GAAAAAAAAAEAAAAD
+AAAA1QQAAAAAAADYGAAAAAAAAAEAAAADAAAA4QQAAAAAAADgGAAAAAAAAAEAAAADAAAA
+5AQAAAAAAAAAGQAAAAAAAAEAAAADAAAA6wQAAAAAAAAIGQAAAAAAAAEAAAADAAAA7gQA
+AAAAAAAoGQAAAAAAAAEAAAADAAAA8wQAAAAAAAAwGQAAAAAAAAEAAAADAAAA9gQAAAAA
+AABQGQAAAAAAAAEAAAADAAAA/wQAAAAAAABYGQAAAAAAAAEAAAADAAAAAgUAAAAAAAB4
+GQAAAAAAAAEAAAADAAAACQUAAAAAAACAGQAAAAAAAAEAAAADAAAADAUAAAAAAACgGQAA
+AAAAAAEAAAADAAAAEQUAAAAAAACoGQAAAAAAAAEAAAADAAAAFAUAAAAAAADIGQAAAAAA
+AAEAAAADAAAAIAUAAAAAAADQGQAAAAAAAAEAAAADAAAAIwUAAAAAAADwGQAAAAAAAAEA
+AAADAAAAKgUAAAAAAAD4GQAAAAAAAAEAAAADAAAALQUAAAAAAAAYGgAAAAAAAAEAAAAD
+AAAANgUAAAAAAAAgGgAAAAAAAAEAAAADAAAAOQUAAAAAAABAGgAAAAAAAAEAAAADAAAA
+RQUAAAAAAABIGgAAAAAAAAEAAAADAAAASAUAAAAAAABoGgAAAAAAAAEAAAADAAAATgUA
+AAAAAABwGgAAAAAAAAEAAAADAAAAUQUAAAAAAACQGgAAAAAAAAEAAAADAAAAWQUAAAAA
+AACYGgAAAAAAAAEAAAADAAAAXAUAAAAAAAC4GgAAAAAAAAEAAAADAAAAYwUAAAAAAADA
+GgAAAAAAAAEAAAADAAAAZgUAAAAAAADgGgAAAAAAAAEAAAADAAAAcwUAAAAAAADoGgAA
+AAAAAAEAAAADAAAAdgUAAAAAAAAIGwAAAAAAAAEAAAADAAAAgAUAAAAAAAAQGwAAAAAA
+AAEAAAADAAAAgwUAAAAAAAAwGwAAAAAAAAEAAAADAAAAkwUAAAAAAAA4GwAAAAAAAAEA
+AAADAAAAlgUAAAAAAABYGwAAAAAAAAEAAAADAAAAnwUAAAAAAABgGwAAAAAAAAEAAAAD
+AAAAogUAAAAAAACAGwAAAAAAAAEAAAADAAAArwUAAAAAAACIGwAAAAAAAAEAAAADAAAA
+sgUAAAAAAACoGwAAAAAAAAEAAAADAAAAuAUAAAAAAACwGwAAAAAAAAEAAAADAAAAuwUA
+AAAAAADQGwAAAAAAAAEAAAADAAAAwgUAAAAAAADYGwAAAAAAAAEAAAADAAAAxQUAAAAA
+AAD4GwAAAAAAAAEAAAADAAAA0QUAAAAAAAAAHAAAAAAAAAEAAAADAAAA1AUAAAAAAAAg
+HAAAAAAAAAEAAAADAAAA2gUAAAAAAAAoHAAAAAAAAAEAAAADAAAA3QUAAAAAAABIHAAA
+AAAAAAEAAAADAAAA5AUAAAAAAABQHAAAAAAAAAEAAAADAAAA5wUAAAAAAABwHAAAAAAA
+AAEAAAADAAAA8AUAAAAAAAB4HAAAAAAAAAEAAAADAAAA8wUAAAAAAACYHAAAAAAAAAEA
+AAADAAAABQYAAAAAAACgHAAAAAAAAAEAAAADAAAACAYAAAAAAADAHAAAAAAAAAEAAAAD
+AAAAEAYAAAAAAADIHAAAAAAAAAEAAAADAAAAEwYAAAAAAADoHAAAAAAAAAEAAAADAAAA
+GgYAAAAAAADwHAAAAAAAAAEAAAADAAAAHQYAAAAAAAAQHQAAAAAAAAEAAAADAAAAJQYA
+AAAAAAAYHQAAAAAAAAEAAAADAAAAKAYAAAAAAAA4HQAAAAAAAAEAAAADAAAAPQYAAAAA
+AABAHQAAAAAAAAEAAAADAAAAQAYAAAAAAABgHQAAAAAAAAEAAAADAAAATwYAAAAAAABo
+HQAAAAAAAAEAAAADAAAAUgYAAAAAAACIHQAAAAAAAAEAAAADAAAAYAYAAAAAAACQHQAA
+AAAAAAEAAAADAAAAYwYAAAAAAACwHQAAAAAAAAEAAAADAAAAgQYAAAAAAAC4HQAAAAAA
+AAEAAAADAAAAhAYAAAAAAADYHQAAAAAAAAEAAAADAAAAjAYAAAAAAADgHQAAAAAAAAEA
+AAADAAAAjwYAAAAAAAAAHgAAAAAAAAEAAAADAAAAmgYAAAAAAAAIHgAAAAAAAAEAAAAD
+AAAAnQYAAAAAAAAoHgAAAAAAAAEAAAADAAAApwYAAAAAAAAwHgAAAAAAAAEAAAADAAAA
+qgYAAAAAAABQHgAAAAAAAAEAAAADAAAAswYAAAAAAABYHgAAAAAAAAEAAAADAAAAtgYA
+AAAAAAB4HgAAAAAAAAEAAAADAAAAvAYAAAAAAACAHgAAAAAAAAEAAAADAAAAvwYAAAAA
+AAAgAAAAAAAAAAEAAAABAAAAAAAAAAAAAAA4AAAAAAAAAAEAAAABAAAAFgEAAAAAAABY
+AAAAAAAAAAEAAAABAAAAQwEAAAAAAAB4AAAAAAAAAAEAAAABAAAAUAIAAAAAAACQAAAA
+AAAAAAEAAAABAAAAXAIAAAAAAADIAAAAAAAAAAEAAAABAAAArQIAAAAAAADgAAAAAAAA
+AAEAAAABAAAAzgIAAAAAAAD4AAAAAAAAAAEAAAABAAAAowQAAAAAAAAQAQAAAAAAAAEA
+AAABAAAA9wQAAAAAAAAwAQAAAAAAAAEAAAABAAAAOwYAAAAAAABQAQAAAAAAAAEAAAAB
+AAAAYgYAAAAAAABwAQAAAAAAAAEAAAABAAAApgYAAAAAAACoAQAAAAAAAAEAAAABAAAA
+WAcAAAAAAADAAQAAAAAAAAEAAAABAAAAcQgAAAAAAADYAQAAAAAAAAEAAAABAAAAzAgA
+AAAAAAD4AQAAAAAAAAEAAAABAAAAMAkAAAAAAAAYAgAAAAAAAAEAAAABAAAAxAkAAAAA
+AAAwAgAAAAAAAAEAAAABAAAA+AoAAAAAAABIAgAAAAAAAAEAAAABAAAAYAsAAAAAAABw
+AgAAAAAAAAEAAAABAAAA0gsAAAAAAADIAgAAAAAAAAEAAAABAAAAKA0AAAAAAADoAgAA
+AAAAAAEAAAABAAAAlA0AAAAAAAAAAwAAAAAAAAEAAAABAAAA2A0AAAAAAAAYAwAAAAAA
+AAEAAAABAAAA/Q0AAAAAAABIAwAAAAAAAAEAAAABAAAAmxAAAAAAAABwAwAAAAAAAAEA
+AAABAAAAfxEAAAAAAACQAwAAAAAAAAEAAAABAAAA4hMAAAAAAADQAwAAAAAAAAEAAAAB
+AAAAahgAAAAAAAD4AwAAAAAAAAEAAAABAAAArhgAAAAAAAAQBAAAAAAAAAEAAAABAAAA
+FxkAAAAAAABQBAAAAAAAAAEAAAABAAAANx8AAAAAAABwBAAAAAAAAAEAAAABAAAAEyAA
+AAAAAACwBAAAAAAAAAEAAAABAAAAfSEAAAAAAADwBAAAAAAAAAEAAAABAAAAbiMAAAAA
+AAAwBQAAAAAAAAEAAAABAAAAlSYAAAAAAABwBQAAAAAAAAEAAAABAAAA6igAAAAAAACw
+BQAAAAAAAAEAAAABAAAA+SwAAAAAAADoBQAAAAAAAAEAAAABAAAAKDsAAAAAAAAIBgAA
+AAAAAAEAAAABAAAApDsAAAAAAABABgAAAAAAAAEAAAABAAAAwDsAAAAAAABYBgAAAAAA
+AAEAAAABAAAA6DsAAAAAAABwBgAAAAAAAAEAAAABAAAA9TsAAAAAAACIBgAAAAAAAAEA
+AAABAAAAFzwAAAAAAACoBgAAAAAAAAEAAAABAAAAgjwAAAAAAADIBgAAAAAAAAEAAAAB
+AAAA9zwAAAAAAADwBgAAAAAAAAEAAAABAAAAbj0AAAAAAAAYBwAAAAAAAAEAAAABAAAA
+AT4AAAAAAAA4BwAAAAAAAAEAAAABAAAARD4AAAAAAABQBwAAAAAAAAEAAAABAAAAej4A
+AAAAAAB4BwAAAAAAAAEAAAABAAAA7T4AAAAAAACYBwAAAAAAAAEAAAABAAAAPz8AAAAA
+AACwBwAAAAAAAAEAAAABAAAAdz8AAAAAAADwBwAAAAAAAAEAAAABAAAAMkEAAAAAAAAI
+CAAAAAAAAAEAAAABAAAAX0EAAAAAAAAgCAAAAAAAAAEAAAABAAAAj0EAAAAAAABQCAAA
+AAAAAAEAAAABAAAA50gAAAAAAABwCAAAAAAAAAEAAAABAAAApUkAAAAAAACQCAAAAAAA
+AAEAAAABAAAA0EkAAAAAAAC4CAAAAAAAAAEAAAABAAAAxEoAAAAAAADYCAAAAAAAAAEA
+AAABAAAA6UoAAAAAAAAYCQAAAAAAAAEAAAABAAAAcEsAAAAAAAA4CQAAAAAAAAEAAAAB
+AAAABEwAAAAAAABYCQAAAAAAAAEAAAABAAAAe0wAAAAAAACICQAAAAAAAAEAAAABAAAA
+/0wAAAAAAAC4CQAAAAAAAAEAAAABAAAAg00AAAAAAADwCQAAAAAAAAEAAAABAAAA4E0A
+AAAAAAAwCgAAAAAAAAEAAAABAAAAJ1QAAAAAAABQCgAAAAAAAAEAAAABAAAANVQAAAAA
+AABoCgAAAAAAAAEAAAABAAAAUlQAAAAAAACACgAAAAAAAAEAAAABAAAAWFQAAAAAAACw
+CgAAAAAAAAEAAAABAAAAsFQAAAAAAADICgAAAAAAAAEAAAABAAAA8VQAAAAAAADoCgAA
+AAAAAAEAAAABAAAAVVUAAAAAAAAACwAAAAAAAAEAAAABAAAAjFUAAAAAAAAwCwAAAAAA
+AAEAAAABAAAAeFYAAAAAAABICwAAAAAAAAEAAAABAAAAi1YAAAAAAABgCwAAAAAAAAEA
+AAABAAAA5lYAAAAAAAB4CwAAAAAAAAEAAAABAAAA7VYAAAAAAACoCwAAAAAAAAEAAAAB
+AAAAdFcAAAAAAADACwAAAAAAAAEAAAABAAAAelcAAAAAAADYCwAAAAAAAAEAAAABAAAA
+qFcAAAAAAADwCwAAAAAAAAEAAAABAAAAQVgAAAAAAAAIDAAAAAAAAAEAAAABAAAAyFgA
+AAAAAABIDAAAAAAAAAEAAAABAAAAdFoAAAAAAABoDAAAAAAAAAEAAAABAAAAlFoAAAAA
+AACIDAAAAAAAAAEAAAABAAAAs1oAAAAAAACoDAAAAAAAAAEAAAABAAAA0FoAAAAAAADA
+DAAAAAAAAAEAAAABAAAA1loAAAAAAADgDAAAAAAAAAEAAAABAAAAOVsAAAAAAAD4DAAA
+AAAAAAEAAAABAAAAalsAAAAAAAAQDQAAAAAAAAEAAAABAAAAcFsAAAAAAAA4DQAAAAAA
+AAEAAAABAAAAylsAAAAAAABQDQAAAAAAAAEAAAABAAAA91sAAAAAAABoDQAAAAAAAAEA
+AAABAAAAG1wAAAAAAACADQAAAAAAAAEAAAABAAAAR1wAAAAAAACYDQAAAAAAAAEAAAAB
+AAAAZlwAAAAAAAC4DQAAAAAAAAEAAAABAAAAzVwAAAAAAADQDQAAAAAAAAEAAAABAAAA
+AF0AAAAAAADoDQAAAAAAAAEAAAABAAAAGF0AAAAAAAAADgAAAAAAAAEAAAABAAAARl0A
+AAAAAAAYDgAAAAAAAAEAAAABAAAATF0AAAAAAAAwDgAAAAAAAAEAAAABAAAAVV0AAAAA
+AABYDgAAAAAAAAEAAAABAAAAAV4AAAAAAABwDgAAAAAAAAEAAAABAAAAG14AAAAAAACI
+DgAAAAAAAAEAAAABAAAAJl4AAAAAAACgDgAAAAAAAAEAAAABAAAAPF4AAAAAAAC4DgAA
+AAAAAAEAAAABAAAAcV4AAAAAAADQDgAAAAAAAAEAAAABAAAAkl4AAAAAAADoDgAAAAAA
+AAEAAAABAAAA014AAAAAAAAQDwAAAAAAAAEAAAABAAAARV8AAAAAAAAwDwAAAAAAAAEA
+AAABAAAAY18AAAAAAABYDwAAAAAAAAEAAAABAAAA+l8AAAAAAAB4DwAAAAAAAAEAAAAB
+AAAAGGAAAAAAAACQDwAAAAAAAAEAAAABAAAAJmAAAAAAAACoDwAAAAAAAAEAAAABAAAA
+cGAAAAAAAADQDwAAAAAAAAEAAAABAAAACmEAAAAAAADwDwAAAAAAAAEAAAABAAAAK2EA
+AAAAAAAIEAAAAAAAAAEAAAABAAAAMWEAAAAAAAAgEAAAAAAAAAEAAAABAAAAMmEAAAAA
+AAA4EAAAAAAAAAEAAAABAAAAOGEAAAAAAABQEAAAAAAAAAEAAAABAAAAOWEAAAAAAABo
+EAAAAAAAAAEAAAABAAAAOmEAAAAAAACIEAAAAAAAAAEAAAABAAAAXmEAAAAAAACoEAAA
+AAAAAAEAAAABAAAAjWEAAAAAAADIEAAAAAAAAAEAAAABAAAAm2EAAAAAAADgEAAAAAAA
+AAEAAAABAAAAnGEAAAAAAAD4EAAAAAAAAAEAAAABAAAAnWEAAAAAAAAoEQAAAAAAAAEA
+AAABAAAAoGEAAAAAAABAEQAAAAAAAAEAAAABAAAAz2EAAAAAAABoEQAAAAAAAAEAAAAB
+AAAAYmIAAAAAAACAEQAAAAAAAAEAAAABAAAAkWIAAAAAAACoEQAAAAAAAAEAAAABAAAA
+AGMAAAAAAADYEQAAAAAAAAEAAAABAAAAFGMAAAAAAAAQEgAAAAAAAAEAAAABAAAASGMA
+AAAAAAAoEgAAAAAAAAEAAAABAAAAUGMAAAAAAABAEgAAAAAAAAEAAAABAAAAWGMAAAAA
+AABYEgAAAAAAAAEAAAABAAAAZGMAAAAAAACAEgAAAAAAAAEAAAABAAAAr2MAAAAAAACY
+EgAAAAAAAAEAAAABAAAAw2MAAAAAAACwEgAAAAAAAAEAAAABAAAA12MAAAAAAADIEgAA
+AAAAAAEAAAABAAAA7GMAAAAAAADgEgAAAAAAAAEAAAABAAAAPmQAAAAAAAD4EgAAAAAA
+AAEAAAABAAAAkGQAAAAAAAAQEwAAAAAAAAEAAAABAAAAm2QAAAAAAAAoEwAAAAAAAAEA
+AAABAAAAt2QAAAAAAABAEwAAAAAAAAEAAAABAAAA8mQAAAAAAABwEwAAAAAAAAEAAAAB
+AAAAFGYAAAAAAACwEwAAAAAAAAEAAAABAAAACmwAAAAAAADIEwAAAAAAAAEAAAABAAAA
+fmwAAAAAAADoEwAAAAAAAAEAAAABAAAAkmwAAAAAAAAIFAAAAAAAAAEAAAABAAAAqmwA
+AAAAAAAoFAAAAAAAAAEAAAABAAAAEG0AAAAAAABIFAAAAAAAAAEAAAABAAAA6m0AAAAA
+AACIFAAAAAAAAAEAAAABAAAADXAAAAAAAACwFAAAAAAAAAEAAAABAAAAgXAAAAAAAADI
+FAAAAAAAAAEAAAABAAAALnEAAAAAAADoFAAAAAAAAAEAAAABAAAAE3IAAAAAAAAAFQAA
+AAAAAAEAAAABAAAAK3IAAAAAAABAFQAAAAAAAAEAAAABAAAAE3UAAAAAAABwFQAAAAAA
+AAEAAAABAAAA3XcAAAAAAACQFQAAAAAAAAEAAAABAAAAUXgAAAAAAACoFQAAAAAAAAEA
+AAABAAAAbXgAAAAAAADQFQAAAAAAAAEAAAABAAAA83gAAAAAAADoFQAAAAAAAAEAAAAB
+AAAA+XgAAAAAAAAYFgAAAAAAAAEAAAABAAAAAHkAAAAAAAA4FgAAAAAAAAEAAAABAAAA
+LXkAAAAAAABYFgAAAAAAAAEAAAABAAAAYHkAAAAAAACAFgAAAAAAAAEAAAABAAAAPXoA
+AAAAAACYFgAAAAAAAAEAAAABAAAAm3oAAAAAAACwFgAAAAAAAAEAAAABAAAA+3wAAAAA
+AADIFgAAAAAAAAEAAAABAAAAJH0AAAAAAADgFgAAAAAAAAEAAAABAAAAZX0AAAAAAAAI
+FwAAAAAAAAEAAAABAAAA930AAAAAAAAgFwAAAAAAAAEAAAABAAAAXn4AAAAAAAA4FwAA
+AAAAAAEAAAABAAAAkH4AAAAAAABgFwAAAAAAAAEAAAABAAAAKH8AAAAAAAB4FwAAAAAA
+AAEAAAABAAAA138AAAAAAACQFwAAAAAAAAEAAAABAAAA3X8AAAAAAACoFwAAAAAAAAEA
+AAABAAAA5X8AAAAAAADAFwAAAAAAAAEAAAABAAAAL4AAAAAAAADYFwAAAAAAAAEAAAAB
+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
+AAAAAADQLwAAAAAAAAEAAAABAAAAo+cAAAAAAADoLwAAAAAAAAEAAAABAAAA2OcAAAAA
+AAAAMAAAAAAAAAEAAAABAAAADegAAAAAAAAYMAAAAAAAAAEAAAABAAAATugAAAAAAAAw
+MAAAAAAAAAEAAAABAAAAVOgAAAAAAABIMAAAAAAAAAEAAAABAAAAZOgAAAAAAABgMAAA
+AAAAAAEAAAABAAAAcugAAAAAAAB4MAAAAAAAAAEAAAABAAAAgOgAAAAAAACQMAAAAAAA
+AAEAAAABAAAAh+gAAAAAAACwMAAAAAAAAAEAAAABAAAArugAAAAAAADIMAAAAAAAAAEA
+AAABAAAAtOgAAAAAAADwMAAAAAAAAAEAAAABAAAAJukAAAAAAAAQMQAAAAAAAAEAAAAB
+AAAAROkAAAAAAAA4MQAAAAAAAAEAAAABAAAA2+kAAAAAAABYMQAAAAAAAAEAAAABAAAA
++ekAAAAAAABwMQAAAAAAAAEAAAABAAAAB+oAAAAAAACIMQAAAAAAAAEAAAABAAAAUeoA
+AAAAAACwMQAAAAAAAAEAAAABAAAA6+oAAAAAAADQMQAAAAAAAAEAAAABAAAADOsAAAAA
+AADoMQAAAAAAAAEAAAABAAAASesAAAAAAAAIMgAAAAAAAAEAAAABAAAAcOwAAAAAAAAo
+MgAAAAAAAAEAAAABAAAAhOwAAAAAAABAMgAAAAAAAAEAAAABAAAApuwAAAAAAABgMgAA
+AAAAAAEAAAABAAAAxO4AAAAAAACAMgAAAAAAAAEAAAABAAAAr+8AAAAAAACYMgAAAAAA
+AAEAAAABAAAA4O8AAAAAAAC4MgAAAAAAAAEAAAABAAAAH/IAAAAAAADYMgAAAAAAAAEA
+AAABAAAAdfMAAAAAAAAQMwAAAAAAAAEAAAABAAAAjPMAAAAAAAA4MwAAAAAAAAEAAAAB
+AAAAH/QAAAAAAABQMwAAAAAAAAEAAAABAAAAU/QAAAAAAABoMwAAAAAAAAEAAAABAAAA
+h/QAAAAAAACQMwAAAAAAAAEAAAABAAAA9vQAAAAAAADAMwAAAAAAAAEAAAABAAAADPUA
+AAAAAAD4MwAAAAAAAAEAAAABAAAA6PUAAAAAAAAQNAAAAAAAAAEAAAABAAAA8PUAAAAA
+AAAoNAAAAAAAAAEAAAABAAAA+PUAAAAAAABANAAAAAAAAAEAAAABAAAABPYAAAAAAABg
+NAAAAAAAAAEAAAABAAAANPYAAAAAAACANAAAAAAAAAEAAAABAAAAa/YAAAAAAACgNAAA
+AAAAAAEAAAABAAAAjPYAAAAAAAC4NAAAAAAAAAEAAAABAAAAofYAAAAAAADQNAAAAAAA
+AAEAAAABAAAA8/YAAAAAAADoNAAAAAAAAAEAAAABAAAARfcAAAAAAAAANQAAAAAAAAEA
+AAABAAAAb/cAAAAAAAAYNQAAAAAAAAEAAAABAAAAyfcAAAAAAAAwNQAAAAAAAAEAAAAB
+AAAA+fcAAAAAAAB4NQAAAAAAAAEAAAABAAAAKPkAAAAAAAC4NQAAAAAAAAEAAAABAAAA
+mgYBAAAAAADQNQAAAAAAAAEAAAABAAAA+gYBAAAAAADwNQAAAAAAAAEAAAABAAAAHwcB
+AAAAAAAwNgAAAAAAAAEAAAABAAAA2QgBAAAAAABINgAAAAAAAAEAAAABAAAATAkBAAAA
+AABoNgAAAAAAAAEAAAABAAAAXwkBAAAAAACINgAAAAAAAAEAAAABAAAAjgkBAAAAAACw
+NgAAAAAAAAEAAAABAAAA3gsBAAAAAADoNgAAAAAAAAEAAAABAAAAeA4BAAAAAAAQNwAA
+AAAAAAEAAAABAAAANA8BAAAAAAAoNwAAAAAAAAEAAAABAAAAUA8BAAAAAABANwAAAAAA
+AAEAAAABAAAAnw8BAAAAAABoNwAAAAAAAAEAAAABAAAAGBABAAAAAACINwAAAAAAAAEA
+AAABAAAAqBABAAAAAAC4NwAAAAAAAAEAAAABAAAAUxEBAAAAAADQNwAAAAAAAAEAAAAB
+AAAAiRIBAAAAAADwNwAAAAAAAAEAAAABAAAABhMBAAAAAAAwOAAAAAAAAAEAAAABAAAA
+VhcBAAAAAABwOAAAAAAAAAEAAAABAAAAJB0BAAAAAACIOAAAAAAAAAEAAAABAAAA6h0B
+AAAAAACoOAAAAAAAAAEAAAABAAAAFh4BAAAAAADYOAAAAAAAAAEAAAABAAAASyEBAAAA
+AAAYOQAAAAAAAAEAAAABAAAAvSYBAAAAAABYOQAAAAAAAAEAAAABAAAAqycBAAAAAACI
+OQAAAAAAAAEAAAABAAAA0igBAAAAAAC4OQAAAAAAAAEAAAABAAAAeCkBAAAAAADYOQAA
+AAAAAAEAAAABAAAA/ykBAAAAAAAYOgAAAAAAAAEAAAABAAAAVysBAAAAAAAwOgAAAAAA
+AAEAAAABAAAAzysBAAAAAABIOgAAAAAAAAEAAAABAAAATiwBAAAAAABoOgAAAAAAAAEA
+AAABAAAAQC0BAAAAAACAOgAAAAAAAAEAAAABAAAAbS0BAAAAAACoOgAAAAAAAAEAAAAB
+AAAAkC4BAAAAAADAOgAAAAAAAAEAAAABAAAAqC4BAAAAAADYOgAAAAAAAAEAAAABAAAA
+oy8BAAAAAAAAOwAAAAAAAAEAAAABAAAAWzABAAAAAAAwOwAAAAAAAAEAAAABAAAAFDEB
+AAAAAABwOwAAAAAAAAEAAAABAAAAgDIBAAAAAACgOwAAAAAAAAEAAAABAAAAIDMBAAAA
+AADIOwAAAAAAAAEAAAABAAAAzTMBAAAAAADoOwAAAAAAAAEAAAABAAAABDQBAAAAAAAI
+PAAAAAAAAAEAAAABAAAAQTQBAAAAAABIPAAAAAAAAAEAAAABAAAAlTUBAAAAAABgPAAA
+AAAAAAEAAAABAAAABTYBAAAAAACAPAAAAAAAAAEAAAABAAAAfjYBAAAAAACgPAAAAAAA
+AAEAAAABAAAAVToBAAAAAAC4PAAAAAAAAAEAAAABAAAAZDoBAAAAAADQPAAAAAAAAAEA
+AAABAAAAeDoBAAAAAADoPAAAAAAAAAEAAAABAAAAkToBAAAAAAAAPQAAAAAAAAEAAAAB
+AAAAwjoBAAAAAAAwPQAAAAAAAAEAAAABAAAAMDwBAAAAAABIPQAAAAAAAAEAAAABAAAA
+aT0BAAAAAABgPQAAAAAAAAEAAAABAAAA0D0BAAAAAAB4PQAAAAAAAAEAAAABAAAA2D0B
+AAAAAACQPQAAAAAAAAEAAAABAAAAQT4BAAAAAACoPQAAAAAAAAEAAAABAAAAfD8BAAAA
+AADYPQAAAAAAAAEAAAABAAAAkD8BAAAAAAD4PQAAAAAAAAEAAAABAAAA5T8BAAAAAAAY
+PgAAAAAAAAEAAAABAAAAHkABAAAAAAAwPgAAAAAAAAEAAAABAAAAfkABAAAAAABIPgAA
+AAAAAAEAAAABAAAAhkABAAAAAABgPgAAAAAAAAEAAAABAAAAjkABAAAAAACIPgAAAAAA
+AAEAAAABAAAAzkEBAAAAAACoPgAAAAAAAAEAAAABAAAA/kEBAAAAAADQPgAAAAAAAAEA
+AAABAAAAwkYBAAAAAADwPgAAAAAAAAEAAAABAAAAaUcBAAAAAAAQPwAAAAAAAAEAAAAB
+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
====
-
diff --git a/usr/src/uts/common/io/dld/dld_drv.c b/usr/src/uts/common/io/dld/dld_drv.c
index c37ab7651a..778a73528d 100644
--- a/usr/src/uts/common/io/dld/dld_drv.c
+++ b/usr/src/uts/common/io/dld/dld_drv.c
@@ -55,6 +55,19 @@ static int drv_attach(dev_info_t *, ddi_attach_cmd_t);
static int drv_detach(dev_info_t *, ddi_detach_cmd_t);
/*
+ * Secure objects declarations
+ */
+#define SECOBJ_WEP_HASHSZ 67
+static krwlock_t drv_secobj_lock;
+static kmem_cache_t *drv_secobj_cachep;
+static mod_hash_t *drv_secobj_hash;
+static void drv_secobj_init(void);
+static void drv_secobj_fini(void);
+static void drv_ioc_secobj_set(dld_ctl_str_t *, mblk_t *);
+static void drv_ioc_secobj_get(dld_ctl_str_t *, mblk_t *);
+static void drv_ioc_secobj_unset(dld_ctl_str_t *, mblk_t *);
+
+/*
* The following entry points are private to dld and are used for control
* operations only. The entry points exported to mac drivers are defined
* in dld_str.c. Refer to the comment on top of dld_str.c for details.
@@ -161,7 +174,6 @@ _info(struct modinfo *modinfop)
return (mod_info(&drv_modlinkage, modinfop));
}
-
/*
* Initialize component modules.
*/
@@ -170,6 +182,7 @@ drv_init(void)
{
dld_ctl_vmem = vmem_create("dld_ctl", (void *)1, MAXMIN, 1,
NULL, NULL, NULL, 1, VM_SLEEP | VMC_IDENTIFIER);
+ drv_secobj_init();
dld_str_init();
}
@@ -181,6 +194,7 @@ drv_fini(void)
if ((err = dld_str_fini()) != 0)
return (err);
+ drv_secobj_fini();
vmem_destroy(dld_ctl_vmem);
return (0);
}
@@ -489,6 +503,15 @@ drv_ioc(dld_ctl_str_t *ctls, mblk_t *mp)
case DLDIOCVLAN:
drv_ioc_vlan(ctls, mp);
return;
+ case DLDIOCSECOBJSET:
+ drv_ioc_secobj_set(ctls, mp);
+ return;
+ case DLDIOCSECOBJGET:
+ drv_ioc_secobj_get(ctls, mp);
+ return;
+ case DLDIOCSECOBJUNSET:
+ drv_ioc_secobj_unset(ctls, mp);
+ return;
default:
miocnak(ctls->cs_wq, mp, 0, ENOTSUP);
return;
@@ -524,3 +547,222 @@ drv_uw_srv(queue_t *q)
while (mp = getq(q))
drv_uw_put(q, mp);
}
+
+/*
+ * Secure objects implementation
+ */
+
+/* ARGSUSED */
+static int
+drv_secobj_ctor(void *buf, void *arg, int kmflag)
+{
+ bzero(buf, sizeof (dld_secobj_t));
+ return (0);
+}
+
+static void
+drv_secobj_init(void)
+{
+ rw_init(&drv_secobj_lock, NULL, RW_DEFAULT, NULL);
+ drv_secobj_cachep = kmem_cache_create("drv_secobj_cache",
+ sizeof (dld_secobj_t), 0, drv_secobj_ctor, NULL,
+ NULL, NULL, NULL, 0);
+ drv_secobj_hash = mod_hash_create_extended("drv_secobj_hash",
+ SECOBJ_WEP_HASHSZ, mod_hash_null_keydtor, mod_hash_null_valdtor,
+ mod_hash_bystr, NULL, mod_hash_strkey_cmp, KM_SLEEP);
+}
+
+static void
+drv_secobj_fini(void)
+{
+ mod_hash_destroy_hash(drv_secobj_hash);
+ kmem_cache_destroy(drv_secobj_cachep);
+ rw_destroy(&drv_secobj_lock);
+}
+
+static void
+drv_ioc_secobj_set(dld_ctl_str_t *ctls, mblk_t *mp)
+{
+ dld_ioc_secobj_set_t *ssp;
+ dld_secobj_t *sobjp, *objp;
+ int err = EINVAL;
+ queue_t *q = ctls->cs_wq;
+
+ if ((err = miocpullup(mp, sizeof (dld_ioc_secobj_set_t))) != 0)
+ goto failed;
+
+ ssp = (dld_ioc_secobj_set_t *)mp->b_cont->b_rptr;
+ sobjp = &ssp->ss_obj;
+
+ if (sobjp->so_class != DLD_SECOBJ_CLASS_WEP)
+ goto failed;
+
+ if (sobjp->so_name[DLD_SECOBJ_NAME_MAX - 1] != '\0' ||
+ sobjp->so_len > DLD_SECOBJ_VAL_MAX)
+ goto failed;
+
+ rw_enter(&drv_secobj_lock, RW_WRITER);
+ err = mod_hash_find(drv_secobj_hash, (mod_hash_key_t)sobjp->so_name,
+ (mod_hash_val_t *)&objp);
+ if (err == 0) {
+ if ((ssp->ss_flags & DLD_SECOBJ_OPT_CREATE) != 0) {
+ err = EEXIST;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ } else {
+ ASSERT(err == MH_ERR_NOTFOUND);
+ if ((ssp->ss_flags & DLD_SECOBJ_OPT_CREATE) == 0) {
+ err = ENOENT;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ objp = kmem_cache_alloc(drv_secobj_cachep, KM_SLEEP);
+ (void) strlcpy(objp->so_name, sobjp->so_name,
+ DLD_SECOBJ_NAME_MAX);
+
+ err = mod_hash_insert(drv_secobj_hash,
+ (mod_hash_key_t)objp->so_name, (mod_hash_val_t)objp);
+ ASSERT(err == 0);
+ }
+ bcopy(sobjp->so_val, objp->so_val, sobjp->so_len);
+ objp->so_len = sobjp->so_len;
+ objp->so_class = sobjp->so_class;
+ rw_exit(&drv_secobj_lock);
+ miocack(q, mp, 0, 0);
+ return;
+
+failed:
+ ASSERT(err != 0);
+ miocnak(q, mp, 0, err);
+
+}
+
+typedef struct dld_secobj_state {
+ uint_t ss_free;
+ uint_t ss_count;
+ int ss_rc;
+ dld_secobj_t *ss_objp;
+} dld_secobj_state_t;
+
+/* ARGSUSED */
+static uint_t
+drv_secobj_walker(mod_hash_key_t key, mod_hash_val_t *val, void *arg)
+{
+ dld_secobj_state_t *statep = arg;
+ dld_secobj_t *sobjp = (dld_secobj_t *)val;
+
+ if (statep->ss_free < sizeof (dld_secobj_t)) {
+ statep->ss_rc = ENOSPC;
+ return (MH_WALK_TERMINATE);
+ }
+ bcopy(sobjp, statep->ss_objp, sizeof (dld_secobj_t));
+ statep->ss_objp++;
+ statep->ss_free -= sizeof (dld_secobj_t);
+ statep->ss_count++;
+ return (MH_WALK_CONTINUE);
+}
+
+static void
+drv_ioc_secobj_get(dld_ctl_str_t *ctls, mblk_t *mp)
+{
+ dld_ioc_secobj_get_t *sgp;
+ dld_secobj_t *sobjp, *objp;
+ int err = EINVAL;
+ uint_t extra = 0;
+ queue_t *q = ctls->cs_wq;
+ mblk_t *bp;
+
+ if ((err = miocpullup(mp, sizeof (dld_ioc_secobj_get_t))) != 0)
+ goto failed;
+
+ if ((bp = msgpullup(mp->b_cont, -1)) == NULL)
+ goto failed;
+
+ freemsg(mp->b_cont);
+ mp->b_cont = bp;
+ sgp = (dld_ioc_secobj_get_t *)bp->b_rptr;
+ sobjp = &sgp->sg_obj;
+
+ if (sobjp->so_name[DLD_SECOBJ_NAME_MAX - 1] != '\0')
+ goto failed;
+
+ rw_enter(&drv_secobj_lock, RW_READER);
+ if (sobjp->so_name[0] != '\0') {
+ err = mod_hash_find(drv_secobj_hash,
+ (mod_hash_key_t)sobjp->so_name, (mod_hash_val_t *)&objp);
+ if (err != 0) {
+ ASSERT(err == MH_ERR_NOTFOUND);
+ err = ENOENT;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ bcopy(objp->so_val, sobjp->so_val, objp->so_len);
+ sobjp->so_len = objp->so_len;
+ sobjp->so_class = objp->so_class;
+ sgp->sg_count = 1;
+ } else {
+ dld_secobj_state_t state;
+
+ state.ss_free = MBLKL(bp) - sizeof (dld_ioc_secobj_get_t);
+ state.ss_count = 0;
+ state.ss_rc = 0;
+ state.ss_objp = (dld_secobj_t *)(sgp + 1);
+ mod_hash_walk(drv_secobj_hash, drv_secobj_walker, &state);
+ if (state.ss_rc != 0) {
+ err = state.ss_rc;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ sgp->sg_count = state.ss_count;
+ extra = state.ss_count * sizeof (dld_secobj_t);
+ }
+ rw_exit(&drv_secobj_lock);
+ miocack(q, mp, sizeof (dld_ioc_secobj_get_t) + extra, 0);
+ return;
+
+failed:
+ ASSERT(err != 0);
+ miocnak(q, mp, 0, err);
+
+}
+
+static void
+drv_ioc_secobj_unset(dld_ctl_str_t *ctls, mblk_t *mp)
+{
+ dld_ioc_secobj_unset_t *sup;
+ dld_secobj_t *objp;
+ mod_hash_val_t val;
+ int err = EINVAL;
+ queue_t *q = ctls->cs_wq;
+
+ if ((err = miocpullup(mp, sizeof (dld_ioc_secobj_unset_t))) != 0)
+ goto failed;
+
+ sup = (dld_ioc_secobj_unset_t *)mp->b_cont->b_rptr;
+ if (sup->su_name[DLD_SECOBJ_NAME_MAX - 1] != '\0')
+ goto failed;
+
+ rw_enter(&drv_secobj_lock, RW_WRITER);
+ err = mod_hash_find(drv_secobj_hash, (mod_hash_key_t)sup->su_name,
+ (mod_hash_val_t *)&objp);
+ if (err != 0) {
+ ASSERT(err == MH_ERR_NOTFOUND);
+ err = ENOENT;
+ rw_exit(&drv_secobj_lock);
+ goto failed;
+ }
+ err = mod_hash_remove(drv_secobj_hash, (mod_hash_key_t)sup->su_name,
+ (mod_hash_val_t *)&val);
+ ASSERT(err == 0);
+ ASSERT(objp == (dld_secobj_t *)val);
+
+ kmem_cache_free(drv_secobj_cachep, objp);
+ rw_exit(&drv_secobj_lock);
+ miocack(q, mp, 0, 0);
+ return;
+
+failed:
+ ASSERT(err != 0);
+ miocnak(q, mp, 0, err);
+}
diff --git a/usr/src/uts/common/io/dld/dld_proto.c b/usr/src/uts/common/io/dld/dld_proto.c
index 88d1e46ef6..e4939245f7 100644
--- a/usr/src/uts/common/io/dld/dld_proto.c
+++ b/usr/src/uts/common/io/dld/dld_proto.c
@@ -274,7 +274,10 @@ proto_info_req(dld_str_t *dsp, union DL_primitives *udlp, mblk_t *mp)
/*
* Set the media type (properly this time).
*/
- dlp->dl_mac_type = minfop->mi_media;
+ if (dsp->ds_native)
+ dlp->dl_mac_type = minfop->mi_nativemedia;
+ else
+ dlp->dl_mac_type = minfop->mi_media;
/*
* Set the DLSAP length. We only support 16 bit values and they
diff --git a/usr/src/uts/common/io/dld/dld_str.c b/usr/src/uts/common/io/dld/dld_str.c
index 7b311cf7e6..9ebffec151 100644
--- a/usr/src/uts/common/io/dld/dld_str.c
+++ b/usr/src/uts/common/io/dld/dld_str.c
@@ -52,6 +52,7 @@ static void str_notify_capab_reneg(dld_str_t *);
static void str_notify_speed(dld_str_t *, uint32_t);
static void str_notify(void *, mac_notify_type_t);
+static void ioc_native(dld_str_t *, mblk_t *);
static void ioc_raw(dld_str_t *, mblk_t *);
static void ioc_fast(dld_str_t *, mblk_t *);
static void ioc(dld_str_t *, mblk_t *);
@@ -688,6 +689,7 @@ dld_str_destroy(dld_str_t *dsp)
dsp->ds_notifications = 0;
dsp->ds_passivestate = DLD_UNINITIALIZED;
dsp->ds_mode = DLD_UNITDATA;
+ dsp->ds_native = B_FALSE;
/*
* Free the dummy mblk if exists.
@@ -945,16 +947,18 @@ str_mdata_raw_put(dld_str_t *dsp, mblk_t *mp)
/*
* Certain MAC type plugins provide an illusion for raw DLPI
* consumers. They pretend that the MAC layer is something that
- * it's not for the benefit of observability tools. For example, a
- * wifi plugin might pretend that it's Ethernet for such consumers.
- * Here, we call into the MAC layer so that this illusion can be
- * maintained. The plugin will optionally transform the MAC header
- * here into something that can be passed down. The header goes
- * from raw mode to "cooked" mode.
- */
- if ((newmp = mac_header_cook(dsp->ds_mh, mp)) == NULL)
- goto discard;
- mp = newmp;
+ * it's not for the benefit of observability tools. For example,
+ * mac_wifi pretends that it's Ethernet for such consumers.
+ * Here, unless native mode is enabled, we call into the MAC layer so
+ * that this illusion can be maintained. The plugin will optionally
+ * transform the MAC header here into something that can be passed
+ * down. The header goes from raw mode to "cooked" mode.
+ */
+ if (!dsp->ds_native) {
+ if ((newmp = mac_header_cook(dsp->ds_mh, mp)) == NULL)
+ goto discard;
+ mp = newmp;
+ }
size = MBLKL(mp);
@@ -1202,18 +1206,21 @@ dld_str_rx_raw(void *arg, mac_resource_handle_t mrh, mblk_t *mp,
* Certain MAC type plugins provide an illusion for raw
* DLPI consumers. They pretend that the MAC layer is
* something that it's not for the benefit of observability
- * tools. For example, a wifi plugin might pretend that
- * it's Ethernet for such consumers. Here, we call into
- * the MAC layer so that this illusion can be maintained.
- * The plugin will optionally transform the MAC header here
- * into something that can be passed up to raw consumers.
- * The header goes from "cooked" mode to raw mode.
+ * tools. For example, mac_wifi pretends that it's Ethernet
+ * for such consumers. Here, unless native mode is enabled,
+ * we call into the MAC layer so that this illusion can be
+ * maintained. The plugin will optionally transform the MAC
+ * header here into something that can be passed up to raw
+ * consumers. The header goes from "cooked" mode to raw mode.
*/
- if ((newmp = mac_header_uncook(dsp->ds_mh, mp)) == NULL) {
- freemsg(mp);
- goto next;
+ if (!dsp->ds_native) {
+ newmp = mac_header_uncook(dsp->ds_mh, mp);
+ if (newmp == NULL) {
+ freemsg(mp);
+ goto next;
+ }
+ mp = newmp;
}
- mp = newmp;
/*
* Strip the VLAN tag for VLAN streams.
@@ -1875,6 +1882,9 @@ dld_ioc(dld_str_t *dsp, mblk_t *mp)
ASSERT(dsp->ds_type == DLD_DLPI);
switch (cmd) {
+ case DLIOCNATIVE:
+ ioc_native(dsp, mp);
+ break;
case DLIOCRAW:
ioc_raw(dsp, mp);
break;
@@ -1887,6 +1897,32 @@ dld_ioc(dld_str_t *dsp, mblk_t *mp)
}
/*
+ * DLIOCNATIVE
+ */
+static void
+ioc_native(dld_str_t *dsp, mblk_t *mp)
+{
+ queue_t *q = dsp->ds_wq;
+ const mac_info_t *mip = dsp->ds_mip;
+
+ rw_enter(&dsp->ds_lock, RW_WRITER);
+
+ /*
+ * Native mode can be enabled if it's disabled and if the
+ * native media type is different.
+ */
+ if (!dsp->ds_native && mip->mi_media != mip->mi_nativemedia)
+ dsp->ds_native = B_TRUE;
+
+ rw_exit(&dsp->ds_lock);
+
+ if (dsp->ds_native)
+ miocack(q, mp, 0, mip->mi_nativemedia);
+ else
+ miocnak(q, mp, 0, ENOTSUP);
+}
+
+/*
* DLIOCRAW
*/
static void
diff --git a/usr/src/uts/common/io/dls/dls_vlan.c b/usr/src/uts/common/io/dls/dls_vlan.c
index eb6bc4c3bb..bea767627a 100644
--- a/usr/src/uts/common/io/dls/dls_vlan.c
+++ b/usr/src/uts/common/io/dls/dls_vlan.c
@@ -308,7 +308,9 @@ again:
* dls_mac_hold() assigns the dl_mip of the dls_link_t we're
* interested in.
*/
- if (dvp->dv_id != VLAN_ID_NONE && dlp->dl_mip->mi_media != DL_ETHER) {
+ if (dvp->dv_id != VLAN_ID_NONE &&
+ (dlp->dl_mip->mi_media != DL_ETHER ||
+ dlp->dl_mip->mi_nativemedia != DL_ETHER)) {
dls_mac_rele(dlp);
err = EINVAL;
goto done;
diff --git a/usr/src/uts/common/io/mac/mac.c b/usr/src/uts/common/io/mac/mac.c
index 3f414af351..74df893b58 100644
--- a/usr/src/uts/common/io/mac/mac.c
+++ b/usr/src/uts/common/io/mac/mac.c
@@ -1083,8 +1083,8 @@ mac_register(mac_register_t *mregp, mac_handle_t *mhp)
mip->mi_driver = mregp->m_driver;
mip->mi_type = mtype;
-
mip->mi_info.mi_media = mtype->mt_type;
+ mip->mi_info.mi_nativemedia = mtype->mt_nativetype;
mip->mi_info.mi_sdu_min = mregp->m_min_sdu;
if (mregp->m_max_sdu <= mregp->m_min_sdu) {
err = EINVAL;
@@ -1814,6 +1814,7 @@ mactype_register(mactype_register_t *mtrp)
mtp->mt_ident = mtrp->mtr_ident;
mtp->mt_ops = *ops;
mtp->mt_type = mtrp->mtr_mactype;
+ mtp->mt_nativetype = mtrp->mtr_nativetype;
mtp->mt_addr_length = mtrp->mtr_addrlen;
if (mtrp->mtr_brdcst_addr != NULL) {
mtp->mt_brdcst_addr = kmem_alloc(mtrp->mtr_addrlen, KM_SLEEP);
diff --git a/usr/src/uts/common/io/mac/plugins/mac_ether.c b/usr/src/uts/common/io/mac/plugins/mac_ether.c
index 62f2f2c6b3..69ea0f66bb 100644
--- a/usr/src/uts/common/io/mac/plugins/mac_ether.c
+++ b/usr/src/uts/common/io/mac/plugins/mac_ether.c
@@ -122,6 +122,7 @@ _init(void)
mtrp->mtr_ident = MAC_PLUGIN_IDENT_ETHER;
mtrp->mtr_ops = &mac_ether_type_ops;
mtrp->mtr_mactype = DL_ETHER;
+ mtrp->mtr_nativetype = DL_ETHER;
mtrp->mtr_addrlen = ETHERADDRL;
mtrp->mtr_brdcst_addr = ether_brdcst;
mtrp->mtr_stats = ether_stats;
diff --git a/usr/src/uts/common/io/mac/plugins/mac_wifi.c b/usr/src/uts/common/io/mac/plugins/mac_wifi.c
new file mode 100644
index 0000000000..81da3e878c
--- /dev/null
+++ b/usr/src/uts/common/io/mac/plugins/mac_wifi.c
@@ -0,0 +1,416 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * WiFi MAC Type plugin for the Nemo mac module
+ *
+ * This is a bit of mutant since we pretend to be mostly DL_ETHER.
+ */
+
+#include <sys/types.h>
+#include <sys/modctl.h>
+#include <sys/dlpi.h>
+#include <sys/mac.h>
+#include <sys/mac_wifi.h>
+#include <sys/dls.h>
+#include <sys/ethernet.h>
+#include <sys/byteorder.h>
+#include <sys/strsun.h>
+#include <inet/common.h>
+
+uint8_t wifi_bcastaddr[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+static uint8_t wifi_ietfmagic[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
+static uint8_t wifi_ieeemagic[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 };
+
+static mac_stat_info_t wifi_stats[] = {
+ /* statistics described in ieee802.11(5) */
+{ WIFI_STAT_TX_FRAGS, "tx_frags", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_MCAST_TX, "mcast_tx", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_TX_FAILED, "tx_failed", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_TX_RETRANS, "tx_retrans", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_TX_RERETRANS, "tx_reretrans", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_RTS_SUCCESS, "rts_success", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_RTS_FAILURE, "rts_failure", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_ACK_FAILURE, "ack_failure", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_RX_FRAGS, "rx_frags", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_MCAST_RX, "mcast_rx", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_FCS_ERRORS, "fcs_errors", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_WEP_ERRORS, "wep_errors", KSTAT_DATA_UINT32, 0 },
+{ WIFI_STAT_RX_DUPS, "rx_dups", KSTAT_DATA_UINT32, 0 }
+};
+
+static struct modlmisc mac_wifi_modlmisc = {
+ &mod_miscops,
+ "WiFi MAC plugin %I%"
+};
+
+static struct modlinkage mac_wifi_modlinkage = {
+ MODREV_1,
+ &mac_wifi_modlmisc,
+ NULL
+};
+
+static mactype_ops_t mac_wifi_type_ops;
+
+int
+_init(void)
+{
+ mactype_register_t *mtrp = mactype_alloc(MACTYPE_VERSION);
+ int err;
+
+ /*
+ * If `mtrp' is NULL, then this plugin is not compatible with
+ * the system's MAC Type plugin framework.
+ */
+ if (mtrp == NULL)
+ return (ENOTSUP);
+
+ mtrp->mtr_ops = &mac_wifi_type_ops;
+ mtrp->mtr_ident = MAC_PLUGIN_IDENT_WIFI;
+ mtrp->mtr_mactype = DL_ETHER;
+ mtrp->mtr_nativetype = DL_WIFI;
+ mtrp->mtr_stats = wifi_stats;
+ mtrp->mtr_statcount = A_CNT(wifi_stats);
+ mtrp->mtr_addrlen = IEEE80211_ADDR_LEN;
+ mtrp->mtr_brdcst_addr = wifi_bcastaddr;
+
+ if ((err = mactype_register(mtrp)) == 0) {
+ if ((err = mod_install(&mac_wifi_modlinkage)) != 0)
+ (void) mactype_unregister(MAC_PLUGIN_IDENT_WIFI);
+ }
+ mactype_free(mtrp);
+ return (err);
+}
+
+int
+_fini(void)
+{
+ int err;
+
+ if ((err = mactype_unregister(MAC_PLUGIN_IDENT_WIFI)) != 0)
+ return (err);
+ return (mod_remove(&mac_wifi_modlinkage));
+}
+
+int
+_info(struct modinfo *modinfop)
+{
+ return (mod_info(&mac_wifi_modlinkage, modinfop));
+}
+
+/*
+ * MAC Type plugin operations
+ */
+
+static boolean_t
+mac_wifi_pdata_verify(void *pdata, size_t pdata_size)
+{
+ wifi_data_t *wdp = pdata;
+
+ return (pdata_size == sizeof (wifi_data_t) && wdp->wd_opts == 0);
+}
+
+/* ARGSUSED */
+static int
+mac_wifi_unicst_verify(const void *addr, void *pdata)
+{
+ /* If it's not a group address, then it's a valid unicast address. */
+ return (IEEE80211_IS_MULTICAST(addr) ? EINVAL : 0);
+}
+
+/* ARGSUSED */
+static int
+mac_wifi_multicst_verify(const void *addr, void *pdata)
+{
+ /* The address must be a group address. */
+ if (!IEEE80211_IS_MULTICAST(addr))
+ return (EINVAL);
+ /* The address must not be the media broadcast address. */
+ if (bcmp(addr, wifi_bcastaddr, sizeof (wifi_bcastaddr)) == 0)
+ return (EINVAL);
+ return (0);
+}
+
+/*
+ * Verify that `sap' is valid, and return the actual SAP to bind to in
+ * `*bind_sap'. The WiFI SAP space is identical to Ethernet.
+ */
+/* ARGSUSED */
+static boolean_t
+mac_wifi_sap_verify(uint32_t sap, uint32_t *bind_sap, void *pdata)
+{
+ if (sap >= ETHERTYPE_802_MIN && sap <= ETHERTYPE_MAX) {
+ if (bind_sap != NULL)
+ *bind_sap = sap;
+ return (B_TRUE);
+ }
+
+ if (sap <= ETHERMTU) {
+ if (bind_sap != NULL)
+ *bind_sap = DLS_SAP_LLC;
+ return (B_TRUE);
+ }
+ return (B_FALSE);
+}
+
+/*
+ * Create a template WiFi datalink header for `sap' packets between `saddr'
+ * and `daddr'. Any enabled modes and features relevant to building the
+ * header are passed via `pdata'. Return NULL on failure.
+ */
+/* ARGSUSED */
+static mblk_t *
+mac_wifi_header(const void *saddr, const void *daddr, uint32_t sap,
+ void *pdata, mblk_t *payload, size_t extra_len)
+{
+ struct ieee80211_frame *wh;
+ struct ieee80211_llc *llc;
+ mblk_t *mp;
+ wifi_data_t *wdp = pdata;
+
+ if (!mac_wifi_sap_verify(sap, NULL, NULL))
+ return (NULL);
+
+ if ((mp = allocb(WIFI_HDRSIZE + extra_len, BPRI_HI)) == NULL)
+ return (NULL);
+ bzero(mp->b_rptr, WIFI_HDRSIZE + extra_len);
+
+ /*
+ * Fill in the fixed parts of the ieee80211_frame.
+ */
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ mp->b_wptr += sizeof (struct ieee80211_frame);
+ wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_DATA;
+
+ switch (wdp->wd_opmode) {
+ case IEEE80211_M_STA:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_TODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, wdp->wd_bssid);
+ IEEE80211_ADDR_COPY(wh->i_addr2, saddr);
+ IEEE80211_ADDR_COPY(wh->i_addr3, daddr);
+ break;
+
+ case IEEE80211_M_IBSS:
+ case IEEE80211_M_AHDEMO:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, daddr);
+ IEEE80211_ADDR_COPY(wh->i_addr2, saddr);
+ IEEE80211_ADDR_COPY(wh->i_addr3, wdp->wd_bssid);
+ break;
+
+ case IEEE80211_M_HOSTAP:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_FROMDS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, daddr);
+ IEEE80211_ADDR_COPY(wh->i_addr2, wdp->wd_bssid);
+ IEEE80211_ADDR_COPY(wh->i_addr3, saddr);
+ break;
+ }
+
+ /*
+ * Fill in the fixed parts of the WEP-portion of the frame.
+ */
+ if (wdp->wd_secalloc == WIFI_SEC_WEP) {
+ wh->i_fc[1] |= IEEE80211_FC1_WEP;
+ /*
+ * The actual contents of the WEP-portion of the packet
+ * are computed when the packet is sent -- for now, we
+ * just need to account for the size.
+ */
+ mp->b_wptr += IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN;
+ }
+
+ /*
+ * Fill in the fixed parts of the ieee80211_llc header.
+ */
+ llc = (struct ieee80211_llc *)mp->b_wptr;
+ mp->b_wptr += sizeof (struct ieee80211_llc);
+ bcopy(wifi_ietfmagic, llc, sizeof (wifi_ietfmagic));
+ llc->illc_ether_type = htons(sap);
+
+ return (mp);
+}
+
+/*
+ * Use the provided `mp' (which is expected to point to a WiFi header), and
+ * fill in the provided `mhp'. Return an errno on failure.
+ */
+/* ARGSUSED */
+static int
+mac_wifi_header_info(mblk_t *mp, void *pdata, mac_header_info_t *mhp)
+{
+ struct ieee80211_frame *wh;
+ struct ieee80211_llc *llc;
+ uchar_t *llcp;
+
+ if (MBLKL(mp) < sizeof (struct ieee80211_frame))
+ return (EINVAL);
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ llcp = mp->b_rptr + sizeof (struct ieee80211_frame);
+
+ /*
+ * When we receive frames from other hosts, the hardware will have
+ * already performed WEP decryption, and thus there will not be a WEP
+ * portion. However, when we receive a loopback copy of our own
+ * packets, it will still have a WEP portion. Skip past it to get to
+ * the LLC header.
+ */
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP)
+ llcp += IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN;
+
+ if (mp->b_wptr - llcp < sizeof (struct ieee80211_llc))
+ return (EINVAL);
+
+ llc = (struct ieee80211_llc *)llcp;
+ mhp->mhi_origsap = ntohs(llc->illc_ether_type);
+ mhp->mhi_bindsap = mhp->mhi_origsap;
+ mhp->mhi_pktsize = 0;
+ mhp->mhi_hdrsize = llcp + sizeof (*llc) - mp->b_rptr;
+
+ /*
+ * Verify the LLC header is one of the known formats. As per MSFT's
+ * convention, if the header is using IEEE 802.1H encapsulation, then
+ * treat the LLC header as data. As per DL_ETHER custom when treating
+ * the LLC header as data, set the mhi_bindsap to be DLS_SAP_LLC, and
+ * assume mhi_origsap contains the data length.
+ */
+ if (bcmp(llc, wifi_ieeemagic, sizeof (wifi_ieeemagic)) == 0) {
+ mhp->mhi_bindsap = DLS_SAP_LLC;
+ mhp->mhi_hdrsize -= sizeof (*llc);
+ mhp->mhi_pktsize = mhp->mhi_hdrsize + mhp->mhi_origsap;
+ } else if (bcmp(llc, wifi_ietfmagic, sizeof (wifi_ietfmagic)) != 0) {
+ return (EINVAL);
+ }
+
+ switch (wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) {
+ case IEEE80211_FC1_DIR_NODS:
+ mhp->mhi_daddr = wh->i_addr1;
+ mhp->mhi_saddr = wh->i_addr2;
+ break;
+
+ case IEEE80211_FC1_DIR_TODS:
+ mhp->mhi_daddr = wh->i_addr3;
+ mhp->mhi_saddr = wh->i_addr2;
+ break;
+
+ case IEEE80211_FC1_DIR_FROMDS:
+ mhp->mhi_daddr = wh->i_addr1;
+ mhp->mhi_saddr = wh->i_addr3;
+ break;
+
+ case IEEE80211_FC1_DIR_DSTODS:
+ /* We don't support AP-to-AP mode yet */
+ return (ENOTSUP);
+ }
+
+ if (mac_wifi_unicst_verify(mhp->mhi_daddr, NULL) == 0)
+ mhp->mhi_dsttype = MAC_ADDRTYPE_UNICAST;
+ else if (mac_wifi_multicst_verify(mhp->mhi_daddr, NULL) == 0)
+ mhp->mhi_dsttype = MAC_ADDRTYPE_MULTICAST;
+ else
+ mhp->mhi_dsttype = MAC_ADDRTYPE_BROADCAST;
+
+ return (0);
+}
+
+/*
+ * Take the provided `mp' (which is expected to have an Ethernet header), and
+ * return a pointer to an mblk_t with a WiFi header. Note that the returned
+ * header will not be complete until the driver finishes filling it in prior
+ * to transmit. If the conversion cannot be performed, return NULL.
+ */
+static mblk_t *
+mac_wifi_header_cook(mblk_t *mp, void *pdata)
+{
+ struct ether_header *ehp;
+ mblk_t *llmp;
+
+ if (MBLKL(mp) < sizeof (struct ether_header))
+ return (NULL);
+
+ ehp = (struct ether_header *)mp->b_rptr;
+ llmp = mac_wifi_header(&ehp->ether_shost, &ehp->ether_dhost,
+ ntohs(ehp->ether_type), pdata, NULL, 0);
+ if (llmp == NULL)
+ return (NULL);
+
+ /*
+ * The plugin framework guarantees that we have the only reference
+ * to the mblk_t, so we can safely modify it.
+ */
+ ASSERT(DB_REF(mp) == 1);
+ mp->b_rptr += sizeof (struct ether_header);
+ llmp->b_cont = mp;
+ return (llmp);
+}
+
+/*
+ * Take the provided `mp' (which is expected to have a WiFi header), and
+ * return a pointer to an mblk_t with an Ethernet header. If the conversion
+ * cannot be performed, return NULL.
+ */
+static mblk_t *
+mac_wifi_header_uncook(mblk_t *mp, void *pdata)
+{
+ mac_header_info_t mhi;
+ struct ether_header eh;
+
+ if (mac_wifi_header_info(mp, pdata, &mhi) != 0) {
+ /*
+ * The plugin framework guarantees the header is properly
+ * formed, so this should never happen.
+ */
+ return (NULL);
+ }
+
+ /*
+ * The plugin framework guarantees that we have the only reference to
+ * the mblk_t and the underlying dblk_t, so we can safely modify it.
+ */
+ ASSERT(DB_REF(mp) == 1);
+
+ IEEE80211_ADDR_COPY(&eh.ether_dhost, mhi.mhi_daddr);
+ IEEE80211_ADDR_COPY(&eh.ether_shost, mhi.mhi_saddr);
+ eh.ether_type = htons(mhi.mhi_origsap);
+
+ ASSERT(mhi.mhi_hdrsize >= sizeof (struct ether_header));
+ mp->b_rptr += mhi.mhi_hdrsize - sizeof (struct ether_header);
+ bcopy(&eh, mp->b_rptr, sizeof (struct ether_header));
+ return (mp);
+}
+
+static mactype_ops_t mac_wifi_type_ops = {
+ MTOPS_PDATA_VERIFY | MTOPS_HEADER_COOK | MTOPS_HEADER_UNCOOK,
+ mac_wifi_unicst_verify,
+ mac_wifi_multicst_verify,
+ mac_wifi_sap_verify,
+ mac_wifi_header,
+ mac_wifi_header_info,
+ mac_wifi_pdata_verify,
+ mac_wifi_header_cook,
+ mac_wifi_header_uncook
+};
diff --git a/usr/src/uts/common/io/net80211/net80211.c b/usr/src/uts/common/io/net80211/net80211.c
new file mode 100644
index 0000000000..5a6eef0f06
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211.c
@@ -0,0 +1,634 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 generic handler
+ */
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/cmn_err.h>
+#include <sys/modctl.h>
+#include "net80211_impl.h"
+
+uint32_t ieee80211_debug = 0x0; /* debug msg flags */
+
+const char *ieee80211_phymode_name[] = {
+ "auto", /* IEEE80211_MODE_AUTO */
+ "11a", /* IEEE80211_MODE_11A */
+ "11b", /* IEEE80211_MODE_11B */
+ "11g", /* IEEE80211_MODE_11G */
+ "FH", /* IEEE80211_MODE_FH */
+ "turboA", /* IEEE80211_MODE_TURBO_A */
+ "turboG", /* IEEE80211_MODE_TURBO_G */
+};
+
+#define IEEE80211_DPRINT(_level, _fmt) do { \
+ _NOTE(CONSTCOND) \
+ va_list ap; \
+ va_start(ap, (_fmt)); \
+ vcmn_err((_level), (_fmt), ap); \
+ va_end(ap); \
+ _NOTE(CONSTCOND) \
+ } while (0)
+
+/*
+ * Print error messages
+ */
+void
+ieee80211_err(const int8_t *fmt, ...)
+{
+ IEEE80211_DPRINT(CE_WARN, fmt);
+}
+
+/*
+ * Print debug messages
+ */
+void
+ieee80211_dbg(uint32_t flag, const int8_t *fmt, ...)
+{
+ if (flag & ieee80211_debug)
+ IEEE80211_DPRINT(CE_CONT, fmt);
+}
+
+/*
+ * Default reset method for use with the ioctl support. This
+ * method is invoked after any state change in the 802.11
+ * layer that should be propagated to the hardware but not
+ * require re-initialization of the 802.11 state machine (e.g
+ * rescanning for an ap). We always return ENETRESET which
+ * should cause the driver to re-initialize the device. Drivers
+ * can override this method to implement more optimized support.
+ */
+/* ARGSUSED */
+static int
+ieee80211_default_reset(ieee80211com_t *ic)
+{
+ return (ENETRESET);
+}
+
+/*
+ * Convert channel to IEEE channel number.
+ */
+uint32_t
+ieee80211_chan2ieee(ieee80211com_t *ic, struct ieee80211_channel *ch)
+{
+ if ((ic->ic_sup_channels <= ch) &&
+ (ch <= &ic->ic_sup_channels[IEEE80211_CHAN_MAX])) {
+ return (ch - ic->ic_sup_channels);
+ } else if (ch == IEEE80211_CHAN_ANYC) {
+ return (IEEE80211_CHAN_ANY);
+ } else if (ch != NULL) {
+ ieee80211_err("invalid channel freq %u flags %x\n",
+ ch->ich_freq, ch->ich_flags);
+ return (0);
+ }
+ ieee80211_err("invalid channel (NULL)\n"); /* ch == NULL */
+ return (0);
+}
+
+/*
+ * Convert IEEE channel number to MHz frequency.
+ * chan IEEE channel number
+ * flags specify whether the frequency is in the 2GHz ISM
+ * band or the 5GHz band
+ *
+ * 802.11b 2GHz: 14 channels, each 5 MHz wide. Channel 1 is placed
+ * at 2.412 GHz, channel 2 at 2.417 GHz, and so on up to channel 13
+ * at 2.472 GHz. Channel 14 was defined especially for operation in
+ * Japan, and has a center frequency 2.484 GHz.
+ * 802.11g 2GHz: adopts the frequency plan of 802.11b. Japan only
+ * allows 802.11g operation in channels 1-13
+ * 802.11a 5GHz: starting every 5 MHz
+ * 802.11b/g channels 15-24 (2512-2692) are used by some implementation
+ * (Atheros etc.)
+ */
+uint32_t
+ieee80211_ieee2mhz(uint32_t chan, uint32_t flags)
+{
+ if (flags & IEEE80211_CHAN_2GHZ) { /* 2GHz band */
+ if (chan == 14)
+ return (2484);
+ if (chan < 14)
+ return (2412 + (chan - 1) * 5);
+ else
+ return (2512 + ((chan - 15) * 20));
+ } else if (flags & IEEE80211_CHAN_5GHZ) { /* 5Ghz band */
+ return (5000 + (chan * 5)); /* OFDM */
+ } else { /* either, guess */
+ if (chan == 14)
+ return (2484);
+ if (chan < 14) /* 0-13 */
+ return (2412 + (chan - 1) * 5);
+ if (chan < 27) /* 15-26 */
+ return (2512 + ((chan - 15) * 20));
+ return (5000 + (chan * 5));
+ }
+}
+
+/*
+ * Do late attach work. It must be called by the driver after
+ * calling ieee80211_attach() and before calling most ieee80211
+ * functions.
+ */
+void
+ieee80211_media_init(ieee80211com_t *ic)
+{
+ /*
+ * Do late attach work that must wait for any subclass
+ * (i.e. driver) work such as overriding methods.
+ */
+ ieee80211_node_lateattach(ic);
+}
+
+/*
+ * Start Watchdog timer. After count down timer(s), ic_watchdog
+ * will be called
+ */
+void
+ieee80211_start_watchdog(ieee80211com_t *ic, uint32_t timer)
+{
+ if (ic->ic_watchdog_timer == 0 && ic->ic_watchdog != NULL) {
+ ic->ic_watchdog_timer = timeout(ic->ic_watchdog, ic,
+ drv_usectohz(1000000 * timer));
+ }
+}
+
+/*
+ * Stop watchdog timer.
+ */
+void
+ieee80211_stop_watchdog(ieee80211com_t *ic)
+{
+ if (ic->ic_watchdog_timer != 0) {
+ if (ic->ic_watchdog != NULL)
+ (void) untimeout(ic->ic_watchdog_timer);
+ ic->ic_watchdog_timer = 0;
+ }
+}
+
+/*
+ * Called from a driver's xxx_watchdog routine. It is used to
+ * perform periodic cleanup of state for net80211, as well as
+ * timeout scans.
+ */
+void
+ieee80211_watchdog(void *arg)
+{
+ ieee80211com_t *ic = arg;
+ struct ieee80211_impl *im = ic->ic_private;
+ ieee80211_node_table_t *nt;
+ int inact_timer = 0;
+
+ if (ic->ic_state == IEEE80211_S_INIT)
+ return;
+
+ IEEE80211_LOCK(ic);
+ if ((im->im_mgt_timer != 0) && (--im->im_mgt_timer == 0)) {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
+ IEEE80211_LOCK(ic);
+ }
+
+ nt = &ic->ic_scan;
+ if (nt->nt_inact_timer != 0) {
+ if (--nt->nt_inact_timer == 0)
+ nt->nt_timeout(nt);
+ inact_timer += nt->nt_inact_timer;
+ }
+ nt = &ic->ic_sta;
+ if (nt->nt_inact_timer != 0) {
+ if (--nt->nt_inact_timer == 0)
+ nt->nt_timeout(nt);
+ inact_timer += nt->nt_inact_timer;
+ }
+
+ IEEE80211_UNLOCK(ic);
+
+ if (im->im_mgt_timer != 0 || inact_timer > 0)
+ ieee80211_start_watchdog(ic, 1);
+}
+
+/*
+ * Set the current phy mode and recalculate the active channel
+ * set and supported rates based on the available channels for
+ * this mode. Also select a new BSS channel if the current one
+ * is inappropriate for this mode.
+ * This function is called by net80211, and not intended to be
+ * called directly.
+ */
+static int
+ieee80211_setmode(ieee80211com_t *ic, enum ieee80211_phymode mode)
+{
+ static const uint32_t chanflags[] = {
+ 0, /* IEEE80211_MODE_AUTO */
+ IEEE80211_CHAN_A, /* IEEE80211_MODE_11A */
+ IEEE80211_CHAN_B, /* IEEE80211_MODE_11B */
+ IEEE80211_CHAN_PUREG, /* IEEE80211_MODE_11G */
+ IEEE80211_CHAN_FHSS, /* IEEE80211_MODE_FH */
+ IEEE80211_CHAN_T, /* IEEE80211_MODE_TURBO_A */
+ IEEE80211_CHAN_108G, /* IEEE80211_MODE_TURBO_G */
+ };
+ struct ieee80211_channel *ch;
+ uint32_t modeflags;
+ int i;
+ int achannels = 0;
+
+ /* validate new mode */
+ if ((ic->ic_modecaps & (1 << mode)) == 0) {
+ ieee80211_err("ieee80211_setmode(): mode %u not supported"
+ " (caps 0x%x)\n", mode, ic->ic_modecaps);
+ return (EINVAL);
+ }
+
+ /*
+ * Verify at least one channel is present in the available
+ * channel list before committing to the new mode.
+ * Calculate the active channel set.
+ */
+ ASSERT(mode < IEEE80211_N(chanflags));
+ modeflags = chanflags[mode];
+ bzero(ic->ic_chan_active, sizeof (ic->ic_chan_active));
+ for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
+ ch = &ic->ic_sup_channels[i];
+ if (ch->ich_flags == 0)
+ continue;
+ if (mode == IEEE80211_MODE_AUTO) {
+ /* take anything but pure turbo channels */
+ if ((ch->ich_flags & ~IEEE80211_CHAN_TURBO) != 0) {
+ ieee80211_setbit(ic->ic_chan_active, i);
+ achannels++;
+ }
+ } else {
+ if ((ch->ich_flags & modeflags) == modeflags) {
+ ieee80211_setbit(ic->ic_chan_active, i);
+ achannels++;
+ }
+ }
+ }
+ if (achannels == 0) {
+ ieee80211_err("ieee80211_setmode(): "
+ "no channel found for mode %u\n", mode);
+ return (EINVAL);
+ }
+
+ /*
+ * If no current/default channel is setup or the current
+ * channel is wrong for the mode then pick the first
+ * available channel from the active list. This is likely
+ * not the right one.
+ */
+ if (ic->ic_ibss_chan == NULL ||
+ ieee80211_isclr(ic->ic_chan_active,
+ ieee80211_chan2ieee(ic, ic->ic_ibss_chan))) {
+ for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
+ if (ieee80211_isset(ic->ic_chan_active, i)) {
+ ic->ic_ibss_chan = &ic->ic_sup_channels[i];
+ break;
+ }
+ }
+ }
+ /*
+ * If the desired channel is set but no longer valid then reset it.
+ */
+ if (ic->ic_des_chan != IEEE80211_CHAN_ANYC &&
+ ieee80211_isclr(ic->ic_chan_active,
+ ieee80211_chan2ieee(ic, ic->ic_des_chan))) {
+ ic->ic_des_chan = IEEE80211_CHAN_ANYC;
+ }
+
+ /*
+ * Do mode-specific rate setup.
+ */
+ if (mode == IEEE80211_MODE_11G || mode == IEEE80211_MODE_11B)
+ ieee80211_setbasicrates(&ic->ic_sup_rates[mode], mode);
+
+ /*
+ * Setup an initial rate set according to the
+ * current/default channel. This will be changed
+ * when scanning but must exist now so drivers have
+ * consistent state of ic_bsschan.
+ */
+ if (ic->ic_bss != NULL)
+ ic->ic_bss->in_rates = ic->ic_sup_rates[mode];
+ ic->ic_curmode = mode;
+ ieee80211_reset_erp(ic); /* reset ERP state */
+
+ return (0);
+}
+
+/*
+ * Return the phy mode for with the specified channel so the
+ * caller can select a rate set. This is problematic for channels
+ * where multiple operating modes are possible (e.g. 11g+11b).
+ * In those cases we defer to the current operating mode when set.
+ */
+enum ieee80211_phymode
+ieee80211_chan2mode(ieee80211com_t *ic, struct ieee80211_channel *chan)
+{
+ if (IEEE80211_IS_CHAN_T(chan)) {
+ return (IEEE80211_MODE_TURBO_A);
+ } else if (IEEE80211_IS_CHAN_5GHZ(chan)) {
+ return (IEEE80211_MODE_11A);
+ } else if (IEEE80211_IS_CHAN_FHSS(chan)) {
+ return (IEEE80211_MODE_FH);
+ } else if (chan->ich_flags & (IEEE80211_CHAN_OFDM|IEEE80211_CHAN_DYN)) {
+ /*
+ * This assumes all 11g channels are also usable
+ * for 11b, which is currently true.
+ */
+ if (ic->ic_curmode == IEEE80211_MODE_TURBO_G)
+ return (IEEE80211_MODE_TURBO_G);
+ if (ic->ic_curmode == IEEE80211_MODE_11B)
+ return (IEEE80211_MODE_11B);
+ return (IEEE80211_MODE_11G);
+ } else {
+ return (IEEE80211_MODE_11B);
+ }
+}
+
+/*
+ * Return the size of the 802.11 header for a management or data frame.
+ */
+int
+ieee80211_hdrspace(const void *data)
+{
+ const struct ieee80211_frame *wh = data;
+ int size = sizeof (struct ieee80211_frame);
+
+ /* NB: we don't handle control frames */
+ ASSERT((wh->i_fc[0]&IEEE80211_FC0_TYPE_MASK) !=
+ IEEE80211_FC0_TYPE_CTL);
+ if ((wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) == IEEE80211_FC1_DIR_DSTODS)
+ size += IEEE80211_ADDR_LEN;
+
+ return (size);
+}
+
+/*
+ * Allocate and setup a management frame of the specified
+ * size. We return the mblk and a pointer to the start
+ * of the contiguous data area that's been reserved based
+ * on the packet length.
+ */
+mblk_t *
+ieee80211_getmgtframe(uint8_t **frm, int pktlen)
+{
+ mblk_t *mp;
+ int len;
+
+ len = sizeof (struct ieee80211_frame) + pktlen;
+ mp = allocb(len, BPRI_MED);
+ if (mp != NULL) {
+ *frm = mp->b_rptr + sizeof (struct ieee80211_frame);
+ mp->b_wptr = mp->b_rptr + len;
+ } else {
+ ieee80211_err("ieee80211_getmgtframe: "
+ "alloc frame failed, %d\n", len);
+ }
+ return (mp);
+}
+
+/*
+ * Send system messages to notify the device has joined a WLAN.
+ * This is an OS specific function. Solaris marks link status
+ * as up.
+ */
+void
+ieee80211_notify_node_join(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ if (in == ic->ic_bss)
+ mac_link_update(ic->ic_mach, LINK_STATE_UP);
+}
+
+/*
+ * Send system messages to notify the device has left a WLAN.
+ * This is an OS specific function. Solaris marks link status
+ * as down.
+ */
+void
+ieee80211_notify_node_leave(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ if (in == ic->ic_bss)
+ mac_link_update(ic->ic_mach, LINK_STATE_DOWN);
+}
+
+/*
+ * Get 802.11 kstats defined in ieee802.11(5)
+ *
+ * Return 0 on success
+ */
+int
+ieee80211_stat(ieee80211com_t *ic, uint_t stat, uint64_t *val)
+{
+ ASSERT(val != NULL);
+ IEEE80211_LOCK(ic);
+ switch (stat) {
+ case WIFI_STAT_TX_FRAGS:
+ *val = ic->ic_stats.is_tx_frags;
+ break;
+ case WIFI_STAT_MCAST_TX:
+ *val = ic->ic_stats.is_tx_mcast;
+ break;
+ case WIFI_STAT_TX_FAILED:
+ *val = ic->ic_stats.is_tx_failed;
+ break;
+ case WIFI_STAT_TX_RETRANS:
+ *val = ic->ic_stats.is_tx_retries;
+ break;
+ case WIFI_STAT_RTS_SUCCESS:
+ *val = ic->ic_stats.is_rts_success;
+ break;
+ case WIFI_STAT_RTS_FAILURE:
+ *val = ic->ic_stats.is_rts_failure;
+ break;
+ case WIFI_STAT_ACK_FAILURE:
+ *val = ic->ic_stats.is_ack_failure;
+ break;
+ case WIFI_STAT_RX_FRAGS:
+ *val = ic->ic_stats.is_rx_frags;
+ break;
+ case WIFI_STAT_MCAST_RX:
+ *val = ic->ic_stats.is_rx_mcast;
+ break;
+ case WIFI_STAT_RX_DUPS:
+ *val = ic->ic_stats.is_rx_dups;
+ break;
+ case WIFI_STAT_FCS_ERRORS:
+ *val = ic->ic_stats.is_fcs_errors;
+ break;
+ case WIFI_STAT_WEP_ERRORS:
+ *val = ic->ic_stats.is_wep_errors;
+ break;
+ }
+ IEEE80211_UNLOCK(ic);
+ return (0);
+}
+
+/*
+ * Attach network interface to the 802.11 support module. This
+ * function must be called before using any of the ieee80211
+ * functionss. The parameter "ic" MUST be initialized to tell
+ * net80211 about interface's capabilities.
+ */
+void
+ieee80211_attach(ieee80211com_t *ic)
+{
+ struct ieee80211_impl *im;
+ struct ieee80211_channel *ch;
+ int i;
+
+ /* Check mandatory callback functions not NULL */
+ ASSERT(ic->ic_xmit != NULL);
+
+ mutex_init(&ic->ic_genlock, NULL, MUTEX_DRIVER, NULL);
+
+ im = kmem_alloc(sizeof (ieee80211_impl_t), KM_SLEEP);
+ ic->ic_private = im;
+ cv_init(&im->im_scan_cv, NULL, CV_DRIVER, NULL);
+
+ /*
+ * Fill in 802.11 available channel set, mark
+ * all available channels as active, and pick
+ * a default channel if not already specified.
+ */
+ bzero(im->im_chan_avail, sizeof (im->im_chan_avail));
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_AUTO;
+ for (i = 0; i <= IEEE80211_CHAN_MAX; i++) {
+ ch = &ic->ic_sup_channels[i];
+ if (ch->ich_flags) {
+ /* Verify driver passed us valid data */
+ if (i != ieee80211_chan2ieee(ic, ch)) {
+ ieee80211_err("bad channel ignored: "
+ "freq %u flags%x number %u\n",
+ ch->ich_freq, ch->ich_flags, i);
+ ch->ich_flags = 0;
+ continue;
+ }
+ ieee80211_setbit(im->im_chan_avail, i);
+ /* Identify mode capabilities */
+ if (IEEE80211_IS_CHAN_A(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_11A;
+ if (IEEE80211_IS_CHAN_B(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_11B;
+ if (IEEE80211_IS_CHAN_PUREG(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_11G;
+ if (IEEE80211_IS_CHAN_FHSS(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_FH;
+ if (IEEE80211_IS_CHAN_T(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_TURBO_A;
+ if (IEEE80211_IS_CHAN_108G(ch))
+ ic->ic_modecaps |= 1 << IEEE80211_MODE_TURBO_G;
+ if (ic->ic_curchan == NULL) {
+ /* arbitrarily pick the first channel */
+ ic->ic_curchan = &ic->ic_sup_channels[i];
+ }
+ }
+ }
+ /* validate ic->ic_curmode */
+ if ((ic->ic_modecaps & (1 << ic->ic_curmode)) == 0)
+ ic->ic_curmode = IEEE80211_MODE_AUTO;
+ ic->ic_des_chan = IEEE80211_CHAN_ANYC; /* any channel is ok */
+ (void) ieee80211_setmode(ic, ic->ic_curmode);
+
+ if (ic->ic_caps & IEEE80211_C_BURST)
+ ic->ic_flags |= IEEE80211_F_BURST;
+ ic->ic_bintval = IEEE80211_BINTVAL_DEFAULT;
+ ic->ic_lintval = ic->ic_bintval;
+ ic->ic_txpowlimit = IEEE80211_TXPOWER_MAX;
+ ic->ic_bmissthreshold = IEEE80211_HWBMISS_DEFAULT;
+
+ ic->ic_reset = ieee80211_default_reset;
+
+ ieee80211_node_attach(ic);
+ ieee80211_proto_attach(ic);
+ ieee80211_crypto_attach(ic);
+
+ ic->ic_watchdog_timer = 0;
+}
+
+/*
+ * Free any ieee80211 structures associated with the driver.
+ */
+void
+ieee80211_detach(ieee80211com_t *ic)
+{
+ struct ieee80211_impl *im = ic->ic_private;
+
+ ieee80211_stop_watchdog(ic);
+ cv_destroy(&im->im_scan_cv);
+ kmem_free(im, sizeof (ieee80211_impl_t));
+
+ ieee80211_node_detach(ic);
+ ieee80211_crypto_detach(ic);
+
+ mutex_destroy(&ic->ic_genlock);
+}
+
+static struct modlmisc i_wifi_modlmisc = {
+ &mod_miscops,
+ "IEEE80211 Kernel Misc Module"
+};
+
+static struct modlinkage i_wifi_modlinkage = {
+ MODREV_1,
+ &i_wifi_modlmisc,
+ NULL
+};
+
+/*
+ * modlinkage functions
+ */
+int
+_init(void)
+{
+ return (mod_install(&i_wifi_modlinkage));
+}
+
+int
+_fini(void)
+{
+ return (mod_remove(&i_wifi_modlinkage));
+}
+
+int
+_info(struct modinfo *modinfop)
+{
+ return (mod_info(&i_wifi_modlinkage, modinfop));
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_crypto.c b/usr/src/uts/common/io/net80211/net80211_crypto.c
new file mode 100644
index 0000000000..214e1700ec
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_crypto.c
@@ -0,0 +1,510 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 generic crypto support
+ */
+#include <sys/types.h>
+#include <sys/note.h>
+#include "net80211_impl.h"
+
+extern const struct ieee80211_cipher wep;
+
+/*
+ * Table of registered cipher modules.
+ */
+static const struct ieee80211_cipher *ciphers[IEEE80211_CIPHER_MAX];
+static const char *cipher_modnames[] = {
+ "wlan_wep", /* IEEE80211_CIPHER_WEP */
+ "wlan_tkip", /* IEEE80211_CIPHER_TKIP */
+ "wlan_aes_ocb", /* IEEE80211_CIPHER_AES_OCB */
+ "wlan_ccmp", /* IEEE80211_CIPHER_AES_CCM */
+ "wlan_ckip", /* IEEE80211_CIPHER_CKIP */
+};
+
+/*
+ * Default "null" key management routines.
+ */
+/* ARGSUSED */
+static int
+nulldev_key_alloc(ieee80211com_t *ic, const struct ieee80211_key *k,
+ ieee80211_keyix *keyix, ieee80211_keyix *rxkeyix)
+{
+ *keyix = 0; /* use key index 0 for ucast key */
+ *rxkeyix = IEEE80211_KEYIX_NONE;
+ return (1);
+}
+
+/* ARGSUSED */
+static int
+nulldev_key_delete(ieee80211com_t *ic, const struct ieee80211_key *k)
+{
+ return (1);
+}
+
+/* ARGSUSED */
+static int
+nulldev_key_set(ieee80211com_t *ic, const struct ieee80211_key *k,
+ const uint8_t *mac)
+{
+ return (1);
+}
+
+/* ARGSUSED */
+static void
+nulldev_key_update(ieee80211com_t *ic)
+{
+ /* noop */
+}
+
+/*
+ * Reset key state to an unused state. The crypto
+ * key allocation mechanism insures other state (e.g.
+ * key data) is properly setup before a key is used.
+ */
+void
+ieee80211_crypto_resetkey(ieee80211com_t *ic,
+ struct ieee80211_key *k, ieee80211_keyix ix)
+{
+ k->wk_cipher = &ieee80211_cipher_none;
+ k->wk_private = k->wk_cipher->ic_attach(ic, k);
+ k->wk_keyix = ix;
+ k->wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
+}
+
+/*
+ * Establish a relationship between the specified key and cipher
+ * and, if necessary, allocate a hardware index from the driver.
+ * Note that when a fixed key index is required it must be specified
+ * and we blindly assign it w/o consulting the driver.
+ *
+ * This must be the first call applied to a key; all the other key
+ * routines assume wk_cipher is setup.
+ *
+ * Locking must be handled by the caller using:
+ * ieee80211_key_update_begin(ic);
+ * ieee80211_key_update_end(ic);
+ */
+int
+ieee80211_crypto_newkey(ieee80211com_t *ic, int cipher, int flags,
+ struct ieee80211_key *key)
+{
+ const struct ieee80211_cipher *cip;
+ ieee80211_keyix keyix, rxkeyix;
+ void *keyctx;
+ uint16_t oflags;
+
+ /*
+ * Validate cipher and set reference to cipher routines.
+ */
+ if (cipher >= IEEE80211_CIPHER_MAX) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_newkey: "
+ "invalid cipher %u\n", cipher);
+ return (0);
+ }
+ cip = ciphers[cipher];
+ /* already load all the ciphers, cip can't be NULL */
+ if (cip == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_newkey: "
+ "unable to load cipher %u, module %s\n",
+ cipher, cipher < IEEE80211_N(cipher_modnames) ?
+ cipher_modnames[cipher] : "<unknown>");
+ return (0);
+ }
+
+ oflags = key->wk_flags;
+ flags &= IEEE80211_KEY_COMMON;
+ /*
+ * If the hardware does not support the cipher then
+ * fallback to a host-based implementation.
+ */
+ if ((ic->ic_caps & (1<<cipher)) == 0) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_newkey: "
+ "no h/w support for cipher %s, falling back to s/w\n",
+ cip->ic_name);
+ flags |= IEEE80211_KEY_SWCRYPT;
+ }
+
+ /*
+ * Bind cipher to key instance. Note we do this
+ * after checking the device capabilities so the
+ * cipher module can optimize space usage based on
+ * whether or not it needs to do the cipher work.
+ */
+ if (key->wk_cipher != cip || key->wk_flags != flags) {
+again:
+ /*
+ * Fillin the flags so cipher modules can see s/w
+ * crypto requirements and potentially allocate
+ * different state and/or attach different method
+ * pointers.
+ */
+ key->wk_flags = (uint16_t)flags;
+ keyctx = cip->ic_attach(ic, key);
+ if (keyctx == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "crypto_setkey: "
+ "unable to attach cipher %s\n", cip->ic_name);
+ key->wk_flags = oflags; /* restore old flags */
+ return (0);
+ }
+ CIPHER_DETACH(key); /* Detach old cipher */
+ key->wk_cipher = cip;
+ key->wk_private = keyctx;
+ }
+ /*
+ * Commit to requested usage so driver can see the flags.
+ */
+ key->wk_flags = (uint16_t)flags;
+
+ /*
+ * Ask the driver for a key index if we don't have one.
+ * Note that entries in the global key table always have
+ * an index; this means it's safe to call this routine
+ * for these entries just to setup the reference to the
+ * cipher template. Note also that when using software
+ * crypto we also call the driver to give us a key index.
+ */
+ if (key->wk_keyix == IEEE80211_KEYIX_NONE) {
+ if (!DEV_KEY_ALLOC(ic, key, &keyix, &rxkeyix)) {
+ /*
+ * Driver has no room; fallback to doing crypto
+ * in the host. We change the flags and start the
+ * procedure over. If we get back here then there's
+ * no hope and we bail. Note that this can leave
+ * the key in a inconsistent state if the caller
+ * continues to use it.
+ */
+ if ((key->wk_flags & IEEE80211_KEY_SWCRYPT) == 0) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO,
+ "crypto_setkey: "
+ "no h/w resources for cipher %s, "
+ "falling back to s/w\n", cip->ic_name);
+ oflags = key->wk_flags;
+ flags |= IEEE80211_KEY_SWCRYPT;
+ if (cipher == IEEE80211_CIPHER_TKIP)
+ flags |= IEEE80211_KEY_SWMIC;
+ goto again;
+ }
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "crypto_setkey: "
+ "unable to setup cipher %s\n", cip->ic_name);
+ return (0);
+ }
+ key->wk_keyix = keyix;
+ key->wk_rxkeyix = rxkeyix;
+ }
+ return (1);
+}
+
+/*
+ * Remove the key (no locking, for internal use).
+ */
+static int
+ieee80211_crypto_delkey_locked(ieee80211com_t *ic, struct ieee80211_key *key)
+{
+ uint16_t keyix;
+
+ ASSERT(key->wk_cipher != NULL);
+
+ keyix = key->wk_keyix;
+ if (keyix != IEEE80211_KEYIX_NONE) {
+ /*
+ * Remove hardware entry.
+ */
+ if (!DEV_KEY_DELETE(ic, key)) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO,
+ "ieee80211_crypto_delkey_locked: ",
+ "driverdeletes key %u failed\n", keyix);
+ }
+ }
+ CIPHER_DETACH(key);
+ bzero(key, sizeof (struct ieee80211_key));
+ /* NB: cannot depend on key index to decide this */
+ ieee80211_crypto_resetkey(ic, key, IEEE80211_KEYIX_NONE);
+ return (1);
+}
+
+/*
+ * Remove the specified key.
+ */
+int
+ieee80211_crypto_delkey(ieee80211com_t *ic, struct ieee80211_key *key)
+{
+ int status;
+
+ KEY_UPDATE_BEGIN(ic);
+ status = ieee80211_crypto_delkey_locked(ic, key);
+ KEY_UPDATE_END(ic);
+ return (status);
+}
+
+/*
+ * Clear the global key table.
+ */
+static void
+ieee80211_crypto_delglobalkeys(ieee80211com_t *ic)
+{
+ int i;
+
+ KEY_UPDATE_BEGIN(ic);
+ for (i = 0; i < IEEE80211_WEP_NKID; i++)
+ (void) ieee80211_crypto_delkey_locked(ic, &ic->ic_nw_keys[i]);
+ KEY_UPDATE_END(ic);
+}
+
+/*
+ * Set the contents of the specified key.
+ *
+ * Locking must be handled by the caller using:
+ * ieee80211_key_update_begin(ic);
+ * ieee80211_key_update_end(ic);
+ */
+int
+ieee80211_crypto_setkey(ieee80211com_t *ic, struct ieee80211_key *key,
+ const uint8_t *macaddr)
+{
+ const struct ieee80211_cipher *cip = key->wk_cipher;
+
+ ASSERT(cip != NULL);
+
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_setkey: "
+ "%s keyix %u flags 0x%x mac %s len %u\n",
+ cip->ic_name, key->wk_keyix, key->wk_flags,
+ ieee80211_macaddr_sprintf(macaddr), key->wk_keylen);
+
+ /*
+ * Give cipher a chance to validate key contents.
+ * should happen before modifying state.
+ */
+ if (cip->ic_setkey(key) == 0) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_setkey: "
+ "cipher %s rejected key index %u len %u flags 0x%x\n",
+ cip->ic_name, key->wk_keyix, key->wk_keylen,
+ key->wk_flags);
+ return (0);
+ }
+ if (key->wk_keyix == IEEE80211_KEYIX_NONE) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_setkey: "
+ "no key index; should not happen!\n");
+ return (0);
+ }
+ return (DEV_KEY_SET(ic, key, macaddr));
+}
+
+/*
+ * Return the transmit key to use in sending a frame.
+ */
+struct ieee80211_key *
+ieee80211_crypto_getkey(ieee80211com_t *ic)
+{
+ if (ic->ic_def_txkey == IEEE80211_KEYIX_NONE ||
+ KEY_UNDEFINED(ic->ic_nw_keys[ic->ic_def_txkey]))
+ return (NULL);
+ return (&ic->ic_nw_keys[ic->ic_def_txkey]);
+}
+
+uint8_t
+ieee80211_crypto_getciphertype(ieee80211com_t *ic)
+{
+ struct ieee80211_key *key;
+ uint32_t cipher;
+ static const uint8_t ciphermap[] = {
+ WIFI_SEC_WEP, /* IEEE80211_CIPHER_WEP */
+ (uint8_t)-1, /* IEEE80211_CIPHER_TKIP */
+ (uint8_t)-1, /* IEEE80211_CIPHER_AES_OCB */
+ (uint8_t)-1, /* IEEE80211_CIPHER_AES_CCM */
+ (uint8_t)-1, /* 4 is not allocated */
+ (uint8_t)-1, /* IEEE80211_CIPHER_CKIP */
+ WIFI_SEC_NONE, /* IEEE80211_CIPHER_NONE */
+ };
+
+ if ((ic->ic_flags & IEEE80211_F_PRIVACY) == 0)
+ return (WIFI_SEC_NONE);
+
+ key = ieee80211_crypto_getkey(ic);
+ if (key == NULL)
+ return (WIFI_SEC_NONE);
+
+ cipher = key->wk_cipher->ic_cipher;
+ ASSERT(cipher < IEEE80211_N(ciphermap));
+ return (ciphermap[cipher]);
+}
+
+/*
+ * Add privacy headers appropriate for the specified key.
+ */
+struct ieee80211_key *
+ieee80211_crypto_encap(ieee80211com_t *ic, mblk_t *mp)
+{
+ struct ieee80211_key *k;
+ const struct ieee80211_cipher *cip;
+ uint8_t keyix;
+
+ if (ic->ic_def_txkey == IEEE80211_KEYIX_NONE) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO,
+ "ieee80211_crypto_encap: %s",
+ " No default xmit key for frame\n");
+ return (NULL);
+ }
+ keyix = ic->ic_def_txkey;
+ k = &ic->ic_nw_keys[ic->ic_def_txkey];
+ cip = k->wk_cipher;
+ return (cip->ic_encap(k, mp, keyix<<6) ? k : NULL);
+}
+
+/*
+ * Validate and strip privacy headers (and trailer) for a
+ * received frame that has the WEP/Privacy bit set.
+ */
+struct ieee80211_key *
+ieee80211_crypto_decap(ieee80211com_t *ic, mblk_t *mp, int hdrlen)
+{
+ struct ieee80211_key *k;
+ const struct ieee80211_cipher *cip;
+ uint8_t *ivp;
+ uint8_t keyid;
+
+ /* NB: this minimum size data frame could be bigger */
+ if ((mp->b_wptr - mp->b_rptr) < IEEE80211_WEP_MINLEN) {
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "ieee80211_crypto_decap:"
+ " WEP data frame too short, len %u\n",
+ mp->b_wptr - mp->b_rptr);
+ return (NULL);
+ }
+ /*
+ * Locate the key. If unicast and there is no unicast
+ * key then we fall back to the key id in the header.
+ * This assumes unicast keys are only configured when
+ * the key id in the header is meaningless (typically 0).
+ */
+ ivp = mp->b_rptr + hdrlen;
+ keyid = ivp[IEEE80211_WEP_IVLEN];
+ k = &ic->ic_nw_keys[keyid >> 6];
+
+ /* check to avoid panic when wep is on but key is not set */
+ if (k->wk_cipher == &ieee80211_cipher_none ||
+ k->wk_cipher == NULL)
+ return (NULL);
+
+ cip = k->wk_cipher;
+ return ((cip->ic_decap)(k, mp, hdrlen) ? k : NULL);
+}
+
+
+/*
+ * Setup crypto support.
+ */
+void
+ieee80211_crypto_attach(ieee80211com_t *ic)
+{
+ struct ieee80211_crypto_state *cs = &ic->ic_crypto;
+ int i;
+
+ /* NB: we assume everything is pre-zero'd */
+ cs->cs_def_txkey = IEEE80211_KEYIX_NONE;
+ for (i = 0; i < IEEE80211_WEP_NKID; i++) {
+ ieee80211_crypto_resetkey(ic, &cs->cs_nw_keys[i],
+ IEEE80211_KEYIX_NONE);
+ }
+
+ /*
+ * Initialize the driver key support routines to noop entries.
+ * This is useful especially for the cipher test modules.
+ */
+ cs->cs_key_alloc = nulldev_key_alloc;
+ cs->cs_key_set = nulldev_key_set;
+ cs->cs_key_delete = nulldev_key_delete;
+ cs->cs_key_update_begin = nulldev_key_update;
+ cs->cs_key_update_end = nulldev_key_update;
+
+ ieee80211_crypto_register(&wep);
+}
+
+/*
+ * Teardown crypto support.
+ */
+void
+ieee80211_crypto_detach(ieee80211com_t *ic)
+{
+ ieee80211_crypto_delglobalkeys(ic);
+
+ ieee80211_crypto_unregister(&wep);
+}
+
+/*
+ * Register a crypto cipher module.
+ */
+void
+ieee80211_crypto_register(const struct ieee80211_cipher *cip)
+{
+ if (cip->ic_cipher >= IEEE80211_CIPHER_MAX) {
+ ieee80211_err("ieee80211_crypto_register: "
+ "cipher %s has an invalid cipher index %u\n",
+ cip->ic_name, cip->ic_cipher);
+ return;
+ }
+ if (ciphers[cip->ic_cipher] != NULL && ciphers[cip->ic_cipher] != cip) {
+ ieee80211_err("ieee80211_crypto_register: "
+ "cipher %s registered with a different template\n",
+ cip->ic_name);
+ return;
+ }
+ ciphers[cip->ic_cipher] = cip;
+}
+
+/*
+ * Unregister a crypto cipher module.
+ */
+void
+ieee80211_crypto_unregister(const struct ieee80211_cipher *cip)
+{
+ if (cip->ic_cipher >= IEEE80211_CIPHER_MAX) {
+ ieee80211_err("ieee80211_crypto_unregister: "
+ "cipher %s has an invalid cipher index %u\n",
+ cip->ic_name, cip->ic_cipher);
+ return;
+ }
+ if (ciphers[cip->ic_cipher] != NULL && ciphers[cip->ic_cipher] != cip) {
+ ieee80211_err("ieee80211_crypto_unregister: "
+ "cipher %s registered with a different template\n",
+ cip->ic_name);
+ return;
+ }
+ /* NB: don't complain about not being registered */
+ ciphers[cip->ic_cipher] = NULL;
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_crypto_none.c b/usr/src/uts/common/io/net80211/net80211_crypto_none.c
new file mode 100644
index 0000000000..6f2200258c
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_crypto_none.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 NULL crypto support.
+ */
+#include "net80211_impl.h"
+
+static void *none_attach(struct ieee80211com *, struct ieee80211_key *);
+static void none_detach(struct ieee80211_key *);
+static int none_setkey(struct ieee80211_key *);
+static int none_encap(struct ieee80211_key *, mblk_t *, uint8_t);
+static int none_decap(struct ieee80211_key *, mblk_t *, int);
+static int none_enmic(struct ieee80211_key *, mblk_t *, int);
+static int none_demic(struct ieee80211_key *, mblk_t *, int);
+
+const struct ieee80211_cipher ieee80211_cipher_none = {
+ "NONE",
+ IEEE80211_CIPHER_NONE,
+ 0,
+ 0,
+ 0,
+ none_attach,
+ none_detach,
+ none_setkey,
+ none_encap,
+ none_decap,
+ none_enmic,
+ none_demic,
+};
+
+/* ARGSUSED */
+static void *
+none_attach(struct ieee80211com *ic, struct ieee80211_key *k)
+{
+ return (ic); /* for diagnostics+stats */
+}
+
+/* ARGSUSED */
+static void
+none_detach(struct ieee80211_key *k)
+{
+ /* noop */
+}
+
+/* ARGSUSED */
+static int
+none_setkey(struct ieee80211_key *k)
+{
+ return (1);
+}
+
+/* ARGSUSED */
+static int
+none_encap(struct ieee80211_key *k, mblk_t *mp, uint8_t keyid)
+{
+ /*
+ * The specified key is not setup; this can
+ * happen, at least, when changing keys.
+ */
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "none_encap: "
+ "key id %u is not set (encap)\n", keyid >> 6);
+ return (0);
+}
+
+/* ARGSUSED */
+static int
+none_decap(struct ieee80211_key *k, mblk_t *mp, int hdrlen)
+{
+ struct ieee80211_frame *wh = (struct ieee80211_frame *)mp->b_rptr;
+ const uint8_t *ivp = (const uint8_t *)&wh[1];
+
+ /*
+ * The specified key is not setup; this can
+ * happen, at least, when changing keys.
+ */
+ ieee80211_dbg(IEEE80211_MSG_CRYPTO, "none_decap"
+ "key id %u is not set (decap)\n",
+ ivp[IEEE80211_WEP_IVLEN] >> 6);
+ return (0);
+}
+
+/* ARGSUSED */
+static int
+none_enmic(struct ieee80211_key *k, mblk_t *mp, int force)
+{
+ return (0);
+}
+
+/* ARGSUSED */
+static int
+none_demic(struct ieee80211_key *k, mblk_t *mp, int force)
+{
+ return (0);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_crypto_wep.c b/usr/src/uts/common/io/net80211/net80211_crypto_wep.c
new file mode 100644
index 0000000000..5141a3c25a
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_crypto_wep.c
@@ -0,0 +1,420 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 WEP crypto support.
+ */
+#include <sys/byteorder.h>
+#include <sys/crypto/common.h>
+#include <sys/crypto/api.h>
+#include <sys/crc32.h>
+#include <sys/random.h>
+#include "net80211_impl.h"
+
+static void *wep_attach(struct ieee80211com *, struct ieee80211_key *);
+static void wep_detach(struct ieee80211_key *);
+static int wep_setkey(struct ieee80211_key *);
+static int wep_encap(struct ieee80211_key *, mblk_t *, uint8_t keyid);
+static int wep_decap(struct ieee80211_key *, mblk_t *, int);
+static int wep_enmic(struct ieee80211_key *, mblk_t *, int);
+static int wep_demic(struct ieee80211_key *, mblk_t *, int);
+
+const struct ieee80211_cipher wep = {
+ "WEP",
+ IEEE80211_CIPHER_WEP,
+ IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN,
+ IEEE80211_WEP_CRCLEN,
+ 0,
+ wep_attach,
+ wep_detach,
+ wep_setkey,
+ wep_encap,
+ wep_decap,
+ wep_enmic,
+ wep_demic,
+};
+
+int rc4_init(crypto_context_t *, const uint8_t *, int);
+int rc4_crypt(crypto_context_t, const uint8_t *, uint8_t *, int);
+int rc4_final(crypto_context_t, uint8_t *, int);
+
+static int wep_encrypt(struct ieee80211_key *, mblk_t *, int);
+static int wep_decrypt(struct ieee80211_key *, mblk_t *, int);
+
+struct wep_ctx {
+ ieee80211com_t *wc_ic; /* for diagnostics */
+ uint32_t wc_iv; /* initial vector for crypto */
+};
+
+/* Table of CRCs of all 8-bit messages */
+static uint32_t crc_table[] = { CRC32_TABLE };
+
+/* ARGSUSED */
+static void *
+wep_attach(struct ieee80211com *ic, struct ieee80211_key *k)
+{
+ struct wep_ctx *ctx;
+
+ ctx = kmem_zalloc(sizeof (struct wep_ctx), KM_NOSLEEP);
+ if (ctx == NULL)
+ return (NULL);
+
+ ctx->wc_ic = ic;
+ (void) random_get_pseudo_bytes((unsigned char *)&ctx->wc_iv,
+ sizeof (uint32_t));
+ return (ctx);
+}
+
+static void
+wep_detach(struct ieee80211_key *k)
+{
+ struct wep_ctx *ctx = k->wk_private;
+
+ if (ctx != NULL)
+ kmem_free(ctx, sizeof (struct wep_ctx));
+}
+
+static int
+wep_setkey(struct ieee80211_key *k)
+{
+ /*
+ * WEP key length is standardized to 40-bit. Many
+ * implementations support 104-bit WEP kwys.
+ */
+ return (k->wk_keylen == 40/NBBY || k->wk_keylen == 104/NBBY);
+}
+
+/*
+ * Add privacy headers appropriate for the specified key.
+ */
+static int
+wep_encap(struct ieee80211_key *k, mblk_t *mp, uint8_t keyid)
+{
+ struct wep_ctx *ctx = k->wk_private;
+ struct ieee80211_frame *wh = (struct ieee80211_frame *)mp->b_rptr;
+ uint32_t iv;
+ uint8_t *ivp;
+ int hdrlen;
+
+ if (mp == NULL)
+ return (0);
+ hdrlen = ieee80211_hdrspace(wh);
+
+ ivp = (uint8_t *)wh;
+ ivp += hdrlen;
+
+ /*
+ * IV must not duplicate during the lifetime of the key.
+ * But no mechanism to renew keys is defined in IEEE 802.11
+ * WEP. And IV may be duplicated between other stations
+ * because of the session key itself is shared.
+ * So we use pseudo random IV for now, though it is not the
+ * right way.
+ */
+ iv = ctx->wc_iv;
+ /*
+ * Skip 'bad' IVs from Fluhrer/Mantin/Shamir:
+ * (B, 255, N) with 3 <= B < 8
+ */
+ if ((iv & 0xff00) == 0xff00) {
+ int B = (iv & 0xff0000) >> 16;
+ if (3 <= B && B < 16)
+ iv = (B+1) << 16;
+ }
+ ctx->wc_iv = iv + 1;
+
+ ivp[2] = (uint8_t)(iv >> 0);
+ ivp[1] = (uint8_t)(iv >> 8);
+ ivp[0] = (uint8_t)(iv >> 16);
+
+ /* Key ID and pad */
+ ivp[IEEE80211_WEP_IVLEN] = keyid;
+
+ if ((k->wk_flags & IEEE80211_KEY_SWCRYPT) &&
+ (wep_encrypt(k, mp, hdrlen) == 0))
+ return (0);
+
+ return (1);
+}
+
+/*
+ * Validate and strip privacy headers (and trailer) for a
+ * received frame. If necessary, decrypt the frame using
+ * the specified key.
+ */
+static int
+wep_decap(struct ieee80211_key *k, mblk_t *mp, int hdrlen)
+{
+ struct ieee80211_frame *wh, whbuf;
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+
+ /*
+ * Check if the device handled the decrypt in hardware.
+ * If so we just strip the header; otherwise we need to
+ * handle the decrypt in software.
+ */
+ if ((k->wk_flags & IEEE80211_KEY_SWCRYPT) &&
+ (wep_decrypt(k, mp, hdrlen) == 0)) {
+ ieee80211_err("WEP ICV mismatch on decrypt\n");
+ return (0);
+ }
+
+ /*
+ * Copy up 802.11 header and strip crypto bits.
+ */
+ bcopy(wh, &whbuf, sizeof (whbuf));
+ mp->b_rptr += wep.ic_header;
+ bcopy(&whbuf, mp->b_rptr, hdrlen);
+ mp->b_wptr -= wep.ic_trailer;
+
+ return (1);
+}
+
+/*
+ * Add MIC to the frame as needed.
+ */
+/* ARGSUSED */
+static int
+wep_enmic(struct ieee80211_key *k, mblk_t *mp, int force)
+{
+ return (1);
+}
+
+/*
+ * Verify and strip MIC from the frame.
+ */
+/* ARGSUSED */
+static int
+wep_demic(struct ieee80211_key *k, mblk_t *mp, int force)
+{
+ return (1);
+}
+
+static int
+wep_encrypt(struct ieee80211_key *key, mblk_t *mp, int hdrlen)
+{
+ uint8_t rc4key[IEEE80211_WEP_IVLEN + IEEE80211_KEYBUF_SIZE];
+ uint8_t crcbuf[IEEE80211_WEP_CRCLEN];
+ uint8_t *icv;
+ uint32_t crc;
+ crypto_context_t ctx;
+ int rv;
+
+ ASSERT(key->wk_flags & IEEE80211_KEY_SWCRYPT);
+
+ /* ctx->wc_ic->isc_stats.is_crypto_wep++; */
+
+ (void) memcpy(rc4key, mp->b_rptr + hdrlen, IEEE80211_WEP_IVLEN);
+ (void) memcpy(rc4key + IEEE80211_WEP_IVLEN, key->wk_key,
+ key->wk_keylen);
+
+ ctx = NULL;
+ rv = rc4_init(&ctx, (const uint8_t *)rc4key,
+ IEEE80211_WEP_IVLEN + key->wk_keylen);
+
+ if (rv != CRYPTO_SUCCESS)
+ return (0);
+
+ /* calculate CRC over unencrypted data */
+ CRC32(crc, mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_wptr - mp->b_rptr - (hdrlen + wep.ic_header),
+ -1U, crc_table);
+
+ /* encrypt data */
+ (void) rc4_crypt(ctx,
+ mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_wptr - mp->b_rptr - (hdrlen + wep.ic_header));
+
+ /* tack on ICV */
+ *(uint32_t *)crcbuf = LE_32(~crc);
+ icv = mp->b_wptr;
+ mp->b_wptr += IEEE80211_WEP_CRCLEN;
+ (void) rc4_crypt(ctx, crcbuf, icv, IEEE80211_WEP_CRCLEN);
+
+ (void) rc4_final(ctx, icv, IEEE80211_WEP_CRCLEN);
+
+ return (1);
+}
+
+static int
+wep_decrypt(struct ieee80211_key *key, mblk_t *mp, int hdrlen)
+{
+ uint8_t rc4key[IEEE80211_WEP_IVLEN + IEEE80211_KEYBUF_SIZE];
+ uint8_t crcbuf[IEEE80211_WEP_CRCLEN];
+ uint8_t *icv;
+ uint32_t crc;
+ crypto_context_t ctx;
+ int rv;
+
+ ASSERT(key->wk_flags & IEEE80211_KEY_SWCRYPT);
+
+ /* ctx->wc_ic->isc_stats.is_crypto_wep++; */
+
+ (void) memcpy(rc4key, mp->b_rptr + hdrlen, IEEE80211_WEP_IVLEN);
+ (void) memcpy(rc4key + IEEE80211_WEP_IVLEN, key->wk_key,
+ key->wk_keylen);
+
+ ctx = NULL;
+ rv = rc4_init(&ctx, (const uint8_t *)rc4key,
+ IEEE80211_WEP_IVLEN + key->wk_keylen);
+
+ if (rv != CRYPTO_SUCCESS)
+ return (0);
+
+ /* decrypt data */
+ (void) rc4_crypt(ctx,
+ mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_wptr - mp->b_rptr -
+ (hdrlen + wep.ic_header + wep.ic_trailer));
+
+ /* calculate CRC over unencrypted data */
+ CRC32(crc, mp->b_rptr + hdrlen + wep.ic_header,
+ mp->b_wptr - mp->b_rptr -
+ (hdrlen + wep.ic_header + wep.ic_trailer),
+ -1U, crc_table);
+
+ /* decrypt ICV and compare to CRC */
+ icv = mp->b_wptr - IEEE80211_WEP_CRCLEN;
+ (void) rc4_crypt(ctx, icv, crcbuf, IEEE80211_WEP_CRCLEN);
+
+ (void) rc4_final(ctx, crcbuf, IEEE80211_WEP_CRCLEN);
+
+ return (crc == ~LE_32(*(uint32_t *)crcbuf));
+}
+
+/*
+ * rc_init() - To init the key, for multiply encryption/decryption
+ * Using the Kernel encryption framework
+ */
+int
+rc4_init(crypto_context_t *ctx, const uint8_t *key, int keylen)
+{
+ crypto_mechanism_t mech;
+ crypto_key_t crkey;
+ int rv;
+
+ bzero(&crkey, sizeof (crkey));
+
+ crkey.ck_format = CRYPTO_KEY_RAW;
+ crkey.ck_data = (char *)key;
+ /* keys are measured in bits, not bytes, so multiply by 8 */
+ crkey.ck_length = keylen * 8;
+
+ mech.cm_type = crypto_mech2id(SUN_CKM_RC4);
+ mech.cm_param = NULL;
+ mech.cm_param_len = 0;
+
+ rv = crypto_encrypt_init(&mech, &crkey, NULL, ctx, NULL);
+ if (rv != CRYPTO_SUCCESS)
+ cmn_err(CE_WARN, "rc4_init failed (%x)", rv);
+
+ return (rv);
+}
+
+/*
+ * rc4_crypt
+ *
+ * Use the Kernel encryption framework to provide the
+ * crypto operations for the indicated data.
+ */
+int
+rc4_crypt(crypto_context_t ctx, const uint8_t *inbuf,
+ uint8_t *outbuf, int buflen)
+{
+ int rv = CRYPTO_FAILED;
+
+ crypto_data_t d1, d2;
+
+ ASSERT(inbuf != NULL);
+ ASSERT(outbuf != NULL);
+
+ bzero(&d1, sizeof (d1));
+ bzero(&d2, sizeof (d2));
+
+ d1.cd_format = CRYPTO_DATA_RAW;
+ d1.cd_offset = 0;
+ d1.cd_length = buflen;
+ d1.cd_raw.iov_base = (char *)inbuf;
+ d1.cd_raw.iov_len = buflen;
+
+ d2.cd_format = CRYPTO_DATA_RAW;
+ d2.cd_offset = 0;
+ d2.cd_length = buflen;
+ d2.cd_raw.iov_base = (char *)outbuf;
+ d2.cd_raw.iov_len = buflen;
+
+ rv = crypto_encrypt_update(ctx, &d1, &d2, NULL);
+
+ if (rv != CRYPTO_SUCCESS)
+ cmn_err(CE_WARN, "rc4_crypt failed (%x)", rv);
+ return (rv);
+}
+
+/*
+ * rc4_final
+ *
+ * Use the Kernel encryption framework to provide the
+ * crypto operations for the indicated data.
+ */
+int
+rc4_final(crypto_context_t ctx, uint8_t *outbuf, int buflen)
+{
+ int rv = CRYPTO_FAILED;
+
+ crypto_data_t d2;
+
+ ASSERT(outbuf != NULL);
+
+ bzero(&d2, sizeof (d2));
+
+ d2.cd_format = CRYPTO_DATA_RAW;
+ d2.cd_offset = 0;
+ d2.cd_length = buflen;
+ d2.cd_raw.iov_base = (char *)outbuf;
+ d2.cd_raw.iov_len = buflen;
+
+ rv = crypto_encrypt_final(ctx, &d2, NULL);
+
+ if (rv != CRYPTO_SUCCESS)
+ cmn_err(CE_WARN, "rc4_final failed (%x)", rv);
+ return (rv);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_impl.h b/usr/src/uts/common/io/net80211/net80211_impl.h
new file mode 100644
index 0000000000..2b535f4170
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_impl.h
@@ -0,0 +1,408 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef _SYS_NET80211_IMPL_H
+#define _SYS_NET80211_IMPL_H
+
+#include <sys/sysmacros.h>
+#include <sys/list.h>
+#include <sys/note.h>
+#include <sys/net80211_proto.h>
+#include <sys/net80211.h>
+#include <sys/mac_wifi.h>
+
+/*
+ * IEEE802.11 kernel support module
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IEEE80211_TXPOWER_MAX 100 /* .5 dbM */
+#define IEEE80211_TXPOWER_MIN 0 /* kill radio */
+
+#define IEEE80211_DTIM_MAX 15 /* max DTIM period */
+#define IEEE80211_DTIM_MIN 1 /* min DTIM period */
+#define IEEE80211_DTIM_DEFAULT 1 /* default DTIM period */
+
+/* NB: min+max come from WiFi requirements */
+#define IEEE80211_BINTVAL_MAX 1000 /* max beacon interval (TU's) */
+#define IEEE80211_BINTVAL_MIN 25 /* min beacon interval (TU's) */
+#define IEEE80211_BINTVAL_DEFAULT 100 /* default beacon interval (TU's) */
+
+#define IEEE80211_BMISS_MAX 2 /* maximum consecutive bmiss allowed */
+#define IEEE80211_SWBMISS_THRESHOLD 50 /* s/w bmiss threshold (TU's) */
+#define IEEE80211_HWBMISS_DEFAULT 7 /* h/w bmiss threshold (beacons) */
+
+#define IEEE80211_PS_SLEEP 0x1 /* STA is in power saving mode */
+#define IEEE80211_PS_MAX_QUEUE 50 /* maximum saved packets */
+
+#define IEEE80211_RTS_DEFAULT IEEE80211_RTS_MAX
+#define IEEE80211_FRAG_DEFAULT IEEE80211_FRAG_MAX
+
+/*
+ * The RSSI values of two node are taken as almost the same when
+ * the difference between these two node's RSSI values is within
+ * IEEE80211_RSSI_CMP_THRESHOLD
+ */
+#define IEEE80211_RSSI_CMP_THRESHOLD 5
+
+/*
+ * Each ieee80211com instance has a single timer that fires once a
+ * second. This is used to initiate various work depending on the
+ * state of the instance: scanning (passive or active), ``transition''
+ * (waiting for a response to a management frame when operating
+ * as a station), and node inactivity processing (when operating
+ * as an AP). For inactivity processing each node has a timeout
+ * set in it's in_inact field that is decremented on each timeout
+ * and the node is reclaimed when the counter goes to zero. We
+ * use different inactivity timeout values depending on whether
+ * the node is associated and authorized (either by 802.1x or
+ * open/shared key authentication) or associated but yet to be
+ * authorized. The latter timeout is shorter to more aggressively
+ * reclaim nodes that leave part way through the 802.1x exchange.
+ *
+ * IEEE80211_INACT_WAIT defines node table's inactivity interval in
+ * seconds. On timeout, node table's registered nt_timeout callback
+ * function is executed. Each node in the node table has a timeout
+ * set in its in_inact field with IEEE80211_INACT_<state>. In
+ * nt_timeout function, node table is iterated and each node's
+ * in_inact is decremented. So IEEE80211_INACT_<state> is defined in
+ * the form [inact_sec]/IEEE80211_INACT_WAIT.
+ *
+ */
+#define IEEE80211_INACT_WAIT 15 /* inactivity interval (secs) */
+#define IEEE80211_INACT_INIT (30/IEEE80211_INACT_WAIT) /* initial */
+#define IEEE80211_INACT_ASSOC (180/IEEE80211_INACT_WAIT)
+ /* associated but not authorized */
+#define IEEE80211_INACT_RUN (300/IEEE80211_INACT_WAIT) /* authorized */
+#define IEEE80211_INACT_PROBE (30/IEEE80211_INACT_WAIT) /* probe */
+#define IEEE80211_INACT_SCAN (300/IEEE80211_INACT_WAIT) /* scanned */
+
+#define IEEE80211_TRANS_WAIT 5 /* mgt frame tx timer (secs) */
+
+/*
+ * Useful combinations of channel characteristics.
+ */
+#define IEEE80211_CHAN_FHSS \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK)
+#define IEEE80211_CHAN_A \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_B \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
+#define IEEE80211_CHAN_PUREG \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_G \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
+#define IEEE80211_CHAN_T \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
+#define IEEE80211_CHAN_108G \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
+
+#define IEEE80211_CHAN_ALL \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_GFSK | \
+ IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN)
+#define IEEE80211_CHAN_ALLTURBO \
+ (IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO)
+
+#define IEEE80211_IS_CHAN_FHSS(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
+#define IEEE80211_IS_CHAN_A(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
+#define IEEE80211_IS_CHAN_B(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
+#define IEEE80211_IS_CHAN_PUREG(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
+#define IEEE80211_IS_CHAN_G(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
+#define IEEE80211_IS_CHAN_ANYG(_c) \
+ (IEEE80211_IS_CHAN_PUREG(_c) || IEEE80211_IS_CHAN_G(_c))
+#define IEEE80211_IS_CHAN_T(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_T) == IEEE80211_CHAN_T)
+#define IEEE80211_IS_CHAN_108G(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_108G) == IEEE80211_CHAN_108G)
+
+#define IEEE80211_IS_CHAN_OFDM(_c) \
+ ((_c)->ich_flags & IEEE80211_CHAN_OFDM)
+#define IEEE80211_IS_CHAN_CCK(_c) \
+ ((_c)->ich_flags & IEEE80211_CHAN_CCK)
+#define IEEE80211_IS_CHAN_GFSK(_c) \
+ ((_c)->ich_flags & IEEE80211_CHAN_GFSK)
+#define IEEE80211_IS_CHAN_PASSIVE(_c) \
+ ((_c)->ich_flags & IEEE80211_CHAN_PASSIVE)
+
+/* ni_chan encoding for FH phy */
+#define IEEE80211_FH_CHANMOD 80
+#define IEEE80211_FH_CHAN(set, pat) \
+ (((set) - 1) * IEEE80211_FH_CHANMOD + (pat))
+#define IEEE80211_FH_CHANSET(chan) \
+ ((chan) / IEEE80211_FH_CHANMOD + 1)
+#define IEEE80211_FH_CHANPAT(chan) \
+ ((chan) % IEEE80211_FH_CHANMOD)
+
+#define IEEE80211_NODE_AUTH 0x0001 /* authorized for data */
+#define IEEE80211_NODE_QOS 0x0002 /* QoS enabled */
+#define IEEE80211_NODE_ERP 0x0004 /* ERP enabled */
+#define IEEE80211_NODE_PWR_MGT 0x0010 /* power save mode enabled */
+#define IEEE80211_NODE_AREF 0x0020 /* authentication ref held */
+
+#define IEEE80211_MAXRSSI 127
+
+/* Debug Flags */
+#define IEEE80211_MSG_DEBUG 0x40000000 /* IFF_DEBUG equivalent */
+#define IEEE80211_MSG_DUMPPKTS 0x20000000 /* IFF_LINK2 equivalant */
+#define IEEE80211_MSG_CRYPTO 0x10000000 /* crypto work */
+#define IEEE80211_MSG_INPUT 0x08000000 /* input handling */
+#define IEEE80211_MSG_XRATE 0x04000000 /* rate set handling */
+#define IEEE80211_MSG_ELEMID 0x02000000 /* element id parsing */
+#define IEEE80211_MSG_NODE 0x01000000 /* node handling */
+#define IEEE80211_MSG_ASSOC 0x00800000 /* association handling */
+#define IEEE80211_MSG_AUTH 0x00400000 /* authentication handling */
+#define IEEE80211_MSG_SCAN 0x00200000 /* scanning */
+#define IEEE80211_MSG_OUTPUT 0x00100000 /* output handling */
+#define IEEE80211_MSG_STATE 0x00080000 /* state machine */
+#define IEEE80211_MSG_POWER 0x00040000 /* power save handling */
+#define IEEE80211_MSG_DOT1X 0x00020000 /* 802.1x authenticator */
+#define IEEE80211_MSG_DOT1XSM 0x00010000 /* 802.1x state machine */
+#define IEEE80211_MSG_RADIUS 0x00008000 /* 802.1x radius client */
+#define IEEE80211_MSG_RADDUMP 0x00004000 /* dump 802.1x radius packets */
+#define IEEE80211_MSG_RADKEYS 0x00002000 /* dump 802.1x keys */
+#define IEEE80211_MSG_WPA 0x00001000 /* WPA/RSN protocol */
+#define IEEE80211_MSG_ACL 0x00000800 /* ACL handling */
+#define IEEE80211_MSG_WME 0x00000400 /* WME protocol */
+#define IEEE80211_MSG_SUPERG 0x00000200 /* Atheros SuperG protocol */
+#define IEEE80211_MSG_DOTH 0x00000100 /* 802.11h support */
+#define IEEE80211_MSG_INACT 0x00000080 /* inactivity handling */
+#define IEEE80211_MSG_ROAM 0x00000040 /* sta-mode roaming */
+#define IEEE80211_MSG_CONFIG 0x00000020 /* wificonfig/dladm */
+#define IEEE80211_MSG_ANY 0xffffffff /* anything */
+
+/* Error flags returned by ieee80211_match_bss */
+#define IEEE80211_BADCHAN 0x01
+#define IEEE80211_BADOPMODE 0x02
+#define IEEE80211_BADPRIVACY 0x04
+#define IEEE80211_BADRATE 0x08
+#define IEEE80211_BADESSID 0x10
+#define IEEE80211_BADBSSID 0x20
+#define IEEE80211_NODEFAIL 0x40
+
+typedef struct ieee80211_impl {
+ struct ieee80211com *ic;
+ uint8_t im_chan_avail[IEEE80211_CHAN_BYTES];
+ uint8_t im_chan_scan[IEEE80211_CHAN_BYTES];
+
+ uint8_t im_bmiss_count; /* current beacon miss count */
+ int32_t im_bmiss_max; /* max bmiss before scan */
+ timeout_id_t im_swbmiss;
+ uint16_t im_swbmiss_count; /* beacons in last period */
+ uint16_t im_swbmiss_period; /* s/w bmiss period */
+
+ int32_t im_mgt_timer; /* mgmt timeout, secs */
+ int32_t im_inact_timer; /* inactivity timer wait, sec */
+ int32_t im_inact_init; /* initial setting */
+ int32_t im_inact_assoc; /* assoc but not authorized */
+ int32_t im_inact_run; /* authorized setting */
+ int32_t im_inact_probe; /* inactive probe time */
+
+ kcondvar_t im_scan_cv; /* wait scan complete */
+} ieee80211_impl_t;
+
+/*
+ * Parameters supplied when adding/updating an entry in a
+ * scan cache. Pointer variables should be set to NULL
+ * if no data is available. Pointer references can be to
+ * local data; any information that is saved will be copied.
+ * All multi-byte values must be in host byte order.
+ */
+struct ieee80211_scanparams {
+ uint16_t capinfo; /* 802.11 capabilities */
+ enum ieee80211_phytype phytype;
+ uint16_t fhdwell; /* FHSS dwell interval */
+ uint8_t chan;
+ uint8_t bchan;
+ uint8_t fhindex;
+ uint8_t erp;
+ uint16_t bintval;
+ uint8_t timoff;
+ uint8_t *tim;
+ uint8_t *tstamp;
+ uint8_t *country;
+ uint8_t *ssid;
+ uint8_t *rates;
+ uint8_t *xrates;
+ uint8_t *wpa;
+ uint8_t *wme;
+};
+
+#define IEEE80211_SEND_MGMT(_ic, _in, _type, _arg) \
+ ((*(_ic)->ic_send_mgmt)((_ic), (_in), (_type), (_arg)))
+
+/* Verify the existence and length of __elem or get out. */
+#define IEEE80211_VERIFY_ELEMENT(__elem, __maxlen, __func) do { \
+ _NOTE(CONSTCOND) \
+ if ((__elem) == NULL) { \
+ ieee80211_err("ieee80211: no #__elem \n"); \
+ __func; \
+ } \
+ if ((__elem)[1] > (__maxlen)) { \
+ ieee80211_err("ieee80211: bad "#__elem " len %d\n", \
+ (__elem)[1]); \
+ __func; \
+ } \
+ _NOTE(CONSTCOND) \
+} while (0)
+
+#define IEEE80211_VERIFY_LENGTH(_len, _minlen, _func) do { \
+ _NOTE(CONSTCOND) \
+ if ((_len) < (_minlen)) { \
+ ieee80211_dbg(IEEE80211_MSG_ELEMID, \
+ "ie of type %s too short", \
+ ieee80211_mgt_subtype_name[subtype >> \
+ IEEE80211_FC0_SUBTYPE_SHIFT]); \
+ _func; \
+ } \
+ _NOTE(CONSTCOND) \
+} while (0)
+
+#define IEEE80211_VERIFY_SSID(_in, _ssid, _func) do { \
+ _NOTE(CONSTCOND) \
+ ASSERT((_in) != NULL); \
+ if ((_ssid)[1] != 0 && \
+ ((_ssid)[1] != (_in)->in_esslen || \
+ bcmp((_ssid) + 2, (_in)->in_essid, (_ssid)[1]) != 0)) { \
+ _func; \
+ } \
+ _NOTE(CONSTCOND) \
+} while (0)
+
+#define ieee80211_setbit(a, i) ((a)[(i)/NBBY] |= (1 << ((i)%NBBY)))
+#define ieee80211_clrbit(a, i) ((a)[(i)/NBBY] &= ~(1 << ((i)%NBBY)))
+#define ieee80211_isset(a, i) ((a)[(i)/NBBY] & (1 << ((i)%NBBY)))
+#define ieee80211_isclr(a, i) (!((a)[(i)/NBBY] & (1 << ((i)%NBBY))))
+
+#define IEEE80211_N(a) (sizeof (a) / sizeof (a[0]))
+
+#define IEEE80211_LOCK(_ic) \
+ mutex_enter(&(_ic)->ic_genlock)
+#define IEEE80211_UNLOCK(_ic) \
+ mutex_exit(&(_ic)->ic_genlock)
+#define IEEE80211_IS_LOCKED(_ic) \
+ mutex_owned(&(_ic)->ic_genlock)
+#define IEEE80211_LOCK_ASSERT(_ic) \
+ ASSERT(mutex_owned(&(_ic)->ic_genlock))
+
+#define IEEE80211_NODE_LOCK(_nt) \
+ mutex_enter(&(_nt)->nt_nodelock)
+#define IEEE80211_NODE_UNLOCK(_nt) \
+ mutex_exit(&(_nt)->nt_nodelock)
+#define IEEE80211_NODE_IS_LOCKED(_nt) \
+ mutex_owned(&(_nt)->nt_nodelock)
+#define IEEE80211_NODE_LOCK_ASSERT(_nt) \
+ ASSERT(mutex_owned(&(_nt)->nt_nodelock))
+#define ieee80211_node_hash(addr) \
+ (((uint8_t *)(addr))[IEEE80211_ADDR_LEN - 1] % IEEE80211_NODE_HASHSIZE)
+
+#define IEEE80211_SCAN_LOCK(_nt) mutex_enter(&(_nt)->nt_scanlock)
+#define IEEE80211_SCAN_UNLOCK(_nt) mutex_exit(&(_nt)->nt_scanlock)
+
+#define IEEE80211_RV(v) ((v) & IEEE80211_RATE_VAL)
+
+#define IEEE80211_SUBTYPE_NAME(subtype) \
+ ieee80211_mgt_subtype_name[(subtype) >> IEEE80211_FC0_SUBTYPE_SHIFT]
+
+extern const char *ieee80211_mgt_subtype_name[];
+extern const char *ieee80211_phymode_name[];
+
+void ieee80211_err(const int8_t *, ...);
+void ieee80211_dbg(uint32_t, const int8_t *, ...);
+int ieee80211_hdrspace(const void *);
+
+/* node */
+void ieee80211_node_attach(ieee80211com_t *);
+void ieee80211_node_lateattach(ieee80211com_t *);
+void ieee80211_node_detach(ieee80211com_t *);
+void ieee80211_reset_bss(ieee80211com_t *);
+void ieee80211_cancel_scan(ieee80211com_t *);
+void ieee80211_add_scan(ieee80211com_t *, const struct ieee80211_scanparams *,
+ const struct ieee80211_frame *, int, int, int);
+void ieee80211_init_neighbor(ieee80211_node_t *, const struct ieee80211_frame *,
+ const struct ieee80211_scanparams *);
+ieee80211_node_t *ieee80211_add_neighbor(ieee80211com_t *,
+ const struct ieee80211_frame *, const struct ieee80211_scanparams *);
+void ieee80211_create_ibss(ieee80211com_t *, struct ieee80211_channel *);
+ieee80211_node_t *ieee80211_fakeup_adhoc_node(ieee80211_node_table_t *,
+ const uint8_t *);
+ieee80211_node_t *ieee80211_tmp_node(ieee80211com_t *, const uint8_t *);
+
+/* proto */
+void ieee80211_proto_attach(ieee80211com_t *);
+int ieee80211_fix_rate(ieee80211_node_t *, int);
+void ieee80211_setbasicrates(struct ieee80211_rateset *,
+ enum ieee80211_phymode);
+void ieee80211_reset_erp(ieee80211com_t *);
+void ieee80211_set_shortslottime(ieee80211com_t *, boolean_t);
+
+/* input */
+int ieee80211_setup_rates(ieee80211_node_t *, const uint8_t *,
+ const uint8_t *, int);
+void ieee80211_recv_mgmt(ieee80211com_t *, mblk_t *, ieee80211_node_t *,
+ int, int, uint32_t);
+
+/* output */
+int ieee80211_send_probereq(ieee80211_node_t *, const uint8_t *,
+ const uint8_t *, const uint8_t *, const uint8_t *, size_t, const void *,
+ size_t);
+int ieee80211_send_mgmt(ieee80211com_t *, ieee80211_node_t *, int, int);
+int ieee80211_send_nulldata(ieee80211_node_t *);
+
+/* crypto */
+struct ieee80211_key *ieee80211_crypto_getkey(ieee80211com_t *);
+uint8_t ieee80211_crypto_getciphertype(ieee80211com_t *);
+
+/* generic */
+mblk_t *ieee80211_getmgtframe(uint8_t **, int);
+void ieee80211_notify_node_join(ieee80211com_t *, ieee80211_node_t *);
+void ieee80211_notify_node_leave(ieee80211com_t *, ieee80211_node_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_IMPL_H */
diff --git a/usr/src/uts/common/io/net80211/net80211_input.c b/usr/src/uts/common/io/net80211/net80211_input.c
new file mode 100644
index 0000000000..39d5db2df0
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_input.c
@@ -0,0 +1,1233 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * Process received frame
+ */
+
+#include <sys/byteorder.h>
+#include "net80211_impl.h"
+
+static mblk_t *ieee80211_defrag(ieee80211com_t *, ieee80211_node_t *,
+ mblk_t *, int);
+
+/*
+ * Process a received frame. The node associated with the sender
+ * should be supplied. If nothing was found in the node table then
+ * the caller is assumed to supply a reference to ic_bss instead.
+ * The RSSI and a timestamp are also supplied. The RSSI data is used
+ * during AP scanning to select a AP to associate with; it can have
+ * any units so long as values have consistent units and higher values
+ * mean ``better signal''. The receive timestamp is currently not used
+ * by the 802.11 layer.
+ */
+int
+ieee80211_input(ieee80211com_t *ic, mblk_t *mp, struct ieee80211_node *in,
+ int32_t rssi, uint32_t rstamp)
+{
+ struct ieee80211_frame *wh;
+ struct ieee80211_key *key;
+ uint8_t *bssid;
+ int hdrspace;
+ int len;
+ uint16_t rxseq;
+ uint8_t dir;
+ uint8_t type;
+ uint8_t subtype;
+ uint8_t tid;
+
+ ASSERT(in != NULL);
+ type = (uint8_t)-1; /* undefined */
+ len = mp->b_wptr - mp->b_rptr;
+ if (len < sizeof (struct ieee80211_frame_min)) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
+ "too short (1): len %u", len);
+ goto out;
+ }
+ /*
+ * Bit of a cheat here, we use a pointer for a 3-address
+ * frame format but don't reference fields past outside
+ * ieee80211_frame_min w/o first validating the data is
+ * present.
+ */
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ if ((wh->i_fc[0] & IEEE80211_FC0_VERSION_MASK) !=
+ IEEE80211_FC0_VERSION_0) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
+ "discard pkt with wrong version %x", wh->i_fc[0]);
+ goto out;
+ }
+
+ dir = wh->i_fc[1] & IEEE80211_FC1_DIR_MASK;
+ type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
+ subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
+
+ IEEE80211_LOCK(ic);
+ if (!(ic->ic_flags & IEEE80211_F_SCAN)) {
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ bssid = wh->i_addr2;
+ if (!IEEE80211_ADDR_EQ(bssid, in->in_bssid))
+ goto out_exit_mutex;
+ break;
+ case IEEE80211_M_IBSS:
+ case IEEE80211_M_AHDEMO:
+ if (dir != IEEE80211_FC1_DIR_NODS) {
+ bssid = wh->i_addr1;
+ } else if (type == IEEE80211_FC0_TYPE_CTL) {
+ bssid = wh->i_addr1;
+ } else {
+ if (len < sizeof (struct ieee80211_frame)) {
+ ieee80211_dbg(IEEE80211_MSG_ANY,
+ "ieee80211_input: too short(2):"
+ "len %u\n", len);
+ goto out_exit_mutex;
+ }
+ bssid = wh->i_addr3;
+ }
+ if (type != IEEE80211_FC0_TYPE_DATA)
+ break;
+ /*
+ * Data frame, validate the bssid.
+ */
+ if (!IEEE80211_ADDR_EQ(bssid, ic->ic_bss->in_bssid) &&
+ !IEEE80211_ADDR_EQ(bssid, wifi_bcastaddr)) {
+ /* not interested in */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: not to bss %s\n",
+ ieee80211_macaddr_sprintf(bssid));
+ goto out_exit_mutex;
+ }
+ /*
+ * For adhoc mode we cons up a node when it doesn't
+ * exist. This should probably done after an ACL check.
+ */
+ if (in == ic->ic_bss &&
+ ic->ic_opmode != IEEE80211_M_HOSTAP &&
+ !IEEE80211_ADDR_EQ(wh->i_addr2, in->in_macaddr)) {
+ /*
+ * Fake up a node for this newly
+ * discovered member of the IBSS.
+ */
+ in = ieee80211_fakeup_adhoc_node(&ic->ic_sta,
+ wh->i_addr2);
+ if (in == NULL) {
+ /* NB: stat kept for alloc failure */
+ goto out_exit_mutex;
+ }
+ }
+ break;
+ default:
+ goto out_exit_mutex;
+ }
+ in->in_rssi = (uint8_t)rssi;
+ in->in_rstamp = rstamp;
+ if (!(type & IEEE80211_FC0_TYPE_CTL)) {
+ tid = 0;
+ rxseq = (*(uint16_t *)wh->i_seq);
+ if ((wh->i_fc[1] & IEEE80211_FC1_RETRY) &&
+ (rxseq - in->in_rxseqs[tid]) <= 0) {
+ /* duplicate, discard */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: duplicate",
+ "seqno <%u,%u> fragno <%u,%u> tid %u",
+ rxseq >> IEEE80211_SEQ_SEQ_SHIFT,
+ in->in_rxseqs[tid] >>
+ IEEE80211_SEQ_SEQ_SHIFT,
+ rxseq & IEEE80211_SEQ_FRAG_MASK,
+ in->in_rxseqs[tid] &
+ IEEE80211_SEQ_FRAG_MASK,
+ tid);
+ ic->ic_stats.is_rx_dups++;
+ goto out_exit_mutex;
+ }
+ in->in_rxseqs[tid] = rxseq;
+ }
+ in->in_inact = 0;
+ }
+
+ hdrspace = ieee80211_hdrspace(wh);
+ switch (type) {
+ case IEEE80211_FC0_TYPE_DATA:
+ if (len < hdrspace) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
+ "data too short: expecting %u", hdrspace);
+ goto out_exit_mutex;
+ }
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ if (dir != IEEE80211_FC1_DIR_FROMDS) {
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: data ",
+ "unknown dir 0x%x", dir);
+ goto out_exit_mutex;
+ }
+ if (IEEE80211_IS_MULTICAST(wh->i_addr1) &&
+ IEEE80211_ADDR_EQ(wh->i_addr3, ic->ic_macaddr)) {
+ /*
+ * In IEEE802.11 network, multicast packet
+ * sent from me is broadcasted from AP.
+ * It should be silently discarded for
+ * SIMPLEX interface.
+ */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: multicast echo\n");
+ goto out_exit_mutex;
+ }
+ break;
+ case IEEE80211_M_IBSS:
+ case IEEE80211_M_AHDEMO:
+ if (dir != IEEE80211_FC1_DIR_NODS) {
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: unknown dir 0x%x",
+ dir);
+ goto out_exit_mutex;
+ }
+ break;
+ default:
+ ieee80211_err("ieee80211_input: "
+ "receive data, unknown opmode %u, skip\n",
+ ic->ic_opmode);
+ goto out_exit_mutex;
+ }
+
+ /*
+ * Handle privacy requirements.
+ */
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
+ if ((ic->ic_flags & IEEE80211_F_PRIVACY) == 0) {
+ /*
+ * Discard encrypted frames when privacy off.
+ */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: ""WEP PRIVACY off");
+ ic->ic_stats.is_wep_errors++;
+ goto out_exit_mutex;
+ }
+ key = ieee80211_crypto_decap(ic, mp, hdrspace);
+ if (key == NULL) {
+ /* NB: stats+msgs handled in crypto_decap */
+ ic->ic_stats.is_wep_errors++;
+ goto out_exit_mutex;
+ }
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ wh->i_fc[1] &= ~IEEE80211_FC1_WEP;
+ } else {
+ key = NULL;
+ }
+
+ /*
+ * Next up, any fragmentation
+ */
+ if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
+ mp = ieee80211_defrag(ic, in, mp, hdrspace);
+ if (mp == NULL) {
+ /* Fragment dropped or frame not complete yet */
+ goto out_exit_mutex;
+ }
+ }
+ wh = NULL; /* no longer valid, catch any uses */
+
+ /*
+ * Next strip any MSDU crypto bits.
+ */
+ if (key != NULL && !ieee80211_crypto_demic(ic, key, mp, 0)) {
+ ieee80211_dbg(IEEE80211_MSG_INPUT, "ieee80211_input: "
+ "data demic error\n");
+ goto out_exit_mutex;
+ }
+
+ ic->ic_stats.is_rx_frags++;
+ ic->ic_stats.is_rx_bytes += len;
+ IEEE80211_UNLOCK(ic);
+ mac_rx(ic->ic_mach, NULL, mp);
+ return (IEEE80211_FC0_TYPE_DATA);
+
+ case IEEE80211_FC0_TYPE_MGT:
+ if (dir != IEEE80211_FC1_DIR_NODS)
+ goto out_exit_mutex;
+ if (len < sizeof (struct ieee80211_frame))
+ goto out_exit_mutex;
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
+ if (subtype != IEEE80211_FC0_SUBTYPE_AUTH) {
+ /*
+ * Only shared key auth frames with a challenge
+ * should be encrypted, discard all others.
+ */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: "
+ "%s WEP set but not permitted",
+ IEEE80211_SUBTYPE_NAME(subtype));
+ ic->ic_stats.is_wep_errors++;
+ goto out_exit_mutex;
+ }
+ if ((ic->ic_flags & IEEE80211_F_PRIVACY) == 0) {
+ /*
+ * Discard encrypted frames when privacy off.
+ */
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_input: "
+ "mgt WEP set but PRIVACY off");
+ ic->ic_stats.is_wep_errors++;
+ goto out_exit_mutex;
+ }
+ key = ieee80211_crypto_decap(ic, mp, hdrspace);
+ if (key == NULL) {
+ /* NB: stats+msgs handled in crypto_decap */
+ goto out_exit_mutex;
+ }
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ wh->i_fc[1] &= ~IEEE80211_FC1_WEP;
+ }
+ IEEE80211_UNLOCK(ic);
+ ic->ic_recv_mgmt(ic, mp, in, subtype, rssi, rstamp);
+ goto out;
+
+ case IEEE80211_FC0_TYPE_CTL:
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
+ "bad frame type 0x%x", type);
+ /* should not come here */
+ break;
+ }
+out_exit_mutex:
+ IEEE80211_UNLOCK(ic);
+out:
+ if (mp != NULL)
+ freemsg(mp);
+
+ return (type);
+}
+
+/*
+ * This function reassemble fragments.
+ * More fragments bit in the frame control means the packet is fragmented.
+ * While the sequence control field consists of 4-bit fragment number
+ * field and a 12-bit sequence number field.
+ */
+/* ARGSUSED */
+static mblk_t *
+ieee80211_defrag(ieee80211com_t *ic, struct ieee80211_node *in, mblk_t *mp,
+ int hdrspace)
+{
+ struct ieee80211_frame *wh = (struct ieee80211_frame *)mp->b_rptr;
+ struct ieee80211_frame *lwh;
+ mblk_t *mfrag;
+ uint16_t rxseq;
+ uint8_t fragno;
+ uint8_t more_frag;
+
+ ASSERT(!IEEE80211_IS_MULTICAST(wh->i_addr1));
+ more_frag = wh->i_fc[1] & IEEE80211_FC1_MORE_FRAG;
+ rxseq = LE_16(*(uint16_t *)wh->i_seq);
+ fragno = rxseq & IEEE80211_SEQ_FRAG_MASK;
+
+ /* Quick way out, if there's nothing to defragment */
+ if (!more_frag && fragno == 0 && in->in_rxfrag == NULL)
+ return (mp);
+
+ /*
+ * Remove frag to insure it doesn't get reaped by timer.
+ */
+ if (in->in_table == NULL) {
+ /*
+ * Should never happen. If the node is orphaned (not in
+ * the table) then input packets should not reach here.
+ * Otherwise, a concurrent request that yanks the table
+ * should be blocked by other interlocking and/or by first
+ * shutting the driver down. Regardless, be defensive
+ * here and just bail
+ */
+ freemsg(mp);
+ return (NULL);
+ }
+ IEEE80211_NODE_LOCK(in->in_table);
+ mfrag = in->in_rxfrag;
+ in->in_rxfrag = NULL;
+ IEEE80211_NODE_UNLOCK(in->in_table);
+
+ /*
+ * Validate new fragment is in order and
+ * related to the previous ones.
+ */
+ if (mfrag != NULL) {
+ uint16_t last_rxseq;
+
+ lwh = (struct ieee80211_frame *)mfrag->b_rptr;
+ last_rxseq = LE_16(*(uint16_t *)lwh->i_seq);
+ /*
+ * Sequence control field contains 12-bit sequence no
+ * and 4-bit fragment number. For fragemnts, the
+ * sequence no is not changed.
+ * NB: check seq # and frag together
+ */
+ if (rxseq != last_rxseq + 1 ||
+ !IEEE80211_ADDR_EQ(wh->i_addr1, lwh->i_addr1) ||
+ !IEEE80211_ADDR_EQ(wh->i_addr2, lwh->i_addr2)) {
+ /*
+ * Unrelated fragment or no space for it,
+ * clear current fragments.
+ */
+ freemsg(mfrag);
+ mfrag = NULL;
+ }
+ }
+
+ if (mfrag == NULL) {
+ if (fragno != 0) { /* !first fragment, discard */
+ freemsg(mp);
+ return (NULL);
+ }
+ mfrag = mp;
+ } else { /* concatenate */
+ (void) adjmsg(mp, hdrspace);
+ linkb(mfrag, mp);
+ /* track last seqnum and fragno */
+ lwh = (struct ieee80211_frame *)mfrag->b_rptr;
+ *(uint16_t *)lwh->i_seq = *(uint16_t *)wh->i_seq;
+ }
+ if (more_frag != 0) { /* more to come, save */
+ in->in_rxfragstamp = ddi_get_lbolt();
+ in->in_rxfrag = mfrag;
+ mfrag = NULL;
+ }
+
+ return (mfrag);
+}
+
+/*
+ * Install received rate set information in the node's state block.
+ */
+int
+ieee80211_setup_rates(struct ieee80211_node *in, const uint8_t *rates,
+ const uint8_t *xrates, int flags)
+{
+ struct ieee80211_rateset *rs = &in->in_rates;
+
+ bzero(rs, sizeof (*rs));
+ rs->ir_nrates = rates[1];
+ /* skip 1 byte element ID and 1 byte length */
+ bcopy(rates + 2, rs->ir_rates, rs->ir_nrates);
+ if (xrates != NULL) {
+ uint8_t nxrates;
+
+ /*
+ * Tack on 11g extended supported rate element.
+ */
+ nxrates = xrates[1];
+ if (rs->ir_nrates + nxrates > IEEE80211_RATE_MAXSIZE) {
+ nxrates = IEEE80211_RATE_MAXSIZE - rs->ir_nrates;
+ ieee80211_dbg(IEEE80211_MSG_XRATE,
+ "ieee80211_setup_rates: %s",
+ "[%s] extended rate set too large;"
+ " only using %u of %u rates\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr),
+ nxrates, xrates[1]);
+ }
+ bcopy(xrates + 2, rs->ir_rates + rs->ir_nrates, nxrates);
+ rs->ir_nrates += nxrates;
+ }
+ return (ieee80211_fix_rate(in, flags));
+}
+
+/*
+ * Process open-system authentication response frame and start
+ * association if the authentication request is accepted.
+ */
+static void
+ieee80211_auth_open(ieee80211com_t *ic, struct ieee80211_frame *wh,
+ struct ieee80211_node *in, uint16_t seq, uint16_t status)
+{
+ IEEE80211_LOCK_ASSERT(ic);
+ if (in->in_authmode == IEEE80211_AUTH_SHARED) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "open auth: bad sta auth mode %u", in->in_authmode);
+ return;
+ }
+ if (ic->ic_opmode == IEEE80211_M_STA) {
+ if (ic->ic_state != IEEE80211_S_AUTH ||
+ seq != IEEE80211_AUTH_OPEN_RESPONSE) {
+ return;
+ }
+ IEEE80211_UNLOCK(ic);
+ if (status != 0) {
+ ieee80211_dbg(IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
+ "open auth failed (reason %d)\n", status);
+ if (in != ic->ic_bss)
+ in->in_fails++;
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
+ } else {
+ /* i_fc[0] - frame control's type & subtype field */
+ ieee80211_new_state(ic, IEEE80211_S_ASSOC,
+ wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
+ }
+ IEEE80211_LOCK(ic);
+ } else {
+ ieee80211_dbg(IEEE80211_MSG_AUTH, "ieee80211_auth_open: "
+ "bad operating mode %u", ic->ic_opmode);
+ }
+}
+
+/*
+ * Allocate challenge text for use by shared-key authentication
+ * Return B_TRUE on success, B_FALST otherwise.
+ */
+static boolean_t
+ieee80211_alloc_challenge(struct ieee80211_node *in)
+{
+ if (in->in_challenge == NULL) {
+ in->in_challenge = kmem_alloc(IEEE80211_CHALLENGE_LEN,
+ KM_NOSLEEP);
+ }
+ if (in->in_challenge == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
+ "[%s] shared key challenge alloc failed\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr));
+ }
+ return (in->in_challenge != NULL);
+}
+
+/*
+ * Process shared-key authentication response frames. If authentication
+ * succeeds, start association; otherwise, restart scan.
+ */
+static void
+ieee80211_auth_shared(ieee80211com_t *ic, struct ieee80211_frame *wh,
+ uint8_t *frm, uint8_t *efrm, struct ieee80211_node *in, uint16_t seq,
+ uint16_t status)
+{
+ uint8_t *challenge;
+
+ /*
+ * Pre-shared key authentication is evil; accept
+ * it only if explicitly configured (it is supported
+ * mainly for compatibility with clients like OS X).
+ */
+ IEEE80211_LOCK_ASSERT(ic);
+ if (in->in_authmode != IEEE80211_AUTH_AUTO &&
+ in->in_authmode != IEEE80211_AUTH_SHARED) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH, "ieee80211_auth_shared: "
+ "bad sta auth mode %u", in->in_authmode);
+ goto bad;
+ }
+
+ challenge = NULL;
+ if (frm + 1 < efrm) {
+ /*
+ * Challenge text information element
+ * frm[0] - element ID
+ * frm[1] - length
+ * frm[2]... - challenge text
+ */
+ if ((frm[1] + 2) > (efrm - frm)) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "ieee80211_auth_shared: ie %d%d too long\n",
+ frm[0], (frm[1] + 2) - (efrm - frm));
+ goto bad;
+ }
+ if (*frm == IEEE80211_ELEMID_CHALLENGE)
+ challenge = frm;
+ frm += frm[1] + 2;
+ }
+ switch (seq) {
+ case IEEE80211_AUTH_SHARED_CHALLENGE:
+ case IEEE80211_AUTH_SHARED_RESPONSE:
+ if (challenge == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "ieee80211_auth_shared: no challenge\n");
+ goto bad;
+ }
+ if (challenge[1] != IEEE80211_CHALLENGE_LEN) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "ieee80211_auth_shared: bad challenge len %d\n",
+ challenge[1]);
+ goto bad;
+ }
+ default:
+ break;
+ }
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ if (ic->ic_state != IEEE80211_S_AUTH)
+ return;
+ switch (seq) {
+ case IEEE80211_AUTH_SHARED_PASS:
+ if (in->in_challenge != NULL) {
+ kmem_free(in->in_challenge,
+ IEEE80211_CHALLENGE_LEN);
+ in->in_challenge = NULL;
+ }
+ if (status != 0) {
+ ieee80211_dbg(IEEE80211_MSG_DEBUG |
+ IEEE80211_MSG_AUTH,
+ "shared key auth failed (reason %d)\n",
+ status);
+ if (in != ic->ic_bss)
+ in->in_fails++;
+ return;
+ }
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_ASSOC,
+ wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
+ IEEE80211_LOCK(ic);
+ break;
+ case IEEE80211_AUTH_SHARED_CHALLENGE:
+ if (!ieee80211_alloc_challenge(in))
+ return;
+ bcopy(&challenge[2], in->in_challenge, challenge[1]);
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in, IEEE80211_FC0_SUBTYPE_AUTH,
+ seq + 1);
+ IEEE80211_LOCK(ic);
+ break;
+ default:
+ ieee80211_dbg(IEEE80211_MSG_AUTH, "80211_auth_shared: "
+ "shared key auth: bad seq %d", seq);
+ return;
+ }
+ break;
+
+ default:
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "ieee80211_auth_shared: bad opmode %u\n",
+ ic->ic_opmode);
+ break;
+ }
+ return;
+bad:
+ if (ic->ic_opmode == IEEE80211_M_STA) {
+ /*
+ * Kick the state machine. This short-circuits
+ * using the mgt frame timeout to trigger the
+ * state transition.
+ */
+ if (ic->ic_state == IEEE80211_S_AUTH) {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
+ IEEE80211_LOCK(ic);
+ }
+ }
+}
+
+/*
+ * Process a beacon/probe response frame.
+ * When the device is in station mode, create a node and add it
+ * to the node database for a new ESS or update node info if it's
+ * already there.
+ */
+static void
+ieee80211_recv_beacon(ieee80211com_t *ic, mblk_t *mp, struct ieee80211_node *in,
+ int subtype, int rssi, uint32_t rstamp)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ struct ieee80211_frame *wh;
+ uint8_t *frm;
+ uint8_t *efrm; /* end of frame body */
+ struct ieee80211_scanparams scan;
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ frm = (uint8_t *)&wh[1];
+ efrm = (uint8_t *)mp->b_wptr;
+
+ /*
+ * We process beacon/probe response frames:
+ * o when scanning, or
+ * o station mode when associated (to collect state
+ * updates such as 802.11g slot time), or
+ * o adhoc mode (to discover neighbors)
+ * Frames otherwise received are discarded.
+ */
+ if (!((ic->ic_flags & IEEE80211_F_SCAN) ||
+ (ic->ic_opmode == IEEE80211_M_STA && in->in_associd != 0) ||
+ ic->ic_opmode == IEEE80211_M_IBSS)) {
+ return;
+ }
+
+ /*
+ * beacon/probe response frame format
+ * [8] time stamp
+ * [2] beacon interval
+ * [2] capability information
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] country information
+ * [tlv] parameter set (FH/DS)
+ * [tlv] erp information
+ * [tlv] extended supported rates
+ * [tlv] WME
+ * [tlv] WPA or RSN
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm, IEEE80211_BEACON_ELEM_MIN, return);
+ bzero(&scan, sizeof (scan));
+ scan.tstamp = frm;
+ frm += 8;
+ scan.bintval = (*(uint16_t *)frm);
+ frm += 2;
+ scan.capinfo = (*(uint16_t *)frm);
+ frm += 2;
+ scan.bchan = ieee80211_chan2ieee(ic, ic->ic_curchan);
+ scan.chan = scan.bchan;
+
+ while (frm < efrm) {
+ /* Agere element in beacon */
+ if ((*frm == IEEE80211_ELEMID_AGERE1) ||
+ (*frm == IEEE80211_ELEMID_AGERE2)) {
+ frm = efrm;
+ break;
+ }
+
+ IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1], return);
+ switch (*frm) {
+ case IEEE80211_ELEMID_SSID:
+ scan.ssid = frm;
+ break;
+ case IEEE80211_ELEMID_RATES:
+ scan.rates = frm;
+ break;
+ case IEEE80211_ELEMID_COUNTRY:
+ scan.country = frm;
+ break;
+ case IEEE80211_ELEMID_FHPARMS:
+ if (ic->ic_phytype == IEEE80211_T_FH) {
+ scan.fhdwell = LE_16(*(uint16_t *)(frm + 2));
+ scan.chan = IEEE80211_FH_CHAN(frm[4], frm[5]);
+ scan.fhindex = frm[6];
+ scan.phytype = IEEE80211_T_FH;
+ }
+ break;
+ case IEEE80211_ELEMID_DSPARMS:
+ if (ic->ic_phytype != IEEE80211_T_FH) {
+ scan.chan = frm[2];
+ scan.phytype = IEEE80211_T_DS;
+ }
+ break;
+ case IEEE80211_ELEMID_TIM:
+ scan.tim = frm;
+ scan.timoff = frm - mp->b_rptr;
+ break;
+ case IEEE80211_ELEMID_IBSSPARMS:
+ break;
+ case IEEE80211_ELEMID_XRATES:
+ scan.xrates = frm;
+ break;
+ case IEEE80211_ELEMID_ERP:
+ if (frm[1] != 1) {
+ ieee80211_dbg(IEEE80211_MSG_ELEMID,
+ "ieee80211_recv_mgmt: ignore %s, "
+ "invalid ERP element; "
+ "length %u, expecting 1\n",
+ IEEE80211_SUBTYPE_NAME(subtype),
+ frm[1]);
+ break;
+ }
+ scan.erp = frm[2];
+ scan.phytype = IEEE80211_T_OFDM;
+ break;
+ case IEEE80211_ELEMID_RSN:
+ scan.wpa = frm;
+ break;
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ELEMID,
+ "ieee80211_recv_mgmt: ignore %s,"
+ "unhandled id %u, len %u, totallen %u",
+ IEEE80211_SUBTYPE_NAME(subtype),
+ *frm, frm[1],
+ mp->b_wptr - mp->b_rptr);
+ break;
+ }
+ /* frm[1] - component length */
+ frm += IEEE80211_ELEM_LEN(frm[1]);
+ }
+ IEEE80211_VERIFY_ELEMENT(scan.rates, IEEE80211_RATE_MAXSIZE, return);
+ IEEE80211_VERIFY_ELEMENT(scan.ssid, IEEE80211_NWID_LEN, return);
+ if (ieee80211_isclr(ic->ic_chan_active, scan.chan)) {
+ ieee80211_dbg(IEEE80211_MSG_ELEMID | IEEE80211_MSG_INPUT,
+ "ieee80211_recv_mgmt: ignore %s ,"
+ "invalid channel %u\n",
+ IEEE80211_SUBTYPE_NAME(subtype), scan.chan);
+ return;
+ }
+ if (scan.chan != scan.bchan &&
+ ic->ic_phytype != IEEE80211_T_FH) {
+ /*
+ * Frame was received on a channel different from the
+ * one indicated in the DS params element id;
+ * silently discard it.
+ *
+ * NB: this can happen due to signal leakage.
+ * But we should take it for FH phy because
+ * the rssi value should be correct even for
+ * different hop pattern in FH.
+ */
+ ieee80211_dbg(IEEE80211_MSG_ELEMID,
+ "ieee80211_recv_mgmt: ignore %s ,"
+ "phytype %u channel %u marked for %u\n",
+ IEEE80211_SUBTYPE_NAME(subtype),
+ ic->ic_phytype, scan.bchan, scan.chan);
+ return;
+ }
+ if (!(IEEE80211_BINTVAL_MIN <= scan.bintval &&
+ scan.bintval <= IEEE80211_BINTVAL_MAX)) {
+ ieee80211_dbg(IEEE80211_MSG_ELEMID | IEEE80211_MSG_INPUT,
+ "ieee80211_recv_mgmt: ignore %s ,"
+ "bogus beacon interval %u\n",
+ IEEE80211_SUBTYPE_NAME(subtype), scan.bintval);
+ return;
+ }
+
+ /*
+ * When operating in station mode, check for state updates.
+ * Be careful to ignore beacons received while doing a
+ * background scan. We consider only 11g/WMM stuff right now.
+ */
+ if (ic->ic_opmode == IEEE80211_M_STA &&
+ in->in_associd != 0 &&
+ (!(ic->ic_flags & IEEE80211_F_SCAN) ||
+ IEEE80211_ADDR_EQ(wh->i_addr2, in->in_bssid))) {
+ /* record tsf of last beacon */
+ bcopy(scan.tstamp, in->in_tstamp.data,
+ sizeof (in->in_tstamp));
+ /* count beacon frame for s/w bmiss handling */
+ im->im_swbmiss_count++;
+ im->im_bmiss_count = 0;
+
+ if ((in->in_capinfo ^ scan.capinfo) &
+ IEEE80211_CAPINFO_SHORT_SLOTTIME) {
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "ieee80211_recv_mgmt: "
+ "[%s] cap change: before 0x%x, now 0x%x\n",
+ ieee80211_macaddr_sprintf(wh->i_addr2),
+ in->in_capinfo, scan.capinfo);
+ /*
+ * NB: we assume short preamble doesn't
+ * change dynamically
+ */
+ ieee80211_set_shortslottime(ic,
+ ic->ic_curmode == IEEE80211_MODE_11A ||
+ (scan.capinfo &
+ IEEE80211_CAPINFO_SHORT_SLOTTIME));
+ in->in_capinfo = scan.capinfo;
+ }
+
+ if (scan.tim != NULL) {
+ struct ieee80211_tim_ie *ie;
+
+ ie = (struct ieee80211_tim_ie *)scan.tim;
+ in->in_dtim_count = ie->tim_count;
+ in->in_dtim_period = ie->tim_period;
+ }
+ if (ic->ic_flags & IEEE80211_F_SCAN) {
+ ieee80211_add_scan(ic, &scan, wh, subtype, rssi,
+ rstamp);
+ }
+ return;
+ }
+ /*
+ * If scanning, just pass information to the scan module.
+ */
+ if (ic->ic_flags & IEEE80211_F_SCAN) {
+ ieee80211_add_scan(ic, &scan, wh, subtype, rssi, rstamp);
+ return;
+ }
+
+ if (scan.capinfo & IEEE80211_CAPINFO_IBSS) {
+ if (!IEEE80211_ADDR_EQ(wh->i_addr2, in->in_macaddr)) {
+ /*
+ * Create a new entry in the neighbor table.
+ */
+ in = ieee80211_add_neighbor(ic, wh, &scan);
+ } else if (in->in_capinfo == 0) {
+ /*
+ * Update faked node created on transmit.
+ * Note this also updates the tsf.
+ */
+ ieee80211_init_neighbor(in, wh, &scan);
+ } else {
+ /*
+ * Record tsf for potential resync.
+ */
+ bcopy(scan.tstamp, in->in_tstamp.data,
+ sizeof (in->in_tstamp));
+ }
+ if (in != NULL) {
+ in->in_rssi = (uint8_t)rssi;
+ in->in_rstamp = rstamp;
+ }
+ }
+}
+
+/*
+ * Perform input processing for 802.11 management frames.
+ * It's the default ic_recv_mgmt callback function for the interface
+ * softc, ic. Tipically ic_recv_mgmt is called within ieee80211_input()
+ */
+void
+ieee80211_recv_mgmt(ieee80211com_t *ic, mblk_t *mp, struct ieee80211_node *in,
+ int subtype, int rssi, uint32_t rstamp)
+{
+ struct ieee80211_frame *wh;
+ uint8_t *frm; /* pointer to start of the frame */
+ uint8_t *efrm; /* pointer to end of the frame */
+ uint8_t *ssid;
+ uint8_t *rates;
+ uint8_t *xrates; /* extended rates */
+ boolean_t allocbs = B_FALSE;
+ uint8_t rate;
+ uint16_t algo; /* authentication algorithm */
+ uint16_t seq; /* sequence no */
+ uint16_t status;
+ uint16_t capinfo;
+ uint16_t associd; /* association ID */
+
+ IEEE80211_LOCK(ic);
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ frm = (uint8_t *)&wh[1];
+ efrm = (uint8_t *)mp->b_wptr;
+ switch (subtype) {
+ case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
+ case IEEE80211_FC0_SUBTYPE_BEACON:
+ ieee80211_recv_beacon(ic, mp, in, subtype, rssi, rstamp);
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_PROBE_REQ:
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ ic->ic_state != IEEE80211_S_RUN ||
+ IEEE80211_IS_MULTICAST(wh->i_addr2)) {
+ break;
+ }
+
+ /*
+ * prreq frame format
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ */
+ ssid = rates = xrates = NULL;
+ while (frm < efrm) {
+ IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1], goto out);
+ switch (*frm) {
+ case IEEE80211_ELEMID_SSID:
+ ssid = frm;
+ break;
+ case IEEE80211_ELEMID_RATES:
+ rates = frm;
+ break;
+ case IEEE80211_ELEMID_XRATES:
+ xrates = frm;
+ break;
+ }
+ frm += frm[1] + 2;
+ }
+ IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_MAXSIZE, break);
+ IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN, break);
+ IEEE80211_VERIFY_SSID(ic->ic_bss, ssid, break);
+ if ((ic->ic_flags & IEEE80211_F_HIDESSID) && ssid[1] == 0) {
+ ieee80211_dbg(IEEE80211_MSG_INPUT,
+ "ieee80211_recv_mgmt: ignore %s, "
+ "no ssid with ssid suppression enabled",
+ IEEE80211_SUBTYPE_NAME(subtype));
+ break;
+ }
+
+ if (in == ic->ic_bss) {
+ if (ic->ic_opmode != IEEE80211_M_IBSS) {
+ in = ieee80211_tmp_node(ic, wh->i_addr2);
+ allocbs = B_TRUE;
+ } else if (!IEEE80211_ADDR_EQ(wh->i_addr2,
+ in->in_macaddr)) {
+ /*
+ * Cannot tell if the sender is operating
+ * in ibss mode. But we need a new node to
+ * send the response so blindly add them to the
+ * neighbor table.
+ */
+ in = ieee80211_fakeup_adhoc_node(&ic->ic_sta,
+ wh->i_addr2);
+ }
+ if (in == NULL)
+ break;
+ }
+ ieee80211_dbg(IEEE80211_MSG_ASSOC, "ieee80211_recv_mgmt: "
+ "[%s] recv probe req\n",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ in->in_rssi = (uint8_t)rssi;
+ in->in_rstamp = rstamp;
+ /*
+ * Adjust and check station's rate list with device's
+ * supported rate. Send back response if there is at
+ * least one rate or the fixed rate(if being set) is
+ * supported by both station and the device
+ */
+ rate = ieee80211_setup_rates(in, rates, xrates,
+ IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE |
+ IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
+ if (rate & IEEE80211_RATE_BASIC) {
+ ieee80211_dbg(IEEE80211_MSG_XRATE, "ieee80211_recv_mgmt"
+ "%s recv'd rate set invalid",
+ IEEE80211_SUBTYPE_NAME(subtype));
+ } else {
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_PROBE_RESP, 0);
+ IEEE80211_LOCK(ic);
+ }
+ if (allocbs) {
+ /*
+ * Temporary node created just to send a
+ * response, reclaim immediately.
+ */
+ ieee80211_free_node(in);
+ }
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_AUTH:
+ /*
+ * auth frame format
+ * [2] algorithm
+ * [2] sequence
+ * [2] status
+ * [tlv*] challenge
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm, IEEE80211_AUTH_ELEM_MIN,
+ break);
+ algo = (*(uint16_t *)frm);
+ seq = (*(uint16_t *)(frm + 2));
+ status = (*(uint16_t *)(frm + 4));
+ ieee80211_dbg(IEEE80211_MSG_AUTH, "ieee80211_recv_mgmt: "
+ "[%s] recv auth frame with algorithm %d seq %d\n",
+ ieee80211_macaddr_sprintf(wh->i_addr2), algo, seq);
+
+ if (ic->ic_flags & IEEE80211_F_COUNTERM) {
+ ieee80211_dbg(IEEE80211_MSG_AUTH | IEEE80211_MSG_CRYPTO,
+ "ieee80211_recv_mgmt: ignore auth, %s\n",
+ "TKIP countermeasures enabled");
+ break;
+ }
+ switch (algo) {
+ case IEEE80211_AUTH_ALG_SHARED:
+ ieee80211_auth_shared(ic, wh, frm + 6, efrm, in,
+ seq, status);
+ break;
+ case IEEE80211_AUTH_ALG_OPEN:
+ ieee80211_auth_open(ic, wh, in, seq, status);
+ break;
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_recv_mgmt: "
+ "ignore auth, unsupported alg %d", algo);
+ break;
+ }
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_ASSOC_RESP:
+ case IEEE80211_FC0_SUBTYPE_REASSOC_RESP:
+ if (ic->ic_opmode != IEEE80211_M_STA ||
+ ic->ic_state != IEEE80211_S_ASSOC)
+ break;
+
+ /*
+ * asresp frame format
+ * [2] capability information
+ * [2] status
+ * [2] association ID
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ * [tlv] WME
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm,
+ IEEE80211_ASSOC_RESP_ELEM_MIN, break);
+ in = ic->ic_bss;
+ capinfo = (*(uint16_t *)frm);
+ frm += 2;
+ status = (*(uint16_t *)frm);
+ frm += 2;
+ if (status != 0) {
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "assoc failed (reason %d)\n", status);
+ in = ieee80211_find_node(&ic->ic_scan, wh->i_addr2);
+ if (in != NULL) {
+ in->in_fails++;
+ ieee80211_free_node(in);
+ }
+ break;
+ }
+ associd = (*(uint16_t *)frm);
+ frm += 2;
+
+ rates = xrates = NULL;
+ while (frm < efrm) {
+ /*
+ * Do not discard frames containing proprietary Agere
+ * elements 128 and 129, as the reported element length
+ * is often wrong. Skip rest of the frame, since we can
+ * not rely on the given element length making it
+ * impossible to know where the next element starts
+ */
+ if ((*frm == IEEE80211_ELEMID_AGERE1) ||
+ (*frm == IEEE80211_ELEMID_AGERE2)) {
+ frm = efrm;
+ break;
+ }
+
+ IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1], goto out);
+ switch (*frm) {
+ case IEEE80211_ELEMID_RATES:
+ rates = frm;
+ break;
+ case IEEE80211_ELEMID_XRATES:
+ xrates = frm;
+ break;
+ }
+ frm += frm[1] + 2;
+ }
+
+ IEEE80211_VERIFY_ELEMENT(rates, IEEE80211_RATE_MAXSIZE, break);
+ /*
+ * Adjust and check AP's rate list with device's
+ * supported rate. Re-start scan if no rate is or the
+ * fixed rate(if being set) cannot be supported by
+ * either AP or the device.
+ */
+ rate = ieee80211_setup_rates(in, rates, xrates,
+ IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE |
+ IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
+ if (rate & IEEE80211_RATE_BASIC) {
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "assoc failed (rate set mismatch)\n");
+ if (in != ic->ic_bss)
+ in->in_fails++;
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
+ return;
+ }
+
+ in->in_capinfo = capinfo;
+ in->in_associd = associd;
+ in->in_flags &= ~IEEE80211_NODE_QOS;
+ /*
+ * Configure state now that we are associated.
+ */
+ if (ic->ic_curmode == IEEE80211_MODE_11A ||
+ (in->in_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE)) {
+ ic->ic_flags |= IEEE80211_F_SHPREAMBLE;
+ ic->ic_flags &= ~IEEE80211_F_USEBARKER;
+ } else {
+ ic->ic_flags &= ~IEEE80211_F_SHPREAMBLE;
+ ic->ic_flags |= IEEE80211_F_USEBARKER;
+ }
+ ieee80211_set_shortslottime(ic,
+ ic->ic_curmode == IEEE80211_MODE_11A ||
+ (in->in_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME));
+ /*
+ * Honor ERP protection.
+ *
+ * NB: in_erp should zero for non-11g operation.
+ * check ic_curmode anyway
+ */
+ if (ic->ic_curmode == IEEE80211_MODE_11G &&
+ (in->in_erp & IEEE80211_ERP_USE_PROTECTION))
+ ic->ic_flags |= IEEE80211_F_USEPROT;
+ else
+ ic->ic_flags &= ~IEEE80211_F_USEPROT;
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "assoc success: %s preamble, %s slot time%s%s\n",
+ ic->ic_flags&IEEE80211_F_SHPREAMBLE ? "short" : "long",
+ ic->ic_flags&IEEE80211_F_SHSLOT ? "short" : "long",
+ ic->ic_flags&IEEE80211_F_USEPROT ? ", protection" : "",
+ in->in_flags & IEEE80211_NODE_QOS ? ", QoS" : "");
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_RUN, subtype);
+ return;
+
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ if (ic->ic_state == IEEE80211_S_SCAN)
+ break;
+
+ /*
+ * deauth frame format
+ * [2] reason
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm, 2, break);
+ status = (*(uint16_t *)frm);
+
+ ieee80211_dbg(IEEE80211_MSG_AUTH,
+ "recv deauthenticate (reason %d)\n", status);
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_AUTH,
+ wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
+ return;
+ default:
+ break;
+ }
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_DISASSOC:
+ if (ic->ic_state != IEEE80211_S_RUN &&
+ ic->ic_state != IEEE80211_S_ASSOC &&
+ ic->ic_state != IEEE80211_S_AUTH)
+ break;
+ /*
+ * disassoc frame format
+ * [2] reason
+ */
+ IEEE80211_VERIFY_LENGTH(efrm - frm, 2, break);
+ status = (*(uint16_t *)frm);
+
+ ieee80211_dbg(IEEE80211_MSG_ASSOC,
+ "recv disassociate (reason %d)\n", status);
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_ASSOC,
+ wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK);
+ return;
+ default:
+ break;
+ }
+ break;
+
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_recv_mgmt: "
+ "subtype 0x%x not handled\n", subtype);
+ break;
+ } /* switch subtype */
+out:
+ IEEE80211_UNLOCK(ic);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_ioctl.c b/usr/src/uts/common/io/net80211/net80211_ioctl.c
new file mode 100644
index 0000000000..3701baa6f7
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_ioctl.c
@@ -0,0 +1,1359 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/errno.h>
+#include <sys/strsun.h>
+#include <sys/policy.h>
+#include <inet/common.h>
+#include <inet/nd.h>
+#include <inet/mi.h>
+#include <sys/note.h>
+#include <sys/mac.h>
+#include <inet/wifi_ioctl.h>
+#include "net80211_impl.h"
+
+static size_t
+wifi_strnlen(const char *s, size_t n)
+{
+ size_t i;
+
+ for (i = 0; i < n && s[i] != '\0'; i++)
+ /* noop */;
+ return (i);
+}
+
+/*
+ * Initialize an output message block by copying from an
+ * input message block. The message is of type wldp_t.
+ * mp input message block
+ * buflen length of wldp_buf
+ */
+static void
+wifi_setupoutmsg(mblk_t *mp, int buflen)
+{
+ wldp_t *wp;
+
+ wp = (wldp_t *)mp->b_rptr;
+ wp->wldp_length = WIFI_BUF_OFFSET + buflen;
+ wp->wldp_result = WL_SUCCESS;
+ mp->b_wptr = mp->b_rptr + wp->wldp_length;
+}
+
+/*
+ * Allocate and initialize an output message.
+ */
+static mblk_t *
+wifi_getoutmsg(mblk_t *mp, uint32_t cmd, int buflen)
+{
+ mblk_t *mp1;
+ int size;
+
+ size = WIFI_BUF_OFFSET;
+ if (cmd == WLAN_GET_PARAM)
+ size += buflen; /* to hold output parameters */
+ mp1 = allocb(size, BPRI_HI);
+ if (mp1 == NULL) {
+ ieee80211_err("wifi_getoutbuf: allocb %d bytes failed!\n",
+ size);
+ return (NULL);
+ }
+
+ bzero(mp1->b_rptr, size);
+ bcopy(mp->b_rptr, mp1->b_rptr, WIFI_BUF_OFFSET);
+ wifi_setupoutmsg(mp1, size - WIFI_BUF_OFFSET);
+
+ return (mp1);
+}
+
+static int
+wifi_cfg_essid(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_essid_t *iw_essid = (wl_essid_t *)inp->wldp_buf;
+ wl_essid_t *ow_essid;
+ char *essid;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_essid_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_essid = (wl_essid_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ essid = (char *)ic->ic_des_essid;
+ if (essid[0] == '\0')
+ essid = (char *)ic->ic_bss->in_essid;
+ ow_essid->wl_essid_length = wifi_strnlen((const char *)essid,
+ IEEE80211_NWID_LEN);
+ bcopy(essid, ow_essid->wl_essid_essid,
+ ow_essid->wl_essid_length);
+ break;
+ case WLAN_SET_PARAM:
+ if (iw_essid->wl_essid_length > IEEE80211_NWID_LEN) {
+ ieee80211_err("wifi_cfg_essid: "
+ "essid too long, %u, max %u\n",
+ iw_essid->wl_essid_length, IEEE80211_NWID_LEN);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ essid = iw_essid->wl_essid_essid;
+ essid[IEEE80211_NWID_LEN] = 0;
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_essid: "
+ "set essid=%s length=%d\n",
+ essid, iw_essid->wl_essid_length);
+
+ ic->ic_des_esslen = iw_essid->wl_essid_length;
+ if (ic->ic_des_esslen != 0)
+ bcopy(essid, ic->ic_des_essid, ic->ic_des_esslen);
+ if (ic->ic_des_esslen < IEEE80211_NWID_LEN)
+ ic->ic_des_essid[ic->ic_des_esslen] = 0;
+ err = ENETRESET;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_essid: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_bssid(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ uint8_t *bssid;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_bssid_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ if (ic->ic_flags & IEEE80211_F_DESBSSID)
+ bssid = ic->ic_des_bssid;
+ else
+ bssid = ic->ic_bss->in_bssid;
+ bcopy(bssid, outp->wldp_buf, sizeof (wl_bssid_t));
+ break;
+ case WLAN_SET_PARAM:
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_bssid: "
+ "set bssid=%s\n",
+ ieee80211_macaddr_sprintf(inp->wldp_buf));
+ bcopy(inp->wldp_buf, ic->ic_des_bssid, sizeof (wl_bssid_t));
+ ic->ic_flags |= IEEE80211_F_DESBSSID;
+ err = ENETRESET;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_bssid: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_nodename(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_nodename_t *iw_name = (wl_nodename_t *)inp->wldp_buf;
+ wl_nodename_t *ow_name;
+ char *nodename;
+ int len, err;
+
+ err = 0;
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_nodename_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_name = (wl_nodename_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ len = wifi_strnlen((const char *)ic->ic_nickname,
+ IEEE80211_NWID_LEN);
+ ow_name->wl_nodename_length = len;
+ bcopy(ic->ic_nickname, ow_name->wl_nodename_name, len);
+ break;
+ case WLAN_SET_PARAM:
+ if (iw_name->wl_nodename_length > IEEE80211_NWID_LEN) {
+ ieee80211_err("wifi_cfg_nodename: "
+ "node name too long, %u\n",
+ iw_name->wl_nodename_length);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ nodename = iw_name->wl_nodename_name;
+ nodename[IEEE80211_NWID_LEN] = 0;
+ ieee80211_dbg(IEEE80211_MSG_CONFIG,
+ "wifi_cfg_nodename: set nodename %s, len=%d\n",
+ nodename, iw_name->wl_nodename_length);
+
+ len = iw_name->wl_nodename_length;
+ if (len > 0)
+ bcopy(nodename, ic->ic_nickname, len);
+ if (len < IEEE80211_NWID_LEN)
+ ic->ic_nickname[len] = 0;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_nodename: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_phy(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_phy_conf_t *iw_phy = (wl_phy_conf_t *)inp->wldp_buf;
+ wl_phy_conf_t *ow_phy;
+ struct ieee80211_channel *ch = ic->ic_curchan;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_phy_conf_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_phy = (wl_phy_conf_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM: {
+ /* get current physical (FH, DS, ERP) parameters */
+ if (IEEE80211_IS_CHAN_A(ch) || IEEE80211_IS_CHAN_T(ch)) {
+ wl_ofdm_t *ofdm = (wl_ofdm_t *)ow_phy;
+
+ ofdm->wl_ofdm_subtype = WL_OFDM;
+ ofdm->wl_ofdm_frequency = ch->ich_freq;
+ } else {
+ switch (ic->ic_phytype) {
+ case IEEE80211_T_FH: {
+ wl_fhss_t *fhss = (wl_fhss_t *)ow_phy;
+
+ fhss->wl_fhss_subtype = WL_FHSS;
+ fhss->wl_fhss_channel =
+ ieee80211_chan2ieee(ic, ch);
+ break;
+ }
+ case IEEE80211_T_DS: {
+ wl_dsss_t *dsss = (wl_dsss_t *)ow_phy;
+
+ dsss->wl_dsss_subtype = WL_DSSS;
+ dsss->wl_dsss_channel =
+ ieee80211_chan2ieee(ic, ch);
+ break;
+ }
+ case IEEE80211_T_OFDM: {
+ wl_erp_t *erp = (wl_erp_t *)ow_phy;
+
+ erp->wl_erp_subtype = WL_ERP;
+ erp->wl_erp_channel =
+ ieee80211_chan2ieee(ic, ch);
+ break;
+ }
+ default:
+ ieee80211_err("wifi_cfg_phy: "
+ "unknown phy type, %x\n", ic->ic_phytype);
+ outp->wldp_result = WL_HW_ERROR;
+ err = EIO;
+ break;
+ } /* switch (ic->ic_phytype) */
+ }
+ break;
+ }
+
+ case WLAN_SET_PARAM: {
+ wl_dsss_t *dsss = (wl_dsss_t *)iw_phy;
+ int16_t ch = dsss->wl_dsss_channel;
+
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_phy: "
+ "set channel=%d\n", ch);
+ if (ch == 0 || ch == (int16_t)IEEE80211_CHAN_ANY) {
+ ic->ic_des_chan = IEEE80211_CHAN_ANYC;
+ } else if ((uint_t)ch > IEEE80211_CHAN_MAX ||
+ ieee80211_isclr(ic->ic_chan_active, ch)) {
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ } else {
+ ic->ic_des_chan = ic->ic_ibss_chan =
+ &ic->ic_sup_channels[ch];
+ }
+ switch (ic->ic_state) {
+ case IEEE80211_S_INIT:
+ case IEEE80211_S_SCAN:
+ err = ENETRESET;
+ break;
+ default:
+ /*
+ * If the desired channel has changed (to something
+ * other than any) and we're not already scanning,
+ * then kick the state machine.
+ */
+ if (ic->ic_des_chan != IEEE80211_CHAN_ANYC &&
+ ic->ic_bss->in_chan != ic->ic_des_chan &&
+ (ic->ic_flags & IEEE80211_F_SCAN) == 0)
+ err = ENETRESET;
+ break;
+ }
+ break;
+ }
+
+ default:
+ ieee80211_err("wifi_cfg_phy: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ } /* switch (cmd) */
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_wepkey(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_wep_key_t *iw_wepkey = (wl_wep_key_t *)inp->wldp_buf;
+ struct ieee80211_key *k;
+ uint16_t i;
+ uint32_t klen;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, 0)) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ outp->wldp_result = WL_WRITEONLY;
+ err = EINVAL;
+ break;
+ case WLAN_SET_PARAM:
+ if (inp->wldp_length < sizeof (wl_wep_key_tab_t)) {
+ ieee80211_err("wifi_cfg_wepkey: "
+ "parameter too short, %d, expected %d\n",
+ inp->wldp_length, sizeof (wl_wep_key_tab_t));
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ /* set all valid keys */
+ for (i = 0; i < MAX_NWEPKEYS; i++) {
+ if (iw_wepkey[i].wl_wep_operation != WL_ADD)
+ continue;
+ klen = iw_wepkey[i].wl_wep_length;
+ if (klen > IEEE80211_KEYBUF_SIZE) {
+ ieee80211_err("wifi_cfg_wepkey: "
+ "invalid wepkey length, %u\n", klen);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ continue; /* continue to set other keys */
+ }
+ if (klen == 0)
+ continue;
+
+ /*
+ * Set key contents. Only WEP is supported
+ */
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_wepkey: "
+ "set key %u, len=%u\n", i, klen);
+ k = &ic->ic_nw_keys[i];
+ if (ieee80211_crypto_newkey(ic, IEEE80211_CIPHER_WEP,
+ IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, k) == 0) {
+ ieee80211_err("wifi_cfg_wepkey: "
+ "abort, create key failed. id=%u\n", i);
+ outp->wldp_result = WL_HW_ERROR;
+ err = EIO;
+ continue;
+ }
+ k->wk_keyix = i;
+ k->wk_keylen = (uint8_t)klen;
+ k->wk_flags |= IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
+ bzero(k->wk_key, IEEE80211_KEYBUF_SIZE);
+ bcopy(iw_wepkey[i].wl_wep_key, k->wk_key, klen);
+ if (ieee80211_crypto_setkey(ic, k, ic->ic_macaddr)
+ == 0) {
+ ieee80211_err("wifi_cfg_wepkey: "
+ "set key failed len=%u\n", klen);
+ outp->wldp_result = WL_HW_ERROR;
+ err = EIO;
+ }
+ }
+ if (err == 0)
+ err = ENETRESET;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_wepkey: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_keyid(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_wep_key_id_t *iw_kid = (wl_wep_key_id_t *)inp->wldp_buf;
+ wl_wep_key_id_t *ow_kid;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_wep_key_id_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_kid = (wl_wep_key_id_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_kid = (ic->ic_def_txkey == IEEE80211_KEYIX_NONE) ?
+ 0 : ic->ic_def_txkey;
+ break;
+ case WLAN_SET_PARAM:
+ if (*iw_kid >= MAX_NWEPKEYS) {
+ ieee80211_err("wifi_cfg_keyid: "
+ "keyid too large, %u\n", *iw_kid);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ } else {
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_keyid: "
+ "set keyid=%u\n", *iw_kid);
+ ic->ic_def_txkey = *iw_kid;
+ err = ENETRESET;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_keyid: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_authmode(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_authmode_t *iw_auth = (wl_authmode_t *)inp->wldp_buf;
+ wl_authmode_t *ow_auth;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_authmode_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_auth = (wl_authmode_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_auth = ic->ic_bss->in_authmode;
+ break;
+ case WLAN_SET_PARAM:
+ if (*iw_auth == ic->ic_bss->in_authmode)
+ break;
+
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_authmode: "
+ "set authmode=%u\n", *iw_auth);
+ switch (*iw_auth) {
+ case WL_OPENSYSTEM:
+ case WL_SHAREDKEY:
+ ic->ic_bss->in_authmode = *iw_auth;
+ err = ENETRESET;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_authmode: "
+ "unknown authmode %u\n", *iw_auth);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_authmode: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_encrypt(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_encryption_t *iw_encryp = (wl_encryption_t *)inp->wldp_buf;
+ wl_encryption_t *ow_encryp;
+ uint32_t flags;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_encryption_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_encryp = (wl_encryption_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_encryp = (ic->ic_flags & IEEE80211_F_PRIVACY) ? 1 : 0;
+ break;
+ case WLAN_SET_PARAM:
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_encrypt: "
+ "set encryption=%u\n", *iw_encryp);
+ flags = ic->ic_flags;
+ if (*iw_encryp == WL_NOENCRYPTION)
+ flags &= ~IEEE80211_F_PRIVACY;
+ else
+ flags |= IEEE80211_F_PRIVACY;
+
+ if (ic->ic_flags != flags) {
+ ic->ic_flags = flags;
+ err = ENETRESET;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_encrypt: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_bsstype(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wldp_t *outp;
+ wl_bss_type_t *iw_opmode = (wl_bss_type_t *)inp->wldp_buf;
+ wl_bss_type_t *ow_opmode;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_bss_type_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_opmode = (wl_bss_type_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ *ow_opmode = WL_BSS_BSS;
+ break;
+ case IEEE80211_M_IBSS:
+ *ow_opmode = WL_BSS_IBSS;
+ break;
+ default:
+ *ow_opmode = WL_BSS_ANY;
+ break;
+ }
+ break;
+ case WLAN_SET_PARAM:
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_bsstype: "
+ "set bsstype=%u\n", *iw_opmode);
+ switch (*iw_opmode) {
+ case WL_BSS_BSS:
+ ic->ic_flags &= ~IEEE80211_F_IBSSON;
+ ic->ic_opmode = IEEE80211_M_STA;
+ err = ENETRESET;
+ break;
+ case WL_BSS_IBSS:
+ if ((ic->ic_caps & IEEE80211_C_IBSS) == 0) {
+ outp->wldp_result = WL_LACK_FEATURE;
+ err = ENOTSUP;
+ break;
+ }
+
+ if ((ic->ic_flags & IEEE80211_F_IBSSON) == 0) {
+ ic->ic_flags |= IEEE80211_F_IBSSON;
+ ic->ic_opmode = IEEE80211_M_IBSS;
+ err = ENETRESET;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_bsstype: "
+ "unknown opmode %u\n", *iw_opmode);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ break;
+ default:
+ ieee80211_err("wifi_cfg_bsstype: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_linkstatus(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_linkstatus_t *ow_linkstat;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_linkstatus_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_linkstat = (wl_linkstatus_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_linkstat = (ic->ic_state == IEEE80211_S_RUN) ?
+ WL_CONNECTED : WL_NOTCONNECTED;
+ break;
+ case WLAN_SET_PARAM:
+ outp->wldp_result = WL_READONLY;
+ err = EINVAL;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_linkstatus: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_suprates(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_rates_t *ow_rates;
+ const struct ieee80211_rateset *srs;
+ uint8_t srates, *drates;
+ int err, buflen, i, j, k, l;
+
+ err = 0;
+ /* rate value (wl_rates_rates) is of type char */
+ buflen = offsetof(wl_rates_t, wl_rates_rates) +
+ sizeof (char) * IEEE80211_MODE_MAX * IEEE80211_RATE_MAXSIZE;
+ if ((omp = wifi_getoutmsg(*mp, cmd, buflen)) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_rates = (wl_rates_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ /* all rates supported by the device */
+ ow_rates->wl_rates_num = 0;
+ drates = (uint8_t *)ow_rates->wl_rates_rates;
+ for (i = 0; i < IEEE80211_MODE_MAX; i++) {
+ srs = &ic->ic_sup_rates[i];
+ if (srs->ir_nrates == 0)
+ continue;
+
+ for (j = 0; j < srs->ir_nrates; j++) {
+ srates = IEEE80211_RV(srs->ir_rates[j]);
+ /* sort and skip duplicated rates */
+ for (k = 0; k < ow_rates->wl_rates_num; k++) {
+ if (srates <= drates[k])
+ break;
+ }
+ if (srates == drates[k])
+ continue; /* duplicate, skip */
+ /* sort */
+ for (l = ow_rates->wl_rates_num; l > k; l--)
+ drates[l] = drates[l-1];
+ drates[k] = srates;
+ ow_rates->wl_rates_num++;
+ }
+ }
+ break;
+ case WLAN_SET_PARAM:
+ outp->wldp_result = WL_READONLY;
+ err = EINVAL;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_suprates: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+static int
+wifi_cfg_desrates(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ wldp_t *inp = (wldp_t *)(*mp)->b_rptr;
+ wl_rates_t *iw_rates = (wl_rates_t *)inp->wldp_buf;
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_rates_t *ow_rates;
+ struct ieee80211_node *in = ic->ic_bss;
+ struct ieee80211_rateset *rs = &in->in_rates;
+ uint8_t drate, srate;
+ int err, i, j;
+ boolean_t found;
+
+ err = 0;
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_rates_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_rates = (wl_rates_t *)outp->wldp_buf;
+
+ srate = rs->ir_rates[in->in_txrate] & IEEE80211_RATE_VAL;
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ ow_rates->wl_rates_num = 1;
+ ow_rates->wl_rates_rates[0] =
+ (ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) ?
+ srate : ic->ic_fixed_rate;
+ break;
+ case WLAN_SET_PARAM:
+ drate = iw_rates->wl_rates_rates[0];
+ if (ic->ic_fixed_rate == drate)
+ break;
+
+ ieee80211_dbg(IEEE80211_MSG_CONFIG, "wifi_cfg_desrates: "
+ "set desired rate=%u\n", drate);
+
+ if (drate == 0) { /* reset */
+ ic->ic_fixed_rate = IEEE80211_FIXED_RATE_NONE;
+ if (ic->ic_state == IEEE80211_S_RUN) {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_ASSOC, 0);
+ IEEE80211_LOCK(ic);
+ }
+ break;
+ }
+
+ /*
+ * Set desired rate. the desired rate is for data transfer
+ * and usually is checked and used when driver changes to
+ * RUN state.
+ * If the driver is in AUTH | ASSOC | RUN state, desired
+ * rate is checked against rates supported by current ESS.
+ * If it's supported and current state is AUTH|ASSOC, nothing
+ * needs to be doen by driver since the desired rate will
+ * be enabled when the device changes to RUN state. And
+ * when current state is RUN, Re-associate with the ESS to
+ * enable the desired rate.
+ */
+ if (ic->ic_state != IEEE80211_S_INIT &&
+ ic->ic_state != IEEE80211_S_SCAN) {
+ /* check if the rate is supported by current ESS */
+ for (i = 0; i < rs->ir_nrates; i++) {
+ if (drate == IEEE80211_RV(rs->ir_rates[i]))
+ break;
+ }
+ if (i < rs->ir_nrates) { /* supported */
+ ic->ic_fixed_rate = drate;
+ if (ic->ic_state == IEEE80211_S_RUN) {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic,
+ IEEE80211_S_ASSOC, 0);
+ IEEE80211_LOCK(ic);
+ }
+ break;
+ }
+ }
+
+ /* check the rate is supported by device */
+ found = B_FALSE;
+ for (i = 0; i < IEEE80211_MODE_MAX; i++) {
+ rs = &ic->ic_sup_rates[i];
+ for (j = 0; j < rs->ir_nrates; j++) {
+ if (drate == IEEE80211_RV(rs->ir_rates[j])) {
+ found = B_TRUE;
+ break;
+ }
+ }
+ if (found)
+ break;
+ }
+ if (!found) {
+ ieee80211_err("wifi_cfg_desrates: "
+ "invalid rate %d\n", drate);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+ ic->ic_fixed_rate = drate;
+ if (ic->ic_state != IEEE80211_S_SCAN)
+ err = ENETRESET; /* restart */
+ break;
+ default:
+ ieee80211_err("wifi_cfg_desrates: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+/*
+ * Rescale device's RSSI value to (0, 15) as required by WiFi
+ * driver IOCTLs (PSARC/2003/722)
+ */
+static wl_rssi_t
+wifi_getrssi(struct ieee80211_node *in)
+{
+ struct ieee80211com *ic = in->in_ic;
+ wl_rssi_t rssi, max_rssi;
+
+ rssi = ic->ic_node_getrssi(in);
+ max_rssi = (ic->ic_maxrssi == 0) ? IEEE80211_MAXRSSI : ic->ic_maxrssi;
+ if (rssi == 0)
+ rssi = 0;
+ else if (rssi >= max_rssi)
+ rssi = MAX_RSSI;
+ else
+ rssi = rssi * MAX_RSSI / max_rssi + 1;
+
+ return (rssi);
+}
+
+static int
+wifi_cfg_rssi(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_rssi_t *ow_rssi;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, sizeof (wl_rssi_t))) == NULL)
+ return (ENOMEM);
+ outp = (wldp_t *)omp->b_rptr;
+ ow_rssi = (wl_rssi_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ *ow_rssi = wifi_getrssi(ic->ic_bss);
+ break;
+ case WLAN_SET_PARAM:
+ outp->wldp_result = WL_READONLY;
+ err = EINVAL;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_rssi: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ return (EINVAL);
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+/*
+ * maximum scan wait time in second.
+ * Time spent on scaning one channel is usually 100~200ms. The maximum
+ * number of channels defined in wifi_ioctl.h is 99 (MAX_CHANNEL_NUM).
+ * As a result the maximum total scan time is defined as below in ms.
+ */
+#define WAIT_SCAN_MAX (200 * MAX_CHANNEL_NUM)
+
+static void
+wifi_wait_scan(struct ieee80211com *ic)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+
+ while ((ic->ic_flags & (IEEE80211_F_SCAN | IEEE80211_F_ASCAN)) != 0) {
+ if (cv_timedwait_sig(&im->im_scan_cv, &ic->ic_genlock,
+ ddi_get_lbolt() + drv_usectohz(WAIT_SCAN_MAX * 1000)) !=
+ 0) {
+ break;
+ }
+ }
+}
+
+#define WIFI_HAVE_CAP(in, flag) (((in)->in_capinfo & (flag)) ? 1 : 0)
+
+/*
+ * Callback function used by ieee80211_iterate_nodes() in
+ * wifi_cfg_esslist() to get info of each node in a node table
+ * arg output buffer, pointer to wl_ess_list_t
+ * in each node in the node table
+ */
+static void
+wifi_read_ap(void *arg, struct ieee80211_node *in)
+{
+ wl_ess_list_t *aps = arg;
+ ieee80211com_t *ic = in->in_ic;
+ struct ieee80211_channel *chan = in->in_chan;
+ struct ieee80211_rateset *rates = &(in->in_rates);
+ wl_ess_conf_t *conf;
+ uint8_t *end;
+ uint_t i, nrates;
+
+ end = (uint8_t *)aps - WIFI_BUF_OFFSET + MAX_BUF_LEN -
+ sizeof (wl_ess_list_t);
+ conf = &aps->wl_ess_list_ess[aps->wl_ess_list_num];
+ if ((uint8_t *)conf > end)
+ return;
+
+ /* skip newly allocated NULL bss node */
+ if (IEEE80211_ADDR_EQ(in->in_macaddr, ic->ic_macaddr))
+ return;
+
+ conf->wl_ess_conf_essid.wl_essid_length = in->in_esslen;
+ bcopy(in->in_essid, conf->wl_ess_conf_essid.wl_essid_essid,
+ in->in_esslen);
+ bcopy(in->in_bssid, conf->wl_ess_conf_bssid, IEEE80211_ADDR_LEN);
+ conf->wl_ess_conf_wepenabled =
+ (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY ?
+ WL_ENC_WEP : WL_NOENCRYPTION);
+ conf->wl_ess_conf_bsstype =
+ (in->in_capinfo & IEEE80211_CAPINFO_ESS ?
+ WL_BSS_BSS : WL_BSS_IBSS);
+ conf->wl_ess_conf_sl = wifi_getrssi(in);
+
+ /* physical (FH, DS, ERP) parameters */
+ if (IEEE80211_IS_CHAN_A(chan) || IEEE80211_IS_CHAN_T(chan)) {
+ wl_ofdm_t *ofdm =
+ (wl_ofdm_t *)&((conf->wl_phy_conf).wl_phy_ofdm_conf);
+ ofdm->wl_ofdm_subtype = WL_OFDM;
+ ofdm->wl_ofdm_frequency = chan->ich_freq;
+ } else {
+ switch (in->in_phytype) {
+ case IEEE80211_T_FH: {
+ wl_fhss_t *fhss = (wl_fhss_t *)
+ &((conf->wl_phy_conf).wl_phy_fhss_conf);
+
+ fhss->wl_fhss_subtype = WL_FHSS;
+ fhss->wl_fhss_channel = ieee80211_chan2ieee(ic, chan);
+ fhss->wl_fhss_dwelltime = in->in_fhdwell;
+ break;
+ }
+ case IEEE80211_T_DS: {
+ wl_dsss_t *dsss = (wl_dsss_t *)
+ &((conf->wl_phy_conf).wl_phy_dsss_conf);
+
+ dsss->wl_dsss_subtype = WL_DSSS;
+ dsss->wl_dsss_channel = ieee80211_chan2ieee(ic, chan);
+ dsss->wl_dsss_have_short_preamble = WIFI_HAVE_CAP(in,
+ IEEE80211_CAPINFO_SHORT_PREAMBLE);
+ dsss->wl_dsss_agility_enabled = WIFI_HAVE_CAP(in,
+ IEEE80211_CAPINFO_CHNL_AGILITY);
+ dsss->wl_dsss_have_pbcc = dsss->wl_dsss_pbcc_enable =
+ WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_PBCC);
+ break;
+ }
+ case IEEE80211_T_OFDM: {
+ wl_erp_t *erp = (wl_erp_t *)
+ &((conf->wl_phy_conf).wl_phy_erp_conf);
+
+ erp->wl_erp_subtype = WL_ERP;
+ erp->wl_erp_channel = ieee80211_chan2ieee(ic, chan);
+ erp->wl_erp_have_short_preamble = WIFI_HAVE_CAP(in,
+ IEEE80211_CAPINFO_SHORT_PREAMBLE);
+ erp->wl_erp_have_agility = erp->wl_erp_agility_enabled =
+ WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_CHNL_AGILITY);
+ erp->wl_erp_have_pbcc = erp->wl_erp_pbcc_enabled =
+ WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_PBCC);
+ erp->wl_erp_dsss_ofdm_enabled =
+ WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_DSSSOFDM);
+ erp->wl_erp_sst_enabled = WIFI_HAVE_CAP(in,
+ IEEE80211_CAPINFO_SHORT_SLOTTIME);
+ break;
+ } /* case IEEE80211_T_OFDM */
+ } /* switch in->in_phytype */
+ }
+
+ /* supported rates */
+ nrates = MIN(rates->ir_nrates, MAX_SCAN_SUPPORT_RATES);
+ /*
+ * The number of supported rates might exceed
+ * MAX_SCAN_SUPPORT_RATES. Fill in highest rates
+ * first so userland command could properly show
+ * maximum speed of AP
+ */
+ for (i = 0; i < nrates; i++) {
+ conf->wl_supported_rates[i] =
+ rates->ir_rates[rates->ir_nrates - i - 1];
+ }
+
+ aps->wl_ess_list_num++;
+}
+
+static int
+wifi_cfg_esslist(struct ieee80211com *ic, uint32_t cmd, mblk_t **mp)
+{
+ mblk_t *omp;
+ wldp_t *outp;
+ wl_ess_list_t *ow_aps;
+ int err = 0;
+
+ if ((omp = wifi_getoutmsg(*mp, cmd, MAX_BUF_LEN - WIFI_BUF_OFFSET)) ==
+ NULL) {
+ return (ENOMEM);
+ }
+ outp = (wldp_t *)omp->b_rptr;
+ ow_aps = (wl_ess_list_t *)outp->wldp_buf;
+
+ switch (cmd) {
+ case WLAN_GET_PARAM:
+ ow_aps->wl_ess_list_num = 0;
+ ieee80211_iterate_nodes(&ic->ic_scan, wifi_read_ap, ow_aps);
+ outp->wldp_length = WIFI_BUF_OFFSET +
+ offsetof(wl_ess_list_t, wl_ess_list_ess) +
+ ow_aps->wl_ess_list_num * sizeof (wl_ess_conf_t);
+ omp->b_wptr = omp->b_rptr + outp->wldp_length;
+ break;
+ case WLAN_SET_PARAM:
+ outp->wldp_result = WL_READONLY;
+ err = EINVAL;
+ break;
+ default:
+ ieee80211_err("wifi_cfg_esslist: unknown command %x\n", cmd);
+ outp->wldp_result = WL_NOTSUPPORTED;
+ err = EINVAL;
+ break;
+ }
+
+ freemsg(*mp);
+ *mp = omp;
+ return (err);
+}
+
+/*
+ * Scan the network for all available ESSs.
+ * IEEE80211_F_SCANONLY is set when current state is INIT. And
+ * with this flag, after scan the state will be changed back to
+ * INIT. The reason is at the end of SCAN stage, the STA will
+ * consequently connect to an AP. Then it looks unreasonable that
+ * for a disconnected device, A SCAN command causes it connected.
+ * So the state is changed back to INIT.
+ */
+static int
+wifi_cmd_scan(struct ieee80211com *ic, mblk_t *mp)
+{
+ int ostate = ic->ic_state;
+
+ /*
+ * Do not scan when current state is RUN. The reason is
+ * when connected, STA is on the same channel as AP. But
+ * to do scan, STA have to switch to each available channel,
+ * send probe request and wait certian time for probe
+ * response/beacon. Then when the STA switches to a channel
+ * different than AP's, as a result it cannot send/receive
+ * data packets to/from the connected WLAN. This eventually
+ * will cause data loss.
+ */
+ if (ostate == IEEE80211_S_RUN)
+ return (0);
+
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
+ IEEE80211_LOCK(ic);
+ if (ostate == IEEE80211_S_INIT)
+ ic->ic_flags |= IEEE80211_F_SCANONLY;
+
+ /* wait scan complete */
+ wifi_wait_scan(ic);
+
+ wifi_setupoutmsg(mp, 0);
+ return (0);
+}
+
+static void
+wifi_loaddefdata(struct ieee80211com *ic)
+{
+ struct ieee80211_node *in = ic->ic_bss;
+ int i;
+
+ ic->ic_des_esslen = 0;
+ bzero(ic->ic_des_essid, IEEE80211_NWID_LEN);
+ ic->ic_flags &= ~IEEE80211_F_DESBSSID;
+ bzero(ic->ic_des_bssid, IEEE80211_ADDR_LEN);
+ bzero(ic->ic_bss->in_bssid, IEEE80211_ADDR_LEN);
+ ic->ic_des_chan = IEEE80211_CHAN_ANYC;
+ ic->ic_fixed_rate = IEEE80211_FIXED_RATE_NONE;
+ bzero(ic->ic_nickname, IEEE80211_NWID_LEN);
+ in->in_authmode = IEEE80211_AUTH_OPEN;
+ ic->ic_flags &= ~IEEE80211_F_PRIVACY;
+ ic->ic_def_txkey = 0;
+ for (i = 0; i < MAX_NWEPKEYS; i++) {
+ ic->ic_nw_keys[i].wk_keylen = 0;
+ bzero(ic->ic_nw_keys[i].wk_key, IEEE80211_KEYBUF_SIZE);
+ }
+ ic->ic_curmode = IEEE80211_MODE_AUTO;
+}
+
+static int
+wifi_cmd_loaddefaults(struct ieee80211com *ic, mblk_t *mp)
+{
+ wifi_loaddefdata(ic);
+ wifi_setupoutmsg(mp, 0);
+ return (ENETRESET);
+}
+
+static int
+wifi_cmd_disassoc(struct ieee80211com *ic, mblk_t *mp)
+{
+ if (ic->ic_state != IEEE80211_S_INIT) {
+ IEEE80211_UNLOCK(ic);
+ (void) ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
+ IEEE80211_LOCK(ic);
+ }
+ wifi_loaddefdata(ic);
+ wifi_setupoutmsg(mp, 0);
+ return (0);
+}
+
+static int
+wifi_cfg_getset(struct ieee80211com *ic, mblk_t **mp, uint32_t cmd)
+{
+ mblk_t *mp1 = *mp;
+ wldp_t *wp = (wldp_t *)mp1->b_rptr;
+ int err = 0;
+
+ ASSERT(ic != NULL && mp1 != NULL);
+ IEEE80211_LOCK_ASSERT(ic);
+ if (MBLKL(mp1) < WIFI_BUF_OFFSET) {
+ ieee80211_err("wifi_cfg_getset: "
+ "invalid input buffer, size=%d\n", MBLKL(mp1));
+ return (EINVAL);
+ }
+
+ switch (wp->wldp_id) {
+ /* Commands */
+ case WL_SCAN:
+ err = wifi_cmd_scan(ic, mp1);
+ break;
+ case WL_LOAD_DEFAULTS:
+ err = wifi_cmd_loaddefaults(ic, mp1);
+ break;
+ case WL_DISASSOCIATE:
+ err = wifi_cmd_disassoc(ic, mp1);
+ break;
+ /* Parameters */
+ case WL_ESSID:
+ err = wifi_cfg_essid(ic, cmd, mp);
+ break;
+ case WL_BSSID:
+ err = wifi_cfg_bssid(ic, cmd, mp);
+ break;
+ case WL_NODE_NAME:
+ err = wifi_cfg_nodename(ic, cmd, mp);
+ break;
+ case WL_PHY_CONFIG:
+ err = wifi_cfg_phy(ic, cmd, mp);
+ break;
+ case WL_WEP_KEY_TAB:
+ err = wifi_cfg_wepkey(ic, cmd, mp);
+ break;
+ case WL_WEP_KEY_ID:
+ err = wifi_cfg_keyid(ic, cmd, mp);
+ break;
+ case WL_AUTH_MODE:
+ err = wifi_cfg_authmode(ic, cmd, mp);
+ break;
+ case WL_ENCRYPTION:
+ err = wifi_cfg_encrypt(ic, cmd, mp);
+ break;
+ case WL_BSS_TYPE:
+ err = wifi_cfg_bsstype(ic, cmd, mp);
+ break;
+ case WL_DESIRED_RATES:
+ err = wifi_cfg_desrates(ic, cmd, mp);
+ break;
+ case WL_LINKSTATUS:
+ err = wifi_cfg_linkstatus(ic, cmd, mp);
+ break;
+ case WL_ESS_LIST:
+ err = wifi_cfg_esslist(ic, cmd, mp);
+ break;
+ case WL_SUPPORTED_RATES:
+ err = wifi_cfg_suprates(ic, cmd, mp);
+ break;
+ case WL_RSSI:
+ err = wifi_cfg_rssi(ic, cmd, mp);
+ break;
+ default:
+ wifi_setupoutmsg(mp1, 0);
+ wp->wldp_result = WL_LACK_FEATURE;
+ err = ENOTSUP;
+ break;
+ }
+
+ return (err);
+}
+
+/*
+ * Typically invoked by drivers in response to requests for
+ * information or to change settings from the userland.
+ *
+ * Return value should be checked by WiFi drivers. Return 0
+ * on success. Otherwise, return non-zero value to indicate
+ * the error. Driver should operate as below when the return
+ * error is:
+ * ENETRESET Reset wireless network and re-start to join a
+ * WLAN. ENETRESET is returned when a configuration
+ * parameter has been changed.
+ * When acknowledge a M_IOCTL message, thie error
+ * is ignored.
+ */
+int
+ieee80211_ioctl(struct ieee80211com *ic, queue_t *wq, mblk_t *mp)
+{
+ struct iocblk *iocp;
+ int32_t cmd, err, len;
+ boolean_t need_privilege;
+ mblk_t *mp1;
+
+ if (MBLKL(mp) < sizeof (struct iocblk)) {
+ ieee80211_err("ieee80211_ioctl: ioctl buffer too short, %u\n",
+ MBLKL(mp));
+ miocnak(wq, mp, 0, EINVAL);
+ return (EINVAL);
+ }
+
+ /*
+ * Validate the command
+ */
+ iocp = (struct iocblk *)mp->b_rptr;
+ iocp->ioc_error = 0;
+ cmd = iocp->ioc_cmd;
+ need_privilege = B_TRUE;
+ switch (cmd) {
+ case WLAN_SET_PARAM:
+ case WLAN_COMMAND:
+ break;
+ case WLAN_GET_PARAM:
+ need_privilege = B_FALSE;
+ break;
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_ioctl(): "
+ "unknown cmd 0x%x\n", cmd);
+ miocnak(wq, mp, 0, EINVAL);
+ return (EINVAL);
+ }
+
+ if (need_privilege) {
+ /*
+ * Check for specific net_config privilege on Solaris 10+.
+ */
+ err = secpolicy_net_config(iocp->ioc_cr, B_FALSE);
+ if (err != 0) {
+ miocnak(wq, mp, 0, err);
+ return (err);
+ }
+ }
+
+ IEEE80211_LOCK(ic);
+
+ /* sanity check */
+ mp1 = mp->b_cont;
+ if (iocp->ioc_count == 0 || iocp->ioc_count < sizeof (wldp_t) ||
+ mp1 == NULL) {
+ miocnak(wq, mp, 0, EINVAL);
+ IEEE80211_UNLOCK(ic);
+ return (EINVAL);
+ }
+
+ /* assuming single data block */
+ if (mp1->b_cont != NULL) {
+ freemsg(mp1->b_cont);
+ mp1->b_cont = NULL;
+ }
+
+ err = wifi_cfg_getset(ic, &mp1, cmd);
+ mp->b_cont = mp1;
+ IEEE80211_UNLOCK(ic);
+
+ len = msgdsize(mp1);
+ /* ignore ENETRESET when acknowledge the M_IOCTL message */
+ if (err == 0 || err == ENETRESET)
+ miocack(wq, mp, len, 0);
+ else
+ miocack(wq, mp, len, err);
+
+ return (err);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_node.c b/usr/src/uts/common/io/net80211/net80211_node.c
new file mode 100644
index 0000000000..59cb9ccbbf
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_node.c
@@ -0,0 +1,1503 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * Node management routines
+ */
+
+#include "net80211_impl.h"
+
+static ieee80211_node_t *ieee80211_node_alloc(ieee80211com_t *);
+static void ieee80211_node_cleanup(ieee80211_node_t *);
+static void ieee80211_node_free(ieee80211_node_t *);
+static uint8_t ieee80211_node_getrssi(const ieee80211_node_t *);
+static void ieee80211_setup_node(ieee80211com_t *, ieee80211_node_table_t *,
+ ieee80211_node_t *, const uint8_t *);
+static void ieee80211_node_reclaim(ieee80211_node_table_t *,
+ ieee80211_node_t *);
+static void ieee80211_free_node_locked(ieee80211_node_t *);
+static void ieee80211_free_allnodes(ieee80211_node_table_t *);
+static void ieee80211_node_leave(ieee80211com_t *, ieee80211_node_t *);
+static void ieee80211_timeout_scan_candidates(ieee80211_node_table_t *);
+static void ieee80211_timeout_stations(ieee80211_node_table_t *);
+static void ieee80211_node_table_init(ieee80211com_t *,
+ ieee80211_node_table_t *, const char *, int, int,
+ void (*timeout)(ieee80211_node_table_t *));
+static void ieee80211_node_table_cleanup(ieee80211_node_table_t *);
+
+/*
+ * association failures before ignored
+ * The failure may be caused by the response frame is lost for
+ * environmental reason. So Try associate more than once before
+ * ignore the node
+ */
+#define IEEE80211_STA_FAILS_MAX 2
+
+/*
+ * Initialize node database management callbacks for the interface.
+ * This function is called by ieee80211_attach(). These callback
+ * functions may be overridden in special circumstances, as long as
+ * as this is done after calling ieee80211_attach() and prior to any
+ * other call which may allocate a node
+ */
+void
+ieee80211_node_attach(ieee80211com_t *ic)
+{
+ struct ieee80211_impl *im = ic->ic_private;
+
+ ic->ic_node_alloc = ieee80211_node_alloc;
+ ic->ic_node_free = ieee80211_node_free;
+ ic->ic_node_cleanup = ieee80211_node_cleanup;
+ ic->ic_node_getrssi = ieee80211_node_getrssi;
+
+ /* default station inactivity timer setings */
+ im->im_inact_init = IEEE80211_INACT_INIT;
+ im->im_inact_assoc = IEEE80211_INACT_ASSOC;
+ im->im_inact_run = IEEE80211_INACT_RUN;
+ im->im_inact_probe = IEEE80211_INACT_PROBE;
+}
+
+/*
+ * Initialize node databases and the ic_bss node element.
+ */
+void
+ieee80211_node_lateattach(ieee80211com_t *ic)
+{
+ /*
+ * Calculate ic_tim_bitmap size in bytes
+ * IEEE80211_AID_MAX defines maximum bits in ic_tim_bitmap
+ */
+ ic->ic_tim_len = howmany(IEEE80211_AID_MAX, 8) * sizeof (uint8_t);
+
+ ieee80211_node_table_init(ic, &ic->ic_sta, "station",
+ IEEE80211_INACT_INIT, IEEE80211_WEP_NKID,
+ ieee80211_timeout_stations);
+ ieee80211_node_table_init(ic, &ic->ic_scan, "scan",
+ IEEE80211_INACT_SCAN, 0, ieee80211_timeout_scan_candidates);
+
+ ieee80211_reset_bss(ic);
+}
+
+/*
+ * Destroy all node databases and is usually called during device detach
+ */
+void
+ieee80211_node_detach(ieee80211com_t *ic)
+{
+ /* Node Detach */
+ if (ic->ic_bss != NULL) {
+ ieee80211_free_node(ic->ic_bss);
+ ic->ic_bss = NULL;
+ }
+ ieee80211_node_table_cleanup(&ic->ic_scan);
+ ieee80211_node_table_cleanup(&ic->ic_sta);
+}
+
+/*
+ * Increase a node's reference count
+ *
+ * Return pointer to the node
+ */
+ieee80211_node_t *
+ieee80211_ref_node(ieee80211_node_t *in)
+{
+ ieee80211_node_incref(in);
+ return (in);
+}
+
+/*
+ * Dexrease a node's reference count
+ */
+void
+ieee80211_unref_node(ieee80211_node_t **in)
+{
+ ieee80211_node_decref(*in);
+ *in = NULL; /* guard against use */
+}
+
+/*
+ * Mark ports authorized for data traffic. This function is usually
+ * used by 802.1x authenticator.
+ */
+void
+ieee80211_node_authorize(ieee80211_node_t *in)
+{
+ ieee80211_impl_t *im = in->in_ic->ic_private;
+
+ in->in_flags |= IEEE80211_NODE_AUTH;
+ in->in_inact_reload = im->im_inact_run;
+}
+
+/*
+ * Mark ports unauthorized for data traffic. This function is usually
+ * used by 802.1x authenticator.
+ */
+void
+ieee80211_node_unauthorize(ieee80211_node_t *in)
+{
+ in->in_flags &= ~IEEE80211_NODE_AUTH;
+}
+
+/*
+ * Set/change the channel. The rate set is also updated as
+ * to insure a consistent view by drivers.
+ */
+static void
+ieee80211_node_setchan(ieee80211com_t *ic, ieee80211_node_t *in,
+ struct ieee80211_channel *chan)
+{
+ if (chan == IEEE80211_CHAN_ANYC)
+ chan = ic->ic_curchan;
+ in->in_chan = chan;
+ in->in_rates = ic->ic_sup_rates[ieee80211_chan2mode(ic, chan)];
+}
+
+/*
+ * Initialize the channel set to scan based on the available channels
+ * and the current PHY mode.
+ */
+static void
+ieee80211_reset_scan(ieee80211com_t *ic)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+
+ if (ic->ic_des_chan != IEEE80211_CHAN_ANYC) {
+ (void) memset(im->im_chan_scan, 0, sizeof (im->im_chan_scan));
+ ieee80211_setbit(im->im_chan_scan,
+ ieee80211_chan2ieee(ic, ic->ic_des_chan));
+ } else {
+ bcopy(ic->ic_chan_active, im->im_chan_scan,
+ sizeof (ic->ic_chan_active));
+ }
+ ieee80211_dbg(IEEE80211_MSG_SCAN, "ieee80211_reset_scan(): "
+ "start chan %u\n", ieee80211_chan2ieee(ic, ic->ic_curchan));
+}
+
+/*
+ * Begin an active scan. Initialize the node cache. The scan
+ * begins on the next radio channel by calling ieee80211_next_scan().
+ * The actual scanning is not automated. The driver itself
+ * only handles setting the radio frequency and stepping through
+ * the channels.
+ */
+void
+ieee80211_begin_scan(ieee80211com_t *ic, boolean_t reset)
+{
+ IEEE80211_LOCK(ic);
+
+ if (ic->ic_opmode != IEEE80211_M_HOSTAP)
+ ic->ic_flags |= IEEE80211_F_ASCAN;
+ ieee80211_dbg(IEEE80211_MSG_SCAN,
+ "begin %s scan in %s mode on channel %u\n",
+ (ic->ic_flags & IEEE80211_F_ASCAN) ? "active" : "passive",
+ ieee80211_phymode_name[ic->ic_curmode],
+ ieee80211_chan2ieee(ic, ic->ic_curchan));
+
+ /*
+ * Clear scan state and flush any previously seen AP's.
+ */
+ ieee80211_reset_scan(ic);
+ if (reset)
+ ieee80211_free_allnodes(&ic->ic_scan);
+
+ ic->ic_flags |= IEEE80211_F_SCAN;
+ IEEE80211_UNLOCK(ic);
+
+ /* Scan the next channel. */
+ ieee80211_next_scan(ic);
+}
+
+/*
+ * Switch to the next channel marked for scanning.
+ * A driver is expected to first call ieee80211_begin_scan(),
+ * to initialize the node cache, then set the radio channel
+ * on the device. And then after a certain time has elapsed,
+ * call ieee80211_next_scan() to move to the next channel.
+ * Typically, a timeout routine is used to automate this process.
+ */
+void
+ieee80211_next_scan(ieee80211com_t *ic)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ struct ieee80211_channel *chan;
+
+ IEEE80211_LOCK(ic);
+ /*
+ * Insure any previous mgt frame timeouts don't fire.
+ * This assumes the driver does the right thing in
+ * flushing anything queued in the driver and below.
+ */
+ im->im_mgt_timer = 0;
+
+ chan = ic->ic_curchan;
+ do {
+ if (++chan > &ic->ic_sup_channels[IEEE80211_CHAN_MAX])
+ chan = &ic->ic_sup_channels[0];
+ if (ieee80211_isset(im->im_chan_scan,
+ ieee80211_chan2ieee(ic, chan))) {
+ ieee80211_clrbit(im->im_chan_scan,
+ ieee80211_chan2ieee(ic, chan));
+ ieee80211_dbg(IEEE80211_MSG_SCAN,
+ "ieee80211_next_scan: chan %d->%d\n",
+ ieee80211_chan2ieee(ic, ic->ic_curchan),
+ ieee80211_chan2ieee(ic, chan));
+ ic->ic_curchan = chan;
+ /*
+ * drivers should do this as needed,
+ * for now maintain compatibility
+ */
+ ic->ic_bss->in_rates =
+ ic->ic_sup_rates[ieee80211_chan2mode(ic, chan)];
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
+ return;
+ }
+ } while (chan != ic->ic_curchan);
+ IEEE80211_UNLOCK(ic);
+ ieee80211_end_scan(ic);
+}
+
+/*
+ * Copy useful state from node obss into nbss.
+ */
+static void
+ieee80211_copy_bss(ieee80211_node_t *nbss, const ieee80211_node_t *obss)
+{
+ /* propagate useful state */
+ nbss->in_authmode = obss->in_authmode;
+ nbss->in_txpower = obss->in_txpower;
+ nbss->in_vlan = obss->in_vlan;
+}
+
+/*
+ * Setup the net80211 specific portion of an interface's softc, ic,
+ * for use in IBSS mode
+ */
+void
+ieee80211_create_ibss(ieee80211com_t *ic, struct ieee80211_channel *chan)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ ieee80211_node_table_t *nt;
+ ieee80211_node_t *in;
+
+ IEEE80211_LOCK_ASSERT(ic);
+ ieee80211_dbg(IEEE80211_MSG_SCAN, "ieee80211_create_ibss: "
+ "creating ibss\n");
+
+ /*
+ * Create the station/neighbor table. Note that for adhoc
+ * mode we make the initial inactivity timer longer since
+ * we create nodes only through discovery and they typically
+ * are long-lived associations.
+ */
+ nt = &ic->ic_sta;
+ IEEE80211_NODE_LOCK(nt);
+ nt->nt_name = "neighbor";
+ nt->nt_inact_init = im->im_inact_run;
+ IEEE80211_NODE_UNLOCK(nt);
+
+ in = ieee80211_alloc_node(ic, &ic->ic_sta, ic->ic_macaddr);
+ if (in == NULL) {
+ ieee80211_err("ieee80211_create_ibss(): alloc node failed\n");
+ return;
+ }
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_macaddr);
+ in->in_esslen = ic->ic_des_esslen;
+ (void) memcpy(in->in_essid, ic->ic_des_essid, in->in_esslen);
+ ieee80211_copy_bss(in, ic->ic_bss);
+ in->in_intval = ic->ic_bintval;
+ if (ic->ic_flags & IEEE80211_F_PRIVACY)
+ in->in_capinfo |= IEEE80211_CAPINFO_PRIVACY;
+ if (ic->ic_phytype == IEEE80211_T_FH) {
+ in->in_fhdwell = 200;
+ in->in_fhindex = 1;
+ }
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_IBSS:
+ ic->ic_flags |= IEEE80211_F_SIBSS;
+ in->in_capinfo |= IEEE80211_CAPINFO_IBSS;
+ if (ic->ic_flags & IEEE80211_F_DESBSSID)
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_des_bssid);
+ else
+ in->in_bssid[0] |= 0x02; /* local bit for IBSS */
+ break;
+ case IEEE80211_M_AHDEMO:
+ if (ic->ic_flags & IEEE80211_F_DESBSSID)
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_des_bssid);
+ else
+ (void) memset(in->in_bssid, 0, IEEE80211_ADDR_LEN);
+ break;
+ default:
+ ieee80211_err("ieee80211_create_ibss(): "
+ "wrong opmode %u to creat IBSS, abort\n",
+ ic->ic_opmode);
+ ieee80211_free_node(in);
+ return;
+ }
+
+ /*
+ * Fix the channel and related attributes.
+ */
+ ieee80211_node_setchan(ic, in, chan);
+ ic->ic_curchan = chan;
+ ic->ic_curmode = ieee80211_chan2mode(ic, chan);
+ /*
+ * Do mode-specific rate setup.
+ */
+ ieee80211_setbasicrates(&in->in_rates, ic->ic_curmode);
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_join(ic, in);
+ IEEE80211_LOCK(ic);
+}
+
+void
+ieee80211_reset_bss(ieee80211com_t *ic)
+{
+ ieee80211_node_t *in;
+ ieee80211_node_t *obss;
+
+ in = ieee80211_alloc_node(ic, &ic->ic_scan, ic->ic_macaddr);
+ ASSERT(in != NULL);
+ obss = ic->ic_bss;
+ ic->ic_bss = ieee80211_ref_node(in);
+ if (obss != NULL) {
+ ieee80211_copy_bss(in, obss);
+ in->in_intval = ic->ic_bintval;
+ ieee80211_free_node(obss);
+ }
+}
+
+static int
+ieee80211_match_bss(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ uint8_t rate;
+ int fail;
+
+ fail = 0;
+ if (ieee80211_isclr(ic->ic_chan_active,
+ ieee80211_chan2ieee(ic, in->in_chan))) {
+ fail |= IEEE80211_BADCHAN;
+ }
+ if (ic->ic_des_chan != IEEE80211_CHAN_ANYC &&
+ in->in_chan != ic->ic_des_chan) {
+ fail |= IEEE80211_BADCHAN;
+ }
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ if (!(in->in_capinfo & IEEE80211_CAPINFO_IBSS))
+ fail |= IEEE80211_BADOPMODE;
+ } else {
+ if (!(in->in_capinfo & IEEE80211_CAPINFO_ESS))
+ fail |= IEEE80211_BADOPMODE;
+ }
+ if (ic->ic_flags & IEEE80211_F_PRIVACY) {
+ if (!(in->in_capinfo & IEEE80211_CAPINFO_PRIVACY))
+ fail |= IEEE80211_BADPRIVACY;
+ } else {
+ if (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY)
+ fail |= IEEE80211_BADPRIVACY;
+ }
+ rate = ieee80211_fix_rate(in, IEEE80211_F_DONEGO | IEEE80211_F_DOFRATE);
+ if (rate & IEEE80211_RATE_BASIC)
+ fail |= IEEE80211_BADRATE;
+ if (ic->ic_des_esslen != 0 &&
+ (in->in_esslen != ic->ic_des_esslen ||
+ memcmp(in->in_essid, ic->ic_des_essid, ic->ic_des_esslen) != 0)) {
+ fail |= IEEE80211_BADESSID;
+ }
+ if ((ic->ic_flags & IEEE80211_F_DESBSSID) &&
+ !IEEE80211_ADDR_EQ(ic->ic_des_bssid, in->in_bssid)) {
+ fail |= IEEE80211_BADBSSID;
+ }
+ if (in->in_fails >= IEEE80211_STA_FAILS_MAX)
+ fail |= IEEE80211_NODEFAIL;
+
+ return (fail);
+}
+
+#define IEEE80211_MAXRATE(_rs) \
+ ((_rs).ir_rates[(_rs).ir_nrates - 1] & IEEE80211_RATE_VAL)
+
+/*
+ * Compare the capabilities of node a with node b and decide which is
+ * more desirable (return b if b is considered better than a). Note
+ * that we assume compatibility/usability has already been checked
+ * so we don't need to (e.g. validate whether privacy is supported).
+ * Used to select the best scan candidate for association in a BSS.
+ *
+ * Return desired node
+ */
+static ieee80211_node_t *
+ieee80211_node_compare(ieee80211com_t *ic, ieee80211_node_t *a,
+ ieee80211_node_t *b)
+{
+ uint8_t maxa;
+ uint8_t maxb;
+ uint8_t rssia;
+ uint8_t rssib;
+
+ /* privacy support preferred */
+ if ((a->in_capinfo & IEEE80211_CAPINFO_PRIVACY) &&
+ !(b->in_capinfo & IEEE80211_CAPINFO_PRIVACY)) {
+ return (a);
+ }
+ if (!(a->in_capinfo & IEEE80211_CAPINFO_PRIVACY) &&
+ (b->in_capinfo & IEEE80211_CAPINFO_PRIVACY)) {
+ return (b);
+ }
+
+ /* compare count of previous failures */
+ if (b->in_fails != a->in_fails)
+ return ((a->in_fails > b->in_fails) ? b : a);
+
+ rssia = ic->ic_node_getrssi(a);
+ rssib = ic->ic_node_getrssi(b);
+ if (ABS(rssib - rssia) < IEEE80211_RSSI_CMP_THRESHOLD) {
+ /* best/max rate preferred if signal level close enough */
+ maxa = IEEE80211_MAXRATE(a->in_rates);
+ maxb = IEEE80211_MAXRATE(b->in_rates);
+ if (maxa != maxb)
+ return ((maxb > maxa) ? b : a);
+ /* for now just prefer 5Ghz band to all other bands */
+ if (IEEE80211_IS_CHAN_5GHZ(a->in_chan) &&
+ !IEEE80211_IS_CHAN_5GHZ(b->in_chan)) {
+ return (a);
+ }
+ if (!IEEE80211_IS_CHAN_5GHZ(a->in_chan) &&
+ IEEE80211_IS_CHAN_5GHZ(b->in_chan)) {
+ return (b);
+ }
+ }
+ /* all things being equal, compare signal level */
+ return ((rssib > rssia) ? b : a);
+}
+
+/*
+ * Mark an ongoing scan stopped.
+ */
+void
+ieee80211_cancel_scan(ieee80211com_t *ic)
+{
+ IEEE80211_LOCK(ic);
+ ieee80211_dbg(IEEE80211_MSG_SCAN, "ieee80211_cancel_scan()"
+ "end %s scan\n",
+ (ic->ic_flags & IEEE80211_F_ASCAN) ? "active" : "passive");
+ ic->ic_flags &= ~(IEEE80211_F_SCAN | IEEE80211_F_ASCAN);
+ cv_broadcast(&((ieee80211_impl_t *)ic->ic_private)->im_scan_cv);
+ IEEE80211_UNLOCK(ic);
+}
+
+/*
+ * Complete a scan of potential channels. It is called by
+ * ieee80211_next_scan() when the state machine has performed
+ * a full cycle of scaning on all available radio channels.
+ * ieee80211_end_scan() will inspect the node cache for suitable
+ * APs found during scaning, and associate with one, should
+ * the parameters of the node match those of the configuration
+ * requested from userland.
+ */
+void
+ieee80211_end_scan(ieee80211com_t *ic)
+{
+ ieee80211_node_table_t *nt = &ic->ic_scan;
+ ieee80211_node_t *in;
+ ieee80211_node_t *selbs;
+
+ ieee80211_cancel_scan(ic);
+ IEEE80211_LOCK(ic);
+
+ /*
+ * Automatic sequencing; look for a candidate and
+ * if found join the network.
+ */
+ /* NB: unlocked read should be ok */
+ in = list_head(&nt->nt_node);
+ if (in == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_SCAN, "ieee80211_end_scan: "
+ "no scan candidate\n");
+ notfound:
+ if (ic->ic_opmode == IEEE80211_M_IBSS &&
+ (ic->ic_flags & IEEE80211_F_IBSSON) &&
+ ic->ic_des_esslen != 0) {
+ ieee80211_create_ibss(ic, ic->ic_ibss_chan);
+ IEEE80211_UNLOCK(ic);
+ return;
+ }
+
+ /*
+ * Reset the list of channels to scan and start again.
+ */
+ ieee80211_reset_scan(ic);
+ ic->ic_flags |= IEEE80211_F_SCAN | IEEE80211_F_ASCAN;
+ IEEE80211_UNLOCK(ic);
+
+ ieee80211_next_scan(ic);
+ return;
+ }
+
+ if (ic->ic_flags & IEEE80211_F_SCANONLY) { /* scan only */
+ ic->ic_flags &= ~IEEE80211_F_SCANONLY;
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
+ return;
+ }
+
+ selbs = NULL;
+ IEEE80211_NODE_LOCK(nt);
+ while (in != NULL) {
+ if (in->in_fails >= IEEE80211_STA_FAILS_MAX) {
+ ieee80211_node_t *tmpin = in;
+
+ /*
+ * The configuration of the access points may change
+ * during my scan. So delete the entry for the AP
+ * and retry to associate if there is another beacon.
+ */
+ in = list_next(&nt->nt_node, tmpin);
+ ieee80211_node_reclaim(nt, tmpin);
+ continue;
+ }
+ if (ieee80211_match_bss(ic, in) == 0) {
+ if (selbs == NULL)
+ selbs = in;
+ else
+ selbs = ieee80211_node_compare(ic, selbs, in);
+ }
+ in = list_next(&nt->nt_node, in);
+ }
+ IEEE80211_NODE_UNLOCK(nt);
+ if (selbs == NULL)
+ goto notfound;
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_join(ic, selbs);
+}
+
+
+/*
+ * Handle 802.11 ad hoc network merge. The convention, set by the
+ * Wireless Ethernet Compatibility Alliance (WECA), is that an 802.11
+ * station will change its BSSID to match the "oldest" 802.11 ad hoc
+ * network, on the same channel, that has the station's desired SSID.
+ * The "oldest" 802.11 network sends beacons with the greatest TSF
+ * timestamp.
+ * The caller is assumed to validate TSF's before attempting a merge.
+ *
+ * Return B_TRUE if the BSSID changed, B_FALSE otherwise.
+ */
+boolean_t
+ieee80211_ibss_merge(ieee80211_node_t *in)
+{
+ ieee80211com_t *ic = in->in_ic;
+
+ if (in == ic->ic_bss ||
+ IEEE80211_ADDR_EQ(in->in_bssid, ic->ic_bss->in_bssid)) {
+ /* unchanged, nothing to do */
+ return (B_FALSE);
+ }
+ if (ieee80211_match_bss(ic, in) != 0) { /* capabilities mismatch */
+ ieee80211_dbg(IEEE80211_MSG_ASSOC, "ieee80211_ibss_merge: "
+ " merge failed, capabilities mismatch\n");
+ return (B_FALSE);
+ }
+ ieee80211_dbg(IEEE80211_MSG_ASSOC, "ieee80211_ibss_merge: "
+ "new bssid %s: %s preamble, %s slot time%s\n",
+ ieee80211_macaddr_sprintf(in->in_bssid),
+ (ic->ic_flags & IEEE80211_F_SHPREAMBLE) ? "short" : "long",
+ (ic->ic_flags & IEEE80211_F_SHSLOT) ? "short" : "long",
+ (ic->ic_flags&IEEE80211_F_USEPROT) ? ", protection" : "");
+ ieee80211_sta_join(ic, in);
+ return (B_TRUE);
+}
+
+/*
+ * Join the specified IBSS/BSS network. The node is assumed to
+ * be passed in with a held reference.
+ */
+void
+ieee80211_sta_join(ieee80211com_t *ic, ieee80211_node_t *selbs)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ ieee80211_node_t *obss;
+
+ IEEE80211_LOCK(ic);
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ ieee80211_node_table_t *nt;
+
+ /*
+ * Delete unusable rates; we've already checked
+ * that the negotiated rate set is acceptable.
+ */
+ (void) ieee80211_fix_rate(selbs, IEEE80211_F_DODEL);
+ /*
+ * Fillin the neighbor table
+ */
+ nt = &ic->ic_sta;
+ IEEE80211_NODE_LOCK(nt);
+ nt->nt_name = "neighbor";
+ nt->nt_inact_init = im->im_inact_run;
+ IEEE80211_NODE_UNLOCK(nt);
+ }
+
+ /*
+ * Committed to selbs, setup state.
+ */
+ obss = ic->ic_bss;
+ ic->ic_bss = ieee80211_ref_node(selbs); /* Grab reference */
+ if (obss != NULL) {
+ ieee80211_copy_bss(selbs, obss);
+ ieee80211_free_node(obss);
+ }
+ ic->ic_curmode = ieee80211_chan2mode(ic, selbs->in_chan);
+ ic->ic_curchan = selbs->in_chan;
+ /*
+ * Set the erp state (mostly the slot time) to deal with
+ * the auto-select case; this should be redundant if the
+ * mode is locked.
+ */
+ ieee80211_reset_erp(ic);
+
+ IEEE80211_UNLOCK(ic);
+ if (ic->ic_opmode == IEEE80211_M_STA)
+ ieee80211_new_state(ic, IEEE80211_S_AUTH, -1);
+ else
+ ieee80211_new_state(ic, IEEE80211_S_RUN, -1);
+}
+
+/*
+ * Leave the specified IBSS/BSS network. The node is assumed to
+ * be passed in with a held reference.
+ */
+void
+ieee80211_sta_leave(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ IEEE80211_LOCK(ic);
+ ic->ic_node_cleanup(in);
+ ieee80211_notify_node_leave(ic, in);
+ IEEE80211_UNLOCK(ic);
+}
+
+/*
+ * Allocate a node. This is the default callback function for
+ * ic_node_alloc. This function may be overridden by the driver
+ * to allocate device specific node structure.
+ */
+/* ARGSUSED */
+static ieee80211_node_t *
+ieee80211_node_alloc(ieee80211com_t *ic)
+{
+ return (kmem_zalloc(sizeof (ieee80211_node_t), KM_SLEEP));
+}
+
+/*
+ * Cleanup a node, free any memory associated with the node.
+ * This is the default callback function for ic_node_cleanup
+ * and may be overridden by the driver.
+ */
+static void
+ieee80211_node_cleanup(ieee80211_node_t *in)
+{
+ in->in_associd = 0;
+ in->in_rssi = 0;
+ in->in_rstamp = 0;
+ if (in->in_challenge != NULL) {
+ kmem_free(in->in_challenge, IEEE80211_CHALLENGE_LEN);
+ in->in_challenge = NULL;
+ }
+ if (in->in_rxfrag != NULL) {
+ freemsg(in->in_rxfrag);
+ in->in_rxfrag = NULL;
+ }
+}
+
+/*
+ * Free a node. This is the default callback function for ic_node_free
+ * and may be overridden by the driver to free memory used by device
+ * specific node structure
+ */
+static void
+ieee80211_node_free(ieee80211_node_t *in)
+{
+ ieee80211com_t *ic = in->in_ic;
+
+ ic->ic_node_cleanup(in);
+ kmem_free(in, sizeof (ieee80211_node_t));
+}
+
+/*
+ * Get a node current RSSI value. This is the default callback function
+ * for ic_node_getrssi and may be overridden by the driver to provide
+ * device specific RSSI calculation algorithm.
+ */
+static uint8_t
+ieee80211_node_getrssi(const ieee80211_node_t *in)
+{
+ return (in->in_rssi);
+}
+
+/* Free fragment if not needed anymore */
+static void
+node_cleanfrag(ieee80211_node_t *in)
+{
+ clock_t ticks;
+
+ ticks = ddi_get_lbolt();
+ if (in->in_rxfrag != NULL && ticks > (in->in_rxfragstamp + hz)) {
+ freemsg(in->in_rxfrag);
+ in->in_rxfrag = NULL;
+ }
+}
+
+/*
+ * Setup a node. Initialize the node with specified macaddr. Associate
+ * with the interface softc, ic, and add it to the specified node
+ * database.
+ */
+static void
+ieee80211_setup_node(ieee80211com_t *ic, ieee80211_node_table_t *nt,
+ ieee80211_node_t *in, const uint8_t *macaddr)
+{
+ int32_t hash;
+
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_setup_node(): "
+ "%p<%s> in %s table\n", in,
+ ieee80211_macaddr_sprintf(macaddr),
+ (nt != NULL) ? nt->nt_name : "NULL");
+
+ in->in_ic = ic;
+ IEEE80211_ADDR_COPY(in->in_macaddr, macaddr);
+ hash = ieee80211_node_hash(macaddr);
+ ieee80211_node_initref(in); /* mark referenced */
+ in->in_authmode = IEEE80211_AUTH_OPEN;
+ in->in_txpower = ic->ic_txpowlimit; /* max power */
+ in->in_chan = IEEE80211_CHAN_ANYC;
+ in->in_inact_reload = IEEE80211_INACT_INIT;
+ in->in_inact = in->in_inact_reload;
+ ieee80211_crypto_resetkey(ic, &in->in_ucastkey, IEEE80211_KEYIX_NONE);
+
+ if (nt != NULL) {
+ IEEE80211_NODE_LOCK(nt);
+ list_insert_tail(&nt->nt_node, in);
+ list_insert_tail(&nt->nt_hash[hash], in);
+ in->in_table = nt;
+ in->in_inact_reload = nt->nt_inact_init;
+ IEEE80211_NODE_UNLOCK(nt);
+ }
+}
+
+/*
+ * Allocates and initialize a node with specified MAC address.
+ * Associate the node with the interface ic. If the allocation
+ * is successful, the node structure is initialized by
+ * ieee80211_setup_node(); otherwise, NULL is returned
+ */
+ieee80211_node_t *
+ieee80211_alloc_node(ieee80211com_t *ic, ieee80211_node_table_t *nt,
+ const uint8_t *macaddr)
+{
+ ieee80211_node_t *in;
+
+ in = ic->ic_node_alloc(ic);
+ if (in != NULL)
+ ieee80211_setup_node(ic, nt, in, macaddr);
+ return (in);
+}
+
+/*
+ * Craft a temporary node suitable for sending a management frame
+ * to the specified station. We craft only as much state as we
+ * need to do the work since the node will be immediately reclaimed
+ * once the send completes.
+ */
+ieee80211_node_t *
+ieee80211_tmp_node(ieee80211com_t *ic, const uint8_t *macaddr)
+{
+ ieee80211_node_t *in;
+
+ in = ic->ic_node_alloc(ic);
+ if (in != NULL) {
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_tmp_node: "
+ "%p<%s>\n", in, ieee80211_macaddr_sprintf(macaddr));
+
+ IEEE80211_ADDR_COPY(in->in_macaddr, macaddr);
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_bss->in_bssid);
+ ieee80211_node_initref(in); /* mark referenced */
+ in->in_txpower = ic->ic_bss->in_txpower;
+ /* NB: required by ieee80211_fix_rate */
+ ieee80211_node_setchan(ic, in, ic->ic_bss->in_chan);
+ ieee80211_crypto_resetkey(ic, &in->in_ucastkey,
+ IEEE80211_KEYIX_NONE);
+
+ in->in_table = NULL; /* NB: pedantic */
+ in->in_ic = ic;
+ }
+
+ return (in);
+}
+
+/*
+ * ieee80211_dup_bss() is similar to ieee80211_alloc_node(),
+ * but is instead used to create a node database entry for
+ * the specified BSSID. If the allocation is successful, the
+ * node is initialized, otherwise, NULL is returned.
+ */
+ieee80211_node_t *
+ieee80211_dup_bss(ieee80211_node_table_t *nt, const uint8_t *macaddr)
+{
+ ieee80211com_t *ic = nt->nt_ic;
+ ieee80211_node_t *in;
+
+ in = ieee80211_alloc_node(ic, nt, macaddr);
+ if (in != NULL) {
+ /*
+ * Inherit from ic_bss.
+ */
+ ieee80211_copy_bss(in, ic->ic_bss);
+ IEEE80211_ADDR_COPY(in->in_bssid, ic->ic_bss->in_bssid);
+ ieee80211_node_setchan(ic, in, ic->ic_bss->in_chan);
+ }
+
+ return (in);
+}
+
+/*
+ * Iterate through the node table, searching for a node entry which
+ * matches macaddr. If the entry is found, its reference count is
+ * incremented, and a pointer to the node is returned; otherwise,
+ * NULL will be returned.
+ * The node table lock is acquired by the caller.
+ */
+static ieee80211_node_t *
+ieee80211_find_node_locked(ieee80211_node_table_t *nt, const uint8_t *macaddr)
+{
+ ieee80211_node_t *in;
+ int hash;
+
+ ASSERT(IEEE80211_NODE_IS_LOCKED(nt));
+
+ hash = ieee80211_node_hash(macaddr);
+ in = list_head(&nt->nt_hash[hash]);
+ while (in != NULL) {
+ if (IEEE80211_ADDR_EQ(in->in_macaddr, macaddr))
+ return (ieee80211_ref_node(in)); /* mark referenced */
+ in = list_next(&nt->nt_hash[hash], in);
+ }
+ return (NULL);
+}
+
+/*
+ * Iterate through the node table, searching for a node entry
+ * which match specified mac address.
+ * Return NULL if no matching node found.
+ */
+ieee80211_node_t *
+ieee80211_find_node(ieee80211_node_table_t *nt, const uint8_t *macaddr)
+{
+ ieee80211_node_t *in;
+
+ IEEE80211_NODE_LOCK(nt);
+ in = ieee80211_find_node_locked(nt, macaddr);
+ IEEE80211_NODE_UNLOCK(nt);
+ return (in);
+}
+
+/*
+ * Fake up a node; this handles node discovery in adhoc mode.
+ * Note that for the driver's benefit we treat this like an
+ * association so the driver has an opportunity to setup it's
+ * private state.
+ */
+ieee80211_node_t *
+ieee80211_fakeup_adhoc_node(ieee80211_node_table_t *nt, const uint8_t *macaddr)
+{
+ ieee80211com_t *ic = nt->nt_ic;
+ ieee80211_node_t *in;
+
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_fakeup_adhoc_node: "
+ "mac<%s>\n", ieee80211_macaddr_sprintf(macaddr));
+ in = ieee80211_dup_bss(nt, macaddr);
+ if (in != NULL) {
+ /* no rate negotiation; just dup */
+ in->in_rates = ic->ic_bss->in_rates;
+ if (ic->ic_node_newassoc != NULL)
+ ic->ic_node_newassoc(in, 1);
+ ieee80211_node_authorize(in);
+ }
+ return (in);
+}
+
+/*
+ * Process a beacon or probe response frame.
+ */
+void
+ieee80211_add_scan(ieee80211com_t *ic, const struct ieee80211_scanparams *sp,
+ const struct ieee80211_frame *wh, int subtype, int rssi, int rstamp)
+{
+ ieee80211_node_table_t *nt = &ic->ic_scan;
+ ieee80211_node_t *in;
+ boolean_t newnode = B_FALSE;
+
+ in = ieee80211_find_node(nt, wh->i_addr2);
+ if (in == NULL) {
+ /*
+ * Create a new entry.
+ */
+ in = ieee80211_alloc_node(ic, nt, wh->i_addr2);
+ if (in == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_add_scan: "
+ "alloc node failed\n");
+ return;
+ }
+ /*
+ * inherit from ic_bss.
+ */
+ ieee80211_copy_bss(in, ic->ic_bss);
+ ieee80211_node_setchan(ic, in, ic->ic_curchan);
+ newnode = B_TRUE;
+ }
+
+ /* ap beaconing multiple ssid w/ same bssid */
+
+ /*
+ * sp->ssid[0] - element ID
+ * sp->ssid[1] - length
+ * sp->ssid[2]... - ssid
+ */
+ if (sp->ssid[1] != 0 &&
+ subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP ||
+ in->in_esslen == 0) {
+ in->in_esslen = sp->ssid[1];
+ bzero(in->in_essid, sizeof (in->in_essid));
+ bcopy(sp->ssid + 2, in->in_essid, sp->ssid[1]);
+ }
+ IEEE80211_ADDR_COPY(in->in_bssid, wh->i_addr3);
+ in->in_rssi = (uint8_t)rssi;
+ in->in_rstamp = rstamp;
+ bcopy(sp->tstamp, in->in_tstamp.data, sizeof (in->in_tstamp));
+ in->in_intval = sp->bintval;
+ in->in_capinfo = sp->capinfo;
+ in->in_chan = &ic->ic_sup_channels[sp->chan];
+ in->in_phytype = sp->phytype;
+ in->in_fhdwell = sp->fhdwell;
+ in->in_fhindex = sp->fhindex;
+ in->in_erp = sp->erp;
+ if (sp->tim != NULL) {
+ struct ieee80211_tim_ie *ie;
+
+ ie = (struct ieee80211_tim_ie *)sp->tim;
+ in->in_dtim_count = ie->tim_count;
+ in->in_dtim_period = ie->tim_period;
+ }
+ /*
+ * Record the byte offset from the mac header to
+ * the start of the TIM information element for
+ * use by hardware and/or to speedup software
+ * processing of beacon frames.
+ */
+ in->in_tim_off = sp->timoff;
+
+ /* NB: must be after in_chan is setup */
+ (void) ieee80211_setup_rates(in, sp->rates, sp->xrates,
+ IEEE80211_F_DOSORT);
+
+ if (!newnode)
+ ieee80211_free_node(in);
+}
+
+/*
+ * Initialize/update an ad-hoc node with contents from a received
+ * beacon frame.
+ */
+void
+ieee80211_init_neighbor(ieee80211_node_t *in, const struct ieee80211_frame *wh,
+ const struct ieee80211_scanparams *sp)
+{
+ in->in_esslen = sp->ssid[1];
+ (void) memcpy(in->in_essid, sp->ssid + 2, sp->ssid[1]);
+ IEEE80211_ADDR_COPY(in->in_bssid, wh->i_addr3);
+ (void) memcpy(in->in_tstamp.data, sp->tstamp, sizeof (in->in_tstamp));
+ in->in_intval = sp->bintval;
+ in->in_capinfo = sp->capinfo;
+ in->in_chan = in->in_ic->ic_curchan;
+ in->in_fhdwell = sp->fhdwell;
+ in->in_fhindex = sp->fhindex;
+ in->in_erp = sp->erp;
+ in->in_tim_off = sp->timoff;
+
+ /* NB: must be after in_chan is setup */
+ (void) ieee80211_setup_rates(in, sp->rates, sp->xrates,
+ IEEE80211_F_DOSORT);
+}
+
+/*
+ * Do node discovery in adhoc mode on receipt of a beacon
+ * or probe response frame. Note that for the driver's
+ * benefit we we treat this like an association so the
+ * driver has an opportuinty to setup it's private state.
+ */
+ieee80211_node_t *
+ieee80211_add_neighbor(ieee80211com_t *ic, const struct ieee80211_frame *wh,
+ const struct ieee80211_scanparams *sp)
+{
+ ieee80211_node_t *in;
+
+ in = ieee80211_dup_bss(&ic->ic_sta, wh->i_addr2);
+ if (in != NULL) {
+ ieee80211_init_neighbor(in, wh, sp);
+ if (ic->ic_node_newassoc != NULL)
+ ic->ic_node_newassoc(in, 1);
+ }
+ return (in);
+}
+
+#define IEEE80211_IS_CTL(wh) \
+ ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_CTL)
+
+/*
+ * Locate the node for sender, track state, and then pass the
+ * (referenced) node up to the 802.11 layer for its use. We
+ * are required to pass some node so we fall back to ic_bss
+ * when this frame is from an unknown sender. The 802.11 layer
+ * knows this means the sender wasn't in the node table and
+ * acts accordingly.
+ */
+ieee80211_node_t *
+ieee80211_find_rxnode(ieee80211com_t *ic, const struct ieee80211_frame *wh)
+{
+ ieee80211_node_table_t *nt;
+ ieee80211_node_t *in;
+
+ /* may want scanned nodes in the neighbor table for adhoc */
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ (ic->ic_flags & IEEE80211_F_SCAN)) {
+ nt = &ic->ic_scan;
+ } else {
+ nt = &ic->ic_sta;
+ }
+
+ IEEE80211_NODE_LOCK(nt);
+ if (IEEE80211_IS_CTL(wh))
+ in = ieee80211_find_node_locked(nt, wh->i_addr1);
+ else
+ in = ieee80211_find_node_locked(nt, wh->i_addr2);
+ IEEE80211_NODE_UNLOCK(nt);
+
+ if (in == NULL)
+ in = ieee80211_ref_node(ic->ic_bss);
+
+ return (in);
+}
+
+/*
+ * Return a reference to the appropriate node for sending
+ * a data frame. This handles node discovery in adhoc networks.
+ */
+ieee80211_node_t *
+ieee80211_find_txnode(ieee80211com_t *ic, const uint8_t *daddr)
+{
+ ieee80211_node_table_t *nt = &ic->ic_sta;
+ ieee80211_node_t *in;
+
+ /*
+ * The destination address should be in the node table
+ * unless this is a multicast/broadcast frame. We can
+ * also optimize station mode operation, all frames go
+ * to the bss node.
+ */
+ IEEE80211_NODE_LOCK(nt);
+ if (ic->ic_opmode == IEEE80211_M_STA || IEEE80211_IS_MULTICAST(daddr))
+ in = ieee80211_ref_node(ic->ic_bss);
+ else
+ in = ieee80211_find_node_locked(nt, daddr);
+ IEEE80211_NODE_UNLOCK(nt);
+
+ if (in == NULL) {
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ /*
+ * In adhoc mode cons up a node for the destination.
+ * Note that we need an additional reference for the
+ * caller to be consistent with
+ * ieee80211_find_node_locked
+ * can't hold lock across ieee80211_dup_bss 'cuz of
+ * recursive locking
+ */
+ in = ieee80211_fakeup_adhoc_node(nt, daddr);
+ if (in != NULL)
+ (void) ieee80211_ref_node(in);
+ } else {
+ ieee80211_dbg(IEEE80211_MSG_OUTPUT,
+ "ieee80211_find_txnode: "
+ "[%s] no node, discard frame\n",
+ ieee80211_macaddr_sprintf(daddr));
+ }
+ }
+ return (in);
+}
+
+/*
+ * Remove a node from the node database entries and free memory
+ * associated with the node. The node table lock is acquired by
+ * the caller.
+ */
+static void
+ieee80211_free_node_locked(ieee80211_node_t *in)
+{
+ ieee80211com_t *ic = in->in_ic;
+ ieee80211_node_table_t *nt = in->in_table;
+ int32_t hash;
+
+ if (nt != NULL) {
+ hash = ieee80211_node_hash(in->in_macaddr);
+ list_remove(&nt->nt_hash[hash], in);
+ list_remove(&nt->nt_node, in);
+ }
+ ic->ic_node_free(in);
+}
+
+/*
+ * Remove a node from the node database entries and free any
+ * memory associated with the node.
+ * This method can be overridden in ieee80211_attach()
+ */
+void
+ieee80211_free_node(ieee80211_node_t *in)
+{
+ ieee80211_node_table_t *nt = in->in_table;
+
+ if (nt != NULL)
+ IEEE80211_NODE_LOCK(nt);
+ if (ieee80211_node_decref_nv(in) == 0)
+ ieee80211_free_node_locked(in);
+ if (nt != NULL)
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Reclaim a node. If this is the last reference count then
+ * do the normal free work. Otherwise remove it from the node
+ * table and mark it gone by clearing the back-reference.
+ */
+static void
+ieee80211_node_reclaim(ieee80211_node_table_t *nt, ieee80211_node_t *in)
+{
+ int32_t hash;
+
+ IEEE80211_NODE_LOCK_ASSERT(nt);
+ ieee80211_dbg(IEEE80211_MSG_NODE, "node_reclaim: "
+ " remove %p<%s> from %s table, refcnt %d\n",
+ in, ieee80211_macaddr_sprintf(in->in_macaddr), nt->nt_name,
+ ieee80211_node_refcnt(in));
+
+ if (ieee80211_node_decref_nv(in) != 0) {
+ /*
+ * Clear any entry in the unicast key mapping table.
+ * We need to do it here so rx lookups don't find it
+ * in the mapping table even if it's not in the hash
+ * table. We cannot depend on the mapping table entry
+ * being cleared because the node may not be free'd.
+ */
+ hash = ieee80211_node_hash(in->in_macaddr);
+ list_remove(&nt->nt_hash[hash], in);
+ list_remove(&nt->nt_node, in);
+ in->in_table = NULL;
+ } else {
+ ieee80211_free_node_locked(in);
+ }
+}
+
+/*
+ * Iterate through the node list and reclaim all node in the node table.
+ * The node table lock is acquired by the caller
+ */
+static void
+ieee80211_free_allnodes_locked(ieee80211_node_table_t *nt)
+{
+ ieee80211_node_t *in;
+
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_free_allnodes_locked(): "
+ "free all nodes in %s table\n", nt->nt_name);
+
+ in = list_head(&nt->nt_node);
+ while (in != NULL) {
+ ieee80211_node_reclaim(nt, in);
+ in = list_head(&nt->nt_node);
+ }
+ ieee80211_reset_erp(nt->nt_ic);
+}
+
+/*
+ * Iterate through the node list, calling ieee80211_node_reclaim() for
+ * all nodes associated with the interface.
+ */
+static void
+ieee80211_free_allnodes(ieee80211_node_table_t *nt)
+{
+ IEEE80211_NODE_LOCK(nt);
+ ieee80211_free_allnodes_locked(nt);
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Timeout entries in the scan cache. This is the timeout callback
+ * function of node table ic_scan which is called when the inactivity
+ * timer expires.
+ */
+static void
+ieee80211_timeout_scan_candidates(ieee80211_node_table_t *nt)
+{
+ ieee80211com_t *ic = nt->nt_ic;
+ ieee80211_node_t *in;
+
+ IEEE80211_NODE_LOCK(nt);
+ in = ic->ic_bss;
+ node_cleanfrag(in); /* Free fragment if not needed */
+ nt->nt_inact_timer = IEEE80211_INACT_WAIT;
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Timeout inactive stations and do related housekeeping.
+ * Note that we cannot hold the node lock while sending a
+ * frame as this would lead to a LOR. Instead we use a
+ * generation number to mark nodes that we've scanned and
+ * drop the lock and restart a scan if we have to time out
+ * a node. Since we are single-threaded by virtue of
+ * controlling the inactivity timer we can be sure this will
+ * process each node only once.
+ */
+static void
+ieee80211_timeout_stations(ieee80211_node_table_t *nt)
+{
+ ieee80211com_t *ic = nt->nt_ic;
+ ieee80211_impl_t *im = ic->ic_private;
+ ieee80211_node_t *in = NULL;
+ uint32_t gen;
+ boolean_t isadhoc;
+
+ IEEE80211_LOCK_ASSERT(ic);
+ isadhoc = (ic->ic_opmode == IEEE80211_M_IBSS ||
+ ic->ic_opmode == IEEE80211_M_AHDEMO);
+ IEEE80211_SCAN_LOCK(nt);
+ gen = ++nt->nt_scangen;
+restart:
+ IEEE80211_NODE_LOCK(nt);
+ for (in = list_head(&nt->nt_node); in != NULL;
+ in = list_next(&nt->nt_node, in)) {
+ if (in->in_scangen == gen) /* previously handled */
+ continue;
+ in->in_scangen = gen;
+ node_cleanfrag(in); /* free fragment if not needed */
+
+ /*
+ * Special case ourself; we may be idle for extended periods
+ * of time and regardless reclaiming our state is wrong.
+ */
+ if (in == ic->ic_bss)
+ continue;
+ in->in_inact--;
+ if (in->in_associd != 0 || isadhoc) {
+ /*
+ * Probe the station before time it out. We
+ * send a null data frame which may not be
+ * uinversally supported by drivers (need it
+ * for ps-poll support so it should be...).
+ */
+ if (0 < in->in_inact &&
+ in->in_inact <= im->im_inact_probe) {
+ ieee80211_dbg(IEEE80211_MSG_NODE, "net80211: "
+ "probe station due to inactivity\n");
+ IEEE80211_NODE_UNLOCK(nt);
+ IEEE80211_UNLOCK(ic);
+ (void) ieee80211_send_nulldata(in);
+ IEEE80211_LOCK(ic);
+ goto restart;
+ }
+ }
+ if (in->in_inact <= 0) {
+ ieee80211_dbg(IEEE80211_MSG_NODE, "net80211: "
+ "station timed out due to inact (refcnt %u)\n",
+ ieee80211_node_refcnt(in));
+ /*
+ * Send a deauthenticate frame and drop the station.
+ * This is somewhat complicated due to reference counts
+ * and locking. At this point a station will typically
+ * have a reference count of 1. ieee80211_node_leave
+ * will do a "free" of the node which will drop the
+ * reference count. But in the meantime a reference
+ * wil be held by the deauth frame. The actual reclaim
+ * of the node will happen either after the tx is
+ * completed or by ieee80211_node_leave.
+ *
+ * Separately we must drop the node lock before sending
+ * in case the driver takes a lock, as this will result
+ * in LOR between the node lock and the driver lock.
+ */
+ IEEE80211_NODE_UNLOCK(nt);
+ if (in->in_associd != 0) {
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_DEAUTH,
+ IEEE80211_REASON_AUTH_EXPIRE);
+ IEEE80211_LOCK(ic);
+ }
+ ieee80211_node_leave(ic, in);
+ goto restart;
+ }
+ }
+ IEEE80211_NODE_UNLOCK(nt);
+
+ IEEE80211_SCAN_UNLOCK(nt);
+
+ nt->nt_inact_timer = IEEE80211_INACT_WAIT;
+}
+
+/*
+ * Call the user-defined call back function for all nodes in
+ * the node cache. The callback is invoked with the user-supplied
+ * value and a pointer to the current node.
+ */
+void
+ieee80211_iterate_nodes(ieee80211_node_table_t *nt, ieee80211_iter_func *f,
+ void *arg)
+{
+ ieee80211_node_t *in;
+
+ IEEE80211_NODE_LOCK(nt);
+ in = list_head(&nt->nt_node);
+ while (in != NULL) {
+ (void) ieee80211_ref_node(in);
+ IEEE80211_NODE_UNLOCK(nt);
+ (*f)(arg, in);
+ ieee80211_free_node(in);
+ IEEE80211_NODE_LOCK(nt);
+ in = list_next(&nt->nt_node, in);
+ }
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Handle bookkeeping for station deauthentication/disassociation
+ * when operating as an ap.
+ */
+static void
+ieee80211_node_leave(ieee80211com_t *ic, ieee80211_node_t *in)
+{
+ ieee80211_node_table_t *nt = in->in_table;
+
+ ASSERT(ic->ic_opmode == IEEE80211_M_IBSS);
+
+ /*
+ * Remove the node from any table it's recorded in and
+ * drop the caller's reference. Removal from the table
+ * is important to insure the node is not reprocessed
+ * for inactivity.
+ */
+ if (nt != NULL) {
+ IEEE80211_NODE_LOCK(nt);
+ ieee80211_node_reclaim(nt, in);
+ IEEE80211_NODE_UNLOCK(nt);
+ } else {
+ ieee80211_free_node(in);
+ }
+}
+
+/*
+ * Initialize a node table with specified name, inactivity timer value
+ * and callback inactivity timeout function. Associate the node table
+ * with interface softc, ic.
+ */
+static void
+ieee80211_node_table_init(ieee80211com_t *ic, ieee80211_node_table_t *nt,
+ const char *name, int inact, int keyixmax,
+ void (*timeout)(ieee80211_node_table_t *))
+{
+ int i;
+
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_node_table_init():"
+ "%s table, inact %d\n", name, inact);
+
+ nt->nt_ic = ic;
+ nt->nt_name = name;
+ nt->nt_inact_timer = 0;
+ nt->nt_inact_init = inact;
+ nt->nt_timeout = timeout;
+ nt->nt_keyixmax = keyixmax;
+ nt->nt_scangen = 1;
+ mutex_init(&nt->nt_scanlock, NULL, MUTEX_DRIVER, NULL);
+ mutex_init(&nt->nt_nodelock, NULL, MUTEX_DRIVER, NULL);
+
+ list_create(&nt->nt_node, sizeof (ieee80211_node_t),
+ offsetof(ieee80211_node_t, in_node));
+ for (i = 0; i < IEEE80211_NODE_HASHSIZE; i++) {
+ list_create(&nt->nt_hash[i], sizeof (ieee80211_node_t),
+ offsetof(ieee80211_node_t, in_hash));
+ }
+}
+
+/*
+ * Reset a node table. Clean its inactivity timer and call
+ * ieee80211_free_allnodes_locked() to free all nodes in the
+ * node table.
+ */
+void
+ieee80211_node_table_reset(ieee80211_node_table_t *nt)
+{
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_node_table_reset(): "
+ "%s table\n", nt->nt_name);
+
+ IEEE80211_NODE_LOCK(nt);
+ nt->nt_inact_timer = 0;
+ ieee80211_free_allnodes_locked(nt);
+ IEEE80211_NODE_UNLOCK(nt);
+}
+
+/*
+ * Destroy a node table. Free all nodes in the node table.
+ * This function is usually called by node detach function.
+ */
+static void
+ieee80211_node_table_cleanup(ieee80211_node_table_t *nt)
+{
+ ieee80211_dbg(IEEE80211_MSG_NODE, "ieee80211_node_table_cleanup(): "
+ "%s table\n", nt->nt_name);
+
+ IEEE80211_NODE_LOCK(nt);
+ ieee80211_free_allnodes_locked(nt);
+ IEEE80211_NODE_UNLOCK(nt);
+ mutex_destroy(&nt->nt_nodelock);
+ mutex_destroy(&nt->nt_scanlock);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_output.c b/usr/src/uts/common/io/net80211/net80211_output.c
new file mode 100644
index 0000000000..ca04fb0b4e
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_output.c
@@ -0,0 +1,723 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+
+/*
+ * Send out 802.11 frames
+ */
+
+#include <sys/byteorder.h>
+#include <sys/strsun.h>
+#include "net80211_impl.h"
+
+/*
+ * Set the direction field and address fields of an outgoing
+ * non-QoS frame. Note this should be called early on in
+ * constructing a frame as it sets i_fc[1]; other bits can
+ * then be or'd in.
+ */
+static void
+ieee80211_send_setup(ieee80211com_t *ic, ieee80211_node_t *in,
+ struct ieee80211_frame *wh, int type, const uint8_t *sa, const uint8_t *da,
+ const uint8_t *bssid)
+{
+ wh->i_fc[0] = (uint8_t)(IEEE80211_FC0_VERSION_0 | type);
+ if ((type & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_DATA) {
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_TODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, bssid);
+ IEEE80211_ADDR_COPY(wh->i_addr2, sa);
+ IEEE80211_ADDR_COPY(wh->i_addr3, da);
+ break;
+ case IEEE80211_M_IBSS:
+ case IEEE80211_M_AHDEMO:
+ wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, da);
+ IEEE80211_ADDR_COPY(wh->i_addr2, sa);
+ IEEE80211_ADDR_COPY(wh->i_addr3, bssid);
+ break;
+ default:
+ ieee80211_err("ieee80211_send_setup: "
+ "Invalid mode %u\n", ic->ic_opmode);
+ return;
+ }
+ } else {
+ wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
+ IEEE80211_ADDR_COPY(wh->i_addr1, da);
+ IEEE80211_ADDR_COPY(wh->i_addr2, sa);
+ IEEE80211_ADDR_COPY(wh->i_addr3, bssid);
+ }
+ *(uint16_t *)&wh->i_dur[0] = 0; /* set duration */
+ *(uint16_t *)&wh->i_seq[0] = /* set sequence number */
+ LE_16(in->in_txseqs[0] << IEEE80211_SEQ_SEQ_SHIFT);
+ in->in_txseqs[0]++; /* increase sequence number by 1 */
+}
+
+/*
+ * Send a management frame to the specified node. The node pointer
+ * must have a reference as the pointer will be passed to the driver
+ * and potentially held for a long time. If the frame is successfully
+ * dispatched to the driver, then it is responsible for freeing the
+ * reference (and potentially free'ing up any associated storage).
+ *
+ * Return 0 on success
+ */
+static int
+ieee80211_mgmt_output(ieee80211com_t *ic, ieee80211_node_t *in, mblk_t *mp,
+ int type, int timer)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+ struct ieee80211_frame *wh;
+
+ ASSERT(in != NULL);
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ ieee80211_send_setup(ic, in, wh, IEEE80211_FC0_TYPE_MGT | type,
+ ic->ic_macaddr, in->in_macaddr, in->in_bssid);
+ if (in->in_challenge != NULL)
+ wh->i_fc[1] |= IEEE80211_FC1_WEP;
+
+ if (timer > 0) {
+ /*
+ * Set the mgt frame timeout.
+ */
+ im->im_mgt_timer = timer;
+ ieee80211_start_watchdog(ic, 1);
+ }
+ return ((*ic->ic_xmit)(ic, mp, IEEE80211_FC0_TYPE_MGT));
+}
+
+/*
+ * Send a null data frame to the specified node.
+ *
+ * NB: the caller is assumed to have setup a node reference
+ * for use; this is necessary to deal with a race condition
+ * when probing for inactive stations.
+ */
+int
+ieee80211_send_nulldata(ieee80211_node_t *in)
+{
+ ieee80211com_t *ic = in->in_ic;
+ mblk_t *m;
+ struct ieee80211_frame *wh;
+ uint8_t *frm;
+
+ m = ieee80211_getmgtframe(&frm, 0);
+ if (m == NULL) {
+ ic->ic_stats.is_tx_nobuf++;
+ return (ENOMEM);
+ }
+
+ wh = (struct ieee80211_frame *)m->b_rptr;
+ ieee80211_send_setup(ic, in, wh,
+ IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_NODATA,
+ ic->ic_macaddr, in->in_macaddr, in->in_bssid);
+ /* NB: power management bit is never sent by an AP */
+ if ((in->in_flags & IEEE80211_NODE_PWR_MGT) &&
+ ic->ic_opmode != IEEE80211_M_HOSTAP)
+ wh->i_fc[1] |= IEEE80211_FC1_PWR_MGT;
+ m->b_wptr = m->b_rptr + sizeof (struct ieee80211_frame);
+
+ ieee80211_dbg(IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS, "net80211: "
+ "send null data frame on channel %u, pwr mgt %s\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr),
+ ieee80211_chan2ieee(ic, ic->ic_curchan),
+ wh->i_fc[1] & IEEE80211_FC1_PWR_MGT ? "ena" : "dis");
+
+ (void) (*ic->ic_xmit)(ic, m, IEEE80211_FC0_TYPE_MGT);
+
+ return (0);
+}
+
+/*
+ * Encapsulate an outbound data frame for GLDv3 based driver.
+ * Fill in the variable part of the 80211 frame
+ */
+/* ARGSUSED */
+mblk_t *
+ieee80211_encap(ieee80211com_t *ic, mblk_t *mp, ieee80211_node_t *in)
+{
+ struct ieee80211_frame *wh;
+
+ ASSERT(mp != NULL && MBLKL(mp) >= sizeof (struct ieee80211_frame));
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ *(uint16_t *)wh->i_dur = 0;
+ *(uint16_t *)wh->i_seq =
+ LE_16(in->in_txseqs[0] << IEEE80211_SEQ_SEQ_SHIFT);
+ in->in_txseqs[0]++;
+
+ return (mp);
+}
+
+/*
+ * Add supported rates information element to a frame.
+ */
+static uint8_t *
+ieee80211_add_rates(uint8_t *frm, const struct ieee80211_rateset *rs)
+{
+ uint8_t nrates;
+
+ *frm++ = IEEE80211_ELEMID_RATES;
+ nrates = rs->ir_nrates;
+ if (nrates > IEEE80211_RATE_SIZE)
+ nrates = IEEE80211_RATE_SIZE;
+ *frm++ = nrates;
+ bcopy(rs->ir_rates, frm, nrates);
+ return (frm + nrates);
+}
+
+/*
+ * Add extended supported rates element to a frame, usually for 11g mode
+ */
+static uint8_t *
+ieee80211_add_xrates(uint8_t *frm, const struct ieee80211_rateset *rs)
+{
+ if (rs->ir_nrates > IEEE80211_RATE_SIZE) {
+ uint8_t nrates = rs->ir_nrates - IEEE80211_RATE_SIZE;
+
+ *frm++ = IEEE80211_ELEMID_XRATES;
+ *frm++ = nrates;
+ bcopy(rs->ir_rates + IEEE80211_RATE_SIZE, frm, nrates);
+ frm += nrates;
+ }
+ return (frm);
+}
+
+/*
+ * Add SSID element to a frame
+ */
+static uint8_t *
+ieee80211_add_ssid(uint8_t *frm, const uint8_t *ssid, uint32_t len)
+{
+ *frm++ = IEEE80211_ELEMID_SSID;
+ *frm++ = (uint8_t)len;
+ bcopy(ssid, frm, len);
+ return (frm + len);
+}
+
+/*
+ * Add an erp element to a frame.
+ */
+static uint8_t *
+ieee80211_add_erp(uint8_t *frm, ieee80211com_t *ic)
+{
+ uint8_t erp;
+
+ *frm++ = IEEE80211_ELEMID_ERP;
+ *frm++ = 1;
+ erp = 0;
+ if (ic->ic_flags & IEEE80211_F_USEPROT)
+ erp |= IEEE80211_ERP_USE_PROTECTION;
+ if (ic->ic_flags & IEEE80211_F_USEBARKER)
+ erp |= IEEE80211_ERP_LONG_PREAMBLE;
+ *frm++ = erp;
+ return (frm);
+}
+
+/*
+ * Get capability information from the interface softc, ic.
+ */
+static uint16_t
+ieee80211_get_capinfo(ieee80211com_t *ic)
+{
+ uint16_t capinfo;
+
+ if (ic->ic_opmode == IEEE80211_M_IBSS)
+ capinfo = IEEE80211_CAPINFO_IBSS;
+ else
+ capinfo = IEEE80211_CAPINFO_ESS;
+ if (ic->ic_flags & IEEE80211_F_PRIVACY)
+ capinfo |= IEEE80211_CAPINFO_PRIVACY;
+ if ((ic->ic_flags & IEEE80211_F_SHPREAMBLE) &&
+ IEEE80211_IS_CHAN_2GHZ(ic->ic_curchan)) {
+ capinfo |= IEEE80211_CAPINFO_SHORT_PREAMBLE;
+ }
+ if (ic->ic_flags & IEEE80211_F_SHSLOT)
+ capinfo |= IEEE80211_CAPINFO_SHORT_SLOTTIME;
+
+ return (capinfo);
+}
+
+/*
+ * Send a probe request frame with the specified ssid
+ * and any optional information element data.
+ */
+int
+ieee80211_send_probereq(ieee80211_node_t *in,
+ const uint8_t *sa, const uint8_t *da, const uint8_t *bssid,
+ const uint8_t *ssid, size_t ssidlen, const void *optie, size_t optielen)
+{
+ mblk_t *mp;
+ ieee80211com_t *ic = in->in_ic;
+ enum ieee80211_phymode mode;
+ struct ieee80211_frame *wh;
+ uint8_t *frm;
+
+ /*
+ * prreq frame format ([tlv] - 1 byte element ID + 1 byte length)
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ * [tlv] user-specified ie's
+ */
+ mp = ieee80211_getmgtframe(&frm,
+ 2 + IEEE80211_NWID_LEN
+ + 2 + IEEE80211_RATE_SIZE +
+ + 2 + IEEE80211_XRATE_SIZE
+ + optielen);
+ if (mp == NULL)
+ return (ENOMEM);
+
+ frm = ieee80211_add_ssid(frm, ssid, ssidlen);
+ mode = ieee80211_chan2mode(ic, ic->ic_curchan);
+ frm = ieee80211_add_rates(frm, &ic->ic_sup_rates[mode]);
+ frm = ieee80211_add_xrates(frm, &ic->ic_sup_rates[mode]);
+ if (optie != NULL) {
+ (void) memcpy(frm, optie, optielen);
+ frm += optielen;
+ }
+ mp->b_wptr = frm;
+
+ wh = (struct ieee80211_frame *)mp->b_rptr;
+ ieee80211_send_setup(ic, in, wh,
+ IEEE80211_FC0_TYPE_MGT | IEEE80211_FC0_SUBTYPE_PROBE_REQ,
+ sa, da, bssid);
+
+ ieee80211_dbg(IEEE80211_MSG_DEBUG | IEEE80211_MSG_DUMPPKTS,
+ "[%s] send probe req on channel %u\n",
+ ieee80211_macaddr_sprintf(wh->i_addr1),
+ ieee80211_chan2ieee(ic, ic->ic_curchan));
+
+ (void) (*ic->ic_xmit)(ic, mp, IEEE80211_FC0_TYPE_MGT);
+ return (0);
+}
+
+/*
+ * Send a management frame. The node is for the destination (or ic_bss
+ * when in station mode). Nodes other than ic_bss have their reference
+ * count bumped to reflect our use for an indeterminant time.
+ */
+int
+ieee80211_send_mgmt(ieee80211com_t *ic, ieee80211_node_t *in, int type, int arg)
+{
+ mblk_t *mp;
+ uint8_t *frm;
+ uint16_t capinfo;
+ struct ieee80211_key *key;
+ boolean_t has_challenge;
+ boolean_t is_shared_key;
+ int ret;
+ int timer;
+ int status;
+
+ ASSERT(in != NULL);
+
+ timer = 0;
+ switch (type) {
+ case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
+ /*
+ * probe response frame format
+ * [8] time stamp
+ * [2] beacon interval
+ * [2] capability information
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] parameter set (FH/DS)
+ * [tlv] parameter set (IBSS)
+ * [tlv] extended rate phy (ERP)
+ * [tlv] extended supported rates
+ * [tlv] WPA
+ * [tlv] WME (optional)
+ */
+ mp = ieee80211_getmgtframe(&frm,
+ 8 /* time stamp */
+ + sizeof (uint16_t) /* beacon interval */
+ + sizeof (uint16_t) /* capability */
+ + 2 + IEEE80211_NWID_LEN
+ + 2 + IEEE80211_RATE_SIZE
+ + 2 + IEEE80211_FH_LEN
+ + 2 + IEEE80211_IBSS_LEN
+ + 2 + IEEE80211_ERP_LEN
+ + 2 + IEEE80211_XRATE_SIZE
+ + (ic->ic_flags & IEEE80211_F_WPA ?
+ 2 * sizeof (struct ieee80211_ie_wpa) : 0)
+ /* [tlv] WPA */
+ + (ic->ic_flags & IEEE80211_F_WME ?
+ sizeof (struct ieee80211_wme_param) : 0));
+ /* [tlv] WME */
+ if (mp == NULL)
+ return (ENOMEM);
+
+ bzero(frm, 8); /* timestamp is set by hardware/driver */
+ frm += 8;
+ *(uint16_t *)frm = LE_16(in->in_intval);
+ frm += 2;
+ capinfo = ieee80211_get_capinfo(ic);
+ *(uint16_t *)frm = LE_16(capinfo);
+ frm += 2;
+
+ frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
+ frm = ieee80211_add_rates(frm, &in->in_rates);
+
+ if (ic->ic_phytype == IEEE80211_T_FH) {
+ *frm++ = IEEE80211_ELEMID_FHPARMS;
+ *frm++ = IEEE80211_FH_LEN;
+ *frm++ = in->in_fhdwell & 0x00ff;
+ *frm++ = (in->in_fhdwell >> 8) & 0x00ff;
+ *frm++ = IEEE80211_FH_CHANSET(
+ ieee80211_chan2ieee(ic, ic->ic_curchan));
+ *frm++ = IEEE80211_FH_CHANPAT(
+ ieee80211_chan2ieee(ic, ic->ic_curchan));
+ *frm++ = in->in_fhindex;
+ } else {
+ *frm++ = IEEE80211_ELEMID_DSPARMS;
+ *frm++ = IEEE80211_DS_LEN;
+ *frm++ = ieee80211_chan2ieee(ic, ic->ic_curchan);
+ }
+
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ *frm++ = IEEE80211_ELEMID_IBSSPARMS;
+ *frm++ = IEEE80211_IBSS_LEN;
+ *frm++ = 0; *frm++ = 0; /* ATIM window */
+ }
+ frm = ieee80211_add_xrates(frm, &in->in_rates);
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_AUTH:
+ status = arg >> 16;
+ arg &= 0xffff;
+ has_challenge = ((arg == IEEE80211_AUTH_SHARED_CHALLENGE ||
+ arg == IEEE80211_AUTH_SHARED_RESPONSE) &&
+ in->in_challenge != NULL);
+
+ /*
+ * Deduce whether we're doing open authentication or
+ * shared key authentication. We do the latter if
+ * we're in the middle of a shared key authentication
+ * handshake or if we're initiating an authentication
+ * request and configured to use shared key.
+ */
+ is_shared_key = has_challenge ||
+ arg >= IEEE80211_AUTH_SHARED_RESPONSE ||
+ (arg == IEEE80211_AUTH_SHARED_REQUEST &&
+ ic->ic_bss->in_authmode == IEEE80211_AUTH_SHARED);
+
+ if (has_challenge && status == IEEE80211_STATUS_SUCCESS)
+ key = ieee80211_crypto_getkey(ic);
+ else
+ key = NULL;
+
+ mp = ieee80211_getmgtframe(&frm,
+ 3 * sizeof (uint16_t)
+ + (has_challenge && status == IEEE80211_STATUS_SUCCESS ?
+ sizeof (uint16_t) + IEEE80211_CHALLENGE_LEN : 0)
+ + (key != NULL ? key->wk_cipher->ic_header : 0));
+ if (mp == NULL)
+ return (ENOMEM);
+
+ if (key != NULL)
+ frm += key->wk_cipher->ic_header;
+
+ ((uint16_t *)frm)[0] =
+ (is_shared_key) ? LE_16(IEEE80211_AUTH_ALG_SHARED)
+ : LE_16(IEEE80211_AUTH_ALG_OPEN);
+ ((uint16_t *)frm)[1] = LE_16(arg); /* sequence number */
+ ((uint16_t *)frm)[2] = LE_16(status); /* status */
+
+ if (has_challenge && status == IEEE80211_STATUS_SUCCESS) {
+ frm += IEEE80211_AUTH_ELEM_MIN;
+ *frm = IEEE80211_ELEMID_CHALLENGE;
+ frm++;
+ *frm = IEEE80211_CHALLENGE_LEN;
+ frm++;
+ bcopy(in->in_challenge, frm, IEEE80211_CHALLENGE_LEN);
+ }
+
+ if (ic->ic_opmode == IEEE80211_M_STA)
+ timer = IEEE80211_TRANS_WAIT;
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ mp = ieee80211_getmgtframe(&frm, sizeof (uint16_t));
+ if (mp == NULL)
+ return (ENOMEM);
+
+ *(uint16_t *)frm = LE_16(arg); /* reason */
+
+ ieee80211_node_unauthorize(in); /* port closed */
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_ASSOC_REQ:
+ case IEEE80211_FC0_SUBTYPE_REASSOC_REQ:
+ /*
+ * asreq frame format
+ * [2] capability information
+ * [2] listen interval
+ * [6*] current AP address (reassoc only)
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ * [tlv] WME
+ * [tlv] user-specified ie's
+ */
+ mp = ieee80211_getmgtframe(&frm,
+ sizeof (uint16_t)
+ + sizeof (uint16_t) + IEEE80211_ADDR_LEN
+ + 2 + IEEE80211_NWID_LEN
+ + 2 + IEEE80211_RATE_SIZE
+ + 2 + IEEE80211_XRATE_SIZE
+ + ic->ic_opt_ie_len);
+ if (mp == NULL)
+ return (ENOMEM);
+
+ capinfo = ieee80211_get_capinfo(ic);
+ if (!(in->in_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) ||
+ !(ic->ic_caps & IEEE80211_C_SHSLOT)) {
+ capinfo &= ~IEEE80211_CAPINFO_SHORT_SLOTTIME;
+ }
+ *(uint16_t *)frm = LE_16(capinfo);
+ frm += 2;
+
+ *(uint16_t *)frm = LE_16(ic->ic_lintval);
+ frm += 2;
+
+ if (type == IEEE80211_FC0_SUBTYPE_REASSOC_REQ) {
+ IEEE80211_ADDR_COPY(frm, ic->ic_bss->in_bssid);
+ frm += IEEE80211_ADDR_LEN;
+ }
+
+ frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
+ frm = ieee80211_add_rates(frm, &in->in_rates);
+ frm = ieee80211_add_xrates(frm, &in->in_rates);
+ if (ic->ic_opt_ie != NULL) {
+ bcopy(ic->ic_opt_ie, frm, ic->ic_opt_ie_len);
+ frm += ic->ic_opt_ie_len;
+ }
+ mp->b_wptr = frm; /* allocated is greater than used */
+
+ timer = IEEE80211_TRANS_WAIT;
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_ASSOC_RESP:
+ case IEEE80211_FC0_SUBTYPE_REASSOC_RESP:
+ /*
+ * asreq frame format
+ * [2] capability information
+ * [2] status
+ * [2] association ID
+ * [tlv] supported rates
+ * [tlv] extended supported rates
+ * [tlv] WME (if enabled and STA enabled)
+ */
+ mp = ieee80211_getmgtframe(&frm,
+ 3 * sizeof (uint16_t)
+ + 2 + IEEE80211_RATE_SIZE
+ + 2 + IEEE80211_XRATE_SIZE);
+ if (mp == NULL)
+ return (ENOMEM);
+
+ capinfo = ieee80211_get_capinfo(ic);
+ *(uint16_t *)frm = LE_16(capinfo);
+ frm += 2;
+
+ *(uint16_t *)frm = LE_16(arg); /* status */
+ frm += 2;
+
+ if (arg == IEEE80211_STATUS_SUCCESS)
+ *(uint16_t *)frm = LE_16(in->in_associd);
+ else
+ *(uint16_t *)frm = LE_16(0);
+ frm += 2;
+
+ frm = ieee80211_add_rates(frm, &in->in_rates);
+ frm = ieee80211_add_xrates(frm, &in->in_rates);
+ break;
+
+ case IEEE80211_FC0_SUBTYPE_DISASSOC:
+ mp = ieee80211_getmgtframe(&frm, sizeof (uint16_t));
+ if (mp == NULL)
+ return (ENOMEM);
+ *(uint16_t *)frm = LE_16(arg); /* reason */
+ break;
+
+ default:
+ ieee80211_dbg(IEEE80211_MSG_ANY,
+ "[%s] invalid mgmt frame type %u\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr), type);
+ return (EINVAL);
+ } /* type */
+ ret = ieee80211_mgmt_output(ic, in, mp, type, timer);
+ return (ret);
+}
+
+/*
+ * Allocate a beacon frame and fillin the appropriate bits.
+ */
+mblk_t *
+ieee80211_beacon_alloc(ieee80211com_t *ic, ieee80211_node_t *in,
+ struct ieee80211_beacon_offsets *bo)
+{
+ struct ieee80211_frame *wh;
+ struct ieee80211_rateset *rs;
+ mblk_t *m;
+ uint8_t *frm;
+ uint8_t *efrm;
+ int pktlen;
+ uint16_t capinfo;
+
+ IEEE80211_LOCK(ic);
+ /*
+ * beacon frame format
+ * [8] time stamp
+ * [2] beacon interval
+ * [2] cabability information
+ * [tlv] ssid
+ * [tlv] supported rates
+ * [3] parameter set (DS)
+ * [tlv] parameter set (IBSS/TIM)
+ * [tlv] extended rate phy (ERP)
+ * [tlv] extended supported rates
+ * [tlv] WME parameters
+ * [tlv] WPA/RSN parameters
+ * Vendor-specific OIDs (e.g. Atheros)
+ * NB: we allocate the max space required for the TIM bitmap.
+ */
+ rs = &in->in_rates;
+ pktlen = 8 /* time stamp */
+ + sizeof (uint16_t) /* beacon interval */
+ + sizeof (uint16_t) /* capabilities */
+ + 2 + in->in_esslen /* ssid */
+ + 2 + IEEE80211_RATE_SIZE /* supported rates */
+ + 2 + 1 /* DS parameters */
+ + 2 + 4 + ic->ic_tim_len /* DTIM/IBSSPARMS */
+ + 2 + 1 /* ERP */
+ + 2 + IEEE80211_XRATE_SIZE;
+ m = ieee80211_getmgtframe(&frm, pktlen);
+ if (m == NULL) {
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_beacon_alloc: "
+ "cannot get buf; size %u\n", pktlen);
+ IEEE80211_UNLOCK(ic);
+ return (NULL);
+ }
+
+ /* timestamp is set by hardware/driver */
+ (void) memset(frm, 0, 8);
+ frm += 8;
+ *(uint16_t *)frm = LE_16(in->in_intval);
+ frm += 2;
+ capinfo = ieee80211_get_capinfo(ic);
+ bo->bo_caps = (uint16_t *)frm;
+ *(uint16_t *)frm = LE_16(capinfo);
+ frm += 2;
+ *frm++ = IEEE80211_ELEMID_SSID;
+ if (!(ic->ic_flags & IEEE80211_F_HIDESSID)) {
+ *frm++ = in->in_esslen;
+ bcopy(in->in_essid, frm, in->in_esslen);
+ frm += in->in_esslen;
+ } else {
+ *frm++ = 0;
+ }
+ frm = ieee80211_add_rates(frm, rs);
+ if (ic->ic_curmode != IEEE80211_MODE_FH) {
+ *frm++ = IEEE80211_ELEMID_DSPARMS;
+ *frm++ = 1;
+ *frm++ = ieee80211_chan2ieee(ic, in->in_chan);
+ }
+ bo->bo_tim = frm;
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ *frm++ = IEEE80211_ELEMID_IBSSPARMS;
+ *frm++ = 2;
+ *frm++ = 0; *frm++ = 0; /* TODO: ATIM window */
+ bo->bo_tim_len = 0;
+ } else {
+ struct ieee80211_tim_ie *tie =
+ (struct ieee80211_tim_ie *)frm;
+
+ tie->tim_ie = IEEE80211_ELEMID_TIM;
+ tie->tim_len = 4; /* length */
+ tie->tim_count = 0; /* DTIM count */
+ tie->tim_period = IEEE80211_DTIM_DEFAULT;
+ tie->tim_bitctl = 0; /* bitmap control */
+ tie->tim_bitmap[0] = 0; /* Partial Virtual Bitmap */
+ frm += sizeof (struct ieee80211_tim_ie);
+ bo->bo_tim_len = 1;
+ }
+ bo->bo_trailer = frm;
+
+ if (ic->ic_curmode == IEEE80211_MODE_11G) {
+ bo->bo_erp = frm;
+ frm = ieee80211_add_erp(frm, ic);
+ }
+ efrm = ieee80211_add_xrates(frm, rs);
+ bo->bo_trailer_len = efrm - bo->bo_trailer;
+ m->b_wptr = efrm;
+
+ wh = (struct ieee80211_frame *)m->b_rptr;
+ wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_MGT |
+ IEEE80211_FC0_SUBTYPE_BEACON;
+ wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;
+ *(uint16_t *)wh->i_dur = 0;
+ IEEE80211_ADDR_COPY(wh->i_addr1, wifi_bcastaddr);
+ IEEE80211_ADDR_COPY(wh->i_addr2, ic->ic_macaddr);
+ IEEE80211_ADDR_COPY(wh->i_addr3, in->in_bssid);
+ *(uint16_t *)wh->i_seq = 0;
+
+ IEEE80211_UNLOCK(ic);
+ return (m);
+}
+
+/*
+ * Update the dynamic parts of a beacon frame based on the current state.
+ */
+/* ARGSUSED */
+int
+ieee80211_beacon_update(ieee80211com_t *ic, ieee80211_node_t *in,
+ struct ieee80211_beacon_offsets *bo, mblk_t *mp, int mcast)
+{
+ uint16_t capinfo;
+
+ IEEE80211_LOCK(ic);
+
+ capinfo = ieee80211_get_capinfo(ic);
+ *bo->bo_caps = LE_16(capinfo);
+
+ IEEE80211_UNLOCK(ic);
+ return (0);
+}
diff --git a/usr/src/uts/common/io/net80211/net80211_proto.c b/usr/src/uts/common/io/net80211/net80211_proto.c
new file mode 100644
index 0000000000..0f92262d5c
--- /dev/null
+++ b/usr/src/uts/common/io/net80211/net80211_proto.c
@@ -0,0 +1,669 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * IEEE 802.11 protocol support
+ */
+
+#include "net80211_impl.h"
+
+const char *ieee80211_mgt_subtype_name[] = {
+ "assoc_req", "assoc_resp", "reassoc_req", "reassoc_resp",
+ "probe_req", "probe_resp", "reserved#6", "reserved#7",
+ "beacon", "atim", "disassoc", "auth",
+ "deauth", "reserved#13", "reserved#14", "reserved#15"
+};
+const char *ieee80211_ctl_subtype_name[] = {
+ "reserved#0", "reserved#1", "reserved#2", "reserved#3",
+ "reserved#3", "reserved#5", "reserved#6", "reserved#7",
+ "reserved#8", "reserved#9", "ps_poll", "rts",
+ "cts", "ack", "cf_end", "cf_end_ack"
+};
+const char *ieee80211_state_name[IEEE80211_S_MAX] = {
+ "INIT", /* IEEE80211_S_INIT */
+ "SCAN", /* IEEE80211_S_SCAN */
+ "AUTH", /* IEEE80211_S_AUTH */
+ "ASSOC", /* IEEE80211_S_ASSOC */
+ "RUN" /* IEEE80211_S_RUN */
+};
+
+static int ieee80211_newstate(ieee80211com_t *, enum ieee80211_state, int);
+
+/*
+ * Initialize the interface softc, ic, with protocol management
+ * related data structures and functions.
+ */
+void
+ieee80211_proto_attach(ieee80211com_t *ic)
+{
+ struct ieee80211_impl *im = ic->ic_private;
+
+ ic->ic_rtsthreshold = IEEE80211_RTS_DEFAULT;
+ ic->ic_fragthreshold = IEEE80211_FRAG_DEFAULT;
+ ic->ic_fixed_rate = IEEE80211_FIXED_RATE_NONE;
+ ic->ic_mcast_rate = IEEE80211_MCAST_RATE_DEFAULT;
+ ic->ic_protmode = IEEE80211_PROT_CTSONLY;
+ im->im_bmiss_max = IEEE80211_BMISS_MAX;
+
+ /* protocol state change handler */
+ ic->ic_newstate = ieee80211_newstate;
+
+ /* initialize management frame handlers */
+ ic->ic_recv_mgmt = ieee80211_recv_mgmt;
+ ic->ic_send_mgmt = ieee80211_send_mgmt;
+}
+
+/*
+ * Print a 802.11 frame header
+ */
+void
+ieee80211_dump_pkt(const uint8_t *buf, int32_t len, int32_t rate, int32_t rssi)
+{
+ struct ieee80211_frame *wh;
+ int8_t buf1[100];
+ int8_t buf2[25];
+ int i;
+
+ bzero(buf1, sizeof (buf1));
+ bzero(buf2, sizeof (buf2));
+ wh = (struct ieee80211_frame *)buf;
+ switch (wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) {
+ case IEEE80211_FC1_DIR_NODS:
+ (void) snprintf(buf2, sizeof (buf2), "NODS %s",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s",
+ ieee80211_macaddr_sprintf(wh->i_addr1));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "(%s)",
+ ieee80211_macaddr_sprintf(wh->i_addr3));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ break;
+ case IEEE80211_FC1_DIR_TODS:
+ (void) snprintf(buf2, sizeof (buf2), "TODS %s",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s",
+ ieee80211_macaddr_sprintf(wh->i_addr3));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "(%s)",
+ ieee80211_macaddr_sprintf(wh->i_addr1));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ break;
+ case IEEE80211_FC1_DIR_FROMDS:
+ (void) snprintf(buf2, sizeof (buf2), "FRDS %s",
+ ieee80211_macaddr_sprintf(wh->i_addr3));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s",
+ ieee80211_macaddr_sprintf(wh->i_addr1));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "(%s)",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ break;
+ case IEEE80211_FC1_DIR_DSTODS:
+ (void) snprintf(buf2, sizeof (buf2), "DSDS %s",
+ ieee80211_macaddr_sprintf((uint8_t *)&wh[1]));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s ",
+ ieee80211_macaddr_sprintf(wh->i_addr3));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "%s",
+ ieee80211_macaddr_sprintf(wh->i_addr2));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ (void) snprintf(buf2, sizeof (buf2), "->%s",
+ ieee80211_macaddr_sprintf(wh->i_addr1));
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ break;
+ }
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_dump_pkt(): %s", buf1);
+ bzero(buf1, sizeof (buf1));
+
+ switch (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) {
+ case IEEE80211_FC0_TYPE_DATA:
+ (void) sprintf(buf2, "data");
+ break;
+ case IEEE80211_FC0_TYPE_MGT:
+ (void) snprintf(buf2, sizeof (buf2), "%s",
+ ieee80211_mgt_subtype_name[
+ (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK)
+ >> IEEE80211_FC0_SUBTYPE_SHIFT]);
+ break;
+ default:
+ (void) snprintf(buf2, sizeof (buf2), "type#%d",
+ wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK);
+ break;
+ }
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
+ (void) sprintf(buf2, " WEP");
+ (void) strcat(buf1, buf2);
+ }
+ if (rate >= 0) {
+ (void) snprintf(buf2, sizeof (buf2), " %dM", rate / 2);
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ }
+ if (rssi >= 0) {
+ (void) snprintf(buf2, sizeof (buf2), " +%d", rssi);
+ (void) strncat(buf1, buf2, sizeof (buf2));
+ }
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_dump_pkt(): %s", buf1);
+ bzero(buf1, sizeof (buf1));
+
+ if (len > 0) {
+ for (i = 0; i < (len > 40 ? 40 : len); i++) {
+ if ((i & 0x03) == 0)
+ (void) strcat(buf1, " ");
+ (void) snprintf(buf2, 3, "%02x", buf[i]);
+ (void) strncat(buf1, buf2, 3);
+ }
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_dump_pkt(): %s",
+ buf1);
+ }
+}
+
+/*
+ * Adjust/Fix the specified node's rate table
+ *
+ * in node
+ * flag IEEE80211_F_DOSORT : sort the node's rate table
+ * IEEE80211_F_DONEGO : mark a rate as basic rate if it is
+ * a device's basic rate
+ * IEEE80211_F_DODEL : delete rates not supported by the device
+ * IEEE80211_F_DOFRATE: check if the fixed rate is supported by
+ * the device
+ *
+ * The highest bit of returned rate value is set to 1 on failure.
+ */
+int
+ieee80211_fix_rate(ieee80211_node_t *in, int flags)
+{
+ ieee80211com_t *ic = in->in_ic;
+ struct ieee80211_rateset *srs;
+ struct ieee80211_rateset *nrs;
+ boolean_t ignore;
+ int i;
+ int okrate;
+ int badrate;
+ int fixedrate;
+ uint8_t r;
+
+ /*
+ * If the fixed rate check was requested but no
+ * fixed has been defined then just remove it.
+ */
+ if ((flags & IEEE80211_F_DOFRATE) &&
+ (ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE)) {
+ flags &= ~IEEE80211_F_DOFRATE;
+ }
+ okrate = badrate = fixedrate = 0;
+ srs = &ic->ic_sup_rates[ieee80211_chan2mode(ic, in->in_chan)];
+ nrs = &in->in_rates;
+ for (i = 0; i < nrs->ir_nrates; ) {
+ int j;
+
+ ignore = B_FALSE;
+ if (flags & IEEE80211_F_DOSORT) {
+ /*
+ * Sort rates.
+ */
+ for (j = i + 1; j < nrs->ir_nrates; j++) {
+ if (IEEE80211_RV(nrs->ir_rates[i]) >
+ IEEE80211_RV(nrs->ir_rates[j])) {
+ r = nrs->ir_rates[i];
+ nrs->ir_rates[i] = nrs->ir_rates[j];
+ nrs->ir_rates[j] = r;
+ }
+ }
+ }
+ r = IEEE80211_RV(nrs->ir_rates[i]);
+ badrate = r;
+
+ /*
+ * Check against supported rates.
+ */
+ for (j = 0; j < srs->ir_nrates; j++) {
+ if (r == IEEE80211_RV(srs->ir_rates[j])) {
+ /*
+ * Overwrite with the supported rate
+ * value so any basic rate bit is set.
+ * This insures that response we send
+ * to stations have the necessary basic
+ * rate bit set.
+ */
+ if (flags & IEEE80211_F_DONEGO)
+ nrs->ir_rates[i] = srs->ir_rates[j];
+ break;
+ }
+ }
+ if (j == srs->ir_nrates) {
+ /*
+ * A rate in the node's rate set is not
+ * supported. We just discard/ignore the rate.
+ * Note that this is important for 11b stations
+ * when they want to associate with an 11g AP.
+ */
+ ignore = B_TRUE;
+ }
+
+ if (flags & IEEE80211_F_DODEL) {
+ /*
+ * Delete unacceptable rates.
+ */
+ if (ignore) {
+ nrs->ir_nrates--;
+ for (j = i; j < nrs->ir_nrates; j++)
+ nrs->ir_rates[j] = nrs->ir_rates[j + 1];
+ nrs->ir_rates[j] = 0;
+ continue;
+ }
+ }
+ if (flags & IEEE80211_F_DOFRATE) {
+ /*
+ * Check any fixed rate is included.
+ */
+ if (r == ic->ic_fixed_rate)
+ fixedrate = r;
+ }
+ if (!ignore)
+ okrate = nrs->ir_rates[i];
+ i++;
+ }
+ if (okrate == 0 || ((flags & IEEE80211_F_DOFRATE) && fixedrate == 0))
+ return (badrate | IEEE80211_RATE_BASIC);
+ else
+ return (IEEE80211_RV(okrate));
+}
+
+/*
+ * Reset 11g-related state.
+ */
+void
+ieee80211_reset_erp(ieee80211com_t *ic)
+{
+ ic->ic_flags &= ~IEEE80211_F_USEPROT;
+ /*
+ * Short slot time is enabled only when operating in 11g
+ * and not in an IBSS. We must also honor whether or not
+ * the driver is capable of doing it.
+ */
+ ieee80211_set_shortslottime(ic,
+ ic->ic_curmode == IEEE80211_MODE_11A);
+ /*
+ * Set short preamble and ERP barker-preamble flags.
+ */
+ if (ic->ic_curmode == IEEE80211_MODE_11A ||
+ (ic->ic_caps & IEEE80211_C_SHPREAMBLE)) {
+ ic->ic_flags |= IEEE80211_F_SHPREAMBLE;
+ ic->ic_flags &= ~IEEE80211_F_USEBARKER;
+ } else {
+ ic->ic_flags &= ~IEEE80211_F_SHPREAMBLE;
+ ic->ic_flags |= IEEE80211_F_USEBARKER;
+ }
+}
+
+/*
+ * Change current channel to be the next available channel
+ */
+void
+ieee80211_reset_chan(ieee80211com_t *ic)
+{
+ struct ieee80211_channel *ch = ic->ic_curchan;
+
+ IEEE80211_LOCK(ic);
+ do {
+ if (++ch > &ic->ic_sup_channels[IEEE80211_CHAN_MAX])
+ ch = &ic->ic_sup_channels[0];
+ if (ieee80211_isset(ic->ic_chan_active,
+ ieee80211_chan2ieee(ic, ch))) {
+ break;
+ }
+ } while (ch != ic->ic_curchan);
+ ic->ic_curchan = ch;
+ IEEE80211_UNLOCK(ic);
+}
+
+/*
+ * Set the short slot time state and notify the driver.
+ */
+void
+ieee80211_set_shortslottime(ieee80211com_t *ic, boolean_t on)
+{
+ if (on)
+ ic->ic_flags |= IEEE80211_F_SHSLOT;
+ else
+ ic->ic_flags &= ~IEEE80211_F_SHSLOT;
+ /* notify driver */
+ if (ic->ic_set_shortslot != NULL)
+ ic->ic_set_shortslot(ic, on);
+}
+
+/*
+ * Mark the basic rates for the 11g rate table based on the
+ * operating mode. For real 11g we mark all the 11b rates
+ * and 6, 12, and 24 OFDM. For 11b compatibility we mark only
+ * 11b rates. There's also a pseudo 11a-mode used to mark only
+ * the basic OFDM rates.
+ */
+void
+ieee80211_setbasicrates(struct ieee80211_rateset *rs,
+ enum ieee80211_phymode mode)
+{
+ static const struct ieee80211_rateset basic[] = {
+ { 0 }, /* IEEE80211_MODE_AUTO */
+ { 3, { 12, 24, 48 } }, /* IEEE80211_MODE_11A */
+ { 2, { 2, 4} }, /* IEEE80211_MODE_11B */
+ { 4, { 2, 4, 11, 22 } }, /* IEEE80211_MODE_11G mixed b/g */
+ { 0 }, /* IEEE80211_MODE_FH */
+ { 3, { 12, 24, 48 } }, /* IEEE80211_MODE_TURBO_A */
+ { 4, { 2, 4, 11, 22 } } /* IEEE80211_MODE_TURBO_G (mixed b/g) */
+ };
+ int i, j;
+
+ ASSERT(mode < IEEE80211_MODE_MAX);
+ for (i = 0; i < rs->ir_nrates; i++) {
+ rs->ir_rates[i] &= IEEE80211_RATE_VAL;
+ for (j = 0; j < basic[mode].ir_nrates; j++) {
+ if (basic[mode].ir_rates[j] == rs->ir_rates[i]) {
+ rs->ir_rates[i] |= IEEE80211_RATE_BASIC;
+ break;
+ }
+ }
+ }
+}
+
+/*
+ * Process STA mode beacon miss events. Send a direct probe request
+ * frame to the current ap bmiss_max times (w/o answer) before
+ * scanning for a new ap.
+ */
+void
+ieee80211_beacon_miss(ieee80211com_t *ic)
+{
+ ieee80211_impl_t *im = ic->ic_private;
+
+ if (ic->ic_flags & IEEE80211_F_SCAN)
+ return;
+ ieee80211_dbg(IEEE80211_MSG_STATE | IEEE80211_MSG_DEBUG,
+ "%s\n", "beacon miss");
+
+ /*
+ * Our handling is only meaningful for stations that are
+ * associated; any other conditions else will be handled
+ * through different means (e.g. the tx timeout on mgt frames).
+ */
+ if (ic->ic_opmode != IEEE80211_M_STA ||
+ ic->ic_state != IEEE80211_S_RUN) {
+ return;
+ }
+
+ IEEE80211_LOCK(ic);
+ if (++im->im_bmiss_count < im->im_bmiss_max) {
+ /*
+ * Send a directed probe req before falling back to a scan;
+ * if we receive a response ic_bmiss_count will be reset.
+ * Some cards mistakenly report beacon miss so this avoids
+ * the expensive scan if the ap is still there.
+ */
+ IEEE80211_UNLOCK(ic);
+ (void) ieee80211_send_probereq(ic->ic_bss, ic->ic_macaddr,
+ ic->ic_bss->in_bssid, ic->ic_bss->in_bssid,
+ ic->ic_bss->in_essid, ic->ic_bss->in_esslen,
+ ic->ic_opt_ie, ic->ic_opt_ie_len);
+ return;
+ }
+ im->im_bmiss_count = 0;
+ IEEE80211_UNLOCK(ic);
+ ieee80211_new_state(ic, IEEE80211_S_SCAN, 0);
+}
+
+/*
+ * Manage state transition between INIT | AUTH | ASSOC | RUN.
+ */
+static int
+ieee80211_newstate(ieee80211com_t *ic, enum ieee80211_state nstate, int arg)
+{
+ struct ieee80211_impl *im = ic->ic_private;
+ ieee80211_node_t *in;
+ enum ieee80211_state ostate;
+ wifi_data_t wd = { 0 };
+
+ IEEE80211_LOCK(ic);
+ ostate = ic->ic_state;
+ ieee80211_dbg(IEEE80211_MSG_STATE, "ieee80211_newstate(): "
+ "%s -> %s\n",
+ ieee80211_state_name[ostate], ieee80211_state_name[nstate]);
+ ic->ic_state = nstate;
+ in = ic->ic_bss;
+ im->im_swbmiss_period = 0; /* Reset software beacon miss period */
+
+ switch (nstate) {
+ case IEEE80211_S_INIT:
+ IEEE80211_UNLOCK(ic);
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ return (0);
+ case IEEE80211_S_SCAN:
+ ieee80211_cancel_scan(ic);
+ break;
+ case IEEE80211_S_AUTH:
+ break;
+ case IEEE80211_S_ASSOC:
+ if (ic->ic_opmode == IEEE80211_M_STA) {
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_DEAUTH,
+ IEEE80211_REASON_AUTH_LEAVE);
+ }
+ break;
+ case IEEE80211_S_RUN:
+ if (ic->ic_opmode == IEEE80211_M_STA) {
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_DISASSOC,
+ IEEE80211_REASON_ASSOC_LEAVE);
+ ieee80211_sta_leave(ic, in);
+ }
+ break;
+ }
+ IEEE80211_LOCK(ic);
+ im->im_mgt_timer = 0;
+ ieee80211_reset_bss(ic);
+ break;
+ case IEEE80211_S_SCAN:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ if (ic->ic_opmode == IEEE80211_M_IBSS &&
+ ic->ic_des_chan != IEEE80211_CHAN_ANYC) {
+ /*
+ * AP operation and we already have a channel;
+ * bypass the scan and startup immediately.
+ */
+ ieee80211_create_ibss(ic, ic->ic_des_chan);
+ } else {
+ IEEE80211_UNLOCK(ic);
+ ieee80211_begin_scan(ic,
+ (arg == 0) ? B_FALSE : B_TRUE);
+ return (0);
+ }
+ break;
+ case IEEE80211_S_SCAN:
+ /*
+ * Scan next. If doing an active scan and the
+ * channel is not marked passive-only then send
+ * a probe request. Otherwise just listen for
+ * beacons on the channel.
+ */
+ if ((ic->ic_flags & IEEE80211_F_ASCAN) &&
+ !IEEE80211_IS_CHAN_PASSIVE(ic->ic_curchan)) {
+ IEEE80211_UNLOCK(ic);
+ (void) ieee80211_send_probereq(in,
+ ic->ic_macaddr, wifi_bcastaddr,
+ wifi_bcastaddr,
+ ic->ic_des_essid, ic->ic_des_esslen,
+ ic->ic_opt_ie, ic->ic_opt_ie_len);
+ return (0);
+ }
+ break;
+ case IEEE80211_S_RUN:
+ /* beacon miss */
+ ieee80211_dbg(IEEE80211_MSG_STATE,
+ "no recent beacons from %s, rescanning\n",
+ ieee80211_macaddr_sprintf(in->in_macaddr));
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_leave(ic, in);
+ IEEE80211_LOCK(ic);
+ ic->ic_flags &= ~IEEE80211_F_SIBSS;
+ /* FALLTHRU */
+ case IEEE80211_S_AUTH:
+ case IEEE80211_S_ASSOC:
+ /* timeout restart scan */
+ in = ieee80211_find_node(&ic->ic_scan,
+ ic->ic_bss->in_macaddr);
+ if (in != NULL) {
+ in->in_fails++;
+ ieee80211_unref_node(&in);
+ }
+ break;
+ }
+ break;
+ case IEEE80211_S_AUTH:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ case IEEE80211_S_SCAN:
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in, IEEE80211_FC0_SUBTYPE_AUTH,
+ 1);
+ return (0);
+ case IEEE80211_S_AUTH:
+ case IEEE80211_S_ASSOC:
+ switch (arg) {
+ case IEEE80211_FC0_SUBTYPE_AUTH:
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_AUTH, 2);
+ return (0);
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ /* ignore and retry scan on timeout */
+ break;
+ }
+ break;
+ case IEEE80211_S_RUN:
+ switch (arg) {
+ case IEEE80211_FC0_SUBTYPE_AUTH:
+ ic->ic_state = ostate; /* stay RUN */
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_AUTH, 2);
+ return (0);
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_leave(ic, in);
+ /* try to re-auth */
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_AUTH, 1);
+ return (0);
+ }
+ break;
+ }
+ break;
+ case IEEE80211_S_ASSOC:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ case IEEE80211_S_SCAN:
+ case IEEE80211_S_ASSOC:
+ ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_newstate: "
+ "invalid transition\n");
+ break;
+ case IEEE80211_S_AUTH:
+ IEEE80211_UNLOCK(ic);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 0);
+ return (0);
+ case IEEE80211_S_RUN:
+ IEEE80211_UNLOCK(ic);
+ ieee80211_sta_leave(ic, in);
+ IEEE80211_SEND_MGMT(ic, in,
+ IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 1);
+ return (0);
+ }
+ break;
+ case IEEE80211_S_RUN:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ ieee80211_err("ieee80211_newstate: "
+ "invalid transition\n");
+ break;
+ case IEEE80211_S_AUTH:
+ ieee80211_err("ieee80211_newstate: "
+ "invalid transition\n");
+ break;
+ case IEEE80211_S_SCAN: /* adhoc/hostap mode */
+ case IEEE80211_S_ASSOC: /* infra mode */
+ ASSERT(in->in_txrate < in->in_rates.ir_nrates);
+ im->im_mgt_timer = 0;
+ if (ic->ic_opmode == IEEE80211_M_STA)
+ ieee80211_notify_node_join(ic, in);
+
+ /*
+ * We can send data now; update the fastpath with our
+ * current associated BSSID and other relevant settings.
+ */
+ wd.wd_secalloc = ieee80211_crypto_getciphertype(ic);
+ wd.wd_opmode = ic->ic_opmode;
+ IEEE80211_ADDR_COPY(wd.wd_bssid, in->in_bssid);
+ (void) mac_pdata_update(ic->ic_mach, &wd, sizeof (wd));
+ break;
+ }
+
+ /*
+ * When 802.1x is not in use mark the port authorized
+ * at this point so traffic can flow.
+ */
+ if (in->in_authmode != IEEE80211_AUTH_8021X)
+ ieee80211_node_authorize(in);
+ /*
+ * Enable inactivity processing.
+ */
+ ic->ic_scan.nt_inact_timer = IEEE80211_INACT_WAIT;
+ ic->ic_sta.nt_inact_timer = IEEE80211_INACT_WAIT;
+ break; /* IEEE80211_S_RUN */
+ } /* switch nstate */
+ IEEE80211_UNLOCK(ic);
+
+ return (0);
+}
diff --git a/usr/src/uts/common/sys/dld.h b/usr/src/uts/common/sys/dld.h
index 4e32398c21..783f581e68 100644
--- a/usr/src/uts/common/sys/dld.h
+++ b/usr/src/uts/common/sys/dld.h
@@ -108,6 +108,40 @@ typedef struct dld_vlan_info {
char dvi_name[IFNAMSIZ];
} dld_vlan_info_t;
+/*
+ * Secure objects ioctls
+ */
+typedef enum {
+ DLD_SECOBJ_CLASS_WEP = 1
+} dld_secobj_class_t;
+
+#define DLD_SECOBJ_OPT_CREATE 0x00000001
+#define DLD_SECOBJ_NAME_MAX 32
+#define DLD_SECOBJ_VAL_MAX 256
+typedef struct dld_secobj {
+ char so_name[DLD_SECOBJ_NAME_MAX];
+ dld_secobj_class_t so_class;
+ uint8_t so_val[DLD_SECOBJ_VAL_MAX];
+ uint_t so_len;
+} dld_secobj_t;
+
+#define DLDIOCSECOBJSET (DLDIOC | 0x05)
+typedef struct dld_ioc_secobj_set {
+ dld_secobj_t ss_obj;
+ uint_t ss_flags;
+} dld_ioc_secobj_set_t;
+
+#define DLDIOCSECOBJGET (DLDIOC | 0x06)
+typedef struct dld_ioc_secobj_get {
+ dld_secobj_t sg_obj;
+ uint_t sg_count;
+} dld_ioc_secobj_get_t;
+
+#define DLDIOCSECOBJUNSET (DLDIOC | 0x07)
+typedef struct dld_ioc_secobj_unset {
+ char su_name[DLD_SECOBJ_NAME_MAX];
+} dld_ioc_secobj_unset_t;
+
#ifdef _KERNEL
int dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
int dld_open(queue_t *, dev_t *, int, int, cred_t *);
diff --git a/usr/src/uts/common/sys/dld_impl.h b/usr/src/uts/common/sys/dld_impl.h
index bd61db8dc4..356bd4dd1b 100644
--- a/usr/src/uts/common/sys/dld_impl.h
+++ b/usr/src/uts/common/sys/dld_impl.h
@@ -164,6 +164,11 @@ struct dld_str {
dld_str_mode_t ds_mode;
/*
+ * Native mode state.
+ */
+ boolean_t ds_native;
+
+ /*
* IP polling is operational if this flag is set.
*/
boolean_t ds_polling;
diff --git a/usr/src/uts/common/sys/dlpi.h b/usr/src/uts/common/sys/dlpi.h
index 3ffb8b5762..b8ff186a95 100644
--- a/usr/src/uts/common/sys/dlpi.h
+++ b/usr/src/uts/common/sys/dlpi.h
@@ -49,6 +49,7 @@ extern "C" {
*/
#define DLIOC ('D' << 8)
#define DLIOCRAW (DLIOC|1) /* M_DATA "raw" mode */
+#define DLIOCNATIVE (DLIOC|2) /* Native traffic mode */
#define DLIOCHDRINFO (DLIOC|10) /* IP fast-path */
#define DL_IOC_HDR_INFO DLIOCHDRINFO
@@ -261,6 +262,7 @@ extern "C" {
#define DL_IPV4 0x80000001ul /* IPv4 Tunnel Link */
#define DL_IPV6 0x80000002ul /* IPv6 Tunnel Link */
#define SUNW_DL_VNI 0x80000003ul /* Virtual network interface */
+#define DL_WIFI 0x80000004ul /* IEEE 802.11 */
/*
* DLPI provider service supported.
diff --git a/usr/src/uts/common/sys/mac.h b/usr/src/uts/common/sys/mac.h
index ed11df7e4a..fd4c89150c 100644
--- a/usr/src/uts/common/sys/mac.h
+++ b/usr/src/uts/common/sys/mac.h
@@ -154,6 +154,7 @@ enum mac_driver_stat {
*/
typedef struct mac_info_s {
uint_t mi_media;
+ uint_t mi_nativemedia;
uint_t mi_sdu_min;
uint_t mi_sdu_max;
uint_t mi_addr_length;
@@ -462,6 +463,7 @@ typedef struct mactype_register_s {
const char *mtr_ident;
mactype_ops_t *mtr_ops;
uint_t mtr_mactype;
+ uint_t mtr_nativetype;
uint_t mtr_addrlen;
uint8_t *mtr_brdcst_addr;
mac_stat_info_t *mtr_stats;
diff --git a/usr/src/uts/common/sys/mac_impl.h b/usr/src/uts/common/sys/mac_impl.h
index bc4bea80de..06e6b8244c 100644
--- a/usr/src/uts/common/sys/mac_impl.h
+++ b/usr/src/uts/common/sys/mac_impl.h
@@ -80,6 +80,7 @@ typedef struct mactype_s {
const char *mt_ident;
uint32_t mt_ref;
uint_t mt_type;
+ uint_t mt_nativetype;
size_t mt_addr_length;
uint8_t *mt_brdcst_addr;
mactype_ops_t mt_ops;
diff --git a/usr/src/uts/common/sys/mac_wifi.h b/usr/src/uts/common/sys/mac_wifi.h
new file mode 100644
index 0000000000..7ed4a9c0a1
--- /dev/null
+++ b/usr/src/uts/common/sys/mac_wifi.h
@@ -0,0 +1,116 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _SYS_MAC_WIFI_H
+#define _SYS_MAC_WIFI_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * WiFi MAC-Type Plugin
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/types.h>
+#include <sys/net80211_proto.h>
+
+#ifdef _KERNEL
+
+#define MAC_PLUGIN_IDENT_WIFI "mac_wifi"
+
+/*
+ * Maximum size of a WiFi header based on current implementation.
+ * May change in the future as new features are added.
+ */
+#define WIFI_HDRSIZE (sizeof (struct ieee80211_frame) + \
+ IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + sizeof (struct ieee80211_llc))
+
+enum wifi_stat {
+ /* statistics described in ieee802.11(5) */
+ WIFI_STAT_TX_FRAGS = MACTYPE_STAT_MIN,
+ WIFI_STAT_MCAST_TX,
+ WIFI_STAT_TX_FAILED,
+ WIFI_STAT_TX_RETRANS,
+ WIFI_STAT_TX_RERETRANS,
+ WIFI_STAT_RTS_SUCCESS,
+ WIFI_STAT_RTS_FAILURE,
+ WIFI_STAT_ACK_FAILURE,
+ WIFI_STAT_RX_FRAGS,
+ WIFI_STAT_MCAST_RX,
+ WIFI_STAT_FCS_ERRORS,
+ WIFI_STAT_WEP_ERRORS,
+ WIFI_STAT_RX_DUPS
+};
+
+/*
+ * WiFi security modes recognized by the plugin.
+ */
+enum wifi_secmode {
+ WIFI_SEC_NONE,
+ WIFI_SEC_WEP
+};
+
+/*
+ * WiFi data passed between the drivers and the plugin.
+ *
+ * Field definitions:
+ *
+ * wd_opts Currently set to 0. If new features require the
+ * introduction of new wifi_data_t fields, then the
+ * presence of those fields must be indicated to the
+ * plugin via wd_opts flags. This allows the drivers
+ * and the plugin to evolve independently.
+ *
+ * wd_bssid Current associated BSSID (or IBSSID), used when
+ * generating data packet headers for transmission.
+ *
+ * wd_opmode Current operation mode; any ieee80211_opmode is
+ * supported.
+ *
+ * wd_secalloc Current allocation policy for security-related
+ * WiFi headers, used when generating packets for
+ * transmission. The plugin will allocate header
+ * space for the security portion, and fill in any
+ * fixed-contents fields.
+ */
+typedef struct wifi_data {
+ uint_t wd_opts;
+ uint8_t wd_bssid[IEEE80211_ADDR_LEN];
+ enum ieee80211_opmode wd_opmode;
+ enum wifi_secmode wd_secalloc;
+} wifi_data_t;
+
+extern uint8_t wifi_bcastaddr[];
+
+#endif /* _KERNEL */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_MAC_WIFI_H */
diff --git a/usr/src/uts/common/sys/net80211.h b/usr/src/uts/common/sys/net80211.h
new file mode 100644
index 0000000000..539e0a3e10
--- /dev/null
+++ b/usr/src/uts/common/sys/net80211.h
@@ -0,0 +1,528 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef _SYS_NET80211_H
+#define _SYS_NET80211_H
+
+#include <sys/mac.h>
+#include <sys/ethernet.h>
+#include <sys/net80211_proto.h>
+#include <sys/net80211_crypto.h>
+
+/*
+ * IEEE802.11 kernel support module
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ic_caps */
+#define IEEE80211_C_WEP 0x00000001 /* CAPABILITY: WEP available */
+#define IEEE80211_C_TKIP 0x00000002 /* CAPABILITY: TKIP available */
+#define IEEE80211_C_AES 0x00000004 /* CAPABILITY: AES OCB avail */
+#define IEEE80211_C_AES_CCM 0x00000008 /* CAPABILITY: AES CCM avail */
+#define IEEE80211_C_CKIP 0x00000010 /* CAPABILITY: CKIP available */
+#define IEEE80211_C_FF 0x00000040 /* CAPABILITY: ATH FF avail */
+#define IEEE80211_C_TURBOP 0x00000080
+ /* CAPABILITY: ATH Turbo available */
+#define IEEE80211_C_IBSS 0x00000100 /* CAPABILITY: IBSS available */
+#define IEEE80211_C_PMGT 0x00000200 /* CAPABILITY: Power mgmt */
+#define IEEE80211_C_HOSTAP 0x00000400 /* CAPABILITY: HOSTAP avail */
+#define IEEE80211_C_AHDEMO 0x00000800 /* CAPABILITY: Old Adhoc Demo */
+#define IEEE80211_C_SWRETRY 0x00001000 /* CAPABILITY: sw tx retry */
+#define IEEE80211_C_TXPMGT 0x00002000 /* CAPABILITY: tx power mgmt */
+#define IEEE80211_C_SHSLOT 0x00004000 /* CAPABILITY: short slottime */
+#define IEEE80211_C_SHPREAMBLE 0x00008000 /* CAPABILITY: short preamble */
+#define IEEE80211_C_MONITOR 0x00010000 /* CAPABILITY: monitor mode */
+#define IEEE80211_C_TKIPMIC 0x00020000 /* CAPABILITY: TKIP MIC avail */
+#define IEEE80211_C_WPA1 0x00800000 /* CAPABILITY: WPA1 avail */
+#define IEEE80211_C_WPA2 0x01000000 /* CAPABILITY: WPA2 avail */
+#define IEEE80211_C_WPA 0x01800000
+ /* CAPABILITY: WPA1+WPA2 avail */
+#define IEEE80211_C_BURST 0x02000000 /* CAPABILITY: frame bursting */
+#define IEEE80211_C_WME 0x04000000 /* CAPABILITY: WME avail */
+#define IEEE80211_C_WDS 0x08000000 /* CAPABILITY: 4-addr support */
+/* 0x10000000 reserved */
+#define IEEE80211_C_BGSCAN 0x20000000 /* CAPABILITY: bg scanning */
+#define IEEE80211_C_TXFRAG 0x40000000 /* CAPABILITY: tx fragments */
+/* XXX protection/barker? */
+
+#define IEEE80211_C_CRYPTO 0x0000001f /* CAPABILITY: crypto alg's */
+
+/* ic_flags */
+/* NB: bits 0x4c available */
+#define IEEE80211_F_FF 0x00000001 /* CONF: ATH FF enabled */
+#define IEEE80211_F_TURBOP 0x00000002 /* CONF: ATH Turbo enabled */
+#define IEEE80211_F_BURST 0x00000004 /* CONF: bursting enabled */
+/* NB: this is intentionally setup to be IEEE80211_CAPINFO_PRIVACY */
+#define IEEE80211_F_PRIVACY 0x00000010 /* CONF: privacy enabled */
+#define IEEE80211_F_PUREG 0x00000020 /* CONF: 11g w/o 11b sta's */
+#define IEEE80211_F_SCANONLY 0x00000040 /* CONF: scan only */
+#define IEEE80211_F_SCAN 0x00000080 /* STATUS: scanning */
+#define IEEE80211_F_ASCAN 0x00000100 /* STATUS: active scan */
+#define IEEE80211_F_SIBSS 0x00000200 /* STATUS: start IBSS */
+/* NB: this is intentionally setup to be IEEE80211_CAPINFO_SHORT_SLOTTIME */
+#define IEEE80211_F_SHSLOT 0x00000400
+ /* STATUS: use short slot time */
+#define IEEE80211_F_PMGTON 0x00000800 /* CONF: Power mgmt enable */
+#define IEEE80211_F_DESBSSID 0x00001000 /* CONF: des_bssid is set */
+#define IEEE80211_F_WME 0x00002000 /* CONF: enable WME use */
+#define IEEE80211_F_BGSCAN 0x00004000
+ /* CONF: bg scan enabled (???) */
+#define IEEE80211_F_SWRETRY 0x00008000 /* CONF: sw tx retry enabled */
+#define IEEE80211_F_TXPOW_FIXED 0x00010000 /* TX Power: fixed rate */
+#define IEEE80211_F_IBSSON 0x00020000 /* CONF: IBSS creation enable */
+#define IEEE80211_F_SHPREAMBLE 0x00040000 /* STATUS: use short preamble */
+#define IEEE80211_F_DATAPAD 0x00080000 /* CONF: do alignment pad */
+#define IEEE80211_F_USEPROT 0x00100000 /* STATUS: protection enabled */
+#define IEEE80211_F_USEBARKER 0x00200000
+ /* STATUS: use barker preamble */
+#define IEEE80211_F_TIMUPDATE 0x00400000 /* STATUS: update beacon tim */
+#define IEEE80211_F_WPA1 0x00800000 /* CONF: WPA enabled */
+#define IEEE80211_F_WPA2 0x01000000 /* CONF: WPA2 enabled */
+#define IEEE80211_F_WPA 0x01800000 /* CONF: WPA/WPA2 enabled */
+#define IEEE80211_F_DROPUNENC 0x02000000 /* CONF: drop unencrypted */
+#define IEEE80211_F_COUNTERM 0x04000000 /* CONF: TKIP countermeasures */
+#define IEEE80211_F_HIDESSID 0x08000000 /* CONF: hide SSID in beacon */
+#define IEEE80211_F_NOBRIDGE 0x10000000 /* CONF: dis. internal bridge */
+#define IEEE80211_F_WMEUPDATE 0x20000000 /* STATUS: update beacon wme */
+
+/* ic_flags_ext */
+#define IEEE80211_FEXT_WDS 0x00000001 /* CONF: 4 addr allowed */
+/* 0x00000006 reserved */
+#define IEEE80211_FEXT_BGSCAN 0x00000008
+ /* STATUS: enable full bgscan completion */
+#define IEEE80211_FEXT_ERPUPDATE 0x00000200 /* STATUS: update ERP element */
+#define IEEE80211_FEXT_SWBMISS 0x00000400 /* CONF: do bmiss in s/w */
+
+/*
+ * Channel attributes (ich_flags)
+ * bits 0-3 are for private use by drivers
+ */
+#define IEEE80211_CHAN_TURBO 0x0010 /* Turbo channel */
+#define IEEE80211_CHAN_CCK 0x0020 /* CCK channel */
+#define IEEE80211_CHAN_OFDM 0x0040 /* OFDM channel */
+#define IEEE80211_CHAN_2GHZ 0x0080 /* 2 GHz spectrum channel. */
+#define IEEE80211_CHAN_5GHZ 0x0100 /* 5 GHz spectrum channel */
+#define IEEE80211_CHAN_PASSIVE 0x0200 /* Only passive scan allowed */
+#define IEEE80211_CHAN_DYN 0x0400 /* Dynamic CCK-OFDM channel */
+#define IEEE80211_CHAN_GFSK 0x0800 /* GFSK channel (FHSS PHY) */
+
+#define IEEE80211_CHAN_MAX 255
+#define IEEE80211_CHAN_BYTES 32 /* howmany(IEEE80211_CHAN_MAX, NBBY) */
+#define IEEE80211_CHAN_ANY 0xffff /* token for ``any channel'' */
+#define IEEE80211_CHAN_ANYC \
+ ((struct ieee80211_channel *)IEEE80211_CHAN_ANY)
+
+#define IEEE80211_IS_CHAN_2GHZ(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_2GHZ) != 0)
+#define IEEE80211_IS_CHAN_5GHZ(_c) \
+ (((_c)->ich_flags & IEEE80211_CHAN_5GHZ) != 0)
+
+#define IEEE80211_NODE_HASHSIZE 32
+
+#define IEEE80211_FIXED_RATE_NONE 0
+#define IEEE80211_MCAST_RATE_DEFAULT (2*1) /* default mcast rate (1M) */
+
+/* WME stream classes */
+#define WME_AC_BE 0 /* best effort */
+#define WME_AC_BK 1 /* background */
+#define WME_AC_VI 2 /* video */
+#define WME_AC_VO 3 /* voice */
+
+/*
+ * Authentication mode.
+ */
+enum ieee80211_authmode {
+ IEEE80211_AUTH_NONE = 0,
+ IEEE80211_AUTH_OPEN = 1, /* open */
+ IEEE80211_AUTH_SHARED = 2, /* shared-key */
+ IEEE80211_AUTH_8021X = 3, /* 802.1x */
+ IEEE80211_AUTH_AUTO = 4, /* auto-select/accept */
+ /* NB: these are used only for ioctls */
+ IEEE80211_AUTH_WPA = 5 /* WPA/RSN w/ 802.1x/PSK */
+};
+
+enum ieee80211_state {
+ IEEE80211_S_INIT = 0, /* default state */
+ IEEE80211_S_SCAN = 1, /* scanning */
+ IEEE80211_S_AUTH = 2, /* try to authenticate */
+ IEEE80211_S_ASSOC = 3, /* try to assoc */
+ IEEE80211_S_RUN = 4 /* associated */
+};
+#define IEEE80211_S_MAX (IEEE80211_S_RUN+1)
+
+/*
+ * 802.11 rate set.
+ */
+#define IEEE80211_RATE_MAXSIZE 15 /* max rates we'll handle */
+#define IEEE80211_RATE_SIZE 8 /* 802.11 standard */
+#define IEEE80211_XRATE_SIZE (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE)
+ /* size of extended supported rates */
+struct ieee80211_rateset {
+ uint8_t ir_nrates;
+ uint8_t ir_rates[IEEE80211_RATE_MAXSIZE];
+};
+
+/*
+ * Channels are specified by frequency and attributes.
+ */
+struct ieee80211_channel {
+ uint16_t ich_freq; /* setting in Mhz */
+ uint16_t ich_flags; /* see below */
+};
+
+struct ieee80211_device_stats {
+ uint32_t is_tx_frags;
+ uint32_t is_tx_bytes;
+ uint32_t is_tx_mcast;
+ uint32_t is_tx_failed;
+ uint32_t is_tx_retries;
+ uint32_t is_rts_success;
+ uint32_t is_rts_failure;
+ uint32_t is_ack_failure;
+ uint32_t is_rx_frags;
+ uint32_t is_rx_bytes;
+ uint32_t is_rx_mcast;
+ uint32_t is_rx_dups;
+ uint32_t is_fcs_errors;
+ uint32_t is_wep_errors;
+ uint32_t is_tx_nobuf;
+ uint32_t is_tx_unknownmgt;
+};
+
+struct ieee80211_crypto_state;
+typedef struct ieee80211_node_table ieee80211_node_table_t;
+typedef struct ieee80211_node ieee80211_node_t;
+typedef struct ieee80211com ieee80211com_t;
+
+struct ieee80211_node_table {
+ struct ieee80211com *nt_ic; /* back reference */
+
+ const char *nt_name; /* for debugging */
+ /* For node inactivity processing */
+ int nt_inact_timer; /* inactivity timer */
+ int nt_inact_init; /* initial node inact setting */
+ void (*nt_timeout)(struct ieee80211_node_table *);
+ uint32_t nt_scangen; /* gen# for timeout scan */
+ kmutex_t nt_scanlock; /* on nt_scangen */
+ kmutex_t nt_nodelock; /* on node table */
+
+ int nt_keyixmax; /* keyixmap size */
+ struct ieee80211_node **nt_keyixmap; /* key ix -> node map */
+
+ list_t nt_node; /* information of all nodes */
+ list_t nt_hash[IEEE80211_NODE_HASHSIZE];
+};
+
+/*
+ * Node specific information. Note that drivers are expected
+ * to derive from this structure to add device-specific per-node
+ * state. This is done by overriding the ic_node_* methods in
+ * the ieee80211com structure.
+ */
+struct ieee80211_node {
+ struct ieee80211com *in_ic;
+ struct ieee80211_node_table *in_table;
+
+ uint8_t in_authmode; /* authentication algorithm */
+ uint16_t in_flags; /* special purpose state */
+ uint16_t in_associd; /* assoc response */
+ uint16_t in_txpower; /* current transmit power */
+ uint16_t in_vlan; /* vlan tag */
+ /*
+ * Tx/Rx sequence number.
+ * index 0 is used when QoS is not enabled. index 1-16 is used
+ * when QoS is enabled. 1-16 corresponds to TID 0-15.
+ */
+ uint16_t in_txseqs[17]; /* tx seq per-tid */
+ uint16_t in_rxseqs[17]; /* rx seq previous per-tid */
+ clock_t in_rxfragstamp; /* time stamp of last rx frag */
+ mblk_t *in_rxfrag; /* rx frag reassembly */
+ uint32_t in_scangen; /* gen# for timeout scan */
+ uint32_t in_refcnt;
+
+ /* hardware */
+ uint32_t in_rstamp; /* recv timestamp */
+ uint8_t in_rssi; /* recv ssi */
+
+ /* header */
+ uint8_t in_macaddr[IEEE80211_ADDR_LEN];
+ uint8_t in_bssid[IEEE80211_ADDR_LEN];
+
+ /* beacon, probe response */
+ union {
+ uint8_t data[8];
+ uint64_t tsf;
+ } in_tstamp; /* from last rcv'd beacon */
+ uint16_t in_intval; /* beacon interval */
+ uint16_t in_capinfo; /* capabilities */
+ uint8_t in_esslen;
+ uint8_t in_essid[IEEE80211_NWID_LEN];
+ struct ieee80211_rateset in_rates; /* negotiated rate set */
+ struct ieee80211_channel *in_chan; /* XXX multiple uses */
+ enum ieee80211_phytype in_phytype;
+ uint16_t in_fhdwell; /* FH only */
+ uint8_t in_fhindex; /* FH only */
+ uint8_t in_erp; /* ERP from beacon/probe resp */
+ uint16_t in_tim_off; /* byte offset to TIM ie */
+ uint8_t in_dtim_period; /* DTIM period */
+ uint8_t in_dtim_count; /* DTIM count for last bcn */
+
+ uint32_t *in_challenge; /* shared-key challenge */
+ struct ieee80211_key in_ucastkey; /* unicast key */
+
+ /* others */
+ int32_t in_fails; /* failure count to associate */
+ int16_t in_inact; /* inactivity mark count */
+ int16_t in_inact_reload; /* inactivity reload value */
+ int32_t in_txrate; /* index to ni_rates[] */
+
+ list_node_t in_node; /* element of nt->nt_node */
+ list_node_t in_hash; /* element of nt->nt_hash */
+};
+
+struct ieee80211com {
+ mac_handle_t ic_mach;
+
+ /* Initialized by driver */
+ uint8_t ic_macaddr[IEEE80211_ADDR_LEN];
+ uint32_t ic_caps; /* capabilities */
+ enum ieee80211_phytype ic_phytype; /* XXX wrong for multi-mode */
+ enum ieee80211_opmode ic_opmode; /* current operation mode */
+ enum ieee80211_state ic_state; /* current 802.11 state */
+ struct ieee80211_channel ic_sup_channels[IEEE80211_CHAN_MAX+1];
+ struct ieee80211_rateset ic_sup_rates[IEEE80211_MODE_MAX];
+ enum ieee80211_phymode ic_curmode; /* OPT current mode */
+ struct ieee80211_channel *ic_curchan; /* OPT current channel */
+ struct ieee80211_channel *ic_ibss_chan; /* OPT bss channel */
+ uint8_t ic_maxrssi; /* maximum hardware RSSI */
+
+ /* INITIALIZED by IEEE80211, used/overridden by driver */
+ uint16_t ic_modecaps; /* set of mode capabilities */
+ uint8_t ic_chan_active[IEEE80211_CHAN_BYTES];
+ enum ieee80211_protmode ic_protmode; /* 802.11g protection mode */
+ uint16_t ic_bintval; /* beacon interval */
+ uint16_t ic_lintval; /* listen interval */
+ uint16_t ic_txpowlimit; /* global tx power limit */
+ uint8_t ic_bmissthreshold;
+ uint16_t ic_rtsthreshold;
+ uint16_t ic_fragthreshold;
+ int32_t ic_mcast_rate; /* rate for mcast frames */
+ uint8_t ic_fixed_rate; /* value of fixed rate */
+ int32_t ic_des_esslen; /* length of desired essid */
+ uint8_t ic_des_essid[IEEE80211_NWID_LEN];
+ uint8_t ic_des_bssid[IEEE80211_ADDR_LEN];
+ struct ieee80211_channel *ic_des_chan; /* desired channel */
+ void *ic_opt_ie; /* user-specified IE's */
+ uint16_t ic_opt_ie_len; /* length of ic_opt_ie */
+ uint8_t ic_nickname[IEEE80211_NWID_LEN];
+ uint16_t ic_tim_len; /* ic_tim_bitmap size (bytes) */
+ uint8_t *ic_tim_bitmap; /* powersave stations w/ data */
+ timeout_id_t ic_watchdog_timer; /* watchdog timer */
+ /* Cipher state/configuration. */
+ struct ieee80211_crypto_state ic_crypto;
+
+ /* Runtime states */
+ uint32_t ic_flags; /* state/conf flags */
+ uint32_t ic_flags_ext; /* extended state flags */
+ struct ieee80211_node *ic_bss; /* information for this node */
+ struct ieee80211_device_stats ic_stats;
+ struct ieee80211_node_table ic_scan; /* STA: scan candidates */
+ struct ieee80211_node_table ic_sta; /* AP:stations/IBSS:neighbors */
+
+ /* callback functions */
+ /*
+ * Functions initialized by driver before calling ieee80211_attach()
+ * Those must be initialized are marked with M(andatory)
+ *
+ * ic_xmit - [M] transmit a management or null data frame
+ * return 0 on success, non-zero on error
+ * ic_watchdog - [O] periodic run function, enabled by
+ * ieee80211_start_watchdog()
+ * ic_set_tim - [O] set/clear traffic indication map
+ * ic_set_shortslot - [O] enable/disable short slot timing
+ * ic_node_newassoc - [O] driver specific operation on a newly
+ * associated or re-assoced node
+ */
+ int (*ic_xmit)(ieee80211com_t *, mblk_t *, uint8_t);
+ void (*ic_watchdog)(void *);
+ void (*ic_set_tim)(ieee80211com_t *,
+ ieee80211_node_t *, int);
+ void (*ic_set_shortslot)(ieee80211com_t *, int);
+ void (*ic_node_newassoc)(ieee80211_node_t *, int);
+ /*
+ * Functions initialized by ieee80211_attach(), driver could
+ * override these functions after calling ieee80211_attach()
+ *
+ * ic_reset - reset
+ * ic_recv_mgmt - handle received management frames
+ * ic_send_mgmt - construct and transmit management frames
+ * ic_newstate - handle state transition
+ * ic_node_alloc - allocate a new BSS info node
+ * ic_node_cleanup - cleanup or free memory spaces of a node
+ * ic_node_free - free a node
+ * ic_node_getrssi - get node's rssi
+ */
+ int (*ic_reset)(ieee80211com_t *);
+ void (*ic_recv_mgmt)(ieee80211com_t *,
+ mblk_t *, ieee80211_node_t *,
+ int, int, uint32_t);
+ int (*ic_send_mgmt)(ieee80211com_t *,
+ ieee80211_node_t *, int, int);
+ int (*ic_newstate)(ieee80211com_t *,
+ enum ieee80211_state, int);
+ struct ieee80211_node *(*ic_node_alloc)(ieee80211com_t *);
+ void (*ic_node_cleanup)(ieee80211_node_t *);
+ void (*ic_node_free)(ieee80211_node_t *);
+ uint8_t (*ic_node_getrssi)(const ieee80211_node_t *);
+
+ kmutex_t ic_genlock;
+ void *ic_private; /* ieee80211 private data */
+};
+#define ic_nw_keys ic_crypto.cs_nw_keys
+#define ic_def_txkey ic_crypto.cs_def_txkey
+
+extern const char *ieee80211_state_name[IEEE80211_S_MAX];
+
+#define IEEE80211_RATE(_ix) \
+ (in->in_rates.ir_rates[(_ix)] & IEEE80211_RATE_VAL)
+
+#define ieee80211_new_state(_ic, _nstate, _arg) \
+ (((_ic)->ic_newstate)((_ic), (_nstate), (_arg)))
+
+#define ieee80211_macaddr_sprintf(_addr) \
+ ether_sprintf((struct ether_addr *)(_addr))
+
+/*
+ * Node reference counting definitions.
+ *
+ * ieee80211_node_initref initialize the reference count to 1
+ * ieee80211_node_incref add a reference
+ * ieee80211_node_decref remove a reference
+ * ieee80211_node_decref_nv remove a reference and return new value
+ * ieee80211_node_refcnt reference count for printing (only)
+ */
+#include <sys/atomic.h>
+#define ieee80211_node_initref(_in) \
+ ((_in)->in_refcnt = 1)
+#define ieee80211_node_incref(_in) \
+ atomic_inc_uint(&(_in)->in_refcnt)
+#define ieee80211_node_decref(_in) \
+ atomic_dec_uint(&(_in)->in_refcnt)
+#define ieee80211_node_decref_nv(_in) \
+ atomic_dec_uint_nv(&(_in)->in_refcnt)
+#define ieee80211_node_refcnt(_in) \
+ (_in)->in_refcnt
+
+typedef void ieee80211_iter_func(void *, ieee80211_node_t *);
+
+/* Initialization */
+void ieee80211_attach(ieee80211com_t *);
+void ieee80211_detach(ieee80211com_t *);
+void ieee80211_media_init(ieee80211com_t *);
+int ieee80211_ioctl(ieee80211com_t *, queue_t *, mblk_t *);
+
+/* Protocol Processing */
+int ieee80211_input(ieee80211com_t *, mblk_t *, ieee80211_node_t *,
+ int32_t, uint32_t);
+mblk_t *ieee80211_encap(ieee80211com_t *, mblk_t *, ieee80211_node_t *);
+
+mblk_t *ieee80211_beacon_alloc(ieee80211com_t *, ieee80211_node_t *,
+ struct ieee80211_beacon_offsets *);
+int ieee80211_beacon_update(ieee80211com_t *, ieee80211_node_t *,
+ struct ieee80211_beacon_offsets *, mblk_t *, int);
+void ieee80211_beacon_miss(ieee80211com_t *);
+
+void ieee80211_begin_scan(ieee80211com_t *, boolean_t);
+void ieee80211_next_scan(ieee80211com_t *);
+void ieee80211_end_scan(ieee80211com_t *);
+void ieee80211_cancel_scan(ieee80211com_t *);
+
+void ieee80211_sta_join(ieee80211com_t *, ieee80211_node_t *);
+void ieee80211_sta_leave(ieee80211com_t *, ieee80211_node_t *);
+boolean_t ieee80211_ibss_merge(ieee80211_node_t *);
+
+/* Node Operation */
+ieee80211_node_t *ieee80211_ref_node(ieee80211_node_t *);
+void ieee80211_unref_node(ieee80211_node_t **);
+void ieee80211_node_authorize(ieee80211_node_t *);
+void ieee80211_node_unauthorize(ieee80211_node_t *);
+ieee80211_node_t *ieee80211_alloc_node(ieee80211com_t *,
+ ieee80211_node_table_t *, const uint8_t *);
+void ieee80211_free_node(ieee80211_node_t *);
+void ieee80211_node_table_reset(ieee80211_node_table_t *);
+void ieee80211_iterate_nodes(ieee80211_node_table_t *, ieee80211_iter_func *,
+ void *);
+ieee80211_node_t *ieee80211_find_node(ieee80211_node_table_t *,
+ const uint8_t *);
+ieee80211_node_t *ieee80211_find_txnode(ieee80211com_t *,
+ const uint8_t daddr[IEEE80211_ADDR_LEN]);
+ieee80211_node_t *ieee80211_find_rxnode(ieee80211com_t *,
+ const struct ieee80211_frame *);
+
+
+/* Crypto */
+extern struct ieee80211_key *ieee80211_crypto_encap(ieee80211com_t *, mblk_t *);
+extern struct ieee80211_key *ieee80211_crypto_decap(ieee80211com_t *, mblk_t *,
+ int);
+extern int ieee80211_crypto_newkey(ieee80211com_t *, int, int,
+ struct ieee80211_key *);
+extern int ieee80211_crypto_delkey(ieee80211com_t *, struct ieee80211_key *);
+extern int ieee80211_crypto_setkey(ieee80211com_t *, struct ieee80211_key *,
+ const uint8_t macaddr[IEEE80211_ADDR_LEN]);
+
+/* Helper Functions */
+int ieee80211_stat(ieee80211com_t *ic, uint_t stat, uint64_t *val);
+uint32_t ieee80211_chan2ieee(ieee80211com_t *, struct ieee80211_channel *);
+enum ieee80211_phymode ieee80211_chan2mode(ieee80211com_t *,
+ struct ieee80211_channel *);
+uint32_t ieee80211_ieee2mhz(uint32_t, uint32_t);
+void ieee80211_reset_chan(ieee80211com_t *);
+void ieee80211_dump_pkt(const uint8_t *, int32_t, int32_t, int32_t);
+void ieee80211_watchdog(void *);
+void ieee80211_start_watchdog(ieee80211com_t *, uint32_t);
+void ieee80211_stop_watchdog(ieee80211com_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_H */
diff --git a/usr/src/uts/common/sys/net80211_crypto.h b/usr/src/uts/common/sys/net80211_crypto.h
new file mode 100644
index 0000000000..89cd81095b
--- /dev/null
+++ b/usr/src/uts/common/sys/net80211_crypto.h
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef _SYS_NET80211_CRYPTO_H
+#define _SYS_NET80211_CRYPTO_H
+
+#include <sys/types.h>
+#include <sys/mac.h>
+#include <sys/net80211_proto.h>
+
+/*
+ * 802.11 protocol crypto-related definitions.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * NB: these values are ordered carefully; there are lots of
+ * of implications in any reordering.
+ */
+#define IEEE80211_CIPHER_WEP 0
+#define IEEE80211_CIPHER_TKIP 1
+#define IEEE80211_CIPHER_AES_OCB 2
+#define IEEE80211_CIPHER_AES_CCM 3
+#define IEEE80211_CIPHER_CKIP 4
+#define IEEE80211_CIPHER_NONE 5 /* pseudo value */
+
+#define IEEE80211_CIPHER_MAX (IEEE80211_CIPHER_NONE+1)
+
+/*
+ * Maxmium length of key in bytes
+ * WEP key length present in the 802.11 standard is 40-bit.
+ * Many implementations also support 104-bit WEP keys.
+ * 802.11i standardize TKIP/CCMP use 128-bit key
+ */
+#define IEEE80211_KEYBUF_SIZE 16
+#define IEEE80211_MICBUF_SIZE (8+8) /* space for both tx+rx keys */
+
+/* Key Flags */
+#define IEEE80211_KEY_XMIT 0x01 /* key used for xmit */
+#define IEEE80211_KEY_RECV 0x02 /* key used for recv */
+#define IEEE80211_KEY_GROUP /* key used for WPA group operation */ \
+ 0x04
+#define IEEE80211_KEY_SWCRYPT 0x10 /* host-based encrypt/decrypt */
+#define IEEE80211_KEY_SWMIC 0x20 /* host-based enmic/demic */
+#define IEEE80211_KEY_COMMON /* common flags passed in by apps */ \
+ (IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV | IEEE80211_KEY_GROUP)
+
+/* WEP */
+#define IEEE80211_WEP_KEYLEN 5 /* 40bit */
+#define IEEE80211_WEP_IVLEN 3 /* 24bit */
+#define IEEE80211_WEP_KIDLEN 1 /* 1 octet */
+#define IEEE80211_WEP_CRCLEN 4 /* CRC-32 */
+#define IEEE80211_WEP_NKID 4 /* number of key ids */
+
+#define IEEE80211_WEP_HDRLEN \
+ (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN)
+#define IEEE80211_WEP_MINLEN \
+ (sizeof (struct ieee80211_frame) + \
+ IEEE80211_WEP_HDRLEN + IEEE80211_WEP_CRCLEN)
+
+/* Maximum number of keys */
+#define IEEE80211_KEY_MAX IEEE80211_WEP_NKID
+
+struct ieee80211com;
+struct ieee80211_node;
+struct ieee80211_key;
+typedef uint16_t ieee80211_keyix; /* h/w key index */
+
+#define IEEE80211_KEYIX_NONE ((ieee80211_keyix) -1)
+
+/*
+ * Template for a supported cipher. Ciphers register with the
+ * crypto code.
+ *
+ * ic_attach - Initialize cipher. The return value is set to wk_private
+ * ic_detach - Destruct a cipher.
+ * ic_setkey - Validate key contents
+ * ic_encap - Encrypt the 802.11 MAC payload
+ * ic_decap - Decrypt the 802.11 MAC payload
+ * ic_enmic - Add MIC
+ * ic_demic - Check and remove MIC
+ */
+struct ieee80211_cipher {
+ const char *ic_name; /* printable name */
+ uint32_t ic_cipher; /* IEEE80211_CIPHER_* */
+ uint32_t ic_header; /* size of privacy header (bytes) */
+ uint32_t ic_trailer; /* size of privacy trailer (bytes) */
+ uint32_t ic_miclen; /* size of mic trailer (bytes) */
+ void *(*ic_attach)(struct ieee80211com *,
+ struct ieee80211_key *);
+ void (*ic_detach)(struct ieee80211_key *);
+ int32_t (*ic_setkey)(struct ieee80211_key *);
+ int32_t (*ic_encap)(struct ieee80211_key *, mblk_t *,
+ uint8_t keyid);
+ int32_t (*ic_decap)(struct ieee80211_key *, mblk_t *, int);
+ int32_t (*ic_enmic)(struct ieee80211_key *, mblk_t *, int);
+ int32_t (*ic_demic)(struct ieee80211_key *, mblk_t *, int);
+};
+extern const struct ieee80211_cipher ieee80211_cipher_none;
+
+struct ieee80211_key {
+ uint8_t wk_keylen; /* key length in bytes */
+ uint8_t wk_pad;
+ uint16_t wk_flags;
+ uint8_t wk_key[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
+ ieee80211_keyix wk_keyix; /* h/w key index */
+ ieee80211_keyix wk_rxkeyix; /* optional h/w rx key index */
+ uint64_t wk_keyrsc; /* key receive sequence counter */
+ uint64_t wk_keytsc; /* key transmit sequence counter */
+ const struct ieee80211_cipher *wk_cipher;
+ void *wk_private; /* private cipher state */
+};
+#define wk_txmic wk_key+IEEE80211_KEYBUF_SIZE+0
+#define wk_rxmic wk_key+IEEE80211_KEYBUF_SIZE+8
+
+/*
+ * Crypto state kept in each ieee80211com.
+ */
+struct ieee80211_crypto_state {
+ struct ieee80211_key cs_nw_keys[IEEE80211_KEY_MAX];
+ ieee80211_keyix cs_def_txkey; /* default/group tx key index */
+ uint16_t cs_max_keyix; /* max h/w key index */
+
+ int (*cs_key_alloc)(struct ieee80211com *,
+ const struct ieee80211_key *,
+ ieee80211_keyix *, ieee80211_keyix *);
+ int (*cs_key_delete)(struct ieee80211com *,
+ const struct ieee80211_key *);
+ int (*cs_key_set)(struct ieee80211com *,
+ const struct ieee80211_key *,
+ const uint8_t mac[IEEE80211_ADDR_LEN]);
+ void (*cs_key_update_begin)(struct ieee80211com *);
+ void (*cs_key_update_end)(struct ieee80211com *);
+};
+
+/*
+ * Key update synchronization methods.
+ */
+#define KEY_UPDATE_BEGIN(ic) \
+ (ic)->ic_crypto.cs_key_update_begin(ic)
+#define KEY_UPDATE_END(ic) \
+ (ic)->ic_crypto.cs_key_update_end(ic)
+#define KEY_UNDEFINED(k) \
+ ((k).wk_cipher == &ieee80211_cipher_none)
+
+#define DEV_KEY_ALLOC(ic, k, kix, rkix) \
+ (ic)->ic_crypto.cs_key_alloc(ic, k, kix, rkix)
+#define DEV_KEY_DELETE(ic, k) \
+ (ic)->ic_crypto.cs_key_delete(ic, k)
+#define DEV_KEY_SET(ic, k, m) \
+ (ic)->ic_crypto.cs_key_set(ic, k, m)
+
+#define CIPHER_DETACH(k) \
+ (k)->wk_cipher->ic_detach(k)
+#define CIPHER_ATTACH(k) \
+ (k)->wk_cipher->ic_attach(k)
+
+#define ieee80211_crypto_demic(ic, k, m, force) \
+ (((k)->wk_cipher->ic_miclen > 0) ? \
+ (k)->wk_cipher->ic_demic(k, m, force) : \
+ 1)
+
+#define ieee80211_crypto_enmic(ic, k, m, force) \
+ ((k)->wk_cipher->ic_miclen > 0 ? \
+ (k)->wk_cipher->ic_enmic(k, m, force) : \
+ 1)
+
+void ieee80211_crypto_attach(struct ieee80211com *ic);
+void ieee80211_crypto_detach(struct ieee80211com *ic);
+void ieee80211_crypto_register(const struct ieee80211_cipher *);
+void ieee80211_crypto_unregister(const struct ieee80211_cipher *);
+void ieee80211_crypto_resetkey(struct ieee80211com *, struct ieee80211_key *,
+ ieee80211_keyix);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_CRYPTO_H */
diff --git a/usr/src/uts/common/sys/net80211_proto.h b/usr/src/uts/common/sys/net80211_proto.h
new file mode 100644
index 0000000000..6842798445
--- /dev/null
+++ b/usr/src/uts/common/sys/net80211_proto.h
@@ -0,0 +1,541 @@
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2001 Atsushi Onoe
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifndef _SYS_NET80211_PROTO_H
+#define _SYS_NET80211_PROTO_H
+
+/*
+ * 802.11 protocol definitions
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IEEE80211_ADDR_LEN 6 /* size of 802.11 address */
+#define IEEE80211_ADDR_COPY(dst, src) \
+ ((void) bcopy(src, dst, IEEE80211_ADDR_LEN))
+#define IEEE80211_ADDR_EQ(a1, a2) \
+ (bcmp(a1, a2, IEEE80211_ADDR_LEN) == 0)
+/* is 802.11 address multicast/broadcast? */
+#define IEEE80211_IS_MULTICAST(addr) \
+ ((((uint8_t *)addr)[0]) & 0x01)
+
+/*
+ * Size of an ACK control frame in bytes.
+ */
+#define IEEE80211_ACK_SIZE (2 + 2 + IEEE80211_ADDR_LEN + 4)
+
+#define WME_NUM_AC 4 /* 4 AC categories */
+
+/*
+ * Protocol Physical Layer
+ */
+
+/* XXX not really a mode; there are really multiple PHY's */
+enum ieee80211_phymode {
+ IEEE80211_MODE_AUTO = 0, /* autoselect */
+ IEEE80211_MODE_11A = 1, /* 5GHz, OFDM */
+ IEEE80211_MODE_11B = 2, /* 2GHz, CCK */
+ IEEE80211_MODE_11G = 3, /* 2GHz, OFDM */
+ IEEE80211_MODE_FH = 4, /* 2GHz, GFSK */
+ IEEE80211_MODE_TURBO_A = 5, /* 5GHz, OFDM, 2x clock */
+ IEEE80211_MODE_TURBO_G = 6 /* 2GHz, OFDM, 2x clock */
+};
+#define IEEE80211_MODE_MAX (IEEE80211_MODE_TURBO_G+1)
+
+enum ieee80211_phytype {
+ IEEE80211_T_DS, /* direct sequence spread spectrum */
+ IEEE80211_T_FH, /* frequency hopping */
+ IEEE80211_T_OFDM, /* frequency division multiplexing */
+ IEEE80211_T_TURBO /* high rate OFDM, aka turbo mode */
+};
+#define IEEE80211_T_CCK IEEE80211_T_DS /* more common nomenclature */
+
+enum ieee80211_opmode {
+ IEEE80211_M_STA = 1, /* infrastructure station */
+ IEEE80211_M_IBSS = 0, /* IBSS (adhoc) station */
+ IEEE80211_M_AHDEMO = 3, /* Old lucent compatible adhoc demo */
+ IEEE80211_M_HOSTAP = 6, /* Software Access Point */
+ IEEE80211_M_MONITOR = 8 /* Monitor mode */
+};
+
+/*
+ * 802.11g protection mode.
+ */
+enum ieee80211_protmode {
+ IEEE80211_PROT_NONE = 0, /* no protection */
+ IEEE80211_PROT_CTSONLY = 1, /* CTS to self */
+ IEEE80211_PROT_RTSCTS = 2 /* RTS-CTS */
+};
+
+/*
+ * generic definitions for IEEE 802.11 frames
+ */
+#pragma pack(1)
+struct ieee80211_frame {
+ uint8_t i_fc[2]; /* [0]-protocol version, [1]-type & subtype */
+ uint8_t i_dur[2];
+ uint8_t i_addr1[IEEE80211_ADDR_LEN];
+ uint8_t i_addr2[IEEE80211_ADDR_LEN];
+ uint8_t i_addr3[IEEE80211_ADDR_LEN];
+ uint8_t i_seq[2];
+ /* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
+ /* see below */
+};
+
+struct ieee80211_frame_addr4 {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_addr1[IEEE80211_ADDR_LEN];
+ uint8_t i_addr2[IEEE80211_ADDR_LEN];
+ uint8_t i_addr3[IEEE80211_ADDR_LEN];
+ uint8_t i_seq[2];
+ uint8_t i_addr4[IEEE80211_ADDR_LEN];
+};
+
+/* Start part(LLC and SNAP) of payload of IEEE80211 frame */
+struct ieee80211_llc {
+ /* LLC */
+ uint8_t illc_dsap;
+ uint8_t illc_ssap;
+ uint8_t illc_control;
+ /* SNAP */
+ uint8_t illc_oc[3]; /* protocol ID or organization code */
+ uint16_t illc_ether_type; /* ethernet type */
+};
+
+/*
+ * Management Notification Frame
+ */
+struct ieee80211_mnf {
+ uint8_t mnf_category;
+ uint8_t mnf_action;
+ uint8_t mnf_dialog;
+ uint8_t mnf_status;
+};
+#define IEEE80211_MNF_SETUP_REQ 0
+#define IEEE80211_MNF_SETUP_RESP 1
+#define IEEE80211_MNF_TEARDOWN 2
+
+/*
+ * Control frames.
+ */
+struct ieee80211_frame_min {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_addr1[IEEE80211_ADDR_LEN];
+ uint8_t i_addr2[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_rts {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_ra[IEEE80211_ADDR_LEN];
+ uint8_t i_ta[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_cts {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_ra[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_ack {
+ uint8_t i_fc[2];
+ uint8_t i_dur[2];
+ uint8_t i_ra[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_pspoll {
+ uint8_t i_fc[2];
+ uint8_t i_aid[2];
+ uint8_t i_bssid[IEEE80211_ADDR_LEN];
+ uint8_t i_ta[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_frame_cfend { /* NB: also CF-End+CF-Ack */
+ uint8_t i_fc[2];
+ uint8_t i_dur[2]; /* should be zero */
+ uint8_t i_ra[IEEE80211_ADDR_LEN];
+ uint8_t i_bssid[IEEE80211_ADDR_LEN];
+ /* FCS */
+};
+
+struct ieee80211_tim_ie {
+ uint8_t tim_ie; /* IEEE80211_ELEMID_TIM */
+ uint8_t tim_len;
+ uint8_t tim_count; /* DTIM count */
+ uint8_t tim_period; /* DTIM period */
+ uint8_t tim_bitctl; /* bitmap control */
+ uint8_t tim_bitmap[1]; /* variable-length bitmap */
+};
+
+/*
+ * 802.11i/WPA information element (maximally sized).
+ */
+struct ieee80211_ie_wpa {
+ uint8_t wpa_id; /* IEEE80211_ELEMID_VENDOR */
+ uint8_t wpa_len; /* length in bytes */
+ uint8_t wpa_oui[3]; /* 0x00, 0x50, 0xf2 */
+ uint8_t wpa_type; /* OUI type */
+ uint16_t wpa_version; /* spec revision */
+ uint32_t wpa_mcipher[1]; /* multicast/group key cipher */
+ uint16_t wpa_uciphercnt; /* # pairwise key ciphers */
+ uint32_t wpa_uciphers[8]; /* ciphers */
+ uint16_t wpa_authselcnt; /* authentication selector cnt */
+ uint32_t wpa_authsels[8]; /* selectors */
+ uint16_t wpa_caps; /* 802.11i capabilities */
+ uint16_t wpa_pmkidcnt; /* 802.11i pmkid count */
+ uint16_t wpa_pmkids[8]; /* 802.11i pmkids */
+};
+
+/*
+ * WME AC parameter field
+ */
+struct ieee80211_wme_acparams {
+ uint8_t acp_aci_aifsn;
+ uint8_t acp_logcwminmax;
+ uint16_t acp_txop;
+};
+
+/*
+ * WME Parameter Element
+ */
+struct ieee80211_wme_param {
+ uint8_t wme_id;
+ uint8_t wme_len;
+ uint8_t wme_oui[3];
+ uint8_t wme_oui_type;
+ uint8_t wme_oui_sybtype;
+ uint8_t wme_version;
+ uint8_t wme_qosInfo;
+ uint8_t wme_reserved;
+ struct ieee80211_wme_acparams wme_acParams[WME_NUM_AC];
+};
+#pragma pack()
+
+#define IEEE80211_FC0_VERSION_MASK 0x03
+#define IEEE80211_FC0_VERSION_SHIFT 0
+#define IEEE80211_FC0_VERSION_0 0x00
+#define IEEE80211_FC0_TYPE_MASK 0x0c
+#define IEEE80211_FC0_TYPE_SHIFT 2
+#define IEEE80211_FC0_TYPE_MGT 0x00
+#define IEEE80211_FC0_TYPE_CTL 0x04
+#define IEEE80211_FC0_TYPE_DATA 0x08
+#define IEEE80211_FC0_SUBTYPE_MASK 0xf0
+#define IEEE80211_FC0_SUBTYPE_SHIFT 4
+/* for TYPE_MGT */
+#define IEEE80211_FC0_SUBTYPE_ASSOC_REQ 0x00
+#define IEEE80211_FC0_SUBTYPE_ASSOC_RESP 0x10
+#define IEEE80211_FC0_SUBTYPE_REASSOC_REQ 0x20
+#define IEEE80211_FC0_SUBTYPE_REASSOC_RESP 0x30
+#define IEEE80211_FC0_SUBTYPE_PROBE_REQ 0x40
+#define IEEE80211_FC0_SUBTYPE_PROBE_RESP 0x50
+#define IEEE80211_FC0_SUBTYPE_BEACON 0x80
+#define IEEE80211_FC0_SUBTYPE_ATIM 0x90
+#define IEEE80211_FC0_SUBTYPE_DISASSOC 0xa0
+#define IEEE80211_FC0_SUBTYPE_AUTH 0xb0
+#define IEEE80211_FC0_SUBTYPE_DEAUTH 0xc0
+/* for TYPE_CTL */
+#define IEEE80211_FC0_SUBTYPE_PS_POLL 0xa0
+#define IEEE80211_FC0_SUBTYPE_RTS 0xb0
+#define IEEE80211_FC0_SUBTYPE_CTS 0xc0
+#define IEEE80211_FC0_SUBTYPE_ACK 0xd0
+#define IEEE80211_FC0_SUBTYPE_CF_END 0xe0
+#define IEEE80211_FC0_SUBTYPE_CF_END_ACK 0xf0
+/* for TYPE_DATA (bit combination) */
+#define IEEE80211_FC0_SUBTYPE_DATA 0x00
+#define IEEE80211_FC0_SUBTYPE_CF_ACK 0x10
+#define IEEE80211_FC0_SUBTYPE_CF_POLL 0x20
+#define IEEE80211_FC0_SUBTYPE_CF_ACPL 0x30
+#define IEEE80211_FC0_SUBTYPE_NODATA 0x40
+#define IEEE80211_FC0_SUBTYPE_CFACK 0x50
+#define IEEE80211_FC0_SUBTYPE_CFPOLL 0x60
+#define IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK 0x70
+#define IEEE80211_FC0_SUBTYPE_QOS 0x80
+#define IEEE80211_FC0_SUBTYPE_QOS_NULL 0xc0
+
+#define IEEE80211_FC1_DIR_MASK 0x03
+#define IEEE80211_FC1_DIR_NODS 0x00 /* STA->STA */
+#define IEEE80211_FC1_DIR_TODS 0x01 /* STA->AP */
+#define IEEE80211_FC1_DIR_FROMDS 0x02 /* AP ->STA */
+#define IEEE80211_FC1_DIR_DSTODS 0x03 /* AP ->AP */
+#define IEEE80211_FC1_MORE_FRAG 0x04
+#define IEEE80211_FC1_RETRY 0x08
+#define IEEE80211_FC1_PWR_MGT 0x10
+#define IEEE80211_FC1_MORE_DATA 0x20
+#define IEEE80211_FC1_WEP 0x40
+#define IEEE80211_FC1_ORDER 0x80
+
+#define IEEE80211_SEQ_FRAG_MASK 0x000f
+#define IEEE80211_SEQ_FRAG_SHIFT 0
+#define IEEE80211_SEQ_SEQ_MASK 0xfff0
+#define IEEE80211_SEQ_SEQ_SHIFT 4 /* 4bit frag number */
+
+/* Length of management frame variable-length components in bytes */
+#define IEEE80211_NWID_LEN 32 /* SSID */
+#define IEEE80211_FH_LEN 5 /* FH parameters */
+#define IEEE80211_DS_LEN 1 /* DS parameters */
+#define IEEE80211_IBSS_LEN 4 /* IBSS parameters */
+#define IEEE80211_ERP_LEN 1 /* ERP information */
+
+/*
+ * Length of management frame information elements containing
+ * a variable-length component is:
+ * element_id(1 byte) + length(1 byte) + component(variable bytes)
+ */
+#define IEEE80211_ELEM_LEN(complen) (2 + (complen))
+
+/*
+ * minimal length of beacon/probe response frame elements
+ * time stamp[8] + beacon interval[2] + capability[2]
+ */
+#define IEEE80211_BEACON_ELEM_MIN 12
+/*
+ * Minimal length of authentication frame elements
+ * algorithm[2] + sequence[2] + status[2]
+ */
+#define IEEE80211_AUTH_ELEM_MIN 6
+/*
+ * Minimal length of association response frame elements
+ * capability[2] + status[2] + association ID[2]
+ */
+#define IEEE80211_ASSOC_RESP_ELEM_MIN 6
+
+#define IEEE80211_CAPINFO_ESS 0x0001
+#define IEEE80211_CAPINFO_IBSS 0x0002
+#define IEEE80211_CAPINFO_CF_POLLABLE 0x0004
+#define IEEE80211_CAPINFO_CF_POLLREQ 0x0008
+#define IEEE80211_CAPINFO_PRIVACY 0x0010
+#define IEEE80211_CAPINFO_SHORT_PREAMBLE 0x0020
+#define IEEE80211_CAPINFO_PBCC 0x0040
+#define IEEE80211_CAPINFO_CHNL_AGILITY 0x0080
+/* bits 8-9 are reserved */
+#define IEEE80211_CAPINFO_SHORT_SLOTTIME 0x0400
+#define IEEE80211_CAPINFO_RSN 0x0800
+/* bit 12 is reserved */
+#define IEEE80211_CAPINFO_DSSSOFDM 0x2000
+/* bits 14-15 are reserved */
+
+/*
+ * Management information element payloads.
+ */
+
+enum {
+ IEEE80211_ELEMID_SSID = 0,
+ IEEE80211_ELEMID_RATES = 1,
+ IEEE80211_ELEMID_FHPARMS = 2,
+ IEEE80211_ELEMID_DSPARMS = 3,
+ IEEE80211_ELEMID_CFPARMS = 4,
+ IEEE80211_ELEMID_TIM = 5,
+ IEEE80211_ELEMID_IBSSPARMS = 6,
+ IEEE80211_ELEMID_COUNTRY = 7,
+ IEEE80211_ELEMID_CHALLENGE = 16,
+ /* 17-31 reserved for challenge text extension */
+ IEEE80211_ELEMID_ERP = 42,
+ IEEE80211_ELEMID_RSN = 48,
+ IEEE80211_ELEMID_XRATES = 50,
+ /* 128-129 proprietary elements used by Agere chipsets */
+ IEEE80211_ELEMID_AGERE1 = 128,
+ IEEE80211_ELEMID_AGERE2 = 129,
+ IEEE80211_ELEMID_TPC = 150,
+ IEEE80211_ELEMID_CCKM = 156,
+ IEEE80211_ELEMID_VENDOR = 221 /* vendor private */
+};
+
+#define IEEE80211_CHALLENGE_LEN 128
+
+#define IEEE80211_RATE_BASIC 0x80
+#define IEEE80211_RATE_VAL 0x7f
+
+/* EPR information element flags */
+#define IEEE80211_ERP_NON_ERP_PRESENT 0x01
+#define IEEE80211_ERP_USE_PROTECTION 0x02
+#define IEEE80211_ERP_LONG_PREAMBLE 0x04
+
+#define IEEE80211_AUTH_ALG_OPEN 0x0000
+#define IEEE80211_AUTH_ALG_SHARED 0x0001
+#define IEEE80211_AUTH_ALG_LEAP 0x0080
+
+
+enum {
+ IEEE80211_AUTH_OPEN_REQUEST = 1,
+ IEEE80211_AUTH_OPEN_RESPONSE = 2
+};
+
+enum {
+ IEEE80211_AUTH_SHARED_REQUEST = 1,
+ IEEE80211_AUTH_SHARED_CHALLENGE = 2,
+ IEEE80211_AUTH_SHARED_RESPONSE = 3,
+ IEEE80211_AUTH_SHARED_PASS = 4
+};
+
+/*
+ * Reason codes
+ *
+ * Unlisted codes are reserved
+ */
+enum {
+ IEEE80211_REASON_UNSPECIFIED = 1,
+ IEEE80211_REASON_AUTH_EXPIRE = 2,
+ IEEE80211_REASON_AUTH_LEAVE = 3,
+ IEEE80211_REASON_ASSOC_EXPIRE = 4,
+ IEEE80211_REASON_ASSOC_TOOMANY = 5,
+ IEEE80211_REASON_NOT_AUTHED = 6,
+ IEEE80211_REASON_NOT_ASSOCED = 7,
+ IEEE80211_REASON_ASSOC_LEAVE = 8,
+ IEEE80211_REASON_ASSOC_NOT_AUTHED = 9,
+ IEEE80211_REASON_INVALID_POWER = 10,
+ IEEE80211_REASON_RSN_REQUIRED = 11,
+ IEEE80211_REASON_RSN_INCONSISTENT = 12,
+ IEEE80211_REASON_IE_INVALID = 13,
+ IEEE80211_REASON_MIC_FAILURE = 14
+};
+
+/*
+ * Status codes
+ *
+ * Unlisted codes are reserved and unused
+ */
+enum {
+ IEEE80211_STATUS_SUCCESS = 0,
+ IEEE80211_STATUS_UNSPECIFIED = 1,
+ IEEE80211_STATUS_CAPINFO = 10,
+ IEEE80211_STATUS_NOT_ASSOCED = 11,
+ IEEE80211_STATUS_OTHER = 12,
+ IEEE80211_STATUS_ALG = 13,
+ IEEE80211_STATUS_SEQUENCE = 14,
+ IEEE80211_STATUS_CHALLENGE = 15,
+ IEEE80211_STATUS_TIMEOUT = 16,
+ IEEE80211_STATUS_TOOMANY = 17,
+ IEEE80211_STATUS_BASIC_RATE = 18,
+ IEEE80211_STATUS_SP_REQUIRED = 19,
+ IEEE80211_STATUS_PBCC_REQUIRED = 20,
+ IEEE80211_STATUS_CA_REQUIRED = 21,
+ IEEE80211_STATUS_TOO_MANY_STATIONS = 22,
+ IEEE80211_STATUS_RATES = 23,
+ IEEE80211_STATUS_SHORTSLOT_REQUIRED = 25,
+ IEEE80211_STATUS_DSSSOFDM_REQUIRED = 26
+};
+
+#define IEEE80211_WEP_KEYLEN 5 /* 40bit */
+#define IEEE80211_WEP_IVLEN 3 /* 24bit */
+#define IEEE80211_WEP_KIDLEN 1 /* 1 octet */
+#define IEEE80211_WEP_CRCLEN 4 /* CRC-32 */
+#define IEEE80211_WEP_NKID 4 /* number of key ids */
+
+#define IEEE80211_CRC_LEN 4
+
+/*
+ * Maximum acceptable MTU is defined by 802.11
+ * Min is arbitrarily chosen > IEEE80211_MIN_LEN.
+ */
+#define IEEE80211_MTU_MAX 2304
+#define IEEE80211_MTU_MIN 32
+#define IEEE80211_MTU 1500
+
+#define IEEE80211_MAX_LEN \
+ (sizeof (struct ieee80211_frame_addr4) + \
+ (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN) + \
+ IEEE80211_MTU_MAX + IEEE80211_CRC_LEN)
+#define IEEE80211_ACK_LEN \
+ (sizeof (struct ieee80211_frame_ack) + IEEE80211_CRC_LEN)
+#define IEEE80211_MIN_LEN \
+ (sizeof (struct ieee80211_frame_min) + IEEE80211_CRC_LEN)
+
+/*
+ * The 802.11 spec says at most 2007 stations may be
+ * associated at once. For most AP's this is way more
+ * than is feasible so we use a default of 128. This
+ * number may be overridden by the driver and/or by
+ * user configuration.
+ */
+#define IEEE80211_AID_MAX 2007
+#define IEEE80211_AID_DEF 128
+
+#define IEEE80211_AID(b) ((b) &~ 0xc000)
+
+/*
+ * RTS frame length parameters. The default is specified in
+ * the 802.11 spec as 512; we treat it as implementation-dependent
+ * so it's defined in ieee80211_var.h. The max may be wrong
+ * for jumbo frames.
+ */
+#define IEEE80211_RTS_MIN 1
+#define IEEE80211_RTS_MAX 2346
+
+/*
+ * TX fragmentation parameters. As above for RTS, we treat
+ * default as implementation-dependent so define it elsewhere.
+ */
+#define IEEE80211_FRAG_MIN 256
+#define IEEE80211_FRAG_MAX 2346
+
+/* flags for ieee80211_fix_rate() */
+#define IEEE80211_F_DOSORT 0x00000001 /* sort rate list */
+#define IEEE80211_F_DOFRATE 0x00000002 /* use fixed rate */
+#define IEEE80211_F_DONEGO 0x00000004 /* calc negotiated rate */
+#define IEEE80211_F_DODEL 0x00000008 /* delete ignore rate */
+
+/*
+ * Beacon frames constructed by ieee80211_beacon_alloc
+ * have the following structure filled in so drivers
+ * can update the frame later w/ minimal overhead.
+ */
+struct ieee80211_beacon_offsets {
+ uint16_t *bo_caps; /* capabilities */
+ uint8_t *bo_tim; /* start of atim/dtim */
+ uint8_t *bo_wme; /* start of WME parameters */
+ uint8_t *bo_trailer; /* start of fixed-size trailer */
+ uint16_t bo_tim_len; /* atim/dtim length in bytes */
+ uint16_t bo_trailer_len; /* trailer length in bytes */
+ uint8_t *bo_erp; /* start of ERP element */
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_PROTO_H */
diff --git a/usr/src/uts/intel/Makefile.intel.shared b/usr/src/uts/intel/Makefile.intel.shared
index 2c3f70e909..9804adb9a9 100644
--- a/usr/src/uts/intel/Makefile.intel.shared
+++ b/usr/src/uts/intel/Makefile.intel.shared
@@ -493,6 +493,7 @@ MISC_KMODS += kmech_krb5
MISC_KMODS += krtld
MISC_KMODS += mac
MISC_KMODS += mixer
+MISC_KMODS += net80211
MISC_KMODS += nfs_dlboot
MISC_KMODS += nfssrv
MISC_KMODS += neti
@@ -589,6 +590,7 @@ PCBE_KMODS += p123_pcbe p4_pcbe opteron_pcbe
# MAC-Type Plugin Modules (/kernel/mac)
#
MAC_KMODS += mac_ether
+MAC_KMODS += mac_wifi
#
# 'Devname' Modules (kernel/devname)
diff --git a/usr/src/uts/intel/ath/Makefile b/usr/src/uts/intel/ath/Makefile
index d2b6f4e1d8..39e1bc3f79 100644
--- a/usr/src/uts/intel/ath/Makefile
+++ b/usr/src/uts/intel/ath/Makefile
@@ -41,11 +41,9 @@ UTSBASE = ../..
MODULE = ath
OBJECTS = $(ATH_OBJS:%=$(OBJS_DIR)/%) $(OBJS_DIR)/hal.o
LINTS = $(LINTS_DIR)/ath_aux.ln \
- $(LINTS_DIR)/ath_ieee80211.ln \
$(LINTS_DIR)/ath_main.ln \
$(LINTS_DIR)/ath_osdep.ln \
- $(LINTS_DIR)/ath_rate.ln \
- $(LINTS_DIR)/ath_wificonfig.ln
+ $(LINTS_DIR)/ath_rate.ln
ROOTMODULE = $(ROOT_DRV_DIR)/$(MODULE)
@@ -62,9 +60,9 @@ LINT_TARGET = $(MODULE).lint
INSTALL_TARGET = $(BINARY) $(ROOTMODULE)
#
-# Driver depends on GLD & IP.
+# Driver depends on GLDv3 & wifi kernel support module.
#
-LDFLAGS += -dy -Nmisc/gld -Ndrv/ip
+LDFLAGS += -dy -Nmisc/mac -Nmisc/net80211
#
# For now, disable these lint checks; maintainers should endeavor
diff --git a/usr/src/uts/intel/mac_wifi/Makefile b/usr/src/uts/intel/mac_wifi/Makefile
new file mode 100644
index 0000000000..b9880691dd
--- /dev/null
+++ b/usr/src/uts/intel/mac_wifi/Makefile
@@ -0,0 +1,92 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+#
+# This makefile drives the production of the mac_wifi plugin
+# kernel module.
+#
+
+#
+# Path to the base of the uts directory tree (usually /usr/src/uts).
+#
+UTSBASE = ../..
+
+#
+# Define the module and object file sets.
+#
+MODULE = mac_wifi
+OBJECTS = $(MAC_WIFI_OBJS:%=$(OBJS_DIR)/%)
+LINTS = $(MAC_WIFI_OBJS:%.o=$(LINTS_DIR)/%.ln)
+ROOTMODULE = $(ROOT_MAC_DIR)/$(MODULE)
+
+#
+# Include common rules.
+#
+include $(UTSBASE)/intel/Makefile.intel
+
+#
+# Define targets
+#
+ALL_TARGET = $(BINARY)
+LINT_TARGET = $(MODULE).lint
+INSTALL_TARGET = $(BINARY) $(ROOTMODULE)
+
+#
+# Overrides.
+#
+CFLAGS += $(CCVERBOSE)
+LDFLAGS += -dy -Nmisc/mac
+#
+# STREAMS API limitations force us to turn off these lint checks.
+#
+LINTTAGS += -erroff=E_BAD_PTR_CAST_ALIGN
+LINTTAGS += -erroff=E_PTRDIFF_OVERFLOW
+
+#
+# Default build targets.
+#
+.KEEP_STATE:
+
+def: $(DEF_DEPS)
+
+all: $(ALL_DEPS)
+
+clean: $(CLEAN_DEPS)
+
+clobber: $(CLOBBER_DEPS)
+
+lint: $(LINT_DEPS)
+
+modlintlib: $(MODLINTLIB_DEPS)
+
+clean.lint: $(CLEAN_LINT_DEPS)
+
+install: $(INSTALL_DEPS)
+
+#
+# Include common targets.
+#
+include $(UTSBASE)/intel/Makefile.targ
diff --git a/usr/src/uts/intel/net80211/Makefile b/usr/src/uts/intel/net80211/Makefile
new file mode 100644
index 0000000000..3365320fe7
--- /dev/null
+++ b/usr/src/uts/intel/net80211/Makefile
@@ -0,0 +1,95 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+# ident "%Z%%M% %I% %E% SMI"
+
+#
+# This file makes the atheros driver for an intel system
+#
+# intel architecture dependent
+#
+
+#
+# Path to the base of the uts directory tree (usually /usr/src/uts).
+#
+UTSBASE = ../..
+#
+# Define the module and object file sets.
+#
+MODULE = net80211
+OBJECTS = $(NET80211_OBJS:%=$(OBJS_DIR)/%)
+LINTS = $(NET80211_OBJS:%.o=$(LINTS_DIR)/%.ln)
+ROOTMODULE = $(ROOT_MISC_DIR)/$(MODULE)
+
+#
+# Include common rules.
+#
+include $(UTSBASE)/intel/Makefile.intel
+
+#
+# Define targets
+#
+ALL_TARGET = $(BINARY)
+LINT_TARGET = $(MODULE).lint
+INSTALL_TARGET = $(BINARY) $(ROOTMODULE)
+
+#
+# Overrides
+#
+CFLAGS += $(CCVERBOSE)
+LDFLAGS += -dy -Nmisc/mac -Nmac/mac_wifi -Ndrv/ip
+
+#
+# STREAMS API limitations force us to turn off these lint checks.
+#
+LINTTAGS += -erroff=E_BAD_PTR_CAST_ALIGN
+LINTTAGS += -erroff=E_PTRDIFF_OVERFLOW
+
+#
+# Default build targets.
+#
+.KEEP_STATE:
+
+def: $(DEF_DEPS)
+
+all: $(ALL_DEPS)
+
+clean: $(CLEAN_DEPS)
+
+clobber: $(CLOBBER_DEPS)
+
+lint: $(LINT_DEPS)
+
+modlintlib: $(MODLINTLIB_DEPS)
+
+clean.lint: $(CLEAN_LINT_DEPS)
+
+install: $(INSTALL_DEPS)
+
+#
+# Include common targets.
+#
+include $(UTSBASE)/intel/Makefile.targ
diff --git a/usr/src/uts/intel/os/minor_perm b/usr/src/uts/intel/os/minor_perm
index 582bdecb60..70bee731e6 100644
--- a/usr/src/uts/intel/os/minor_perm
+++ b/usr/src/uts/intel/os/minor_perm
@@ -11,7 +11,6 @@ clone:pcelx 0666 root sys
pcelx:* 0666 root sys
clone:spwr 0666 root sys
spwr:* 0666 root sys
-clone:e1000g 0666 root sys
icmp:icmp 0666 root sys
icmp6:icmp6 0666 root sys
ip:ip 0666 root sys
@@ -122,3 +121,21 @@ scsi_vhci:* 0666 root sys
kssl:* 0666 root sys
lx_ptm:lx_ptmajor 0666 root sys
lx_systrace:* 0644 root sys
+clone:bge 0666 root sys
+clone:rge 0666 root sys
+clone:xge 0666 root sys
+clone:nge 0666 root sys
+clone:e1000g 0666 root sys
+clone:chxge 0666 root sys
+clone:pcn 0666 root sys
+clone:rtls 0666 root sys
+clone:ath 0666 root sys
+bge:* 0666 root sys
+rge:* 0666 root sys
+xge:* 0666 root sys
+nge:* 0666 root sys
+e1000g:* 0666 root sys
+chxge:* 0666 root sys
+pcn:* 0666 root sys
+rtls:* 0666 root sys
+ath:* 0666 root sys
diff --git a/usr/src/uts/sparc/os/minor_perm b/usr/src/uts/sparc/os/minor_perm
index bd165cbef9..3a944da560 100644
--- a/usr/src/uts/sparc/os/minor_perm
+++ b/usr/src/uts/sparc/os/minor_perm
@@ -149,3 +149,20 @@ zfs:* 0600 root sys
zfs:zfs 0666 root sys
scsi_vhci:* 0666 root sys
kssl:* 0666 root sys
+clone:bge 0666 root sys
+clone:rge 0666 root sys
+clone:xge 0666 root sys
+clone:nge 0666 root sys
+clone:e1000g 0666 root sys
+clone:chxge 0666 root sys
+clone:ath 0666 root sys
+clone:vsw 0666 root sys
+clone:vnet 0666 root sys
+bge:* 0666 root sys
+rge:* 0666 root sys
+xge:* 0666 root sys
+nge:* 0666 root sys
+e1000g:* 0666 root sys
+chxge:* 0666 root sys
+vsw:* 0666 root sys
+vnet:* 0666 root sys